From ed1288eef07896f7dc5382e2658d720d5420a6d1 Mon Sep 17 00:00:00 2001 From: Francesco Montorsi Date: Mon, 1 Jun 2009 23:19:25 +0000 Subject: [PATCH] add wxProgressDialog::SetRange() function git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60867 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/generic/progdlgg.h | 51 +++++++++++------------------------ interface/wx/progdlg.h | 9 +++++++ src/generic/progdlgg.cpp | 16 +++++++++++ 3 files changed, 41 insertions(+), 35 deletions(-) diff --git a/include/wx/generic/progdlgg.h b/include/wx/generic/progdlgg.h index cf148f8d02..4a296b6af9 100644 --- a/include/wx/generic/progdlgg.h +++ b/include/wx/generic/progdlgg.h @@ -1,13 +1,13 @@ -//////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// // Name: progdlgg.h // Purpose: wxProgressDialog class // Author: Karsten Ballueder -// Modified by: +// Modified by: Francesco Montorsi // Created: 09.05.1999 // RCS-ID: $Id$ // Copyright: (c) Karsten Ballueder // Licence: wxWindows licence -//////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// #ifndef __PROGDLGH_G__ #define __PROGDLGH_G__ @@ -23,56 +23,36 @@ class WXDLLIMPEXP_FWD_CORE wxButton; class WXDLLIMPEXP_FWD_CORE wxGauge; class WXDLLIMPEXP_FWD_CORE wxStaticText; -/* Progress dialog which shows a moving progress bar. - Taken from the Mahogany project.*/ - +/* + Progress dialog which shows a moving progress bar. + Taken from the Mahogany project. +*/ class WXDLLIMPEXP_CORE wxProgressDialog : public wxDialog { -DECLARE_DYNAMIC_CLASS(wxProgressDialog) public: - /* Creates and displays dialog, disables event handling for other - frames or parent frame to avoid recursion problems. - @param title title for window - @param message message to display in window - @param maximum value for status bar, if <= 0, no bar is shown - @param parent window or NULL - @param style is the bit mask of wxPD_XXX constants from wx/defs.h - */ wxProgressDialog(const wxString& title, const wxString& message, int maximum = 100, wxWindow *parent = NULL, int style = wxPD_APP_MODAL | wxPD_AUTO_HIDE); - /* Destructor. - Re-enables event handling for other windows. - */ + virtual ~wxProgressDialog(); - /* Update the status bar to the new value. - @param value new value - @param newmsg if used, new message to display - @return true if ABORT button has not been pressed - */ virtual bool Update(int value, const wxString& newmsg = wxEmptyString, bool *skip = NULL); - - /* 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 Pulse(const wxString& newmsg = wxEmptyString, bool *skip = NULL); - // Must provide overload to avoid hiding it (and warnings about it) - virtual void Update() { wxDialog::Update(); } - - virtual bool Show( bool show = true ); - - /* Can be called to continue after the cancel button has been pressed, but - the program decided to continue the operation (e.g., user didn't - confirm it) - */ void Resume(); int GetValue() const; int GetRange() const; wxString GetMessage() const; + void SetRange(int maximum); + + // Must provide overload to avoid hiding it (and warnings about it) + virtual void Update() { wxDialog::Update(); } + + virtual bool Show( bool show = true ); + protected: // callback for optional abort button void OnCancel(wxCommandEvent&); @@ -168,6 +148,7 @@ private: class WXDLLIMPEXP_FWD_CORE wxWindowDisabler *m_winDisabler; DECLARE_EVENT_TABLE() + DECLARE_DYNAMIC_CLASS(wxProgressDialog) wxDECLARE_NO_COPY_CLASS(wxProgressDialog); }; diff --git a/interface/wx/progdlg.h b/interface/wx/progdlg.h index 9933e795a1..7847a230c2 100644 --- a/interface/wx/progdlg.h +++ b/interface/wx/progdlg.h @@ -128,6 +128,15 @@ public: */ void Resume(); + /** + Changes the maximum value of the progress meter given in the constructor. + This function can only be called (with a positive value) if the value passed + in the constructor was positive. + + @since 2.9.1 + */ + void SetRange(int maximum); + /** Updates the dialog, setting the progress bar to the new value and updating the message if new one is specified. diff --git a/src/generic/progdlgg.cpp b/src/generic/progdlgg.cpp index 68b58cada4..77af0c76aa 100644 --- a/src/generic/progdlgg.cpp +++ b/src/generic/progdlgg.cpp @@ -522,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 // ---------------------------------------------------------------------------- -- 2.47.2