]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/scrollsub/scrollsub.cpp
do *NOT* make the window of the size of its parent initially, fixes missing EVT_SIZE...
[wxWidgets.git] / samples / scrollsub / scrollsub.cpp
index 954eb7e5cc3adadfc856f96d8788c37aaace8a89..c53f93744bf557e2fe1739b02feac527a214a02b 100644 (file)
@@ -48,18 +48,56 @@ private:
     DECLARE_EVENT_TABLE()
 };
 
     DECLARE_EVENT_TABLE()
 };
 
+// MyTopLabels
+
+class MyTopLabels: public wxWindow
+{
+public:
+    MyTopLabels() {}
+    MyTopLabels( wxScrolledWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size );
+   
+    void OnPaint( wxPaintEvent &event );
+    
+private:
+    wxScrolledWindow   *m_owner;
+    
+    DECLARE_DYNAMIC_CLASS(MyTopLabels)
+    DECLARE_EVENT_TABLE()
+};
+
+// MyRightLabels
+
+class MyRightLabels: public wxWindow
+{
+public:
+    MyRightLabels() {}
+    MyRightLabels( wxScrolledWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size );
+   
+    void OnPaint( wxPaintEvent &event );
+    
+private:
+    wxScrolledWindow   *m_owner;
+    
+    DECLARE_DYNAMIC_CLASS(MyRightLabels)
+    DECLARE_EVENT_TABLE()
+};
+
 // MyCanvas
 
 class MyCanvas: public wxPanel
 {
 public:
     MyCanvas() {}
 // MyCanvas
 
 class MyCanvas: public wxPanel
 {
 public:
     MyCanvas() {}
-    MyCanvas( wxScrolledWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size );
+    MyCanvas( wxScrolledWindow *parent, MyTopLabels *top, MyRightLabels *right,
+              wxWindowID id, const wxPoint &pos, const wxSize &size );
     ~MyCanvas();
     void OnPaint( wxPaintEvent &event );
     ~MyCanvas();
     void OnPaint( wxPaintEvent &event );
+    void ScrollWindow( int dx, int dy, const wxRect *rect );
 
 private:
     wxScrolledWindow   *m_owner;
 
 private:
     wxScrolledWindow   *m_owner;
+    MyTopLabels        *m_topLabels;
+    MyRightLabels      *m_rightLabels;
 
     DECLARE_DYNAMIC_CLASS(MyCanvas)
     DECLARE_EVENT_TABLE()
 
     DECLARE_DYNAMIC_CLASS(MyCanvas)
     DECLARE_EVENT_TABLE()
@@ -74,6 +112,7 @@ public:
 
     void OnAbout( wxCommandEvent &event );
     void OnQuit( wxCommandEvent &event );
 
     void OnAbout( wxCommandEvent &event );
     void OnQuit( wxCommandEvent &event );
+    void OnFullScreen( wxCommandEvent &event );
 
     wxScrolledWindow   *m_scrolled;
     wxTextCtrl         *m_log;
 
     wxScrolledWindow   *m_scrolled;
     wxTextCtrl         *m_log;
@@ -107,7 +146,10 @@ MyScrolledWindow::MyScrolledWindow( wxWindow *parent, wxWindowID id,
                     const wxPoint &pos, const wxSize &size )
         : wxScrolledWindow( parent, id, pos, size, wxSUNKEN_BORDER, "test canvas" )
 {
                     const wxPoint &pos, const wxSize &size )
         : wxScrolledWindow( parent, id, pos, size, wxSUNKEN_BORDER, "test canvas" )
 {
-    m_canvas = new MyCanvas( this, -1, wxDefaultPosition, wxDefaultSize );
+    MyTopLabels *top = new MyTopLabels( this, -1, wxDefaultPosition, wxSize(-1,25) );
+    MyRightLabels *right = new MyRightLabels( this, -1, wxDefaultPosition, wxSize(60,-1) );
+
+    m_canvas = new MyCanvas( this, top, right, -1, wxDefaultPosition, wxDefaultSize );
     
     SetTargetWindow( m_canvas );
 
     
     SetTargetWindow( m_canvas );
 
@@ -115,13 +157,22 @@ MyScrolledWindow::MyScrolledWindow( wxWindow *parent, wxWindowID id,
   
     SetCursor( wxCursor( wxCURSOR_HAND ) );
     
   
     SetCursor( wxCursor( wxCURSOR_HAND ) );
     
+    wxBoxSizer *mainsizer = new wxBoxSizer( wxVERTICAL );
     
     
-    wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
+    wxBoxSizer *topsizer = new wxBoxSizer( wxHORIZONTAL );
+    topsizer->Add( 60,25 );
+    topsizer->Add( top, 1 );
     
     
-    topsizer->Add( m_canvas, 1, wxEXPAND|wxALL, 30 );
+    mainsizer->Add( topsizer, 0, wxEXPAND );
+    
+    wxBoxSizer *middlesizer = new wxBoxSizer( wxHORIZONTAL );
+    middlesizer->Add( right, 0, wxEXPAND );
+    middlesizer->Add( m_canvas, 1, wxEXPAND );
+    
+    mainsizer->Add( middlesizer, 1, wxEXPAND );
 
     SetAutoLayout( TRUE );
 
     SetAutoLayout( TRUE );
-    SetSizer( topsizer );
+    SetSizer( mainsizer );
 }
 
 MyScrolledWindow::~MyScrolledWindow()
 }
 
 MyScrolledWindow::~MyScrolledWindow()
@@ -132,12 +183,63 @@ void MyScrolledWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
 {
     wxPaintDC dc( this );
 
 {
     wxPaintDC dc( this );
 
+/*
     wxSize size( GetClientSize() );
     
     long w,h;
     dc.GetTextExtent( wxT("Headline"), &w, &h );
 
     dc.DrawText( wxT("Headline"), long (size.x / 2 - w / 2), 10 );
     wxSize size( GetClientSize() );
     
     long w,h;
     dc.GetTextExtent( wxT("Headline"), &w, &h );
 
     dc.DrawText( wxT("Headline"), long (size.x / 2 - w / 2), 10 );
+*/
+}
+
+// MyTopLabels
+
+IMPLEMENT_DYNAMIC_CLASS(MyTopLabels,wxWindow)
+
+BEGIN_EVENT_TABLE(MyTopLabels, wxWindow)
+  EVT_PAINT(      MyTopLabels::OnPaint)
+END_EVENT_TABLE()
+
+MyTopLabels::MyTopLabels( wxScrolledWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size )
+  : wxWindow( parent, id, pos, size )
+{
+    m_owner = parent;
+}
+
+void MyTopLabels::OnPaint( wxPaintEvent &event )
+{
+    wxPaintDC dc(this);
+    m_owner->PrepareDC( dc );
+    dc.DrawText( "Column 1", 5, 5 );
+    dc.DrawText( "Column 2", 105, 5 );
+    dc.DrawText( "Column 3", 205, 5 );
+}
+
+// MyRightLabels
+
+IMPLEMENT_DYNAMIC_CLASS(MyRightLabels,wxWindow)
+
+BEGIN_EVENT_TABLE(MyRightLabels, wxWindow)
+  EVT_PAINT(      MyRightLabels::OnPaint)
+END_EVENT_TABLE()
+
+MyRightLabels::MyRightLabels( wxScrolledWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size )
+  : wxWindow( parent, id, pos, size )
+{
+    m_owner = parent;
+}
+
+void MyRightLabels::OnPaint( wxPaintEvent &event )
+{
+    wxPaintDC dc(this);
+    m_owner->PrepareDC( dc );
+    dc.DrawText( "Row 1", 5, 5 );
+    dc.DrawText( "Row 2", 5, 30 );
+    dc.DrawText( "Row 3", 5, 55 );
+    dc.DrawText( "Row 4", 5, 80 );
+    dc.DrawText( "Row 5", 5, 105 );
+    dc.DrawText( "Row 6", 5, 130 );
 }
 
 // MyCanvas
 }
 
 // MyCanvas
@@ -148,16 +250,21 @@ BEGIN_EVENT_TABLE(MyCanvas, wxPanel)
   EVT_PAINT(      MyCanvas::OnPaint)
 END_EVENT_TABLE()
 
   EVT_PAINT(      MyCanvas::OnPaint)
 END_EVENT_TABLE()
 
-MyCanvas::MyCanvas( wxScrolledWindow *parent, wxWindowID id,
-                    const wxPoint &pos, const wxSize &size )
+MyCanvas::MyCanvas( wxScrolledWindow *parent, MyTopLabels *top, MyRightLabels *right,
+    wxWindowID id, const wxPoint &pos, const wxSize &size )
         : wxPanel( parent, id, pos, size, wxSUNKEN_BORDER, "test canvas" )
 {
     m_owner = parent;
         : wxPanel( parent, id, pos, size, wxSUNKEN_BORDER, "test canvas" )
 {
     m_owner = parent;
+    m_topLabels = top;
+    m_rightLabels = right;
     
     (void)new wxButton( this, -1, "Hallo I", wxPoint(0,50), wxSize(100,25) );
     (void)new wxButton( this, -1, "Hallo II", wxPoint(200,50), wxSize(100,25) );
     
     (void)new wxButton( this, -1, "Hallo I", wxPoint(0,50), wxSize(100,25) );
     (void)new wxButton( this, -1, "Hallo II", wxPoint(200,50), wxSize(100,25) );
+    
+    (void)new wxTextCtrl( this, -1, "Text I", wxPoint(0,100), wxSize(100,25) );
+    (void)new wxTextCtrl( this, -1, "Text II", wxPoint(200,100), wxSize(100,25) );
 
 
-    SetBackgroundColour( *wxWHITE );
+    SetBackgroundColour( "WHEAT" );
   
     SetCursor( wxCursor( wxCURSOR_IBEAM ) );
 }
   
     SetCursor( wxCursor( wxCURSOR_IBEAM ) );
 }
@@ -198,13 +305,13 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
     if ((0+100-scroll_x > 0) && (0+25-scroll_y > 0) &&
         (0-scroll_x < size_x) && (0-scroll_y < size_y))
     {
     if ((0+100-scroll_x > 0) && (0+25-scroll_y > 0) &&
         (0-scroll_x < size_x) && (0-scroll_y < size_y))
     {
-        // Has the region an screen been exposed?
-       if (IsExposed(0,0,100,25))
-       {
-           wxLogMessage( "Redraw first cell" );
+        // Has the region on screen been exposed?
+           if (IsExposed(0,0,100,25))
+           {
+               wxLogMessage( wxT("Redraw first cell") );
             dc.DrawRectangle( 0, 0, 100, 25 );
             dc.DrawRectangle( 0, 0, 100, 25 );
-           dc.DrawText( "First Cell", 5, 5 );
-       }
+               dc.DrawText( "First Cell", 5, 5 );
+           }
     }
     
     
     }
     
     
@@ -213,28 +320,36 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
     if ((200+100-scroll_x > 0) && (0+25-scroll_y > 0) &&
         (200-scroll_x < size_x) && (0-scroll_y < size_y))
     {
     if ((200+100-scroll_x > 0) && (0+25-scroll_y > 0) &&
         (200-scroll_x < size_x) && (0-scroll_y < size_y))
     {
-        // Has the region an screen been exposed?
-       if (IsExposed(200,0,100,25))
-       {
-           wxLogMessage( "Redraw second cell" );
+        // Has the region on screen been exposed?
+           if (IsExposed(200,0,100,25))
+           {
+               wxLogMessage( wxT("Redraw second cell") );
             dc.DrawRectangle( 200, 0, 100, 25 );
             dc.DrawRectangle( 200, 0, 100, 25 );
-           dc.DrawText( "Second Cell", 205, 5 );
-       }
+               dc.DrawText( "Second Cell", 205, 5 );
+           }
     }
     
 }
 
     }
     
 }
 
