X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f0fa4312b1a537189ada21bec53cff5618e6660b..5064e6eff3ca35cb20130dc9e5e53fb3ac02127e:/samples/widgets/notebook.cpp diff --git a/samples/widgets/notebook.cpp b/samples/widgets/notebook.cpp index 357ac05684..116ee5d91b 100644 --- a/samples/widgets/notebook.cpp +++ b/samples/widgets/notebook.cpp @@ -44,6 +44,7 @@ #include "wx/sizer.h" #include "wx/bookctrl.h" #include "wx/artprov.h" +#include "wx/imaglist.h" #include "widgets.h" @@ -85,12 +86,15 @@ enum Orient class BookWidgetsPage : public WidgetsPage { public: - BookWidgetsPage(WidgetsBookCtrl *book); + BookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist, char* icon[]); virtual ~BookWidgetsPage(); virtual wxControl *GetWidget() const { return m_book; } virtual void RecreateWidget() { RecreateBook(); } + // lazy creation of the content + virtual void CreateContent(); + protected: // event handlers void OnButtonReset(wxCommandEvent& event); @@ -118,8 +122,10 @@ protected: void RecreateBook(); virtual wxBookCtrlBase *CreateBook(long flags) = 0; +#if USE_ICONS_IN_BOOK // create or destroy the image list void CreateImageList(); +#endif // USE_ICONS_IN_BOOK // create a new page wxWindow *CreateNewPage(); @@ -150,8 +156,10 @@ protected: wxBookCtrlBase *m_book; wxSizer *m_sizerBook; - // thei mage list for our book +#if USE_ICONS_IN_BOOK + // the image list for our book wxImageList *m_imageList; +#endif // USE_ICONS_IN_BOOK private: DECLARE_EVENT_TABLE() @@ -184,16 +192,22 @@ END_EVENT_TABLE() // implementation // ============================================================================ -BookWidgetsPage::BookWidgetsPage(WidgetsBookCtrl *book) - :WidgetsPage(book) +BookWidgetsPage::BookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist, char* icon[]) + :WidgetsPage(book, imaglist, icon) { // init everything m_chkImages = NULL; +#if USE_ICONS_IN_BOOK m_imageList = NULL; +#endif // USE_ICONS_IN_BOOK m_book = NULL; + m_radioOrient = NULL; m_sizerBook = (wxSizer *)NULL; +} +void BookWidgetsPage::CreateContent() +{ wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL); // left pane @@ -272,18 +286,22 @@ BookWidgetsPage::BookWidgetsPage(WidgetsBookCtrl *book) sizerTop->Add(sizerMiddle, 0, wxGROW | wxALL, 10); sizerTop->Add(m_sizerBook, 1, wxGROW | (wxALL & ~wxRIGHT), 10); + RecreateBook(); + // final initializations Reset(); +#if USE_ICONS_IN_BOOK CreateImageList(); +#endif // USE_ICONS_IN_BOOK SetSizer(sizerTop); - - sizerTop->Fit(this); } BookWidgetsPage::~BookWidgetsPage() { +#if USE_ICONS_IN_BOOK delete m_imageList; +#endif // USE_ICONS_IN_BOOK } // ---------------------------------------------------------------------------- @@ -296,6 +314,7 @@ void BookWidgetsPage::Reset() m_radioOrient->SetSelection(Orient_Top); } +#if USE_ICONS_IN_BOOK void BookWidgetsPage::CreateImageList() { if ( m_chkImages->GetValue() ) @@ -327,10 +346,16 @@ void BookWidgetsPage::CreateImageList() // it would be logical if this removed the image list from book, under // MSW it crashes instead - FIXME } +#endif // USE_ICONS_IN_BOOK void BookWidgetsPage::RecreateBook() { + // do not recreate anything in case page content was not prepared yet + if(!m_radioOrient) + return; + int flags = ms_defaultFlags; + switch ( m_radioOrient->GetSelection() ) { default: @@ -358,7 +383,9 @@ void BookWidgetsPage::RecreateBook() m_book = CreateBook(flags); +#if USE_ICONS_IN_BOOK CreateImageList(); +#endif // USE_ICONS_IN_BOOK if ( oldBook ) { @@ -397,8 +424,9 @@ void BookWidgetsPage::RecreateBook() int BookWidgetsPage::GetTextValue(wxTextCtrl *text) const { - long pos; - if ( !text->GetValue().ToLong(&pos) ) + long pos = -1; + + if ( !text || !text->GetValue().ToLong(&pos) ) pos = -1; return (int)pos; @@ -406,6 +434,7 @@ int BookWidgetsPage::GetTextValue(wxTextCtrl *text) const int BookWidgetsPage::GetIconIndex() const { +#if USE_ICONS_IN_BOOK if ( m_imageList ) { int nImages = m_imageList->GetImageCount(); @@ -414,6 +443,7 @@ int BookWidgetsPage::GetIconIndex() const return m_book->GetPageCount() % nImages; } } +#endif // USE_ICONS_IN_BOOK return -1; } @@ -487,18 +517,21 @@ void BookWidgetsPage::OnUpdateUIRemoveButton(wxUpdateUIEvent& event) void BookWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event) { - event.Enable( !m_chkImages->GetValue() || - m_radioOrient->GetSelection() != wxBK_TOP ); + if(m_chkImages && m_radioOrient) + event.Enable( !m_chkImages->GetValue() || + m_radioOrient->GetSelection() != wxBK_TOP ); } void BookWidgetsPage::OnUpdateUINumPagesText(wxUpdateUIEvent& event) { - event.SetText( wxString::Format(_T("%d"), m_book->GetPageCount()) ); + if(m_book) + event.SetText( wxString::Format(_T("%u"), unsigned(m_book->GetPageCount())) ); } void BookWidgetsPage::OnUpdateUICurSelectText(wxUpdateUIEvent& event) { - event.SetText( wxString::Format(_T("%d"), m_book->GetSelection()) ); + if(m_book) + event.SetText( wxString::Format(_T("%d"), m_book->GetSelection()) ); } void BookWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event)) @@ -519,9 +552,8 @@ class NotebookWidgetsPage : public BookWidgetsPage { public: NotebookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist) - : BookWidgetsPage(book) + : BookWidgetsPage(book, imaglist, notebook_xpm) { - imaglist->Add(wxBitmap(notebook_xpm)); RecreateBook(); } virtual ~NotebookWidgetsPage() {} @@ -538,7 +570,6 @@ protected: return new wxNotebook(this, BookPage_Book, wxDefaultPosition, wxDefaultSize, flags); - } private: @@ -602,9 +633,8 @@ class ListbookWidgetsPage : public BookWidgetsPage { public: ListbookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist) - : BookWidgetsPage(book) + : BookWidgetsPage(book, imaglist, listbook_xpm) { - imaglist->Add(wxBitmap(listbook_xpm)); RecreateBook(); } virtual ~ListbookWidgetsPage() {} @@ -621,7 +651,6 @@ protected: return new wxListbook(this, BookPage_Book, wxDefaultPosition, wxDefaultSize, flags); - } private: @@ -677,9 +706,8 @@ class ChoicebookWidgetsPage : public BookWidgetsPage { public: ChoicebookWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist) - : BookWidgetsPage(book) + : BookWidgetsPage(book, imaglist, choicebk_xpm) { - imaglist->Add(wxBitmap(choicebk_xpm)); RecreateBook(); } virtual ~ChoicebookWidgetsPage() {} @@ -696,7 +724,6 @@ protected: return new wxChoicebook(this, BookPage_Book, wxDefaultPosition, wxDefaultSize, flags); - } private: