clock/clockui/clockwidget/clockwidgetimpl/src/analogclockwidget.cpp
author hgs
Mon, 28 Jun 2010 15:22:02 +0530
changeset 45 b6db4fd4947b
child 55 2c54b51f39c4
permissions -rw-r--r--
201025
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2008 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:  AnalogClockWidget
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
// System includes
hgs
parents:
diff changeset
    19
#include <HbIconItem>
hgs
parents:
diff changeset
    20
#include <HbStyleLoader>
hgs
parents:
diff changeset
    21
#include <QTime>
hgs
parents:
diff changeset
    22
#include <QTimer>
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
// User includes
hgs
parents:
diff changeset
    25
#include "analogclockwidget.h"
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
// Constants
hgs
parents:
diff changeset
    28
const int clockUpdateInterval  (1000); // msec
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
/*!
hgs
parents:
diff changeset
    31
    \class AnalogClockWidget
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
    This class implements the analogclock widget which gets displayed
hgs
parents:
diff changeset
    34
    in the clockmainview when the clocktype is set to analog type.
hgs
parents:
diff changeset
    35
*/
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
/*!
hgs
parents:
diff changeset
    38
    Constructor.
hgs
parents:
diff changeset
    39
    \param parent The parent of type QGraphicsItem.
hgs
parents:
diff changeset
    40
*/
hgs
parents:
diff changeset
    41
AnalogClockWidget::AnalogClockWidget(QGraphicsItem *parent)
hgs
parents:
diff changeset
    42
    : HbWidget(parent)
hgs
parents:
diff changeset
    43
{
hgs
parents:
diff changeset
    44
    bool result = HbStyleLoader::registerFilePath(":/resource/analogclockwidget.widgetml");
hgs
parents:
diff changeset
    45
    result = HbStyleLoader::registerFilePath(":/resource/analogclockwidget.css");
hgs
parents:
diff changeset
    46
        
hgs
parents:
diff changeset
    47
    updatePrimitives();
hgs
parents:
diff changeset
    48
    mTimer = new QTimer(this);
hgs
parents:
diff changeset
    49
    connect(mTimer, SIGNAL(timeout()), SLOT(tick()));
hgs
parents:
diff changeset
    50
    mTimer->start(clockUpdateInterval);
hgs
parents:
diff changeset
    51
}
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
/*!
hgs
parents:
diff changeset
    54
    Destructor.
hgs
parents:
diff changeset
    55
 */
hgs
parents:
diff changeset
    56
AnalogClockWidget::~AnalogClockWidget()
hgs
parents:
diff changeset
    57
{    
hgs
parents:
diff changeset
    58
    mTimer->stop(); 
hgs
parents:
diff changeset
    59
    HbStyleLoader::unregisterFilePath(":/resource");
hgs
parents:
diff changeset
    60
}
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
/*!
hgs
parents:
diff changeset
    63
    Handles resize event from HbWidget
hgs
parents:
diff changeset
    64
 */
hgs
parents:
diff changeset
    65
void AnalogClockWidget::resizeEvent(QGraphicsSceneResizeEvent *event)
hgs
parents:
diff changeset
    66
{
hgs
parents:
diff changeset
    67
    QGraphicsWidget::resizeEvent(event);
hgs
parents:
diff changeset
    68
    updatePrimitives();   
hgs
parents:
diff changeset
    69
}
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
/*!
hgs
parents:
diff changeset
    72
    @copydoc HbWidget::updatePrimitives()
hgs
parents:
diff changeset
    73
 */
hgs
parents:
diff changeset
    74
