ganeswidgets/inc/hggridcontainer.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 04 Oct 2010 02:07:13 +0300
changeset 19 31a1a9e11046
parent 9 dde80bf4a8c7
child 20 a60f8b6b1d32
permissions -rw-r--r--
Revision: 201037 Kit: 201039

/*
* Copyright (c) 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:
*
*/

#ifndef HGGRIDCONTAINER_H
#define HGGRIDCONTAINER_H

#include "hgcontainer.h"
#include <QPropertyAnimation>
#include <QQueue>

class HgWidgetItem;
class HgMediaWallRenderer;
class HbPinchGesture;

class HgGridContainer : public HgContainer
{
    Q_OBJECT
    Q_DISABLE_COPY(HgGridContainer)

public:
    explicit HgGridContainer(QGraphicsItem *parent = 0);
    
    virtual ~HgGridContainer();

    void setEffect3dEnabled(bool effect3dEnabled);
    bool effect3dEnabled() const;
    
    void setPinchEnabled(bool pinchEnabled);
    bool pinchEnabled() const;
    void setPinchLevels(QPair<int,int> levels, Qt::Orientation scrollDirection);
    QPair<int,int> pinchLevels(Qt::Orientation scrollDirection) const;
    
    void setRowCount(int count, Qt::Orientation scrollDirection = Qt::Horizontal);
    int rowCount(Qt::Orientation scrollDirection) const;

signals:

    void emptySpacePressed();
    
protected:

    // events
    virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
    
    // from HgContainer
    virtual HgMediaWallRenderer* createRenderer(Qt::Orientation scrollDirection);
    virtual qreal getCameraDistance(qreal springVelocity);
    virtual qreal getCameraRotationY(qreal springVelocity);
    virtual bool handleTapAction(const QPointF& pos, HgWidgetItem* hitItem, int hitItemIndex);
    virtual bool handleLongTapAction(const QPointF& pos, HgWidgetItem* hitItem, int hitItemindex);
    virtual void onScrollPositionChanged(qreal pos);
    virtual bool handleTap(Qt::GestureState state, const QPointF &pos);
    virtual bool handleLongTap(Qt::GestureState state, const QPointF &pos);
    virtual void setOrientation(Qt::Orientation orientation, bool animate=true);

    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
    void mousePressEvent(QGraphicsSceneMouseEvent *event);
    void gestureEvent(QGestureEvent* event);
    bool event(QEvent *e);
    
    void handlePinchEnd();
    void handlePinchUpdate(HbPinchGesture* pinch);    

public slots:
    
    void effectFinished();
    
private:    
    
    bool mEffect3dEnabled;
    bool mPinchEnabled;
    bool mPinchingOngoing;
    int mTempImageHeightForLineGrid;    //this is changed during pinching
    int mTempImageHeightFinal;          //this is changed during pinching
    int mTempRowCount;                  //this is changed during pinching
    int mTargetRowCount;
    QQueue<qreal> iTargetRowCountList;
    QSizeF mTargetImageSize;
    bool mPinchEndAlreadyHandled;
    bool mReactToOnlyPanGestures;
    QPropertyAnimation iFadeAnimation;
    int mHorizontalRowCount;
    int mVerticalColumnCount;
    QPair<int,int> mHorizontalPinchLevels;
    QPair<int,int> mVerticalPinchLevels;
};

#endif