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
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
@ -102,48 +109,51 @@ private:
// 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(); }

View File

@ -103,21 +103,23 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
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);
}
@ -127,7 +129,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
SetLeftMenu();
#endif
m_state = hasAbortButton ? Continue : Uncancelable;
m_state = m_hasAbortButton ? Continue : Uncancelable;
m_maximum = maximum;
#if defined(__WXMSW__) || defined(__WXPM__)
@ -214,9 +216,9 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
}
#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;
@ -231,7 +233,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
#endif // MSW/!MSW
;
if ( hasSkipButton )
if ( m_hasSkipButton )
{
m_btnSkip = new wxButton(this, wxID_SKIP, _("Skip"));
@ -241,7 +243,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
sizeDlgModified = true;
}
if ( hasAbortButton )
if ( m_hasAbortButton )
{
m_btnAbort = new wxButton(this, wxID_CANCEL);
@ -414,26 +416,10 @@ wxProgressDialog::Update(int value, const wxString& newmsg, bool *skip)
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() )
@ -466,8 +452,7 @@ wxProgressDialog::Update(int value, const wxString& newmsg, bool *skip)
{
*skip = true;
m_skip = false;
if(m_btnSkip)
m_btnSkip->Enable();
EnableSkip();
}
}
@ -483,19 +468,9 @@ void wxProgressDialog::Resume()
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 )
@ -527,16 +502,10 @@ void wxProgressDialog::OnCancel(wxCommandEvent& event)
// 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();
@ -545,8 +514,7 @@ void wxProgressDialog::OnCancel(wxCommandEvent& event)
void wxProgressDialog::OnSkip(wxCommandEvent& WXUNUSED(event))
{
if(m_btnSkip)
m_btnSkip->Disable();
DisableSkip();
m_skip = true;
}
@ -566,14 +534,9 @@ void wxProgressDialog::OnClose(wxCloseEvent& event)
{
// 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();
}
}
@ -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