X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3786ce5ad8ee09cc75889fe6284332dec5fa79b5..1b14412585d582acde42d422c8cd5d23d4daef14:/src/generic/progdlgg.cpp?ds=sidebyside diff --git a/src/generic/progdlgg.cpp b/src/generic/progdlgg.cpp index 8d64378472..0e64813028 100644 --- a/src/generic/progdlgg.cpp +++ b/src/generic/progdlgg.cpp @@ -39,12 +39,12 @@ #include "wx/event.h" #include "wx/gauge.h" #include "wx/intl.h" - #include "wx/settings.h" #include "wx/dcclient.h" #include "wx/timer.h" #endif #include "wx/generic/progdlgg.h" +#include "wx/settings.h" // --------------------------------------------------------------------------- // macros @@ -103,21 +103,25 @@ 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; + bool isPda = (wxSystemSettings::GetScreenType() <= wxSYS_SCREEN_PDA); + #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 +131,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 +218,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 +235,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title, #endif // MSW/!MSW ; - if ( hasSkipButton ) + if ( m_hasSkipButton ) { m_btnSkip = new wxButton(this, wxID_SKIP, _("Skip")); @@ -241,7 +245,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title, sizeDlgModified = true; } - if ( hasAbortButton ) + if ( m_hasAbortButton ) { m_btnAbort = new wxButton(this, wxID_CANCEL); @@ -256,13 +260,16 @@ wxProgressDialog::wxProgressDialog(wxString const &title, SetSizerAndFit(sizer); - sizeDlg.y += 2*LAYOUT_MARGIN; + if (!isPda) + { + sizeDlg.y += 2*LAYOUT_MARGIN; - // try to make the dialog not square but rectangular of reasonabel width - sizeDlg.x = (wxCoord)wxMax(widthText, 4*sizeDlg.y/3); - sizeDlg.x *= 3; - sizeDlg.x /= 2; - SetClientSize(sizeDlg); + // try to make the dialog not square but rectangular of reasonable width + sizeDlg.x = (wxCoord)wxMax(widthText, 4*sizeDlg.y/3); + sizeDlg.x *= 3; + sizeDlg.x /= 2; + SetClientSize(sizeDlg); + } Centre(wxCENTER_FRAME | wxBOTH); @@ -414,26 +421,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 +457,7 @@ wxProgressDialog::Update(int value, const wxString& newmsg, bool *skip) { *skip = true; m_skip = false; - if(m_btnSkip) - m_btnSkip->Enable(); + EnableSkip(); } } @@ -483,19 +473,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 +507,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 +519,7 @@ void wxProgressDialog::OnCancel(wxCommandEvent& event) void wxProgressDialog::OnSkip(wxCommandEvent& WXUNUSED(event)) { - if(m_btnSkip) - m_btnSkip->Disable(); + DisableSkip(); m_skip = true; } @@ -566,14 +539,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 +589,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); // 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