]> git.saurik.com Git - wxWidgets.git/blame - include/wx/generic/progdlgg.h
more cleanup (removed some TODOs/FIXMEs); use native header drawing for the corner...
[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
53a2db12 29class WXDLLIMPEXP_CORE wxProgressDialog : public wxDialog
8fa2e6a2
KB
30{
31DECLARE_DYNAMIC_CLASS(wxProgressDialog)
32public:
695f550b 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
695f550b
VZ
40 */
41 wxProgressDialog(const wxString& title, const wxString& message,
42 int maximum = 100,
43 wxWindow *parent = NULL,
44 int style = wxPD_APP_MODAL | wxPD_AUTO_HIDE);
45 /* Destructor.
46 Re-enables event handling for other windows.
47 */
48 virtual ~wxProgressDialog();
49
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
d29a9a8a 53 @return true if ABORT button has not been pressed
695f550b
VZ
54 */
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
695f550b 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)
695f550b
VZ
67 */
68 void Resume();
8fa2e6a2 69
695f550b 70 virtual bool Show( bool show = true );
7d1dcec2 71
ef8698d6 72protected:
695f550b
VZ
73 // callback for optional abort button
74 void OnCancel(wxCommandEvent&);
ef8698d6 75
695f550b
VZ
76 // callback for optional skip button
77 void OnSkip(wxCommandEvent&);
ecda9475 78
695f550b
VZ
79 // callback to disable "hard" window closing
80 void OnClose(wxCloseEvent&);
8fa2e6a2 81
695f550b
VZ
82 // must be called to reenable the other windows temporarily disabled while
83 // the dialog was shown
84 void ReenableOtherWindows();
ef8698d6 85
8fa2e6a2 86private:
695f550b
VZ
87 // create the label with given text and another one to show the time nearby
88 // as the next windows in the sizer, returns the created control
89 wxStaticText *CreateLabel(const wxString& text, wxSizer *sizer);
0655ad29 90
fe8635a7 91 // updates the label message
695f550b
VZ
92 void UpdateMessage(const wxString &newmsg);
93
94 // common part of Update() and Pulse(), returns true if not cancelled
95 bool DoAfterUpdate(bool *skip);
96
97 // shortcuts for enabling buttons
98 void EnableClose();
99 void EnableSkip(bool enable = true);
100 void EnableAbort(bool enable = true);
101 void DisableSkip() { EnableSkip(false); }
102 void DisableAbort() { EnableAbort(false); }
103
104 // the status bar
105 wxGauge *m_gauge;
106 // the message displayed
107 wxStaticText *m_msg;
108 // displayed elapsed, estimated, remaining time
109 wxStaticText *m_elapsed,
110 *m_estimated,
111 *m_remaining;
112 // time when the dialog was created
113 unsigned long m_timeStart;
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;
118
119 // parent top level window (may be NULL)
120 wxWindow *m_parentTop;
abceee76 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__