]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/notebook/notebook.cpp
Map between int page ids and page pointers using hashes so that it works when
[wxWidgets.git] / samples / notebook / notebook.cpp
index c9e3cb44cab351f47f2f846033cb7b501d7dc4c8..b0eb08c72fba382ec1f7514fb1a4a1fe02158b37 100644 (file)
@@ -211,6 +211,9 @@ MyFrame::MyFrame()
 #if wxUSE_TREEBOOK
     menuType->AppendRadioItem(ID_BOOK_TREEBOOK,   wxT("&Treebook\tCtrl-4"));
 #endif
+#if wxUSE_TOOLBOOK
+    menuType->AppendRadioItem(ID_BOOK_TOOLBOOK,   wxT("T&oolbook\tCtrl-5"));
+#endif
 
     menuType->Check(ID_BOOK_NOTEBOOK + m_type, true);
 
@@ -311,75 +314,77 @@ MyFrame::~MyFrame()
     #define CASE_NOTEBOOK(x)
 #endif
 
-#if wxUSE_CHOICEBOOK
-    #define CASE_CHOICEBOOK(x) case Type_Choicebook: x; break;
-#else
-    #define CASE_CHOICEBOOK(x)
-#endif
-
 #if wxUSE_LISTBOOK
     #define CASE_LISTBOOK(x) case Type_Listbook: x; break;
 #else
     #define CASE_LISTBOOK(x)
 #endif
 
+#if wxUSE_CHOICEBOOK
+    #define CASE_CHOICEBOOK(x) case Type_Choicebook: x; break;
+#else
+    #define CASE_CHOICEBOOK(x)
+#endif
+
 #if wxUSE_TREEBOOK
     #define CASE_TREEBOOK(x) case Type_Treebook: x; break;
 #else
     #define CASE_TREEBOOK(x)
 #endif
 
-#define DISPATCH_ON_TYPE(before, nb, lb, cb, tb, after)                       \
+#if wxUSE_TOOLBOOK
+    #define CASE_TOOLBOOK(x) case Type_Toolbook: x; break;
+#else
+    #define CASE_TOOLBOOK(x)
+#endif
+
+#define DISPATCH_ON_TYPE(before, nb, lb, cb, tb, toolb, after)                       \
     switch ( m_type )                                                         \
     {                                                                         \
         CASE_NOTEBOOK(before nb after)                                        \
-        CASE_CHOICEBOOK(before cb after)                                      \
         CASE_LISTBOOK(before lb after)                                        \
+        CASE_CHOICEBOOK(before cb after)                                      \
         CASE_TREEBOOK(before tb after)                                        \
+        CASE_TOOLBOOK(before toolb after)                                        \
                                                                               \
         default:                                                              \
             wxFAIL_MSG( _T("unknown book control type") );                    \
     }
 
