]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/splitter/splitter.cpp
added workaround for GTK+ focus_out bug (and removed Vaclav's mouse capture stack...
[wxWidgets.git] / samples / splitter / splitter.cpp
index a4f8497aad44379e77a9b0b7a514795a8089a6cc..2c956b311ec35a0404898f0ff0f94e260999f87f 100644 (file)
@@ -35,8 +35,9 @@ public:
 class MySplitterWindow : public wxSplitterWindow
 {
 public:
 class MySplitterWindow : public wxSplitterWindow
 {
 public:
-  MySplitterWindow(wxFrame *parent, wxWindowID id) 
-    : wxSplitterWindow(parent, id, wxDefaultPosition, wxDefaultSize, wxSP_3D | wxSP_LIVE_UPDATE)
+  MySplitterWindow(wxFrame *parent, wxWindowID id)
+    : wxSplitterWindow(parent, id, wxDefaultPosition, wxDefaultSize,
+                       wxSP_3D | wxSP_LIVE_UPDATE | wxCLIP_CHILDREN)
   {
     m_frame = parent;
   }
   {
     m_frame = parent;
   }
@@ -45,14 +46,14 @@ public:
   {
     if ( !wxSplitterWindow::OnSashPositionChange(newSashPosition) )
       return FALSE;
   {
     if ( !wxSplitterWindow::OnSashPositionChange(newSashPosition) )
       return FALSE;
-    
+
     wxString str;
     str.Printf( _T("Sash position = %d"), newSashPosition);
     m_frame->SetStatusText(str);
 
     return TRUE;
   }
     wxString str;
     str.Printf( _T("Sash position = %d"), newSashPosition);
     m_frame->SetStatusText(str);
 
     return TRUE;
   }
-  
+
 private:
   wxFrame *m_frame;
 };
 private:
   wxFrame *m_frame;
 };
@@ -78,13 +79,11 @@ public:
 private:
   void UpdatePosition();
 
 private:
   void UpdatePosition();
 
-  wxMenu*    fileMenu;
-  wxMenuBar*  menuBar;
-  MyCanvas*  m_leftCanvas;
-  MyCanvas*  m_rightCanvas;
+  wxScrolledWindow *m_left, *m_right;
+
   MySplitterWindow* m_splitter;
 
   MySplitterWindow* m_splitter;
 
-DECLARE_EVENT_TABLE()
+  DECLARE_EVENT_TABLE()
 };
 
 class MyCanvas: public wxScrolledWindow
 };
 
 class MyCanvas: public wxScrolledWindow
@@ -126,7 +125,7 @@ bool MyApp::OnInit(void)
 
   // Show the frame
   frame->Show(TRUE);
 
   // Show the frame
   frame->Show(TRUE);
-  
+
   SetTopWindow(frame);
 
   return TRUE;
   SetTopWindow(frame);
 
   return TRUE;
@@ -145,13 +144,15 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
 END_EVENT_TABLE()
 
 // My frame constructor
 END_EVENT_TABLE()
 
 // My frame constructor
