]> git.saurik.com Git - wxWidgets.git/commitdiff
*** empty log message ***
authorVáclav Slavík <vslavik@fastmail.fm>
Sat, 26 Jun 1999 10:25:06 +0000 (10:25 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Sat, 26 Jun 1999 10:25:06 +0000 (10:25 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2903 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/controls/controls.cpp
src/generic/progdlgg.cpp

index 284420de19e8d4839bec9d7156f2d18d175982dd..6f06969923a2108bbe2b0ea4224040d2dcc46db8 100644 (file)
@@ -750,7 +750,7 @@ void MyPanel::OnShowProgress( wxCommandEvent& WXUNUSED(event) )
                             "An informative message",
                             max,    // range
                             this,   // parent
-                            wxPD_CAN_ABORT | wxPD_APP_MODAL);
+                            wxPD_CAN_ABORT | wxPD_APP_MODAL | wxPD_ELAPSED_TIME | wxPD_ESTIMATED_TIME | wxPD_REMAINING_TIME);
                             
 
     bool cont = TRUE;
index bf3051c9b9c2fef8d6206220088dfee7fc0032e2..801ef396eaa6d6bdb125e4532c3ff95239fa867e 100644 (file)
@@ -57,12 +57,17 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
                                  wxWindow *parent,
                                  int style)
 {
+   wxWindow *lastWindow = NULL;
    bool hasAbortButton = (style & wxPD_CAN_ABORT) != 0;
    m_state = hasAbortButton ? Continue : Uncancelable;
    m_disableParentOnly = (style & wxPD_APP_MODAL) == 0;
    m_parent = parent;
    m_maximum = maximum;
 
+   m_elapsed = m_estimated = m_remaining = NULL;
+   if ((style & (wxPD_ELAPSED_TIME | wxPD_ESTIMATED_TIME | wxPD_REMAINING_TIME)) != 0) m_time = new wxTime;
+   else m_time = NULL;
+
    wxFrame::Create(m_parent, -1, title, wxDefaultPosition,
                    wxDefaultSize, wxDEFAULT_DIALOG_STYLE);
    SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE));
@@ -81,6 +86,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
    c->width.AsIs();
    c->height.AsIs();
    m_msg->SetConstraints(c);
+   lastWindow = m_msg;
 
    if ( maximum > 0 )
    {
@@ -94,17 +100,82 @@ wxProgressDialog::wxProgressDialog(wxString const &title,
       c->height.AsIs();
       m_gauge->SetConstraints(c);
       m_gauge->SetValue(0);
+      lastWindow = m_gauge;
    }
    else
       m_gauge = (wxGauge *)NULL;
 
+   
+   if ( style & wxPD_ELAPSED_TIME )
+   {
+      m_elapsed = new wxStaticText(this, -1, "");
+      c = new wxLayoutConstraints;
+      c->right.SameAs(this, wxRight, 2*LAYOUT_X_MARGIN);
+      c->top.Below(lastWindow, LAYOUT_Y_MARGIN);
+      c->width.Absolute(60);
+      c->height.AsIs();
+      m_elapsed->SetConstraints(c);
+
+      wxStaticText *dummy = new wxStaticText(this, -1, _T("Elapsed time : "));
+      c = new wxLayoutConstraints;
+      c->right.LeftOf(m_elapsed);
+      c->top.SameAs(m_elapsed, wxTop, 0);
+      c->width.AsIs();
+      c->height.AsIs();
+      dummy->SetConstraints(c);      
+
+      lastWindow = m_elapsed;
+   }
+
+   if ( style & wxPD_ESTIMATED_TIME )
+   {
+      m_estimated = new wxStaticText(this, -1, "");
+      c = new wxLayoutConstraints;
+      c->right.SameAs(this, wxRight, 2*LAYOUT_X_MARGIN);
+      c->top.Below(lastWindow, 0);
+      c->width.Absolute(60);
+      c->height.AsIs();
+      m_estimated->SetConstraints(c);
+
+      wxStaticText *dummy = new wxStaticText(this, -1, _T("Estimated time : "));
+      c = new wxLayoutConstraints;
+      c->right.LeftOf(m_estimated);
+      c->top.SameAs(m_estimated, wxTop, 0);
+      c->width.AsIs();
+      c->height.AsIs();
+      dummy->SetConstraints(c);      
+
+      lastWindow = m_estimated;
+   }
+
+   if ( style & wxPD_REMAINING_TIME )
+   {
+      m_remaining = new wxStaticText(this, -1, "");
+      c = new wxLayoutConstraints;
+      c->right.SameAs(this, wxRight, 2*LAYOUT_X_MARGIN);
+      c->top.Below(lastWindow, 0);
+      c->width.Absolute(60);
+      c->height.AsIs();
+      m_remaining->SetConstraints(c);
+
+      wxStaticText *dummy = new wxStaticText(this, -1, _T("Remaining time : "));
+      c = new wxLayoutConstraints;
+      c->right.LeftOf(m_remaining);
+      c->top.SameAs(m_remaining, wxTop, 0);
+      c->width.AsIs();
+      c->height.AsIs();
+      dummy->SetConstraints(c);      
+
+      lastWindow = m_remaining;
+   }
+
    if ( hasAbortButton )
    {
       m_btnAbort = new wxButton(this, -1, _("Cancel"));
       c = new wxLayoutConstraints;
       c->centreX.SameAs(this, wxCentreX);
-      if(m_gauge)
-         c->top.Below(m_gauge, 2*LAYOUT_Y_MARGIN);
+      if(lastWindow)
+         c->top.Below(lastWindow, 2*LAYOUT_Y_MARGIN);
       else
          c->top.Below(m_btnAbort, 2*LAYOUT_Y_MARGIN);
       c->width.AsIs();
@@ -153,6 +224,32 @@ wxProgressDialog::Update(int value, const wxString& newmsg)
    if( !newmsg.IsEmpty() )
       m_msg->SetLabel(newmsg);
 
+   if ( (m_elapsed || m_remaining || m_estimated) && (value != 0) )
+   {
+      wxTime timenow;
+      wxTime diff = timenow -  *m_time;
+      unsigned long secs = diff.GetSecond() + 60 * diff.GetMinute() + 60 * 60 * diff.GetHour();
+      unsigned long estim = secs * m_maximum / value; 
+      unsigned long remai = estim - secs; 
+      wxString s;
+
+      if (m_elapsed) 
+      {
+        s.Printf("%i:%02i:%02i", diff.GetHour(), diff.GetMinute(), diff.GetSecond());
+        if (s != m_elapsed->GetLabel()) m_elapsed->SetLabel(s);
+      }
+      if (m_estimated) 
+      {
+        s.Printf("%i:%02i:%02i", estim / (60 * 60), (estim / 60) % 60, estim % 60);
+        if (s != m_estimated->GetLabel()) m_estimated->SetLabel(s);
+      }
+      if (m_remaining) 
+      {
+        s.Printf("%i:%02i:%02i", remai / (60 * 60), (remai / 60) % 60, remai % 60);
+        if (s != m_remaining->GetLabel()) m_remaining->SetLabel(s);
+      }
+   }
+
    if ( (value == m_maximum - 1) && !(GetWindowStyleFlag() & wxPD_AUTO_HIDE) )
    {
        if ( m_btnAbort )
@@ -191,6 +288,7 @@ wxProgressDialog::~wxProgressDialog()
       m_parent->Enable(TRUE);
    else
       wxEnableTopLevelWindows(TRUE);
+   if (m_time) delete m_time;
 }
 
 #endif