screensaver/screensaverplugins/snsrbigclockscreensaverplugin/src/snsrbigclockscreensaver.cpp
author hgs
Fri, 25 Jun 2010 19:19:22 +0300
changeset 62 341166945d65
child 69 87476091b3f5
permissions -rw-r--r--
201025
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
62
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 - 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description: Big clock Screensaver.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include "snsrbigclockscreensaver.h"
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#ifdef Q_OS_SYMBIAN
hgs
parents:
diff changeset
    21
#include <e32std.h>
hgs
parents:
diff changeset
    22
#endif // Q_OS_SYMBIAN
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
#include <QDebug>
hgs
parents:
diff changeset
    25
#include <QTime>
hgs
parents:
diff changeset
    26
#include <QTimer>
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
#include <hbinstance.h>
hgs
parents:
diff changeset
    29
#include <hbmainwindow.h>
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
#include "snsranalogclockcontainer.h"
hgs
parents:
diff changeset
    32
#include "snsrdigitalclockcontainer.h"
hgs
parents:
diff changeset
    33
#include "snsroledanalogclockcontainer.h"
hgs
parents:
diff changeset
    34
#include "snsroleddigitalclockcontainer.h"
hgs
parents:
diff changeset
    35
#include "snsrindicatormodel.h"
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
/*!
hgs
parents:
diff changeset
    38
    \class SnsrBigClockScreensaver
hgs
parents:
diff changeset
    39
    \ingroup group_snsrbigclockscreensaverplugin
hgs
parents:
diff changeset
    40
    \brief Screensaver with big digital clock.
hgs
parents:
diff changeset
    41
 */
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
const int gTimeInterval(100);
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
/*!
hgs
parents:
diff changeset
    46
    Constructs a new SnsrBigClockScreensaver.
hgs
parents:
diff changeset
    47
 */
hgs
parents:
diff changeset
    48
SnsrBigClockScreensaver::SnsrBigClockScreensaver() :
hgs
parents:
diff changeset
    49
    mMainWindow(0),
hgs
parents:
diff changeset
    50
    mCurrentContainer(0),
hgs
parents:
diff changeset
    51
    mIndicatorModel(0)
hgs
parents:
diff changeset
    52
{
hgs
parents:
diff changeset
    53
    mMainWindow = HbInstance::instance()->allMainWindows().at(0);
hgs
parents:
diff changeset
    54
    // for nice looking clock hand transformations
hgs
parents:
diff changeset
    55
    mMainWindow->setRenderHint(QPainter::SmoothPixmapTransform);
hgs
parents:
diff changeset
    56
    
hgs
parents:
diff changeset
    57
    // This model holds indicator status information and must exist as
hgs
parents:
diff changeset
    58
    // long as screensaver does.
hgs
parents:
diff changeset
    59
    mIndicatorModel = new SnsrIndicatorModel(this);
hgs
parents:
diff changeset
    60
}
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
/*!
hgs
parents:
diff changeset
    63
    Destructs the class.
hgs
parents:
diff changeset
    64
 */
hgs
parents:
diff changeset
    65
SnsrBigClockScreensaver::~SnsrBigClockScreensaver()
hgs
parents:
diff changeset
    66
{
hgs
parents:
diff changeset
    67
    // mCurrentContainer, mIndicatorModel - deleted by the parent
hgs
parents:
diff changeset
    68
}
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
/*!
hgs
parents:
diff changeset
    71
    @copydoc Screensaver::onInitialize()
hgs
parents:
diff changeset
    72
*/
hgs
parents:
diff changeset
    73
bool SnsrBigClockScreensaver::onInitialize()
hgs
parents:
diff changeset
    74
{
hgs
parents:
diff changeset
    75
    qDebug() << "SnsrBigClockScreensaver::onInitialize()";
hgs
parents:
diff changeset
    76
    return true;
hgs
parents:
diff changeset
    77
}
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
/*!
hgs
parents:
diff changeset
    80
    @copydoc Screensaver::onForeground()
hgs
parents:
diff changeset
    81
 */
