Move ncurses related files to curses directory
[ncmpcpp.git] / src / curses / scrollpad.h
blob1e9b835644236b6137dd1b5582b540306a463287
1 /***************************************************************************
2 * Copyright (C) 2008-2016 by Andrzej Rybczak *
3 * electricityispower@gmail.com *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
19 ***************************************************************************/
21 #ifndef NCMPCPP_SCROLLPAD_H
22 #define NCMPCPP_SCROLLPAD_H
24 #include "window.h"
25 #include "strbuffer.h"
27 namespace NC {
29 /// Scrollpad is specialized window that holds large portions of text and
30 /// supports scrolling if the amount of it is bigger than the window area.
31 struct Scrollpad: public Window
33 Scrollpad() { }
35 Scrollpad(size_t startx, size_t starty, size_t width, size_t height,
36 const std::string &title, Color color, Border border);
38 // override a few Window functions
39 virtual void refresh() override;
40 virtual void scroll(Scroll where) override;
41 virtual void resize(size_t new_width, size_t new_height) override;
42 virtual void clear() override;
44 const std::string &buffer();
46 void flush();
47 void reset();
49 bool setProperties(Color begin, const std::string &s, Color end,
50 size_t flags, size_t id = -2);
51 bool setProperties(Format begin, const std::string &s, Format end,
52 size_t flags, size_t id = -2);
53 void removeProperties(size_t id = -2);
55 Scrollpad &operator<<(int n) { return write(n); }
56 Scrollpad &operator<<(long int n) { return write(n); }
57 Scrollpad &operator<<(unsigned int n) { return write(n); }
58 Scrollpad &operator<<(unsigned long int n) { return write(n); }
59 Scrollpad &operator<<(char c) { return write(c); }
60 Scrollpad &operator<<(const char *s) { return write(s); }
61 Scrollpad &operator<<(const std::string &s) { return write(s); }
62 Scrollpad &operator<<(Color color) { return write(color); }
63 Scrollpad &operator<<(Format format) { return write(format); }
65 private:
66 template <typename ItemT>
67 Scrollpad &write(ItemT &&item)
69 m_buffer << std::forward<ItemT>(item);
70 return *this;
73 Buffer m_buffer;
75 size_t m_beginning;
76 size_t m_real_height;
81 #endif // NCMPCPP_SCROLLPAD_H