X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fa51336154b895412a49fcc9e943837859464b6f..87f83ac8676d83b1bc75cbb0a6b4cf612f86bc2b:/samples/wizard/wizard.cpp?ds=sidebyside diff --git a/samples/wizard/wizard.cpp b/samples/wizard/wizard.cpp index 97bd411243..22de882986 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" @@ -39,10 +40,8 @@ #include "wx/wizard.h" -#ifndef __WXMSW__ - #include "wiztest.xpm" - #include "wiztest2.xpm" -#endif +#include "wiztest.xpm" +#include "wiztest2.xpm" // ---------------------------------------------------------------------------- // constants @@ -51,9 +50,11 @@ // ids for menu items enum { - Wizard_Quit = 100, - Wizard_Run, - Wizard_About = 1000 + Wizard_Quit = wxID_EXIT, + Wizard_RunModal = wxID_HIGHEST, + Wizard_RunNoSizer, + Wizard_RunModeless, + Wizard_About = wxID_ABOUT }; // ---------------------------------------------------------------------------- @@ -78,6 +79,8 @@ 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); @@ -86,25 +89,40 @@ private: DECLARE_EVENT_TABLE() }; +// ---------------------------------------------------------------------------- +// our wizard +// ---------------------------------------------------------------------------- + +class MyWizard : public wxWizard +{ +public: + MyWizard(wxFrame *frame, bool useSizer = true); + + wxWizardPage *GetFirstPage() const { return m_page1; } + +private: + wxWizardPageSimple *m_page1; +}; + // ---------------------------------------------------------------------------- // some pages for our wizard // ---------------------------------------------------------------------------- -// this shows how to simply control the validity of the user input by just +// This shows how to simply control the validity of the user input by just // overriding TransferDataFromWindow() - of course, in a real program, the // check wouldn't be so trivial and the data will be probably saved somewhere -// too +// too. // -// it also shows how to use a different bitmap for one of the pages +// It also shows how to use a different bitmap for one of the pages. class wxValidationPage : public wxWizardPageSimple { public: wxValidationPage(wxWizard *parent) : wxWizardPageSimple(parent) { - m_bitmap = wxBITMAP(wiztest2); + m_bitmap = wxBitmap(wiztest2_xpm); m_checkbox = new wxCheckBox(this, wxID_ANY, _T("&Check me")); - + wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL); mainSizer->Add( new wxStaticText(this, wxID_ANY, @@ -170,7 +188,7 @@ public: WXSIZEOF(choices), choices, 1, wxRA_SPECIFY_COLS); m_radio->SetSelection(Both); - + wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL); mainSizer->Add( m_radio, @@ -178,7 +196,7 @@ public: wxALL, 5 // Border ); - + SetSizer(mainSizer); mainSizer->Fit(this); } @@ -219,7 +237,7 @@ private: DECLARE_EVENT_TABLE() }; -// this shows how to dynamically (i.e. during run-time) arrange the page order +// This shows how to dynamically (i.e. during run-time) arrange the page order. class wxCheckboxPage : public wxWizardPage { public: @@ -230,7 +248,7 @@ public: { m_prev = prev; m_next = next; - + wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL); mainSizer->Add( @@ -249,23 +267,38 @@ public: 5 // Border width ); +#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, 0, // No vertical stretching wxALL, 5 // Border width ); +#endif // wxUSE_CHECKLISTBOX - SetSizer(mainSizer); mainSizer->Fit(this); } @@ -282,7 +315,9 @@ private: *m_next; wxCheckBox *m_checkbox; +#if wxUSE_CHECKLISTBOX wxCheckListBox *m_checklistbox; +#endif }; // ============================================================================ @@ -294,11 +329,13 @@ private: // ---------------------------------------------------------------------------- BEGIN_EVENT_TABLE(MyFrame, wxFrame) - EVT_MENU(Wizard_Quit, MyFrame::OnQuit) - EVT_MENU(Wizard_About, MyFrame::OnAbout) - EVT_MENU(Wizard_Run, MyFrame::OnRunWizard) + EVT_MENU(Wizard_Quit, MyFrame::OnQuit) + EVT_MENU(Wizard_About, MyFrame::OnAbout) + EVT_MENU(Wizard_RunModal, MyFrame::OnRunWizard) + EVT_MENU(Wizard_RunNoSizer, MyFrame::OnRunWizardNoSizer) + EVT_MENU(Wizard_RunModeless, MyFrame::OnRunWizardModeless) - EVT_WIZARD_CANCEL(wxID_ANY, MyFrame::OnWizardCancel) + EVT_WIZARD_CANCEL(wxID_ANY, MyFrame::OnWizardCancel) EVT_WIZARD_FINISHED(wxID_ANY, MyFrame::OnWizardFinished) END_EVENT_TABLE() @@ -326,16 +363,58 @@ bool MyApp::OnInit() return true; } +// ---------------------------------------------------------------------------- +// MyWizard +// ---------------------------------------------------------------------------- + +MyWizard::MyWizard(wxFrame *frame, bool useSizer) + : wxWizard(frame,wxID_ANY,_T("Absolutely Useless Wizard"), + wxBitmap(wiztest_xpm),wxDefaultPosition, + wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) +{ + // a wizard page may be either an object of predefined class + m_page1 = new wxWizardPageSimple(this); + + /* wxStaticText *text = */ new wxStaticText(m_page1, wxID_ANY, + _T("This wizard doesn't help you\nto do anything at all.\n") + _T("\n") + _T("The next pages will present you\nwith more useless controls."), + wxPoint(5,5) + ); + + // ... or a derived class + wxRadioboxPage *page3 = new wxRadioboxPage(this); + wxValidationPage *page4 = new wxValidationPage(this); + + // set the page order using a convenience function - could also use + // SetNext/Prev directly as below + wxWizardPageSimple::Chain(page3, page4); + + // this page is not a wxWizardPageSimple, so we use SetNext/Prev to insert + // it into the chain of pages + wxCheckboxPage *page2 = new wxCheckboxPage(this, m_page1, page3); + m_page1->SetNext(page2); + page3->SetPrev(page2); + + if ( useSizer ) + { + // allow the wizard to size itself around the pages + GetPageAreaSizer()->Add(m_page1); + } +} + // ---------------------------------------------------------------------------- // MyFrame // ---------------------------------------------------------------------------- MyFrame::MyFrame(const wxString& title) - : wxFrame((wxFrame *)NULL, wxID_ANY, title, + :wxFrame((wxFrame *)NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 150)) // small frame { wxMenu *menuFile = new wxMenu; - menuFile->Append(Wizard_Run, _T("&Run wizard...\tCtrl-R")); + menuFile->Append(Wizard_RunModal, _T("&Run wizard modal...\tCtrl-R")); + 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")); @@ -371,53 +450,31 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) void MyFrame::OnRunWizard(wxCommandEvent& WXUNUSED(event)) { - wxWizard *wizard = new wxWizard(this, wxID_ANY, - _T("Absolutely Useless Wizard"), - wxBITMAP(wiztest), - wxDefaultPosition, - wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER); - - // a wizard page may be either an object of predefined class - wxWizardPageSimple *page1 = new wxWizardPageSimple(wizard); - wxStaticText *text = new wxStaticText(page1, wxID_ANY, - _T("This wizard doesn't help you\nto do anything at all.\n") - _T("\n") - _T("The next pages will present you\nwith more useless controls."), - wxPoint(5,5) - ); - - // ... or a derived class - wxRadioboxPage *page3 = new wxRadioboxPage(wizard); - wxValidationPage *page4 = new wxValidationPage(wizard); + MyWizard wizard(this); - // set the page order using a convenience function - could also use - // SetNext/Prev directly as below - wxWizardPageSimple::Chain(page3, page4); + wizard.RunWizard(wizard.GetFirstPage()); +} - // this page is not a wxWizardPageSimple, so we use SetNext/Prev to insert - // it into the chain of pages - wxCheckboxPage *page2 = new wxCheckboxPage(wizard, page1, page3); - page1->SetNext(page2); - page3->SetPrev(page2); +void MyFrame::OnRunWizardNoSizer(wxCommandEvent& WXUNUSED(event)) +{ + MyWizard wizard(this, false); - // allow the wizard to size itself around the pages - wizard->GetPageAreaSizer()->Add(page1); - - if ( wizard->RunWizard(page1) ) - { - wxMessageBox(_T("The wizard successfully completed"), _T("That's all"), - wxICON_INFORMATION | wxOK); - } + wizard.RunWizard(wizard.GetFirstPage()); +} - wizard->Destroy(); +void MyFrame::OnRunWizardModeless(wxCommandEvent& WXUNUSED(event)) +{ + MyWizard *wizard = new MyWizard(this); + wizard->ShowPage(wizard->GetFirstPage()); + wizard->Show(true); } void MyFrame::OnWizardFinished(wxWizardEvent& WXUNUSED(event)) { - wxLogStatus(this, wxT("The wizard finished successfully.")); + wxMessageBox(wxT("The wizard finished successfully."), wxT("Wizard notification")); } void MyFrame::OnWizardCancel(wxWizardEvent& WXUNUSED(event)) { - wxLogStatus(this, wxT("The wizard was cancelled.")); + wxMessageBox(wxT("The wizard was cancelled."), wxT("Wizard notification")); }