source: MondoRescue/branches/2.05/mondo/mondo/common/X-specific.h@ 128

Last change on this file since 128 was 128, checked in by bcornec, 18 years ago

indent on all the C code

  • Property svn:keywords set to Id
File size: 8.6 KB
Line 
1/* X-specific.h */
2
3#include <config.h>
4
5#ifdef __cplusplus
6extern "C" {
7#endif
8
9 int ask_me_yes_or_no(char *prompt);
10 int ask_me_OK_or_cancel(char *prompt);
11 void close_evalcall_form(void);
12 void close_progress_form();
13 void fatal_error(char *error_string);
14 void fatal_error_sub(char *error_string);
15 void finish(int signal);
16 void mvaddstr_and_log_it(int y, int x, char *output);
17 void log_file_end_to_screen(char *filename, char *grep_for_me);
18 void log_to_screen(const char *op, ...);
19 void open_evalcall_form(char *title);
20 void open_progress_form(char *title, char *b1, char *b2, char *b3,
21 long max_val);
22 void popup_and_OK(char *prompt);
23 void popup_and_OK_sub(char *prompt);
24 int popup_and_get_string(char *title, char *b, char *output,
25 int maxsize);
26 int popup_and_get_string_sub(char *title, char *b, char *output,
27 int maxsize);
28 int popup_with_buttons(char *p, char *button1, char *button2);
29 int popup_with_buttons_sub(char *p, char *button1, char *button2);
30 void refresh_log_screen();
31 void setup_newt_stuff();
32 void update_evalcall_form_ratio(int num, int denom);
33 void update_evalcall_form(int curr);
34 void update_progress_form(char *blurb3);
35 void update_progress_form_full(char *blurb1, char *blurb2,
36 char *blurb3);
37
38
39
40
41
42
43 t_bkptype which_backup_media_type(bool);
44 int which_compression_level();
45
46 void popup_chaneglist_from_file(char *source_file);
47
48#if __cplusplus && WITH_X
49
50 extern int g_result_of_last_event;
51
52} /* extern "C" */
53#include <qvaluelist.h>
54#include <qwidget.h>
55#include <qprogressbar.h>
56#include <qlabel.h>
57#include <qstring.h>
58#include <qmultilineedit.h>
59/**
60 * A class for XMondo to hold events queued by the backup thread until the event thread is able to handle them.
61 */ class XMEventHolder
62{
63 public:
64 struct Event {
65 enum EventType { None, Show, Hide, New, SetProgress, SetTotal,
66 SetText, InsLine, PopupWithButtons, InfoMsg, ErrorMsg,
67 GetInfo } type;
68 QWidget *data;
69// union {
70 int iParam;
71 QString qsParam, title, text, b1, b2;
72 char *csParam;
73 int len;
74// };
75
76 Event():type(None), data(0) {
77 } Event(EventType thetype, QWidget * thedata) {
78 this->type = thetype;
79 this->data = thedata;
80 } Event(EventType thetype, QWidget * thedata, int ip) {
81 this->type = thetype;
82 this->data = thedata;
83 this->iParam = ip;
84 }
85 Event(EventType thetype, QWidget * thedata, QString qsp) {
86 this->type = thetype;
87 this->data = thedata;
88 this->qsParam = qsp;
89 }
90 Event(EventType thetype, QWidget * thedata, char *csp) {
91 this->type = thetype;
92 this->data = thedata;
93 this->csParam = csp;
94 }
95 Event(EventType thetype, QWidget * thedata, char *csp, int len) {
96 this->type = thetype;
97 this->data = thedata;
98 this->csParam = csp;
99 this->len = len;
100 }
101 };
102
103 XMEventHolder() {
104 }
105
106 /* Backup thread functions */
107
108 void event(Event::EventType type, QWidget * data) {
109 _events.push_back(Event(type, data));
110 }
111
112 /**
113 * Queue a "show" event for @p data.
114 * This is equivalent to a delayed call of @p data->show().
115 * @param data The widget to show when the event is processed.
116 */
117 void show(QWidget * data) {
118 _events.push_back(Event(Event::Show, data));
119 }
120
121 /**
122 * Queue a "hide" event for @p data.
123 * This is equivalent to a delayed call of @p data->hide().
124 * @param data The widget to hide when the event is processed.
125 */
126 void hide(QWidget * data) {
127 _events.push_back(Event(Event::Hide, data));
128 }
129
130 /**
131 * Queue a "setProgress" event for @p data.
132 * This is equivalent to a delayed call of <tt>data-\>setProgress(progress)</tt>.
133 * @param data The progress bar widget to set the progress of when the event is processed.
134 * @param progress The progress amount to set it to.
135 */
136 void setProgress(QProgressBar * data, int progress) {
137 _events.push_back(Event(Event::SetProgress, data, progress));
138 }
139
140 /**
141 * Queue a "setTotalSteps" event for @p data.
142 * This is equivalent to a delayed call of <tt>data-\>setTotalSteps(totals)</tt>.
143 * @param data The progress bar widget to set the total steps of when the event is processed.
144 * @param totals The total number of steps to set.
145 */
146 void setTotalSteps(QProgressBar * data, int totals) {
147 _events.push_back(Event(Event::SetTotal, data, totals));
148 }
149
150 /**
151 * Queue a "setText" event for @p data.
152 * This is equivalent to a delayed call of <tt>data-\>setText(text)</tt>.
153 * @param data The label widget to set the text of.
154 * @param text The text to set it to.
155 */
156 void setText(QLabel * data, QString text) {
157 _events.push_back(Event(Event::SetText, data, text));
158 }
159
160 /**
161 * Queue an "insertLine" event for @p data.
162 * This is equivalent to a delayed call of <tt>data->insertLine(line)</tt>.
163 * @param data The edit box to add the line to.
164 * @param line The line to add.
165 */
166 void insertLine(QMultiLineEdit * data, QString line) {
167 _events.push_back(Event(Event::InsLine, data, line));
168 }
169
170 /**
171 * Queue an alert box with two buttons to be displayed.
172 * The button pushed (the return value of popup_with_buttons()) will be stored
173 * in @p g_result_of_last_event.
174 * @param text The text of the popup dialog box.
175 * @param b1 The first button's text.
176 * @param b2 The second button's text.
177 */
178 void popupWithButtons(QString text, QString b1, QString b2) {
179 Event e;
180 e.type = Event::PopupWithButtons;
181 e.text = text;
182 e.b1 = b1;
183 e.b2 = b2;
184 _events.push_back(e);
185 }
186
187 /**
188 * Queue an info box with one OK button to be displayed.
189 * @param text The text of the dialog box.
190 */
191 void infoMsg(QString text) {
192 Event e;
193 e.type = Event::InfoMsg;
194 e.text = text;
195 _events.push_back(e);
196 }
197
198 /**
199 * Queue a "fatal error" message.
200 * @param text The fatal error.
201 */
202 void errorMsg(QString text) {
203 Event e;
204 e.type = Event::ErrorMsg;
205 e.text = text;
206 _events.push_back(e);
207 }
208
209 /**
210 * Queue a request for some information from the user.
211 * If you want to wait until the text is stored, you can set @p g_result_of_last_event
212 * to -1 and busy-wait while it's equal to that. If the user pushes OK 1 will be stored,
213 * otherwise 0 will be stored.
214 * @param title The title of the dialog box.
215 * @param text The text of the dialog box.
216 * @param out Where to put the user's reply.
217 * @param len The size of the buffer allocated for @p out.
218 */
219 void getInfo(QString title, QString text, char *out, int len) {
220 Event e;
221 e.type = Event::GetInfo;
222 e.title = title;
223 e.text = text;
224 e.csParam = out;
225 e.len = len;
226 _events.push_back(e);
227 }
228
229 /* These are called in the GUI thread */
230
231 /**
232 * Clear all events stored in the queue without executing them.
233 */
234 void clear() {
235 _events.erase(_events.begin(), _events.end());
236 }
237
238 /**
239 * Process all events stored in the queue and then clear them.
240 */
241 void send() {
242 QProgressBar *pb;
243 QLabel *l;
244 QMultiLineEdit *mle;
245 for (QValueList < Event >::iterator it = _events.begin();
246 it != _events.end(); ++it) {
247 switch ((*it).type) {
248 case Event::Show:
249 ((*it).data)->show();
250 break;
251 case Event::Hide:
252 ((*it).data)->hide();
253 break;
254 case Event::SetProgress:
255 if ((pb = dynamic_cast < QProgressBar * >((*it).data))) {
256 pb->setProgress((*it).iParam);
257 }
258 break;
259 case Event::SetTotal:
260 if ((pb = dynamic_cast < QProgressBar * >((*it).data))) {
261 pb->setTotalSteps((*it).iParam);
262 }
263 break;
264 case Event::SetText:
265 if ((l = dynamic_cast < QLabel * >((*it).data))) {
266 l->setText((*it).qsParam);
267 }
268 break;
269 case Event::InsLine:
270 if ((mle = dynamic_cast < QMultiLineEdit * >((*it).data))) {
271 mle->insertLine((*it).qsParam);
272 }
273 break;
274 case Event::PopupWithButtons:
275 g_result_of_last_event =
276 popup_with_buttons_sub(const_cast <
277 char *>((*it).text.ascii()),
278 const_cast <
279 char *>((*it).b1.ascii()),
280 const_cast <
281 char *>((*it).b2.ascii()));
282 break;
283 case Event::InfoMsg:
284 popup_and_OK_sub(const_cast < char *>((*it).text.ascii()));
285 g_result_of_last_event = 0;
286 break;
287 case Event::ErrorMsg:
288 fatal_error_sub(const_cast < char *>((*it).text.ascii()));
289 break;
290 case Event::GetInfo:
291 g_result_of_last_event =
292 popup_and_get_string_sub(const_cast <
293 char *>((*it).title.ascii()),
294 const_cast <
295 char *>((*it).text.ascii()),
296 (*it).csParam, (*it).len);
297 break;
298 default:
299 qDebug("unknown event\n");
300 }
301 }
302 this->clear();
303 }
304
305 /* Undocumented */
306 QValueList < Event > events() {
307 return _events;
308 }
309
310 protected:
311
312
313 QValueList < Event > _events;
314};
315
316#endif /* __cplusplus */
Note: See TracBrowser for help on using the repository browser.