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 | 
