screensaver/snsrplugins/snsrbigclockscreensaverplugin/snsrswipewidget/src/snsrswipewidget.cpp
author hgs
Mon, 18 Oct 2010 10:20:15 +0300
changeset 98 e6f74eb7f69f
parent 97 66b5fe3c07fd
permissions -rw-r--r--
201041
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>
98
hgs
parents: 97
diff changeset
    20
#include <HbLabel>
97
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    21
#include <HbIconItem>
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    22
#include <HbIconAnimationManager>
98
hgs
parents: 97
diff changeset
    23
#include <HbIconAnimator>
97
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    24
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    25
#include "snsrbigclockcontainer.h"
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    26
#include "snsranalogclockcontainer.h"
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    27
#include "snsrswipewidget.h"
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    28
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    29
const char *gSwipeCssFilePath =":/style/snsrswipewidget.css";
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    30
const char *gSwipeWidgetMLFilePath = ":/style/snsrswipewidget.widgetml";
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    31
const char *gSwipeColorCssFilePath = ":/style/snsrswipewidget_color.css";
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    32
const char *gSwipeIcon = ":/xml/qtg_anim_swipe.axml";
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    33
const qreal gSwipeDownAngle = 270;
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    34
const qreal gLandscapeSwipeDownAngle = 180;
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    35
const qreal gSwipeAngleTolerance = 25;
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    36
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    37
/*!
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    38
    \class SnsrSwipeWidget
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    39
    \ingroup group_snsrbigclockscreensaverplugins
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    40
    \brief Screensaver swipe widget.
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    41
 */
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    42
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    43
/*!
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    44
    Constructs a new SnsrSwipeWidget.
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    45
    \param parent Parent object.
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    46
 */
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    47
SnsrSwipeWidget::SnsrSwipeWidget(QGraphicsItem* parent):
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    48
    HbWidget(parent),
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    49
    mSlideLabel(0), mIconItem(0),mCurrentOrientation(-1)
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    50
{
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    51
    HbStyleLoader::registerFilePath(gSwipeCssFilePath);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    52
    HbStyleLoader::registerFilePath(gSwipeWidgetMLFilePath);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    53
    HbStyleLoader::registerFilePath(gSwipeColorCssFilePath);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    54
    
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    55
    setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    56
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    57
    createPrimitives();
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    58
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    59
    grabGesture(Qt::SwipeGesture);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    60
}
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    61
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    62
/*!
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    63
    Destructs the class.
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    64
 */
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    65
SnsrSwipeWidget::~SnsrSwipeWidget()
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    66
{
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    67
    HbStyleLoader::unregisterFilePath( gSwipeCssFilePath );
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    68
    HbStyleLoader::unregisterFilePath( gSwipeWidgetMLFilePath );
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    69
    HbStyleLoader::unregisterFilePath( gSwipeColorCssFilePath );
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    70
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    71
}
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    72
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    73
/*!
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    74
    Creates all widget primitives.
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    75
 */
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    76
void SnsrSwipeWidget::createPrimitives()
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    77
{
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    78
    if (!mSlideLabel) {
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    79
        mSlideLabel = new HbLabel(this);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    80
        mSlideLabel->setPlainText(hbTrId("txt_screensaver_swipe"));
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    81
        mSlideLabel->setAlignment(Qt::AlignCenter);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    82
        HbStyle::setItemName(mSlideLabel, QLatin1String("slideLabel"));
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    83
    }
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    84
    if (!mIconItem) {
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    85
        HbIconAnimationManager::global()->addDefinitionFile(gSwipeIcon);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    86
        mIconItem = new HbIconItem(QString("qtg_anim_swipe"),this);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    87
        HbStyle::setItemName(mIconItem, QLatin1String("slideIcon"));
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    88
        mIconItem->show();
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    89
        mIconItem->animator().startAnimation();
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    90
        mIconItem->setAlignment(Qt::AlignCenter);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    91
    }
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    92
}
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    93
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    94
/*!
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    95
    \reimp
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    96
 */
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    97
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    98
void SnsrSwipeWidget::gestureEvent(QGestureEvent *event)
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
    99
{
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   100
    SCREENSAVER_TEST_FUNC_ENTRY("SnsrSwipeWidget::gestureEvent")
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   101
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   102
    QGesture *gesture = event->gesture(Qt::SwipeGesture);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   103
    QSwipeGesture *swipe = static_cast<QSwipeGesture *>(gesture);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   104
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   105
    if ( swipe && swipe->state() == Qt::GestureStarted ) {
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   106
        event->accept(Qt::SwipeGesture);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   107
        mIconItem->animator().startAnimation();
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   108
    }
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   109
    else if ( swipe && swipe->state() == Qt::GestureFinished ) {
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   110
        // unclock with downward swipe
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   111
        qreal downAngle = (mCurrentOrientation == Qt::Vertical) ? 
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   112
            gSwipeDownAngle : gLandscapeSwipeDownAngle;
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   113
        qreal swipeAngle = swipe->swipeAngle();
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   114
        if ( abs(swipeAngle - downAngle) < gSwipeAngleTolerance ) {
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   115
            emit swipeDownDetected();
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   116
            event->accept(Qt::SwipeGesture);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   117
        }
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   118
    }
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   119
    else { 
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   120
        event->ignore(Qt::SwipeGesture);
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   121
    }
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   122
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   123
    SCREENSAVER_TEST_FUNC_EXIT("SnsrSwipeWidget::gestureEvent")
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   124
}
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   125
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   126
void SnsrSwipeWidget::setCurrentOrientation(int orientation)
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   127
{
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   128
    mCurrentOrientation = orientation;
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   129
}
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   130
66b5fe3c07fd 201039_01
hgs
parents:
diff changeset
   131