-// Define the repainting behaviour
-void MyWindow::OnPaint(wxPaintEvent& WXUNUSED(event) )
-{
- wxPaintDC dc(this);
- frame->Draw(dc,TRUE);
-}
-
-//-----------------------------------------------------------------
-// SizerFrame
-//-----------------------------------------------------------------
-
-SizerFrame::SizerFrame(wxFrame *frame, char *title, int x, int y, int w, int h):
- wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
-{
- panel = new wxPanel(this, -1, wxPoint(0, 0), wxSize(-1, -1), wxTAB_TRAVERSAL);
- panel->SetBackgroundColour(wxColour(192, 192, 192));
-
- // A sizer to fit the whole panel, plus two sizers, one
- // above the other. A button is centred on the lower
- // sizer; a rowcol containing 3 buttons is centred on the upper
- // sizer.
- wxSizer *expandSizer = new wxSizer(panel, wxSizerExpand);
- expandSizer->SetName("expandSizer");
-
- wxLayoutConstraints *c;
-
- /////// TOP OF PANEL
- ///////
- wxSizer *topSizer = new wxSizer(expandSizer);
- topSizer->SetName("topSizer");
-
- // Specify constraints for the top sizer
- c = new wxLayoutConstraints;
- c->left.SameAs (expandSizer, wxLeft);
- c->top.SameAs (expandSizer, wxTop);
- c->right.SameAs (expandSizer, wxRight);
- c->height.PercentOf (expandSizer, wxHeight, 50);
-
- topSizer->SetConstraints(c);
-
- /*
- * Add a row-col sizer and some buttons
- */
-
- // Default is layout by rows, 20 columns per row, shrink to fit.
- wxRowColSizer *rowCol = new wxRowColSizer(topSizer);
- rowCol->SetName("rowCol");
-
- wxButton *button = new wxButton(panel, -1, "Button 1");
- rowCol->AddSizerChild(button);
-
- button = new wxButton(panel, -1, "Button 2");
- rowCol->AddSizerChild(button);
-
- button = new wxButton(panel, -1, "Button 3");
- rowCol->AddSizerChild(button);
-
- // Centre the rowcol in the middle of the upper sizer
- c = new wxLayoutConstraints;
- c->centreX.SameAs (topSizer, wxCentreX);
- c->centreY.SameAs (topSizer, wxCentreY);
- c->width.AsIs();
- c->height.AsIs();
- rowCol->SetConstraints(c);
-
- /////// BOTTOM OF PANEL
- ///////
- wxSizer *bottomSizer = new wxSizer(expandSizer);
-
- // Specify constraints for the bottom sizer
- c = new wxLayoutConstraints;
- c->left.SameAs (expandSizer, wxLeft);
- c->top.PercentOf (expandSizer, wxHeight, 50);
- c->right.SameAs (expandSizer, wxRight);
- c->height.PercentOf (expandSizer, wxHeight, 50);
-
- bottomSizer->SetConstraints(c);
-
- wxButton *button2 = new wxButton(panel, -1, "Test button");
-
- // The button should be a child of the bottom sizer
- bottomSizer->AddSizerChild(button2);
-
- // Centre the button on the sizer
- c = new wxLayoutConstraints;
- c->centreX.SameAs (bottomSizer, wxCentreX);
- c->centreY.SameAs (bottomSizer, wxCentreY);
- c->width.PercentOf (bottomSizer, wxWidth, 20);
- c->height.PercentOf (bottomSizer, wxHeight, 20);
- button2->SetConstraints(c);
-}
-
-BEGIN_EVENT_TABLE(SizerFrame, wxFrame)
- EVT_SIZE(SizerFrame::OnSize)
-END_EVENT_TABLE()
-
-
-// Size the subwindows when the frame is resized
-void SizerFrame::OnSize(wxSizeEvent& event)
-{
- wxFrame::OnSize(event);
- panel->Layout();
-}
-
-//-----------------------------------------------------------------
-// NewSizerFrame
-//-----------------------------------------------------------------
-
-NewSizerFrame::NewSizerFrame(wxFrame *frame, char *title, int x, int y ):
- wxFrame(frame, -1, title, wxPoint(x, y) )
-{
- // we want to get a dialog that is stretchable because it
- // has a text ctrl in the middle. at the bottom, we have
- // two buttons which are not supposed to get stretched
- // and therefore we insert two spacers next to them
-
- topsizer = new wxBoxNewSizer( wxVERTICAL );
-
-
- // 1) upper part: text ctrl
-
- // make border around textctrl in all directions
- wxBorderNewSizer *text_border = new wxBorderNewSizer();
-
- // make border around text ctrl 20 pixels wide
- // minimum size for the text ctrl is 60x30
- text_border->Add( new wxTextCtrl( this, -1, "My text.", wxDefaultPosition, wxSize(170,30), wxTE_MULTILINE), 5 );
-
- // add text ctrl with border to top sizer
- // a value of more than zero indicates that it's stretchable
- topsizer->Add( text_border, 1 );
-
-
- // 2) middle part: static line
-
- // make border for beauty static line
- wxBorderNewSizer *line_border = new wxBorderNewSizer();
-
- // make border around static line 2 pixels wide
- // minimum size for the static line is 3x3
- line_border->Add( new wxStaticLine( this, -1, wxDefaultPosition, wxSize(170,3), wxHORIZONTAL), 5 );
-
- // add text ctrl with border to top sizer
- topsizer->Add( line_border );
-
-
- // 3) bottom: buttons
-
- // make border around button in all directions
- wxBoxNewSizer *button_sizer = new wxBoxNewSizer( wxHORIZONTAL );
-
- // make border around buttons 5 pixels wide
- // minimum size for the button is its default size
- wxBorderNewSizer *button1_border = new wxBorderNewSizer();
- button1_border->Add( new wxButton( this, -1, "Hello 1", wxDefaultPosition, wxSize(80,30) ), 5 );
- button_sizer->Add( button1_border );
-
- wxBorderNewSizer *button2_border = new wxBorderNewSizer();
- button2_border->Add( new wxButton( this, -1, "Hello 2", wxDefaultPosition, wxSize(80,30) ), 5 );
- button_sizer->Add( button2_border );
-
- // add buttons with border to top sizer
- topsizer->Add( button_sizer );
-
-
- // set frame to minimum size
- topsizer->Fit( this );
-
- // don't allow frame to get smaller than what the sizers tell ye
- topsizer->SetSizeHints( this );
-
- // layout widgets
- topsizer->Layout();
-}
-
-// This can later be removed if we integrate wxNewSizers
-// into wxWindows
-
-BEGIN_EVENT_TABLE(NewSizerFrame, wxFrame)
- EVT_SIZE(NewSizerFrame::OnSize)
-END_EVENT_TABLE()
-
-void NewSizerFrame::OnSize(wxSizeEvent& event)
-{
- wxFrame::OnSize(event);
-
- wxSize client_size( GetClientSize() );
-
- topsizer->SetDimension( 0, 0, client_size.x, client_size.y );
-}
-
-