/////////////////////////////////////////////////////////////////////////////
-// Program: wxWindows Widgets Sample
+// Program: wxWidgets Widgets Sample
// Name: notebook.cpp
// Purpose: Part of the widgets sample showing wxNotebook
// Author: Vadim Zeitlin
#pragma hdrstop
#endif
+#if wxUSE_NOTEBOOK
+
// for all others, include the necessary headers
#ifndef WX_PRECOMP
#include "wx/app.h"
#include "wx/sizer.h"
#include "wx/notebook.h"
+#include "wx/artprov.h"
#include "widgets.h"
-
#include "icons/notebook.xpm"
// ----------------------------------------------------------------------------
Orient_Max
};
-// old versions of wxWindows don't define this style
-#ifndef wxNB_TOP
- #define wxNB_TOP (0)
-#endif
-
// ----------------------------------------------------------------------------
// NotebookWidgetsPage
// ----------------------------------------------------------------------------
class NotebookWidgetsPage : public WidgetsPage
{
public:
- NotebookWidgetsPage(wxNotebook *notebook, wxImageList *imaglist);
+ NotebookWidgetsPage(wxBookCtrlBase *book, wxImageList *imaglist);
virtual ~NotebookWidgetsPage();
+ virtual wxControl *GetWidget() const { return m_notebook; }
+ virtual void RecreateWidget() { CreateNotebook(); }
+
protected:
// event handlers
void OnPageChanging(wxNotebookEvent& event);
// get the numeric value of text ctrl
int GetTextValue(wxTextCtrl *text) const;
+ // is the value in range?
+ bool IsValidValue(int val) const
+ { return (val >= 0) && (val < (int) m_notebook->GetPageCount()); }
+
// the controls
// ------------
wxImageList *m_imageList;
private:
- DECLARE_EVENT_TABLE();
- DECLARE_WIDGETS_PAGE(NotebookWidgetsPage);
+ DECLARE_EVENT_TABLE()
+ DECLARE_WIDGETS_PAGE(NotebookWidgetsPage)
};
// ----------------------------------------------------------------------------
EVT_UPDATE_UI(NotebookPage_InsertPage, NotebookWidgetsPage::OnUpdateUIInsertButton)
EVT_UPDATE_UI(NotebookPage_RemovePage, NotebookWidgetsPage::OnUpdateUIRemoveButton)
- EVT_NOTEBOOK_PAGE_CHANGING(-1, NotebookWidgetsPage::OnPageChanging)
- EVT_NOTEBOOK_PAGE_CHANGED(-1, NotebookWidgetsPage::OnPageChanged)
+ EVT_NOTEBOOK_PAGE_CHANGING(wxID_ANY, NotebookWidgetsPage::OnPageChanging)
+ EVT_NOTEBOOK_PAGE_CHANGED(wxID_ANY, NotebookWidgetsPage::OnPageChanged)
- EVT_CHECKBOX(-1, NotebookWidgetsPage::OnCheckOrRadioBox)
- EVT_RADIOBOX(-1, NotebookWidgetsPage::OnCheckOrRadioBox)
+ EVT_CHECKBOX(wxID_ANY, NotebookWidgetsPage::OnCheckOrRadioBox)
+ EVT_RADIOBOX(wxID_ANY, NotebookWidgetsPage::OnCheckOrRadioBox)
END_EVENT_TABLE()
// ============================================================================
IMPLEMENT_WIDGETS_PAGE(NotebookWidgetsPage, _T("Notebook"));
-NotebookWidgetsPage::NotebookWidgetsPage(wxNotebook *notebook,
+NotebookWidgetsPage::NotebookWidgetsPage(wxBookCtrlBase *book,
wxImageList *imaglist)
- : WidgetsPage(notebook)
+ : WidgetsPage(book)
{
imaglist->Add(wxBitmap(notebook_xpm));
wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
// left pane
- wxStaticBox *box = new wxStaticBox(this, -1, _T("&Set style"));
+ wxStaticBox *box = new wxStaticBox(this, wxID_ANY, _T("&Set style"));
// must be in sync with Orient enum
- wxString orientations[] =
- {
- _T("&top"),
- _T("&bottom"),
- _T("&left"),
- _T("&right"),
- };
+ wxArrayString orientations;
+ orientations.Add(_T("&top"));
+ orientations.Add(_T("&bottom"));
+ orientations.Add(_T("&left"));
+ orientations.Add(_T("&right"));
- wxASSERT_MSG( WXSIZEOF(orientations) == Orient_Max,
+ wxASSERT_MSG( orientations.GetCount() == Orient_Max,
_T("forgot to update something") );
- m_chkImages = new wxCheckBox(this, -1, _T("Show &images"));
- m_radioOrient = new wxRadioBox(this, -1, _T("&Tab orientation"),
+ m_chkImages = new wxCheckBox(this, wxID_ANY, _T("Show &images"));
+ m_radioOrient = new wxRadioBox(this, wxID_ANY, _T("&Tab orientation"),
wxDefaultPosition, wxDefaultSize,
- WXSIZEOF(orientations), orientations,
- 1, wxRA_SPECIFY_COLS);
+ orientations, 1, wxRA_SPECIFY_COLS);
wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
// middle pane
- wxStaticBox *box2 = new wxStaticBox(this, -1, _T("&Contents"));
+ wxStaticBox *box2 = new wxStaticBox(this, wxID_ANY, _T("&Contents"));
wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL);
wxTextCtrl *text;
wxSizer *sizerRow = CreateSizerWithTextAndLabel(_T("Number of pages: "),
NotebookPage_NumPagesText,
&text);
- text->SetEditable(FALSE);
+ text->SetEditable(false);
sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
sizerRow = CreateSizerWithTextAndLabel(_T("Current selection: "),
NotebookPage_CurSelectText,
&text);
- text->SetEditable(FALSE);
+ text->SetEditable(false);
sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
sizerRow = CreateSizerWithTextAndButton(NotebookPage_SelectPage,
wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL);
m_notebook = new wxNotebook(this, NotebookPage_Notebook);
sizerRight->Add(m_notebook, 1, wxGROW | wxALL, 5);
- sizerRight->SetMinSize(250, 0);
+ sizerRight->SetMinSize(150, 0);
m_sizerNotebook = sizerRight; // save it to modify it later
// the 3 panes panes compose the window
Reset();
CreateImageList();
- SetAutoLayout(TRUE);
SetSizer(sizerTop);
sizerTop->Fit(this);
void NotebookWidgetsPage::Reset()
{
- m_chkImages->SetValue(TRUE);
+ m_chkImages->SetValue(true);
m_radioOrient->SetSelection(Orient_Top);
}
{
// create a dummy image list with a few icons
m_imageList = new wxImageList(32, 32);
- m_imageList->Add(wxTheApp->GetStdIcon(wxICON_INFORMATION));
- m_imageList->Add(wxTheApp->GetStdIcon(wxICON_QUESTION));
- m_imageList->Add(wxTheApp->GetStdIcon(wxICON_WARNING));
- m_imageList->Add(wxTheApp->GetStdIcon(wxICON_ERROR));
+ wxSize size(32, 32);
+ 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);
void NotebookWidgetsPage::CreateNotebook()
{
- int flags;
+ int flags = ms_defaultFlags;
switch ( m_radioOrient->GetSelection() )
{
default:
- wxFAIL_MSG( _T("unknown notebok orientation") );
+ wxFAIL_MSG( _T("unknown notebook orientation") );
// fall through
case Orient_Top:
- flags = wxNB_TOP;
+ flags |= wxBK_TOP;
break;
case Orient_Bottom:
- flags = wxNB_BOTTOM;
+ flags |= wxBK_BOTTOM;
break;
case Orient_Left:
- flags = wxNB_LEFT;
+ flags |= wxBK_LEFT;
break;
case Orient_Right:
- flags = wxNB_RIGHT;
+ flags |= wxBK_RIGHT;
break;
}
- wxNotebook *notebook = m_notebook;
+ wxNotebook *old_note = m_notebook;
m_notebook = new wxNotebook(this, NotebookPage_Notebook,
wxDefaultPosition, wxDefaultSize,
CreateImageList();
- if ( notebook )
+ if ( old_note )
{
- int sel = notebook->GetSelection();
+ const int sel = old_note->GetSelection();
+
+ const int count = old_note->GetPageCount();
- int count = notebook->GetPageCount();
+ // recreate the pages
for ( int n = 0; n < count; n++ )
{
- wxNotebookPage *page = notebook->GetPage(0);
- page->Reparent(m_notebook);
-
- m_notebook->AddPage(page, notebook->GetPageText(0), FALSE,
- notebook->GetPageImage(0));
-
- notebook->RemovePage(0);
+ m_notebook->AddPage(CreateNewPage(),
+ old_note->GetPageText(n),
+ false,
+ m_chkImages->GetValue() ?
+ GetIconIndex() : -1);
}
- m_sizerNotebook->Remove(notebook);
- delete notebook;
+ m_sizerNotebook->Detach( old_note );
+ delete old_note;
// restore selection
if ( sel != -1 )
wxWindow *NotebookWidgetsPage::CreateNewPage()
{
- return new wxTextCtrl(m_notebook, -1, _T("I'm a notebook page"));
+ return new wxTextCtrl(m_notebook, wxID_ANY, _T("I'm a notebook page"));
}
// ----------------------------------------------------------------------------
m_notebook->DeleteAllPages();
}
-void NotebookWidgetsPage::OnButtonSelectPage(wxCommandEvent& event)
+void NotebookWidgetsPage::OnButtonSelectPage(wxCommandEvent& WXUNUSED(event))
{
int pos = GetTextValue(m_textSelect);
- wxCHECK_RET( pos >= 0, _T("button should be disabled") );
+ wxCHECK_RET( IsValidValue(pos), _T("button should be disabled") );
m_notebook->SetSelection(pos);
}
void NotebookWidgetsPage::OnButtonAddPage(wxCommandEvent& WXUNUSED(event))
{
- m_notebook->AddPage(CreateNewPage(), _T("Added page"), FALSE,
+ m_notebook->AddPage(CreateNewPage(), _T("Added page"), false,
GetIconIndex());
}
void NotebookWidgetsPage::OnButtonInsertPage(wxCommandEvent& WXUNUSED(event))
{
int pos = GetTextValue(m_textInsert);
- wxCHECK_RET( pos >= 0, _T("button should be disabled") );
+ wxCHECK_RET( IsValidValue(pos), _T("button should be disabled") );
- m_notebook->InsertPage(pos, CreateNewPage(), _T("Inserted page"), FALSE,
+ m_notebook->InsertPage(pos, CreateNewPage(), _T("Inserted page"), false,
GetIconIndex());
}
void NotebookWidgetsPage::OnButtonRemovePage(wxCommandEvent& WXUNUSED(event))
{
int pos = GetTextValue(m_textRemove);
- wxCHECK_RET( pos >= 0, _T("button should be disabled") );
+ wxCHECK_RET( IsValidValue(pos), _T("button should be disabled") );
m_notebook->DeletePage(pos);
}
void NotebookWidgetsPage::OnUpdateUISelectButton(wxUpdateUIEvent& event)
{
- event.Enable( GetTextValue(m_textSelect) >= 0 );
+ event.Enable( IsValidValue(GetTextValue(m_textSelect)) );
}
void NotebookWidgetsPage::OnUpdateUIInsertButton(wxUpdateUIEvent& event)
{
- event.Enable( GetTextValue(m_textInsert) >= 0 );
+ event.Enable( IsValidValue(GetTextValue(m_textInsert)) );
}
void NotebookWidgetsPage::OnUpdateUIRemoveButton(wxUpdateUIEvent& event)
{
- event.Enable( GetTextValue(m_textRemove) >= 0 );
+ event.Enable( IsValidValue(GetTextValue(m_textRemove)) );
}
void NotebookWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
{
event.Enable( !m_chkImages->GetValue() ||
- m_radioOrient->GetSelection() != wxNB_TOP );
+ m_radioOrient->GetSelection() != wxBK_TOP );
}
void NotebookWidgetsPage::OnUpdateUINumPagesText(wxUpdateUIEvent& event)
event.SetText( wxString::Format(_T("%d"), m_notebook->GetSelection()) );
}
-void NotebookWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
+void NotebookWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event))
{
CreateNotebook();
}
event.Skip();
}
+#endif // wxUSE_NOTEBOOK