-MyFrame::MyFrame(wxFrame* frame, const wxString& title, const wxPoint& pos, const wxSize& size):
-    wxFrame(frame, SPLITTER_FRAME, title, pos, size)
+MyFrame::MyFrame(wxFrame* frame, const wxString& title,
+                 const wxPoint& pos, const wxSize& size)
+       : wxFrame(frame, SPLITTER_FRAME, title, pos, size,
+                 wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE)
 {
   CreateStatusBar(2);
 
   // Make a menubar
 {
   CreateStatusBar(2);
 
   // Make a menubar
-  fileMenu = new wxMenu;
+  wxMenu *fileMenu = new wxMenu;
   fileMenu->Append(SPLIT_VERTICAL, "Split &Vertically\tCtrl-V", "Split vertically");
   fileMenu->Append(SPLIT_HORIZONTAL, "Split &Horizontally\tCtrl-H", "Split horizontally");
   fileMenu->Append(SPLIT_UNSPLIT, "&Unsplit\tCtrl-U", "Unsplit");
   fileMenu->Append(SPLIT_VERTICAL, "Split &Vertically\tCtrl-V", "Split vertically");
   fileMenu->Append(SPLIT_HORIZONTAL, "Split &Horizontally\tCtrl-H", "Split horizontally");
   fileMenu->Append(SPLIT_UNSPLIT, "&Unsplit\tCtrl-U", "Unsplit");
@@ -160,28 +161,35 @@ MyFrame::MyFrame(wxFrame* frame, const wxString& title, const wxPoint& pos, cons
   fileMenu->AppendSeparator();
   fileMenu->Append(SPLIT_QUIT, "E&xit\tAlt-X", "Exit");
 
   fileMenu->AppendSeparator();
   fileMenu->Append(SPLIT_QUIT, "E&xit\tAlt-X", "Exit");
 
-  menuBar = new wxMenuBar;
+  wxMenuBar *menuBar = new wxMenuBar;
   menuBar->Append(fileMenu, "&File");
 
   SetMenuBar(menuBar);
 
   m_splitter = new MySplitterWindow(this, SPLITTER_WINDOW);
   menuBar->Append(fileMenu, "&File");
 
   SetMenuBar(menuBar);
 
   m_splitter = new MySplitterWindow(this, SPLITTER_WINDOW);
-  
-  wxSize sz( m_splitter->GetSize() );
-//  wxLogMessage( "Initial splitter size: %d %d\n", (int)sz.x, (int)sz.y );
-
-  m_leftCanvas = new MyCanvas(m_splitter, CANVAS1, wxPoint(0, 0), wxSize(400, 400), "Test1" );
-  m_leftCanvas->SetBackgroundColour(*wxRED);
-  m_leftCanvas->SetScrollbars(20, 20, 50, 50);
-  m_leftCanvas->SetCursor(wxCursor(wxCURSOR_MAGNIFIER));
-
-  m_rightCanvas = new MyCanvas(m_splitter, CANVAS2, wxPoint(0, 0), wxSize(400, 400), "Test2" );
-  m_rightCanvas->SetBackgroundColour(*wxCYAN);
-  m_rightCanvas->SetScrollbars(20, 20, 50, 50);
-//  m_rightCanvas->Show(FALSE);
-
-  m_splitter->SplitVertically(m_leftCanvas,m_rightCanvas, 40 );
-//  m_splitter->Initialize(m_leftCanvas);
+
+#if 1
+  m_left = new MyCanvas(m_splitter, CANVAS1, wxPoint(0, 0), wxSize(400, 400), "Test1" );
+  m_left->SetBackgroundColour(*wxRED);
+  m_left->SetScrollbars(20, 20, 50, 50);
+  m_left->SetCursor(wxCursor(wxCURSOR_MAGNIFIER));
+
+  m_right = new MyCanvas(m_splitter, CANVAS2, wxPoint(0, 0), wxSize(400, 400), "Test2" );
+  m_right->SetBackgroundColour(*wxCYAN);
+  m_right->SetScrollbars(20, 20, 50, 50);
+#else // for testing kbd navigation inside the splitter
+  m_left = new wxTextCtrl(m_splitter, -1, "first text");
+  m_right = new wxTextCtrl(m_splitter, -1, "second text");
+#endif
+
+  // you can also do this to start with a single window
+#if 0
+  m_right->Show(FALSE);
+  m_splitter->Initialize(m_left);
+#else
+  m_splitter->SplitVertically(m_left, m_right, 100);
+#endif
+
   SetStatusText("Min pane size = 0", 1);
 }
 
   SetStatusText("Min pane size = 0", 1);
 }
 
@@ -198,9 +206,9 @@ void MyFrame::SplitHorizontal(wxCommandEvent& WXUNUSED(event) )
 {
   if ( m_splitter->IsSplit() )
     m_splitter->Unsplit();
 {
   if ( m_splitter->IsSplit() )
     m_splitter->Unsplit();
-  m_leftCanvas->Show(TRUE);
-  m_rightCanvas->Show(TRUE);
-  m_splitter->SplitHorizontally( m_leftCanvas, m_rightCanvas );
+  m_left->Show(TRUE);
+  m_right->Show(TRUE);
+  m_splitter->SplitHorizontally( m_left, m_right );
   UpdatePosition();
 }
 
   UpdatePosition();
 }
 
@@ -208,9 +216,9 @@ void MyFrame::SplitVertical(wxCommandEvent& WXUNUSED(event) )
 {
   if ( m_splitter->IsSplit() )
     m_splitter->Unsplit();
 {
   if ( m_splitter->IsSplit() )
     m_splitter->Unsplit();
-  m_leftCanvas->Show(TRUE);
-  m_rightCanvas->Show(TRUE);
-  m_splitter->SplitVertically( m_leftCanvas, m_rightCanvas );
+  m_left->Show(TRUE);
+  m_right->Show(TRUE);
+  m_splitter->SplitVertically( m_left, m_right );
   UpdatePosition();
 }
 
   UpdatePosition();
 }
 
@@ -237,7 +245,9 @@ void MyFrame::SetMinSize(wxCommandEvent& WXUNUSED(event) )
 
 void MyFrame::UpdateUIHorizontal(wxUpdateUIEvent& event)
 {
 
 void MyFrame::UpdateUIHorizontal(wxUpdateUIEvent& event)
 {
-  event.Enable( ( (!m_splitter->IsSplit()) || (m_splitter->GetSplitMode() != wxSPLIT_HORIZONTAL) ) );
+    bool foo = ( (!m_splitter->IsSplit()) || (m_splitter->GetSplitMode() != wxSPLIT_HORIZONTAL) );
+    if( !foo )
+  event.Enable( foo );
 }
 
 void MyFrame::UpdateUIVertical(wxUpdateUIEvent& event)
 }
 
 void MyFrame::UpdateUIVertical(wxUpdateUIEvent& event)