+void MyCanvas::ScrollWindow( int dx, int dy, const wxRect *rect )
+{
+    wxPanel::ScrollWindow( dx, dy, rect );
+    m_topLabels->ScrollWindow( dx, 0, rect );
+    m_rightLabels->ScrollWindow( 0, dy, rect );
+}
 
 // MyFrame
 
 const int ID_QUIT  = 108;
 
 // MyFrame
 
 const int ID_QUIT  = 108;
-const int ID_ABOUT = 109;
+const int ID_FULL  = 109;
+const int ID_ABOUT = 110;
 
 IMPLEMENT_DYNAMIC_CLASS( MyFrame, wxFrame )
 
 BEGIN_EVENT_TABLE(MyFrame,wxFrame)
   EVT_MENU    (ID_ABOUT, MyFrame::OnAbout)
   EVT_MENU    (ID_QUIT,  MyFrame::OnQuit)
 
 IMPLEMENT_DYNAMIC_CLASS( MyFrame, wxFrame )
 
 BEGIN_EVENT_TABLE(MyFrame,wxFrame)
   EVT_MENU    (ID_ABOUT, MyFrame::OnAbout)
   EVT_MENU    (ID_QUIT,  MyFrame::OnQuit)
+  EVT_MENU    (ID_FULL,  MyFrame::OnFullScreen)
 END_EVENT_TABLE()
 
 MyFrame::MyFrame()
 END_EVENT_TABLE()
 
 MyFrame::MyFrame()
