diff -r f00a6757af32 -r 5f0182e07bfb homescreenapp/widgetplugins/hsclockwidgetplugin/src/hsclockwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/widgetplugins/hsclockwidgetplugin/src/hsclockwidget.cpp Tue Aug 31 15:06:34 2010 +0300 @@ -0,0 +1,228 @@ +/* +* 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 +#include + +#include "hsclockwidget.h" +#include "hsclockwidgettimer.h" +#include "hsanalogclockwidget.h" +#include "hsdigitalclockwidget.h" + +#ifdef Q_OS_SYMBIAN +#include "hsclocksettingsnotifier_symbian.h" +#include +#include +#endif //Q_OS_SYMBIAN + +namespace +{ + const char ANALOG[] = "analog"; + const char DIGITAL[] = "digital"; + const char TIME12[] = "TIME12"; + const char TIME24[] = "TIME24"; + + const int clockUpdateInterval = 1000; // msec +} + +#ifdef Q_OS_SYMBIAN +#define KClockAppUid TUid::Uid(0x10005903) +_LIT (KClockAppExe, "clock.exe"); +#endif //Q_OS_SYMBIAN + +/*! + \class HsClockWidget + \ingroup group_hsclockwidgetplugin + \brief Implementation for the homescreen clock widget. +*/ + +/*! + Constructs widget. +*/ +HsClockWidget::HsClockWidget(QGraphicsItem *parent, Qt::WindowFlags flags) + : HbWidget(parent, flags), + mWidget(0), + mLayout(0), + mClockType(ANALOG), + mTimeType(TIME12) +{ +#ifdef Q_OS_SYMBIAN + mClockSettingsNotifier = new HsClockSettingsNotifier(this); + mClockType = mClockSettingsNotifier->clockFormat(); + mTimeType = mClockSettingsNotifier->timeFormat(); +#endif +} + +/*! + Destructor. +*/ +HsClockWidget::~HsClockWidget() +{ +} + +/*! + Return shape +*/ +QPainterPath HsClockWidget::shape() const +{ + return mWidget->shape(); +} + +/*! + Initializes this widget. +*/ +void HsClockWidget::onInitialize() +{ + mLayout = new QGraphicsLinearLayout(Qt::Vertical); + mLayout->setContentsMargins(0, 0, 0, 0); + mWidget = loadClockWidget(); + mLayout->addItem(mWidget); + setLayout(mLayout); +#ifdef Q_OS_SYMBIAN + connect(mClockSettingsNotifier, SIGNAL(settingsChanged(QString, QString)), this, SLOT(onSettingsChanged(QString, QString))); +#endif + +} + +/*! + Shows this widget. +*/ +void HsClockWidget::onShow() +{ + HsClockWidgetTimer::instance(); + connect(HsClockWidgetTimer::instance(), + SIGNAL(tick()), + SLOT(updateTime()), + Qt::UniqueConnection); +} + + +/*! + Hides this widget. +*/ +void HsClockWidget::onHide() +{ + HsClockWidgetTimer::instance()->disconnect(this); +} + +/*! + Uninitializes this widget. +*/ +void HsClockWidget::onUninitialize() +{ + HsClockWidgetTimer::instance()->disconnect(this); +} + +/*! + Draws the clock with every second. +*/ +void HsClockWidget::updateTime() +{ + if (mClockType == DIGITAL) { + static_cast(mWidget)->tick(); + } else { + static_cast(mWidget)->tick(); + } +} + +/*! + \internal +*/ +void HsClockWidget::onSettingsChanged(const QString &clockFormat, const QString &timeFormat) +{ + if (mClockType != clockFormat) { + mClockType = clockFormat; + mLayout->removeItem(mWidget); + delete mWidget; + mWidget = 0; + mWidget = loadClockWidget(); + mLayout->addItem(mWidget); + } + + if (mTimeType != timeFormat) { + mTimeType = timeFormat; + if (mClockType == DIGITAL) { + if (mTimeType == TIME12) { + static_cast(mWidget)->setAmPm(true); + } else { + static_cast(mWidget)->setAmPm(false); + } + } + } +} + +/*! + Clock tapped. +*/ +void HsClockWidget::onClockTapped() +{ +#ifndef Q_OS_SYMBIAN + if (mClockType == ANALOG) { + mClockType = DIGITAL; + if (mTimeType == TIME12) { + mTimeType = TIME24; + } else { + mTimeType = TIME12; + } + } else { + mClockType = ANALOG; + } + mLayout->removeItem(mWidget); + delete mWidget; + mWidget = 0; + mWidget = loadClockWidget(); + mLayout->addItem(mWidget); + updateTime(); +#else //Q_OS_SYMBIAN + TApaTaskList taskList(CEikonEnv::Static()->WsSession()); + TApaTask task = taskList.FindApp(KClockAppUid); + if (task.Exists()){ + task.BringToForeground(); + } + else { + RProcess process; + TInt error = process.Create(KClockAppExe, KNullDesC, EOwnerThread); + + if (error == KErrNone){ + // start the process running. + process.Resume(); + process.Close(); + } + } +#endif //Q_OS_SYMBIAN +} + +/*! + Loads the digital or analog clock widget. +*/ +HbWidget *HsClockWidget::loadClockWidget() +{ + HbWidget *clockWidget = 0; + + if (mClockType == DIGITAL) { + bool useAmPm = true; + if (mTimeType == TIME24) { + useAmPm = false; + } + clockWidget = new HsDigitalClockWidget(useAmPm); + } else { + clockWidget = new HsAnalogClockWidget(); + } + + connect(clockWidget, SIGNAL(clockTapped()), this, SLOT(onClockTapped()), Qt::QueuedConnection); + return clockWidget; +}