]> git.saurik.com Git - wxWidgets.git/commitdiff
small refactoring to avoid code duplication; renamed wxProgressDialog::UpdatePulse...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 22 Oct 2006 21:08:11 +0000 (21:08 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 22 Oct 2006 21:08:11 +0000 (21:08 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42253 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/generic/progdlgg.h
samples/dialogs/dialogs.cpp
src/generic/progdlgg.cpp

index abaf9f64faa924d0144f97b27abe6f2d4d2adc95..5afdfed18bd20a32697df50c7513cdc9c62f6ebd 100644 (file)
@@ -70,6 +70,7 @@ All (GUI):
   calling SelectObject itself if a valid bitmap is passed.
 - Reverted wxBuffered[Paint]DC to pre 2.7.1 state, added
   wxAutoBufferedPaintDC and wxAutoBufferedPaintDCFactory.
+- Renamed wxProgressDialog::UpdatePulse() to just Pulse()
 
 Unix Ports:
 
index 44467b1836a60eb2a338102c770c6f5ee0bd1202..24f25446cc3db217071859ab02dd6be1b43d5b39 100644 (file)
@@ -56,7 +56,7 @@ public:
 
     /* Switches the dialog to use a gauge in indeterminate mode and calls
        wxGauge::Pulse() to show to the user a bit of progress */
-    virtual bool UpdatePulse(const wxString& newmsg = wxEmptyString, bool *skip = NULL);
+    virtual bool Pulse(const wxString& newmsg = wxEmptyString, bool *skip = NULL);
 
     // Must provide overload to avoid hiding it (and warnings about it)
     virtual void Update() { wxDialog::Update(); }
@@ -91,6 +91,9 @@ private:
     // updates the label message
    void UpdateMessage(const wxString &newmsg);
 
+   // common part of Update() and Pulse(), returns true if not cancelled
+   bool DoAfterUpdate(bool *skip);
+
    // shortcuts for enabling buttons
    void EnableClose();
    void EnableSkip(bool enable=true);
index 8f39a054abf149ce4e38e72ce5994e73db159eb1..605ea505a6d484594523c221a7efd07f3b90eada 100644 (file)
@@ -1108,8 +1108,9 @@ void MyFrame::ShowProgress( wxCommandEvent& WXUNUSED(event) )
                             // wxPD_AUTO_HIDE | -- try this as well
                             wxPD_ELAPSED_TIME |
                             wxPD_ESTIMATED_TIME |
-                            wxPD_REMAINING_TIME |
-                            wxPD_SMOOTH);
+                            wxPD_REMAINING_TIME
+                            //wxPD_SMOOTH - makes indeterminate mode bar on WinXP very small
+                            );
 
     bool cont = true;
     bool skip = false;
@@ -1138,15 +1139,29 @@ void MyFrame::ShowProgress( wxCommandEvent& WXUNUSED(event) )
 
         wxString msg;
 
+        // test both behaviours of wxProgressDialog:
+        // determinate mode for first 33% and last 33% of the time
+        // indeterminate mode from 33% to 66% of the progress
+        const int firstpart = max /3,
+                  secondpart = 2 * max /3;
+        bool determinate = i < firstpart || i > secondpart;
+        bool indeterminate = !determinate;
+
         if ( i == max )
         {
             msg = _T("That's all, folks!");
         }
-        else if ( i > max / 2 )
+        else if ( indeterminate )
+        {
+            msg = _T("Now test indeterminate mode");
+        }
+        else if ( i > secondpart )
         {
-            msg = _T("Only a half left (very long message)!");
+            msg = _T("Back to determinate mode");
         }
 
+        if (determinate)
+        {
 #if wxUSE_STOPWATCH && wxUSE_LONGLONG
         if ( (i % (max/100)) == 0 ) // // only 100 updates, this makes it much faster
         {
@@ -1155,6 +1170,18 @@ void MyFrame::ShowProgress( wxCommandEvent& WXUNUSED(event) )
 #else
         cont = dialog.Update(i, msg, &skip);
 #endif
+        }
+        else
+        {
+#if wxUSE_STOPWATCH && wxUSE_LONGLONG
+            if ( (i % (max/100)) == 0 ) // // only 100 updates, this makes it much faster
+            {
+                cont = dialog.Pulse(msg, &skip);
+            }
+#else
+            cont = dialog.Pulse(msg, &skip);
+#endif
+        }
 
         if ( !cont )
         {
index cffe7fce243ffad824b18fd39e80dfca2bd687a4..7541a816bb24026d68a02168a4561cc3d79520d4 100644 (file)
@@ -438,18 +438,9 @@ wxProgressDialog::Update(int value, const wxString& newmsg, bool *skip)
             Hide();
         }
     }
-    else
+    else // not at maximum yet
     {
-        // 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
-        wxYieldIfNeeded() ;
-
-        if ( (m_skip) && (skip != NULL) && (*skip == false) )
-        {
-            *skip = true;
-            m_skip = false;
-            EnableSkip();
-        }
+        return DoAfterUpdate(skip);
     }
 
     // update the display in case yielding above didn't do it
@@ -458,8 +449,7 @@ wxProgressDialog::Update(int value, const wxString& newmsg, bool *skip)
     return m_state != Canceled;
 }
 
-bool
-wxProgressDialog::UpdatePulse(const wxString& newmsg, bool *skip)
+bool wxProgressDialog::Pulse(const wxString& newmsg, bool *skip)
 {
     wxASSERT_MSG( m_gauge, wxT("cannot update non existent dialog") );
 
@@ -477,11 +467,18 @@ wxProgressDialog::UpdatePulse(const wxString& newmsg, bool *skip)
         SetTimeLabel((unsigned long)-1, m_remaining);
     }
 
+    return DoAfterUpdate(skip);
+}
+
+bool wxProgressDialog::DoAfterUpdate(bool *skip)
+{
     // 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
-    wxYieldIfNeeded() ;
+    wxYieldIfNeeded();
+
+    Update();
 
-    if ( (m_skip) && (skip != NULL) && (*skip == false) )
+    if ( m_skip && skip && !*skip )
     {
         *skip = true;
         m_skip = false;