X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8907154c1a8a6882c6797d1f16393ddfb23e7f3a..8037b674e8b39d4ed3b621500237b5eb525a6de8:/src/generic/progdlgg.cpp diff --git a/src/generic/progdlgg.cpp b/src/generic/progdlgg.cpp index e623577737..cffe7fce24 100644 --- a/src/generic/progdlgg.cpp +++ b/src/generic/progdlgg.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: progdlgg.h +// Name: src/generic/progdlgg.cpp // Purpose: wxProgressDialog class // Author: Karsten Ballüder // Modified by: @@ -37,10 +37,10 @@ #include "wx/intl.h" #include "wx/dcclient.h" #include "wx/timer.h" + #include "wx/settings.h" #endif -#include "wx/generic/progdlgg.h" -#include "wx/settings.h" +#include "wx/progdlg.h" // --------------------------------------------------------------------------- // macros @@ -141,7 +141,7 @@ wxProgressDialog::wxProgressDialog(wxString const &title, wxClientDC dc(this); dc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); - long widthText; + long widthText = 0; dc.GetTextExtent(message, &widthText, NULL, NULL, NULL, NULL); wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); @@ -308,7 +308,7 @@ wxStaticText *wxProgressDialog::CreateLabel(const wxString& text, locsizer->Add(dummy, 1, wxALIGN_LEFT); locsizer->Add(label, 1, wxALIGN_LEFT); sizer->Add(locsizer, 0, wxALIGN_LEFT | wxTOP | wxLEFT, LAYOUT_MARGIN); -#elif defined(__WXMSW__) || defined(__WXPM__) || defined(__WXMAC__) +#elif defined(__WXMSW__) || defined(__WXPM__) || defined(__WXMAC__) || defined(__WXGTK20__) // label and time centered in one row locsizer->Add(dummy, 1, wxLARGESMALL(wxALIGN_RIGHT,wxALIGN_LEFT)); locsizer->Add(label, 1, wxALIGN_LEFT | wxLEFT, LAYOUT_MARGIN); @@ -345,12 +345,7 @@ wxProgressDialog::Update(int value, const wxString& newmsg, bool *skip) m_gauge->SetValue(value == m_maximum ? value : value + 1); } - if ( !newmsg.empty() && newmsg != m_msg->GetLabel() ) - { - m_msg->SetLabel(newmsg); - - wxYieldIfNeeded() ; - } + UpdateMessage(newmsg); if ( (m_elapsed || m_remaining || m_estimated) && (value != 0) ) { @@ -463,6 +458,39 @@ wxProgressDialog::Update(int value, const wxString& newmsg, bool *skip) return m_state != Canceled; } +bool +wxProgressDialog::UpdatePulse(const wxString& newmsg, bool *skip) +{ + wxASSERT_MSG( m_gauge, wxT("cannot update non existent dialog") ); + + // show a bit of progress + m_gauge->Pulse(); + + UpdateMessage(newmsg); + + if (m_elapsed || m_remaining || m_estimated) + { + unsigned long elapsed = wxGetCurrentTime() - m_timeStart; + + SetTimeLabel(elapsed, m_elapsed); + SetTimeLabel((unsigned long)-1, m_estimated); + SetTimeLabel((unsigned long)-1, m_remaining); + } + + // 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 m_state != Canceled; +} + void wxProgressDialog::Resume() { m_state = Continue; @@ -575,10 +603,18 @@ static void SetTimeLabel(unsigned long val, wxStaticText *label) if ( label ) { wxString s; + + if (val != (unsigned long)-1) + { unsigned long hours = val / 3600; unsigned long minutes = (val % 3600) / 60; unsigned long seconds = val % 60; s.Printf(wxT("%lu:%02lu:%02lu"), hours, minutes, seconds); + } + else + { + s = _("Unknown"); + } if ( s != label->GetLabel() ) label->SetLabel(s); @@ -633,4 +669,14 @@ void wxProgressDialog::EnableClose() } } +void wxProgressDialog::UpdateMessage(const wxString &newmsg) +{ + if ( !newmsg.empty() && newmsg != m_msg->GetLabel() ) + { + m_msg->SetLabel(newmsg); + + wxYieldIfNeeded() ; + } +} + #endif // wxUSE_PROGRESSDLG