diff options
Diffstat (limited to 'src/utilities/cameragui/animwidget.cpp')
-rw-r--r-- | src/utilities/cameragui/animwidget.cpp | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/src/utilities/cameragui/animwidget.cpp b/src/utilities/cameragui/animwidget.cpp new file mode 100644 index 00000000..1d869cd9 --- /dev/null +++ b/src/utilities/cameragui/animwidget.cpp @@ -0,0 +1,131 @@ +/* ============================================================ + * + * This file is a part of digiKam project + * http://www.digikam.org + * + * Date : 2004-09-21 + * Description : an animated busy widget + * + * Copyright (C) 2004-2005 by Renchi Raju <renchi@pooh.tam.uiuc.edu> + * Copyright (C) 2006-2009 by Gilles Caulier <caulier dot gilles at gmail dot com> + * + * This program is free software; you can redistribute it + * and/or modify it under the terms of the GNU General + * Public License as published by the Free Software Foundation; + * either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * ============================================================ */ + +// TQt includes. + +#include <tqpainter.h> +#include <tqpixmap.h> +#include <tqpalette.h> +#include <tqcolor.h> +#include <tqtimer.h> + +// Local includes. + +#include "animwidget.h" +#include "animwidget.moc" + +namespace Digikam +{ + +class AnimWidgetPriv +{ +public: + + AnimWidgetPriv() + { + timer = 0; + pos = 0; + } + + int pos; + int size; + + TQTimer *timer; + + TQPixmap pix; +}; + +AnimWidget::AnimWidget(TQWidget* parent, int size) + : TQWidget(parent, 0, WResizeNoErase|WRepaintNoErase) +{ + d = new AnimWidgetPriv; + setBackgroundMode(TQt::NoBackground); + + d->size = size; + d->pix = TQPixmap(d->size, d->size); + setFixedSize(d->size, d->size); + + d->timer = new TQTimer(this); + + connect(d->timer, TQ_SIGNAL(timeout()), + this, TQ_SLOT(slotTimeout())); +} + +AnimWidget::~AnimWidget() +{ + delete d; +} + +void AnimWidget::start() +{ + d->pos = 0; + d->timer->start(100); +} + +void AnimWidget::stop() +{ + d->pos = 0; + d->timer->stop(); + repaint(); +} + +void AnimWidget::paintEvent(TQPaintEvent*) +{ + d->pix.fill(colorGroup().background()); + TQPainter p(&d->pix); + + p.translate(d->size/2, d->size/2); + + if (d->timer->isActive()) + { + p.setPen(TQPen(colorGroup().text())); + p.rotate( d->pos ); + } + else + { + p.setPen(TQPen(colorGroup().dark())); + } + + for ( int i=0 ; i<12 ; i++ ) + { + p.drawLine(d->size/2-4, 0, d->size/2-2, 0); + p.rotate(30); + } + + p.end(); + bitBlt(this, 0, 0, &d->pix); +} + +void AnimWidget::slotTimeout() +{ + d->pos = (d->pos + 10) % 360; + repaint(); +} + +bool AnimWidget::running() const +{ + return d->timer->isActive(); +} + +} // namespace Digikam |