X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ff095200f79b459f1159f59d031b1c50c0b3194b..40ad34262a834611ec166231bc8a12f5f1ba42be:/src/generic/progdlgg.cpp diff --git a/src/generic/progdlgg.cpp b/src/generic/progdlgg.cpp index ee3323037a..a812cb4736 100644 --- a/src/generic/progdlgg.cpp +++ b/src/generic/progdlgg.cpp @@ -6,7 +6,7 @@ // Created: 09.05.1999 // RCS-ID: $Id$ // Copyright: (c) Karsten Ballüder -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "progdlgg.h" #endif @@ -266,17 +266,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title, SetTimeLabel(0, m_elapsed); } - // Update the display (especially on X, GTK) - wxYield(); - - // FIXME: shouldn't be needed -#ifdef __WXX11__ - wxYield(); -#endif - -#ifdef __WXMAC__ - MacUpdateImmediately(); -#endif + Update(); } wxStaticText *wxProgressDialog::CreateLabel(const wxString& text, @@ -289,7 +279,7 @@ wxStaticText *wxProgressDialog::CreateLabel(const wxString& text, // VZ: I like the labels be centered - if the others don't mind, you may // remove "#ifdef __WXMSW__" and use it for all ports -#if defined(__WXMSW__) || defined(__WXPM__) +#if defined(__WXMSW__) || defined(__WXPM__) || defined(__WXMAC__) c->left.SameAs(this, wxCentreX, LAYOUT_X_MARGIN); #else // !MSW c->right.SameAs(this, wxRight, 2*LAYOUT_X_MARGIN); @@ -327,7 +317,7 @@ wxProgressDialog::Update(int value, const wxString& newmsg) wxASSERT_MSG( value <= m_maximum, wxT("invalid progress value") ); - if ( m_gauge ) + if ( m_gauge && value < m_maximum ) { m_gauge->SetValue(value + 1); } @@ -336,18 +326,13 @@ wxProgressDialog::Update(int value, const wxString& newmsg) { m_msg->SetLabel(newmsg); - wxYield(); - - // FIXME: shouldn't be needed -#ifdef __WXX11__ - wxYield(); -#endif + wxYieldIfNeeded() ; } if ( (m_elapsed || m_remaining || m_estimated) && (value != 0) ) { unsigned long elapsed = wxGetCurrentTime() - m_timeStart; - unsigned long estimated = elapsed * m_maximum / value; + unsigned long estimated = (unsigned long)(( (double) elapsed * m_maximum ) / ((double)value)) ; unsigned long remaining = estimated - elapsed; SetTimeLabel(elapsed, m_elapsed); @@ -380,12 +365,7 @@ wxProgressDialog::Update(int value, const wxString& newmsg) m_msg->SetLabel(_("Done.")); } - wxYield(); - - // FIXME: shouldn't be needed -#ifdef __WXX11__ - wxYield(); -#endif + wxYieldIfNeeded() ; (void)ShowModal(); } @@ -401,18 +381,13 @@ wxProgressDialog::Update(int value, const wxString& newmsg) } else { - // update the display - wxYield(); - - // FIXME: shouldn't be needed -#ifdef __WXX11__ - wxYield(); -#endif + // we have to yield because not only we want to update the display but + // also to process the clicks on the cancel button + wxYieldIfNeeded() ; } -#ifdef __WXMAC__ - MacUpdateImmediately(); -#endif + // update the display in case yielding above didn't do it + Update(); return m_state != Canceled; } @@ -426,6 +401,17 @@ void wxProgressDialog::Resume() m_btnAbort->Enable(); } +bool wxProgressDialog::Show( bool show ) +{ + // reenable other windows before hiding this one because otherwise + // Windows wouldn't give the focus back to the window which had + // been previously focused because it would still be disabled + if(!show) + ReenableOtherWindows(); + + return wxDialog::Show(show); +} + // ---------------------------------------------------------------------------- // event handlers // ----------------------------------------------------------------------------