~ubuntu-branches/ubuntu/jaunty/psi/jaunty

« back to all changes in this revision

Viewing changes to src/widgets/busywidget.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jan Niehusmann
  • Date: 2008-04-14 18:57:30 UTC
  • mfrom: (2.1.9 hardy)
  • Revision ID: james.westby@ubuntu.com-20080414185730-528re3zp0m2hdlhi
Tags: 0.11-8
* added CONFIG -= link_prl to .pro files and removed dependencies
  which are made unnecessary by this change
* Fix segfault when closing last chat tab with qt4.4
  (This is from upstream svn, rev. 1101) (Closes: Bug#476122)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * busywidget.cpp - cool animating widget
 
3
 * Copyright (C) 2001, 2002  Justin Karneges
 
4
 *                           Hideaki Omuro
 
5
 *
 
6
 * This program is free software; you can redistribute it and/or
 
7
 * modify it under the terms of the GNU General Public License
 
8
 * as published by the Free Software Foundation; either version 2
 
9
 * of the License, or (at your option) any later version.
 
10
 *
 
11
 * This program is distributed in the hope that it will be useful,
 
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
 * GNU General Public License for more details.
 
15
 *
 
16
 * You should have received a copy of the GNU General Public License
 
17
 * along with this library; if not, write to the Free Software
 
18
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
19
 *
 
20
 */
 
21
 
 
22
#include "busywidget.h"
 
23
 
 
24
#include <QTimer>
 
25
#include <QPainter>
 
26
#include <QPixmap>
 
27
#include <math.h>
 
28
 
 
29
/////////////////////////////////////////////////////////////////////////////
 
30
// common defines
 
31
//
 
32
#define FPS          20 // frequency of update
 
33
 
 
34
#define SPINRATE     24 // 1024ths of a revolution per frame
 
35
#define SPINOFFSET    4 // frames each panel is offset by
 
36
 
 
37
#define COLORSTOPPED  0xFFFFFF // color when stopped
 
38
#define COLORSPINNING 0xFFFFFF // color when spinning
 
39
#define COLORSHADOW   0x000000 // color of shadow
 
40
 
 
41
/////////////////////////////////////////////////////////////////////////////
 
42
// derived defines
 
43
//
 
44
#define MSECSPERFRAME   (1000 / FPS)
 
45
 
 
46
/////////////////////////////////////////////////////////////////////////////
 
47
// declared later
 
48
//
 
49
extern char psigraphic[];
 
50
 
 
51
// panel class
 
52
class CPanel
 
53
{
 
54
public:
 
55
        int angle;
 
56
        int height;
 
57
        bool spinning;
 
58
        int alpha;
 
59
 
 
60
        CPanel(int height = 1);
 
61
        int GetModHeight();
 
62
        int GetShade();
 
63
        void Spin(int n);
 
64
 
 
65
        void SetAngle(int _angle)       { angle = _angle % 1024; }
 
66
        void SetHeight(int _height)     { height = _height; }
 
67
        int GetAngle()                          { return angle % 1024; }
 
68
        int GetHeight()                         { return height; }
 
69
        int GetModOffset()                      { return (height - GetModHeight()) / 2; }
 
70
};
 
71
 
 
72
// color class
 
73
class CColor
 
74
{
 
75
public:
 
76
        int m_clr;
 
77
 
 
78
        CColor(int _r, int _g, int _b)
 
79
        {
 
80
                SetColor(_r, _g, _b);
 
81
        }
 
82
        CColor(int _clr)
 
83
        {
 
84
                SetColor(_clr);
 
85
        }
 
86
        inline void SetColor(int _r, int _g, int _b)
 
87
        {
 
88
                SetColor((_r << 16) + (_g << 8) + _b);
 
89
        }
 
90
        inline void SetColor(int _clr)
 
91
        {
 
92
                m_clr = _clr;
 
93
        }
 
94
        inline short GetR()
 
95
        {
 
96
                return m_clr >> 16;
 
97
        }
 
98
        inline short GetG()
 
99
        {
 
100
                return (m_clr >> 8) & 255;
 
101
        }
 
102
        inline short GetB()
 
103
        {
 
104
                return m_clr & 255;
 
105
        }
 
106
        CColor Alpha(CColor clr, int alpha = 256);
 
107
};
 
108
 
 
109
class BusyWidget::Private : public QObject
 
110
{
 
111
        Q_OBJECT
 
112
private:
 
113
        BusyWidget *busy;
 
114
 
 
115
public:
 
116
        Private(BusyWidget *b)
 
117
        {
 
118
                t = 0;
 
119
                busy = b;
 
120
                stopInProgress = false;
 
121
        }
 
122
 
 
123
        bool stopInProgress;
 
124
        bool isActive;
 
125
        int frame;
 
126
        int at;
 
127
        QPixmap pix;
 
128
        QTimer *t;
 
129
 
 
130
        // data
 
131
        CPanel panel[5];
 
132
        int  pcountdown;
 
133
        int  ocountdown;
 
134
 
 
135
        void render()
 
136
        {
 
137
                busy->update();
 
138
        }
 
139
 
 
140
        void renderPixmap()
 
141
        {
 
142
                pix = QPixmap(busy->width(), busy->height());
 
143
                pix.fill(QColor("#406080"));
 
144
 
 
145
                QPainter p(&pix);
 
146
 
 
147
                int i, j, k, l;
 
148
                int row;
 
149
 
 
150
                for(i = 0; i < 5; i++)
 
151
                {
 
152
                        int o = panel[i].GetModOffset();
 
153
 
 
154
                        CColor c1(COLORSPINNING), c2(COLORSTOPPED), c3(COLORSHADOW);
 
155
                        CColor b = c1.Alpha(c2, panel[i].alpha * 8);
 
156
 
 
157
                        CColor a = b.Alpha(c3, panel[i].GetShade());
 
158
 
 
159
                        l = panel[i].GetModHeight();
 
160
 
 
161
                        double radangle = (double) 3.1415926f * (double) panel[i].GetAngle() / (double) 512;
 
162
                        int step = (int)((double)1024 / cos(radangle));
 
163
                        step = step < 0 ? -step : step;
 
164
 
 
165
                        int n = (int)((double)1024 * cos(radangle) * 17 / 2);
 
166
                        n = n < 0 ? -n : n;
 
167
 
 
168
                        row = 8192 - step * n / 1024;
 
169
 
 
170
                        QColor clr(a.GetR(), a.GetG(), a.GetB());
 
171
 
 
172
                        for(j = 0; j < l; j++)
 
173
                        {
 
174
                                int m = row / 1024 + 1;
 
175
                                for(k = 0; k < 16; k++)
 
176
                                {
 
177
                                        p.setPen(psigraphic[i * 304 + m * 16 + k] ? Qt::black : clr);
 
178
                                        p.drawPoint(i * 16 + k + 1, o + j + 1);
 
179
                                }
 
180
                                row += step;
 
181
                        }
 
182
                }
 
183
 
 
184
                p.setPen(Qt::black);
 
185
                p.drawRect(0, 0, busy->width(), busy->height());
 
186
        }
 
187
 
 
188
public slots:
 
189
        void stop()
 
190
        {
 
191
                if ( stopInProgress ) {
 
192
                        stopInProgress = false;
 
193
 
 
194
                        isActive = FALSE;
 
195
                        if( !ocountdown )
 
196
                                ocountdown = SPINOFFSET * 4 + 1;
 
197
                }
 
198
        }
 
199
};
 
200
 
 
201
/////////////////////////////////////////////////////////////////////////////
 
202
// code
 
203
//
 
204
BusyWidget::BusyWidget(QWidget *parent)
 
205
:QWidget(parent)
 
206
{
 
207
        d = new Private(this);
 
208
 
 
209
        d->isActive = FALSE;
 
210
        d->frame = 0;
 
211
        d->at = 0;
 
212
 
 
213
        d->pcountdown = 0;
 
214
        d->ocountdown = 0;
 
215
 
 
216
        setFixedSize(sizeHint());
 
217
        setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
 
218
 
 
219
        int i;
 
220
        for(i = 0; i < 5; i++)
 
221
                d->panel[i].SetHeight(17);
 
222
 
 
223
        d->renderPixmap();
 
224
}
 
225
 
 
226
BusyWidget::~BusyWidget()
 
227
{
 
228
        delete d;
 
229
}
 
230
 
 
231
QSize BusyWidget::minimumSizeHint() const
 
232
{
 
233
        return QSize( 82, 19 );
 
234
}
 
235
 
 
236
QSize BusyWidget::sizeHint() const
 
237
{
 
238
        return minimumSizeHint();
 
239
}
 
240
 
 
241
bool BusyWidget::isActive() const
 
242
{
 
243
        return (d->isActive && !d->stopInProgress);
 
244
}
 
245
 
 
246
void BusyWidget::setActive(bool a)
 
247
{
 
248
        if ( a )
 
249
                start();
 
250
        else
 
251
                stop();
 
252
}
 
253
 
 
254
void BusyWidget::start()
 
255
{
 
256
        d->stopInProgress = false;
 
257
 
 
258
        if(d->isActive)
 
259
                return;
 
260
 
 
261
        d->isActive = TRUE;
 
262
 
 
263
        if(!d->pcountdown)
 
264
                d->pcountdown = SPINOFFSET * 4 + 1;
 
265
 
 
266
        if(!d->t)
 
267
        {
 
268
                d->t = new QTimer(this);
 
269
                connect(d->t, SIGNAL(timeout()), SLOT(animate()));
 
270
                animate();
 
271
                d->t->start(MSECSPERFRAME);
 
272
        }
 
273
}
 
274
 
 
275
void BusyWidget::stop()
 
276
{
 
277
        if(!d->isActive)
 
278
                return;
 
279
 
 
280
        if ( d->stopInProgress )
 
281
                return;
 
282
 
 
283
        d->stopInProgress = true;
 
284
        QTimer::singleShot(0, d, SLOT(stop()));
 
285
}
 
286
 
 
287
void BusyWidget::animate()
 
288
{
 
289
        int i;
 
290
        for(i = 0; i < 5; i++)
 
291
                d->panel[i].Spin(SPINRATE);
 
292
 
 
293
        if(d->pcountdown)
 
294
                if(!(--d->pcountdown % SPINOFFSET))
 
295
                        d->panel[d->pcountdown / SPINOFFSET].spinning = true;
 
296
 
 
297
        if(d->ocountdown)
 
298
                if(!(--d->ocountdown % SPINOFFSET))
 
299
                        d->panel[d->ocountdown / SPINOFFSET].spinning = false;
 
300
 
 
301
        if(!d->isActive)
 
302
        {
 
303
                bool isValid = false;
 
304
                for(i = 0; i < 5; i++)
 
305
                        if(d->panel[i].spinning || d->panel[i].GetAngle() != 0 || d->panel[i].alpha != 0)
 
306
                                isValid = true;
 
307
 
 
308
                if(!isValid)
 
309
                {
 
310
                        delete d->t;
 
311
                        d->t = 0;
 
312
                }
 
313
        }
 
314
 
 
315
        d->renderPixmap();
 
316
        d->render();
 
317
}
 
318
 
 
319
void BusyWidget::paintEvent(QPaintEvent *)
 
320
{
 
321
        QPainter p(this);
 
322
        p.drawPixmap(0,0, d->pix);
 
323
}
 
324
 
 
325
void BusyWidget::resizeEvent(QResizeEvent *)
 
326
{
 
327
        d->renderPixmap();
 
328
}
 
329
 
 
330
/////////////////////////////////////////////////////////////////////////
 
331
// stuff beyond here for animating rotating psi panels
 
332
//
 
333
 
 
334
// color stuff
 
335
CColor CColor::Alpha(CColor clr, int alpha)
 
336
{
 
337
        int ialpha = 256 - alpha;
 
338
 
 
339
        int r, g, b;
 
340
        r = (alpha * GetR() + ialpha * clr.GetR()) / 256;
 
341
        g = (alpha * GetG() + ialpha * clr.GetG()) / 256;
 
342
        b = (alpha * GetB() + ialpha * clr.GetB()) / 256;
 
343
 
 
344
        return CColor(r, g, b);
 
345
}
 
346
 
 
347
// panel stuff
 
348
CPanel::CPanel(int _height)
 
349
{
 
350
        height = _height;
 
351
        spinning = false;
 
352
        angle = 0;
 
353
        alpha = 0;
 
354
}
 
355
 
 
356
int CPanel::GetModHeight()
 
357
{
 
358
        int l = GetAngle();
 
359
        if(l > 512)
 
360
                l = 1024 - l;
 
361
        double radangle = (double) 3.1415926f * (double) l / (double) 512;
 
362
        int tmp = (int)(cos(radangle)* (double) height);
 
363
        return tmp < 0 ? -tmp : tmp;
 
364
}
 
365
 
 
366
int CPanel::GetShade()
 
367
{
 
368
        int l = GetAngle() + 128;
 
369
        if(GetAngle() >= 256 && GetAngle() < 768)
 
370
                l += 512;
 
371
        if(l >= 1024)
 
372
                l %= 1024;
 
373
        if(l == 0)
 
374
                l += 1024;
 
375
        double radangle = (double) 3.1415926f * (double) l / (double) 512;
 
376
        return 128 + (int)(cos(radangle)* (double) 128);
 
377
}
 
378
 
 
379
void CPanel::Spin(int n)
 
380
{
 
381
        int i = angle + n;
 
382
        if(!spinning)
 
383
        {
 
384
                if(i >= 1024)
 
385
                        SetAngle(0);
 
386
                if(angle < 512 && i >= 512)
 
387
                        SetAngle(0);
 
388
                if(angle)
 
389
                        SetAngle(i);
 
390
        }
 
391
        else
 
392
                SetAngle(i);
 
393
        if(spinning)
 
394
        {
 
395
                if(alpha < 32)
 
396
                        alpha+=2;
 
397
        }
 
398
        else
 
399
        {
 
400
                if(alpha)
 
401
                        alpha-=2;
 
402
        }
 
403
}
 
404
 
 
405
char psigraphic[304*5] =
 
406
{
 
407
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
408
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
409
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
410
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
411
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
412
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
413
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
414
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
415
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
416
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
417
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
418
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
419
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
420
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
421
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
422
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
423
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
424
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
425
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
426
 
 
427
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
428
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
429
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
430
         0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
 
431
         0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
 
432
         0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
 
433
         0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
 
434
         0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
 
435
         0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
 
436
         0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
437
         0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
438
         0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
439
         0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
440
         0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
441
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
442
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
443
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
444
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
445
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
446
 
 
447
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
448
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
449
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
450
         0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
451
         0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
452
         0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
453
         0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
454
         0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
455
         0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
 
456
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
 
457
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
 
458
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
 
459
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,
 
460
         0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
 
461
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
462
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
463
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
464
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
465
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
466
 
 
467
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
468
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
469
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
470
         0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
 
471
         0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
 
472
         0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
 
473
         0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
 
474
         0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
 
475
         0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
 
476
         0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
 
477
         0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
 
478
         0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
 
479
         0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
 
480
         0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
 
481
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
482
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
483
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
484
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
485
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
486
 
 
487
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
488
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
489
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
490
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
491
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
492
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
493
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
494
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
495
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
496
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
497
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
498
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
499
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
500
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
501
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
502
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
503
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
504
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
505
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 
506
};
 
507
 
 
508
#include "busywidget.moc"