screensaver/snsrplugins/snsrbigclockscreensaverplugin/snsrswipewidget/src/snsrswipewidget.cpp
author hgs
Wed, 06 Oct 2010 16:06:24 +0300
changeset 97 66b5fe3c07fd
child 98 e6f74eb7f69f
permissions -rw-r--r--
201039_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
97
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
     1
/*
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
     3
* All rights reserved.
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
     8
*
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
     9
* Initial Contributors:
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    11
*
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    12
* Contributors:
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    13
*
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    14
* Description:  Swipe Widget.
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    15
*
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    16
*/
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    17
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    18
#include <QDebug>
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    19
#include <HbStyleLoader>
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    20
#include <hbeffect.h>
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    21
#include <hblabel.h>
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    22
#include <HbIconItem>
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    23
#include <HbIconAnimationManager>
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    24
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    25
#include <hbiconitem.h>
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    26
#include <hbiconanimator.h>
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    27
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    28
#include "snsrbigclockcontainer.h"
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    29
#include "snsranalogclockcontainer.h"
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    30
#include "snsrswipewidget.h"
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    31
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    32
const char *gSwipeCssFilePath =":/style/snsrswipewidget.css";
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    33
const char *gSwipeWidgetMLFilePath = ":/style/snsrswipewidget.widgetml";
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    34
const char *gSwipeColorCssFilePath = ":/style/snsrswipewidget_color.css";
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    35
const char *gSwipeIcon = ":/xml/qtg_anim_swipe.axml";
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    36
const qreal gSwipeDownAngle = 270;
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    37
const qreal gLandscapeSwipeDownAngle = 180;
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    38
const qreal gSwipeAngleTolerance = 25;
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    39
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    40
/*!
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    41
    \class SnsrSwipeWidget
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    42
    \ingroup group_snsrbigclockscreensaverplugins
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    43
    \brief Screensaver swipe widget.
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    44
 */
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    45
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    46
/*!
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    47
    Constructs a new SnsrSwipeWidget.
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    48
    \param parent Parent object.
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    49
 */
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    50
SnsrSwipeWidget::SnsrSwipeWidget(QGraphicsItem* parent):
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    51
    HbWidget(parent),
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    52
    mSlideLabel(0), mIconItem(0),mCurrentOrientation(-1)
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    53
{
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    54
    HbStyleLoader::registerFilePath(gSwipeCssFilePath);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    55
    HbStyleLoader::registerFilePath(gSwipeWidgetMLFilePath);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    56
    HbStyleLoader::registerFilePath(gSwipeColorCssFilePath);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    57
    
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    58
    setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    59
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    60
    createPrimitives();
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    61
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    62
    grabGesture(Qt::SwipeGesture);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    63
}
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    64
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    65
/*!
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    66
    Destructs the class.
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    67
 */
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    68
SnsrSwipeWidget::~SnsrSwipeWidget()
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    69
{
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    70
    HbStyleLoader::unregisterFilePath( gSwipeCssFilePath );
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    71
    HbStyleLoader::unregisterFilePath( gSwipeWidgetMLFilePath );
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    72
    HbStyleLoader::unregisterFilePath( gSwipeColorCssFilePath );
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    73
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    74
}
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    75
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    76
/*!
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    77
    Creates all widget primitives.
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    78
 */
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    79
void SnsrSwipeWidget::createPrimitives()
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    80
{
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    81
    if (!mSlideLabel) {
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    82
        mSlideLabel = new HbLabel(this);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    83
        mSlideLabel->setPlainText(hbTrId("txt_screensaver_swipe"));
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    84
        mSlideLabel->setAlignment(Qt::AlignCenter);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    85
        HbStyle::setItemName(mSlideLabel, QLatin1String("slideLabel"));
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    86
    }
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    87
    if (!mIconItem) {
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    88
        HbIconAnimationManager::global()->addDefinitionFile(gSwipeIcon);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    89
        mIconItem = new HbIconItem(QString("qtg_anim_swipe"),this);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    90
        HbStyle::setItemName(mIconItem, QLatin1String("slideIcon"));
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    91
        mIconItem->show();
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    92
        mIconItem->animator().startAnimation();
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    93
        mIconItem->setAlignment(Qt::AlignCenter);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    94
    }
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    95
}
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    96
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    97
/*!
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    98
    \reimp
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    99
 */
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   100
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   101
void SnsrSwipeWidget::gestureEvent(QGestureEvent *event)
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   102
{
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   103
    SCREENSAVER_TEST_FUNC_ENTRY("SnsrSwipeWidget::gestureEvent")
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   104
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   105
    QGesture *gesture = event->gesture(Qt::SwipeGesture);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   106
    QSwipeGesture *swipe = static_cast<QSwipeGesture *>(gesture);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   107
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   108
    if ( swipe && swipe->state() == Qt::GestureStarted ) {
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   109
        event->accept(Qt::SwipeGesture);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   110
        mIconItem->animator().startAnimation();
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   111
    }
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   112
    else if ( swipe && swipe->state() == Qt::GestureFinished ) {
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   113
        // unclock with downward swipe
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   114
        qreal downAngle = (mCurrentOrientation == Qt::Vertical) ? 
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   115
            gSwipeDownAngle : gLandscapeSwipeDownAngle;
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   116
        qreal swipeAngle = swipe->swipeAngle();
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   117
        if ( abs(swipeAngle - downAngle) < gSwipeAngleTolerance ) {
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   118
            emit swipeDownDetected();
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   119
            event->accept(Qt::SwipeGesture);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   120
        }
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   121
    }
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   122
    else { 
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   123
        event->ignore(Qt::SwipeGesture);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   124
    }
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   125
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   126
    SCREENSAVER_TEST_FUNC_EXIT("SnsrSwipeWidget::gestureEvent")
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   127
}
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   128
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   129
void SnsrSwipeWidget::setCurrentOrientation(int orientation)
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   130
{
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   131
    mCurrentOrientation = orientation;
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   132
}
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   133
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   134