@@ -242,7 +357,8 @@ MyFrame::MyFrame()
                   wxPoint(20,20), wxSize(470,500) )
 {
     wxMenu *file_menu = new wxMenu();
                   wxPoint(20,20), wxSize(470,500) )
 {
     wxMenu *file_menu = new wxMenu();
-    file_menu->Append( ID_ABOUT, "&About..");
+    file_menu->Append( ID_ABOUT, "&About...");
+    file_menu->Append( ID_FULL, "&Full screen on/off");
     file_menu->Append( ID_QUIT, "E&xit\tAlt-X");
 
     wxMenuBar *menu_bar = new wxMenuBar();
     file_menu->Append( ID_QUIT, "E&xit\tAlt-X");
 
     wxMenuBar *menu_bar = new wxMenuBar();
@@ -254,7 +370,7 @@ MyFrame::MyFrame()
     int widths[] = { -1, 100 };
     SetStatusWidths( 2, widths );
 
     int widths[] = { -1, 100 };
     SetStatusWidths( 2, widths );
 
-    m_scrolled = new MyScrolledWindow( this, -1, wxPoint(0,0), wxSize(100,100) );
+    m_scrolled = new MyScrolledWindow( this, -1, wxDefaultPosition, wxSize(100,100) );
     m_scrolled->SetScrollbars( 10, 10, 50, 100 );
   
     m_log = new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,0), wxSize(100,100), wxTE_MULTILINE );
     m_scrolled->SetScrollbars( 10, 10, 50, 100 );
   
     m_log = new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,0), wxSize(100,100), wxTE_MULTILINE );
@@ -262,7 +378,6 @@ MyFrame::MyFrame()
     delete old_log;
     
     wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
     delete old_log;
     
     wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
-    
     topsizer->Add( m_scrolled, 1, wxEXPAND );
     topsizer->Add( m_log, 0, wxEXPAND );
 
     topsizer->Add( m_scrolled, 1, wxEXPAND );
     topsizer->Add( m_log, 0, wxEXPAND );
 
@@ -275,6 +390,11 @@ void MyFrame::OnQuit( wxCommandEvent &WXUNUSED(event) )
   Close( TRUE );
 }
 
   Close( TRUE );
 }
 
+void MyFrame::OnFullScreen( wxCommandEvent &WXUNUSED(event) )
+{
+   ShowFullScreen( !IsFullScreen(), wxFULLSCREEN_NOBORDER|wxFULLSCREEN_NOCAPTION );
+}
+
 void MyFrame::OnAbout( wxCommandEvent &WXUNUSED(event) )
 {
   (void)wxMessageBox( "wxScroll demo II\n"
 void MyFrame::OnAbout( wxCommandEvent &WXUNUSED(event) )
 {
   (void)wxMessageBox( "wxScroll demo II\n"