X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/36afbc42f89854985c77caed2922be038c4d0d01..b2b0bee6d822b05fea419e8bf24ab4009cb17ac4:/samples/wizard/wizard.cpp diff --git a/samples/wizard/wizard.cpp b/samples/wizard/wizard.cpp index 6446873f84..d253471f7d 100644 --- a/samples/wizard/wizard.cpp +++ b/samples/wizard/wizard.cpp @@ -26,6 +26,7 @@ // for all others, include the necessary headers #ifndef WX_PRECOMP + #include "wx/frame.h" #include "wx/stattext.h" #include "wx/log.h" #include "wx/app.h" @@ -37,11 +38,14 @@ #include "wx/sizer.h" #endif +#include "wx/textctrl.h" #include "wx/wizard.h" #include "wiztest.xpm" #include "wiztest2.xpm" +#include "../sample.xpm" + // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- @@ -49,10 +53,15 @@ // ids for menu items enum { + Wizard_About = wxID_ABOUT, Wizard_Quit = wxID_EXIT, Wizard_RunModal = wxID_HIGHEST, + + Wizard_RunNoSizer, Wizard_RunModeless, - Wizard_About = wxID_ABOUT + + Wizard_LargeWizard, + Wizard_ExpandBitmap }; // ---------------------------------------------------------------------------- @@ -67,7 +76,6 @@ public: virtual bool OnInit(); }; -class MyWizard; class MyFrame : public wxFrame { public: @@ -78,17 +86,14 @@ public: void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); void OnRunWizard(wxCommandEvent& event); + void OnRunWizardNoSizer(wxCommandEvent& event); + void OnRunWizardModeless(wxCommandEvent& event); void OnWizardCancel(wxWizardEvent& event); void OnWizardFinished(wxWizardEvent& event); - // Only required for modeless wizards, to implement destruction; - // if using modal wizards, you can rely on the default behaviour. - void OnCancel(wxCommandEvent& event); private: // any class wishing to process wxWidgets events must use this macro DECLARE_EVENT_TABLE() - - MyWizard* m_wizard; }; // ---------------------------------------------------------------------------- @@ -98,16 +103,12 @@ private: class MyWizard : public wxWizard { public: - MyWizard(wxFrame *frame); - - void RunIt(bool modal); + MyWizard(wxFrame *frame, bool useSizer = true); - // Is the wizard being invoked modally? - bool GetModalWizard() const { return m_isModal; } + wxWizardPage *GetFirstPage() const { return m_page1; } private: wxWizardPageSimple *m_page1; - bool m_isModal; }; // ---------------------------------------------------------------------------- @@ -145,8 +146,7 @@ public: wxALL, 5 // Border ); - SetSizer(mainSizer); - mainSizer->Fit(this); + SetSizerAndFit(mainSizer); } virtual bool TransferDataFromWindow() @@ -203,8 +203,7 @@ public: 5 // Border ); - SetSizer(mainSizer); - mainSizer->Fit(this); + SetSizerAndFit(mainSizer); } // wizard event handlers @@ -275,14 +274,27 @@ public: #if wxUSE_CHECKLISTBOX static const wxChar *aszChoices[] = - { _T("Zeroth"), _T("First"), _T("Second"), _T("Third"), _T("Fourth"), _T("Fifth"), _T("Sixth"), _T("Seventh"), _T("Eighth"), _T("Nineth") }; - wxString *astrChoices = new wxString[WXSIZEOF(aszChoices)]; - unsigned int ui; - for ( ui = 0; ui < WXSIZEOF(aszChoices); ui++ ) - astrChoices[ui] = aszChoices[ui]; - - m_checklistbox = new wxCheckListBox(this, wxID_ANY, wxDefaultPosition, wxSize(100,100), - WXSIZEOF(aszChoices), astrChoices); + { + _T("Zeroth"), + _T("First"), + _T("Second"), + _T("Third"), + _T("Fourth"), + _T("Fifth"), + _T("Sixth"), + _T("Seventh"), + _T("Eighth"), + _T("Nineth") + }; + + m_checklistbox = new wxCheckListBox + ( + this, + wxID_ANY, + wxDefaultPosition, + wxSize(100,100), + wxArrayString(WXSIZEOF(aszChoices), aszChoices) + ); mainSizer->Add( m_checklistbox, @@ -292,8 +304,15 @@ public: ); #endif // wxUSE_CHECKLISTBOX - SetSizer(mainSizer); - mainSizer->Fit(this); + wxSize textSize = wxSize(150, 200); + if (((wxFrame*) wxTheApp->GetTopWindow())->GetMenuBar()->IsChecked(Wizard_LargeWizard)) + textSize = wxSize(150, wxGetClientDisplayRect().GetHeight() - 200); + + + wxTextCtrl* textCtrl = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, textSize, wxTE_MULTILINE); + mainSizer->Add(textCtrl, 0, wxALL|wxEXPAND, 5); + + SetSizerAndFit(mainSizer); } // implement wxWizardPage functions @@ -325,12 +344,11 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(Wizard_Quit, MyFrame::OnQuit) EVT_MENU(Wizard_About, MyFrame::OnAbout) EVT_MENU(Wizard_RunModal, MyFrame::OnRunWizard) - EVT_MENU(Wizard_RunModeless, MyFrame::OnRunWizard) + EVT_MENU(Wizard_RunNoSizer, MyFrame::OnRunWizardNoSizer) + EVT_MENU(Wizard_RunModeless, MyFrame::OnRunWizardModeless) EVT_WIZARD_CANCEL(wxID_ANY, MyFrame::OnWizardCancel) EVT_WIZARD_FINISHED(wxID_ANY, MyFrame::OnWizardFinished) - - EVT_BUTTON(wxID_CANCEL, MyFrame::OnCancel) END_EVENT_TABLE() BEGIN_EVENT_TABLE(wxRadioboxPage, wxWizardPageSimple) @@ -347,6 +365,9 @@ IMPLEMENT_APP(MyApp) // `Main program' equivalent: the program execution "starts" here bool MyApp::OnInit() { + if ( !wxApp::OnInit() ) + return false; + MyFrame *frame = new MyFrame(_T("wxWizard Sample")); // and show it (the frames, unlike simple controls, are not shown when @@ -360,13 +381,21 @@ bool MyApp::OnInit() // ---------------------------------------------------------------------------- // MyWizard // ---------------------------------------------------------------------------- - -MyWizard::MyWizard(wxFrame *frame) - :wxWizard(frame,wxID_ANY,_T("Absolutely Useless Wizard"), + +MyWizard::MyWizard(wxFrame *frame, bool useSizer) + : wxWizard(frame,wxID_ANY,_T("Absolutely Useless Wizard"), wxBitmap(wiztest_xpm),wxDefaultPosition, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) { - m_isModal = false; + SetIcon(wxIcon(sample_xpm)); + + // Allow the bitmap to be expanded to fit the page height + if (frame->GetMenuBar()->IsChecked(Wizard_ExpandBitmap)) + SetBitmapPlacement(wxWIZARD_VALIGN_CENTRE); + + // Enable scrolling adaptation + if (frame->GetMenuBar()->IsChecked(Wizard_LargeWizard)) + SetLayoutAdaptationMode(wxDIALOG_ADAPTATION_MODE_ENABLED); // a wizard page may be either an object of predefined class m_page1 = new wxWizardPageSimple(this); @@ -392,27 +421,10 @@ MyWizard::MyWizard(wxFrame *frame) m_page1->SetNext(page2); page3->SetPrev(page2); - // allow the wizard to size itself around the pages - GetPageAreaSizer()->Add(m_page1); -} - -void MyWizard::RunIt(bool modal) -{ - m_isModal = modal; - if ( modal ) + if ( useSizer ) { - if ( RunWizard(m_page1) ) - { - // Success - } - - Destroy(); - } - else - { - FinishLayout(); - ShowPage(m_page1); - Show(true); + // allow the wizard to size itself around the pages + GetPageAreaSizer()->Add(m_page1); } } @@ -424,20 +436,24 @@ MyFrame::MyFrame(const wxString& title) :wxFrame((wxFrame *)NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 150)) // small frame { - m_wizard = NULL; - wxMenu *menuFile = new wxMenu; menuFile->Append(Wizard_RunModal, _T("&Run wizard modal...\tCtrl-R")); - menuFile->Append(Wizard_RunModeless, _T("&Run wizard modeless...")); + menuFile->Append(Wizard_RunNoSizer, _T("Run wizard &without sizer...")); + menuFile->Append(Wizard_RunModeless, _T("Run wizard &modeless...")); menuFile->AppendSeparator(); menuFile->Append(Wizard_Quit, _T("E&xit\tAlt-X"), _T("Quit this program")); + wxMenu *menuOptions = new wxMenu; + menuOptions->AppendCheckItem(Wizard_LargeWizard, _T("&Scroll Wizard Pages")); + menuOptions->AppendCheckItem(Wizard_ExpandBitmap, _T("Si&ze Bitmap To Page")); + wxMenu *helpMenu = new wxMenu; helpMenu->Append(Wizard_About, _T("&About...\tF1"), _T("Show about dialog")); // now append the freshly created menu to the menu bar... wxMenuBar *menuBar = new wxMenuBar(); menuBar->Append(menuFile, _T("&File")); + menuBar->Append(menuOptions, _T("&Options")); menuBar->Append(helpMenu, _T("&Help")); // ... and attach this menu bar to the frame @@ -462,36 +478,33 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) _T("About wxWizard sample"), wxOK | wxICON_INFORMATION, this); } -void MyFrame::OnRunWizard(wxCommandEvent& event) +void MyFrame::OnRunWizard(wxCommandEvent& WXUNUSED(event)) { - m_wizard = new MyWizard(this); + MyWizard wizard(this); - m_wizard->RunIt( event.GetId() == Wizard_RunModal ); + wizard.RunWizard(wizard.GetFirstPage()); } -void MyFrame::OnWizardFinished(wxWizardEvent& WXUNUSED(event)) +void MyFrame::OnRunWizardNoSizer(wxCommandEvent& WXUNUSED(event)) { - if (!m_wizard->GetModalWizard()) - m_wizard->Destroy(); - m_wizard = NULL; + MyWizard wizard(this, false); - wxMessageBox(wxT("The wizard finished successfully."), wxT("Wizard notification")); + wizard.RunWizard(wizard.GetFirstPage()); } -void MyFrame::OnWizardCancel(wxWizardEvent& WXUNUSED(event)) +void MyFrame::OnRunWizardModeless(wxCommandEvent& WXUNUSED(event)) { - wxMessageBox(wxT("The wizard was cancelled."), wxT("Wizard notification")); + MyWizard *wizard = new MyWizard(this); + wizard->ShowPage(wizard->GetFirstPage()); + wizard->Show(true); +} + +void MyFrame::OnWizardFinished(wxWizardEvent& WXUNUSED(event)) +{ + wxMessageBox(wxT("The wizard finished successfully."), wxT("Wizard notification")); } -void MyFrame::OnCancel(wxCommandEvent& WXUNUSED(event)) +void MyFrame::OnWizardCancel(wxWizardEvent& WXUNUSED(event)) { - // Destroy a modeless wizard here - we can't destroy it in OnWizardCancel - // since the wxWizard object is still in use when that event is sent. - - if (!m_wizard->GetModalWizard()) - m_wizard->Destroy(); - else - m_wizard->EndModal(wxID_CANCEL); - - m_wizard = NULL; + wxMessageBox(wxT("The wizard was cancelled."), wxT("Wizard notification")); }