homescreenapp/stateplugins/hshomescreenstateplugin/src/hsidlewidget.cpp
changeset 77 4b195f3bea29
parent 61 2b1b11a301d2
child 85 35368b604b28
--- a/homescreenapp/stateplugins/hshomescreenstateplugin/src/hsidlewidget.cpp	Tue Jul 06 14:06:53 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,405 +0,0 @@
-/*
-* Copyright (c) 2009 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:
-*
-*/
-
-#include <QApplication>
-#include <QGraphicsSceneMouseEvent>
-#include <QGraphicsLinearLayout>
-#include <QDir>
-
-#include <HbMainWindow>
-#include <HbVkbHost>
-
-#include "hsidlewidget.h"
-#include "hsscene.h"
-#include "hspage.h"
-#include "hswidgethost.h"
-#include "hswallpaper.h"
-#include "hstrashbinwidget.h"
-#include "hspageindicator.h"
-#include "hsdocumentloader.h"
-#include "hsconfiguration.h"
-#include "hsapp_defs.h"
-#include "hssnapline.h"
-
-namespace
-{
-    const char gControlLayerDocmlName[] = "controllayer.docml";
-    const char gControlLayerName[]      = "controlLayer";
-    const char gTrashBinName[]          = "trashBin";
-    const char gPageIndicatorName[]     = "pageIndicator";
-}
-
-/*!
-    \class HsIdleWidget
-    \ingroup group_hshomescreenstateplugin
-    \brief View part of the home screen idle state.
-
-    Maintains the idle view ui layers and takes care of
-    receiving user input and communicating it to the idle
-    state for further processing.
-*/
-
-/*!
-    Constructs a new idle widget with the given \a parent.
-*/
-HsIdleWidget::HsIdleWidget(QGraphicsItem *parent)
-  : HbWidget(parent),
-    mControlLayer(0), mPageLayer(0), mPageWallpaperLayer(0),
-    mSceneLayer(0),
-    mTrashBin(0), mPageIndicator(0),
-    mHorizontalSnapLine(0), mVerticalSnapLine(0)
-{
-    setFlag(ItemHasNoContents);
-
-    loadControlLayer();
-
-    QGraphicsLinearLayout *linearLayout = 0;
-
-    linearLayout = new QGraphicsLinearLayout(Qt::Horizontal);
-    linearLayout->setContentsMargins(0, 0, 0, 0);
-    linearLayout->setSpacing(0);
-    mPageLayer = new HbWidget(this);
-    mPageLayer->setLayout(linearLayout);
-    mPageLayer->setZValue(2);
-    
-    linearLayout = new QGraphicsLinearLayout(Qt::Horizontal);
-    linearLayout->setContentsMargins(0, 0, 0, 0);
-    linearLayout->setSpacing(0);
-    mPageWallpaperLayer = new HbWidget(this);
-    mPageWallpaperLayer->setLayout(linearLayout);
-    mPageWallpaperLayer->setZValue(1);
-    
-    linearLayout = new QGraphicsLinearLayout(Qt::Horizontal);
-    linearLayout->setContentsMargins(0, 0, 0, 0);
-    linearLayout->setSpacing(0);
-    mSceneLayer = new HbWidget(this);
-    mSceneLayer->setLayout(linearLayout);
-    mSceneLayer->setZValue(0);
-}
-
-/*!
-    Destroys this idle widget.
-*/
-HsIdleWidget::~HsIdleWidget()
-{
-    QList<HsPage *> pages = HsScene::instance()->pages();
-    foreach (HsPage *page, pages) {
-        page->setParentItem(0);
-        if (page->scene()) {
-            page->scene()->removeItem(page);
-        }
-        HsWallpaper *pageWallpaper = page->wallpaper();
-        if (pageWallpaper) {
-            pageWallpaper->setParentItem(0);
-            if (pageWallpaper->scene()) {
-                pageWallpaper->scene()->removeItem(pageWallpaper);
-            }
-        }
-    }
-
-    HsWallpaper *sceneWallpaper = HsScene::instance()->wallpaper();
-    if (sceneWallpaper) {
-        sceneWallpaper->setParentItem(0);
-        if (sceneWallpaper->scene()) {
-            sceneWallpaper->scene()->removeItem(sceneWallpaper);
-        }
-    }
-}
-
-qreal HsIdleWidget::sceneX() const
-{
-    return mPageLayer->x();
-}
-
-void HsIdleWidget::setSceneX(qreal x)
-{
-    if (HSCONFIGURATION_GET(sceneType) == HsConfiguration::SceneWallpaper) {
-        mPageLayer->setX(x);
-        mSceneLayer->setX((parallaxFactor() * x) - HSCONFIGURATION_GET(bounceEffect) / 2);
-    } else {
-        mPageLayer->setX(x);
-        mPageWallpaperLayer->setX(x);
-    }
-}
-
-/*!
-    Layouts the ui layers according to the given \a rect.
-    If given \a rect has different size than a fullscreen view, rect
-    is lifted up by statuspane height. Normally HsIdleWidget position is 0,0 
-    relative to it's parent container (HbView). This functionality tackles
-    problem caused by HbStackedLayout which sets top most rect for all items 
-    (views) in a stack (not considering fullscreen mode).
-*/
-void HsIdleWidget::setGeometry(const QRectF &rect)
-{
-    
-    int n = HsScene::instance()->pages().count();
-    QRectF layoutRect(HsScene::instance()->mainWindow()->layoutRect());
-    if (layoutRect == rect || (layoutRect.height() == rect.width() && layoutRect.width() == rect.height())) {
-        mControlLayer->resize(rect.size());
-        mPageLayer->resize(n * rect.width(), rect.height());
-        if (HSCONFIGURATION_GET(sceneType) == HsConfiguration::PageWallpapers) {
-            mPageWallpaperLayer->resize(n * rect.width(), rect.height());
-        }
-        mSceneLayer->resize(2 * rect.width() + HSCONFIGURATION_GET(bounceEffect), rect.height());
-        HbWidget::setGeometry(rect);
-    } else {
-        QRectF sceneRect = mapToScene(rect).boundingRect();
-        // HbView is a container item for widget, thus 0,0 is relative to view's position.
-        // Lift rect by offset. Fullscreen view is in 0,0 position in scene coordinates otherwise
-        // it's e.g 0,68 (statuspane being at 0,0 and view at 0,68)
-        sceneRect.setTop(-sceneRect.top());
-        HbWidget::setGeometry(sceneRect);
-    }
-}
-
-/*!
-    Sets the active page \a index to the page
-    indicator.
-*/
-void HsIdleWidget::setActivePage(int index)
-{
-    mPageIndicator->setActiveItemIndex(index);
-}
-
-/*!
-    Inserts the given \a page at index position
-    \a index in the page layer.
-*/
-void HsIdleWidget::insertPage(int index, HsPage *page)
-{
-    QGraphicsLinearLayout *layout =
-        static_cast<QGraphicsLinearLayout *>(mPageLayer->layout());
-    layout->insertItem(index, page);
-    mPageLayer->resize(
-        layout->count() * size().width(), size().height());
-
-    if (HSCONFIGURATION_GET(sceneType) == HsConfiguration::PageWallpapers) {
-        QGraphicsLinearLayout *layout =
-            static_cast<QGraphicsLinearLayout *>(mPageWallpaperLayer->layout());
-        layout->insertItem(index, page->wallpaper());
-        mPageWallpaperLayer->resize(
-            layout->count() * size().width(), size().height());
-    }
-}
-
-/*!
-    Removes the page at index position
-    \a index in the page layer.
-*/
-void HsIdleWidget::removePage(int index)
-{
-    QGraphicsLinearLayout *layout =
-        static_cast<QGraphicsLinearLayout *>(mPageLayer->layout());
-    layout->removeAt(index);
-    mPageLayer->resize(
-        layout->count() * size().width(), size().height());
-
-    if (HSCONFIGURATION_GET(sceneType) == HsConfiguration::PageWallpapers) {
-        QGraphicsLinearLayout *layout =
-            static_cast<QGraphicsLinearLayout *>(mPageWallpaperLayer->layout());
-        layout->removeAt(index);
-        mPageWallpaperLayer->resize(
-            layout->count() * size().width(), size().height());
-    }
-}
-
-/*!
-    \fn HsIdleWidget::controlLayer() const
-
-    Returns the control layer.
-*/
-
-/*!
-    \fn HsIdleWidget::pageLayer() const
-
-    Returns the page layer.
-*/
-
-/*!
-    \fn HsIdleWidget::sceneLayer() const
-
-    Returns the scene layer.
-*/
-
-/*!
-    \fn HsIdleWidget::trashBin() const
-
-    Returns the trashbin widget.
-*/
-
-/*!
-    \fn HsIdleWidget::pageIndicator() const
-
-    Returns the page indicator widget.
-*/
-
-/*!
-    Sets the trashbin visible and hides the page indicator.
-*/
-void HsIdleWidget::showTrashBin()
-{
-    mPageIndicator->hide();
-    mTrashBin->show();
-}
-
-/*!
-    Sets the page indicator visible and hides the trashbin.
-*/
-void HsIdleWidget::showPageIndicator()
-{
-    mTrashBin->hide();
-    mTrashBin->deactivate();
-    mPageIndicator->setSpacing(HSCONFIGURATION_GET(pageIndicatorSpacing)); // for usability optimization widget, can be removed later on
-    mPageIndicator->setVisible(1 < mPageIndicator->itemCount());
-}
-
-/*!
-    Shows the Vertical snapping lines showing the guidance
-*/
-void HsIdleWidget::showVerticalSnapLine(const QLineF &snapLine)
-{
-    QVariantHash snapConfiguration;
-    snapConfiguration[SNAPLINEFADEINDURATION] = QString::number(HSCONFIGURATION_GET(snapLineFadeInDuration));
-    snapConfiguration[SNAPLINEFADEOUTDURATION] = QString::number(HSCONFIGURATION_GET(snapLineFadeOutDuration));
-
-    mVerticalSnapLine->setConfiguration(snapConfiguration);
-    mVerticalSnapLine->showLine(snapLine);
-}
-
-/*!
-    Shows the Horizontal snapping lines showing the guidance
-*/
-void HsIdleWidget::showHorizontalSnapLine(const QLineF &snapLine)
-{
-    QVariantHash snapConfiguration;
-    snapConfiguration[SNAPLINEFADEINDURATION] = QString::number(HSCONFIGURATION_GET(snapLineFadeInDuration));
-    snapConfiguration[SNAPLINEFADEOUTDURATION] = QString::number(HSCONFIGURATION_GET(snapLineFadeOutDuration));
-
-    mHorizontalSnapLine->setConfiguration(snapConfiguration);
-    mHorizontalSnapLine->showLine(snapLine);
-}
-
-/*!
-    Hides the Vertical snapping line showing the guidance
-*/
-void HsIdleWidget::hideVerticalSnapLine()
-{
-    mVerticalSnapLine->hideLine();
-}
-
-/*!
-    Hides the Horizontal snapping line showing the guidance
-*/
-void HsIdleWidget::hideHorizontalSnapLine()
-{
-    mHorizontalSnapLine->hideLine();
-}
-
-/*!
-    Reimplements QGraphicsWidget::polishEvent().
-*/
-void HsIdleWidget::polishEvent()
-{
-    HsScene *scene = HsScene::instance();
-    Q_ASSERT(scene);
-
-    QGraphicsLinearLayout *pageLayout = 
-        static_cast<QGraphicsLinearLayout *>(mPageLayer->layout());
-
-    QList<HsPage *> pages = scene->pages();
-
-    foreach (HsPage *page, pages) {
-        pageLayout->addItem(page);
-        if (HSCONFIGURATION_GET(sceneType) == HsConfiguration::PageWallpapers) {
-            QGraphicsLinearLayout *pageWallpaperLayout = 
-                static_cast<QGraphicsLinearLayout *>(mPageWallpaperLayer->layout());
-            pageWallpaperLayout->addItem(page->wallpaper());
-        }
-    }
-   if (HSCONFIGURATION_GET(sceneType) == HsConfiguration::SceneWallpaper) {
-        QGraphicsLinearLayout *sceneLayout = 
-            static_cast<QGraphicsLinearLayout *>(mSceneLayer->layout());
-    	HsWallpaper *wallpaper = HsScene::instance()->wallpaper();
-        sceneLayout->addItem(wallpaper);
-    }
-           
-    mPageIndicator->initialize(pages.count(), scene->activePageIndex());    
-    showPageIndicator();
-
-    HsScene::mainWindow()->scene()->installEventFilter(this);
-}
-
-/*!
-    Loads the control layer declared in a docml file.
-*/
-void HsIdleWidget::loadControlLayer()
-{
-    HsDocumentLoader loader;
-    bool loaded = false;
-
-#ifndef Q_OS_SYMBIAN
-    QString path = QDir::currentPath();
-#else
-    QString path = "c:";
-#endif
-
-    QString file = path + "/hsresources/" + gControlLayerDocmlName;
-    QString fallbackPath = QString(":/") + gControlLayerDocmlName;
-
-    if (QFile::exists(file)) {
-        loader.load(file, &loaded);
-        if (!loaded) {
-            loader.load(fallbackPath, &loaded);
-        }
-    } else {
-        loader.load(fallbackPath, &loaded);
-    }
-
-    if (loaded) {
-        mControlLayer = qobject_cast<HbWidget *>(loader.findWidget(gControlLayerName));
-        mControlLayer->setZValue(3);
-        mControlLayer->setParentItem(this);
-
-        mTrashBin = qobject_cast<HsTrashBinWidget *>(loader.findWidget(gTrashBinName));
-        mTrashBin->setZValue(1e6);
-
-        mPageIndicator = qobject_cast<HsPageIndicator *>(loader.findWidget(gPageIndicatorName));
-        mPageIndicator->setZValue(1e6);
-
-
-        mHorizontalSnapLine = new HsSnapLine(mControlLayer);
-        mHorizontalSnapLine->setZValue(10);
-
-        mVerticalSnapLine = new HsSnapLine(mControlLayer);
-        mVerticalSnapLine->setZValue(10);
-    } else {
-        // TODO: Handle error.
-    }
-}
-
-qreal HsIdleWidget::parallaxFactor() const
-{   
-    qreal clw = mControlLayer->size().width();
-    qreal slw = mSceneLayer->size().width() - HSCONFIGURATION_GET(bounceEffect);
-    int n = HsScene::instance()->pages().count();
-    if (n < 2) {
-        return 1;
-    } else {
-        return (slw - clw) / ((n - 1) * clw);
-    }
-}