diff -r 30f14686fb04 -r 2b1b11a301d2 screensaver/screensaverplugins/snsrbigclockscreensaverplugin/src/snsrbigclockscreensaver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/screensaver/screensaverplugins/snsrbigclockscreensaverplugin/src/snsrbigclockscreensaver.cpp Tue Jul 06 14:06:53 2010 +0300 @@ -0,0 +1,260 @@ +/* +* Copyright (c) 2009 - 2010 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: Big clock Screensaver. +* +*/ + +#include "snsrbigclockscreensaver.h" + +#ifdef Q_OS_SYMBIAN +#include +#endif // Q_OS_SYMBIAN + +#include +#include +#include + +#include +#include + +#include "snsranalogclockcontainer.h" +#include "snsrdigitalclockcontainer.h" +#include "snsroledanalogclockcontainer.h" +#include "snsroleddigitalclockcontainer.h" +#include "snsrindicatormodel.h" + +/*! + \class SnsrBigClockScreensaver + \ingroup group_snsrbigclockscreensaverplugin + \brief Screensaver with big digital clock. + */ + +const int gTimeInterval(100); + +/*! + Constructs a new SnsrBigClockScreensaver. + */ +SnsrBigClockScreensaver::SnsrBigClockScreensaver() : + mMainWindow(0), + mCurrentContainer(0), + mIndicatorModel(0) +{ + mMainWindow = HbInstance::instance()->allMainWindows().at(0); + // for nice looking clock hand transformations + mMainWindow->setRenderHint(QPainter::SmoothPixmapTransform); + + // This model holds indicator status information and must exist as + // long as screensaver does. + mIndicatorModel = new SnsrIndicatorModel(this); +} + +/*! + Destructs the class. + */ +SnsrBigClockScreensaver::~SnsrBigClockScreensaver() +{ + // mCurrentContainer, mIndicatorModel - deleted by the parent +} + +/*! + @copydoc Screensaver::onInitialize() +*/ +bool SnsrBigClockScreensaver::onInitialize() +{ + qDebug() << "SnsrBigClockScreensaver::onInitialize()"; + return true; +} + +/*! + @copydoc Screensaver::onForeground() + */ +bool SnsrBigClockScreensaver::onForeground() +{ + SCREENSAVER_TEST_FUNC_ENTRY("SnsrBigClockScreensaver::onForeground") + qDebug() << "SnsrBigClockScreensaver::onForeground()"; + + removeCurrentContainer(); + + SnsrBigClockContainer* newContainer( 0 ); + if (clockFormat() == ClockFormatAnalog) { + newContainer = new SnsrAnalogClockContainer(); + } + else { + newContainer = new SnsrDigitalClockContainer(); + } + + setCurrentContainer( newContainer ); + + SCREENSAVER_TEST_FUNC_EXIT("SnsrBigClockScreensaver::onForeground") + return true; +} + +/*! + @copydoc Screensaver::onPartialForeground() + */ +bool SnsrBigClockScreensaver::onPartialForeground() +{ + SCREENSAVER_TEST_FUNC_ENTRY("SnsrBigClockScreensaver::onPartialForeground") + qDebug() << "SnsrBigClockScreensaver::onPartialForeground()"; + + removeCurrentContainer(); + + SnsrBigClockContainer* newContainer( 0 ); + if (clockFormat() == ClockFormatAnalog) { + newContainer = new SnsrOledAnalogClockContainer(); + } + else { + newContainer = new SnsrOledDigitalClockContainer(); + } + + setCurrentContainer( newContainer ); + + SCREENSAVER_TEST_FUNC_EXIT("SnsrBigClockScreensaver::onPartialForeground") + return true; +} + +/*! + @copydoc Screensaver::onBackground() + */ +bool SnsrBigClockScreensaver::onBackground() +{ + SCREENSAVER_TEST_FUNC_ENTRY("SnsrBigClockScreensaver::onBackground") + qDebug() << "SnsrBigClockScreensaver::onBackground()"; + + removeCurrentContainer(); + + SCREENSAVER_TEST_FUNC_EXIT("SnsrBigClockScreensaver::onBackground") + return true; +} + +/*! + @copydoc Screensaver::onPowerSave() + */ +bool SnsrBigClockScreensaver::onPowerSave() +{ + SCREENSAVER_TEST_FUNC_ENTRY("SnsrBigClockScreensaver::onPowerSave") + qDebug() << "SnsrBigClockScreensaver::onPowerSave()"; + + SCREENSAVER_TEST_FUNC_EXIT("SnsrBigClockScreensaver::onPowerSave") + return false; +} + +/*! + @copydoc Screensaver::onClose() + */ +bool SnsrBigClockScreensaver::onClose() +{ + SCREENSAVER_TEST_FUNC_ENTRY("SnsrBigClockScreensaver::onClose") + qDebug() << "SnsrBigClockScreensaver::onClose()"; + + bool ret(false); + if (onBackground()) { + delete mCurrentContainer; + mCurrentContainer = 0; + ret = true; + } + + SCREENSAVER_TEST_FUNC_EXIT("SnsrBigClockScreensaver::onClose") + return ret; +} + +/*! + @copydoc Screensaver::onHandleActiveIndicators + */ +void SnsrBigClockScreensaver::onHandleActiveIndicators( + const QList &activeIndicators) +{ + mIndicatorModel->handleActiveIndicators(activeIndicators); +} + +/*! + @copydoc Screensaver::onHandleActivatedIndicator + */ +void SnsrBigClockScreensaver::onHandleActivatedIndicator( + HbIndicatorInterface *activatedIndicator) +{ + mIndicatorModel->handleActivatedIndicator(activatedIndicator); +} + +/*! + @copydoc Screensaver::onHandleDeactivatedIndicator + */ +void SnsrBigClockScreensaver::onHandleDeactivatedIndicator( + HbIndicatorInterface *deactivatedIndicator) +{ + mIndicatorModel->handleDeactivatedIndicator(deactivatedIndicator); +} + + +/*! + Determines the curent clock format settings. + \retval ClockFormat. + */ +SnsrBigClockScreensaver::ClockFormat SnsrBigClockScreensaver::clockFormat() +{ +#ifdef Q_OS_SYMBIAN + if (TLocale().ClockFormat() == EClockAnalog) { + return ClockFormatAnalog; + } else { + return ClockFormatDigital; + } +#else + // windows build - change the format every 30 seconds for testing purposes + if (QTime::currentTime().second() < 30) { + return ClockFormatAnalog; + } else { + return ClockFormatDigital; + } +#endif // Q_OS_SYMBIAN +} + +void SnsrBigClockScreensaver::removeCurrentContainer() +{ + if ( mCurrentContainer ) { + disconnect( + mMainWindow, SIGNAL(orientationChanged(Qt::Orientation)), + mCurrentContainer, SLOT(changeLayout(Qt::Orientation)) + ); + disconnect( + &mTimer, SIGNAL(timeout()), + mCurrentContainer, SLOT(update()) + ); + disconnect( + mCurrentContainer, SIGNAL(unlockRequested()), + this, SIGNAL(unlockRequested()) ); + mTimer.stop(); + emit viewChanged(0); + + delete mCurrentContainer; + mCurrentContainer = 0; + } +} + +void SnsrBigClockScreensaver::setCurrentContainer( SnsrBigClockContainer* newContainer ) +{ + mCurrentContainer = newContainer; + connect( + mMainWindow, SIGNAL(orientationChanged(Qt::Orientation)), + mCurrentContainer, SLOT(changeLayout(Qt::Orientation)) + ); + connect( &mTimer, SIGNAL(timeout()), mCurrentContainer, SLOT(update()) ); + connect( mCurrentContainer, SIGNAL(unlockRequested()), SIGNAL(unlockRequested()) ); + + mCurrentContainer->initIndicators(*mIndicatorModel); + + mCurrentContainer->changeLayout(mMainWindow->orientation()); + mTimer.start( mCurrentContainer->updateIntervalInMilliseconds() ); + emit viewChanged(mCurrentContainer); +} +