| /*************************************************************************** |
| window.h |
| ------------------- |
| begin : Thu Jul 04 2002 |
| copyright : (C) 2002 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 <curses.h> |
| |
| class Form; |
| |
| class Window |
| { |
| public: |
| |
| Window() : m_visible( false ), m_window(0) {}; |
| virtual ~Window() |
| { |
| hide(); |
| } |
| |
| //create window and display it |
| virtual void show( int x, int y, int width, int height ) |
| { |
| if( m_window ) return; |
| |
| m_window = newwin( height, width, y, x ); |
| clear(); |
| refresh(); |
| |
| m_visible = true; |
| } |
| |
| //hide window and destroy it |
| virtual void hide() |
| { |
| if( ! m_window ) return; |
| |
| clear(); |
| refresh(); |
| delwin( m_window ); |
| |
| m_window = 0; |
| |
| m_visible = false; |
| } |
| |
| //is the window currently visible? |
| virtual bool visible() |
| { |
| return m_visible; |
| } |
| |
| //refresh window |
| virtual void refresh() |
| { |
| if( m_window ) wrefresh( m_window ); |
| } |
| |
| //clear the content of the window |
| virtual void clear() |
| { |
| if( m_window ) wclear( m_window ); |
| } |
| |
| //move and resize window |
| virtual void resize( int x, int y, int width, int height ) |
| { |
| if( ! m_window ) return; |
| wresize( m_window, height, width ); |
| mvwin( m_window, y, x ); |
| } |
| |
| //return current window width |
| virtual int width() |
| { |
| if( ! m_window ) return 0; |
| int width, height; |
| getmaxyx( m_window, height, width ); |
| return width; |
| } |
| |
| //return current window height |
| virtual int height() |
| { |
| if( ! m_window ) return 0; |
| int width, height; |
| getmaxyx( m_window, height, width ); |
| return height; |
| } |
| |
| //return current distance to left screen edge |
| virtual int left() |
| { |
| if( ! m_window ) return 0; |
| int x, y; |
| getbegyx( m_window, y, x ); |
| return x; |
| } |
| |
| //return current distance to top screen edge |
| virtual int top() |
| { |
| if( ! m_window ) return 0; |
| int x, y; |
| getbegyx( m_window, y, x ); |
| return y; |
| } |
| |
| //return current cursor position on the x-axis |
| virtual int x() |
| { |
| if( ! m_window ) return 0; |
| int x, y; |
| getyx( m_window, y, x ); |
| return x; |
| } |
| |
| //return current cursor position on the y-axis |
| virtual int y() |
| { |
| if( ! m_window ) return 0; |
| int x, y; |
| getyx( m_window, y, x ); |
| return y; |
| } |
| |
| //set current cursor x position |
| virtual void setX( int new_x ) |
| { |
| if( ! m_window ) return; |
| wmove( m_window, y(), new_x ); |
| } |
| |
| //set current cursor y position |
| virtual void setY( int new_y ) |
| { |
| if( ! m_window ) return; |
| wmove( m_window, new_y, x() ); |
| } |
| |
| //set current cursor position |
| virtual void setXY( int new_x, int new_y ) |
| { |
| setX( new_x ); |
| setY( new_y ); |
| } |
| |
| //print some text to the window |
| virtual void print( char* text, int new_x = -1, int new_y = -1 ) |
| { |
| if( ! m_window ) return; |
| if( new_x <= -1 ) |
| new_x = x(); |
| if( new_y <= -1 ) |
| new_y = y(); |
| |
| mvwaddstr( m_window, new_y, new_x, text ); |
| } |
| |
| //print a char to the window |
| virtual void print( char text, int new_x = -1, int new_y = -1 ) |
| { |
| if( ! m_window ) return; |
| if( new_x <= -1 ) |
| new_x = x(); |
| if( new_y <= -1 ) |
| new_y = y(); |
| |
| mvwaddch( m_window, new_y, new_x, text ); |
| } |
| |
| protected: |
| friend class SubWindow; |
| friend class Form; |
| bool m_visible; |
| WINDOW* m_window; |
| |
| }; |
| |
| class SubWindow : public Window |
| { |
| public: |
| SubWindow( Window* parent ) : Window(), m_parent( parent ) {} |
| ~SubWindow() |
| { |
| hide(); |
| } |
| |
| //return parent window |
| Window* parent() |
| { |
| return m_parent; |
| } |
| |
| //create window and display it |
| virtual void show( int x, int y, int width, int height ) |
| { |
| if( m_window ) return; |
| |
| m_window = derwin( m_parent -> m_window, height, width, y, x ); |
| clear(); |
| refresh(); |
| |
| m_visible = true; |
| } |
| |
| private: |
| friend class Form; |
| Window* m_parent; |
| |
| }; |
| |
| #endif |