#include "wx/artprov.h"
#include "notebook.h"
-// Name of the Veto page
-#define VETO_PAGE_NAME wxT("Veto")
-
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit()
// 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
{
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
};
wxASSERT_MSG( WXSIZEOF(strOrientations) == ORIENT_MAX,
- wxT("forgot to update something") );
+ wxT("Forgot to update something") );
m_radioOrient = new wxRadioBox
(
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") );
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
MyFrame::~MyFrame()
{
delete wxLog::SetActiveTarget(m_logTargetOld);
+
+ if (m_imageList)
+ {
+ delete m_imageList;
+ m_imageList = (wxImageList *) NULL;
+ }
+
}
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)
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();
}
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();
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();
SetTitle(title);
}
}
+
+void MyFrame::OnUpdateUIBtnDeleteCurPage(wxUpdateUIEvent& event)
+{
+ event.Enable( m_notebook->GetSelection() != -1 );
+}
+
+void MyFrame::OnUpdateUIBtnDeleteLastPage(wxUpdateUIEvent& event)
+{
+ event.Enable( m_notebook->GetPageCount() != 0 );
+}