hgs
parents:
diff changeset
    82
bool SnsrBigClockScreensaver::onForeground()
hgs
parents:
diff changeset
    83
{
hgs
parents:
diff changeset
    84
    SCREENSAVER_TEST_FUNC_ENTRY("SnsrBigClockScreensaver::onForeground")
hgs
parents:
diff changeset
    85
    qDebug() << "SnsrBigClockScreensaver::onForeground()";
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
    removeCurrentContainer();
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
    SnsrBigClockContainer* newContainer( 0 );
hgs
parents:
diff changeset
    90
    if (clockFormat() == ClockFormatAnalog) {
hgs
parents:
diff changeset
    91
        newContainer = new SnsrAnalogClockContainer();
hgs
parents:
diff changeset
    92
    }
hgs
parents:
diff changeset
    93
    else {
hgs
parents:
diff changeset
    94
        newContainer = new SnsrDigitalClockContainer();
hgs
parents:
diff changeset
    95
    }
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
    setCurrentContainer( newContainer );
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
    SCREENSAVER_TEST_FUNC_EXIT("SnsrBigClockScreensaver::onForeground")
hgs
parents:
diff changeset
   100
    return true;
hgs
parents:
diff changeset
   101
}
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
/*!
hgs
parents:
diff changeset
   104
    @copydoc Screensaver::onPartialForeground()
hgs
parents:
diff changeset
   105
 */
hgs
parents:
diff changeset
   106
bool SnsrBigClockScreensaver::onPartialForeground()
hgs
parents:
diff changeset
   107
{
hgs
parents:
diff changeset
   108
    SCREENSAVER_TEST_FUNC_ENTRY("SnsrBigClockScreensaver::onPartialForeground")
hgs
parents:
diff changeset
   109
    qDebug() << "SnsrBigClockScreensaver::onPartialForeground()";
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
    removeCurrentContainer();
hgs
parents:
diff changeset
   112
    
hgs
parents:
diff changeset
   113
    SnsrBigClockContainer* newContainer( 0 );
hgs
parents:
diff changeset
   114
    if (clockFormat() == ClockFormatAnalog) {
hgs
parents:
diff changeset
   115
        newContainer = new SnsrOledAnalogClockContainer();
hgs
parents:
diff changeset
   116
    }
hgs
parents:
diff changeset
   117
    else {
hgs
parents:
diff changeset
   118
        newContainer = new SnsrOledDigitalClockContainer();
hgs
parents:
diff changeset
   119
    }
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
    setCurrentContainer( newContainer );
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
    SCREENSAVER_TEST_FUNC_EXIT("SnsrBigClockScreensaver::onPartialForeground")
hgs
parents:
diff changeset
   124
    return true;
hgs
parents:
diff changeset
   125
}
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
/*!
hgs
parents:
diff changeset
   128
    @copydoc Screensaver::onBackground()
hgs
parents:
diff changeset
   129
 */
hgs
parents:
diff changeset
   130
bool SnsrBigClockScreensaver::onBackground()
hgs
parents:
diff changeset
   131
{
hgs
parents:
diff changeset
   132
    SCREENSAVER_TEST_FUNC_ENTRY("SnsrBigClockScreensaver::onBackground")
hgs
parents:
diff changeset
   133
    qDebug() << "SnsrBigClockScreensaver::onBackground()";
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
    removeCurrentContainer();
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
    SCREENSAVER_TEST_FUNC_EXIT("SnsrBigClockScreensaver::onBackground")
hgs
parents:
diff changeset
   138
    return true;
hgs
parents:
diff changeset
   139
}
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
/*!
hgs
parents:
diff changeset
   142
    @copydoc Screensaver::onPowerSave()
hgs
parents:
diff changeset
   143
 */
hgs
parents:
diff changeset
   144
