diff options
Diffstat (limited to 'src/libs/widgets/common/splashscreen.cpp')
-rw-r--r-- | src/libs/widgets/common/splashscreen.cpp | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/src/libs/widgets/common/splashscreen.cpp b/src/libs/widgets/common/splashscreen.cpp new file mode 100644 index 00000000..7a8cbba1 --- /dev/null +++ b/src/libs/widgets/common/splashscreen.cpp @@ -0,0 +1,160 @@ +/* ============================================================ + * + * This file is a part of digiKam project + * http://www.digikam.org + * + * Date : 2003-02-10 + * Description : a widget to display spash with progress bar + * + * Copyright (C) 2003-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 <tqtimer.h> +#include <tqfont.h> +#include <tqstring.h> +#include <tqcolor.h> + +// KDE includes. + +#include <tdelocale.h> +#include <kstandarddirs.h> +#include <tdeglobalsettings.h> + +// Local includes. + +#include "splashscreen.h" +#include "splashscreen.moc" + +namespace Digikam +{ + +class SplashScreenPriv +{ +public: + + SplashScreenPriv() + { + state = 0; + progressBarSize = 3; + state = 0; + color = TQt::black; + alignment = TQt::AlignLeft; + } + + int state; + int progressBarSize; + int alignment; + + TQString string; + + TQColor color; +}; + +SplashScreen::SplashScreen(const TQString& splash, WFlags f) + : KSplashScreen(TQPixmap(locate("appdata", splash)), f) +{ + d = new SplashScreenPriv; + + TQTimer *timer = new TQTimer(this); + + connect(timer, TQ_SIGNAL(timeout()), + this, TQ_SLOT(animate())); + + timer->start(150); +} + +SplashScreen::~SplashScreen() +{ + delete d; +} + +void SplashScreen::animate() +{ + d->state = ((d->state + 1) % (2*d->progressBarSize-1)); + repaint(); +} + +void SplashScreen::setColor(const TQColor& color) +{ + d->color = color; +} +void SplashScreen::setAlignment(int alignment) +{ + d->alignment = alignment; +} + +void SplashScreen::message(const TQString& message) +{ + d->string = message; + TQSplashScreen::message(d->string, d->alignment, d->color); + animate(); +} + +void SplashScreen::drawContents(TQPainter* painter) +{ + int position; + TQColor basecolor(155, 192, 231); + + // Draw background circles + painter->setPen(NoPen); + painter->setBrush(TQColor(225, 234, 231)); + painter->drawEllipse(21, 7, 9, 9); + painter->drawEllipse(32, 7, 9, 9); + painter->drawEllipse(43, 7, 9, 9); + + // Draw animated circles, increments are chosen + // to get close to background's color + // (didn't work well with TQColor::light function) + for (int i=0; i < d->progressBarSize; i++) + { + position = (d->state+i)%(2*d->progressBarSize-1); + if (position < 3) + { + painter->setBrush(TQColor(basecolor.red() -18*i, + basecolor.green()-28*i, + basecolor.blue() -10*i)); + + painter->drawEllipse(21+position*11, 7, 9, 9); + } + } + + painter->setPen(d->color); + + TQFont fnt(TDEGlobalSettings::generalFont()); + int fntSize = fnt.pointSize(); + if (fntSize > 0) + { + fnt.setPointSize(fntSize-2); + } + else + { + fntSize = fnt.pixelSize(); + fnt.setPixelSize(fntSize-2); + } + painter->setFont(fnt); + + TQRect r = rect(); + r.setRect( r.x() + 59, r.y() + 5, r.width() - 10, r.height() - 10 ); + + // Draw message at given position, limited to 43 chars + // If message is too long, string is truncated + if (d->string.length() > 40) {d->string.truncate(39); d->string += "...";} + painter->drawText(r, d->alignment, d->string); +} + +} // namespace Digikam |