homescreenapp/hsdomainmodel/src/hsscene.cpp
changeset 39 4e8ebe173323
parent 36 cdae8c6c3876
child 46 23b5d6a29cce
--- a/homescreenapp/hsdomainmodel/src/hsscene.cpp	Fri Apr 16 14:54:01 2010 +0300
+++ b/homescreenapp/hsdomainmodel/src/hsscene.cpp	Mon May 03 12:24:59 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* 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"
@@ -15,15 +15,18 @@
 *
 */
 
+#include <QApplication>
+
 #include <HbInstance>
+#include <HbMainWindow>
+#include <HbDeviceProfile>
+
 #include "hsdomainmodeldatastructures.h"
 #include "hsscene.h"
 #include "hspage.h"
 #include "hswidgethost.h"
 #include "hsdatabase.h"
 #include "hswallpaper.h"
-#include "hsdatabase.h"
-
 
 /*!
     Destructor.
@@ -54,6 +57,10 @@
         return false;
     }
 
+    mMaximumPageCount = sceneData.maximumPageCount;
+
+    calculateWidgetSizeLimitations(sceneData);
+
     if (sceneData.portraitWallpaper.isEmpty()) {
         mWallpaper->setImagesById();
     } else {
@@ -81,12 +88,31 @@
             mActivePage->setRemovable(false);
         }
     }
-   
-    mMaximumPageCount = sceneData.maximumPageCount;
+
+    QApplication::instance()->installEventFilter(this);
+
 	return true;
 }
 
 /*!
+    Calculate maximum and minimum widget sizes 
+*/
+void HsScene::calculateWidgetSizeLimitations(HsSceneData &sceneData)
+{
+    // 1un = 6.7px = 2mm
+    mMaximumWidgetSizeInUnits = QSizeF(sceneData.maximumWidgetWidth,
+                                       sceneData.maximumWidgetHeight);
+    mMinimumWidgetSizeInUnits = QSizeF(sceneData.minimumWidgetWidth,
+                                       sceneData.minimumWidgetHeight);
+    HbDeviceProfile profile;
+    qreal unitToPixelFactor = profile.unitValue();
+    mMaximumWidgetSizeInPixels = QSizeF(sceneData.maximumWidgetWidth * unitToPixelFactor,
+                                        sceneData.maximumWidgetHeight * unitToPixelFactor);
+    mMinimumWidgetSizeInPixels = QSizeF(sceneData.minimumWidgetWidth * unitToPixelFactor,
+                                        sceneData.minimumWidgetHeight * unitToPixelFactor);
+}
+
+/*!
     Return wallpaper. 
 */
 HsWallpaper *HsScene::wallpaper() const
@@ -245,6 +271,38 @@
 }
 
 /*!
+    Return maximum widget size in pixels.
+*/
+QSizeF HsScene::maximumWidgetSizeInPixels() const
+{
+    return mMaximumWidgetSizeInPixels;
+}
+
+/*!
+    Return minimum widget size in pixels.
+*/
+QSizeF HsScene::minimumWidgetSizeInPixels() const
+{
+    return mMinimumWidgetSizeInPixels;
+}
+
+/*!
+    Return maximum widget size in units.
+*/
+QSizeF HsScene::maximumWidgetSizeInUnits() const
+{
+    return mMaximumWidgetSizeInUnits;
+}
+
+/*!
+    Return minimum widget size in units.
+*/
+QSizeF HsScene::minimumWidgetSizeInUnits() const
+{
+    return mMinimumWidgetSizeInUnits;
+}
+
+/*!
     Set active widget \a widget.
 */
 void HsScene::setActiveWidget(HsWidgetHost *widget)
@@ -284,13 +342,21 @@
 */
 HsScene *HsScene::instance()
 {
-    if (mInstance.isNull()) {
+    if (!mInstance) {
         mInstance.reset(new HsScene);
     }
     return mInstance.data();
 }
 
 /*!
+    Return main window.
+*/
+HbMainWindow *HsScene::mainWindow()
+{
+    return hbInstance->allMainWindows().first();
+}
+
+/*!
     Return current orientation.
 */
 Qt::Orientation HsScene::orientation()
@@ -299,11 +365,21 @@
 }
 
 /*!
-    Return main window.
+    Listens for application background/foreground changes.
 */
-HbMainWindow *HsScene::mainWindow()
+bool HsScene::eventFilter(QObject *watched, QEvent *event)
 {
-    return hbInstance->allMainWindows().first();
+    switch (event->type()) {
+        case QEvent::ApplicationActivate:
+            mActivePage->showWidgets();
+            break;
+		case QEvent::ApplicationDeactivate:
+            mActivePage->hideWidgets();
+            break;
+        default:
+            break;
+	}
+    return QObject::eventFilter(watched, event);
 }
 
 /*!
@@ -311,13 +387,16 @@
 */
 HsScene::HsScene(QObject *parent)
   : QObject(parent),
-    mDatabaseId(-1),
+    mDatabaseId(-1),    
+    mWallpaper(0),    
+    mActivePage(0),
+    mActiveWidget(0),
     mIsOnline(true),
-    mWallpaper(0),
     mMaximumPageCount(1),
-    mActivePage(0),
-    mActiveWidget(0)
-
+    mMaximumWidgetSizeInPixels(341, 268),
+    mMinimumWidgetSizeInPixels(20, 20),
+    mMaximumWidgetSizeInUnits(51, 40),
+    mMinimumWidgetSizeInUnits(3, 3)
 {
     mWallpaper = new HsWallpaper;
 }