X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/54a8a78e3bc25463ee1779b40eb2686da737379b..b5ef33b2aed3f6aea3b7b71189a93985bfda3b3a:/src/aui/auibook.cpp diff --git a/src/aui/auibook.cpp b/src/aui/auibook.cpp index 8813881c6f..64e0d728e5 100644 --- a/src/aui/auibook.cpp +++ b/src/aui/auibook.cpp @@ -666,7 +666,14 @@ int wxAuiDefaultTabArt::ShowDropDown(wxWindow* wnd, for (i = 0; i < count; ++i) { const wxAuiNotebookPage& page = pages.Item(i); - menuPopup.AppendCheckItem(1000+i, page.caption); + wxString caption = page.caption; + + // if there is no caption, make it a space. This will prevent + // an assert in the menu code. + if (caption.IsEmpty()) + caption = wxT(" "); + + menuPopup.AppendCheckItem(1000+i, caption); } if (active_idx != -1) @@ -1437,14 +1444,14 @@ wxWindow* wxAuiTabContainer::GetWindowFromIdx(size_t idx) const int wxAuiTabContainer::GetIdxFromWindow(wxWindow* wnd) const { - size_t i, page_count = m_pages.GetCount(); - for (i = 0; i < page_count; ++i) + const size_t page_count = m_pages.GetCount(); + for ( size_t i = 0; i < page_count; ++i ) { wxAuiNotebookPage& page = m_pages.Item(i); if (page.window == wnd) return i; } - return -1; + return wxNOT_FOUND; } wxAuiNotebookPage& wxAuiTabContainer::GetPage(size_t idx) @@ -2225,6 +2232,11 @@ public: m_tab_ctrl_height = 20; } + ~wxTabFrame() + { + wxDELETE(m_tabs); + } + void SetTabCtrlHeight(int h) { m_tab_ctrl_height = h; @@ -2614,10 +2626,7 @@ bool wxAuiNotebook::InsertPage(size_t page_idx, if (select) { - int idx = m_tabs.GetIdxFromWindow(page); - wxASSERT_MSG(idx != -1, wxT("Invalid Page index returned on wxAuiNotebook::InsertPage()")); - - SetSelection(idx); + SetSelectionToWindow(page); } return true; @@ -2703,7 +2712,7 @@ bool wxAuiNotebook::RemovePage(size_t page_idx) if (new_active) { m_curpage = -1; - SetSelection(m_tabs.GetIdxFromWindow(new_active)); + SetSelectionToWindow(new_active); } return true; @@ -2858,6 +2867,14 @@ size_t wxAuiNotebook::SetSelection(size_t new_page) return m_curpage; } +void wxAuiNotebook::SetSelectionToWindow(wxWindow *win) +{ + const int idx = m_tabs.GetIdxFromWindow(win); + wxCHECK_RET( idx != wxNOT_FOUND, _T("invalid notebook page") ); + + SetSelection(idx); +} + // GetPageCount() returns the total number of // pages managed by the multi-notebook size_t wxAuiNotebook::GetPageCount() const @@ -3070,7 +3087,7 @@ void wxAuiNotebook::Split(size_t page, int direction) m_curpage = -1; // set the active page to the one we just split off - SetSelection(m_tabs.GetIdxFromWindow(page_info.window)); + SetSelectionToPage(page_info); UpdateHintWindowSize(); } @@ -3093,10 +3110,7 @@ void wxAuiNotebook::OnTabClicked(wxCommandEvent& command_evt) wxWindow* wnd = ctrl->GetWindowFromIdx(evt.GetSelection()); wxASSERT(wnd != NULL); - int idx = m_tabs.GetIdxFromWindow(wnd); - wxASSERT(idx != -1); - - SetSelection(idx); + SetSelectionToWindow(wnd); } void wxAuiNotebook::OnTabBeginDrag(wxCommandEvent&) @@ -3295,9 +3309,11 @@ void wxAuiNotebook::OnTabEndDrag(wxCommandEvent& command_evt) // get main index of the page int main_idx = m_tabs.GetIdxFromWindow(src_page); + wxCHECK_RET( main_idx != wxNOT_FOUND, _T("no source page?") ); + // make a copy of the page info - wxAuiNotebookPage page_info = m_tabs.GetPage((size_t)main_idx); + wxAuiNotebookPage page_info = m_tabs.GetPage(main_idx); // remove the page from the source notebook RemovePage(main_idx); @@ -3330,7 +3346,7 @@ void wxAuiNotebook::OnTabEndDrag(wxCommandEvent& command_evt) dest_tabs->Refresh(); // set the selection in the destination tab control - nb->SetSelection(nb->m_tabs.GetIdxFromWindow(page_info.window)); + nb->SetSelectionToPage(page_info); return; } @@ -3429,7 +3445,7 @@ void wxAuiNotebook::OnTabEndDrag(wxCommandEvent& command_evt) m_curpage = -1; // set the active page to the one we just split off - SetSelection(m_tabs.GetIdxFromWindow(page_info.window)); + SetSelectionToPage(page_info); UpdateHintWindowSize(); } @@ -3568,9 +3584,11 @@ void wxAuiNotebook::OnTabButton(wxCommandEvent& command_evt) { close_wnd->Close(); } - else + else { int main_idx = m_tabs.GetIdxFromWindow(close_wnd); + wxCHECK_RET( main_idx != wxNOT_FOUND, _T("no page to delete?") ); + DeletePage(main_idx); } }