--- 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;
}