| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        wizard.cpp
 
- // Purpose:     wxWidgets sample demonstrating wxWizard control
 
- // Author:      Vadim Zeitlin
 
- // Modified by: Robert Vazan (sizers)
 
- // Created:     15.08.99
 
- // Copyright:   (c) Vadim Zeitlin
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- // ============================================================================
 
- // declarations
 
- // ============================================================================
 
- // ----------------------------------------------------------------------------
 
- // headers
 
- // ----------------------------------------------------------------------------
 
- // For compilers that support precompilation, includes "wx/wx.h".
 
- #include "wx/wxprec.h"
 
- #ifdef __BORLANDC__
 
-     #pragma hdrstop
 
- #endif
 
- // 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"
 
-     #include "wx/checkbox.h"
 
-     #include "wx/checklst.h"
 
-     #include "wx/msgdlg.h"
 
-     #include "wx/radiobox.h"
 
-     #include "wx/menu.h"
 
-     #include "wx/sizer.h"
 
- #endif
 
- #include "wx/textctrl.h"
 
- #include "wx/wizard.h"
 
- #include "wiztest.xpm"
 
- #include "wiztest2.xpm"
 
- #include "../sample.xpm"
 
- // ----------------------------------------------------------------------------
 
- // constants
 
- // ----------------------------------------------------------------------------
 
- // ids for menu items
 
- enum
 
- {
 
-     Wizard_About = wxID_ABOUT,
 
-     Wizard_Quit = wxID_EXIT,
 
-     Wizard_RunModal = wxID_HIGHEST,
 
-     Wizard_RunNoSizer,
 
-     Wizard_RunModeless,
 
-     Wizard_LargeWizard,
 
-     Wizard_ExpandBitmap
 
- };
 
- // ----------------------------------------------------------------------------
 
- // private classes
 
- // ----------------------------------------------------------------------------
 
- // Define a new application type, each program should derive a class from wxApp
 
- class MyApp : public wxApp
 
- {
 
- public:
 
-     // override base class virtuals
 
-     virtual bool OnInit();
 
- };
 
- class MyFrame : public wxFrame
 
- {
 
- public:
 
-     // ctor(s)
 
-     MyFrame(const wxString& title);
 
-     // event handlers (these functions should _not_ be virtual)
 
-     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);
 
- private:
 
-     // any class wishing to process wxWidgets events must use this macro
 
-     wxDECLARE_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
 
- // overriding TransferDataFromWindow() - of course, in a real program, the
 
- // check wouldn't be so trivial and the data will be probably saved somewhere
 
- // too.
 
- //
 
- // 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_xpm);
 
-         m_checkbox = new wxCheckBox(this, wxID_ANY, wxT("&Check me"));
 
-         wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL);
 
-         mainSizer->Add(
 
-             new wxStaticText(this, wxID_ANY,
 
-                              wxT("You need to check the checkbox\n")
 
-                              wxT("below before going to the next page\n")),
 
-             0,
 
-             wxALL,
 
-             5
 
-         );
 
-         mainSizer->Add(
 
-             m_checkbox,
 
-             0, // No stretching
 
-             wxALL,
 
-             5 // Border
 
-         );
 
-         SetSizerAndFit(mainSizer);
 
-     }
 
-     virtual bool TransferDataFromWindow()
 
-     {
 
-         if ( !m_checkbox->GetValue() )
 
-         {
 
-             wxMessageBox(wxT("Check the checkbox first!"), wxT("No way"),
 
-                          wxICON_WARNING | wxOK, this);
 
-             return false;
 
-         }
 
-         return true;
 
-     }
 
- private:
 
-     wxCheckBox *m_checkbox;
 
- };
 
- // This is a more complicated example of validity checking: using events we may
 
- // allow to return to the previous page, but not to proceed. It also
 
- // demonstrates how to intercept [Cancel] button press.
 
- class wxRadioboxPage : public wxWizardPageSimple
 
- {
 
- public:
 
-     // directions in which we allow the user to proceed from this page
 
-     enum
 
-     {
 
-         Forward, Backward, Both, Neither
 
-     };
 
-     wxRadioboxPage(wxWizard *parent) : wxWizardPageSimple(parent)
 
-     {
 
-         // should correspond to the enum above
 
-         //        static wxString choices[] = { "forward", "backward", "both", "neither" };
 
-         // The above syntax can cause an internal compiler error with gcc.
 
-         wxString choices[4];
 
-         choices[0] = wxT("forward");
 
-         choices[1] = wxT("backward");
 
-         choices[2] = wxT("both");
 
-         choices[3] = wxT("neither");
 
-         m_radio = new wxRadioBox(this, wxID_ANY, wxT("Allow to proceed:"),
 
-                                  wxDefaultPosition, wxDefaultSize,
 
-                                  WXSIZEOF(choices), choices,
 
-                                  1, wxRA_SPECIFY_COLS);
 
-         m_radio->SetSelection(Both);
 
-         wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL);
 
-         mainSizer->Add(
 
-             m_radio,
 
-             0, // No stretching
 
-             wxALL,
 
-             5 // Border
 
-         );
 
-         SetSizerAndFit(mainSizer);
 
-     }
 
