]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/widgets/notebook.cpp
added support for wxCAL_SHOW_WEEK_NUMBERS to generic version of wxCalendarCtrl (...
[wxWidgets.git] / samples / widgets / notebook.cpp
index 357ac05684e63077e43b332b48b85438447c1229..7c9e94a8a8020053c573bfe6bdfcc52d8b120c6a 100644 (file)
@@ -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, const char *const 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, const char *const 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: