diff --git a/docs/doxygen/mainpages/samples.h b/docs/doxygen/mainpages/samples.h index ae268507bc..29807d67ff 100644 --- a/docs/doxygen/mainpages/samples.h +++ b/docs/doxygen/mainpages/samples.h @@ -301,6 +301,11 @@ wxDebugReportUpload will report an error. This sample shows how to use the common dialogs available from wxWidgets. These dialogs are described in detail in the @ref overview_cmndlg. +In addition to the dialogs accessible from the sample menus, you can also run +it with a --progress=style command line option to show a +wxProgressDialog with the given style (try 0 for the default style) on program +startup, before the main window is shown. + @sampledir{dialogs} @section page_samples_dialup Dialup Sample diff --git a/samples/dialogs/dialogs.cpp b/samples/dialogs/dialogs.cpp index 3abb136139..53fd1a8c46 100644 --- a/samples/dialogs/dialogs.cpp +++ b/samples/dialogs/dialogs.cpp @@ -277,12 +277,63 @@ BEGIN_EVENT_TABLE(StdButtonSizerDialog, wxDialog) EVT_RADIOBUTTON(wxID_ANY, StdButtonSizerDialog::OnEvent) END_EVENT_TABLE() +#if wxUSE_CMDLINE_PARSER + +#include "wx/cmdline.h" + +static const char *PROGRESS_SWITCH = "progress"; + +void MyApp::OnInitCmdLine(wxCmdLineParser& parser) +{ + wxApp::OnInitCmdLine(parser); + + parser.AddOption("", PROGRESS_SWITCH, + "Style for the startup progress dialog (wxPD_XXX)", + wxCMD_LINE_VAL_NUMBER); +} + +bool MyApp::OnCmdLineParsed(wxCmdLineParser& parser) +{ + if ( !wxApp::OnCmdLineParsed(parser) ) + return false; + + parser.Found(PROGRESS_SWITCH, &m_startupProgressStyle); + + return true; +} + +#endif // wxUSE_CMDLINE_PARSER + // `Main program' equivalent, creating windows and returning main app frame bool MyApp::OnInit() { if ( !wxApp::OnInit() ) return false; +#if wxUSE_PROGRESSDLG + if ( m_startupProgressStyle != -1 ) + { + // Show a test progress dialog before the main event loop is started: + // it should still work. + const int PROGRESS_COUNT = 100; + wxProgressDialog dlg + ( + "Progress in progress", + "Please wait, starting...", + PROGRESS_COUNT, + NULL, + m_startupProgressStyle + ); + for ( int i = 0; i <= PROGRESS_COUNT; i++ ) + { + if ( !dlg.Update(i) ) + break; + + wxMilliSleep(50); + } + } +#endif // wxUSE_PROGRESSDLG + #if wxUSE_IMAGE wxInitAllImageHandlers(); #endif diff --git a/samples/dialogs/dialogs.h b/samples/dialogs/dialogs.h index d63cd1717b..71a1f53b61 100644 --- a/samples/dialogs/dialogs.h +++ b/samples/dialogs/dialogs.h @@ -115,12 +115,26 @@ public: class MyApp: public wxApp { public: + MyApp() { m_startupProgressStyle = -1; } + virtual bool OnInit(); +#if wxUSE_CMDLINE_PARSER + virtual void OnInitCmdLine(wxCmdLineParser& parser); + virtual bool OnCmdLineParsed(wxCmdLineParser& parser); +#endif // wxUSE_CMDLINE_PARSER + protected: #if wxUSE_LOG virtual wxAppTraits *CreateTraits() { return new MyAppTraits; } #endif // wxUSE_LOG + +private: + // Flag set to a valid value if command line option "progress" is used, + // this allows testing of wxProgressDialog before the main event loop is + // started. If this option is not specified it is set to -1 by default + // meaning that progress dialog shouldn't be shown at all. + long m_startupProgressStyle; }; #if USE_MODAL_PRESENTATION