// as the next windows in the sizer, returns the created control
wxStaticText *CreateLabel(const wxString& text, wxSizer *sizer);
+ // shortcuts for enabling buttons
+ void EnableClose();
+ void EnableSkip(bool enable=true);
+ void EnableAbort(bool enable=true);
+ inline void DisableSkip() { EnableSkip(false); }
+ inline void DisableAbort() { EnableAbort(false); }
+
// the status bar
wxGauge *m_gauge;
// the message displayed
// parent top level window (may be NULL)
wxWindow *m_parentTop;
- // continue processing or not (return value for Update())
- enum
- {
- Uncancelable = -1, // dialog can't be canceled
- Canceled, // can be cancelled and, in fact, was
- Continue, // can be cancelled but wasn't
- Finished // finished, waiting to be removed from screen
- } m_state;
+ // continue processing or not (return value for Update())
+ enum
+ {
+ Uncancelable = -1, // dialog can't be canceled
+ Canceled, // can be cancelled and, in fact, was
+ Continue, // can be cancelled but wasn't
+ Finished // finished, waiting to be removed from screen
+ } m_state;
- // skip some portion
- bool m_skip;
+ // skip some portion
+ bool m_skip;
#if !defined(__SMARTPHONE__)
- // the abort and skip buttons (or NULL if none)
- wxButton *m_btnAbort;
- wxButton *m_btnSkip;
+ // the abort and skip buttons (or NULL if none)
+ wxButton *m_btnAbort;
+ wxButton *m_btnSkip;
#endif
- // the maximum value
- int m_maximum;
+ // the maximum value
+ int m_maximum;
+
+ // saves the time when elapsed time was updated so there is only one
+ // update per second
+ unsigned long m_last_timeupdate;
+ // tells how often a change of the estimated time has to be confirmed
+ // before it is actually displayed - this reduces the frequence of updates
+ // of estimated and remaining time
+ const int m_delay;
+ // counts the confirmations
+ int m_ctdelay;
+ unsigned long m_display_estimated;
- // saves the time when elapsed time was updated so there is only one
- // update per second
- unsigned long m_last_timeupdate;
- // tells how often a change of the estimated time has to be confirmed
- // before it is actually displayed - this reduces the frequence of updates
- // of estimated and remaining time
- const int m_delay;
- // counts the confirmations
- int m_ctdelay;
- unsigned long m_display_estimated;
+ bool m_hasAbortButton,
+ m_hasSkipButton;
#if defined(__WXMSW__ ) || defined(__WXPM__)
- // the factor we use to always keep the value in 16 bit range as the native
- // control only supports ranges from 0 to 65,535
- size_t m_factor;
+ // the factor we use to always keep the value in 16 bit range as the native
+ // control only supports ranges from 0 to 65,535
+ size_t m_factor;
#endif // __WXMSW__
- // for wxPD_APP_MODAL case
- class WXDLLEXPORT wxWindowDisabler *m_winDisabler;
+ // for wxPD_APP_MODAL case
+ class WXDLLEXPORT wxWindowDisabler *m_winDisabler;
- DECLARE_EVENT_TABLE()
+ DECLARE_EVENT_TABLE()
private:
// Virtual function hiding supression
virtual void Update() { wxDialog::Update(); }
int style)
: wxDialog(parent, wxID_ANY, title),
m_skip(false),
- m_delay(3)
+ m_delay(3),
+ m_hasAbortButton(false),
+ m_hasSkipButton(false)
{
// we may disappear at any moment, let the others know about it
SetExtraStyle(GetExtraStyle() | wxWS_EX_TRANSIENT);
m_windowStyle |= style;
- bool hasAbortButton = (style & wxPD_CAN_ABORT) != 0;
- bool hasSkipButton = (style & wxPD_CAN_SKIP) != 0;
+ m_hasAbortButton = (style & wxPD_CAN_ABORT) != 0;
+ m_hasSkipButton = (style & wxPD_CAN_SKIP) != 0;
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
// we have to remove the "Close" button from the title bar then as it is
// confusing to have it - it doesn't work anyhow
//
// FIXME: should probably have a (extended?) window style for this
- if ( !hasAbortButton )
+ if ( !m_hasAbortButton )
{
EnableCloseButton(false);
}
SetLeftMenu();
#endif
- m_state = hasAbortButton ? Continue : Uncancelable;
+ m_state = m_hasAbortButton ? Continue : Uncancelable;
m_maximum = maximum;
#if defined(__WXMSW__) || defined(__WXPM__)
}
#if defined(__SMARTPHONE__)
- if ( hasSkipButton )
+ if ( m_hasSkipButton )
SetRightMenu(wxID_SKIP, _("Skip"));
- if ( hasAbortButton )
+ if ( m_hasAbortButton )
SetLeftMenu(wxID_CANCEL);
#else
m_btnAbort = m_btnSkip = (wxButton *)NULL;
#endif // MSW/!MSW
;
- if ( hasSkipButton )
+ if ( m_hasSkipButton )
{
m_btnSkip = new wxButton(this, wxID_SKIP, _("Skip"));
sizeDlgModified = true;
}
- if ( hasAbortButton )
+ if ( m_hasAbortButton )
{
m_btnAbort = new wxButton(this, wxID_CANCEL);
m_state = Finished;
if( !(GetWindowStyle() & wxPD_AUTO_HIDE) )
{
-#if defined(__SMARTPHONE__)
- SetLeftMenu(wxID_CANCEL, _("Close"));
- SetRightMenu();
-#endif
- if ( m_btnSkip )
- {
- // tell the user what he should do...
- m_btnSkip->Disable();
- }
-
- if ( m_btnAbort )
- {
- // tell the user what he should do...
- m_btnAbort->SetLabel(_("Close"));
- }
+ EnableClose();
+ DisableSkip();
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
- else // enable the button to give the user a way to close the dlg
- {
- EnableCloseButton();
- }
+ EnableCloseButton();
#endif // __WXMSW__
if ( !newmsg.empty() )
{
*skip = true;
m_skip = false;
- if(m_btnSkip)
- m_btnSkip->Enable();
+ EnableSkip();
}
}
m_ctdelay = m_delay; // force an update of the elapsed/estimated/remaining time
m_break += wxGetCurrentTime()-m_timeStop;
- // it may have been disabled by OnCancel(), so enable it back to let the
- // user interrupt us again if needed
- if(m_btnAbort)
- m_btnAbort->Enable();
-
- // enable skipping because the one before OnCancel() is no more valid
+ EnableAbort();
+ EnableSkip();
m_skip = false;
- if(m_btnSkip)
- m_btnSkip->Enable();
-
-#if defined(__SMARTPHONE__)
- SetLeftMenu(wxID_CANCEL, _("Cancel"));
-#endif
}
bool wxProgressDialog::Show( bool show )
// will handle it
m_state = Canceled;
- // update the button state immediately so that the user knows that the
+ // update the buttons state immediately so that the user knows that the
// request has been noticed
- if(m_btnAbort)
- m_btnAbort->Disable();
- if(m_btnSkip)
- m_btnSkip->Disable();
-
-#if defined(__SMARTPHONE__)
- SetLeftMenu();
-#endif
+ DisableAbort();
+ DisableSkip();
// save the time when the dialog was stopped
m_timeStop = wxGetCurrentTime();
void wxProgressDialog::OnSkip(wxCommandEvent& WXUNUSED(event))
{
- if(m_btnSkip)
- m_btnSkip->Disable();
+ DisableSkip();
m_skip = true;
}
{
// next Update() will notice it
m_state = Canceled;
- if(m_btnAbort)
- m_btnAbort->Disable();
- if(m_btnSkip)
- m_btnSkip->Disable();
+ DisableAbort();
+ DisableSkip();
-#if defined(__SMARTPHONE__)
- SetLeftMenu();
-#endif
m_timeStop = wxGetCurrentTime();
}
}
}
}
+void wxProgressDialog::EnableSkip(bool enable)
+{
+ if(m_hasSkipButton)
+ {
+#ifdef __SMARTPHONE__
+ if(enable)
+ SetRightMenu(wxID_SKIP, _("Skip"));
+ else
+ SetRightMenu();
+#else
+ if(m_btnSkip)
+ m_btnSkip->Enable(enable);
+#endif
+ }
+}
+
+void wxProgressDialog::EnableAbort(bool enable)
+{
+ if(m_hasAbortButton)
+ {
+#ifdef __SMARTPHONE__
+ if(enable)
+ SetLeftMenu(wxID_CANCEL, _("Cancel"));
+ else
+ SetLeftMenu();
+#else
+ if(m_btnAbort)
+ m_btnAbort->Enable(enable);
+#endif
+ }
+}
+
+void wxProgressDialog::EnableClose()
+{
+ if(m_hasAbortButton)
+ {
+#ifdef __SMARTPHONE__
+ SetLeftMenu(wxID_CANCEL, _("Close"));
+#else
+ if(m_btnAbort)
+ {
+ m_btnAbort->Enable();
+ m_btnAbort->SetLabel(_("Close"));
+ }
+#endif
+ }
+}
+
#endif // wxUSE_PROGRESSDLG