source: trunk/mondo/mondo/common/X-specific.h @ 122

Last change on this file since 122 was 122, checked in by bcornec, 14 years ago

memory management going on (libmondo-verify.c, libmondo-devices.c, libmondo-string.c, libmondo-stream.c)

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