X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1d6fcbcc7088e9c104b3dc5b4704a07f728d55ae..33e478497fa5b722a3d84dca2ccffb10ce181910:/samples/notebook/notebook.cpp diff --git a/samples/notebook/notebook.cpp b/samples/notebook/notebook.cpp index 4e5737b60f..8a204570a5 100644 --- a/samples/notebook/notebook.cpp +++ b/samples/notebook/notebook.cpp @@ -6,7 +6,7 @@ // Created: 26/10/98 // RCS-ID: $Id$ // Copyright: (c) 1998-2002 wxWidgets team -// License: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // For compilers that support precompilation, includes "wx.h". @@ -30,16 +30,24 @@ #include "../sample.xpm" #endif +//----------------------------------------------------------------------------- +// MyApp +//----------------------------------------------------------------------------- + IMPLEMENT_APP(MyApp) bool MyApp::OnInit() { + if ( !wxApp::OnInit() ) + return false; + #if wxUSE_HELP wxHelpProvider::Set( new wxSimpleHelpProvider ); #endif // Create the main window MyFrame *frame = new MyFrame(); + SetTopWindow(frame); // Problem with generic wxNotebook implementation whereby it doesn't size // properly unless you set the size again @@ -54,6 +62,11 @@ bool MyApp::OnInit() return true; } + +//----------------------------------------------------------------------------- +// Creation functions +//----------------------------------------------------------------------------- + wxPanel *CreateUserCreatedPage(wxBookCtrlBase *parent) { wxPanel *panel = new wxPanel(parent); @@ -63,7 +76,7 @@ wxPanel *CreateUserCreatedPage(wxBookCtrlBase *parent) #endif (void) new wxButton( panel, wxID_ANY, wxT("Button"), - wxPoint(10, 10), wxDefaultSize ); + wxPoint(10, 10), wxDefaultSize ); return panel; } @@ -76,13 +89,15 @@ wxPanel *CreateRadioButtonsPage(wxBookCtrlBase *parent) panel->SetHelpText( wxT( "Panel with some Radio Buttons" ) ); #endif - wxString animals[] = { wxT("Fox"), wxT("Hare"), wxT("Rabbit"), + wxString animals[] = + { wxT("Fox"), wxT("Hare"), wxT("Rabbit"), wxT("Sabre-toothed tiger"), wxT("T Rex") }; wxRadioBox *radiobox1 = new wxRadioBox(panel, wxID_ANY, wxT("Choose one"), wxDefaultPosition, wxDefaultSize, 5, animals, 2, wxRA_SPECIFY_ROWS); - wxString computers[] = { wxT("Amiga"), wxT("Commodore 64"), wxT("PET"), + wxString computers[] = + { wxT("Amiga"), wxT("Commodore 64"), wxT("PET"), wxT("Another") }; wxRadioBox *radiobox2 = new wxRadioBox(panel, wxID_ANY, @@ -106,7 +121,8 @@ wxPanel *CreateVetoPage(wxBookCtrlBase *parent) #endif (void) new wxStaticText( panel, wxID_ANY, - wxT("This page intentionally left blank"), wxPoint(10, 10) ); + wxT("This page intentionally left blank"), + wxPoint(10, 10) ); return panel; } @@ -128,7 +144,6 @@ wxPanel *CreateBigButtonPage(wxBookCtrlBase *parent) return panel; } - wxPanel *CreateInsertPage(wxBookCtrlBase *parent) { wxPanel *panel = new wxPanel(parent); @@ -139,7 +154,8 @@ wxPanel *CreateInsertPage(wxBookCtrlBase *parent) panel->SetBackgroundColour( wxColour( wxT("MAROON") ) ); (void) new wxStaticText( panel, wxID_ANY, - wxT("This page has been inserted, not added."), wxPoint(10, 10) ); + wxT("This page has been inserted, not added."), + wxPoint(10, 10) ); return panel; } @@ -197,11 +213,69 @@ wxPanel *CreatePage(wxBookCtrlBase *parent, const wxString&pageName) if ( pageName == MAXIMIZED_BUTTON_PAGE_NAME ) return CreateBigButtonPage(parent); - wxFAIL_MSG( _T("unknown page name") ); + wxFAIL_MSG( wxT("unknown page name") ); return NULL; } + +//----------------------------------------------------------------------------- +// MyFrame +//----------------------------------------------------------------------------- + +BEGIN_EVENT_TABLE(MyFrame, wxFrame) + // File menu + EVT_MENU_RANGE(ID_BOOK_NOTEBOOK, ID_BOOK_MAX, MyFrame::OnType) + EVT_MENU_RANGE(ID_ORIENT_DEFAULT, ID_ORIENT_MAX, MyFrame::OnOrient) + EVT_MENU(ID_SHOW_IMAGES, MyFrame::OnShowImages) + EVT_MENU(ID_MULTI, MyFrame::OnMulti) + EVT_MENU(wxID_EXIT, MyFrame::OnExit) + + // Operations menu + EVT_MENU(ID_ADD_PAGE, MyFrame::OnAddPage) + EVT_MENU(ID_ADD_PAGE_NO_SELECT, MyFrame::OnAddPageNoSelect) + EVT_MENU(ID_INSERT_PAGE, MyFrame::OnInsertPage) + 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_GO_HOME, MyFrame::OnGoHome) + +#if wxUSE_HELP + EVT_MENU(ID_CONTEXT_HELP, MyFrame::OnContextHelp) +#endif // wxUSE_HELP + EVT_MENU(ID_HITTEST, MyFrame::OnHitTest) + + // Book controls +#if wxUSE_NOTEBOOK + EVT_NOTEBOOK_PAGE_CHANGED(wxID_ANY, MyFrame::OnNotebook) + EVT_NOTEBOOK_PAGE_CHANGING(wxID_ANY, MyFrame::OnNotebook) +#endif +#if wxUSE_LISTBOOK + EVT_LISTBOOK_PAGE_CHANGED(wxID_ANY, MyFrame::OnListbook) + EVT_LISTBOOK_PAGE_CHANGING(wxID_ANY, MyFrame::OnListbook) +#endif +#if wxUSE_CHOICEBOOK + EVT_CHOICEBOOK_PAGE_CHANGED(wxID_ANY, MyFrame::OnChoicebook) + EVT_CHOICEBOOK_PAGE_CHANGING(wxID_ANY, MyFrame::OnChoicebook) +#endif +#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) +END_EVENT_TABLE() + MyFrame::MyFrame() : wxFrame(NULL, wxID_ANY, wxString(wxT("wxWidgets book controls sample"))) { @@ -217,7 +291,7 @@ MyFrame::MyFrame() m_type = Type_Listbook; #elif wxUSE_TREEBOOK m_type = Type_Treebook; -#elif +#else #error "Don't use Notebook sample without any book enabled in wxWidgets build!" #endif @@ -248,14 +322,15 @@ MyFrame::MyFrame() menuType->Check(ID_BOOK_NOTEBOOK + m_type, true); wxMenu *menuOrient = new wxMenu; - menuOrient->AppendRadioItem(ID_ORIENT_DEFAULT, wxT("&Default\tCtrl-5")); - menuOrient->AppendRadioItem(ID_ORIENT_TOP, wxT("&Top\tCtrl-6")); - menuOrient->AppendRadioItem(ID_ORIENT_BOTTOM, wxT("&Bottom\tCtrl-7")); - menuOrient->AppendRadioItem(ID_ORIENT_LEFT, wxT("&Left\tCtrl-8")); - menuOrient->AppendRadioItem(ID_ORIENT_RIGHT, wxT("&Right\tCtrl-9")); + menuOrient->AppendRadioItem(ID_ORIENT_DEFAULT, wxT("&Default\tAlt-0")); + menuOrient->AppendRadioItem(ID_ORIENT_TOP, wxT("&Top\tAlt-1")); + menuOrient->AppendRadioItem(ID_ORIENT_BOTTOM, wxT("&Bottom\tAlt-2")); + menuOrient->AppendRadioItem(ID_ORIENT_LEFT, wxT("&Left\tAlt-3")); + menuOrient->AppendRadioItem(ID_ORIENT_RIGHT, wxT("&Right\tAlt-4")); wxMenu *menuPageOperations = new wxMenu; menuPageOperations->Append(ID_ADD_PAGE, wxT("&Add page\tAlt-A")); + menuPageOperations->Append(ID_ADD_PAGE_NO_SELECT, wxT("&Add page (don't select)\tAlt-B")); menuPageOperations->Append(ID_INSERT_PAGE, wxT("&Insert page\tAlt-I")); menuPageOperations->Append(ID_DELETE_CUR_PAGE, wxT("&Delete current page\tAlt-D")); menuPageOperations->Append(ID_DELETE_LAST_PAGE, wxT("D&elete last page\tAlt-L")); @@ -327,11 +402,11 @@ MyFrame::MyFrame() RecreateBook(); m_panel->SetSizer(m_sizerFrame); + m_panel->Layout(); - m_sizerFrame->Fit(this); - m_sizerFrame->SetSizeHints(this); - - Centre(wxBOTH); + wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); + sizer->Add(m_panel, wxSizerFlags(1).Expand()); + SetSizerAndFit(sizer); } MyFrame::~MyFrame() @@ -377,17 +452,17 @@ MyFrame::~MyFrame() #define CASE_TOOLBOOK(x) #endif -#define DISPATCH_ON_TYPE(before, nb, lb, cb, tb, toolb, after) \ +#define DISPATCH_ON_TYPE(before, nb, lb, cb, tb, toolb, after) \ switch ( m_type ) \ { \ CASE_NOTEBOOK(before nb after) \ CASE_LISTBOOK(before lb after) \ CASE_CHOICEBOOK(before cb after) \ CASE_TREEBOOK(before tb after) \ - CASE_TOOLBOOK(before toolb after) \ + CASE_TOOLBOOK(before toolb after) \ \ default: \ - wxFAIL_MSG( _T("unknown book control type") ); \ + wxFAIL_MSG( wxT("unknown book control type") ); \ } int MyFrame::TranslateBookFlag(int nb, int lb, int chb, int tbk, int toolbk) const @@ -426,7 +501,6 @@ void MyFrame::RecreateBook() if ( m_multi && m_type == Type_Notebook ) flags |= wxNB_MULTILINE; - flags |= wxDOUBLE_BORDER; wxBookCtrlBase *oldBook = m_bookCtrl; @@ -505,57 +579,35 @@ void MyFrame::RecreateBook() m_sizerFrame->Layout(); } -BEGIN_EVENT_TABLE(MyFrame, wxFrame) - // File menu - EVT_MENU_RANGE(ID_BOOK_NOTEBOOK, ID_BOOK_MAX, MyFrame::OnType) - EVT_MENU_RANGE(ID_ORIENT_DEFAULT, ID_ORIENT_MAX, MyFrame::OnOrient) - EVT_MENU(ID_SHOW_IMAGES, MyFrame::OnShowImages) - EVT_MENU(ID_MULTI, MyFrame::OnMulti) - EVT_MENU(wxID_EXIT, MyFrame::OnExit) +void MyFrame::AddFlagStrIfFlagPresent(wxString & flagStr, long flags, long flag, + const wxChar * flagName) const +{ + if( (flags & flag) == flag ) + { + if( !flagStr.empty() ) + flagStr += wxT(" | "); + flagStr += flagName; + } +} - // Operations menu - EVT_MENU(ID_ADD_PAGE, MyFrame::OnAddPage) - EVT_MENU(ID_INSERT_PAGE, MyFrame::OnInsertPage) - 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_GO_HOME, MyFrame::OnGoHome) +wxPanel *MyFrame::CreateNewPage() const +{ + wxPanel *panel = new wxPanel(m_bookCtrl, wxID_ANY ); #if wxUSE_HELP - EVT_MENU(ID_CONTEXT_HELP, MyFrame::OnContextHelp) -#endif // wxUSE_HELP - EVT_MENU(ID_HITTEST, MyFrame::OnHitTest) - - // Book controls -#if wxUSE_NOTEBOOK - EVT_NOTEBOOK_PAGE_CHANGED(wxID_ANY, MyFrame::OnNotebook) - EVT_NOTEBOOK_PAGE_CHANGING(wxID_ANY, MyFrame::OnNotebook) -#endif -#if wxUSE_LISTBOOK - EVT_LISTBOOK_PAGE_CHANGED(wxID_ANY, MyFrame::OnListbook) - EVT_LISTBOOK_PAGE_CHANGING(wxID_ANY, MyFrame::OnListbook) -#endif -#if wxUSE_CHOICEBOOK - EVT_CHOICEBOOK_PAGE_CHANGED(wxID_ANY, MyFrame::OnChoicebook) - EVT_CHOICEBOOK_PAGE_CHANGING(wxID_ANY, MyFrame::OnChoicebook) + panel->SetHelpText( wxT( "Panel with \"First\" and \"Second\" buttons" ) ); #endif -#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 + (void) new wxButton(panel, wxID_ANY, wxT("First button"), wxPoint(10, 30)); + (void) new wxButton(panel, wxID_ANY, wxT("Second button"), wxPoint(150, 30)); - // Update title in idle time - EVT_IDLE(MyFrame::OnIdle) -END_EVENT_TABLE() + return panel; +} + + +//----------------------------------------------------------------------------- +// MyFrame - event handlers +//----------------------------------------------------------------------------- #if wxUSE_HELP @@ -567,16 +619,6 @@ void MyFrame::OnContextHelp(wxCommandEvent& WXUNUSED(event)) #endif // wxUSE_HELP -void MyFrame::AddFlagStrIfFlagPresent(wxString & flagStr, long flags, long flag, const wxChar * flagName) const -{ - if( (flags & flag) == flag ) - { - if( !flagStr.empty() ) - flagStr += _T(" | "); - flagStr += flagName; - } -} - void MyFrame::OnHitTest(wxCommandEvent& WXUNUSED(event)) { wxBookCtrlBase * book = GetCurrentBook(); @@ -587,10 +629,10 @@ void MyFrame::OnHitTest(wxCommandEvent& WXUNUSED(event)) wxString flagsStr; - AddFlagStrIfFlagPresent( flagsStr, flags, wxBK_HITTEST_NOWHERE, _T("wxBK_HITTEST_NOWHERE") ); - AddFlagStrIfFlagPresent( flagsStr, flags, wxBK_HITTEST_ONICON, _T("wxBK_HITTEST_ONICON") ); - AddFlagStrIfFlagPresent( flagsStr, flags, wxBK_HITTEST_ONLABEL, _T("wxBK_HITTEST_ONLABEL") ); - AddFlagStrIfFlagPresent( flagsStr, flags, wxBK_HITTEST_ONPAGE, _T("wxBK_HITTEST_ONPAGE") ); + AddFlagStrIfFlagPresent( flagsStr, flags, wxBK_HITTEST_NOWHERE, wxT("wxBK_HITTEST_NOWHERE") ); + AddFlagStrIfFlagPresent( flagsStr, flags, wxBK_HITTEST_ONICON, wxT("wxBK_HITTEST_ONICON") ); + AddFlagStrIfFlagPresent( flagsStr, flags, wxBK_HITTEST_ONLABEL, wxT("wxBK_HITTEST_ONLABEL") ); + AddFlagStrIfFlagPresent( flagsStr, flags, wxBK_HITTEST_ONPAGE, wxT("wxBK_HITTEST_ONPAGE") ); wxLogMessage(wxT("HitTest at (%d,%d): %d: %s"), pt.x, @@ -601,7 +643,7 @@ void MyFrame::OnHitTest(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnType(wxCommandEvent& event) { - m_type = wx_static_cast(BookType, event.GetId() - ID_BOOK_NOTEBOOK); + m_type = static_cast(event.GetId() - ID_BOOK_NOTEBOOK); if ( m_bookCtrl ) m_sizerFrame->Hide(m_bookCtrl); @@ -618,7 +660,6 @@ void MyFrame::OnUpdateTreeMenu(wxUpdateUIEvent& event) #endif // wxUSE_TREEBOOK - void MyFrame::OnOrient(wxCommandEvent& event) { m_orient = event.GetId(); @@ -638,7 +679,7 @@ void MyFrame::OnMulti(wxCommandEvent& event) m_multi = event.IsChecked(); RecreateBook(); m_sizerFrame->Layout(); - wxLogMessage(_T("Multiline setting works only in wxNotebook.")); + wxLogMessage(wxT("Multiline setting works only in wxNotebook.")); } void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event)) @@ -646,21 +687,25 @@ void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event)) Close(); } -wxPanel *MyFrame::CreateNewPage() const +void MyFrame::OnAddPage(wxCommandEvent& WXUNUSED(event)) { - wxPanel *panel = new wxPanel(m_bookCtrl, wxID_ANY ); - -#if wxUSE_HELP - panel->SetHelpText( wxT( "Panel with \"First\" and \"Second\" buttons" ) ); -#endif - - (void) new wxButton(panel, wxID_ANY, wxT("First button"), wxPoint(10, 10)); - (void) new wxButton(panel, wxID_ANY, wxT("Second button"), wxPoint(50, 100)); + wxBookCtrlBase *currBook = GetCurrentBook(); - return panel; + if ( currBook ) + { + static unsigned s_pageAdded = 0; + currBook->AddPage(CreateNewPage(), + wxString::Format + ( + ADDED_PAGE_NAME wxT("%u"), + ++s_pageAdded + ), + true, + GetIconIndex(currBook)); + } } -void MyFrame::OnAddPage(wxCommandEvent& WXUNUSED(event)) +void MyFrame::OnAddPageNoSelect(wxCommandEvent& WXUNUSED(event)) { wxBookCtrlBase *currBook = GetCurrentBook(); @@ -673,7 +718,7 @@ void MyFrame::OnAddPage(wxCommandEvent& WXUNUSED(event)) ADDED_PAGE_NAME wxT("%u"), ++s_pageAdded ), - true, + false, GetIconIndex(currBook)); } } @@ -687,7 +732,7 @@ void MyFrame::OnAddSubPage(wxCommandEvent& WXUNUSED(event)) const int selPos = currBook->GetSelection(); if ( selPos == wxNOT_FOUND ) { - wxLogError(_T("Select the parent page first!")); + wxLogError(wxT("Select the parent page first!")); return; } @@ -715,7 +760,7 @@ void MyFrame::OnAddPageBefore(wxCommandEvent& WXUNUSED(event)) const int selPos = currBook->GetSelection(); if ( selPos == wxNOT_FOUND ) { - wxLogError(_T("Select the parent page first!")); + wxLogError(wxT("Select the parent page first!")); return; } @@ -846,35 +891,35 @@ void MyFrame::OnBookCtrl(wxBookCtrlBaseEvent& event) { wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, - _T("wxNotebook") + wxT("wxNotebook") }, #endif // wxUSE_NOTEBOOK #if wxUSE_LISTBOOK { wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED, wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING, - _T("wxListbook") + wxT("wxListbook") }, #endif // wxUSE_LISTBOOK #if wxUSE_CHOICEBOOK { wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED, wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING, - _T("wxChoicebook") + wxT("wxChoicebook") }, #endif // wxUSE_CHOICEBOOK #if wxUSE_TREEBOOK { wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED, wxEVT_COMMAND_TREEBOOK_PAGE_CHANGING, - _T("wxTreebook") + wxT("wxTreebook") }, #endif // wxUSE_TREEBOOK #if wxUSE_TOOLBOOK { wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED, wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING, - _T("wxToolbook") + wxT("wxToolbook") }, #endif // wxUSE_TOOLBOOK }; @@ -898,7 +943,7 @@ void MyFrame::OnBookCtrl(wxBookCtrlBaseEvent& event) // NB: can't use wxStaticCast here as wxBookCtrlBase is not in // wxRTTI const wxBookCtrlBase * const - book = wx_static_cast(wxBookCtrlBase *, event.GetEventObject()); + book = static_cast(event.GetEventObject()); if ( idx != wxNOT_FOUND && book && book->GetPageText(idx) == VETO_PAGE_NAME ) { @@ -912,7 +957,7 @@ void MyFrame::OnBookCtrl(wxBookCtrlBaseEvent& event) ) != wxYES ) { event.Veto(); - veto = _T(" (vetoed)"); + veto = wxT(" (vetoed)"); } }