diff -r c743ef5928ba -r f9ce957a272c homescreenapp/widgetplugins/hsclockwidgetplugin/src/hsanalogclockwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/widgetplugins/hsclockwidgetplugin/src/hsanalogclockwidget.cpp Fri Mar 19 09:27:44 2010 +0200 @@ -0,0 +1,145 @@ +/* +* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Clock widget +* +*/ + +#include "hsanalogclockwidget.h" +#include +#include +#include + +namespace +{ + const char PLUGIN_PATH[] = "/hsresources/plugins/styleplugins/hsanalogclockstyleplugin.dll"; +} + +/*! + \class HsAnalogClockWidget + \ingroup group_hsclockwidgetplugin + \brief Homescreen themable analog clock widget. + +*/ + +/*! + \fn HsAnalogClockWidget::HsAnalogClockWidget(QGraphicsItem *parent, Qt::WindowFlags flags) + + Constructs widget. +*/ +HsAnalogClockWidget::HsAnalogClockWidget(const QString &stylePluginName, QGraphicsItem *parent) + : HbWidget(parent), + mClockBackground(0), + mClockHourHand(0), + mClockMinuteHand(0) +{ + if (stylePluginName.isEmpty()) { + mStylePluginName = QDir::currentPath() + PLUGIN_PATH; + } else { + mStylePluginName = stylePluginName; + } + setPluginBaseId(style()->registerPlugin(mStylePluginName)); + + createPrimitives(); + updatePrimitives(); +} + +/*! + \fn HsAnalogClockWidget::~HsAnalogClockWidget() + + Destructor. +*/ +HsAnalogClockWidget::~HsAnalogClockWidget() +{ + delete mClockBackground; + delete mClockHourHand; + delete mClockMinuteHand; + + style()->unregisterPlugin(mStylePluginName); +} + +/*! + @copydoc HbWidget::resizeEvent() + */ +void HsAnalogClockWidget::resizeEvent(QGraphicsSceneResizeEvent *event) +{ + QGraphicsWidget::resizeEvent(event); + updatePrimitives(); +} + +/*! + Creates all widget primitives. + */ +void HsAnalogClockWidget::createPrimitives() +{ + if (pluginBaseId()==-1) { + return; + } + if (!mClockBackground) { + mClockBackground = style()->createPrimitive((HbStyle::Primitive)(pluginBaseId()), this); + } + if (!mClockHourHand) { + mClockHourHand = style()->createPrimitive((HbStyle::Primitive)(pluginBaseId()+hourHandItemIndex), this); + } + if (!mClockMinuteHand) { + mClockMinuteHand = style()->createPrimitive((HbStyle::Primitive)(pluginBaseId()+minuteHandItemIndex), this); + } +} + +/*! + @copydoc HbWidget::updatePrimitives() + */ +void HsAnalogClockWidget::updatePrimitives() +{ + if (pluginBaseId()==-1) { + return; + } + + // Calculate angles for clock hands. + QTime time = QTime::currentTime(); + qreal s = 6 * time.second(); + qreal m = 6 * (time.minute() + s/360); + qreal h = 30 * ((time.hour() % 12) + m/360)-90; + HsAnalogClockStyleOption option; + initStyleOption(&option); + option.mM = m; + option.mH = h; + + if (mClockBackground) { + style()->updatePrimitive(mClockBackground, (HbStyle::Primitive)(pluginBaseId()), &option); + } + if (mClockHourHand) { + style()->updatePrimitive(mClockHourHand, (HbStyle::Primitive)(pluginBaseId()+hourHandItemIndex), &option); + } + if (mClockMinuteHand) { + style()->updatePrimitive(mClockMinuteHand, (HbStyle::Primitive)(pluginBaseId()+minuteHandItemIndex), &option); + } +} + +/*! + Updates clock visualization according to current time + */ +void HsAnalogClockWidget::tick() +{ + updatePrimitives(); + update(); +} + +/*! + Update primitives also here because a problem in Hb - to be removed later on + */ +void HsAnalogClockWidget::polish( HbStyleParameters& params ) +{ + HbWidget::polish(params); + updatePrimitives(); +}