]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/notebook/notebook.cpp
expat must be added to the template, not generated wxWindows.dsp
[wxWidgets.git] / samples / notebook / notebook.cpp
index 7293098e564e2e0cbbd47b75ea7cb789032f7743..cf7f04fcb37bcb95ea4ff9d5a116eff509d2fef4 100644 (file)
@@ -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 );
+}