X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c1dfe2775493c9fdecb1d4a362039d6e10cfb4b4..3df38e2077f56b5edb03f2fdb454fa04c0bfb1d6:/samples/notebook/notebook.cpp diff --git a/samples/notebook/notebook.cpp b/samples/notebook/notebook.cpp index 7293098e56..cf7f04fcb3 100644 --- a/samples/notebook/notebook.cpp +++ b/samples/notebook/notebook.cpp @@ -24,9 +24,6 @@ #include "wx/artprov.h" #include "notebook.h" -// Name of the Veto page -#define VETO_PAGE_NAME wxT("Veto") - IMPLEMENT_APP(MyApp) bool MyApp::OnInit() @@ -54,77 +51,134 @@ MyNotebook::MyNotebook(wxWindow *parent, wxWindowID id, // Empty } -void MyNotebook::CreateInitialPages() +wxPanel *MyNotebook::CreatePage(const wxString&pageName) { - wxPanel *panel = (wxPanel *) NULL; - wxBoxSizer *sizerPanel = (wxBoxSizer *) NULL; + if + ( + pageName.Contains(INSERTED_PAGE_NAME) + || pageName.Contains(ADDED_PAGE_NAME) + ) + { + return CreateUserCreatedPage(); + } - // Create and add some panels to the notebook + if (pageName == I_WAS_INSERTED_PAGE_NAME) + { + return CreateInsertPage(); + } + if (pageName == VETO_PAGE_NAME) + { + return CreateVetoPage(); + } - // Panel 1 - panel = new wxPanel(this); + if (pageName == RADIOBUTTONS_PAGE_NAME) + { + return CreateRadioButtonsPage(); + } - sizerPanel = new wxBoxSizer(wxVERTICAL); - sizerPanel->Add( new wxButton( panel, -1, wxT("Button") ) ); - sizerPanel->Add( new wxTextCtrl(panel, -1, wxT("1234"), - wxDefaultPosition, wxSize(120, 150) ) ); - panel->SetSizer(sizerPanel); - AddPage( panel, wxT("Controls without sizer"), TRUE, GetIconIndex() ); + if (pageName == MAXIMIZED_BUTTON_PAGE_NAME) + { + return CreateBigButtonPage(); + } + + wxFAIL; + + return (wxPanel *) NULL; +} + +wxPanel *MyNotebook::CreateUserCreatedPage() +{ + wxPanel *panel = new wxPanel(this); + (void) new wxButton( panel, -1, wxT("Button"), + wxPoint(10, 10), wxSize(-1, -1) ); - // Panel 2 - panel = new wxPanel(this); + return panel; +} + +wxPanel *MyNotebook::CreateRadioButtonsPage() +{ + wxPanel *panel = new wxPanel(this); wxString animals[] = { wxT("Fox"), wxT("Hare"), wxT("Rabbit"), wxT("Sabre-toothed tiger"), wxT("T Rex") }; + wxRadioBox *radiobox1 = new wxRadioBox(panel, -1, wxT("Choose one"), wxDefaultPosition, wxDefaultSize, 5, animals, 2, wxRA_SPECIFY_ROWS); wxString computers[] = { wxT("Amiga"), wxT("Commodore 64"), wxT("PET"), wxT("Another") }; + wxRadioBox *radiobox2 = new wxRadioBox(panel, -1, wxT("Choose your favourite"), wxDefaultPosition, wxDefaultSize, 4, computers, 0, wxRA_SPECIFY_COLS); - sizerPanel = new wxBoxSizer(wxVERTICAL); + wxBoxSizer *sizerPanel = new wxBoxSizer(wxVERTICAL); sizerPanel->Add(radiobox1, 2, wxEXPAND); sizerPanel->Add(radiobox2, 1, wxEXPAND); panel->SetSizer(sizerPanel); - AddPage( panel, wxT("Radiobuttons"), FALSE, GetIconIndex() ); + return panel; +} +wxPanel *MyNotebook::CreateVetoPage() +{ + wxPanel *panel = new wxPanel(this); - // Panel 3 - panel = new wxPanel(this); (void) new wxStaticText( panel, -1, wxT("This page intentionally left blank"), wxPoint(10, 10) ); - AddPage( panel, VETO_PAGE_NAME, FALSE, GetIconIndex() ); + return panel; +} + +wxPanel *MyNotebook::CreateBigButtonPage() +{ + wxPanel *panel = new wxPanel(this); - // Panel 4 - panel = new wxPanel(this); - wxButton *buttonBig = new wxButton( panel, -1, wxT("Big button"), + wxButton *buttonBig = new wxButton( panel, -1, wxT("Maximized button"), wxPoint(0, 0), wxSize(480, 360) ); - sizerPanel = new wxBoxSizer(wxVERTICAL); + wxBoxSizer *sizerPanel = new wxBoxSizer(wxVERTICAL); sizerPanel->Add(buttonBig, 1, wxEXPAND); panel->SetSizer(sizerPanel); - AddPage( panel, wxT("Big button"), FALSE, GetIconIndex() ); + return panel; +} + +wxPanel *MyNotebook::CreateInsertPage() +{ + wxPanel *panel = new wxPanel(this); - // Panel 5 - panel = new wxPanel(this); panel->SetBackgroundColour( wxColour( wxT("MAROON") ) ); (void) new wxStaticText( panel, -1, wxT("This page has been inserted, not added."), wxPoint(10, 10) ); - InsertPage( 0, panel, wxT("Inserted"), FALSE, GetIconIndex() ); + return panel; +} - SetSelection(2); +void MyNotebook::CreateInitialPages() +{ + wxPanel *panel = (wxPanel *) NULL; + + // Create and add some panels to the notebook + + panel = CreateRadioButtonsPage(); + AddPage( panel, RADIOBUTTONS_PAGE_NAME, FALSE, GetIconIndex() ); + + panel = CreateVetoPage(); + AddPage( panel, VETO_PAGE_NAME, FALSE, GetIconIndex() ); + panel = CreateBigButtonPage(); + AddPage( panel, MAXIMIZED_BUTTON_PAGE_NAME, FALSE, GetIconIndex() ); + + panel = CreateInsertPage(); + InsertPage( 0, panel, I_WAS_INSERTED_PAGE_NAME, FALSE, GetIconIndex() ); + + + SetSelection(1); } int MyNotebook::GetIconIndex() const @@ -147,10 +201,35 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, { m_panel = (wxPanel *) NULL; m_notebook = (MyNotebook *) NULL; - m_imageList = (wxImageList *) NULL; + + // create a dummy image list with a few icons + wxSize imageSize(32, 32); + + m_imageList + = new wxImageList( imageSize.GetWidth(), imageSize.GetHeight() ); + + m_imageList->Add + ( + wxArtProvider::GetIcon(wxART_INFORMATION, wxART_OTHER, imageSize) + ); + + m_imageList->Add + ( + wxArtProvider::GetIcon(wxART_QUESTION, wxART_OTHER, imageSize) + ); + + m_imageList->Add + ( + wxArtProvider::GetIcon(wxART_WARNING, wxART_OTHER, imageSize) + ); + + m_imageList->Add + ( + wxArtProvider::GetIcon(wxART_ERROR, wxART_OTHER, imageSize) + ); m_panel = new wxPanel(this, -1, wxDefaultPosition, wxDefaultSize, - wxTAB_TRAVERSAL|wxCLIP_CHILDREN|wxNO_BORDER); + wxTAB_TRAVERSAL | wxCLIP_CHILDREN | wxNO_BORDER | wxNO_FULL_REPAINT_ON_RESIZE); // Create remaining controls @@ -164,7 +243,7 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, }; wxASSERT_MSG( WXSIZEOF(strOrientations) == ORIENT_MAX, - wxT("forgot to update something") ); + wxT("Forgot to update something") ); m_radioOrient = new wxRadioBox ( @@ -183,8 +262,11 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, m_btnInsertPage = new wxButton( m_panel, ID_BTN_INSERT_PAGE, wxT("&Insert page") ); - m_btnDeletePage = new wxButton( m_panel, ID_BTN_DELETE_PAGE, - wxT("&Delete page") ); + m_btnDeleteCurPage = new wxButton( m_panel, ID_BTN_DELETE_CUR_PAGE, + wxT("&Delete current page") ); + + m_btnDeleteLastPage = new wxButton( m_panel, ID_BTN_DELETE_LAST_PAGE, + wxT("Delete las&t page") ); m_btnNextPage = new wxButton( m_panel, ID_BTN_NEXT_PAGE, wxT("&Next page") ); @@ -216,7 +298,8 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, sizerLeft->Add(m_btnAddPage, 0, wxEXPAND | (wxTOP | wxBOTTOM), 4); sizerLeft->Add(m_btnInsertPage, 0, wxEXPAND | (wxTOP | wxBOTTOM), 4); - sizerLeft->Add(m_btnDeletePage, 0, wxEXPAND | (wxTOP | wxBOTTOM), 4); + sizerLeft->Add(m_btnDeleteCurPage, 0, wxEXPAND | (wxTOP | wxBOTTOM), 4); + sizerLeft->Add(m_btnDeleteLastPage, 0, wxEXPAND | (wxTOP | wxBOTTOM), 4); sizerLeft->Add(m_btnNextPage, 0, wxEXPAND | (wxTOP | wxBOTTOM), 4); sizerLeft->Add(0, 0, 1); // Spacer @@ -245,6 +328,13 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size, MyFrame::~MyFrame() { delete wxLog::SetActiveTarget(m_logTargetOld); + + if (m_imageList) + { + delete m_imageList; + m_imageList = (wxImageList *) NULL; + } + } void MyFrame::ReInitNotebook() @@ -276,27 +366,26 @@ void MyFrame::ReInitNotebook() MyNotebook *notebook = m_notebook; - m_notebook = new MyNotebook(m_panel, ID_NOTEBOOK, wxDefaultPosition, wxDefaultSize, - flags); + flags|wxCLIP_CHILDREN|wxNO_FULL_REPAINT_ON_RESIZE); - CreateImageList(); + if ( m_chkShowImages->IsChecked() ) + { + m_notebook->SetImageList(m_imageList); + } - if ( notebook ) + if (notebook) { int sel = notebook->GetSelection(); int count = notebook->GetPageCount(); - for ( int n = 0; n < count; n++ ) + for (int n = 0; n < count; n++) { - wxNotebookPage *page = notebook->GetPage(0); - page->Reparent(m_notebook); - - m_notebook->AddPage( page, notebook->GetPageText(0), FALSE, - m_notebook->GetIconIndex() ); + wxString str = notebook->GetPageText(n); - notebook->RemovePage(0); + wxNotebookPage *page = m_notebook->CreatePage(str); + m_notebook->AddPage(page, str, FALSE, m_notebook->GetIconIndex() ); } if (m_sizerNotebook) @@ -307,74 +396,40 @@ void MyFrame::ReInitNotebook() delete notebook; // restore selection - if ( sel != -1 ) + if (sel != -1) { m_notebook->SetSelection(sel); } + } + m_sizerNotebook = new wxNotebookSizer(m_notebook); m_sizerTop->Add(m_sizerNotebook, 1, wxEXPAND | wxALL, 4); m_sizerTop->Layout(); } -void MyFrame::CreateImageList() -{ - if (m_imageList) - { - delete m_imageList; - m_imageList = (wxImageList *) NULL; - } - - if ( m_chkShowImages->IsChecked() ) - { - // create a dummy image list with a few icons - wxSize size(32, 32); - - m_imageList = new wxImageList( size.GetWidth(), size.GetHeight() ); - - m_imageList->Add - ( - wxArtProvider::GetIcon(wxART_INFORMATION, wxART_OTHER, size) - ); - - m_imageList->Add - ( - wxArtProvider::GetIcon(wxART_QUESTION, wxART_OTHER, size) - ); - - m_imageList->Add - ( - wxArtProvider::GetIcon(wxART_WARNING, wxART_OTHER, size) - ); - - m_imageList->Add - ( - wxArtProvider::GetIcon(wxART_ERROR, wxART_OTHER, size) - ); - - m_notebook->SetImageList(m_imageList); - } -} - - BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_RADIOBOX(ID_RADIO_ORIENT, MyFrame::OnCheckOrRadioBox) EVT_CHECKBOX(ID_CHK_SHOWIMAGES, MyFrame::OnCheckOrRadioBox) EVT_BUTTON(ID_BTN_ADD_PAGE, MyFrame::OnButtonAddPage) EVT_BUTTON(ID_BTN_INSERT_PAGE, MyFrame::OnButtonInsertPage) - EVT_BUTTON(ID_BTN_DELETE_PAGE, MyFrame::OnButtonDeletePage) + EVT_BUTTON(ID_BTN_DELETE_CUR_PAGE, MyFrame::OnButtonDeleteCurPage) + EVT_BUTTON(ID_BTN_DELETE_LAST_PAGE, MyFrame::OnButtonDeleteLastPage) EVT_BUTTON(ID_BTN_NEXT_PAGE, MyFrame::OnButtonNextPage) EVT_BUTTON(wxID_OK, MyFrame::OnButtonExit) + EVT_UPDATE_UI(ID_BTN_DELETE_CUR_PAGE, MyFrame::OnUpdateUIBtnDeleteCurPage) + EVT_UPDATE_UI(ID_BTN_DELETE_LAST_PAGE, MyFrame::OnUpdateUIBtnDeleteLastPage) + EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, MyFrame::OnNotebook) EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK, MyFrame::OnNotebook) EVT_IDLE(MyFrame::OnIdle) END_EVENT_TABLE() -void MyFrame::OnCheckOrRadioBox(wxCommandEvent& event) +void MyFrame::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event)) { ReInitNotebook(); } @@ -384,29 +439,39 @@ void MyFrame::OnButtonAddPage( wxCommandEvent& WXUNUSED(event) ) static size_t s_pageAdded = 0; wxPanel *panel = new wxPanel( m_notebook, -1 ); - (void) new wxButton( panel, -1, wxT("Button"), + (void) new wxButton( panel, -1, wxT("First button"), wxPoint(10, 10), wxSize(-1, -1) ); + (void) new wxButton( panel, -1, wxT("Second button"), + wxPoint(50, 100), wxSize(-1, -1) ); - m_notebook->AddPage(panel, wxString::Format(wxT("Added %u"), - ++s_pageAdded), FALSE, m_notebook->GetIconIndex() ); + m_notebook->AddPage(panel, wxString::Format(ADDED_PAGE_NAME wxT("%u"), + ++s_pageAdded), TRUE, m_notebook->GetIconIndex() ); } void MyFrame::OnButtonInsertPage( wxCommandEvent& WXUNUSED(event) ) { static size_t s_pageIns = 0; - wxPanel *panel = new wxPanel( m_notebook, -1 ); - (void) new wxButton( panel, -1, wxT("Button"), - wxPoint(10, 10), wxSize(-1, -1) ); + wxPanel *panel = m_notebook->CreateUserCreatedPage(); m_notebook->InsertPage( 0, panel, - wxString::Format(wxT("Inserted %u"), ++s_pageIns), FALSE, + wxString::Format(INSERTED_PAGE_NAME wxT("%u"), ++s_pageIns), FALSE, m_notebook->GetIconIndex() ); m_notebook->SetSelection(0); } -void MyFrame::OnButtonDeletePage( wxCommandEvent& WXUNUSED(event) ) +void MyFrame::OnButtonDeleteLastPage( wxCommandEvent& WXUNUSED(event) ) +{ + int page = m_notebook->GetPageCount(); + + if ( page != 0 ) + { + m_notebook->DeletePage(page - 1); + } +} + +void MyFrame::OnButtonDeleteCurPage( wxCommandEvent& WXUNUSED(event) ) { int sel = m_notebook->GetSelection(); @@ -462,7 +527,7 @@ void MyFrame::OnNotebook(wxNotebookEvent& event) static int s_numNotebookEvents = 0; wxLogMessage(wxT("Notebook event #%d: %s (%d)"), - s_numNotebookEvents++, str, eventType); + s_numNotebookEvents++, str.c_str(), eventType); m_text->SetInsertionPointEnd(); @@ -487,3 +552,13 @@ void MyFrame::OnIdle( wxIdleEvent& WXUNUSED(event) ) SetTitle(title); } } + +void MyFrame::OnUpdateUIBtnDeleteCurPage(wxUpdateUIEvent& event) +{ + event.Enable( m_notebook->GetSelection() != -1 ); +} + +void MyFrame::OnUpdateUIBtnDeleteLastPage(wxUpdateUIEvent& event) +{ + event.Enable( m_notebook->GetPageCount() != 0 ); +}