X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/db1a42b8742c373d30118c3365dacee071eebe1c..505c8ccdb3c1c59eb14b019c4386d1a0b10224b0:/src/generic/progdlgg.cpp diff --git a/src/generic/progdlgg.cpp b/src/generic/progdlgg.cpp index c6ca37e085..2098d95e67 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 @@ -108,7 +108,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title, m_state = hasAbortButton ? Continue : Uncancelable; m_maximum = maximum; -#ifdef __WXMSW__ +#if defined(__WXMSW__) || defined(__WXPM__) // we can't have values > 65,536 in the progress control under Windows, so // scale everything down m_factor = m_maximum / 65536 + 1; @@ -212,7 +212,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title, c = new wxLayoutConstraints; // Windows dialogs usually have buttons in the lower right corner -#ifdef __WXMSW__ +#if defined(__WXMSW__) || defined(__WXPM__) c->right.SameAs(this, wxRight, 2*LAYOUT_X_MARGIN); #else // !MSW c->centreX.SameAs(this, wxCentreX); @@ -268,7 +268,6 @@ wxProgressDialog::wxProgressDialog(wxString const &title, // Update the display (especially on X, GTK) wxYield(); - wxYield(); #ifdef __WXMAC__ MacUpdateImmediately(); @@ -285,7 +284,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 -#ifdef __WXMSW__ +#if defined(__WXMSW__) || defined(__WXPM__) c->left.SameAs(this, wxCentreX, LAYOUT_X_MARGIN); #else // !MSW c->right.SameAs(this, wxRight, 2*LAYOUT_X_MARGIN); @@ -323,7 +322,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); } @@ -333,13 +332,12 @@ wxProgressDialog::Update(int value, const wxString& newmsg) m_msg->SetLabel(newmsg); wxYield(); - wxYield(); } 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); @@ -347,7 +345,7 @@ wxProgressDialog::Update(int value, const wxString& newmsg) SetTimeLabel(remaining, m_remaining); } - if ( (value == m_maximum ) ) + if ( value == m_maximum ) { // so that we return TRUE below and that out [Cancel] handler knew what // to do @@ -360,7 +358,7 @@ wxProgressDialog::Update(int value, const wxString& newmsg) m_btnAbort->SetLabel(_("Close")); } #if defined(__WXMSW__) && !defined(__WXUNIVERSAL__) - else // enable the close button to give the user a way to close the dlg + else // enable the button to give the user a way to close the dlg { EnableCloseButton(TRUE); } @@ -372,22 +370,24 @@ wxProgressDialog::Update(int value, const wxString& newmsg) m_msg->SetLabel(_("Done.")); } - wxYield(); wxYield(); (void)ShowModal(); } - else + else // auto hide { - Hide(); + // 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 ReenableOtherWindows(); + + Hide(); } } else { // update the display wxYield(); - wxYield(); } #ifdef __WXMAC__ @@ -406,6 +406,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 // ----------------------------------------------------------------------------