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:
@@ -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(); }
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user