summaryrefslogtreecommitdiff
path: root/src/window.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/window.h')
-rw-r--r--src/window.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/src/window.h b/src/window.h
new file mode 100644
index 0000000..fb36b08
--- /dev/null
+++ b/src/window.h
@@ -0,0 +1,142 @@
+/***************************************************************************
+ window.h
+ -------------------
+ begin : Thu Jul 04 2002
+ copyright : (C) 2002 - 2012 by Roland Riegel
+ email : feedback@roland-riegel.de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef WINDOW_H
+#define WINDOW_H
+
+#include <ostream>
+#include <streambuf>
+#include <string>
+
+#include <curses.h>
+#undef clear
+#undef erase
+#undef refresh
+
+class Form;
+
+class Window
+{
+ public:
+ class WindowStreamBuf : public std::basic_streambuf<char>
+ {
+ public:
+ WindowStreamBuf(Window& window);
+ ~WindowStreamBuf();
+
+ protected:
+ std::streamsize xsputn(const char_type* str, std::streamsize n);
+ int_type overflow(int_type c = traits_type::eof());
+
+ private:
+ Window& m_window;
+ };
+
+ class WindowStream : public std::basic_ostream<char>
+ {
+ public:
+ WindowStream(Window& window);
+ ~WindowStream();
+ };
+
+ Window();
+ virtual ~Window();
+
+ // create window and display it
+ virtual void show(int x, int y, int width, int height);
+
+ // hide window and destroy it
+ virtual void hide();
+
+ // is the window currently visible?
+ virtual bool isVisible();
+
+ // refresh window
+ virtual void refresh();
+
+ // clear the content of the window
+ virtual void clear();
+
+ // move and resize window
+ virtual void resize(int x, int y, int width, int height);
+
+ // return current window width
+ virtual int getWidth();
+
+ // return current window height
+ virtual int getHeight();
+
+ // return current distance to left screen edge
+ virtual int getLeft();
+
+ // return current distance to top screen edge
+ virtual int getTop();
+
+ // return current cursor position on the x-axis
+ virtual int getX();
+
+ // return current cursor position on the y-axis
+ virtual int getY();
+
+ // set current cursor x position
+ virtual void setX(int new_x);
+
+ // set current cursor y position
+ virtual void setY(int new_y);
+
+ // set current cursor position
+ virtual void setXY(int new_x, int new_y);
+
+ // print some text to the window
+ virtual void print(const std::string& text, int new_x = -1, int new_y = -1);
+
+ // print a char to the window
+ virtual void print(char text, int new_x = -1, int new_y = -1);
+
+ // print via stream to the window
+ virtual WindowStream& print(int x = -1, int y = -1);
+
+ protected:
+ friend class SubWindow;
+ friend class Form;
+
+ bool m_visible;
+ WINDOW* m_window;
+
+ WindowStream m_stream;
+};
+
+class SubWindow : public Window
+{
+ public:
+ SubWindow( Window* parent );
+ ~SubWindow();
+
+ // return parent window
+ Window* getParent();
+
+ // create window and display it
+ virtual void show(int x, int y, int width, int height);
+
+ private:
+ friend class Form;
+
+ Window* m_parent;
+};
+
+#endif
+