-     // wizard event handlers
 
-     void OnWizardCancel(wxWizardEvent& event)
 
-     {
 
-         if ( wxMessageBox(wxT("Do you really want to cancel?"), wxT("Question"),
 
-                           wxICON_QUESTION | wxYES_NO, this) != wxYES )
 
-         {
 
-             // not confirmed
 
-             event.Veto();
 
-         }
 
-     }
 
-     void OnWizardPageChanging(wxWizardEvent& event)
 
-     {
 
-         int sel = m_radio->GetSelection();
 
-         if ( sel == Both )
 
-             return;
 
-         if ( event.GetDirection() && sel == Forward )
 
-             return;
 
-         if ( !event.GetDirection() && sel == Backward )
 
-             return;
 
-         wxMessageBox(wxT("You can't go there"), wxT("Not allowed"),
 
-                      wxICON_WARNING | wxOK, this);
 
-         event.Veto();
 
-     }
 
- private:
 
-     wxRadioBox *m_radio;
 
-     wxDECLARE_EVENT_TABLE();
 
- };
 
- // This shows how to dynamically (i.e. during run-time) arrange the page order.
 
- class wxCheckboxPage : public wxWizardPage
 
- {
 
- public:
 
-     wxCheckboxPage(wxWizard *parent,
 
-                    wxWizardPage *prev,
 
-                    wxWizardPage *next)
 
-         : wxWizardPage(parent)
 
-     {
 
-         m_prev = prev;
 
-         m_next = next;
 
-         wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL);
 
-         mainSizer->Add(
 
-             new wxStaticText(this, wxID_ANY, wxT("Try checking the box below and\n")
 
-                                        wxT("then going back and clearing it")),
 
-             0, // No vertical stretching
 
-             wxALL,
 
-             5 // Border width
 
-         );
 
-         m_checkbox = new wxCheckBox(this, wxID_ANY, wxT("&Skip the next page"));
 
-         mainSizer->Add(
 
-             m_checkbox,
 
-             0, // No vertical stretching
 
-             wxALL,
 
-             5 // Border width
 
-         );
 
- #if wxUSE_CHECKLISTBOX
 
-         static const wxChar *aszChoices[] =
 
-         {
 
-             wxT("Zeroth"),
 
-             wxT("First"),
 
-             wxT("Second"),
 
-             wxT("Third"),
 
-             wxT("Fourth"),
 
-             wxT("Fifth"),
 
-             wxT("Sixth"),
 
-             wxT("Seventh"),
 
-             wxT("Eighth"),
 
-             wxT("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
 
-         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
 
-     virtual wxWizardPage *GetPrev() const { return m_prev; }
 
-     virtual wxWizardPage *GetNext() const
 
-     {
 
-         return m_checkbox->GetValue() ? m_next->GetNext() : m_next;
 
-     }
 
- private:
 
-     wxWizardPage *m_prev,
 
-                  *m_next;
 
-     wxCheckBox *m_checkbox;
 
- #if wxUSE_CHECKLISTBOX
 
-     wxCheckListBox *m_checklistbox;
 
- #endif
 
- };
 
- // ============================================================================
 
- // implementation
 
- // ============================================================================
 
- // ----------------------------------------------------------------------------
 
- // event tables and such
 
- // ----------------------------------------------------------------------------
 
- wxBEGIN_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_RunNoSizer,   MyFrame::OnRunWizardNoSizer)
 
-     EVT_MENU(Wizard_RunModeless,  MyFrame::OnRunWizardModeless)
 
-     EVT_WIZARD_CANCEL(wxID_ANY,   MyFrame::OnWizardCancel)
 
-     EVT_WIZARD_FINISHED(wxID_ANY, MyFrame::OnWizardFinished)
 
- wxEND_EVENT_TABLE()
 
- wxBEGIN_EVENT_TABLE(wxRadioboxPage, wxWizardPageSimple)
 
-     EVT_WIZARD_PAGE_CHANGING(wxID_ANY, wxRadioboxPage::OnWizardPageChanging)
 
-     EVT_WIZARD_CANCEL(wxID_ANY, wxRadioboxPage::OnWizardCancel)
 
- wxEND_EVENT_TABLE()
 
- IMPLEMENT_APP(MyApp)
 
- // ----------------------------------------------------------------------------
 
- // the application class
 
- // ----------------------------------------------------------------------------
 
- // `Main program' equivalent: the program execution "starts" here
 
- bool MyApp::OnInit()
 
- {
 
-     if ( !wxApp::OnInit() )
 
-         return false;
 
-     MyFrame *frame = new MyFrame(wxT("wxWizard Sample"));
 
-     // and show it (the frames, unlike simple controls, are not shown when
 
-     // created initially)
 
-     frame->Show(true);
 
-     // we're done
 
-     return true;
 
- }
 
- // ----------------------------------------------------------------------------
 
- // MyWizard
 
- // ----------------------------------------------------------------------------
 
- MyWizard::MyWizard(wxFrame *frame, bool useSizer)
 
- {
 
-     SetExtraStyle(wxWIZARD_EX_HELPBUTTON);
 
-     Create(frame,wxID_ANY,wxT("Absolutely Useless Wizard"),
 
-                    wxBitmap(wiztest_xpm),wxDefaultPosition,
 
-                    wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER);
 
-     SetIcon(wxICON(sample));
 
-     // 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);
 
-     /* wxStaticText *text = */ new wxStaticText(m_page1, wxID_ANY,
 
-              wxT("This wizard doesn't help you\nto do anything at all.\n")
 
-              wxT("\n")
 
-              wxT("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, but Chain() is shorter, avoids the risk
 
-     // of an error and can itself be chained, e.g. you could write
 
-     // page3.Chain(page4).Chain(page5) and so on.
 
-     page3->Chain(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,
 
-                   wxDefaultPosition, wxSize(250, 150))  // small frame
 
- {
 
-     wxMenu *menuFile = new wxMenu;
 
-     menuFile->Append(Wizard_RunModal, wxT("&Run wizard modal...\tCtrl-R"));
 
-     menuFile->Append(Wizard_RunNoSizer, wxT("Run wizard &without sizer..."));
 
-     menuFile->Append(Wizard_RunModeless, wxT("Run wizard &modeless..."));
 
-     menuFile->AppendSeparator();
 
-     menuFile->Append(Wizard_Quit, wxT("E&xit\tAlt-X"), wxT("Quit this program"));
 
-     wxMenu *menuOptions = new wxMenu;
 
-     menuOptions->AppendCheckItem(Wizard_LargeWizard, wxT("&Scroll Wizard Pages"));
 
-     menuOptions->AppendCheckItem(Wizard_ExpandBitmap, wxT("Si&ze Bitmap To Page"));
 
-     wxMenu *helpMenu = new wxMenu;
 
-     helpMenu->Append(Wizard_About, wxT("&About\tF1"), wxT("Show about dialog"));
 
-     // now append the freshly created menu to the menu bar...
 
-     wxMenuBar *menuBar = new wxMenuBar();
 
-     menuBar->Append(menuFile, wxT("&File"));
 
-     menuBar->Append(menuOptions, wxT("&Options"));
 
-     menuBar->Append(helpMenu, wxT("&Help"));
 
-     // ... and attach this menu bar to the frame
 
-     SetMenuBar(menuBar);
 
-     // also create status bar which we use in OnWizardCancel
 
- #if wxUSE_STATUSBAR
 
-     CreateStatusBar();
 
- #endif // wxUSE_STATUSBAR
 
- }
 
- void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
 
- {
 
-     // true is to force the frame to close
 
-     Close(true);
 
- }
 
- void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
 
- {
 
-     wxMessageBox(wxT("Demo of wxWizard class\n")
 
-                  wxT("(c) 1999, 2000 Vadim Zeitlin"),
 
-                  wxT("About wxWizard sample"), wxOK | wxICON_INFORMATION, this);
 
- }
 
- void MyFrame::OnRunWizard(wxCommandEvent& WXUNUSED(event))
 
- {
 
-     MyWizard wizard(this);
 
-     wizard.RunWizard(wizard.GetFirstPage());
 
- }
 
- void MyFrame::OnRunWizardNoSizer(wxCommandEvent& WXUNUSED(event))
 
- {
 
-     MyWizard wizard(this, false);
 
-     wizard.RunWizard(wizard.GetFirstPage());
 
- }
 
- void MyFrame::OnRunWizardModeless(wxCommandEvent& WXUNUSED(event))
 
- {
 
-     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::OnWizardCancel(wxWizardEvent& WXUNUSED(event))
 
- {
 
-     wxMessageBox(wxT("The wizard was cancelled."), wxT("Wizard notification"));
 
- }
 
 
  |