X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f60d0f944a6ce86bce59901e7ea3811f0992bce7..27d0ab24826ca90626a7417dcd8a4fff5d92e49a:/samples/notebook/test.cpp diff --git a/samples/notebook/test.cpp b/samples/notebook/test.cpp index 7ee1dfb3e8..fead54e43d 100644 --- a/samples/notebook/test.cpp +++ b/samples/notebook/test.cpp @@ -6,31 +6,33 @@ // Created: 26/10/98 // RCS-ID: $Id$ // Copyright: (c) -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif #ifndef WX_PRECOMP -#include "wx/wx.h" + #include "wx/wx.h" #endif #include "test.h" // If 1, use a dialog. Otherwise use a frame. #define USE_TABBED_DIALOG 0 - +#if USE_TABBED_DIALOG MyDialog* dialog = (MyDialog *) NULL; +#else // !USE_TABBED_DIALOG MyFrame* frame = (MyFrame *) NULL; +#endif // USE_TABBED_DIALOG IMPLEMENT_APP(MyApp) -bool MyApp::OnInit(void) +bool MyApp::OnInit() { // Create the main window #if USE_TABBED_DIALOG @@ -41,34 +43,54 @@ bool MyApp::OnInit(void) // Quit immediately the dialog has been dismissed return FALSE; #else - frame = new MyFrame((wxFrame*) NULL, -1, (char *) "Notebook", wxPoint(-1, -1), wxSize(365, 390), wxDEFAULT_FRAME_STYLE); + frame = new MyFrame((wxFrame*) NULL, -1, "Notebook", wxPoint(-1, -1), wxSize(365, 390) ); // Problem with generic wxNotebook implementation whereby it doesn't size properly unless - // you set the size again (to a different size than before, since SetSize is optimized) -#if defined(__WXMOTIF__) || defined(__WIN16__) - frame->SetSize(-1, -1, 370, 390); + // you set the size again +#if defined(__WIN16__) + int width, height; + frame->GetSize(& width, & height); + frame->SetSize(-1, -1, width, height); #endif return TRUE; #endif } -void MyApp::InitTabView(wxNotebook* notebook, wxWindow* window) +void MyApp::InitTabView(wxNotebook* notebook, wxPanel* window) { m_okButton = new wxButton(window, wxID_OK, "Close", wxPoint(-1, -1), wxSize(80, 25)); - m_cancelButton = new wxButton(window, wxID_CANCEL, "Cancel", wxPoint(-1, -1), wxSize(80, 25)); - m_helpButton = new wxButton(window, wxID_HELP, "Help", wxPoint(-1, -1), wxSize(80, 25)); + m_cancelButton = new wxButton(window, ID_DELETE_PAGE, "&Delete page", wxPoint(-1, -1), wxSize(80, 25)); + m_addPageButton = new wxButton(window, ID_ADD_PAGE, "&Add page", wxPoint(-1, -1), wxSize(80, 25)); + m_insertPageButton = new wxButton(window, ID_INSERT_PAGE, "&Insert page", wxPoint(-1, -1), wxSize(80, 25)); + m_nextPageButton = new wxButton(window, ID_NEXT_PAGE, "&Next page", wxPoint(-1, -1), wxSize(80, 25)); m_okButton->SetDefault(); - wxLayoutConstraints* c = new wxLayoutConstraints; + wxLayoutConstraints *c; + + c = new wxLayoutConstraints; c->right.SameAs(window, wxRight, 4); c->bottom.SameAs(window, wxBottom, 4); c->height.AsIs(); c->width.AsIs(); - m_helpButton->SetConstraints(c); + m_addPageButton->SetConstraints(c); + + c = new wxLayoutConstraints; + c->right.SameAs(m_addPageButton, wxLeft, 4); + c->bottom.SameAs(window, wxBottom, 4); + c->height.AsIs(); + c->width.AsIs(); + m_insertPageButton->SetConstraints(c); + + c = new wxLayoutConstraints; + c->right.SameAs(m_insertPageButton, wxLeft, 4); + c->bottom.SameAs(window, wxBottom, 4); + c->height.AsIs(); + c->width.AsIs(); + m_nextPageButton->SetConstraints(c); c = new wxLayoutConstraints; - c->right.SameAs(m_helpButton, wxLeft, 4); + c->right.SameAs(m_nextPageButton, wxLeft, 4); c->bottom.SameAs(window, wxBottom, 4); c->height.AsIs(); c->width.AsIs(); @@ -86,17 +108,36 @@ void MyApp::InitTabView(wxNotebook* notebook, wxWindow* window) // panel1->SetBackgroundColour(wxColour("RED")); (void)new wxButton(panel1, -1, "Press me", wxPoint(10, 10)); (void)new wxTextCtrl(panel1, -1, "1234", wxPoint(10, 40), wxSize(120, 150)); - + notebook->AddPage(panel1, "Cat", TRUE); wxPanel *panel2 = new wxPanel(notebook, -1); + panel2->SetAutoLayout(TRUE); panel2->SetBackgroundColour(wxColour("BLUE")); wxString animals[] = { "Fox", "Hare", "Rabbit", "Sabre-toothed tiger", "T Rex" }; - (void)new wxListBox(panel2, -1, wxPoint(5, 5), wxSize(170, 80), 5, animals); + wxRadioBox *radiobox = new wxRadioBox(panel2, -1, "Choose one", + wxDefaultPosition, wxDefaultSize, 5, animals, + 2, wxRA_SPECIFY_ROWS); - (void)new wxTextCtrl(panel2, -1, "Some notes about the animals in this house", wxPoint(5, 100), wxSize(170, 100), - wxTE_MULTILINE); + c = new wxLayoutConstraints; + c->left.SameAs(panel2, wxLeft, 10); + c->top.SameAs(panel2, wxTop, 5); + c->height.PercentOf(panel2, wxHeight, 50); + c->right.SameAs(panel2, wxRight, 10); + radiobox->SetConstraints(c); + + wxRadioBox *radiobox2 = new wxRadioBox(panel2, -1, "Choose one", + wxDefaultPosition, wxDefaultSize, + 5, animals, + 2, wxRA_SPECIFY_ROWS); + + c = new wxLayoutConstraints; + c->left.SameAs(radiobox, wxLeft); + c->height.AsIs(); + c->top.Below(radiobox, 5); + c->right.SameAs(radiobox, wxRight); + radiobox2->SetConstraints(c); notebook->AddPage(panel2, "Dog"); @@ -107,8 +148,17 @@ void MyApp::InitTabView(wxNotebook* notebook, wxWindow* window) wxPanel *panel4 = new wxPanel(notebook, -1); panel4->SetBackgroundColour(wxColour("YELLOW")); notebook->AddPage(panel4, "Sheep"); + + wxPanel *panel5 = new wxPanel(notebook, -1); + panel5->SetBackgroundColour(wxColour("MAGENTA")); + (void)new wxStaticText(panel5, -1, "This page has been inserted, not added", wxPoint(10, 10) ); + notebook->InsertPage(0, panel5, "Sheep"); + + notebook->SetSelection(2); } +#if USE_TABBED_DIALOG + BEGIN_EVENT_TABLE(MyDialog, wxDialog) EVT_BUTTON(wxID_OK, MyDialog::OnOK) EVT_BUTTON(wxID_CANCEL, MyDialog::OnOK) @@ -131,7 +181,7 @@ void MyDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event) ) EndModal(wxID_CANCEL); } -void MyDialog::Init(void) +void MyDialog::Init() { m_notebook = new wxNotebook(this, ID_NOTEBOOK); @@ -148,13 +198,18 @@ void MyDialog::Init(void) SetAutoLayout(TRUE); Layout(); - this->Centre(wxBOTH); + Centre(wxBOTH); } +#else // USE_TABBED_DIALOG + BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_BUTTON(wxID_OK, MyFrame::OnOK) - EVT_BUTTON(wxID_CANCEL, MyFrame::OnOK) - EVT_SIZE(MyFrame::OnSize) + EVT_BUTTON(ID_DELETE_PAGE, MyFrame::OnDeletePage) + EVT_BUTTON(ID_ADD_PAGE, MyFrame::OnAddPage) + EVT_BUTTON(ID_INSERT_PAGE, MyFrame::OnInsertPage) + EVT_BUTTON(ID_NEXT_PAGE, MyFrame::OnNextPage) + EVT_IDLE(MyFrame::OnIdle) END_EVENT_TABLE() MyFrame::MyFrame(wxFrame* parent, const wxWindowID id, const wxString& title, @@ -166,25 +221,63 @@ MyFrame::MyFrame(wxFrame* parent, const wxWindowID id, const wxString& title, Init(); } +void MyFrame::OnAddPage(wxCommandEvent& WXUNUSED(event)) +{ + static size_t s_pageAdded = 0; + + wxPanel *panel = new wxPanel( m_notebook, -1 ); + (void)new wxButton( panel, -1, "Button", wxPoint( 10,10 ), wxSize(-1,-1) ); + + m_notebook->AddPage( panel, wxString::Format("Added %u", ++s_pageAdded) ); +} + +void MyFrame::OnInsertPage(wxCommandEvent& WXUNUSED(event)) +{ + static size_t s_pageIns = 0; + + wxPanel *panel = new wxPanel( m_notebook, -1 ); + (void)new wxButton( panel, -1, "Button", wxPoint( 10,10 ), wxSize(-1,-1) ); + + m_notebook->InsertPage(0, panel, wxString::Format("Inserted %u", ++s_pageIns) ); + m_notebook->SetSelection(0); +} + +void MyFrame::OnDeletePage(wxCommandEvent& WXUNUSED(event)) +{ + m_notebook->DeletePage( m_notebook->GetPageCount()-1 ); +} + +void MyFrame::OnNextPage(wxCommandEvent& WXUNUSED(event)) +{ + m_notebook->AdvanceSelection(); +} + void MyFrame::OnOK(wxCommandEvent& WXUNUSED(event) ) { - this->Destroy(); + Destroy(); } void MyFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event) ) { - this->Destroy(); + Destroy(); } -void MyFrame::Init(void) +void MyFrame::Init() { m_panel = new wxPanel(this, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL|wxCLIP_CHILDREN); + wxLayoutConstraints* c = new wxLayoutConstraints; + c->left.SameAs(this, wxLeft); + c->right.SameAs(this, wxRight); + c->top.SameAs(this, wxTop); + c->bottom.SameAs(this, wxBottom); + m_panel->SetConstraints(c); + // Note, omit the wxTAB_STYLE_COLOUR_INTERIOR, so we will guarantee a match // with the panel background, and save a bit of time. m_notebook = new wxNotebook(m_panel, ID_NOTEBOOK); - wxLayoutConstraints* c = new wxLayoutConstraints; + c = new wxLayoutConstraints; c->left.SameAs(m_panel, wxLeft, 4); c->right.SameAs(m_panel, wxRight, 4); c->top.SameAs(m_panel, wxTop, 4); @@ -195,17 +288,30 @@ void MyFrame::Init(void) wxGetApp().InitTabView(m_notebook, m_panel); m_panel->SetAutoLayout(TRUE); + SetAutoLayout(TRUE); - m_panel->Layout(); - - this->Centre(wxBOTH); + Centre(wxBOTH); Show(TRUE); } -void MyFrame::OnSize(wxSizeEvent& event) +void MyFrame::OnIdle(wxIdleEvent& WXUNUSED(event)) { - wxFrame::OnSize(event); - m_panel->Layout(); + static int s_nPages = -1; + static int s_nSel = -1; + + int nPages = m_notebook->GetPageCount(); + int nSel = m_notebook->GetSelection(); + if ( nPages != s_nPages || nSel != s_nSel ) + { + s_nPages = nPages; + s_nSel = nSel; + + wxString title; + title.Printf("Notebook (%d pages, selection: %d)", nPages, nSel); + + SetTitle(title); + } } +#endif // USE_TABBED_DIALOG