]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/progdlgg.cpp
Fix toggling the header in the generic wxListCtrl.
[wxWidgets.git] / src / generic / progdlgg.cpp
index 257acaafe2abdbc2fcfcbfea556a410fc868ebc0..77af0c76aaae6a6a850b186d6b759646368e15ca 100644 (file)
@@ -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