added a menu allowing to quickly switch to any page
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38775 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
fdfe568d12
commit
3700e21b91
@ -59,6 +59,8 @@ enum
|
||||
Widgets_ClearLog = 100,
|
||||
Widgets_Quit,
|
||||
|
||||
Widgets_BookCtrl,
|
||||
|
||||
#if wxUSE_TOOLTIPS
|
||||
Widgets_SetTooltip,
|
||||
#endif // wxUSE_TOOLTIPS
|
||||
@ -73,7 +75,10 @@ enum
|
||||
Widgets_BorderRaised,
|
||||
Widgets_BorderSunken,
|
||||
Widgets_BorderDouble,
|
||||
Widgets_BorderDefault
|
||||
Widgets_BorderDefault,
|
||||
|
||||
Widgets_GoToPage,
|
||||
Widgets_GoToPageLast = Widgets_GoToPage + 100
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -109,6 +114,9 @@ protected:
|
||||
void OnExit(wxCommandEvent& event);
|
||||
|
||||
#if wxUSE_MENUS
|
||||
void OnPageChanged(wxBookCtrlEvent& event);
|
||||
void OnGoToPage(wxCommandEvent& event);
|
||||
|
||||
#if wxUSE_TOOLTIPS
|
||||
void OnSetTooltip(wxCommandEvent& event);
|
||||
#endif // wxUSE_TOOLTIPS
|
||||
@ -233,6 +241,11 @@ BEGIN_EVENT_TABLE(WidgetsFrame, wxFrame)
|
||||
EVT_MENU(Widgets_SetTooltip, WidgetsFrame::OnSetTooltip)
|
||||
#endif // wxUSE_TOOLTIPS
|
||||
|
||||
#if wxUSE_MENUS
|
||||
EVT_BOOKCTRL_PAGE_CHANGED(Widgets_BookCtrl, WidgetsFrame::OnPageChanged)
|
||||
EVT_MENU_RANGE(Widgets_GoToPage, Widgets_GoToPageLast,
|
||||
WidgetsFrame::OnGoToPage)
|
||||
|
||||
EVT_MENU(Widgets_SetFgColour, WidgetsFrame::OnSetFgCol)
|
||||
EVT_MENU(Widgets_SetBgColour, WidgetsFrame::OnSetBgCol)
|
||||
EVT_MENU(Widgets_SetFont, WidgetsFrame::OnSetFont)
|
||||
@ -242,6 +255,7 @@ BEGIN_EVENT_TABLE(WidgetsFrame, wxFrame)
|
||||
WidgetsFrame::OnSetBorder)
|
||||
|
||||
EVT_MENU(wxID_EXIT, WidgetsFrame::OnExit)
|
||||
#endif // wxUSE_MENUS
|
||||
END_EVENT_TABLE()
|
||||
|
||||
// ============================================================================
|
||||
@ -350,7 +364,7 @@ WidgetsFrame::WidgetsFrame(const wxString& title)
|
||||
// Uncomment to suppress page theme (draw in solid colour)
|
||||
//style |= wxNB_NOPAGETHEME;
|
||||
|
||||
m_book = new wxBookCtrl(m_panel, wxID_ANY, wxDefaultPosition,
|
||||
m_book = new wxBookCtrl(m_panel, Widgets_BookCtrl, wxDefaultPosition,
|
||||
#ifdef __WXMOTIF__
|
||||
wxSize(500, wxDefaultCoord), // under Motif, height is a function of the width...
|
||||
#else
|
||||
@ -416,19 +430,31 @@ void WidgetsFrame::InitBook()
|
||||
ArrayWidgetsPage pages;
|
||||
wxArrayString labels;
|
||||
|
||||
wxMenu *menuPages = new wxMenu;
|
||||
unsigned nPage = 0;
|
||||
|
||||
// we need to first create all pages and only then add them to the book
|
||||
// as we need the image list first
|
||||
WidgetsPageInfo *info = WidgetsPage::ms_widgetPages;
|
||||
while ( info )
|
||||
//
|
||||
// we also construct the pages menu during this first iteration
|
||||
for ( WidgetsPageInfo *info = WidgetsPage::ms_widgetPages;
|
||||
info;
|
||||
info = info->GetNext(), nPage++ )
|
||||
{
|
||||
WidgetsPage *page = (*info->GetCtor())(m_book, m_imaglist);
|
||||
pages.Add(page);
|
||||
|
||||
labels.Add(info->GetLabel());
|
||||
|
||||
info = info->GetNext();
|
||||
menuPages->AppendRadioItem
|
||||
(
|
||||
Widgets_GoToPage + nPage,
|
||||
wxString::Format("%s\tF%u",
|
||||
info->GetLabel().c_str(), nPage + 1)
|
||||
);
|
||||
}
|
||||
|
||||
GetMenuBar()->Append(menuPages, _T("&Page"));
|
||||
|
||||
m_book->SetImageList(m_imaglist);
|
||||
|
||||
// now do add them
|
||||
@ -470,6 +496,17 @@ void WidgetsFrame::OnButtonClearLog(wxCommandEvent& WXUNUSED(event))
|
||||
|
||||
#if wxUSE_MENUS
|
||||
|
||||
void WidgetsFrame::OnPageChanged(wxBookCtrlEvent& event)
|
||||
{
|
||||
GetMenuBar()->Check(Widgets_GoToPage + event.GetSelection(), true);
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void WidgetsFrame::OnGoToPage(wxCommandEvent& event)
|
||||
{
|
||||
m_book->SetSelection(event.GetId() - Widgets_GoToPage);
|
||||
}
|
||||
|
||||
#if wxUSE_TOOLTIPS
|
||||
|
||||
void WidgetsFrame::OnSetTooltip(wxCommandEvent& WXUNUSED(event))
|
||||
@ -636,7 +673,7 @@ WidgetsPageInfo::WidgetsPageInfo(Constructor ctor, const wxChar *label)
|
||||
m_next = NULL;
|
||||
|
||||
// dummy sorting: add and immediately sort in the list according to label
|
||||
if(WidgetsPage::ms_widgetPages)
|
||||
if ( WidgetsPage::ms_widgetPages )
|
||||
{
|
||||
WidgetsPageInfo *node_prev = WidgetsPage::ms_widgetPages;
|
||||
if ( wxStrcmp(label, node_prev->GetLabel().c_str()) < 0 )
|
||||
|
Loading…
Reference in New Issue
Block a user