]> git.saurik.com Git - wxWidgets.git/blame - include/wx/generic/progdlgg.h
fixed wxSpinCtrl's client size computation in wxMSW to return something sensible
[wxWidgets.git] / include / wx / generic / progdlgg.h
CommitLineData
0655ad29 1////////////////////////////////////////////////////
8fa2e6a2
KB
2// Name: progdlgg.h
3// Purpose: wxProgressDialog class
9d55bfef 4// Author: Karsten Ballueder
8fa2e6a2
KB
5// Modified by:
6// Created: 09.05.1999
7// RCS-ID: $Id$
9d55bfef 8// Copyright: (c) Karsten Ballueder
65571936 9// Licence: wxWindows licence
0655ad29 10////////////////////////////////////////////////////
8fa2e6a2
KB
11
12#ifndef __PROGDLGH_G__
13#define __PROGDLGH_G__
14
ecda9475 15#include "wx/defs.h"
fe8635a7 16#include "wx/progdlg.h"
8fa2e6a2 17
ce4169a4 18#if wxUSE_PROGRESSDLG
8fa2e6a2 19
0655ad29 20#include "wx/dialog.h"
8fa2e6a2 21
b5dbe15d
VS
22class WXDLLIMPEXP_FWD_CORE wxButton;
23class WXDLLIMPEXP_FWD_CORE wxGauge;
24class WXDLLIMPEXP_FWD_CORE wxStaticText;
0655ad29
VZ
25
26/* Progress dialog which shows a moving progress bar.
8fa2e6a2
KB
27 Taken from the Mahogany project.*/
28
0655ad29 29class WXDLLEXPORT wxProgressDialog : public wxDialog
8fa2e6a2
KB
30{
31DECLARE_DYNAMIC_CLASS(wxProgressDialog)
32public:
0655ad29 33 /* Creates and displays dialog, disables event handling for other
8fa2e6a2
KB
34 frames or parent frame to avoid recursion problems.
35 @param title title for window
36 @param message message to display in window
9726da4f 37 @param maximum value for status bar, if <= 0, no bar is shown
8fa2e6a2 38 @param parent window or NULL
9726da4f 39 @param style is the bit mask of wxPD_XXX constants from wx/defs.h
8fa2e6a2
KB
40 */
41 wxProgressDialog(const wxString &title, wxString const &message,
0655ad29
VZ
42 int maximum = 100,
43 wxWindow *parent = NULL,
44 int style = wxPD_APP_MODAL | wxPD_AUTO_HIDE);
45 /* Destructor.
8fa2e6a2
KB
46 Re-enables event handling for other windows.
47 */
d3c7fc99 48 virtual ~wxProgressDialog();
8fa2e6a2 49
0655ad29 50 /* Update the status bar to the new value.
8fa2e6a2
KB
51 @param value new value
52 @param newmsg if used, new message to display
53 @returns true if ABORT button has not been pressed
54 */
ecda9475 55 virtual bool Update(int value, const wxString& newmsg = wxEmptyString, bool *skip = NULL);
fe8635a7
RR
56
57 /* Switches the dialog to use a gauge in indeterminate mode and calls
58 wxGauge::Pulse() to show to the user a bit of progress */
f4aa7ec3 59 virtual bool Pulse(const wxString& newmsg = wxEmptyString, bool *skip = NULL);
fe8635a7 60
6f02a879
VZ
61 // Must provide overload to avoid hiding it (and warnings about it)
62 virtual void Update() { wxDialog::Update(); }
8fa2e6a2 63
0655ad29 64 /* Can be called to continue after the cancel button has been pressed, but
8fa2e6a2 65 the program decided to continue the operation (e.g., user didn't
be9abe3f 66 confirm it)
8fa2e6a2 67 */
db1a42b8 68 void Resume();
8fa2e6a2 69
555f645a 70 virtual bool Show( bool show = true );
7d1dcec2 71
ef8698d6
VZ
72protected:
73 // callback for optional abort button
0655ad29 74 void OnCancel(wxCommandEvent& event);
ef8698d6 75
ecda9475
WS
76 // callback for optional skip button
77 void OnSkip(wxCommandEvent& event);
78
ef8698d6 79 // callback to disable "hard" window closing
8fa2e6a2
KB
80 void OnClose(wxCloseEvent& event);
81
ef8698d6
VZ
82 // must be called to reenable the other windows temporarily disabled while
83 // the dialog was shown
84 void ReenableOtherWindows();
85
8fa2e6a2 86private:
0655ad29 87 // create the label with given text and another one to show the time nearby
0ca3b64f
VS
88 // as the next windows in the sizer, returns the created control
89 wxStaticText *CreateLabel(const wxString& text, wxSizer *sizer);
0655ad29 90
fe8635a7
RR
91 // updates the label message
92 void UpdateMessage(const wxString &newmsg);
93
f4aa7ec3
VZ
94 // common part of Update() and Pulse(), returns true if not cancelled
95 bool DoAfterUpdate(bool *skip);
96
69c69546
WS
97 // shortcuts for enabling buttons
98 void EnableClose();
99 void EnableSkip(bool enable=true);
100 void EnableAbort(bool enable=true);
101 inline void DisableSkip() { EnableSkip(false); }
102 inline void DisableAbort() { EnableAbort(false); }
103
0655ad29 104 // the status bar
abceee76 105 wxGauge *m_gauge;
0655ad29 106 // the message displayed
abceee76 107 wxStaticText *m_msg;
0655ad29
VZ
108 // displayed elapsed, estimated, remaining time
109 class wxStaticText *m_elapsed,
110 *m_estimated,
111 *m_remaining;
112 // time when the dialog was created
113 unsigned long m_timeStart;
2c5ef4e2
VZ
114 // time when the dialog was closed or cancelled
115 unsigned long m_timeStop;
116 // time between the moment the dialog was closed/cancelled and resume
117 unsigned long m_break;
abceee76
VZ
118
119 // parent top level window (may be NULL)
120 wxWindow *m_parentTop;
121
69c69546
WS
122 // continue processing or not (return value for Update())
123 enum
124 {
125 Uncancelable = -1, // dialog can't be canceled
126 Canceled, // can be cancelled and, in fact, was
127 Continue, // can be cancelled but wasn't
128 Finished // finished, waiting to be removed from screen
129 } m_state;
cbc66a27 130
69c69546
WS
131 // skip some portion
132 bool m_skip;
ecda9475
WS
133
134#if !defined(__SMARTPHONE__)
69c69546
WS
135 // the abort and skip buttons (or NULL if none)
136 wxButton *m_btnAbort;
137 wxButton *m_btnSkip;
ecda9475 138#endif
cbc66a27 139
69c69546
WS
140 // the maximum value
141 int m_maximum;
142
143 // saves the time when elapsed time was updated so there is only one
144 // update per second
145 unsigned long m_last_timeupdate;
146 // tells how often a change of the estimated time has to be confirmed
147 // before it is actually displayed - this reduces the frequence of updates
148 // of estimated and remaining time
149 const int m_delay;
150 // counts the confirmations
151 int m_ctdelay;
152 unsigned long m_display_estimated;
8fa2e6a2 153
69c69546
WS
154 bool m_hasAbortButton,
155 m_hasSkipButton;
2c5ef4e2 156
bdc8dd3c 157#if defined(__WXMSW__ ) || defined(__WXPM__)
69c69546
WS
158 // the factor we use to always keep the value in 16 bit range as the native
159 // control only supports ranges from 0 to 65,535
160 size_t m_factor;
7c349adb
VZ
161#endif // __WXMSW__
162
69c69546 163 // for wxPD_APP_MODAL case
b5dbe15d 164 class WXDLLIMPEXP_FWD_CORE wxWindowDisabler *m_winDisabler;
cbc66a27 165
69c69546 166 DECLARE_EVENT_TABLE()
22f3361e 167 DECLARE_NO_COPY_CLASS(wxProgressDialog)
8fa2e6a2 168};
ce4169a4 169
555f645a
WS
170#endif // wxUSE_PROGRESSDLG
171
172#endif // __PROGDLGH_G__