Removed all duplicated and complicated #ifdefs for enabling Skip and Abort in progress dialog (Smartphone fixes).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31246 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Włodzimierz Skiba
2005-01-05 18:37:42 +00:00
parent fa9a4f7f81
commit 69c695466d
2 changed files with 112 additions and 91 deletions

View File

@@ -84,6 +84,13 @@ private:
// as the next windows in the sizer, returns the created control // as the next windows in the sizer, returns the created control
wxStaticText *CreateLabel(const wxString& text, wxSizer *sizer); 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 // the status bar
wxGauge *m_gauge; wxGauge *m_gauge;
// the message displayed // the message displayed
@@ -102,48 +109,51 @@ private:
// parent top level window (may be NULL) // parent top level window (may be NULL)
wxWindow *m_parentTop; wxWindow *m_parentTop;
// continue processing or not (return value for Update()) // continue processing or not (return value for Update())
enum enum
{ {
Uncancelable = -1, // dialog can't be canceled Uncancelable = -1, // dialog can't be canceled
Canceled, // can be cancelled and, in fact, was Canceled, // can be cancelled and, in fact, was
Continue, // can be cancelled but wasn't Continue, // can be cancelled but wasn't
Finished // finished, waiting to be removed from screen Finished // finished, waiting to be removed from screen
} m_state; } m_state;
// skip some portion // skip some portion
bool m_skip; bool m_skip;
#if !defined(__SMARTPHONE__) #if !defined(__SMARTPHONE__)
// the abort and skip buttons (or NULL if none) // the abort and skip buttons (or NULL if none)
wxButton *m_btnAbort; wxButton *m_btnAbort;
wxButton *m_btnSkip; wxButton *m_btnSkip;
#endif #endif
// the maximum value // the maximum value
int m_maximum; int m_maximum;
// saves the time when elapsed time was updated so there is only one // saves the time when elapsed time was updated so there is only one
// update per second // update per second
unsigned long m_last_timeupdate; unsigned long m_last_timeupdate;
// tells how often a change of the estimated time has to be confirmed // tells how often a change of the estimated time has to be confirmed
// before it is actually displayed - this reduces the frequence of updates // before it is actually displayed - this reduces the frequence of updates
// of estimated and remaining time // of estimated and remaining time
const int m_delay; const int m_delay;
// counts the confirmations // counts the confirmations
int m_ctdelay; int m_ctdelay;
unsigned long m_display_estimated; unsigned long m_display_estimated;
bool m_hasAbortButton,
m_hasSkipButton;
#if defined(__WXMSW__ ) || defined(__WXPM__) #if defined(__WXMSW__ ) || defined(__WXPM__)
// the factor we use to always keep the value in 16 bit range as the native // 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 // control only supports ranges from 0 to 65,535
size_t m_factor; size_t m_factor;
#endif // __WXMSW__ #endif // __WXMSW__
// for wxPD_APP_MODAL case // for wxPD_APP_MODAL case
class WXDLLEXPORT wxWindowDisabler *m_winDisabler; class WXDLLEXPORT wxWindowDisabler *m_winDisabler;
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
private: private:
// Virtual function hiding supression // Virtual function hiding supression
virtual void Update() { wxDialog::Update(); } virtual void Update() { wxDialog::Update(); }

View File

