X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3786ce5ad8ee09cc75889fe6284332dec5fa79b5..593ac33e50ab0b01f6186773fa646104d410f365:/src/generic/progdlgg.cpp?ds=sidebyside diff --git a/src/generic/progdlgg.cpp b/src/generic/progdlgg.cpp index 8d64378472..c261d63be4 100644 --- a/src/generic/progdlgg.cpp +++ b/src/generic/progdlgg.cpp @@ -17,10 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "progdlgg.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -39,12 +35,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 +99,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 +127,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__) @@ -141,7 +141,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title, wxClientDC dc(this); dc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); - long widthText; + long widthText = 0; dc.GetTextExtent(message, &widthText, NULL, NULL, NULL, NULL); wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); @@ -214,9 +214,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 +231,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title, #endif // MSW/!MSW ; - if ( hasSkipButton ) + if ( m_hasSkipButton ) { m_btnSkip = new wxButton(this, wxID_SKIP, _("Skip")); @@ -241,7 +241,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title, sizeDlgModified = true; } - if ( hasAbortButton ) + if ( m_hasAbortButton ) { m_btnAbort = new wxButton(this, wxID_CANCEL); @@ -256,13 +256,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,29 +417,13 @@ 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() ) + if ( newmsg.empty() ) { // also provide the finishing message if the application didn't m_msg->SetLabel(_("Done.")); @@ -466,8 +453,7 @@ wxProgressDialog::Update(int value, const wxString& newmsg, bool *skip) { *skip = true; m_skip = false; - if(m_btnSkip) - m_btnSkip->Enable(); + EnableSkip(); } } @@ -483,19 +469,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 +503,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 +515,7 @@ void wxProgressDialog::OnCancel(wxCommandEvent& event) void wxProgressDialog::OnSkip(wxCommandEvent& WXUNUSED(event)) { - if(m_btnSkip) - m_btnSkip->Disable(); + DisableSkip(); m_skip = true; } @@ -566,14 +535,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 +585,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