summaryrefslogtreecommitdiff
path: root/src/curses/scrollpad.h
diff options
context:
space:
mode:
authorAndrzej Rybczak <electricityispower@gmail.com>2016-12-22 15:25:25 +0100
committerAndrzej Rybczak <electricityispower@gmail.com>2016-12-22 15:25:25 +0100
commit478f4454d8ba90cd450d7ae4ac4fb9e1019e1ed3 (patch)
tree0597c277520eccb0df00029819296541bbc2fa5a /src/curses/scrollpad.h
parent44d343d5a21f1132a5aed7946152d27189cdd623 (diff)
Move ncurses related files to curses directory
Diffstat (limited to 'src/curses/scrollpad.h')
-rw-r--r--src/curses/scrollpad.h82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/curses/scrollpad.h b/src/curses/scrollpad.h
new file mode 100644
index 00000000..1e9b8356
--- /dev/null
+++ b/src/curses/scrollpad.h
@@ -0,0 +1,82 @@
+/***************************************************************************
+ * Copyright (C) 2008-2016 by Andrzej Rybczak *
+ * electricityispower@gmail.com *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef NCMPCPP_SCROLLPAD_H
+#define NCMPCPP_SCROLLPAD_H
+
+#include "window.h"
+#include "strbuffer.h"
+
+namespace NC {
+
+/// Scrollpad is specialized window that holds large portions of text and
+/// supports scrolling if the amount of it is bigger than the window area.
+struct Scrollpad: public Window
+{
+ Scrollpad() { }
+
+ Scrollpad(size_t startx, size_t starty, size_t width, size_t height,
+ const std::string &title, Color color, Border border);
+
+ // override a few Window functions
+ virtual void refresh() override;
+ virtual void scroll(Scroll where) override;
+ virtual void resize(size_t new_width, size_t new_height) override;
+ virtual void clear() override;
+
+ const std::string &buffer();
+
+ void flush();
+ void reset();
+
+ bool setProperties(Color begin, const std::string &s, Color end,
+ size_t flags, size_t id = -2);
+ bool setProperties(Format begin, const std::string &s, Format end,
+ size_t flags, size_t id = -2);
+ void removeProperties(size_t id = -2);
+
+ Scrollpad &operator<<(int n) { return write(n); }
+ Scrollpad &operator<<(long int n) { return write(n); }
+ Scrollpad &operator<<(unsigned int n) { return write(n); }
+ Scrollpad &operator<<(unsigned long int n) { return write(n); }
+ Scrollpad &operator<<(char c) { return write(c); }
+ Scrollpad &operator<<(const char *s) { return write(s); }
+ Scrollpad &operator<<(const std::string &s) { return write(s); }
+ Scrollpad &operator<<(Color color) { return write(color); }
+ Scrollpad &operator<<(Format format) { return write(format); }
+
+private:
+ template <typename ItemT>
+ Scrollpad &write(ItemT &&item)
+ {
+ m_buffer << std::forward<ItemT>(item);
+ return *this;
+ }
+
+ Buffer m_buffer;
+
+ size_t m_beginning;
+ size_t m_real_height;
+};
+
+}
+
+#endif // NCMPCPP_SCROLLPAD_H
+