bool SnsrBigClockScreensaver::onPowerSave()
hgs
parents:
diff changeset
   145
{
hgs
parents:
diff changeset
   146
    SCREENSAVER_TEST_FUNC_ENTRY("SnsrBigClockScreensaver::onPowerSave")
hgs
parents:
diff changeset
   147
    qDebug() << "SnsrBigClockScreensaver::onPowerSave()";
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
    SCREENSAVER_TEST_FUNC_EXIT("SnsrBigClockScreensaver::onPowerSave")
hgs
parents:
diff changeset
   150
    return false;
hgs
parents:
diff changeset
   151
}
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
/*!
hgs
parents:
diff changeset
   154
    @copydoc Screensaver::onClose()
hgs
parents:
diff changeset
   155
 */
hgs
parents:
diff changeset
   156
bool SnsrBigClockScreensaver::onClose()
hgs
parents:
diff changeset
   157
{
hgs
parents:
diff changeset
   158
    SCREENSAVER_TEST_FUNC_ENTRY("SnsrBigClockScreensaver::onClose")
hgs
parents:
diff changeset
   159
    qDebug() << "SnsrBigClockScreensaver::onClose()";
hgs
parents:
diff changeset
   160
hgs
parents:
diff changeset
   161
    bool ret(false);
hgs
parents:
diff changeset
   162
    if (onBackground()) {
hgs
parents:
diff changeset
   163
        delete mCurrentContainer;
hgs
parents:
diff changeset
   164
        mCurrentContainer = 0;
hgs
parents:
diff changeset
   165
        ret = true;
hgs
parents:
diff changeset
   166
    }
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
    SCREENSAVER_TEST_FUNC_EXIT("SnsrBigClockScreensaver::onClose")
hgs
parents:
diff changeset
   169
    return ret;
hgs
parents:
diff changeset
   170
}
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
/*!
hgs
parents:
diff changeset
   173
    @copydoc Screensaver::onHandleActiveIndicators
hgs
parents:
diff changeset
   174
 */
hgs
parents:
diff changeset
   175
void SnsrBigClockScreensaver::onHandleActiveIndicators(
hgs
parents:
diff changeset
   176
        const QList<HbIndicatorInterface*> &activeIndicators)
hgs
parents:
diff changeset
   177
{
hgs
parents:
diff changeset
   178
    mIndicatorModel->handleActiveIndicators(activeIndicators);
hgs
parents:
diff changeset
   179
}
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
/*!
hgs
parents:
diff changeset
   182
    @copydoc Screensaver::onHandleActivatedIndicator
hgs
parents:
diff changeset
   183
 */
hgs
parents:
diff changeset
   184
void SnsrBigClockScreensaver::onHandleActivatedIndicator(
hgs
parents:
diff changeset
   185
        HbIndicatorInterface *activatedIndicator)
hgs
parents:
diff changeset
   186
{
hgs
parents:
diff changeset
   187
    mIndicatorModel->handleActivatedIndicator(activatedIndicator);
hgs
parents:
diff changeset
   188
}
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
/*!
hgs
parents:
diff changeset
   191
    @copydoc Screensaver::onHandleDeactivatedIndicator
hgs
parents:
diff changeset
   192
 */
hgs
parents:
diff changeset
   193
void SnsrBigClockScreensaver::onHandleDeactivatedIndicator(
hgs
parents:
diff changeset
   194
        HbIndicatorInterface *deactivatedIndicator)
hgs
parents:
diff changeset
   195
{
hgs
parents:
diff changeset
   196
    mIndicatorModel->handleDeactivatedIndicator(deactivatedIndicator);
hgs
parents:
diff changeset
   197
}
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
/*!
hgs
parents:
diff changeset
   201
    Determines the curent clock format settings.
hgs
parents:
diff changeset
   202
    \retval ClockFormat.
hgs
parents:
diff changeset
   203
 */
hgs
parents:
diff changeset
   204
