From: Włodzimierz Skiba Date: Fri, 17 Sep 2004 17:24:34 +0000 (+0000) Subject: wxChoicebook follows wxListBook internal changes. Styles centralized for all wxBookCtrls. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/bb08a4a194a81dce7a08a642060b044a2a19d148 wxChoicebook follows wxListBook internal changes. Styles centralized for all wxBookCtrls. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29175 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/choicebk.h b/include/wx/choicebk.h index 17f50bdc8d..db67bd1220 100644 --- a/include/wx/choicebk.h +++ b/include/wx/choicebk.h @@ -24,26 +24,6 @@ class WXDLLEXPORT wxChoice; -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// wxChoicebook styles -enum -{ - // default alignment: top everywhere - wxCHB_DEFAULT = 0, - - // put the choice control to the left/right/top/bottom of the page area - wxCHB_TOP = 0x1, - wxCHB_BOTTOM = 0x2, - wxCHB_LEFT = 0x4, - wxCHB_RIGHT = 0x8, - - // the mask which can be used to extract the alignment from the style - wxCHB_ALIGN_MASK = 0xf -}; - // ---------------------------------------------------------------------------- // wxChoicebook // ---------------------------------------------------------------------------- @@ -99,10 +79,6 @@ public: protected: virtual wxWindow *DoRemovePage(size_t page); -private: - // common part of all constructors - void Init(); - // get the size which the choice control should have wxSize GetChoiceSize() const; @@ -113,13 +89,15 @@ private: void OnSize(wxSizeEvent& event); void OnChoiceSelected(wxCommandEvent& event); - // the choice control we use for showing the pages index wxChoice *m_choice; // the currently selected page or wxNOT_FOUND if none int m_selection; +private: + // common part of all constructors + void Init(); DECLARE_EVENT_TABLE() DECLARE_DYNAMIC_CLASS_NO_COPY(wxChoicebook) @@ -151,16 +129,16 @@ typedef void (wxEvtHandler::*wxChoicebookEventFunction)(wxChoicebookEvent&); DECLARE_EVENT_TABLE_ENTRY( \ wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED, \ id, \ - -1, \ + wxID_ANY, \ (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxChoicebookEventFunction, &fn ), \ NULL \ ), #define EVT_CHOICEBOOK_PAGE_CHANGING(id, fn) \ DECLARE_EVENT_TABLE_ENTRY( \ - wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING, \ + wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING, \ id, \ - -1, \ + wxID_ANY, \ (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxChoicebookEventFunction, &fn ), \ NULL \ ), diff --git a/include/wx/defs.h b/include/wx/defs.h index 5a04a4f19c..465edc94f6 100644 --- a/include/wx/defs.h +++ b/include/wx/defs.h @@ -1336,6 +1336,27 @@ enum wxBorder #define wxNB_RIGHT 0x0040 #define wxNB_BOTTOM 0x0080 #define wxNB_MULTILINE 0x0100 +#define wxNB_DEFAULT wxNB_TOP + +/* + * wxListbook flags + */ +#define wxLB_DEFAULT 0x0 +#define wxLB_TOP 0x1 +#define wxLB_BOTTOM 0x2 +#define wxLB_LEFT 0x4 +#define wxLB_RIGHT 0x8 +#define wxLB_ALIGN_MASK 0xf + +/* + * wxChoicebook flags + */ +#define wxCHB_DEFAULT 0x0 +#define wxCHB_TOP 0x1 +#define wxCHB_BOTTOM 0x2 +#define wxCHB_LEFT 0x4 +#define wxCHB_RIGHT 0x8 +#define wxCHB_ALIGN_MASK 0xf /* * wxTabCtrl flags diff --git a/include/wx/listbook.h b/include/wx/listbook.h index 44ab2b1c5e..40e2976093 100644 --- a/include/wx/listbook.h +++ b/include/wx/listbook.h @@ -39,26 +39,6 @@ class WXDLLEXPORT wxListEvent; class WXDLLEXPORT wxStaticLine; #endif // wxUSE_LINE_IN_LISTBOOK -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// wxListbook styles -enum -{ - // default alignment: left everywhere except Mac where it is top - wxLB_DEFAULT = 0, - - // put the list control to the left/right/top/bottom of the page area - wxLB_TOP = 0x1, - wxLB_BOTTOM = 0x2, - wxLB_LEFT = 0x4, - wxLB_RIGHT = 0x8, - - // the mask which can be used to extract the alignment from the style - wxLB_ALIGN_MASK = 0xf -}; - // ---------------------------------------------------------------------------- // wxListbook // ---------------------------------------------------------------------------- @@ -153,7 +133,7 @@ class WXDLLEXPORT wxListbookEvent : public wxBookCtrlEvent { public: wxListbookEvent(wxEventType commandType = wxEVT_NULL, int id = 0, - int nSel = -1, int nOldSel = -1) + int nSel = wxNOT_FOUND, int nOldSel = wxNOT_FOUND) : wxBookCtrlEvent(commandType, id, nSel, nOldSel) { } @@ -171,7 +151,7 @@ typedef void (wxEvtHandler::*wxListbookEventFunction)(wxListbookEvent&); DECLARE_EVENT_TABLE_ENTRY( \ wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED, \ id, \ - -1, \ + wxID_ANY, \ (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxListbookEventFunction, &fn ), \ NULL \ ), @@ -180,7 +160,7 @@ typedef void (wxEvtHandler::*wxListbookEventFunction)(wxListbookEvent&); DECLARE_EVENT_TABLE_ENTRY( \ wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING, \ id, \ - -1, \ + wxID_ANY, \ (wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxListbookEventFunction, &fn ), \ NULL \ ), diff --git a/src/generic/choicbkg.cpp b/src/generic/choicbkg.cpp index aca807d88b..7620db21e9 100644 --- a/src/generic/choicbkg.cpp +++ b/src/generic/choicbkg.cpp @@ -202,22 +202,12 @@ void wxChoicebook::OnSize(wxSizeEvent& event) m_choice->Move(posChoice.x, posChoice.y); m_choice->SetSize(sizeChoice.x, sizeChoice.y); - // we should always have some selection if possible - if ( m_selection == wxNOT_FOUND && GetPageCount() ) - { - SetSelection(0); - } - + // resize the currently shown page if ( m_selection != wxNOT_FOUND ) { wxWindow *page = m_pages[m_selection]; wxCHECK_RET( page, _T("NULL page in wxChoicebook?") ); - page->SetSize(GetPageRect()); - if ( !page->IsShown() ) - { - page->Show(); - } } } @@ -295,26 +285,24 @@ int wxChoicebook::SetSelection(size_t n) wxCHECK_MSG( n < GetPageCount(), wxNOT_FOUND, _T("invalid page index in wxChoicebook::SetSelection()") ); - int selOld = m_selection; + const int selOld = m_selection; if ( (int)n != m_selection ) { - m_choice->Select(n); - - // change m_selection only now, otherwise OnChoiceSelected() would ignore - // the selection change event - if ( m_selection != wxNOT_FOUND ) m_pages[m_selection]->Hide(); - wxWindow *page = m_pages[m_selection = n]; + wxWindow *page = m_pages[n]; page->SetSize(GetPageRect()); page->Show(); + + // change m_selection only now to ignore the selection change event + m_selection = n; + m_choice->Select(n); } return selOld; } - // ---------------------------------------------------------------------------- // adding/removing the pages // ---------------------------------------------------------------------------- @@ -331,9 +319,10 @@ wxChoicebook::InsertPage(size_t n, m_choice->Insert(text, n); - if ( bSelect ) + // we should always have some selection if possible + if ( bSelect || (m_selection == wxNOT_FOUND) ) { - m_choice->Select(n); + SetSelection(n); } else // don't select this page { @@ -347,10 +336,28 @@ wxChoicebook::InsertPage(size_t n, wxWindow *wxChoicebook::DoRemovePage(size_t page) { + const int page_count = GetPageCount(); wxWindow *win = wxBookCtrl::DoRemovePage(page); + if ( win ) { m_choice->Delete(page); + + if (m_selection >= (int)page) + { + // force new sel valid if possible + int sel = m_selection - 1; + if (page_count == 1) + sel = wxNOT_FOUND; + else if ((page_count == 2) || (sel == -1)) + sel = 0; + + // force sel invalid if deleting current page - don't try to hide it + m_selection = (m_selection == (int)page) ? wxNOT_FOUND : m_selection - 1; + + if ((sel != wxNOT_FOUND) && (sel != m_selection)) + SetSelection(sel); + } } return win; @@ -370,6 +377,7 @@ bool wxChoicebook::DeleteAllPages() void wxChoicebook::OnChoiceSelected(wxCommandEvent& eventChoice) { const int selNew = eventChoice.GetSelection(); + const int selOld = m_selection; if ( selNew == m_selection ) { @@ -384,7 +392,7 @@ void wxChoicebook::OnChoiceSelected(wxCommandEvent& eventChoice) eventIng.SetEventObject(this); eventIng.SetSelection(selNew); - eventIng.SetOldSelection(m_selection); + eventIng.SetOldSelection(selOld); if ( GetEventHandler()->ProcessEvent(eventIng) && !eventIng.IsAllowed() ) { m_choice->Select(m_selection); @@ -392,17 +400,13 @@ void wxChoicebook::OnChoiceSelected(wxCommandEvent& eventChoice) } // change allowed: do change the page and notify the user about it - if ( m_selection != wxNOT_FOUND ) - m_pages[m_selection]->Hide(); - wxWindow *page = m_pages[m_selection = selNew]; - page->SetSize(GetPageRect()); - page->Show(); + SetSelection(selNew); wxChoicebookEvent eventEd(wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED, GetId()); eventEd.SetEventObject(this); eventEd.SetSelection(selNew); - eventEd.SetOldSelection(m_selection); + eventEd.SetOldSelection(selOld); (void)GetEventHandler()->ProcessEvent(eventEd); } diff --git a/src/generic/listbkg.cpp b/src/generic/listbkg.cpp index 404d28c6d9..928f9b1026 100644 --- a/src/generic/listbkg.cpp +++ b/src/generic/listbkg.cpp @@ -355,9 +355,9 @@ int wxListbook::SetSelection(size_t n) // change m_selection only now to ignore the selection change event m_selection = n; - + m_list->Select(n); - m_list->Focus(n); + m_list->Focus(n); } return selOld; @@ -398,7 +398,7 @@ wxWindow *wxListbook::DoRemovePage(size_t page) { const int page_count = GetPageCount(); wxWindow *win = wxBookCtrl::DoRemovePage(page); - + if ( win ) { m_list->DeleteItem(page); @@ -408,14 +408,14 @@ wxWindow *wxListbook::DoRemovePage(size_t page) // force new sel valid if possible int sel = m_selection - 1; if (page_count == 1) - sel = -1; + sel = wxNOT_FOUND; else if ((page_count == 2) || (sel == -1)) sel = 0; - + // force sel invalid if deleting current page - don't try to hide it - m_selection = (m_selection == (int)page) ? -1 : m_selection - 1; - - if ((sel != -1) && (sel != m_selection)) + m_selection = (m_selection == (int)page) ? wxNOT_FOUND : m_selection - 1; + + if ((sel != wxNOT_FOUND) && (sel != m_selection)) SetSelection(sel); } }