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); // stock buttons makes Cancel label
+ 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