X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/977a41ec3e85ae7736b7028ec04ebd1818058c8e..9573840bcf042dda2d273d5c8f3c2bda27e89d01:/src/generic/progdlgg.cpp diff --git a/src/generic/progdlgg.cpp b/src/generic/progdlgg.cpp index 257acaafe2..77af0c76aa 100644 --- a/src/generic/progdlgg.cpp +++ b/src/generic/progdlgg.cpp @@ -403,11 +403,17 @@ wxProgressDialog::Update(int value, const wxString& newmsg, bool *skip) m_msg->SetLabel(_("Done.")); } + wxCHECK_MSG(wxEventLoopBase::GetActive(), false, + "wxProgressDialog::Update needs a running event loop"); + // allow the window to repaint: // NOTE: since we yield only for UI events with this call, there // should be no side-effects wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_UI); + // NOTE: this call results in a new event loop being created + // and to a call to ProcessPendingEvents() (which may generate + // unwanted re-entrancies). (void)ShowModal(); } else // auto hide @@ -454,6 +460,9 @@ bool wxProgressDialog::Pulse(const wxString& newmsg, bool *skip) bool wxProgressDialog::DoAfterUpdate(bool *skip) { + wxCHECK_MSG(wxEventLoopBase::GetActive(), false, + "wxProgressDialog::DoAfterUpdate needs a running event loop"); + // we have to yield because not only we want to update the display but // also to process the clicks on the cancel and skip buttons // NOTE: using YieldFor() this call shouldn't give re-entrancy problems @@ -513,6 +522,22 @@ wxString wxProgressDialog::GetMessage() const return m_msg->GetLabel(); } +void wxProgressDialog::SetRange(int maximum) +{ + wxASSERT_MSG(m_gauge, "The dialog should have been constructed with a range > 0"); + wxASSERT_MSG(maximum > 0, "Invalid range"); + + m_gauge->SetRange(maximum); + m_maximum = maximum; + +#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; + m_maximum /= m_factor; +#endif // __WXMSW__ +} + // ---------------------------------------------------------------------------- // event handlers // ---------------------------------------------------------------------------- @@ -671,12 +696,13 @@ void wxProgressDialog::EnableClose() void wxProgressDialog::UpdateMessage(const wxString &newmsg) { + wxCHECK_RET(wxEventLoopBase::GetActive(), + "wxProgressDialog::UpdateMessage needs a running event loop"); + if ( !newmsg.empty() && newmsg != m_msg->GetLabel() ) { m_msg->SetLabel(newmsg); - Fit(); // adapt to the new label size - // allow the window to repaint: // NOTE: since we yield only for UI events with this call, there // should be no side-effects