prevent selecting the treebook items without corresponding pages to ensure that CurrentPage() always returns something non NULL and removed the checks for it

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40806 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-08-24 21:05:20 +00:00
parent 9f30729a03
commit 3e85973919
2 changed files with 40 additions and 58 deletions

View File

@@ -137,6 +137,7 @@ protected:
void OnExit(wxCommandEvent& event); void OnExit(wxCommandEvent& event);
#if wxUSE_MENUS #if wxUSE_MENUS
void OnPageChanging(WidgetsBookCtrlEvent& event);
void OnPageChanged(WidgetsBookCtrlEvent& event); void OnPageChanged(WidgetsBookCtrlEvent& event);
void OnGoToPage(wxCommandEvent& event); void OnGoToPage(wxCommandEvent& event);
@@ -156,7 +157,7 @@ protected:
// initialize the book: add all pages to it // initialize the book: add all pages to it
void InitBook(); void InitBook();
// finding current page assuming book inside book // return the currently selected page (never NULL)
WidgetsPage *CurrentPage(); WidgetsPage *CurrentPage();
private: private:
@@ -268,6 +269,7 @@ BEGIN_EVENT_TABLE(WidgetsFrame, wxFrame)
#endif // wxUSE_TOOLTIPS #endif // wxUSE_TOOLTIPS
#if wxUSE_MENUS #if wxUSE_MENUS
EVT_WIDGETS_PAGE_CHANGING(wxID_ANY, WidgetsFrame::OnPageChanging)
EVT_WIDGETS_PAGE_CHANGED(wxID_ANY, WidgetsFrame::OnPageChanged) EVT_WIDGETS_PAGE_CHANGED(wxID_ANY, WidgetsFrame::OnPageChanged)
EVT_MENU_RANGE(Widgets_GoToPage, Widgets_GoToPageLast, EVT_MENU_RANGE(Widgets_GoToPage, Widgets_GoToPageLast,
WidgetsFrame::OnGoToPage) WidgetsFrame::OnGoToPage)
@@ -556,10 +558,11 @@ void WidgetsFrame::InitBook()
for ( size_t n = 0; n < count; n++ ) for ( size_t n = 0; n < count; n++ )
{ {
#if USE_TREEBOOK #if USE_TREEBOOK
m_book->AddSubPage( m_book->AddSubPage
#else #else
books[cat]->AddPage( books[cat]->AddPage
#endif #endif
(
pages[cat][n], pages[cat][n],
labels[cat][n], labels[cat][n],
false, // don't select false, // don't select
@@ -569,26 +572,28 @@ void WidgetsFrame::InitBook()
} }
#if USE_TREEBOOK #if USE_TREEBOOK
// for treebook page #0 is empty parent page only // for treebook page #0 is empty parent page only so select the first page
// with some contents
m_book->SetSelection(1); m_book->SetSelection(1);
m_book->SetSelection(0);
#endif // but ensure that the top of the tree is shown nevertheless
wxTreeCtrl * const tree = m_book->GetTreeCtrl();
tree->EnsureVisible(tree->GetRootItem());
#endif // USE_TREEBOOK
} }
WidgetsPage *WidgetsFrame::CurrentPage() WidgetsPage *WidgetsFrame::CurrentPage()
{ {
wxWindow *page = m_book->GetCurrentPage(); wxWindow *page = m_book->GetCurrentPage();
if(!page) return NULL;
#if USE_TREEBOOK #if !USE_TREEBOOK
return wxStaticCast(page, WidgetsPage);
#else
WidgetsBookCtrl *subBook = wxStaticCast(page, WidgetsBookCtrl); WidgetsBookCtrl *subBook = wxStaticCast(page, WidgetsBookCtrl);
if (!subBook) return NULL; wxCHECK_MSG( subBook, NULL, _T("no WidgetsBookCtrl?") );
page = subBook->GetCurrentPage(); page = subBook->GetCurrentPage();
if(!page) return NULL; #endif // !USE_TREEBOOK
return wxStaticCast(page, WidgetsPage); return wxStaticCast(page, WidgetsPage);
#endif
} }
WidgetsFrame::~WidgetsFrame() WidgetsFrame::~WidgetsFrame()
@@ -616,15 +621,24 @@ void WidgetsFrame::OnButtonClearLog(wxCommandEvent& WXUNUSED(event))
#if wxUSE_MENUS #if wxUSE_MENUS
void WidgetsFrame::OnPageChanging(WidgetsBookCtrlEvent& event)
{
if ( !m_book->GetPage(event.GetSelection()) )
event.Veto();
}
void WidgetsFrame::OnPageChanged(WidgetsBookCtrlEvent& event) void WidgetsFrame::OnPageChanged(WidgetsBookCtrlEvent& event)
{ {
const int sel = event.GetSelection();
// adjust "Page" menu selection // adjust "Page" menu selection
wxMenuItem *item = GetMenuBar()->FindItem(Widgets_GoToPage + event.GetSelection()); wxMenuItem *item = GetMenuBar()->FindItem(Widgets_GoToPage + sel);
if (item) item->Check(); if ( item )
item->Check();
// lazy creation of the pages // lazy creation of the pages
WidgetsPage* page = CurrentPage(); WidgetsPage *page = CurrentPage();
if (page && (page->GetChildren().GetCount()==0)) if ( page->GetChildren().empty() )
{ {
wxWindowUpdateLocker noUpdates(page); wxWindowUpdateLocker noUpdates(page);
page->CreateContent(); page->CreateContent();
@@ -633,7 +647,7 @@ void WidgetsFrame::OnPageChanged(WidgetsBookCtrlEvent& event)
for ( size_t i = 0; i < book->GetPageCount(); ++i ) for ( size_t i = 0; i < book->GetPageCount(); ++i )
{ {
wxWindow *page = book->GetPage(i); wxWindow *page = book->GetPage(i);
if (page) if ( page )
{ {
size.IncTo(page->GetSize()); size.IncTo(page->GetSize());
} }
@@ -659,14 +673,6 @@ void WidgetsFrame::OnGoToPage(wxCommandEvent& event)
void WidgetsFrame::OnSetTooltip(wxCommandEvent& WXUNUSED(event)) void WidgetsFrame::OnSetTooltip(wxCommandEvent& WXUNUSED(event))
{ {
WidgetsPage *page = CurrentPage();
if(!page)
{
wxLogMessage(_T("Page not selected."));
return;
}
static wxString s_tip = _T("This is a tooltip"); static wxString s_tip = _T("This is a tooltip");
wxTextEntryDialog dialog wxTextEntryDialog dialog
@@ -683,6 +689,8 @@ void WidgetsFrame::OnSetTooltip(wxCommandEvent& WXUNUSED(event))
s_tip = dialog.GetValue(); s_tip = dialog.GetValue();
s_tip.Replace(_T("\\n"), _T("\n")); s_tip.Replace(_T("\\n"), _T("\n"));
WidgetsPage *page = CurrentPage();
page->GetWidget()->SetToolTip(s_tip); page->GetWidget()->SetToolTip(s_tip);
wxControl *ctrl2 = page->GetWidget2(); wxControl *ctrl2 = page->GetWidget2();
@@ -697,11 +705,6 @@ void WidgetsFrame::OnSetFgCol(wxCommandEvent& WXUNUSED(event))
#if wxUSE_COLOURDLG #if wxUSE_COLOURDLG
// allow for debugging the default colour the first time this is called // allow for debugging the default colour the first time this is called
WidgetsPage *page = CurrentPage(); WidgetsPage *page = CurrentPage();
if(!page)
{
wxLogMessage(_T("Page not selected."));
return;
}
if (!m_colFg.Ok()) if (!m_colFg.Ok())
m_colFg = page->GetForegroundColour(); m_colFg = page->GetForegroundColour();
@@ -730,11 +733,6 @@ void WidgetsFrame::OnSetBgCol(wxCommandEvent& WXUNUSED(event))
{ {
#if wxUSE_COLOURDLG #if wxUSE_COLOURDLG
WidgetsPage *page = CurrentPage(); WidgetsPage *page = CurrentPage();
if(!page)
{
wxLogMessage(_T("Page not selected."));
return;
}
if ( !m_colBg.Ok() ) if ( !m_colBg.Ok() )
m_colBg = page->GetBackgroundColour(); m_colBg = page->GetBackgroundColour();
@@ -763,11 +761,6 @@ void WidgetsFrame::OnSetFont(wxCommandEvent& WXUNUSED(event))
{ {
#if wxUSE_FONTDLG #if wxUSE_FONTDLG
WidgetsPage *page = CurrentPage(); WidgetsPage *page = CurrentPage();
if(!page)
{
wxLogMessage(_T("Page not selected."));
return;
}
if (!m_font.Ok()) if (!m_font.Ok())
m_font = page->GetFont(); m_font = page->GetFont();
@@ -794,14 +787,7 @@ void WidgetsFrame::OnSetFont(wxCommandEvent& WXUNUSED(event))
void WidgetsFrame::OnEnable(wxCommandEvent& event) void WidgetsFrame::OnEnable(wxCommandEvent& event)
{ {
WidgetsPage *page = CurrentPage(); CurrentPage()->GetWidget()->Enable(event.IsChecked());
if(!page)
{
wxLogMessage(_T("Page not selected."));
return;
}
page->GetWidget()->Enable(event.IsChecked());
} }
void WidgetsFrame::OnSetBorder(wxCommandEvent& event) void WidgetsFrame::OnSetBorder(wxCommandEvent& event)
@@ -828,12 +814,6 @@ void WidgetsFrame::OnSetBorder(wxCommandEvent& event)
WidgetsPage *page = CurrentPage(); WidgetsPage *page = CurrentPage();
if(!page)
{
wxLogMessage(_T("Page not selected."));
return;
}
page->RecreateWidget(); page->RecreateWidget();
} }
@@ -847,9 +827,9 @@ void WidgetsFrame::OnToggleGlobalBusyCursor(wxCommandEvent& event)
void WidgetsFrame::OnToggleBusyCursor(wxCommandEvent& event) void WidgetsFrame::OnToggleBusyCursor(wxCommandEvent& event)
{ {
WidgetsPage *page = CurrentPage(); CurrentPage()->GetWidget()->SetCursor(*(event.IsChecked()
page->GetWidget()->SetCursor(*(event.IsChecked() ? wxHOURGLASS_CURSOR ? wxHOURGLASS_CURSOR
: wxSTANDARD_CURSOR)); : wxSTANDARD_CURSOR));
} }
#endif // wxUSE_MENUS #endif // wxUSE_MENUS

View File

@@ -17,12 +17,14 @@
#define USE_TREEBOOK 1 #define USE_TREEBOOK 1
#define WidgetsBookCtrl wxTreebook #define WidgetsBookCtrl wxTreebook
#define WidgetsBookCtrlEvent wxTreebookEvent #define WidgetsBookCtrlEvent wxTreebookEvent
#define EVT_WIDGETS_PAGE_CHANGING(id,func) EVT_TREEBOOK_PAGE_CHANGING(id,func)
#define EVT_WIDGETS_PAGE_CHANGED(id,func) EVT_TREEBOOK_PAGE_CHANGED(id,func) #define EVT_WIDGETS_PAGE_CHANGED(id,func) EVT_TREEBOOK_PAGE_CHANGED(id,func)
#else #else
#include "wx/bookctrl.h" #include "wx/bookctrl.h"
#define USE_TREEBOOK 0 #define USE_TREEBOOK 0
#define WidgetsBookCtrl wxBookCtrl #define WidgetsBookCtrl wxBookCtrl
#define WidgetsBookCtrlEvent wxBookCtrlEvent #define WidgetsBookCtrlEvent wxBookCtrlEvent
#define EVT_WIDGETS_PAGE_CHANGING(id,func) EVT_BOOKCTRL_PAGE_CHANGING(id,func)
#define EVT_WIDGETS_PAGE_CHANGED(id,func) EVT_BOOKCTRL_PAGE_CHANGED(id,func) #define EVT_WIDGETS_PAGE_CHANGED(id,func) EVT_BOOKCTRL_PAGE_CHANGED(id,func)
#endif #endif