SnsrBigClockScreensaver::ClockFormat SnsrBigClockScreensaver::clockFormat()
hgs
parents:
diff changeset
   205
{
hgs
parents:
diff changeset
   206
#ifdef Q_OS_SYMBIAN
hgs
parents:
diff changeset
   207
    if (TLocale().ClockFormat() == EClockAnalog) {
hgs
parents:
diff changeset
   208
        return ClockFormatAnalog;
hgs
parents:
diff changeset
   209
    } else {
hgs
parents:
diff changeset
   210
        return ClockFormatDigital;
hgs
parents:
diff changeset
   211
    }
hgs
parents:
diff changeset
   212
#else
hgs
parents:
diff changeset
   213
    // windows build - change the format every 30 seconds for testing purposes
hgs
parents:
diff changeset
   214
    if (QTime::currentTime().second() < 30) {
hgs
parents:
diff changeset
   215
        return ClockFormatAnalog;
hgs
parents:
diff changeset
   216
    } else {
hgs
parents:
diff changeset
   217
        return ClockFormatDigital;
hgs
parents:
diff changeset
   218
    }
hgs
parents:
diff changeset
   219
#endif // Q_OS_SYMBIAN
hgs
parents:
diff changeset
   220
}
hgs
parents:
diff changeset
   221
hgs
parents:
diff changeset
   222
void SnsrBigClockScreensaver::removeCurrentContainer()
hgs
parents:
diff changeset
   223
{
hgs
parents:
diff changeset
   224
    if ( mCurrentContainer ) {
hgs
parents:
diff changeset
   225
        disconnect(
hgs
parents:
diff changeset
   226
            mMainWindow, SIGNAL(orientationChanged(Qt::Orientation)),
hgs
parents:
diff changeset
   227
            mCurrentContainer, SLOT(changeLayout(Qt::Orientation))
hgs
parents:
diff changeset
   228
            );
hgs
parents:
diff changeset
   229
        disconnect(
hgs
parents:
diff changeset
   230
            &mTimer, SIGNAL(timeout()),
hgs
parents:
diff changeset
   231
            mCurrentContainer, SLOT(update())
hgs
parents:
diff changeset
   232
            );
hgs
parents:
diff changeset
   233
        disconnect( 
hgs
parents:
diff changeset
   234
            mCurrentContainer, SIGNAL(unlockRequested()), 
hgs
parents:
diff changeset
   235
            this, SIGNAL(unlockRequested()) );
hgs
parents:
diff changeset
   236
        mTimer.stop();
hgs
parents:
diff changeset
   237
        emit viewChanged(0);
hgs
parents:
diff changeset
   238
        
hgs
parents:
diff changeset
   239
        delete mCurrentContainer;
hgs
parents:
diff changeset
   240
        mCurrentContainer = 0;
hgs
parents:
diff changeset
   241
    }
hgs
parents:
diff changeset
   242
}
hgs
parents:
diff changeset
   243
hgs
parents:
diff changeset
   244
void SnsrBigClockScreensaver::setCurrentContainer( SnsrBigClockContainer* newContainer )
hgs
parents:
diff changeset
   245
{
hgs
parents:
diff changeset
   246
    mCurrentContainer = newContainer;
hgs
parents:
diff changeset
   247
    connect(
hgs
parents:
diff changeset
   248
            mMainWindow, SIGNAL(orientationChanged(Qt::Orientation)),
hgs
parents:
diff changeset
   249
            mCurrentContainer, SLOT(changeLayout(Qt::Orientation))
hgs
parents:
diff changeset
   250
        );
hgs
parents:
diff changeset
   251
    connect( &mTimer, SIGNAL(timeout()), mCurrentContainer, SLOT(update()) );
hgs
parents:
diff changeset
   252
    connect( mCurrentContainer, SIGNAL(unlockRequested()), SIGNAL(unlockRequested()) );
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
    mCurrentContainer->initIndicators(*mIndicatorModel);
hgs
parents:
diff changeset
   255
    
hgs
parents:
diff changeset
   256
    mCurrentContainer->changeLayout(mMainWindow->orientation());
hgs
parents:
diff changeset
   257
    mTimer.start( mCurrentContainer->updateIntervalInMilliseconds() );
hgs
parents:
diff changeset
   258
    emit viewChanged(mCurrentContainer);
hgs
parents:
diff changeset
   259
}
hgs
parents:
diff changeset
   260