void AnalogClockWidget::updatePrimitives()
hgs
parents:
diff changeset
    75
{
hgs
parents:
diff changeset
    76
    if (!mClockBackground) {
hgs
parents:
diff changeset
    77
        mClockBackground = new HbIconItem(QLatin1String("qtg_graf_clock_day_bg"), this);
hgs
parents:
diff changeset
    78
        HbStyle::setItemName(mClockBackground, QLatin1String("clock_background"));
hgs
parents:
diff changeset
    79
    }
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
    // Calculate angles for clock hands.
hgs
parents:
diff changeset
    82
    QTime time = QTime::currentTime();
hgs
parents:
diff changeset
    83
    qreal s = 6 * time.second();
hgs
parents:
diff changeset
    84
    qreal m = 6 * (time.minute() + s/360);
hgs
parents:
diff changeset
    85
    qreal h = 30 * ((time.hour() % 12) + m/360);
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
	if (!mClockHourHand) {
hgs
parents:
diff changeset
    88
        mClockHourHand = new HbIconItem(QLatin1String("qtg_graf_clock_day_hour"), this);
hgs
parents:
diff changeset
    89
        HbStyle::setItemName(mClockHourHand, QLatin1String("clock_hour_hand"));
hgs
parents:
diff changeset
    90
    }
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
    int x = mClockHourHand->geometry().width()/2;
hgs
parents:
diff changeset
    93
    int y = mClockHourHand->geometry().height()/2;
hgs
parents:
diff changeset
    94
    mClockHourHand->setTransform(QTransform().translate(x, y).rotate(h).translate(-x, -y));
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
	if (!mClockMinuteHand) {
hgs
parents:
diff changeset
    97
        mClockMinuteHand = new HbIconItem(QLatin1String("qtg_graf_clock_day_min"), this);
hgs
parents:
diff changeset
    98
        HbStyle::setItemName(mClockMinuteHand, QLatin1String("clock_minute_hand"));
hgs
parents:
diff changeset
    99
    }
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
    x = mClockMinuteHand->geometry().width()/2;
hgs
parents:
diff changeset
   102
    y = mClockMinuteHand->geometry().height()/2;
hgs
parents:
diff changeset
   103
    mClockMinuteHand->setTransform(QTransform().translate(x, y).rotate(m).translate(-x, -y));
hgs
parents:
diff changeset
   104
    
hgs
parents:
diff changeset
   105
      
hgs
parents:
diff changeset
   106
    if (!mClockSecondHand) {
hgs
parents:
diff changeset
   107
         mClockSecondHand = new HbIconItem(QLatin1String("qtg_graf_clock_day_sec"), this);
hgs
parents:
diff changeset
   108
        HbStyle::setItemName(mClockSecondHand, QLatin1String("clock_second_hand"));
hgs
parents:
diff changeset
   109
        }
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
    x = mClockSecondHand->geometry().width()/2;
hgs
parents:
diff changeset
   112
    y = mClockSecondHand->geometry().height()/2;
hgs
parents:
diff changeset
   113
    mClockSecondHand->setTransform(QTransform().translate(x, y).rotate(s).translate(-x, -y));
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
}
hgs
parents:
diff changeset
   116
hgs
parents:
diff changeset
   117
/*!
hgs
parents:
diff changeset
   118
    Updates clock visualization according to current time
hgs
parents:
diff changeset
   119
 */
hgs
parents:
diff changeset
   120
void AnalogClockWidget::tick()
hgs
parents:
diff changeset
   121
{
hgs
parents:
diff changeset
   122
    updatePrimitives();
hgs
parents:
diff changeset
   123
    update();
hgs
parents:
diff changeset
   124
}
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
/*!
hgs
parents:
diff changeset
   127
    Handles polish event
hgs
parents:
diff changeset
   128
 */
hgs
parents:
diff changeset
   129
void AnalogClockWidget::polish( HbStyleParameters& params ) 
hgs
parents:
diff changeset
   130
{  
hgs
parents:
diff changeset
   131
    HbWidget::polish(params); 
hgs
parents:
diff changeset
   132
    updatePrimitives();
hgs
parents:
diff changeset
   133
} 
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
// End of file  --Don't remove this.