-int MyFrame::TranslateBookFlag(int nb, int lb, int chb, int tbk) const
+int MyFrame::TranslateBookFlag(int nb, int lb, int chb, int tbk, int toolbk) const
 {
     int flag = 0;
 
-    DISPATCH_ON_TYPE(flag =, nb,  lb,  chb,  tbk, + 0);
+    DISPATCH_ON_TYPE(flag =, nb,  lb,  chb,  tbk, toolbk, + 0);
 
     return flag;
 }
 
 void MyFrame::RecreateBook()
 {
-#define SELECT_FLAG(flag) \
-    TranslateBookFlag(wxNB_##flag, wxCHB_##flag, wxLB_##flag, wxTBK_##flag)
-
     int flags;
     switch ( m_orient )
     {
         case ID_ORIENT_TOP:
-            flags = SELECT_FLAG(TOP);
+            flags = wxBK_TOP;
             break;
 
         case ID_ORIENT_BOTTOM:
-            flags = SELECT_FLAG(BOTTOM);
+            flags = wxBK_BOTTOM;
             break;
 
         case ID_ORIENT_LEFT:
-            flags = SELECT_FLAG(LEFT);
+            flags = wxBK_LEFT;
             break;
 
         case ID_ORIENT_RIGHT:
-            flags = SELECT_FLAG(RIGHT);
+            flags = wxBK_RIGHT;
             break;
 
         default:
-            flags = SELECT_FLAG(DEFAULT);
+            flags = wxBK_DEFAULT;
     }
 
-#undef SELECT_FLAG
-
     if ( m_multi && m_type == Type_Notebook )
         flags |= wxNB_MULTILINE;
     flags |= wxDOUBLE_BORDER;
@@ -390,9 +395,10 @@ void MyFrame::RecreateBook()
 
     DISPATCH_ON_TYPE(m_bookCtrl = new,
                          wxNotebook,
-                         wxChoicebook,
                          wxListbook,
+                         wxChoicebook,
                          wxTreebook,
+                         wxToolbook,
                      (m_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, flags));
 
     if ( !m_bookCtrl )
@@ -430,7 +436,7 @@ void MyFrame::RecreateBook()
                 if ( parent != wxNOT_FOUND )
                 {
                     wxStaticCast(m_bookCtrl, wxTreebook)->
-                        AddSubPage(parent, page, str, false, image);
+                        InsertSubPage(parent, page, str, false, image);
 
                     // skip adding it again below
                     continue;
@@ -474,8 +480,6 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_MENU(ID_DELETE_CUR_PAGE, MyFrame::OnDeleteCurPage)
     EVT_MENU(ID_DELETE_LAST_PAGE, MyFrame::OnDeleteLastPage)
     EVT_MENU(ID_NEXT_PAGE, MyFrame::OnNextPage)
-    EVT_MENU(ID_ADD_SUB_PAGE, MyFrame::OnAddSubPage)
-    EVT_MENU(ID_ADD_PAGE_BEFORE, MyFrame::OnAddPageBefore)
 
     // Book controls
 #if wxUSE_NOTEBOOK
@@ -490,18 +494,22 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_CHOICEBOOK_PAGE_CHANGED(wxID_ANY, MyFrame::OnChoicebook)
     EVT_CHOICEBOOK_PAGE_CHANGING(wxID_ANY, MyFrame::OnChoicebook)
 #endif
-#if wxUSE_CHOICEBOOK
+#if wxUSE_TREEBOOK
     EVT_TREEBOOK_PAGE_CHANGED(wxID_ANY, MyFrame::OnTreebook)
     EVT_TREEBOOK_PAGE_CHANGING(wxID_ANY, MyFrame::OnTreebook)
+
+    EVT_MENU(ID_ADD_SUB_PAGE, MyFrame::OnAddSubPage)
+    EVT_MENU(ID_ADD_PAGE_BEFORE, MyFrame::OnAddPageBefore)
+    EVT_UPDATE_UI_RANGE(ID_ADD_PAGE_BEFORE, ID_ADD_SUB_PAGE,
+                            MyFrame::OnUpdateTreeMenu)
+#endif
+#if wxUSE_TOOLBOOK
+    EVT_TOOLBOOK_PAGE_CHANGED(wxID_ANY, MyFrame::OnToolbook)
+    EVT_TOOLBOOK_PAGE_CHANGING(wxID_ANY, MyFrame::OnToolbook)
 #endif
 
     // Update title in idle time
     EVT_IDLE(MyFrame::OnIdle)
-
-#if wxUSE_TREEBOOK
-    EVT_UPDATE_UI_RANGE(ID_ADD_PAGE_BEFORE, ID_ADD_SUB_PAGE,
-                            MyFrame::OnUpdateTreeMenu)
-#endif // wxUSE_TREEBOOK
 END_EVENT_TABLE()
 
 void MyFrame::OnType(wxCommandEvent& event)
@@ -592,15 +600,18 @@ void MyFrame::OnAddSubPage(wxCommandEvent& WXUNUSED(event))
         }
 
         static unsigned s_subPageAdded = 0;
-        currBook->AddSubPage(selPos,
-                             CreateNewPage(),
-                             wxString::Format
-                             (
-                                ADDED_SUB_PAGE_NAME wxT("%u"),
-                                ++s_subPageAdded
-                             ),
-                             true,
-                             GetIconIndex(currBook));
+        currBook->InsertSubPage
+                  (
+                    selPos,
+                    CreateNewPage(),
+                    wxString::Format
+                    (
+                     ADDED_SUB_PAGE_NAME wxT("%u"),
+                     ++s_subPageAdded
+                    ),
+                    true,
+                    GetIconIndex(currBook)
+                  );
     }
 }
 
@@ -734,13 +745,6 @@ void MyFrame::OnBookCtrl(wxBookCtrlBaseEvent& event)
             _T("wxNotebook")
         },
 #endif // wxUSE_NOTEBOOK
-#if wxUSE_CHOICEBOOK
-        {
-            wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED,
-            wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING,
-            _T("wxChoicebook")
-        },
-#endif // wxUSE_CHOICEBOOK
 #if wxUSE_LISTBOOK
         {
             wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED,
@@ -748,6 +752,13 @@ void MyFrame::OnBookCtrl(wxBookCtrlBaseEvent& event)
             _T("wxListbook")
         },
 #endif // wxUSE_LISTBOOK
+#if wxUSE_CHOICEBOOK
+        {
+            wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED,
+            wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING,
+            _T("wxChoicebook")
+        },
+#endif // wxUSE_CHOICEBOOK
 #if wxUSE_TREEBOOK
         {
             wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED,
@@ -755,6 +766,13 @@ void MyFrame::OnBookCtrl(wxBookCtrlBaseEvent& event)
             _T("wxTreebook")
         },
 #endif // wxUSE_TREEBOOK
+#if wxUSE_TOOLBOOK
+        {
+            wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED,
+            wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING,
+            _T("wxToolbook")
+        },
+#endif // wxUSE_TOOLBOOK
     };
 
 
@@ -772,8 +790,11 @@ void MyFrame::OnBookCtrl(wxBookCtrlBaseEvent& event)
         else if ( eventType == ei.typeChanging )
         {
             const int idx = event.GetOldSelection();
+
+            // NB: can't use wxStaticCast here as wxBookCtrlBase is not in
+            //     wxRTTI
             const wxBookCtrlBase * const
-                book = wxStaticCast(event.GetEventObject(), wxBookCtrlBase);
+                book = wx_static_cast(wxBookCtrlBase *, event.GetEventObject());
             if ( idx != wxNOT_FOUND &&
                     book && book->GetPageText(idx) == VETO_PAGE_NAME )
             {
@@ -817,4 +838,3 @@ void MyFrame::OnBookCtrl(wxBookCtrlBaseEvent& event)
     m_text->SetInsertionPointEnd();
 #endif
 }
-