@@ -103,21 +103,23 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
int style) int style)
: wxDialog(parent, wxID_ANY, title), : wxDialog(parent, wxID_ANY, title),
m_skip(false), 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 // we may disappear at any moment, let the others know about it
SetExtraStyle(GetExtraStyle() | wxWS_EX_TRANSIENT); SetExtraStyle(GetExtraStyle() | wxWS_EX_TRANSIENT);
m_windowStyle |= style; m_windowStyle |= style;
bool hasAbortButton = (style & wxPD_CAN_ABORT) != 0; m_hasAbortButton = (style & wxPD_CAN_ABORT) != 0;
bool hasSkipButton = (style & wxPD_CAN_SKIP) != 0; m_hasSkipButton = (style & wxPD_CAN_SKIP) != 0;
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__) #if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
// we have to remove the "Close" button from the title bar then as it is // we have to remove the "Close" button from the title bar then as it is
// confusing to have it - it doesn't work anyhow // confusing to have it - it doesn't work anyhow
// //
// FIXME: should probably have a (extended?) window style for this // FIXME: should probably have a (extended?) window style for this
if ( !hasAbortButton ) if ( !m_hasAbortButton )
{ {
EnableCloseButton(false); EnableCloseButton(false);
} }
@@ -127,7 +129,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
SetLeftMenu(); SetLeftMenu();
#endif #endif
m_state = hasAbortButton ? Continue : Uncancelable; m_state = m_hasAbortButton ? Continue : Uncancelable;
m_maximum = maximum; m_maximum = maximum;
#if defined(__WXMSW__) || defined(__WXPM__) #if defined(__WXMSW__) || defined(__WXPM__)
@@ -214,9 +216,9 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
} }
#if defined(__SMARTPHONE__) #if defined(__SMARTPHONE__)
if ( hasSkipButton ) if ( m_hasSkipButton )
SetRightMenu(wxID_SKIP, _("Skip")); SetRightMenu(wxID_SKIP, _("Skip"));
if ( hasAbortButton ) if ( m_hasAbortButton )
SetLeftMenu(wxID_CANCEL); SetLeftMenu(wxID_CANCEL);
#else #else
m_btnAbort = m_btnSkip = (wxButton *)NULL; m_btnAbort = m_btnSkip = (wxButton *)NULL;
@@ -231,7 +233,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
#endif // MSW/!MSW #endif // MSW/!MSW
; ;
if ( hasSkipButton ) if ( m_hasSkipButton )
{ {
m_btnSkip = new wxButton(this, wxID_SKIP, _("Skip")); m_btnSkip = new wxButton(this, wxID_SKIP, _("Skip"));
@@ -241,7 +243,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
sizeDlgModified = true; sizeDlgModified = true;
} }
if ( hasAbortButton ) if ( m_hasAbortButton )
{ {
m_btnAbort = new wxButton(this, wxID_CANCEL); m_btnAbort = new wxButton(this, wxID_CANCEL);
@@ -414,26 +416,10 @@ wxProgressDialog::Update(int value, const wxString& newmsg, bool *skip)
m_state = Finished; m_state = Finished;
if( !(GetWindowStyle() & wxPD_AUTO_HIDE) ) if( !(GetWindowStyle() & wxPD_AUTO_HIDE) )
{ {
#if defined(__SMARTPHONE__) EnableClose();
SetLeftMenu(wxID_CANCEL, _("Close")); DisableSkip();
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"));
}
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__) #if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
else // enable the button to give the user a way to close the dlg EnableCloseButton();
{
EnableCloseButton();
}
#endif // __WXMSW__ #endif // __WXMSW__
if ( !newmsg.empty() ) if ( !newmsg.empty() )
@@ -466,8 +452,7 @@ wxProgressDialog::Update(int value, const wxString& newmsg, bool *skip)
{ {
*skip = true; *skip = true;
m_skip = false; m_skip = false;
if(m_btnSkip) EnableSkip();
m_btnSkip->Enable();
} }
} }
@@ -483,19 +468,9 @@ void wxProgressDialog::Resume()
m_ctdelay = m_delay; // force an update of the elapsed/estimated/remaining time m_ctdelay = m_delay; // force an update of the elapsed/estimated/remaining time
m_break += wxGetCurrentTime()-m_timeStop; m_break += wxGetCurrentTime()-m_timeStop;
// it may have been disabled by OnCancel(), so enable it back to let the EnableAbort();
// user interrupt us again if needed EnableSkip();
if(m_btnAbort)
m_btnAbort->Enable();
// enable skipping because the one before OnCancel() is no more valid
m_skip = false; m_skip = false;
if(m_btnSkip)
m_btnSkip->Enable();
#if defined(__SMARTPHONE__)
SetLeftMenu(wxID_CANCEL, _("Cancel"));
#endif
} }
bool wxProgressDialog::Show( bool show ) bool wxProgressDialog::Show( bool show )
@@ -527,16 +502,10 @@ void wxProgressDialog::OnCancel(wxCommandEvent& event)
// will handle it // will handle it
m_state = Canceled; 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 // request has been noticed
if(m_btnAbort) DisableAbort();
m_btnAbort->Disable(); DisableSkip();
if(m_btnSkip)
m_btnSkip->Disable();
#if defined(__SMARTPHONE__)
SetLeftMenu();
#endif
// save the time when the dialog was stopped // save the time when the dialog was stopped
m_timeStop = wxGetCurrentTime(); m_timeStop = wxGetCurrentTime();
@@ -545,8 +514,7 @@ void wxProgressDialog::OnCancel(wxCommandEvent& event)
void wxProgressDialog::OnSkip(wxCommandEvent& WXUNUSED(event)) void wxProgressDialog::OnSkip(wxCommandEvent& WXUNUSED(event))
{ {
if(m_btnSkip) DisableSkip();
m_btnSkip->Disable();
m_skip = true; m_skip = true;
} }
@@ -566,14 +534,9 @@ void wxProgressDialog::OnClose(wxCloseEvent& event)
{ {
// next Update() will notice it // next Update() will notice it
m_state = Canceled; m_state = Canceled;
if(m_btnAbort) DisableAbort();
m_btnAbort->Disable(); DisableSkip();
if(m_btnSkip)
m_btnSkip->Disable();
#if defined(__SMARTPHONE__)
SetLeftMenu();
#endif
m_timeStop = wxGetCurrentTime(); m_timeStop = wxGetCurrentTime();
} }
} }
@@ -621,4 +584,52 @@ static void SetTimeLabel(unsigned long val, wxStaticText *label)
} }
} }
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 #endif // wxUSE_PROGRESSDLG