# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com> # Date 1271418841 -10800 # Node ID cdae8c6c3876d27efdb3132e1a2f9f9a8f28e0a9 # Parent f9ce957a272c03cdea71697c386a5dcc1950b4c5 Revision: 201011 Kit: 201015 diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/common.pri --- a/homescreenapp/common.pri Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/common.pri Fri Apr 16 14:54:01 2010 +0300 @@ -103,7 +103,7 @@ message(Remove "contains(MOBILITY, serviceframework)" after the QtSF refactorig is done!) !contains(MOBILITY, serviceframework):qtplugins.sources += resource/$${TARGET}.manifest - contains(MOBILITY, serviceframework):BLD_INF_RULES.prj_exports += "resource/$${TARGET}.s60xml z:$$qtplugins.path/$${TARGET}.xml" + contains(MOBILITY, serviceframework):BLD_INF_RULES.prj_exports += "resource/$${TARGET}.xml z:$$qtplugins.path/$${TARGET}.xml" for(qtplugin, qtplugins.sources):BLD_INF_RULES.prj_exports += "./$$qtplugin z:$$qtplugins.path/$$basename(qtplugin)" } diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/examples/contentpublishclient/contentpublishclient.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/examples/contentpublishclient/contentpublishclient.pro Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,41 @@ +# +# 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: Example of home screen content publishing client +# + +TEMPLATE = app + +CONFIG += mobility console debug + +MOBILITY = serviceframework + +HEADERS += ./inc/*.h +SOURCES += ./src/*.cpp + +INCLUDEPATH += ./inc + +QT += xml + +symbian: { + SYMBIAN_PLATFORMS = WINSCW ARMV5 + # this should remove localization for test application + load(hb.prf) + CONFIG -= symbian_i18n + TARGET.UID3 = 0x20022F74 + TARGET.CAPABILITY = CAP_APPLICATION AllFiles TrustedUI + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + LIBS += -lefsrv +} else { + error("Only Symbian supported!") +} \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/examples/contentpublishclient/inc/contentpublishclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/examples/contentpublishclient/inc/contentpublishclient.h Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,39 @@ +/* +* 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: Example of home screen content publishing client +* +*/ + +#include <QObject> + +#include <qservicemanager.h> + +QTM_USE_NAMESPACE + +class ContentPublishClient: public QObject +{ + Q_OBJECT + +public: + ContentPublishClient(QServiceManager &manager, QObject *parent=0 ); + ~ContentPublishClient(); + bool load(); + +public slots: + void addWidget(); + +private: + QObject* mService; + QServiceManager* mManager; +}; \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/examples/contentpublishclient/sis/contentpublishclient.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/examples/contentpublishclient/sis/contentpublishclient.pkg Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,38 @@ +; +; 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: +; + +; Language +&EN + +; SIS header: name, uid, version +#{"contentpublishclient"},(0x20022F74),1,0,0 + +; Localised Vendor name +%{"Vendor"} + +; Unique Vendor name +:"Vendor" + +; Manual PKG pre-rules from PRO files +; Default HW/platform dependencies +[0x101F7961],0,0,0,{"S60ProductID"} +[0x102032BE],0,0,0,{"S60ProductID"} +[0x102752AE],0,0,0,{"S60ProductID"} +[0x1028315F],0,0,0,{"S60ProductID"} + +"/epoc32/release/armv5/urel/contentpublishclient.exe" - "c:/sys/bin/contentpublishclient.exe" +"/epoc32/data/z/private/10003a3f/import/apps/contentpublishclient_reg.rsc" - "c:/private/10003a3f/import/apps/contentpublishclient_reg.rsc" +"/epoc32/data/z/resource/apps/contentpublishclient.rsc" - "c:/resource/apps/contentpublishclient.rsc" diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/examples/contentpublishclient/src/contentpublishclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/examples/contentpublishclient/src/contentpublishclient.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,97 @@ +/* +* 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: Example of home screen content publishing client +* +*/ + +#include <qservicefilter.h> +#include <qserviceinterfacedescriptor.h> + +#include <QMetaObject> +#include <QMetaMethod> + +#include "contentpublishclient.h" + +/*! + \ingroup group_content_publish_client + \class ContentPublishClient + \brief Example implementation for home screen content publish client. + + ContentPublishClient is derived from QObject and implements + needed functions for the home screen content publish client. +*/ + +/*! + Constructor. +*/ +ContentPublishClient::ContentPublishClient(QServiceManager &manager, QObject *parent) + : QObject(parent), + mManager(&manager) +{ +} + +/*! + Destructor +*/ +ContentPublishClient::~ContentPublishClient() +{ +} + +/*! + Loads service interface +*/ +bool ContentPublishClient::load() +{ + QServiceFilter filter("com.nokia.symbian.IHomeScreenClient"); + filter.setServiceName("hshomescreenclientplugin"); + QList<QServiceInterfaceDescriptor> interfaces = mManager->findInterfaces(filter); + + if(interfaces.isEmpty()) { + QServiceManager::Error error = mManager->error(); + return false; + } + qDebug() << interfaces.first().interfaceName() + << interfaces.first().serviceName() + << interfaces.first().isValid(); + + mService = mManager->loadInterface(interfaces.first()); + + return (mService); +} + +/*! + Adds widget utilizing service interface and invoke call +*/ +void ContentPublishClient::addWidget() +{ + QByteArray signature = QMetaObject::normalizedSignature("addWidget(QString,QVariantHash)"); + int methodIndex = mService->metaObject()->indexOfMethod(signature); + QMetaMethod method = mService->metaObject()->method(methodIndex); + bool retVal(false); + + QString widget = "hsclockwidgetplugin"; + + bool ret = method.invoke( mService, + Qt::DirectConnection, + Q_RETURN_ARG(bool, retVal), + Q_ARG(QString,widget), + Q_ARG(QVariantHash,QVariantHash())); + + if(!ret){ + qDebug()<< "method invoke failed!"; + } + if(!retVal){ + qDebug() << "addWidget() failed!!"; + } +} diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/examples/contentpublishclient/src/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/examples/contentpublishclient/src/main.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,64 @@ +/* +* 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: Example of home screen content publishing client +* +*/ + +#include <HbApplication> +#include <HbMainWindow> +#include <HbView> +#include <HbPushButton> + +#include <QDir> + +#include "contentpublishclient.h" + +int main(int argc, char *argv[]) +{ + // Initialization + HbApplication app(argc, argv); + + QString path = QDir::toNativeSeparators(QDir("z:\\hsresources\\plugins\\homescreenclientplugin\\").absolutePath()); + QString fullFileName = path + "\\hshomescreenclientplugin.xml"; + + QServiceManager manager; + + if(QFile::exists(fullFileName)) { + QCoreApplication::addLibraryPath(path); + manager.addService(fullFileName); + } + + // Create main window. + HbMainWindow* mainWindow = new HbMainWindow(); + + // Create content publisher client + ContentPublishClient contentPublishClient(manager); + + QString buttonString = "Create widget"; + if(!contentPublishClient.load()) { + buttonString = "Open failed"; + } + + HbPushButton* button = new HbPushButton(buttonString); + + // Add view + mainWindow->addView(button); + + contentPublishClient.connect(button, SIGNAL(pressed()), SLOT(addWidget())); + + // Show main window + mainWindow->show(); + + return app.exec(); +} diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/examples/helloworldwidgetplugin/helloworldwidgetplugin/helloworldwidgetplugin.pro --- a/homescreenapp/examples/helloworldwidgetplugin/helloworldwidgetplugin/helloworldwidgetplugin.pro Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/examples/helloworldwidgetplugin/helloworldwidgetplugin/helloworldwidgetplugin.pro Fri Apr 16 14:54:01 2010 +0300 @@ -21,14 +21,11 @@ HEADERS += ./inc/*.h SOURCES += ./src/*.cpp -DESTDIR = $${EPOCROOT}epoc32/data/c/private/20022F35/import/widgetregistry/20022F7E -win32: PLUGIN_SUBDIR = /hsresources/import/widgetregistry/20022F7E -symbian: PLUGIN_SUBDIR = /private/20022F35/import/widgetregistry/20022F7E -include(../../../common.pri) - INCLUDEPATH += ./inc symbian: { + + DESTDIR = /private/20022F35/import/widgetregistry/20022F7E INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE TARGET.UID3 = 0x20022F7E @@ -36,18 +33,32 @@ TARGET.CAPABILITY = ALL -TCB plugins.path = $${DESTDIR} - plugins.sources = $${TARGET}.dll + plugins.sources = $${TARGET}.dll widgetResources.path = $${DESTDIR} widgetResources.sources += resource/$${TARGET}.xml widgetResources.sources += resource/$${TARGET}.manifest widgetResources.sources += resource/$${TARGET}.png - + DEPLOYMENT += plugins \ widgetResources } +win32: { -exportResources(./resource/*.manifest, $$PLUGIN_SUBDIR) -exportResources(./resource/*.png, $$PLUGIN_SUBDIR) -exportResources(./resource/*.xml, $$PLUGIN_SUBDIR) + CONFIG(debug, debug|release) { + SUBDIRPART = debug + } else { + SUBDIRPART = release + } + + PLUGIN_SUBDIR = /hsresources/import/widgetregistry/20022F7E + + DESTDIR = $$PWD/../../../../../bin/$${SUBDIRPART}/$${PLUGIN_SUBDIR} + + manifest.path = $${DESTDIR} + manifest.files = ./resource/*.manifest ./resource/*.xml ./resource/*.png + + INSTALLS += manifest + +} diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/examples/helloworldwidgetplugin/helloworldwidgetplugin/resource/helloworldwidgetplugin.s60xml --- a/homescreenapp/examples/helloworldwidgetplugin/helloworldwidgetplugin/resource/helloworldwidgetplugin.s60xml Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<service> - <name>helloworldwidgetplugin</name> - <filepath>c:/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.qtplugin</filepath> - <description>Example widget</description> - <interface> - <name>com.nokia.IHomeScreenWidget</name> - <version>1.0</version> - <description>Example of home screen widget</description> - <capabilities></capabilities> - <customproperty key="iconuri">helloworldwidgetplugin.png</customproperty> - <customproperty key="title">HelloWorld</customproperty> - </interface> -</service> diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/examples/helloworldwidgetplugin/helloworldwidgetplugin/resource/helloworldwidgetplugin.xml --- a/homescreenapp/examples/helloworldwidgetplugin/helloworldwidgetplugin/resource/helloworldwidgetplugin.xml Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/examples/helloworldwidgetplugin/helloworldwidgetplugin/resource/helloworldwidgetplugin.xml Fri Apr 16 14:54:01 2010 +0300 @@ -4,7 +4,7 @@ <filepath>helloworldwidgetplugin</filepath> <description>Example widget</description> <interface> - <name>com.nokia.IHomeScreenWidget</name> + <name>com.nokia.symbian.IHomeScreenWidget</name> <version>1.0</version> <description>Example of home screen widget</description> <capabilities></capabilities> diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/examples/helloworldwidgetplugin/helloworldwidgetplugin/resource/helloworldwidgetplugin.xml_for_sisx --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/examples/helloworldwidgetplugin/helloworldwidgetplugin/resource/helloworldwidgetplugin.xml_for_sisx Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<service> + <name>helloworldwidgetplugin</name> + <filepath>c:/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.qtplugin</filepath> + <description>Example widget</description> + <interface> + <name>com.nokia.symbian.IHomeScreenWidget</name> + <version>1.0</version> + <description>Example of home screen widget</description> + <capabilities></capabilities> + <customproperty key="iconuri">helloworldwidgetplugin.png</customproperty> + <customproperty key="title">HelloWorld</customproperty> + </interface> +</service> diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/examples/helloworldwidgetplugin/helloworldwidgetplugin/src/helloworldwidgetplugin.cpp --- a/homescreenapp/examples/helloworldwidgetplugin/helloworldwidgetplugin/src/helloworldwidgetplugin.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/examples/helloworldwidgetplugin/helloworldwidgetplugin/src/helloworldwidgetplugin.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -62,7 +62,7 @@ <filepath>helloworldwidgetplugin</filepath> <description>Example widget</description> <interface> - <name>com.nokia.IHomeScreenWidget</name> + <name>com.nokia.symbian.IHomeScreenWidget</name> <version>1.0</version> <description>Example of home screen widget</description> <capabilities></capabilities> @@ -88,9 +88,9 @@ CONFIG += plugin mobility hb MOBILITY = serviceframework - HEADERS += ./inc/*.h - SOURCES += ./src/*.cpp - + HEADERS += ./inc/ .h + SOURCES += ./src/ .cpp + DESTDIR = $${EPOCROOT}epoc32/data/c/private/20022F35/import/widgetregistry/20022F7E INCLUDEPATH += ./inc @@ -136,7 +136,7 @@ Q_UNUSED(context); Q_UNUSED(session); - if (descriptor.interfaceName() == QLatin1String("com.nokia.IHomeScreenWidget")) { + if (descriptor.interfaceName() == QLatin1String("com.nokia.symbian.IHomeScreenWidget")) { return new HelloWorldWidget(); } else { return 0; diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/examples/helloworldwidgetplugin/sis/helloworldwidgetplugin.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/examples/helloworldwidgetplugin/sis/helloworldwidgetplugin.bat Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,30 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem +@echo off + +if exist helloworldwidgetplugin.sisx del helloworldwidgetplugin.sisx + +makesis helloworldwidgetplugin.pkg +signsis helloworldwidgetplugin.sis helloworldwidgetplugin.sisx ../../../sis/rd.cer ../../../sis/rd-key.pem + +if exist helloworldwidgetplugin.sisx ( +echo helloworldwidgetplugin.sisx creation SUCCEEDED +del helloworldwidgetplugin.sis +) + +if not exist helloworldwidgetplugin.sisx ( +echo helloworldwidgetplugin.sisx creation FAILED +) \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/examples/helloworldwidgetplugin/sis/helloworldwidgetplugin.pkg --- a/homescreenapp/examples/helloworldwidgetplugin/sis/helloworldwidgetplugin.pkg Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/examples/helloworldwidgetplugin/sis/helloworldwidgetplugin.pkg Fri Apr 16 14:54:01 2010 +0300 @@ -34,9 +34,9 @@ [0x1028315F],0,0,0,{"S60ProductID"} "/epoc32/release/armv5/urel/helloworldwidgetplugin.dll" - "c:/sys/bin/helloworldwidgetplugin.dll" -"/epoc32/data/c/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.qtplugin" - "c:/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.qtplugin" -"/epoc32/data/c/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.manifest" - "c:/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.manifest" -"/epoc32/data/c/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.xml" - "c:/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.xml" -"/epoc32/data/c/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.png" - "c:/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.png" +"/epoc32/data/z/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.qtplugin" - "c:/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.qtplugin" +"/epoc32/data/z/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.manifest" - "c:/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.manifest" +"../helloworldwidgetplugin/resource/helloworldwidgetplugin.xml_for_sisx" - "c:/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.xml" +"/epoc32/data/z/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.png" - "c:/private/20022F35/import/widgetregistry/20022F7E/helloworldwidgetplugin.png" "/epoc32/release/armv5/urel/helloworldwidgetplugininstaller.exe" - "c:/sys/bin/helloworldwidgetplugininstaller.exe", FR, RB, RW diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/homescreenapp.pro --- a/homescreenapp/homescreenapp.pro Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/homescreenapp.pro Fri Apr 16 14:54:01 2010 +0300 @@ -23,8 +23,11 @@ stateplugins \ widgetplugins \ hsapplication \ - hscontentpublishplugin \ - ./../tsrc + hsmenucontentpublish + +symbian:SUBDIRS += hshomescreenclientplugin + +SUBDIRS += ./../tsrc CONFIG += ordered diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/base/confml/data.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/base/confml/data.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2" name="data"> + <confml:data> + <confml:HomeScreenDbSettings> + <confml:landscapeWallpaper/> + <confml:portraitWallpaper/> + <confml:maximumPageCount>8</confml:maximumPageCount> + <confml:defaultPageId map="HomeScreenDbSettings/Pages[@key='1']"/> + <confml:Widgets extensionPolicy="replace"><confml:id>1</confml:id><confml:uri>hsclockwidgetplugin</confml:uri><confml:pageId>1</confml:pageId></confml:Widgets> + <confml:Widgets><confml:id>2</confml:id><confml:uri>hsdialerwidgetplugin</confml:uri><confml:pageId>1</confml:pageId></confml:Widgets> + <confml:Pages extensionPolicy="replace"><confml:id>1</confml:id><confml:indexPosition>0</confml:indexPosition></confml:Pages> + <confml:Pages><confml:id>2</confml:id><confml:indexPosition>1</confml:indexPosition></confml:Pages> + <confml:Pages><confml:id>3</confml:id><confml:indexPosition>2</confml:indexPosition></confml:Pages> + <confml:WidgetPresentations extensionPolicy="append"><confml:key>portrait</confml:key><confml:x>15</confml:x><confml:y>80</confml:y><confml:width>150</confml:width><confml:height>150</confml:height><confml:zValue>0.0</confml:zValue><confml:widgetId map="HomeScreenDbSettings/Widgets[@key='1']"></confml:widgetId></confml:WidgetPresentations> + <confml:WidgetPresentations><confml:key>landscape</confml:key><confml:x>15</confml:x><confml:y>80</confml:y><confml:width>150</confml:width><confml:height>150</confml:height><confml:zValue>0.0</confml:zValue><confml:widgetId map="HomeScreenDbSettings/Widgets[@key='1']"></confml:widgetId></confml:WidgetPresentations> + <confml:WidgetPresentations><confml:key>portrait</confml:key><confml:x>136</confml:x><confml:y>276</confml:y><confml:width>81</confml:width><confml:height>81</confml:height><confml:zValue>0.0</confml:zValue><confml:widgetId map="HomeScreenDbSettings/Widgets[@key='2']"></confml:widgetId></confml:WidgetPresentations> + <confml:WidgetPresentations><confml:key>landscape</confml:key><confml:x>136</confml:x><confml:y>176</confml:y><confml:width>81</confml:width><confml:height>81</confml:height><confml:zValue>0.0</confml:zValue><confml:widgetId map="HomeScreenDbSettings/Widgets[@key='2']"></confml:widgetId></confml:WidgetPresentations> + <confml:WidgetPreferences extensionPolicy="replace"><confml:key>clockType</confml:key><confml:value>Analog</confml:value><confml:widgetId>1</confml:widgetId></confml:WidgetPreferences> + </confml:HomeScreenDbSettings> + </confml:data> +</confml:configuration> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/base/confml/homescreen_view.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/base/confml/homescreen_view.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2"> + <confml:view name="HomeScreen customisation view"> + <confml:group name="HomeScreen customisation"> + <confml:desc>HomeScreen specific customisation</confml:desc> + <confml:group name="Scene settings"> + <confml:desc>scene specific settings</confml:desc> + <confml:setting ref="HomeScreenDbSettings/portraitWallpaper"/> + <confml:setting ref="HomeScreenDbSettings/landscapeWallpaper"/> + <confml:setting ref="HomeScreenDbSettings/maximumPageCount"/> + <confml:setting ref="HomeScreenDbSettings/defaultPageId"/> + </confml:group> + <confml:group name="Pages"> + <confml:desc>Sample Description</confml:desc> + <confml:setting ref="HomeScreenDbSettings/Pages"/> + </confml:group> + <confml:group name="HomeScreen widgets"> + <confml:desc>HomeScreen specific widgets</confml:desc> + <confml:setting ref="HomeScreenDbSettings/Widgets"/> + <confml:setting ref="HomeScreenDbSettings/WidgetPreferences"/> + <confml:setting ref="HomeScreenDbSettings/WidgetPresentations"/> + </confml:group> + </confml:group> + </confml:view> +</confml:configuration> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/base/confml/homescreendb.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/base/confml/homescreendb.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2" name="HomeScreen database settings"> + <confml:feature ref="HomeScreenDbSettings" name="HomeScreen database settings"> + <confml:setting ref="portraitWallpaper" name="Portrait wallpaper" type="string"/> + <confml:setting ref="landscapeWallpaper" name="Landscape wallpaper" type="string"/> + <confml:setting ref="maximumPageCount" name="Maximum number of pages" type="int"/> + <confml:setting ref="defaultPageId" name="Default page ID" type="selection"> <confml:option map="HomeScreenDbSettings/Pages"/> + </confml:setting> + <confml:setting ref="Pages" mapKey="id" mapValue="id" name="Pages" type="sequence"> + <confml:setting ref="id" name="ID" type="int"/> + <confml:setting ref="indexPosition" name="Index Position" type="int"/> + </confml:setting> + <confml:setting ref="Widgets" mapKey="id" mapValue="id" name="Widgets" type="sequence"> + <confml:setting ref="id" name="ID" type="int"/> + <confml:setting ref="uri" name="URI" type="string"/> + <confml:setting ref="pageId" name="Page ID" type="selection"> + <confml:option map="HomeScreenDbSettings/Pages"/> + </confml:setting> + </confml:setting> + <confml:setting ref="WidgetPresentations" name="Widget presentations" type="sequence"> + <confml:setting ref="key" name="Key" type="string"/> + <confml:setting ref="x" name="X position" type="real"/> + <confml:setting ref="y" name="Y position" type="real"/> + <confml:setting ref="width" name="Width" type="real"/> + <confml:setting ref="height" name="Height" type="real"/> + <confml:setting ref="zValue" name="Z value" type="real"/> + <confml:setting ref="widgetId" name="Widget ID" type="selection"> + <confml:option map="HomeScreenDbSettings/Widgets"/> + </confml:setting> + </confml:setting> + <confml:setting ref="WidgetPreferences" name="Widget preferences" type="sequence"> + <confml:setting ref="key" name="Key" type="string"/> + <confml:setting ref="value" name="Value" type="string"/> + <confml:setting ref="widgetId" name="Widget ID" type="selection"> + <confml:option map="HomeScreenDbSettings/Widgets"/> + </confml:setting> + </confml:setting> + </confml:feature> +</confml:configuration> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/base/implml/homescreendb.implml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/base/implml/homescreendb.implml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<container xmlns="http://www.symbianfoundation.org/xml/implml/1"> + <tag name="target" value="rofs3"/> + + <!-- + Override the setting refs so that modifying HomeScreenDbSettings + causes the execution of both the TemplateML and CommandML + implementations. Otherwise the TemplateML implementation would be + executed only if the settings have been changed, and the CommandML + implementation would be executed every time. + --> + <settingRefsOverride> + <settingRef value="HomeScreenDbSettings"/> + </settingRefsOverride> + + <!-- TemplateML implementation to create the .sql files --> + <templateml xmlns="http://www.s60.com/xml/templateml/1"> + <output dir="private/20022f35/sql/" file="create.sql" encoding="UTF-8"> + <template file="homescreendb_templates/create.sql"></template> + </output> + <output dir="private/20022f35/sql/" file="fill.sql" encoding="UTF-8"> + <template file="homescreendb_templates/fill.sql"/> + </output> + </templateml> + + <!-- CommandML implementation to create the database using the .sql files --> + <commandml xmlns="http://www.s60.com/xml/commandml/1"> + <command executable="sqlite3" shell="true" cwd="%CONE_OUT_ABSOLUTE%/private/20022f35/sql"> + <argument value='../homescreen.db ".read create.sql"'/> + </command> + <command executable="sqlite3" shell="true" cwd="%CONE_OUT_ABSOLUTE%/private/20022f35/sql"> + <argument value='../homescreen.db ".genfkey --exec"'/> + </command> + <command executable="sqlite3" shell="true" cwd="%CONE_OUT_ABSOLUTE%/private/20022f35/sql"> + <argument value='../homescreen.db ".read fill.sql"'/> + </command> + </commandml> +</container> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/base/implml/homescreendb_templates/create.sql --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/base/implml/homescreendb_templates/create.sql Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,38 @@ +DROP TABLE IF EXISTS Scene; +CREATE TABLE Scene ( + id INTEGER PRIMARY KEY, + portraitWallpaper TEXT, + landscapeWallpaper TEXT, + defaultPageId INTEGER, + maximumPageCount INTEGER); + +DROP TABLE IF EXISTS Pages; +CREATE TABLE Pages ( + id INTEGER PRIMARY KEY, + indexPosition INTEGER); + +DROP TABLE IF EXISTS Widgets; +CREATE TABLE Widgets ( + id INTEGER PRIMARY KEY, + uri TEXT, + pageId INTEGER); + +DROP TABLE IF EXISTS WidgetPresentations; +CREATE TABLE WidgetPresentations ( + key TEXT, + x REAL, + y REAL, + width REAL, + height REAL, + zValue REAL, + widgetId INTEGER, + UNIQUE(widgetId, key) ON CONFLICT REPLACE, + FOREIGN KEY(widgetId) REFERENCES Widgets(id) ON DELETE CASCADE); + +DROP TABLE IF EXISTS WidgetPreferences; +CREATE TABLE WidgetPreferences ( + key TEXT, + value TEXT, + widgetId INTEGER, + UNIQUE(widgetId, key) ON CONFLICT REPLACE, + FOREIGN KEY(widgetId) REFERENCES Widgets(id) ON DELETE CASCADE); diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/base/implml/homescreendb_templates/fill.sql --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/base/implml/homescreendb_templates/fill.sql Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,39 @@ +{%- set portraitWallpaper = feat_tree.HomeScreenDbSettings.portraitWallpaper._value or '' -%} +{%- set landscapeWallpaper = feat_tree.HomeScreenDbSettings.landscapeWallpaper._value or '' -%} +{%- set defaultPageId = feat_tree.HomeScreenDbSettings.defaultPageId._value -%} +{%- set maximumPageCount = feat_tree.HomeScreenDbSettings.maximumPageCount._value -%} +INSERT INTO Scene (portraitWallpaper, landscapeWallpaper, defaultPageId, maximumPageCount) VALUES ('{{portraitWallpaper}}', '{{landscapeWallpaper}}', {{defaultPageId}}, {{maximumPageCount}}); + +{% for index in range(feat_tree.HomeScreenDbSettings.Pages._value|length) -%} + {%- set id = feat_tree.HomeScreenDbSettings.Pages.id._value[index] -%} + {%- set indexPosition = feat_tree.HomeScreenDbSettings.Pages.indexPosition._value[index] -%} + INSERT INTO Pages (id, indexPosition) VALUES ({{id}}, {{indexPosition}}); +{% endfor %} + +{% for index in range(feat_tree.HomeScreenDbSettings.Widgets._value|length) -%} + {%- set id = feat_tree.HomeScreenDbSettings.Widgets.id._value[index] -%} + {%- set uri = feat_tree.HomeScreenDbSettings.Widgets.uri._value[index] or '' -%} + {%- set pageId = feat_tree.HomeScreenDbSettings.Widgets.pageId._value[index] -%} + + INSERT INTO Widgets (id, uri, pageId) VALUES ({{id}}, '{{uri}}', {{pageId}}); +{% endfor %} + +{% for index in range(feat_tree.HomeScreenDbSettings.WidgetPresentations._value|length) -%} + {%- set key = feat_tree.HomeScreenDbSettings.WidgetPresentations.key._value[index] or '' -%} + {%- set x = feat_tree.HomeScreenDbSettings.WidgetPresentations.x._value[index] -%} + {%- set y = feat_tree.HomeScreenDbSettings.WidgetPresentations.y._value[index] -%} + {%- set width = feat_tree.HomeScreenDbSettings.WidgetPresentations.width._value[index] -%} + {%- set height = feat_tree.HomeScreenDbSettings.WidgetPresentations.height._value[index] -%} + {%- set zValue = feat_tree.HomeScreenDbSettings.WidgetPresentations.zValue._value[index] -%} + {%- set widgetId = feat_tree.HomeScreenDbSettings.WidgetPresentations.widgetId._value[index] -%} + + INSERT INTO WidgetPresentations (key, x, y, width, height, zValue, widgetId) VALUES ('{{key}}', {{x}}, {{y}}, {{width}}, {{height}}, {{zValue}}, {{widgetId}}); +{% endfor %} + +{% for index in range(feat_tree.HomeScreenDbSettings.WidgetPreferences._value|length) -%} + {%- set key = feat_tree.HomeScreenDbSettings.WidgetPreferences.key._value[index] or '' -%} + {%- set value = feat_tree.HomeScreenDbSettings.WidgetPreferences.value._value[index] -%} + {%- set widgetId = feat_tree.HomeScreenDbSettings.WidgetPreferences.widgetId._value[index] -%} + + INSERT INTO WidgetPreferences (key, value, widgetId) VALUES ('{{key}}', '{{value}}', {{widgetId}}); +{% endfor %} diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/base/root.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/base/root.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xmlns:xi="http://www.w3.org/2001/XInclude" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2 http://www.w3.org/2001/XInclude http://www.s60.com/xml/confml/1#//include"> + <xi:include href="confml/homescreendb.confml"/> + <xi:include href="confml/homescreen_view.confml"/> + <xi:include href="confml/data.confml"/> +</confml:configuration> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/product_1/confml/data.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/product_1/confml/data.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2" name="data"> + <confml:data> + <confml:HomeScreenDbSettings> + <confml:DefaultPageId map="HomeScreenDbSettings/Pages[@key='1']"/> + <confml:LandscapeWallpaper></confml:LandscapeWallpaper> + <confml:PortraitWallpaper></confml:PortraitWallpaper> + <confml:Pages extensionPolicy="replace"><confml:Id>1</confml:Id><confml:PageIndex>0</confml:PageIndex></confml:Pages> + <confml:Pages><confml:Id>2</confml:Id><confml:PageIndex>1</confml:PageIndex></confml:Pages> + <confml:Pages><confml:Id>3</confml:Id><confml:PageIndex>2</confml:PageIndex></confml:Pages> + <confml:Widgets extensionPolicy="replace"><confml:Id>1</confml:Id><confml:Uri>hsclockwidgetplugin</confml:Uri><confml:PageId>1</confml:PageId></confml:Widgets> + <confml:Widgets><confml:Id>2</confml:Id><confml:Uri>hsdialerwidgetplugin</confml:Uri><confml:PageId>1</confml:PageId></confml:Widgets> + <confml:WidgetPreferences extensionPolicy="replace"><confml:Key>clockType</confml:Key><confml:Value>Analog</confml:Value><confml:WidgetId>1</confml:WidgetId></confml:WidgetPreferences> + <confml:WidgetPresentations extensionPolicy="append"><confml:Key>portrait</confml:Key><confml:XPosition>27</confml:XPosition><confml:YPosition>92</confml:YPosition><confml:Width>167.5</confml:Width><confml:Height>167.5</confml:Height><confml:ZValue>0.0</confml:ZValue><confml:WidgetId map="HomeScreenDbSettings/Widgets[@key='1']"></confml:WidgetId></confml:WidgetPresentations> + <confml:WidgetPresentations><confml:Key>landscape</confml:Key><confml:XPosition>10</confml:XPosition><confml:YPosition>75</confml:YPosition><confml:Width>150</confml:Width><confml:Height>150</confml:Height><confml:ZValue>0.0</confml:ZValue><confml:WidgetId map="HomeScreenDbSettings/Widgets[@key='1']"></confml:WidgetId></confml:WidgetPresentations> + <confml:WidgetPresentations><confml:Key>portrait</confml:Key><confml:XPosition>136</confml:XPosition><confml:YPosition>276</confml:YPosition><confml:Width>81</confml:Width><confml:Height>81</confml:Height><confml:ZValue>0.0</confml:ZValue><confml:WidgetId map="HomeScreenDbSettings/Widgets[@key='2']"></confml:WidgetId></confml:WidgetPresentations> + <confml:WidgetPresentations><confml:Key>landscape</confml:Key><confml:XPosition>136</confml:XPosition><confml:YPosition>176</confml:YPosition><confml:Width>81</confml:Width><confml:Height>81</confml:Height><confml:ZValue>0.0</confml:ZValue><confml:WidgetId map="HomeScreenDbSettings/Widgets[@key='2']"></confml:WidgetId></confml:WidgetPresentations> + </confml:HomeScreenDbSettings> + </confml:data> +</confml:configuration> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/product_1/root.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/product_1/root.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xmlns:xi="http://www.w3.org/2001/XInclude" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2 http://www.w3.org/2001/XInclude http://www.s60.com/xml/confml/1#//include"> + <xi:include href="confml/data.confml"/> +</confml:configuration> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/product_1_root.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/product_1_root.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xmlns:xi="http://www.w3.org/2001/XInclude" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2 http://www.w3.org/2001/XInclude http://www.s60.com/xml/confml/1#//include"> + <xi:include href="base/root.confml"/> + <xi:include href="product_1/root.confml"/> +</confml:configuration> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/product_2/root.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/product_2/root.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2"/> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/product_2_root.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/product_2_root.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xmlns:xi="http://www.w3.org/2001/XInclude" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2 http://www.w3.org/2001/XInclude http://www.s60.com/xml/confml/1#//include"> + <xi:include href="base/root.confml"/> + <xi:include href="product_2/root.confml"/> +</confml:configuration> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/root.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/root.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xmlns:xi="http://www.w3.org/2001/XInclude" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2 http://www.w3.org/2001/XInclude http://www.s60.com/xml/confml/1#//include"> + <xi:include href="base/root.confml"/> +</confml:configuration> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/variant_1_of_product_1/root.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/variant_1_of_product_1/root.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2"/> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/variant_1_of_product_1_root.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/variant_1_of_product_1_root.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xmlns:xi="http://www.w3.org/2001/XInclude" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2 http://www.w3.org/2001/XInclude http://www.s60.com/xml/confml/1#//include"> + <xi:include href="base/root.confml"/> + <xi:include href="product_1/root.confml"/> + <xi:include href="variant_1_of_product_1/root.confml"/> +</confml:configuration> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/variant_2_of_product_1/root.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/variant_2_of_product_1/root.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2"/> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/variant_2_of_product_1_root.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/variant_2_of_product_1_root.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xmlns:xi="http://www.w3.org/2001/XInclude" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2 http://www.w3.org/2001/XInclude http://www.s60.com/xml/confml/1#//include"> + <xi:include href="base/root.confml"/> + <xi:include href="product_1/root.confml"/> + <xi:include href="variant_2_of_product_1/root.confml"/> +</confml:configuration> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/variant_3_of_product_1/root.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/variant_3_of_product_1/root.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2"/> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/variant_3_of_product_1_root.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/variant_3_of_product_1_root.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xmlns:xi="http://www.w3.org/2001/XInclude" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2 http://www.w3.org/2001/XInclude http://www.s60.com/xml/confml/1#//include"> + <xi:include href="base/root.confml"/> + <xi:include href="product_1/root.confml"/> + <xi:include href="variant_3_of_product_1/root.confml"/> +</confml:configuration> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/variant_4_of_product_1/root.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/variant_4_of_product_1/root.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2"/> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/variant_4_of_product_1_root.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/variant_4_of_product_1_root.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xmlns:xi="http://www.w3.org/2001/XInclude" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2 http://www.w3.org/2001/XInclude http://www.s60.com/xml/confml/1#//include"> + <xi:include href="base/root.confml"/> + <xi:include href="product_1/root.confml"/> + <xi:include href="variant_4_of_product_1/root.confml"/> +</confml:configuration> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/variant_5_of_product_1/root.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/variant_5_of_product_1/root.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2"/> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/conf/variant_5_of_product_1_root.confml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/conf/variant_5_of_product_1_root.confml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xmlns:xi="http://www.w3.org/2001/XInclude" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2 http://www.w3.org/2001/XInclude http://www.s60.com/xml/confml/1#//include"> + <xi:include href="base/root.confml"/> + <xi:include href="product_1/root.confml"/> + <xi:include href="variant_5_of_product_1/root.confml"/> +</confml:configuration> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/hsapplication.pri --- a/homescreenapp/hsapplication/hsapplication.pri Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsapplication/hsapplication.pri Fri Apr 16 14:54:01 2010 +0300 @@ -14,5 +14,10 @@ # Description: # -HEADERS += ./inc/*.h -SOURCES += ./src/*.cpp +HEADERS += ./inc/hshomescreen.h +SOURCES += ./src/hshomescreen.cpp \ + ./src/main.cpp +symbian:{ + HEADERS += ./inc/hshomescreenclientserviceprovider.h + SOURCES += ./src/hshomescreenclientserviceprovider.cpp +} diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/hsapplication.pro --- a/homescreenapp/hsapplication/hsapplication.pro Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsapplication/hsapplication.pro Fri Apr 16 14:54:01 2010 +0300 @@ -18,7 +18,7 @@ include(../common.pri) -LIBS += -lhsutils +LIBS += -lhsutils -lhsdomainmodel CONFIG += console QT += xml @@ -34,7 +34,8 @@ INCLUDEPATH += . \ ./inc \ - ../hsutils/inc + ../hsutils/inc \ + ../hsdomainmodel/inc TRANSLATIONS = homescreen.ts @@ -49,6 +50,11 @@ appkey:DEFINES += S60APP_KEY LIBS += -lefsrv include(installs_symbian.pri) + + CONFIG += service + LIBS += -lxqservice -lxqserviceutil + + SERVICE.FILE = ipc_service_conf.xml } win32: { diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/inc/hshomescreen.h --- a/homescreenapp/hsapplication/inc/hshomescreen.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsapplication/inc/hshomescreen.h Fri Apr 16 14:54:01 2010 +0300 @@ -20,11 +20,20 @@ #include <QObject> #include "hstest_global.h" +#ifdef Q_OS_SYMBIAN +#include "hshomescreenclientserviceprovider.h" +#endif HOMESCREEN_TEST_CLASS(t_hsapplication) class QStateMachine; +namespace QtMobility { + class QServiceManager; +} +using QtMobility::QServiceManager; + + class HsHomeScreen : public QObject { Q_OBJECT @@ -44,8 +53,8 @@ bool eventFilter(QObject *watched, QEvent *event); private: - void registerServicePlugins(); - void registerServicePlugins(const QString &root); + void registerServicePlugins(QServiceManager &serviceManager); + void registerServicePlugins(const QString &root, QServiceManager &serviceManager); private slots: void onRuntimeStarted(); @@ -56,7 +65,10 @@ private: QStateMachine *mRuntime; - +#ifdef Q_OS_SYMBIAN + //Service provider for QtHighway + HsHomeScreenClientServiceProvider *mHomeScreenClientServiceProvider; +#endif HOMESCREEN_TEST_FRIEND_CLASS(t_hsapplication) }; diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/inc/hshomescreenclientserviceprovider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/inc/hshomescreenclientserviceprovider.h Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,39 @@ +/* +* 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 HSHOMESCREENCLIENTSERVICEPROVIDER_H +#define HSHOMESCREENCLIENTSERVICEPROVIDER_H + +#include <xqserviceprovider.h> +#include <QVariant> + +class HsHomeScreenClientServiceProvider : public XQServiceProvider +{ + Q_OBJECT +public: + HsHomeScreenClientServiceProvider( QObject *parent = 0 ); + ~HsHomeScreenClientServiceProvider(); + + +public slots: + bool addWidget(const QString &uri,const QVariantHash &preferences); + +private: + +}; + +#endif diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/installs_symbian.pri --- a/homescreenapp/hsapplication/installs_symbian.pri Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsapplication/installs_symbian.pri Fri Apr 16 14:54:01 2010 +0300 @@ -17,7 +17,7 @@ deploy.path = z: exports1.path = /private/20022F35 -exports1.sources += resource_s60/homescreendb +exports1.sources += resource_s60/homescreen.db for(export1, exports1.sources):BLD_INF_RULES.prj_exports += "./$$export1 $$deploy.path$$exports1.path/$$basename(export1)" exports2.path = /private/20022f35/wallpapers diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/installs_win.pri --- a/homescreenapp/hsapplication/installs_win.pri Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsapplication/installs_win.pri Fri Apr 16 14:54:01 2010 +0300 @@ -22,7 +22,7 @@ homescreendb.CONFIG += no_build homescreendb.path = $$DESTDIR -homescreendb.files = ./resource_win/homescreendb +homescreendb.files = ./resource_win/homescreen.db wallpapers.CONFIG += no_build wallpapers.path = $$DESTDIR/wallpapers @@ -46,4 +46,4 @@ ./themes/theme2/hs_trashbin_nonactive.svg INSTALLS += kqtihswallpapers homescreendb wallpapers themeableimagesfortheme11 themeableimagesfortheme12 themeableimagesfortheme2 -PRE_TARGETDEPS += install_kqtihswallpapers install_homescreendb install_wallpapers \ No newline at end of file +PRE_TARGETDEPS += install_kqtihswallpapers install_homescreendb install_wallpapers diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/ipc_service_conf.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/ipc_service_conf.xml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" ?> +<service name="com.nokia.services.hsapplication" filepath="must-not-be-empty" > + <description>Homescreen client service provider</description> + <interface name="IHomeScreenClient" version="1.0" capabilities=""> + <description>Homescreen client service interface</description> + </interface> +</service> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/loc/Homescreen_v0 5.xls Binary file homescreenapp/hsapplication/loc/Homescreen_v0 5.xls has changed diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/resource_s60/homescreen.db Binary file homescreenapp/hsapplication/resource_s60/homescreen.db has changed diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/resource_s60/homescreendb Binary file homescreenapp/hsapplication/resource_s60/homescreendb has changed diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/resource_win/homescreen.db Binary file homescreenapp/hsapplication/resource_win/homescreen.db has changed diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/resource_win/homescreendb Binary file homescreenapp/hsapplication/resource_win/homescreendb has changed diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/src/hshomescreen.cpp --- a/homescreenapp/hsapplication/src/hshomescreen.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsapplication/src/hshomescreen.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -26,7 +26,9 @@ #include "hshomescreen.h" #include "hstest_global.h" - +#ifdef Q_OS_SYMBIAN +#include "hshomescreenclientserviceprovider.h" +#endif QTM_USE_NAMESPACE /*! @@ -44,24 +46,41 @@ HsHomeScreen::HsHomeScreen(QObject *parent) : QObject(parent), mRuntime(0) +#ifdef Q_OS_SYMBIAN + ,mHomeScreenClientServiceProvider(0) +#endif { HSTEST_FUNC_ENTRY("HS::HsHomeScreen::HsHomeScreen"); - registerServicePlugins(); + QServiceManager serviceManager; + + registerServicePlugins(serviceManager); + + QServiceFilter filter("com.nokia.symbian.IHomeScreenRuntime"); + QList<QServiceInterfaceDescriptor> interfaces = serviceManager.findInterfaces(filter); - QServiceManager manager; - QServiceFilter filter("com.nokia.homescreen.runtime.HsRuntime"); - QList<QServiceInterfaceDescriptor> interfaces = manager.findInterfaces(filter); - QObject *interface = manager.loadInterface(interfaces.first().interfaceName()); - mRuntime = qobject_cast<QStateMachine*>(interface); + if (interfaces.isEmpty()) { + emit exit(); + return; + } + + QObject *object = serviceManager.loadInterface(interfaces.first().interfaceName()); + mRuntime = qobject_cast<QStateMachine *>(object); + if (mRuntime) { mRuntime->setParent(this); connect(mRuntime, SIGNAL(started()), SLOT(onRuntimeStarted())); connect(mRuntime, SIGNAL(stopped()), SLOT(onRuntimeStopped())); - hbInstance->allMainWindows().at(0)->installEventFilter(this); + hbInstance->allMainWindows().first()->installEventFilter(this); +#ifdef Q_OS_SYMBIAN + mHomeScreenClientServiceProvider = new HsHomeScreenClientServiceProvider; + mHomeScreenClientServiceProvider->setParent(this); +#endif } else { + delete object; emit exit(); } + HSTEST_FUNC_EXIT("HS::HsHomeScreen::HsHomeScreen"); } @@ -98,8 +117,11 @@ void HsHomeScreen::stop() { if (mRuntime && mRuntime->isRunning()) { - QMetaObject::invokeMethod(mRuntime, "event_exit"); - } + QEventLoop eventLoop; + connect(mRuntime, SIGNAL(finished()), &eventLoop, SLOT(quit())); + QMetaObject::invokeMethod(mRuntime, "event_exit", Qt::QueuedConnection); + eventLoop.exec(); + } } /*! @@ -132,7 +154,7 @@ /*! Registers service plugins pre-installed on the device. */ -void HsHomeScreen::registerServicePlugins() +void HsHomeScreen::registerServicePlugins(QServiceManager &serviceManager) { HSTEST_FUNC_ENTRY("HS::HsHomeScreen::registerServicePlugins()"); QStringList pluginPaths; @@ -152,13 +174,13 @@ QString driveLetter = drive.absolutePath(); QString path = driveLetter + pluginPath; if(QDir(path).exists()) { - registerServicePlugins(path); + registerServicePlugins(path, serviceManager); } } #endif //Check plugin path relative to current dir if(QDir(pluginPath).exists()) { - registerServicePlugins(pluginPath); + registerServicePlugins(pluginPath, serviceManager); } } HSTEST_FUNC_EXIT("HS::HsHomeScreen::registerServicePlugins()"); @@ -169,14 +191,14 @@ directory. All directories containing plugins are added to application's library paths at the same time. */ -void HsHomeScreen::registerServicePlugins(const QString &root) +void HsHomeScreen::registerServicePlugins(const QString &root, QServiceManager &serviceManager) { HSTEST_FUNC_ENTRY("HS::HsHomeScreen::registerServicePlugins(const QString &)"); - QDir dir = QDir(root); + QDir dir(root); QFileInfoList fileInfos = dir.entryInfoList(QDir::AllDirs | QDir::NoDotAndDotDot); foreach (QFileInfo fileInfo, fileInfos) { - registerServicePlugins(fileInfo.absoluteFilePath()); + registerServicePlugins(fileInfo.absoluteFilePath(), serviceManager); } fileInfos = dir.entryInfoList(QStringList("*.xml")); @@ -185,11 +207,13 @@ //Plugin dll and xml are in the same directory QApplication::addLibraryPath(root); qDebug() << QString("HS::HsHomeScreen::registerServicePlugins - Directory added to application's library paths: ") - << root; - QServiceManager manager; + << root; foreach(QFileInfo fileInfo, fileInfos) { - manager.addService(fileInfo.absoluteFilePath()); - qDebug() << QString("HS::HsHomeScreen::registerServicePlugins - Plugin registered: ") + fileInfo.fileName(); + if (serviceManager.addService(fileInfo.absoluteFilePath())) { + qDebug() << QString("HS::HsHomeScreen::registerServicePlugins - Plugin registered: ") + fileInfo.fileName(); + } else { + qDebug() << QString("HS::HsHomeScreen::registerServicePlugins - Plugin FAILED to register: ") + fileInfo.fileName(); + } } } HSTEST_FUNC_EXIT("HS::HsHomeScreen::registerServicePlugins(const QString &)"); diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/src/hshomescreenclientserviceprovider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsapplication/src/hshomescreenclientserviceprovider.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,70 @@ +/* +* 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: Main class for HsHomeScreenClientServiceProvider library. +* +*/ + +#include "hshomescreenclientserviceprovider.h" + +#include "hsscene.h" +#include "hspage.h" +#include "hsdomainmodeldatastructures.h" +#include "hswidgethost.h" + +const char INTERFACE_NAME[] = "com.nokia.services.hsapplication.IHomeScreenClient"; + +HsHomeScreenClientServiceProvider::HsHomeScreenClientServiceProvider(QObject* parent) +: XQServiceProvider(INTERFACE_NAME,parent) +{ + publishAll(); +} + +HsHomeScreenClientServiceProvider::~HsHomeScreenClientServiceProvider() +{ +} + +#ifdef COVERAGE_MEASUREMENT +#pragma CTC SKIP +#endif //COVERAGE_MEASUREMENT + +// this should be moved to HsContentService class + +bool HsHomeScreenClientServiceProvider::addWidget(const QString &uri,const QVariantHash &preferences) +{ + + HsWidgetData widgetData; + widgetData.uri = uri; + + QScopedPointer<HsWidgetHost> widget(HsWidgetHost::createInstance(widgetData,preferences)); + + if (!widget.data()) { + return false; + } + HsPage* activePage = HsScene::instance()->activePage(); + if (!widget->load() || !activePage->addNewWidget(widget.data())) { + widget->deleteFromDatabase(); + return false; + } + HsWidgetHost* taken = widget.take(); + taken->initializeWidget(); + taken->showWidget(); + activePage->layoutNewWidgets(); + + return true; +} + +#ifdef COVERAGE_MEASUREMENT +#pragma CTC ENDSKIP +#endif //COVERAGE_MEASUREMENT + diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsapplication/src/main.cpp --- a/homescreenapp/hsapplication/src/main.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsapplication/src/main.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -14,6 +14,7 @@ * Description: Main. * */ + #include <QTranslator> #include <QMessageBox> #include <hbapplication.h> @@ -36,6 +37,12 @@ #include <e32debug.h> #include <apgwgnam.h> + +void loadTranslationFilesOnSymbian(QTranslator &hsTranslator, QTranslator &alTranslator); +void copyWallpapersFromRom(); +void copyHsDatabaseFileFromRom(); +void createPrivateFolder(); + // it is temporary class used for getting notifcation about APA messages // it is used for processing message send by AVKON to activate Menu class HsMessageObserver: public MCoeMessageObserver { @@ -54,14 +61,12 @@ { CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC(eikonEnv->WsSession()); wgName->SetSystem(ETrue); // Allow only application with PowerManagement cap to shut us down - wgName->SetCaptionL(_L("HsApplication")); + wgName->SetCaptionL(_L("hsapplication")); wgName->SetAppUid(TUid::Uid(0x20022F35)); wgName->SetWindowGroupName(eikonEnv->RootWin()); CleanupStack::PopAndDestroy(); } - - void myMessageOutput(QtMsgType type, const char *msg) { switch (type) { @@ -86,12 +91,9 @@ #endif //Q_OS_SYMBIAN - - +/*! -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// +*/ int main(int argc, char *argv[]) { #ifdef Q_OS_SYMBIAN @@ -111,107 +113,31 @@ HsAppTranslator *appTranslator = HsAppTranslator::instance(); appTranslator->setLanguage(); - + // add translator for homescreen and application library - QString locale = QLocale::system().name(); - QTranslator hsTranslator; - QString hsTrFile = QString("homescreen_") + locale; - QTranslator alTranslator; - QString alTrFile = QString("hsapplibrary_") + locale; #ifdef Q_OS_SYMBIAN // TRAP is must here, otherwise it crashes -TRAP_IGNORE( - bool hsLoaded(false); - hsLoaded = hsTranslator.load(hsTrFile, QString("z:/") + TR_FILE_PATH); - if (!hsLoaded) - hsTranslator.load(hsTrFile, QString("c:/") + TR_FILE_PATH); - - bool alLoaded(false); - alLoaded = alTranslator.load(alTrFile, QString("z:/") + TR_FILE_PATH); - if (!alLoaded) - alTranslator.load(alTrFile, QString("c:/") + TR_FILE_PATH); -); + TRAP_IGNORE( loadTranslationFilesOnSymbian(hsTranslator, alTranslator) ); #else + QString locale = QLocale::system().name(); + QString hsTrFile = QString("homescreen_") + locale; hsTranslator.load(hsTrFile, QString(TR_FILE_PATH) ); + QString alTrFile = QString("hsapplibrary_") + locale; alTranslator.load(alTrFile, QString(TR_FILE_PATH) ); #endif //Q_OS_SYMBIAN - app.installTranslator(&hsTranslator); - app.installTranslator(&alTranslator); - + qApp->installTranslator(&hsTranslator); + qApp->installTranslator(&alTranslator); + #ifdef Q_OS_SYMBIAN - QFile file("c:/private/20022f35/homescreendb"); - //If DB file does not exist copy default DB from z: (ROM) - if(!file.exists()) { - HSTEST("HS::main() - homescreendb not in c:"); - file.setFileName("z:/private/20022f35/homescreendb"); - if(!file.exists()) { - HSTEST("HS::main() - homescreendb not in ROM!"); - } - else { - HSTEST("HS::main() - homescreendb found from z:"); - //We need to first create private folder if not exists - QDir dir("c:/private/20022f35/"); - if(!dir.exists()) { - HSTEST("HS::main() - c:/private/20022f35/ does not exist."); - RFs fsSession; - if(fsSession.Connect() != KErrNone){ - HSTEST("HS::main() - Homescreen private dir creation failed!"); - } - fsSession.CreatePrivatePath(EDriveC); - HSTEST("HS::main() - c:/private/20022f35/ created."); - fsSession.Close(); - if(!dir.exists()) { - HSTEST("HS::main() - c:/private/20022f35/ creation failed."); - } - } - HSTEST("HS::main() - c:/private/20022f35/ exists."); - //Copy DB from z: to c: - if (!file.copy("c:/private/20022f35/homescreendb")) { - HSTEST("HS::main() - homescreendb copy from ROM to c: failed!"); - } - HSTEST("HS::main() - homescreendb copied from ROM to c:!"); - file.setFileName("c:/private/20022f35/homescreendb"); - if(!file.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) { - HSTEST("HS::main() - homescreendb ReadWrite permission settings on c: failed!"); - } - HSTEST("HS::main() - homescreendb permission set to ReadWrite!"); - } - } -#ifdef __WINS__ - else if(!file.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) { - HSTEST("HS::main() - homescreendb ReadWrite permission settings on emulator's c: failed!"); - } + copyHsDatabaseFileFromRom(); + copyWallpapersFromRom(); #endif - { - QDir dir("c:/private/20022f35/wallpapers"); - if(!dir.exists()) { - dir.mkpath("c:/private/20022f35/wallpapers/"); - QDir dir2("z:/private/20022f35/wallpapers"); - dir2.setFilter(QDir::Files); - QStringList files = dir2.entryList(); - foreach(QString file, files) - { - QString targetFile("c:/private/20022f35/wallpapers/" + file); - QFile::copy(dir2.absoluteFilePath(file), targetFile); - qDebug() << "image copied" << dir2.absoluteFilePath(file); - QFile createdFile(targetFile); - if(!createdFile.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) { - qDebug() << "read write permission set failed for file" << targetFile; - } - } - - } - - - } - -#endif //Q_OS_SYMBIAN - + HbMainWindow window; - window.setViewSwitchingEnabled(false); - + window.setRenderHint(QPainter::SmoothPixmapTransform); + HsHomeScreen hs; QObject::connect(&app, SIGNAL(aboutToQuit()) ,&hs, SLOT(stop())); QObject::connect(&hs, SIGNAL(exit()), &app, SLOT(quit()),Qt::QueuedConnection); @@ -232,11 +158,116 @@ HSTEST("HS::main() call app.exec"); try { app.exec(); - } catch(...) { HSTEST("HS::main() app.exec() catch"); } return 0; } +#ifdef Q_OS_SYMBIAN +/*! + * Creates private folder to c: drive if not exists yet. + */ +void createPrivateFolder() +{ + QDir dir("c:/private/20022f35/"); + if(!dir.exists()) { + HSTEST("HS::main() - c:/private/20022f35/ does not exist."); + RFs fsSession; + if(fsSession.Connect() != KErrNone){ + HSTEST("HS::main() - Homescreen private dir creation failed!"); + } + fsSession.CreatePrivatePath(EDriveC); + HSTEST("HS::main() - c:/private/20022f35/ created."); + fsSession.Close(); + if(!dir.exists()) { + HSTEST("HS::main() - c:/private/20022f35/ creation failed."); + } + } + HSTEST("HS::main() - c:/private/20022f35/ exists."); +} + +/*! + * Copies homescreen database from rom if database does not exist on c: drive + */ +void copyHsDatabaseFileFromRom() +{ + QFile file("c:/private/20022f35/homescreen.db"); + //If DB file does not exist copy default DB from z: (ROM) + if(!file.exists()) { + HSTEST("HS::main() - homescreen.db not in c:"); + file.setFileName("z:/private/20022f35/homescreen.db"); + if(!file.exists()) { + HSTEST("HS::main() - homescreen.db not in ROM!"); + } else { + HSTEST("HS::main() - homescreen.db found from z:"); + createPrivateFolder(); + //Copy DB from z: to c: + if (!file.copy("c:/private/20022f35/homescreen.db")) { + HSTEST("HS::main() - homescreen.db copy from ROM to c: failed!"); + } + HSTEST("HS::main() - homescreen.db copied from ROM to c:!"); + file.setFileName("c:/private/20022f35/homescreen.db"); + if(!file.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) { + HSTEST("HS::main() - homescreen.db ReadWrite permission settings on c: failed!"); + } + HSTEST("HS::main() - homescreen.db permission set to ReadWrite!"); + } + } +#ifdef __WINS__ + else if(!file.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) { + HSTEST("HS::main() - homescreen.db ReadWrite permission settings on emulator's c: failed!"); + } +#endif + +} + +/*! + * Copies homescreen wallpapers from rom if wallpaper directory does not exist on c: drive + */ +void copyWallpapersFromRom() +{ + QDir dir("c:/private/20022f35/wallpapers"); + if(!dir.exists()) { + dir.mkpath("c:/private/20022f35/wallpapers/"); + QDir dir2("z:/private/20022f35/wallpapers"); + dir2.setFilter(QDir::Files); + QStringList files = dir2.entryList(); + foreach(QString file, files) + { + QString targetFile("c:/private/20022f35/wallpapers/" + file); + if ( QFile::copy(dir2.absoluteFilePath(file), targetFile) ) { + qDebug() << "image copied" << dir2.absoluteFilePath(file); + } + QFile createdFile(targetFile); + if(!createdFile.setPermissions(QFile::ReadOwner | QFile::WriteOwner)) { + qDebug() << "read write permission set failed for file" << targetFile; + } + } + } +} + +/*! + * Load translation files. + */ +void loadTranslationFilesOnSymbian(QTranslator &hsTranslator, QTranslator &alTranslator) +{ + bool hsLoaded(false); + QString locale = QLocale::system().name(); + QString hsTrFile = QString("homescreen_") + locale; + hsLoaded = hsTranslator.load(hsTrFile, QString("z:/") + TR_FILE_PATH); + if (!hsLoaded) { + hsTranslator.load(hsTrFile, QString("c:/") + TR_FILE_PATH); + } + + bool alLoaded(false); + QString alTrFile = QString("hsapplibrary_") + locale; + alLoaded = alTranslator.load(alTrFile, QString("z:/") + TR_FILE_PATH); + if (!alLoaded) { + alTranslator.load(alTrFile, QString("c:/") + TR_FILE_PATH); + } + +} + +#endif diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hscontentpublishplugin/hscontentpublishplugin.pri --- a/homescreenapp/hscontentpublishplugin/hscontentpublishplugin.pri Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +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: -# - - -HEADERS += ./inc/hscontentpublishplugin.h -SOURCES += ./src/hscontentpublishplugin.cpp - - -win32:{ - HEADERS += ./inc_win/hshomescreenclient.h - SOURCES += ./src/hshomescreenclient_win.cpp - -} - -symbian:{ - HEADERS += ./inc_symbian/hshomescreenclient.h - SOURCES += ./src/hshomescreenclient_symbian.cpp - -} - - diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hscontentpublishplugin/hscontentpublishplugin.pro --- a/homescreenapp/hscontentpublishplugin/hscontentpublishplugin.pro Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +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: -# - -TEMPLATE = lib -CONFIG += plugin hb mobility console -MOBILITY = serviceframework - -PLUGIN_SUBDIR = /hsresources/plugins/contentpublish - -include (../common.pri) - -win32:{ -LIBS += -lhsdomainmodel \ - -lhsutils -} -QT += xml sql network - -DEPENDPATH += ./inc \ - ./inc_win \ - ./inc_symbian \ - ./src -INCLUDEPATH += ./inc \ - ./inc_win \ - ./inc_symbian \ - ../hsutils/inc \ - ../hsdomainmodel/inc \ - -symbian: { - TARGET.UID3 = 0x20022F72 - LIBS += -lxqservice -} - - -include(hscontentpublishplugin.pri) diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hscontentpublishplugin/inc/hscontentpublishplugin.h --- a/homescreenapp/hscontentpublishplugin/inc/hscontentpublishplugin.h Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +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: Default runtime provider. -* -*/ - -#ifndef HSCONTENTPUBLISHPLUGIN_H -#define HSCONTENTPUBLISHPLUGIN_H - -#include <QObject> -#include <qserviceplugininterface.h> - -QTM_USE_NAMESPACE - -class HsContentPublishPlugin : public QObject, public QServicePluginInterface -{ - Q_OBJECT - Q_INTERFACES(QtMobility::QServicePluginInterface) - -public: - QObject *createInstance(const QServiceInterfaceDescriptor &descriptor, - QServiceContext *context, - QAbstractSecuritySession *session); -}; - -#endif //HSCONTENTPUBLISHPLUGIN_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hscontentpublishplugin/inc_symbian/hshomescreenclient.h --- a/homescreenapp/hscontentpublishplugin/inc_symbian/hshomescreenclient.h Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +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: Default implementation of the home screen runtime. -* -*/ - -#ifndef HSCONTENTPUBLISH_H -#define HSCONTENTPUBLISH_H - -#include <QObject> -#include <QVariant> - - -class XQServiceRequest; - -class HsContentPublish : public QObject -{ - Q_OBJECT - -public: - HsContentPublish(QObject *parent = 0); - virtual ~HsContentPublish(); - Q_INVOKABLE bool open(); - Q_INVOKABLE bool close(); -public slots: - bool addWidgetToHomescreen(const QString &uri, const QVariantMap &preferences = QVariantMap()); - -private: - XQServiceRequest* sndAsync; -}; - -#endif diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hscontentpublishplugin/inc_win/hshomescreenclient.h --- a/homescreenapp/hscontentpublishplugin/inc_win/hshomescreenclient.h Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +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: Default implementation of the home screen runtime. -* -*/ - -#ifndef HSCONTENTPUBLISH_H -#define HSCONTENTPUBLISH_H - -#include <QObject> -#include <QVariant> - -class HsIpcChannelClient; - -class HsContentPublish : public QObject -{ - Q_OBJECT - -public: - HsContentPublish(QObject *parent = 0); - virtual ~HsContentPublish(); - Q_INVOKABLE bool open(); - Q_INVOKABLE bool close(); -public slots: - bool addWidgetToHomescreen(const QString &uri, const QVariantMap &preferences = QVariantMap()); - -private: - HsIpcChannelClient *mChannel; -}; - -#endif diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hscontentpublishplugin/resource/hscontentpublishplugin.s60xml --- a/homescreenapp/hscontentpublishplugin/resource/hscontentpublishplugin.s60xml Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<service> - <name>hscontentpublishplugin</name> - <filepath>z:/hsresources/plugins/contentpublish/hscontentpublishplugin.qtplugin</filepath> - <description>Homescreen Content Publish Plugin</description> - <interface> - <name>com.nokia.homescreen.contentpublish</name> - <version>1.0</version> - <description>Content publish api for client processes </description> - <capabilities></capabilities> - </interface> -</service> diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hscontentpublishplugin/resource/hscontentpublishplugin.xml --- a/homescreenapp/hscontentpublishplugin/resource/hscontentpublishplugin.xml Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<service> - <name>hscontentpublishplugin</name> - <filepath>hscontentpublishplugin</filepath> - <description>Homescreen Content Publish Plugin</description> - <interface> - <name>com.nokia.homescreen.contentpublish</name> - <version>1.0</version> - <description>Content publish api for client processes </description> - <capabilities></capabilities> - </interface> -</service> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hscontentpublishplugin/src/hscontentpublishplugin.cpp --- a/homescreenapp/hscontentpublishplugin/src/hscontentpublishplugin.cpp Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +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: Default runtime plugin. -* -*/ - -#include <qserviceinterfacedescriptor.h> -#include <qabstractsecuritysession.h> -#include <qservicecontext.h> - -#include "hscontentpublishplugin.h" -#include "hshomescreenclient.h" - -#ifdef COVERAGE_MEASUREMENT -#pragma CTC SKIP -#endif //COVERAGE_MEASUREMENT - -QObject *HsContentPublishPlugin::createInstance(const QServiceInterfaceDescriptor &descriptor, - QServiceContext *context, - QAbstractSecuritySession *session) -{ - Q_UNUSED(context); - Q_UNUSED(session); - - if (descriptor.interfaceName() == QLatin1String("com.nokia.homescreen.contentpublish")) { - return new HsContentPublish(this); - } else { - return 0; - } -} - -Q_EXPORT_PLUGIN2(hscontentpublishplugin, HsContentPublishPlugin) - -#ifdef COVERAGE_MEASUREMENT -#pragma CTC ENDSKIP -#endif //COVERAGE_MEASUREMENT diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hscontentpublishplugin/src/hshomescreenclient_symbian.cpp --- a/homescreenapp/hscontentpublishplugin/src/hshomescreenclient_symbian.cpp Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +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: Content publishing implementation -* -*/ -#include "hshomescreenclient.h" -#include <xqservicerequest.h> - - - -HsContentPublish::HsContentPublish(QObject *parent) - :QObject(parent) -{ - -} -HsContentPublish::~HsContentPublish() -{ - -} - -bool HsContentPublish::open() -{ - - return true; -} - -bool HsContentPublish::close() -{ - - return true; -} - -bool HsContentPublish::addWidgetToHomescreen( - const QString &uri, - const QVariantMap &preferences) -{ - XQServiceRequest snd("com.nokia.services.hshomescreenclient", - "bool addWidget(QString, QVariantMap)"); - snd << uri; - snd << preferences; - QVariant retValue; - bool res=snd.send(retValue); - if (!res) { - int returnvalue = snd.latestError(); - } - return res; -} - - diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hscontentpublishplugin/src/hshomescreenclient_win.cpp --- a/homescreenapp/hscontentpublishplugin/src/hshomescreenclient_win.cpp Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,81 +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: Content publishing implementation -* -*/ -#include <QDebug> -#include "hshomescreenclient.h" -#include "hsipcchannelclient.h" - -const char SERVERNAME[] = "hs_content_publish"; - -HsContentPublish::HsContentPublish(QObject *parent) - :QObject(parent),mChannel(new HsIpcChannelClient()) -{ - mChannel->setParent(this); - -} -HsContentPublish::~HsContentPublish() -{ - -} - -bool HsContentPublish::open() -{ - if(!mChannel->isConnected() && !mChannel->waitForOpenConnection(SERVERNAME)){ - return false; - } - return true; -} - -bool HsContentPublish::close() -{ - if( mChannel->isConnected() && !mChannel->waitForCloseConnection()){ - qDebug()<< "HsContentPublish connection failed"; - return false; - } - return true; -} - -bool HsContentPublish::addWidgetToHomescreen( - const QString &uri, - const QVariantMap &preferences) -{ - if(!open()){ - return false; - } - // format message - QVariantMap message; - message.insert("messageType",QString("addWidget")); - message.insert("uri",uri); - message.insert("preferences",preferences); - if(!mChannel->waitForSendMessage(message)){ - qDebug()<< "HsContentPublish sendMessageWait failed"; - return false; - } - // get reply - QVariantMap reply; - if(!mChannel->waitForReadMessage(reply)){ - qDebug()<< "HsContentPublish reply wait failed"; - return false; - } - QString replyResult = reply.value("result").toString(); - if( replyResult != QLatin1String("true")){ - qDebug()<< "HsContentPublish reply result: " << replyResult; - return false; - } - - return true; -} - diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/hsdomainmodel.pri --- a/homescreenapp/hsdomainmodel/hsdomainmodel.pri Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsdomainmodel/hsdomainmodel.pri Fri Apr 16 14:54:01 2010 +0300 @@ -13,48 +13,24 @@ # # Description: # -HEADERS += ./inc/hscontentservice.h \ - ./inc/hsdatabase.h \ - ./inc/hsdomainmodel_global.h \ - ./inc/hspage.h \ - ./inc/hspagedata.h \ - ./inc/hsscene.h \ - ./inc/hsscene_p.h \ - ./inc/hsscenedata.h \ - ./inc/hsshortcutservice.h \ - ./inc/hsshortcutservice_p.h \ - ./inc/hswallpaper.h \ - ./inc/hswallpaper_p.h \ - ./inc/hswidgetdata.h \ - ./inc/hswidgethost.h \ - ./inc/hswidgetpresentationdata.h + +HEADERS += ./inc/hscontentservice.h \ + ./inc/hsdomainmodeldatastructures.h \ + ./inc/hsdatabase.h \ + ./inc/hsdomainmodel_global.h \ + ./inc/hspage.h \ + ./inc/hsscene.h \ + ./inc/hsshortcutservice.h \ + ./inc/hsshortcutservice_p.h \ + ./inc/hswallpaper.h \ + ./inc/hswidgethost.h -SOURCES += ./src/hscontentservice.cpp \ - ./src/hsdatabase.cpp \ - ./src/hspage.cpp \ - ./src/hspagedata.cpp \ - ./src/hsscene.cpp \ - ./src/hsscenedata.cpp \ - ./src/hsshortcutservice.cpp \ - ./src/hswallpaper.cpp \ - ./src/hswidgetdata.cpp \ - ./src/hswidgethost.cpp \ - ./src/hswidgetpresentationdata.cpp +SOURCES += ./src/hscontentservice.cpp \ + ./src/hsdatabase.cpp \ + ./src/hspage.cpp \ + ./src/hsscene.cpp \ + ./src/hsshortcutservice.cpp \ + ./src/hswallpaper.cpp \ + ./src/hswidgethost.cpp -win32:{ -HEADERS += ./inc/hscontentpublishhandler.h \ - ./inc/hsipcchannel.h \ - ./inc/hsipcchannelclient.h \ - ./inc/hsipcchannelhost.h \ - ./inc/hsipcconnectiondispatcher.h \ - ./inc/hsipcserver.h - -SOURCES += ./src/hscontentpublishhandler.cpp \ - ./src/hsipcchannel.cpp \ - ./src/hsipcchannelclient.cpp \ - ./src/hsipcchannelhost.cpp \ - ./src/hsipcconnectiondispatcher.cpp \ - ./src/hsipcserver.cpp -} - diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hscontentpublishhandler.h --- a/homescreenapp/hsdomainmodel/inc/hscontentpublishhandler.h Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -#ifndef HSCONTENTPUBLISHHANDLER_H -#define HSCONTENTPUBLISHHANDLER_H - -#include <QObject> -#include <QVariant> -#include "hsdomainmodel_global.h" - -class HsIpcChannelHost; -class HSDOMAINMODEL_EXPORT HsContentPublishHandler : public QObject -{ - Q_OBJECT - -public: - HsContentPublishHandler(HsIpcChannelHost *channel,QObject *parent=0); - ~HsContentPublishHandler(); -public slots: - void onMessageReceived(const QVariantMap &message); -signals: - void finished(); -private: - bool addWidget(const QString &uri, const QVariantMap &preferences); -private: - HsIpcChannelHost* mChannel; -}; - -#endif // HSCONTENTPUBLISHHANDLER_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hscontentservice.h --- a/homescreenapp/hsdomainmodel/inc/hscontentservice.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsdomainmodel/inc/hscontentservice.h Fri Apr 16 14:54:01 2010 +0300 @@ -20,13 +20,12 @@ #include <QObject> #include <QMetaType> +#include <QVariant> #include "hsdomainmodel_global.h" -#include <QVariant> class HsWidgetHost; - class HSDOMAINMODEL_EXPORT HsContentService : public QObject { Q_OBJECT @@ -35,8 +34,8 @@ HsContentService(QObject *parent = 0); ~HsContentService(); - bool createWidget(const QVariantMap ¶ms); - HsWidgetHost *createWidgetForPreview(const QVariantMap ¶ms); + bool createWidget(const QVariantHash ¶ms); + HsWidgetHost *createWidgetForPreview(const QVariantHash ¶ms); private: Q_DISABLE_COPY(HsContentService) diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hsdatabase.h --- a/homescreenapp/hsdomainmodel/inc/hsdatabase.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsdomainmodel/inc/hsdatabase.h Fri Apr 16 14:54:01 2010 +0300 @@ -11,20 +11,18 @@ * * Contributors: * -* Description: Implementation for SQLite content store. +* Description: * */ #ifndef HSDATABASE_H #define HSDATABASE_H +#include <QObject> #include <QScopedPointer> -#include <QtSql> +#include <QVariantHash> + #include "hsdomainmodel_global.h" -#include "hstest_global.h" - -HOMESCREEN_TEST_CLASS(TestRuntimeServices) -HOMESCREEN_TEST_CLASS(HomeScreenStatePluginTest) class HsSceneData; class HsPageData; @@ -34,60 +32,64 @@ class HSDOMAINMODEL_EXPORT HsDatabase : public QObject { Q_OBJECT - + Q_PROPERTY(QString connectionName READ connectionName WRITE setConnectionName) + Q_PROPERTY(QString databaseName READ databaseName WRITE setDatabaseName) + public: - static void setDatabaseName(const QString& dbName); - static HsDatabase *instance(); + HsDatabase(QObject *parent = 0); ~HsDatabase(); + void setConnectionName(const QString &name); + QString connectionName() const; + void setDatabaseName(const QString &name); + QString databaseName() const; + + bool open(); + void close(); + bool transaction(); bool rollback(); bool commit(); - bool scene(HsSceneData &scene); - bool updateScene(const HsSceneData &scene); + bool scene(HsSceneData &data); + bool updateScene(const HsSceneData &data); + + bool pages(QList<HsPageData> &data); + bool page(HsPageData &data); + bool insertPage(HsPageData &data); + bool updatePage(const HsPageData &data); + bool deletePage(int id); - bool pages(QList<HsPageData> &pages); - bool page(int id, HsPageData &page, bool getChildren = true); - bool insertPage(HsPageData &page); - bool updatePage(const HsPageData &page, bool updateChildren = true); - bool deletePage(int id); - - bool widget(int id, HsWidgetData &widget, bool getChildren = true); - bool insertWidget(HsWidgetData &widget); - bool insertWidget(const HsWidgetData &widget,int &databaseId); - bool updateWidget(const HsWidgetData &widget, bool updateChildren = true); + bool widgets(int pageId, QList<HsWidgetData> &data); + bool widgets(const QString &uri, QList<HsWidgetData> &data); + bool widget(HsWidgetData &data); + bool insertWidget(HsWidgetData &data); + bool updateWidget(const HsWidgetData &data); bool deleteWidget(int id); bool deleteWidgets(const QString &uri); - bool widgetPresentation(int widgetId, const QString &key, HsWidgetPresentationData &presentation); - bool insertWidgetPresentation(HsWidgetPresentationData &presentation); - bool updateWidgetPresentation(const HsWidgetPresentationData &presentation); - bool deleteWidgetPresentation(int id); + bool widgetPresentation(HsWidgetPresentationData &data); + bool setWidgetPresentation(const HsWidgetPresentationData &data); + bool deleteWidgetPresentation(int widgetId, const QString &key); - bool setWidgetPreferenceForKey(int widgetId, const QString &key, const QString &value); - bool widgetPreferenceForKey(int widgetId, const QString &key, QString &value); - bool setWidgetPreferences(int widgetId, const QVariantMap &preferences); - bool widgetPreferences(int widgetId, QVariantMap &preferences); - bool widgetIds(const QString &uri, QList<int>& ids); + bool widgetPreferences(int widgetId, QVariantHash &data); + bool widgetPreference(int widgetId, const QString &key, QVariant &value); + bool setWidgetPreferences(int widgetId, const QVariantHash &data); + +public: + static void setInstance(HsDatabase *instance); + static HsDatabase *instance(); + static HsDatabase *takeInstance(); + +private: + Q_DISABLE_COPY(HsDatabase) + bool checkConnection() const; private: - HsDatabase(); - bool openDatabase(const QString &databaseName); - Q_DISABLE_COPY(HsDatabase) - - bool parsePage(const QSqlQuery &query, bool getChildren, HsPageData &page); - bool parseWidget(const QSqlQuery &query, bool getChildren, HsWidgetData &widget); - bool parseWidgetPresentation(const QSqlQuery &query, HsWidgetPresentationData &presentation); + QString mConnectionName; + QString mDatabaseName; - QVariant columnValue(const QSqlQuery &query, const QString &columnName) const; - QSqlDatabase database() const; - -private: static QScopedPointer<HsDatabase> mInstance; - static QString mDatabaseName; - HOMESCREEN_TEST_FRIEND_CLASS(TestRuntimeServices) - HOMESCREEN_TEST_FRIEND_CLASS(HomeScreenStatePluginTest) }; #endif // HSDATABASE_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hsdomainmodeldatastructures.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsdomainmodel/inc/hsdomainmodeldatastructures.h Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,104 @@ +/* +* 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: +* +*/ + +#ifndef HSDOMAINMODELDATASTRUCTURES_H +#define HSDOMAINMODELDATASTRUCTURES_H + +#include <QRectF> +#include "hsdomainmodel_global.h" + +class HSDOMAINMODEL_EXPORT HsSceneData +{ +public: + HsSceneData() + : id(-1), defaultPageId(-1), maximumPageCount(-1) + {} + + int id; + QString portraitWallpaper; + QString landscapeWallpaper; + int defaultPageId; + int maximumPageCount; +}; + +class HSDOMAINMODEL_EXPORT HsPageData +{ +public: + HsPageData() + : id(-1), indexPosition(-1) + {} + + int id; + int indexPosition; +}; + +class HSDOMAINMODEL_EXPORT HsWidgetData +{ +public: + HsWidgetData() + : id(-1), + pageId(-1) + {} + + int id; + QString uri; + int pageId; +}; + +class HSDOMAINMODEL_EXPORT HsWidgetPresentationData +{ +public: + HsWidgetPresentationData() + : x(0), y(0), width(0), height(0), zValue(0), + widgetId(-1) + {} + + QRectF geometry() const + { + return QRectF(x, y, width, height); + } + + void setGeometry(const QRectF &geometry) + { + x = geometry.x(); + y = geometry.y(); + width = geometry.width(); + height = geometry.height(); + } + + void setPos(const QPointF &pos) + { + x = pos.x(); + y = pos.y(); + } + + void setSize(const QSizeF &size) + { + width = size.width(); + height = size.height(); + } + + QString key; + qreal x; + qreal y; + qreal width; + qreal height; + qreal zValue; + int widgetId; +}; + +#endif // HSDOMAINMODELDATASTRUCTURES_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hsipcchannel.h --- a/homescreenapp/hsdomainmodel/inc/hsipcchannel.h Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -#ifndef HSIPCHANNEL_H -#define HSIPCHANNEL_H - -#include <QLocalSocket> -#include <QVariantMap> - -#include "hsdomainmodel_global.h" - -class QDataStream; - -class HSDOMAINMODEL_EXPORT HsIpcChannel : public QObject -{ - Q_OBJECT -public: - - virtual ~HsIpcChannel(); - - bool isConnected() const; - bool sendMessage(const QVariantMap &message); - bool waitForSendMessage(const QVariantMap &message); - bool waitForReadMessage(QVariantMap &message); - virtual void closeConnection()=0; - -signals: - void connectionEstablished(); - void connectionError(); - void messageReceived(const QVariantMap &message); - void disconnected(); -private slots: - void onReadyRead(); - void onError(QLocalSocket::LocalSocketError socketError); - -protected: - HsIpcChannel(QObject *parent = 0); - -protected: - quint32 mBlockSize; - QLocalSocket *mSocket; -}; - -#endif // HsIpcChannel_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hsipcchannelclient.h --- a/homescreenapp/hsdomainmodel/inc/hsipcchannelclient.h Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ -#ifndef HSIPCCHANNELCLIENT_H -#define HSIPCCHANNELCLIENT_H - -#include "hsipcchannel.h" - -class HSDOMAINMODEL_EXPORT HsIpcChannelClient : public HsIpcChannel -{ - Q_OBJECT -public: - HsIpcChannelClient(QObject *parent = 0); - ~HsIpcChannelClient(); - - bool openConnection(const QString &serverName); - bool waitForOpenConnection(const QString &serverName); - void closeConnection(); - bool waitForCloseConnection(); - -private slots: - void onConnected(); -}; - -#endif diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hsipcchannelhost.h --- a/homescreenapp/hsdomainmodel/inc/hsipcchannelhost.h Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -#ifndef HSIPCCHANNELHOST_H -#define HSIPCCHANNELHOST_H - -#include <QObject> -#include "hsipcchannelclient.h" - - -class HSDOMAINMODEL_EXPORT HsIpcChannelHost : public HsIpcChannel -{ - Q_OBJECT - -public: - HsIpcChannelHost(QLocalSocket *socket,QObject *parent=0); - ~HsIpcChannelHost(); - - void closeConnection(); -private: - -}; - -#endif // HSIPCCHANNELHOST_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hsipcconnectiondispatcher.h --- a/homescreenapp/hsdomainmodel/inc/hsipcconnectiondispatcher.h Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -#ifndef HSIPCCONNECTIONDISPATCHER_H -#define HSIPCCONNECTIONDISPATCHER_H - -#include <QObject> -#include <QVariant> -#include "hsdomainmodel_global.h" - -class HsIpcServer; -class HsContentPublishHandler; - -class HSDOMAINMODEL_EXPORT HsIpcConnectionDispatcher : public QObject -{ - Q_OBJECT - -public: - HsIpcConnectionDispatcher(const QString &connectionName,QObject *parent=0); - ~HsIpcConnectionDispatcher(); - - bool start(); - void stop(); -private slots: - void onConnectionEstablished(); - -private: - QString mConnectionName; - HsIpcServer *mIpcServer; -}; - -#endif // HSIPCCONNECTIONDISPATCHER_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hsipcserver.h --- a/homescreenapp/hsdomainmodel/inc/hsipcserver.h Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -#ifndef HSIPCSERVER_H -#define HSIPCSERVER_H - -#include <QObject> -#include <QQueue> -#include "hsdomainmodel_global.h" - -class QLocalServer; -class HsIpcChannelHost; - -class HSDOMAINMODEL_EXPORT HsIpcServer: public QObject -{ - Q_OBJECT -public: - HsIpcServer(QObject *parent = 0); - ~HsIpcServer(); - - bool startServer(const QString &serverName); - void stopServer(); - - HsIpcChannelHost* takeConnection(); -signals: - void newConnection(); -private slots: - void onNewConnection(); - -private: - QLocalServer *mServer; - QQueue<HsIpcChannelHost*> mConnections; -}; - -#endif // HSIPCSERVER_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hspage.h --- a/homescreenapp/hsdomainmodel/inc/hspage.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsdomainmodel/inc/hspage.h Fri Apr 16 14:54:01 2010 +0300 @@ -48,7 +48,6 @@ bool addNewWidget(HsWidgetHost *widgetHost); void layoutNewWidgets(); void resetNewWidgets(); - bool deleteFromDatabase(); QList<HsWidgetHost *> widgets() const; @@ -57,11 +56,14 @@ void setRemovable(bool removable); bool updateZValues(); - - void setOnline(bool online = true); static HsPage *createInstance(const HsPageData &pageData); +public slots: + void showWidgets(); + void hideWidgets(); + void setOnline(bool online = true); + private: void connectWidget(HsWidgetHost *widget); void disconnectWidget(HsWidgetHost *widget); @@ -73,8 +75,9 @@ int mDatabaseId; bool mRemovable; QList<HsWidgetHost*> mWidgets; - QList<HsWidgetHost *> mNewWidgets; - + QList<HsWidgetHost*> mNewWidgets; + QMap<QString, QPointF> mStartPoint; + HOMESCREEN_TEST_FRIEND_CLASS(TestRuntimeServices) }; diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hspagedata.h --- a/homescreenapp/hsdomainmodel/inc/hspagedata.h Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +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: Contains page metadata. -* -*/ - -#ifndef HSPAGEDATA_H -#define HSPAGEDATA_H - -#include <QList> -#include <QString> -#include "hsdomainmodel_global.h" -#include "hswidgetdata.h" - -class HSDOMAINMODEL_EXPORT HsPageData -{ -public: - HsPageData(); - ~HsPageData(); - - void setId(int pageId); - int id() const; - - void setIndex(int index); - int index() const; - - QList<HsWidgetData> widgets() const; - QList<HsWidgetData> &widgets(); - -private: - int mId; - int mIndex; - QList<HsWidgetData> mWidgets; -}; - -#endif diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hsscene.h --- a/homescreenapp/hsdomainmodel/inc/hsscene.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsdomainmodel/inc/hsscene.h Fri Apr 16 14:54:01 2010 +0300 @@ -31,7 +31,7 @@ class HsPage; class HsWidgetHost; -class HsScenePrivate; + class HSDOMAINMODEL_EXPORT HsScene : public QObject { Q_OBJECT @@ -54,6 +54,7 @@ bool setActivePageIndex(int index); HsPage *activePage() const; int activePageIndex() const; + int maximumPageCount() const; void setActiveWidget(HsWidgetHost *widget); HsWidgetHost *activeWidget() const; @@ -70,7 +71,15 @@ Q_DISABLE_COPY(HsScene) private: - QScopedPointer<HsScenePrivate> mD; + int mDatabaseId; + bool mIsOnline; + HsWallpaper *mWallpaper; + QList<HsPage *> mPages; + int mMaximumPageCount; + HsPage *mActivePage; + HsWidgetHost *mActiveWidget; + + static QScopedPointer<HsScene> mInstance; HOMESCREEN_TEST_FRIEND_CLASS(TestRuntimeServices) diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hsscene_p.h --- a/homescreenapp/hsdomainmodel/inc/hsscene_p.h Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +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: -* -*/ - -#ifndef HSSCENE_P_H -#define HSSCENE_P_H - -class HsWallpaper; -class HsPage; -class HsWidgetHost; -#ifndef Q_OS_SYMBIAN -class HsIpcConnectionDispatcher; -#endif - -class HsScenePrivate -{ -public: - HsScenePrivate(); - ~HsScenePrivate(); - - int mDatabaseId; - bool mIsOnline; - HsWallpaper *mWallpaper; - QList<HsPage *> mPages; - HsPage *mActivePage; - HsWidgetHost *mActiveWidget; -#ifndef Q_OS_SYMBIAN - HsIpcConnectionDispatcher *mIpcConnectionDispatcher; -#endif - -}; - -#endif // HSSCENE_P_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hsscenedata.h --- a/homescreenapp/hsdomainmodel/inc/hsscenedata.h Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +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: Contains scene metadata. -* -*/ - -#ifndef HSSCENEDATA_H -#define HSSCENEDATA_H - -#include <QString> -#include "hsdomainmodel_global.h" -#include "hspagedata.h" - -class HSDOMAINMODEL_EXPORT HsSceneData -{ - -public: - HsSceneData(); - ~HsSceneData(); - - void setId(int id); - int id() const; - - void setPortraitWallpaper(const QString &path); - QString portraitWallpaper() const; - - void setLandscapeWallpaper(const QString &path); - QString landscapeWallpaper() const; - - void setDefaultPage(const HsPageData &defaultPage); - HsPageData defaultPage() const; - -private: - int mId; - QString mPortraitWallpaper; - QString mLandscapeWallpaper; - HsPageData mDefaultPage; - -}; - - - - -#endif diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hswallpaper.h --- a/homescreenapp/hsdomainmodel/inc/hswallpaper.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsdomainmodel/inc/hswallpaper.h Fri Apr 16 14:54:01 2010 +0300 @@ -54,7 +54,10 @@ Q_DISABLE_COPY(HsWallpaper) private: - QScopedPointer<HsWallpaperPrivate> mD; + QPixmap mImage; + QString mLImagePath; + QString mPImagePath; + Qt::Orientation mOrientation; HOMESCREEN_TEST_FRIEND_CLASS(TestRuntimeServices) }; diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hswallpaper_p.h --- a/homescreenapp/hsdomainmodel/inc/hswallpaper_p.h Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +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: -* -*/ - -#ifndef HSWALLPAPER_P_H -#define HSWALLPAPER_P_H - -#include <QPixmap> - -class HsWallpaperPrivate -{ -public: - HsWallpaperPrivate(); - ~HsWallpaperPrivate(); - - QPixmap mImage; - QString mLImagePath; - QString mPImagePath; - Qt::Orientation mOrientation; -}; - -#endif // HSWALLPAPER_P_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hswidgetdata.h --- a/homescreenapp/hsdomainmodel/inc/hswidgetdata.h Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +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: Contains widget metadata. -* -*/ - -#ifndef HSWIDGETDATA_H -#define HSWIDGETDATA_H - -#include <QList> -#include <QString> -#include "hsdomainmodel_global.h" -#include "hswidgetpresentationdata.h" - - -class HSDOMAINMODEL_EXPORT HsWidgetData -{ - -public: - - HsWidgetData(); - ~HsWidgetData(); - - void setId(int id); - int id() const; - - void setUri(const QString &uri); - QString uri() const; - - QList<HsWidgetPresentationData> presentations() const; - QList<HsWidgetPresentationData> &presentations(); - - void setPageId(int pageId); - int pageId() const; - -private: - - int mId; - QString mUri; - QList<HsWidgetPresentationData> mPresentations; - int mPageId; - -}; - - - - -#endif diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hswidgethost.h --- a/homescreenapp/hsdomainmodel/inc/hswidgethost.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsdomainmodel/inc/hswidgethost.h Fri Apr 16 14:54:01 2010 +0300 @@ -24,7 +24,7 @@ #include <HbWidget> -#include "hswidgetdata.h" +#include "hsdomainmodeldatastructures.h" #include "hsdomainmodel_global.h" #include "hstest_global.h" @@ -40,8 +40,19 @@ Q_OBJECT public: - static HsWidgetHost *createInstance(const HsWidgetData &widgetData, - const QVariantMap &preferences = QVariantMap()); + enum State { + Constructed, + Initialized, + Visible, + Hidden, + Uninitialized, + Finished, + Faulted + }; + +public: + static HsWidgetHost *createInstance(HsWidgetData &widgetData, + const QVariantHash &preferences = QVariantHash()); HsWidgetHost(int databaseId, QGraphicsItem *parent = 0); @@ -56,6 +67,8 @@ int databaseId() const; + State state() const { return mState; } + bool deleteFromDatabase(); bool setWidgetPresentation(); @@ -102,6 +115,7 @@ QMetaMethod mOnHideMethod; QMetaMethod mOnUninitializeMethod; QMetaProperty mIsOnlineProperty; + State mState; int mDatabaseId; QString mUri; diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/inc/hswidgetpresentationdata.h --- a/homescreenapp/hsdomainmodel/inc/hswidgetpresentationdata.h Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +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: Contains widget presentation metadata. -* -*/ - - -#ifndef HSWIDGETPRESENTATIONDATA_H -#define HSWIDGETPRESENTATIONDATA_H - -#include <QString> -#include <QPointF> -#include <QSizeF> -#include "hsdomainmodel_global.h" - -class HSDOMAINMODEL_EXPORT HsWidgetPresentationData -{ - -public: - HsWidgetPresentationData(); - ~HsWidgetPresentationData(); - - void setId(int id); - int id() const; - - void setKey(const QString &key); - QString key() const; - - void setPosition(const QPointF &position); - QPointF position() const; - - void setZValue(qreal zValue); - qreal zValue() const; - - void setSize(const QSizeF &size); - QSizeF size() const; - - void setWidgetId(int widgetId); - int widgetId() const; - -private: - int mId; - QString mKey; - QPointF mPosition; - QSizeF mSize; - int mWidgetId; - qreal mZValue; -}; - -#endif diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hscontentpublishhandler.cpp --- a/homescreenapp/hsdomainmodel/src/hscontentpublishhandler.cpp Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -#include <QDebug> -#include "hscontentpublishhandler.h" -#include "hsipcchannelhost.h" -#include "hsscene.h" -#include "hspage.h" -#include "hswidgetdata.h" -#include "hswidgethost.h" - -HsContentPublishHandler::HsContentPublishHandler( - HsIpcChannelHost *channel, QObject *parent) - : QObject(parent),mChannel(channel) -{ - connect(mChannel,SIGNAL(disconnected()),SLOT(deleteLater())); - connect(mChannel, SIGNAL(messageReceived(const QVariantMap&)), - SLOT(onMessageReceived(const QVariantMap&)),Qt::QueuedConnection); - qDebug() << "HsContentPublishHandler::HsContentPublishHandler" << (int)this; - -} - -HsContentPublishHandler::~HsContentPublishHandler() -{ - qDebug() << "HsContentPublishHandler::~HsContentPublishHandler" << (int)this; - delete mChannel; -} - -void HsContentPublishHandler::onMessageReceived(const QVariantMap &message) -{ - qDebug() << "HsContentPublishHandler message: " << message; - - QString messageType = message.value("messageType").toString(); - - if(messageType == "addWidget"){ - QString uri = message.value("uri").toString(); - QVariantMap preferences = message.value("preferences").toMap(); - - QString result("true"); - if(!addWidget(uri,preferences)){ - result = "false"; - } - - // write response - QVariantMap response; - response.insert("messageType", "response"); - response.insert("result", result); - response.insert("request", message); - if(!mChannel->sendMessage(response)){ - qDebug() << "HsContentPublishHandler response failed: "; - } - - }else{ - qDebug() << "HsContentPublishHandler messageType not supported!"; - } - - -} - -bool HsContentPublishHandler::addWidget( - const QString &uri, const QVariantMap &preferences) -{ - HsWidgetData widgetData; - widgetData.setUri(uri); - - QScopedPointer<HsWidgetHost> widget(HsWidgetHost::createInstance(widgetData, preferences)); - - if (!widget.data()) { - qDebug() << "HsWidgetHost::createInstance failed"; - return false; - } - HsPage* activePage = HsScene::instance()->activePage(); - if (!widget->load() || !activePage->addNewWidget(widget.data())) { - widget->deleteFromDatabase(); - qDebug() << "widget->load() || activePage->addNewWidget failed"; - return false; - } - HsWidgetHost* taken = widget.take(); - taken->initializeWidget(); - taken->showWidget(); - activePage->layoutNewWidgets(); - activePage->resetNewWidgets(); - - - return true; -} \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hscontentservice.cpp --- a/homescreenapp/hsdomainmodel/src/hscontentservice.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsdomainmodel/src/hscontentservice.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -19,7 +19,7 @@ #include "hsdatabase.h" #include "hsscene.h" #include "hspage.h" -#include "hswidgetdata.h" +#include "hsdomainmodeldatastructures.h" #include "hswidgethost.h" @@ -34,7 +34,7 @@ } -bool HsContentService::createWidget(const QVariantMap ¶ms) +bool HsContentService::createWidget(const QVariantHash ¶ms) { HsWidgetHost *widget = createWidgetForPreview(params); if (!widget) { @@ -44,14 +44,14 @@ return HsScene::instance()->activePage()->addNewWidget(widget); } -HsWidgetHost *HsContentService::createWidgetForPreview(const QVariantMap ¶ms) +HsWidgetHost *HsContentService::createWidgetForPreview(const QVariantHash ¶ms) { HsWidgetData widgetData; - widgetData.setUri(params.value("uri").toString()); + widgetData.uri = params.value("uri").toString(); - HsWidgetHost *widget = HsWidgetHost::createInstance(widgetData, - params.value("preferences").toMap()); + HsWidgetHost *widget = HsWidgetHost::createInstance(widgetData, + params.value("preferences").toHash()); if (!widget) { return NULL; diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hsdatabase.cpp --- a/homescreenapp/hsdomainmodel/src/hsdatabase.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsdomainmodel/src/hsdatabase.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -11,727 +11,714 @@ * * Contributors: * -* Description: Implementation for SQLlite content store. +* Description: * */ +#include <QSqlDatabase> +#include <QSqlQuery> +#include <QSqlRecord> +#include <QVariantHash> +#include <QDir> + #include "hsdatabase.h" -#include "hsscenedata.h" -#include "hspagedata.h" -#include "hswidgetdata.h" -#include "hswidgetpresentationdata.h" -#include "hstest_global.h" - -namespace -{ - const char DATABASE_CONNECTION_NAME[] = "hsdb.connection"; -} +#include "hsdomainmodeldatastructures.h" -#ifdef Q_OS_SYMBIAN -QString HsDatabase::mDatabaseName("c:\\private\\20022f35\\homescreendb"); -#else -QString HsDatabase::mDatabaseName("homescreendb"); -#endif //Q_OS_SYMBIAN - -QScopedPointer<HsDatabase> HsDatabase::mInstance(0); +namespace +{ + template<class T> + QVariantList toVariantList(const QList<T> &list) + { + QVariantList vlist; + foreach (T item, list) { + vlist << item; + } + return vlist; + } -/*! - Utility to create variant list from given \a list -*/ -template<class T> -QVariantList toVariantList(const QList<T> &list) -{ - QVariantList vlist; - foreach (T item, list) { - vlist << item; + template<class T> + QVariantList toVariantList(const T &item, int count) + { + QVariantList vlist; + for (int i = 0; i < count; ++i) { + vlist << item; + } + return vlist; } - return vlist; } /*! - Utility to insert given \a item to variant list \a count times -*/ -template<class T> -QVariantList toVariantList(const T &item, int count) -{ - QVariantList vlist; - for (int i = 0; i < count; ++i) { - vlist << item; - } - return vlist; -} -/*! - Set name of the database to use + Constructs a new database with the given \a parent object. */ - void HsDatabase::setDatabaseName(const QString& dbName) - { - mDatabaseName = QDir::toNativeSeparators(dbName); - } - -/*! - \class HsDatabase - \ingroup group_hsdatamodel - \brief Implementation for SQLlite content store. - - Home screen content store that uses an SQLite database - as the data store. - -*/ - -/*! - Singleton. -*/ -HsDatabase *HsDatabase::instance() +HsDatabase::HsDatabase(QObject *parent) + : QObject(parent) { - if (mInstance.isNull()) { - mInstance.reset(new HsDatabase()); - if(!mInstance->openDatabase(mDatabaseName)){ - mInstance.reset(); - } - } - return mInstance.data(); -} - -/*! - Closes database and removes it. -*/ -HsDatabase::~HsDatabase() -{ - // Database calls must be in scope, see info from - // QSqlDatabase::removeDatabase() documentation. - { - QSqlDatabase db = database(); - db.close(); - } - - QSqlDatabase::removeDatabase(DATABASE_CONNECTION_NAME); -} - -bool HsDatabase::transaction() -{ - return database().transaction(); -} - -bool HsDatabase::rollback() -{ - return database().rollback(); -} - -bool HsDatabase::commit() -{ - return database().commit(); } /*! - Returns scene data in \a scene + Destroys this database. */ -bool HsDatabase::scene(HsSceneData &scene) -{ - HsSceneData temp; - - QSqlDatabase db = database(); - QSqlQuery query(db); - - query.prepare("SELECT * FROM Scene"); - - if (!query.exec() || !query.next()) { - return false; - } - - temp.setId(columnValue(query, "Id").toInt()); - temp.setPortraitWallpaper(columnValue(query, "PortraitWallpaper").toString()); - temp.setLandscapeWallpaper(columnValue(query, "LandscapeWallpaper").toString()); - - int defaultPageId = columnValue(query, "DefaultPageId").toInt(); - - query.prepare("SELECT * FROM Pages WHERE Id = ?"); - query.addBindValue(defaultPageId); - - if (!query.exec() || !query.next()) { - return false; - } - - HsPageData page; - if (!parsePage(query, true, page)) { - return false; - } - temp.setDefaultPage(page); - - scene = temp; - - return true; +HsDatabase::~HsDatabase() +{ + close(); } /*! - Updates the scene with \a scene. + Sets the connection name to \a name. */ -bool HsDatabase::updateScene(const HsSceneData &scene) +void HsDatabase::setConnectionName(const QString &name) { - QSqlDatabase db = database(); - - QString queryString = "UPDATE Scene " - "SET PortraitWallpaper = ?, LandscapeWallpaper = ? " - "WHERE Id = ?"; - - - QSqlQuery query(db); - - query.prepare(queryString); - query.addBindValue(scene.portraitWallpaper()); - query.addBindValue(scene.landscapeWallpaper()); - query.addBindValue(scene.id()); - - return query.exec(); + mConnectionName = name; +} + +/*! + Returns the connection name. +*/ +QString HsDatabase::connectionName() const +{ + return mConnectionName; } /*! - Returns page data in \a pages list + Sets the database name to \a name. */ -bool HsDatabase::pages(QList<HsPageData> &pages) +void HsDatabase::setDatabaseName(const QString &name) { - QList<HsPageData> temp; - - QSqlDatabase db = database(); - QSqlQuery query(db); - - query.prepare("SELECT * FROM Pages ORDER BY PageIndex"); - - if (!query.exec()) { - return false; - } - - while (query.next()) { - HsPageData page; - if (!parsePage(query, true, page)) { - return false; - } - temp << page; - } - - pages = temp; - - return true; + mDatabaseName = QDir::toNativeSeparators(name); } - + /*! - Returns a\ page data for the page with given \a id. Includes children - data if \a getChildren is true + Returns the database name. */ -bool HsDatabase::page(int id, HsPageData &page, bool getChildren) +QString HsDatabase::databaseName() const { - QSqlDatabase db = database(); - QSqlQuery query(db); - - QString queryString = "SELECT * FROM Pages " - "WHERE Id = ?"; - - query.prepare(queryString); - query.addBindValue(id); - - if (!query.exec() || !query.next()) { - return false; - } - - return parsePage(query, getChildren, page); + return mDatabaseName; } /*! - Insert page based on given \a page data -*/ -bool HsDatabase::insertPage(HsPageData &page) + Opens the database connection using the current connection + values. Returns true on success, otherwise returns false. +*/ +bool HsDatabase::open() { - QSqlDatabase db = database(); - - QString queryString = "INSERT INTO Pages " - "(PageIndex) " - "VALUES(?)"; - - QSqlQuery query(db); - - query.prepare(queryString); - query.addBindValue(page.index()); - - if (!query.exec()) { + QSqlDatabase database; + if (QSqlDatabase::contains(mConnectionName)) { + database = QSqlDatabase::database(mConnectionName); + } else { + database = QSqlDatabase::addDatabase("QSQLITE", mConnectionName); + database.setDatabaseName(mDatabaseName); + } + if (!database.isValid()) { + close(); return false; } - - page.setId(query.lastInsertId().toInt()); - - QList<HsWidgetData> &widgets = page.widgets(); - for (int i = 0; i < widgets.count(); ++i) { - widgets[i].setPageId(page.id()); - if (!insertWidget(widgets[i])) { - return false; - } - } - - return true; -} - - -/*! - Updates a page based on given \a page data. Includes children - data if \a getChildren is true -*/ -bool HsDatabase::updatePage(const HsPageData &page, bool updateChildren) -{ - QSqlDatabase db = database(); - - QString queryString = "UPDATE Pages " - "SET PageIndex = ? " - "WHERE Id = ?"; - - - QSqlQuery query(db); - - query.prepare(queryString); - query.addBindValue(page.index()); - query.addBindValue(page.id()); - - if (!query.exec()) { - return false; - } - - if (!updateChildren) { - return true; - } - - QList<HsWidgetData> widgets = page.widgets(); - for (int i = 0; i < widgets.count(); ++i) { - if (!updateWidget(widgets[i])) { + if (!database.isOpen()) { + if (!database.open()) { + close(); return false; } } return true; } + +/*! + Closes the database connection. +*/ +void HsDatabase::close() +{ + { + QSqlDatabase database = QSqlDatabase::database(mConnectionName); + if (database.isValid() && database.isOpen()) { + database.close(); + } + } + QSqlDatabase::removeDatabase(mConnectionName); +} /*! - Deletes page with given \a id + Begins a transaction on the database if the driver + supports transactions. Returns true if the operation + succeeded. Otherwise returns false. +*/ +bool HsDatabase::transaction() +{ + return QSqlDatabase::database(mConnectionName).transaction(); +} + +/*! + Rolls back a transaction on the database, if the driver + supports transactions and a transaction() has been started. + Returns true if the operation succeeded. Otherwise returns + false. */ -bool HsDatabase::deletePage(int id) +bool HsDatabase::rollback() { - HsPageData pageToBeDeleted; + return QSqlDatabase::database(mConnectionName).rollback(); +} + +/*! + Commits a transaction to the database if the driver supports + transactions and a transaction() has been started. Returns + true if the operation succeeded. Otherwise returns false. +*/ +bool HsDatabase::commit() +{ + return QSqlDatabase::database(mConnectionName).commit(); +} - if (!page(id, pageToBeDeleted, false)) { - return false; - } - - QSqlDatabase db = database(); - - QString queryString = "DELETE FROM Pages " - "WHERE Id = ?"; +/*! - QSqlQuery query(db); - - query.prepare(queryString); - query.addBindValue(id); - - if (!query.exec()) { +*/ +bool HsDatabase::scene(HsSceneData &data) +{ + if (!checkConnection()) { return false; } - //update other indexes - QList<HsPageData> allPages; - if (!pages(allPages)) { - return false; - } + QSqlQuery query(QSqlDatabase::database(mConnectionName)); - HsPageData page; - foreach (page, allPages) { - if (page.index() > pageToBeDeleted.index()) { - page.setIndex(page.index() - 1); - if (!updatePage(page, false)) { - return false; - } - } + QString statement = + "SELECT id, portraitWallpaper, landscapeWallpaper, defaultPageId, maximumPageCount " + "FROM Scene"; + + if (query.prepare(statement) && query.exec() && query.next()) { + data.id = query.value(0).toInt(); + data.portraitWallpaper = query.value(1).toString(); + data.landscapeWallpaper = query.value(2).toString(); + data.defaultPageId = query.value(3).toInt(); + data.maximumPageCount = query.value(4).toInt(); + return true; } - - return true; - + + return false; } /*! - Returns widget data for the widget with given id. Includes children - data if \a getChildren is true + */ -bool HsDatabase::widget(int id, HsWidgetData &widget, bool getChildren) +bool HsDatabase::updateScene(const HsSceneData &data) { - QSqlDatabase db = database(); - QSqlQuery query(db); - - QString queryString = "SELECT * FROM Widgets " - "WHERE Id = ?"; - - query.prepare(queryString); - query.addBindValue(id); - - if (!query.exec() || !query.next()) { + if (!checkConnection()) { return false; } + + QSqlQuery query(QSqlDatabase::database(mConnectionName)); + + QString statement = + "UPDATE Scene " + "SET portraitWallpaper = ?, landscapeWallpaper = ? " + "WHERE id = ?"; + + if (query.prepare(statement)) { + query.addBindValue(data.portraitWallpaper); + query.addBindValue(data.landscapeWallpaper); + query.addBindValue(data.id); + return query.exec(); + } - return parseWidget(query, getChildren, widget); + return false; } /*! - Insert widget based on given \a widget data + */ -bool HsDatabase::insertWidget(HsWidgetData &widget) -{ - QSqlDatabase db = database(); +bool HsDatabase::pages(QList<HsPageData> &data) +{ + if (!checkConnection()) { + return false; + } + + QSqlQuery query(QSqlDatabase::database(mConnectionName)); + + QString statement = + "SELECT id, indexPosition " + "FROM Pages " + "ORDER BY indexPosition"; - QString queryString = "INSERT INTO Widgets " - "(Uri, PageId) " - "VALUES(?, ?)"; - - QSqlQuery query(db); + if (query.prepare(statement) && query.exec()) { + data.clear(); + while (query.next()) { + HsPageData d; + d.id = query.value(0).toInt(); + d.indexPosition = query.value(1).toInt(); + data.append(d); + } + return true; + } - query.prepare(queryString); - query.addBindValue(widget.uri()); - query.addBindValue(widget.pageId()); + return false; +} + +/*! - if (!query.exec()) { +*/ +bool HsDatabase::page(HsPageData &data) +{ + if (!checkConnection()) { return false; } - widget.setId(query.lastInsertId().toInt()); + QSqlQuery query(QSqlDatabase::database(mConnectionName)); - QList<HsWidgetPresentationData> &presentations = widget.presentations(); - for (int i = 0; i < presentations.count(); ++i) { - presentations[i].setWidgetId(widget.id()); - if (!insertWidgetPresentation(presentations[i])) { - return false; + QString statement = + "SELECT indexPosition " + "FROM Pages " + "WHERE id = ?"; + + if (query.prepare(statement)) { + query.addBindValue(data.id); + if (query.exec() && query.next()) { + data.indexPosition = query.value(0).toInt(); + return true; } } - return true; + return false; +} + +/*! + +*/ +bool HsDatabase::insertPage(HsPageData &data) +{ + if (!checkConnection()) { + return false; + } + + QSqlQuery query(QSqlDatabase::database(mConnectionName)); + + QString statement = + "INSERT INTO Pages " + "(indexPosition) " + "VALUES " + "(?)"; + + if (query.prepare(statement)) { + query.addBindValue(data.indexPosition); + if (query.exec()) { + data.id = query.lastInsertId().toInt(); + return true; + } + } + + return false; } /*! - Insert widget based on given \a widget data. Widget \a databaseId - is written on return. + */ -bool HsDatabase::insertWidget(const HsWidgetData &widget, - int &databaseId) +bool HsDatabase::updatePage(const HsPageData &data) { - QSqlDatabase db = database(); + if (!checkConnection()) { + return false; + } + + QSqlQuery query(QSqlDatabase::database(mConnectionName)); + + QString statement = + "UPDATE Pages " + "SET indexPosition = ? " + "WHERE id = ?"; - QString queryString = "INSERT INTO Widgets " - "(Uri, PageId) " - "VALUES(?, ?)"; - - QSqlQuery query(db); + if (query.prepare(statement)) { + query.addBindValue(data.indexPosition); + query.addBindValue(data.id); + return query.exec(); + } - query.prepare(queryString); - query.addBindValue(widget.uri()); - query.addBindValue(widget.pageId()); + return false; +} + +/*! - if (!query.exec()) { - QSqlError err = query.lastError(); +*/ +bool HsDatabase::deletePage(int id) +{ + if (!checkConnection()) { return false; } - databaseId = query.lastInsertId().toInt(); + QSqlQuery query(QSqlDatabase::database(mConnectionName)); + + QString statement = + "DELETE FROM Pages " + "WHERE id = ?"; + + if (query.prepare(statement)) { + query.addBindValue(id); + return query.exec(); + } + + return false; +} + +/*! - QList<HsWidgetPresentationData> presentations = widget.presentations(); - for (int i = 0; i < presentations.count(); ++i) { - presentations[i].setWidgetId(databaseId); - if (!insertWidgetPresentation(presentations[i])) { - return false; +*/ +bool HsDatabase::widgets(int pageId, QList<HsWidgetData> &data) +{ + if (!checkConnection()) { + return false; + } + + QSqlQuery query(QSqlDatabase::database(mConnectionName)); + + QString statement = + "SELECT id, uri " + "FROM Widgets " + "WHERE pageId = ?"; + + if (query.prepare(statement)) { + query.addBindValue(pageId); + if (query.exec()) { + data.clear(); + while (query.next()) { + HsWidgetData d; + d.id = query.value(0).toInt(); + d.uri = query.value(1).toString(); + d.pageId = pageId; + data.append(d); + } + return true; } } - return true; + return false; } /*! - Updates a widget based on given \a widget data. Includes children - if \a getChildren is true + */ -bool HsDatabase::updateWidget(const HsWidgetData &widget, - bool updateChildren) +bool HsDatabase::widgets(const QString &uri, QList<HsWidgetData> &data) { - QSqlDatabase db = database(); + if (!checkConnection()) { + return false; + } + + QSqlQuery query(QSqlDatabase::database(mConnectionName)); + + QString statement = + "SELECT id, pageId " + "FROM Widgets " + "WHERE uri = ?"; - QString queryString = "UPDATE Widgets " - "SET Uri = ?"; - - if (widget.pageId() != -1) { - queryString += ", PageId = ?"; + if (query.prepare(statement)) { + query.addBindValue(uri); + if (query.exec()) { + data.clear(); + while (query.next()) { + HsWidgetData d; + d.id = query.value(0).toInt(); + d.uri = uri; + d.pageId = query.value(1).toInt(); + data.append(d); + } + return true; + } } - queryString += " WHERE Id = ?"; + return false; +} + +/*! - - QSqlQuery query(db); +*/ +bool HsDatabase::widget(HsWidgetData &data) +{ + if (!checkConnection()) { + return false; + } + + QSqlQuery query(QSqlDatabase::database(mConnectionName)); + + QString statement = + "SELECT uri, pageId " + "FROM Widgets " + "WHERE id = ?"; - query.prepare(queryString); - query.addBindValue(widget.uri()); - if (widget.pageId() != -1) { - query.addBindValue(widget.pageId()); + if (query.prepare(statement)) { + query.addBindValue(data.id); + if (query.exec() && query.next()) { + data.uri = query.value(0).toString(); + data.pageId = query.value(1).toInt(); + return true; + } } - query.addBindValue(widget.id()); + + return false; +} - if (!query.exec()) { +/*! + +*/ +bool HsDatabase::insertWidget(HsWidgetData &data) +{ + if (!checkConnection()) { return false; } - if (!updateChildren) { - return true; - } + QSqlQuery query(QSqlDatabase::database(mConnectionName)); - QList<HsWidgetPresentationData> presentations = widget.presentations(); - for (int i = 0; i < presentations.count(); ++i) { - if (!updateWidgetPresentation(presentations[i])) { - return false; + QString statement = + "INSERT INTO Widgets " + "(uri, pageId) " + "VALUES " + "(?, ?)"; + + if (query.prepare(statement)) { + query.addBindValue(data.uri); + query.addBindValue(data.pageId); + if (query.exec()) { + data.id = query.lastInsertId().toInt(); + return true; } } - return true; + return false; } /*! - Deletes widget with given \a widget id + +*/ +bool HsDatabase::updateWidget(const HsWidgetData &data) +{ + if (!checkConnection()) { + return false; + } + + QSqlQuery query(QSqlDatabase::database(mConnectionName)); + + QString statement = + "UPDATE Widgets " + "SET uri = ?, pageId = ? " + "WHERE id = ?"; + + if (query.prepare(statement)) { + query.addBindValue(data.uri); + query.addBindValue(data.pageId); + query.addBindValue(data.id); + return query.exec(); + } + + return false; +} + +/*! + */ bool HsDatabase::deleteWidget(int id) { - QSqlDatabase db = database(); - - QString queryString = "DELETE FROM Widgets " - "WHERE Id = ?"; + if (!checkConnection()) { + return false; + } + + QSqlQuery query(QSqlDatabase::database(mConnectionName)); - QSqlQuery query(db); + QString statement = + "DELETE FROM Widgets " + "WHERE id = ?"; - query.prepare(queryString); - query.addBindValue(id); + if (query.prepare(statement)) { + query.addBindValue(id); + return query.exec(); + } - return query.exec(); + return false; } /*! - Deletes all widgets with given \a uri + */ bool HsDatabase::deleteWidgets(const QString &uri) { - QSqlDatabase db = database(); - - QString queryString = "DELETE FROM Widgets " - "WHERE Uri = ?"; - - QSqlQuery query(db); - - query.prepare(queryString); - query.addBindValue(uri); - - return query.exec(); -} - -/*! - Returns widget \a presentation data for the widget with given \a widgetId. - Presentations can be distinguished by given \a key. -*/ -bool HsDatabase::widgetPresentation(int widgetId, - const QString &key, - HsWidgetPresentationData &presentation) -{ - Q_UNUSED(key); - - QSqlDatabase db = database(); - QSqlQuery query(db); - - QString queryString = "SELECT * FROM WidgetPresentations " - "WHERE WidgetId = ? " - "AND Key = ?"; - - query.prepare(queryString); - query.addBindValue(widgetId); - query.addBindValue(key); - - if (!query.exec() || !query.next()) { + if (!checkConnection()) { return false; } - return parseWidgetPresentation(query, presentation); + QSqlQuery query(QSqlDatabase::database(mConnectionName)); + + QString statement = + "DELETE FROM Widgets " + "WHERE uri = ?"; + + if (query.prepare(statement)) { + query.addBindValue(uri); + return query.exec(); + } + + return false; } /*! - Inserts a widget \a presentation. + */ -bool HsDatabase::insertWidgetPresentation(HsWidgetPresentationData &presentation) +bool HsDatabase::widgetPresentation(HsWidgetPresentationData &data) { - QSqlDatabase db = database(); - - QString queryString = "INSERT INTO WidgetPresentations " - "(Key, Height, Width, YPosition, XPosition, ZValue, WidgetId) " - "VALUES(?, ?, ?, ?, ?, ?, ?)"; - - QSqlQuery query(db); - - query.prepare(queryString); - query.addBindValue(presentation.key()); - query.addBindValue(presentation.size().height()); - query.addBindValue(presentation.size().width()); - query.addBindValue(presentation.position().y()); - query.addBindValue(presentation.position().x()); - query.addBindValue(presentation.zValue()); - query.addBindValue(presentation.widgetId()); - - if (!query.exec()) { + if (!checkConnection()) { return false; } - presentation.setId(query.lastInsertId().toInt()); + QSqlQuery query(QSqlDatabase::database(mConnectionName)); + + QString statement = + "SELECT x, y, width, height, zValue " + "FROM WidgetPresentations " + "WHERE key = ? AND widgetId = ?"; - return true; + if (query.prepare(statement)) { + query.addBindValue(data.key); + query.addBindValue(data.widgetId); + if (query.exec() && query.next()) { + data.x = query.value(0).toReal(); + data.y = query.value(1).toReal(); + data.width = query.value(2).toReal(); + data.height = query.value(3).toReal(); + data.zValue = query.value(4).toReal(); + return true; + } + } + + return false; } /*! - Update a widget \a presentation. -*/ -bool HsDatabase::updateWidgetPresentation(const HsWidgetPresentationData &presentation) -{ - QSqlDatabase db = database(); - QString queryString = "UPDATE WidgetPresentations " - "SET Key = ?, Height = ?, Width = ?, YPosition = ?, XPosition = ?, ZValue = ?"; - - if (presentation.widgetId() != -1) { - queryString += ", WidgetId = ?"; +*/ +bool HsDatabase::setWidgetPresentation(const HsWidgetPresentationData &data) +{ + if (!checkConnection()) { + return false; } - - queryString += " WHERE Id = ?"; + + QSqlQuery query(QSqlDatabase::database(mConnectionName)); - QSqlQuery query(db); + QString statement = + "REPLACE INTO WidgetPresentations " + "(key, x, y, width, height, zValue, widgetId) " + "VALUES (?, ?, ?, ?, ?, ?, ?)"; - query.prepare(queryString); - query.addBindValue(presentation.key()); - query.addBindValue(presentation.size().height()); - query.addBindValue(presentation.size().width()); - query.addBindValue(presentation.position().y()); - query.addBindValue(presentation.position().x()); - query.addBindValue(presentation.zValue()); - if (presentation.widgetId() != -1) { - query.addBindValue(presentation.widgetId()); - } - query.addBindValue(presentation.id()); + if (query.prepare(statement)) { + query.addBindValue(data.key); + query.addBindValue(data.x); + query.addBindValue(data.y); + query.addBindValue(data.width); + query.addBindValue(data.height); + query.addBindValue(data.zValue); + query.addBindValue(data.widgetId); + return query.exec(); + } - return query.exec(); + return false; } /*! - Delete widget \a presentation width given \a id. + */ -bool HsDatabase::deleteWidgetPresentation(int id) +bool HsDatabase::deleteWidgetPresentation(int widgetId, const QString &key) { - QSqlDatabase db = database(); + if (!checkConnection()) { + return false; + } + + QSqlQuery query(QSqlDatabase::database(mConnectionName)); - QString queryString = "DELETE FROM WidgetPresentations " - "WHERE Id = ?"; - - QSqlQuery query(db); + QString statement = + "DELETE FROM WidgetPresentations " + "WHERE key = ? AND widgetId = ?"; - query.prepare(queryString); - query.addBindValue(id); + if (query.prepare(statement)) { + query.addBindValue(key); + query.addBindValue(widgetId); + return query.exec(); + } - return query.exec(); + return false; } /*! - Set widget preference \a value for given \a key for widget with given \a widgetId + */ -bool HsDatabase::setWidgetPreferenceForKey(int widgetId, - const QString &key, - const QString &value) +bool HsDatabase::widgetPreferences(int widgetId, QVariantHash &data) { - QSqlDatabase db = database(); - - QString queryString = "SELECT COUNT() " - "FROM WidgetPreferences " - "WHERE WidgetId = ? " - "AND Key = ?"; - - QSqlQuery query(db); - - query.prepare(queryString); - query.addBindValue(widgetId); - query.addBindValue(key); - - if (!query.exec() || !query.next()) { + if (!checkConnection()) { return false; } - int count = query.value(0).toInt(); + QSqlQuery query(QSqlDatabase::database(mConnectionName)); + + QString statement = + "SELECT key, value " + "FROM WidgetPreferences " + "WHERE widgetId = ?"; - if (count) { - queryString = "UPDATE WidgetPreferences " - "SET Value = :value " - "WHERE WidgetId = :widgetId " - "AND Key = :key"; - } else { - queryString = "INSERT INTO WidgetPreferences " - "(WidgetId, Key, Value) " - "VALUES(:widgetId, :key, :value)"; + if (query.prepare(statement)) { + query.addBindValue(widgetId); + if (query.exec()) { + data.clear(); + while (query.next()) { + data.insert(query.value(0).toString(), + query.value(1)); + } + return true; + } } - query.prepare(queryString); - query.bindValue(":widgetId", widgetId); - query.bindValue(":value", value); - query.bindValue(":key", key); - - return query.exec(); + return false; } /*! - Returns widget preference \a value for given \a key for widget with given \a widgetId + */ -bool HsDatabase::widgetPreferenceForKey(int widgetId, - const QString &key, - QString &value) +bool HsDatabase::widgetPreference(int widgetId, const QString &key, QVariant &value) { - QSqlDatabase db = database(); - - QString queryString = "SELECT Value " - "FROM WidgetPreferences " - "WHERE WidgetId = ? " - "AND Key = ?"; - - QSqlQuery query(db); - - query.prepare(queryString); - query.addBindValue(widgetId); - query.addBindValue(key); - - if (!query.exec() || !query.next()) { + if (!checkConnection()) { return false; } - value = query.value(0).toString(); + QSqlQuery query(QSqlDatabase::database(mConnectionName)); - return true; -} + QString statement = + "SELECT value " + "FROM WidgetPreferences " + "WHERE key = ? AND widgetId = ?"; -/*! - Store widget \a preferences for given \a widgetId. Returns true - if successfull. -*/ -bool HsDatabase::setWidgetPreferences(int widgetId, const QVariantMap &preferences) -{ - QSqlDatabase db = database(); - QSqlQuery query(db); - - QList<QString> deleteNames = preferences.keys(QVariant()); - QVariantMap insertOrReplaceMap(preferences); - foreach (QString deleteName, deleteNames) { - insertOrReplaceMap.remove(deleteName); + if (query.prepare(statement)) { + query.addBindValue(key); + query.addBindValue(widgetId); + if (query.exec() && query.next()) { + value = query.value(0); + return true; + } } - if (!deleteNames.isEmpty()) { - QString queryString = "DELETE FROM WidgetPreferences " - "WHERE WidgetId = ? " - "AND Key = ?"; + return false; +} + +/*! + +*/ +bool HsDatabase::setWidgetPreferences(int widgetId, const QVariantHash &data) +{ + if (!checkConnection()) { + return false; + } + + QSqlQuery query(QSqlDatabase::database(mConnectionName)); + + QList<QString> deleteKeys = data.keys(QVariant()); + QVariantHash insertOrReplaceData(data); + foreach (QString key, deleteKeys) { + insertOrReplaceData.remove(key); + } + + if (!deleteKeys.isEmpty()) { + QString statement = + "DELETE FROM WidgetPreferences " + "WHERE key = ? AND widgetId = ?"; - if (query.prepare(queryString)) { - query.addBindValue(toVariantList(widgetId, deleteNames.count())); - query.addBindValue(toVariantList(deleteNames)); + if (query.prepare(statement)) { + query.addBindValue(toVariantList(deleteKeys)); + query.addBindValue(toVariantList(widgetId, deleteKeys.count())); if (!query.execBatch()) { return false; } @@ -740,15 +727,16 @@ } } - if (!insertOrReplaceMap.isEmpty()) { - QString queryString = "REPLACE INTO WidgetPreferences " - "(WidgetId, Key, Value) " - "VALUES (?, ?, ?)"; + if (!insertOrReplaceData.isEmpty()) { + QString statement = + "REPLACE INTO WidgetPreferences " + "(key, value, widgetId) " + "VALUES (?, ?, ?)"; - if (query.prepare(queryString)) { - query.addBindValue(toVariantList(widgetId, insertOrReplaceMap.count())); - query.addBindValue(toVariantList(insertOrReplaceMap.keys())); - query.addBindValue(toVariantList(insertOrReplaceMap.values())); + if (query.prepare(statement)) { + query.addBindValue(toVariantList(insertOrReplaceData.keys())); + query.addBindValue(toVariantList(insertOrReplaceData.values())); + query.addBindValue(toVariantList(widgetId, insertOrReplaceData.count())); if (!query.execBatch()) { return false; } @@ -759,198 +747,44 @@ return true; } - + /*! - Fetch widget \a preferences based on given \a widgetId. Returns - true if successfull. + Sets the database instance. The existing instance + will be deleted. */ -bool HsDatabase::widgetPreferences(int widgetId, QVariantMap &preferences) +void HsDatabase::setInstance(HsDatabase *instance) { - QSqlDatabase db = database(); - QSqlQuery query(db); - - QString queryString = "SELECT Key, Value " - "FROM WidgetPreferences " - "WHERE WidgetId = ?"; - - query.prepare(queryString); - query.addBindValue(widgetId); - - if (query.exec()) { - while (query.next()) { - preferences.insert(query.value(0).toString(), - query.value(1)); - } - } else { - return false; - } - return true; + mInstance.reset(instance); } /*! - Returns instance \a ids of the widget identified by the given \a uri + Returns the database instance. */ -bool HsDatabase::widgetIds(const QString &uri, QList<int> &ids) +HsDatabase *HsDatabase::instance() { - QSqlDatabase db = database(); - QSqlQuery query(db); - - QString queryString = "SELECT Id " - "FROM Widgets " - "WHERE Uri = ?"; - - query.prepare(queryString); - query.addBindValue(uri); - - if (!query.exec() || !query.next()) { - return false; - } - - ids << query.value(0).toInt(); - while (query.next()) { - ids << query.value(0).toInt(); - } - - return true; -} - -/*! - Constructor -*/ -HsDatabase::HsDatabase() - : QObject() -{ -} -/*! - Open database from given \a databaseName -*/ -bool HsDatabase::openDatabase(const QString &databaseName) -{ - QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", DATABASE_CONNECTION_NAME); - db.setDatabaseName(databaseName); - if (!db.open()) { - HSDEBUG( db.lastError().text().toLatin1() ); - return false; - } - return true; + return mInstance.data(); } /*! - Parses \a page data from given \a query. Include child - data when \a getChildren is set to true. + Returns the current database instance. Callers of this + function take ownership of the instance. The current + database instance will be reset to null. */ -bool HsDatabase::parsePage(const QSqlQuery &query, - bool getChildren, - HsPageData &page) +HsDatabase *HsDatabase::takeInstance() { - HsPageData temp; - - temp.setId(columnValue(query, "Id").toInt()); - temp.setIndex(columnValue(query, "PageIndex").toInt()); - - if (getChildren) { - QSqlDatabase db = database(); - QSqlQuery q(db); - - QString queryString = "SELECT * " - "FROM Widgets " - "WHERE PageId = ?"; - - q.prepare(queryString); - q.addBindValue(temp.id()); - - if (!q.exec()) { - return false; - } - - while (q.next()) { - HsWidgetData widget; - if (!parseWidget(q, true, widget)) { - return false; - } - temp.widgets() << widget; - } - } - - page = temp; - - return true; + return mInstance.take(); +} + +/*! + Checks the connection validity. Returns true if the + connection is valid. +*/ +bool HsDatabase::checkConnection() const +{ + return QSqlDatabase::database(mConnectionName).isValid(); } /*! - Parses \a widget data from given \a query. Include child data - when \a getChildren is set to true. + Points to the database instance. */ -bool HsDatabase::parseWidget(const QSqlQuery &query, - bool getChildren, - HsWidgetData &widget) -{ - HsWidgetData temp; - - temp.setId(columnValue(query, "Id").toInt()); - temp.setUri(columnValue(query, "Uri").toString()); - temp.setPageId(columnValue(query, "PageId").toInt()); - - if (getChildren) { - QSqlDatabase db = database(); - QSqlQuery q(db); - - QString queryString = "SELECT * " - "FROM WidgetPresentations " - "WHERE WidgetId = ?"; - - q.prepare(queryString); - q.addBindValue(temp.id()); - - if (!q.exec()) { - return false; - } - - while (q.next()) { - HsWidgetPresentationData presentation; - if (!parseWidgetPresentation(q, presentation)) { - return false; - } - temp.presentations() << presentation; - } - } - - widget = temp; - - return true; -} - -/*! - Parses widget \a presentation data from given SQL \a query. -*/ -bool HsDatabase::parseWidgetPresentation(const QSqlQuery &query, - HsWidgetPresentationData &presentation) -{ - presentation.setId(columnValue(query, "Id").toInt()); - presentation.setKey(columnValue(query, "Key").toString()); - presentation.setPosition(QPointF(columnValue(query, "XPosition").toDouble(), - columnValue(query, "YPosition").toDouble())); - presentation.setSize(QSizeF(columnValue(query, "Width").toDouble(), - columnValue(query, "Height").toDouble())); - presentation.setZValue(columnValue(query, "ZValue").toDouble()); - presentation.setWidgetId(columnValue(query, "WidgetId").toInt()); - - return true; -} - -/*! - Parses column value with given \a columnName from given SQL \a query. -*/ -QVariant HsDatabase::columnValue(const QSqlQuery &query, - const QString &columnName) const -{ - return query.value(query.record().indexOf(columnName)); -} - -/*! - Returns database connection -*/ -QSqlDatabase HsDatabase::database() const -{ - return QSqlDatabase::database(DATABASE_CONNECTION_NAME); -} +QScopedPointer<HsDatabase> HsDatabase::mInstance(0); diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hsipcchannel.cpp --- a/homescreenapp/hsdomainmodel/src/hsipcchannel.cpp Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,149 +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 <QDataStream> -#include <QDebug> -#include "hsipcchannelclient.h" - -/*! - \class HsIpcChannel - \ingroup group_hsutils - \brief Homescreen ipc transport channel. - - Responsible for reading and writing ipc messages. Uses QLocalSocket for transport - mechanism. - -*/ -HsIpcChannel::~HsIpcChannel() -{ -} - -bool HsIpcChannel::isConnected() const -{ - if(!mSocket)return false; - return mSocket->state() == QLocalSocket::ConnectedState; -} - -bool HsIpcChannel::sendMessage(const QVariantMap &message) -{ - if (!isConnected()) { - return false; - } - - QByteArray byteArray; - QDataStream out(&byteArray, QIODevice::WriteOnly); - out.setVersion(QDataStream::Qt_4_6); - out << (quint32)0; //fill size placeholder - out << message; - out.device()->seek(0); // now write right value to it - out << (quint32)(byteArray.size() - sizeof(quint32)); - - mSocket->write(byteArray); - - return true; -} - -bool HsIpcChannel::waitForSendMessage(const QVariantMap &message) -{ - if (!isConnected()) { - return false; - } - QByteArray byteArray; - QDataStream out(&byteArray, QIODevice::WriteOnly); - out.setVersion(QDataStream::Qt_4_6); - out << (quint32)0; //fill size placeholder - out << message; - out.device()->seek(0); // now write right value to it - out << (quint32)(byteArray.size() - sizeof(quint32)); - - mSocket->write(byteArray); - bool ok = true; - while(mSocket->bytesToWrite() && ok){ - ok = mSocket->waitForBytesWritten(1000);// timeout in 1sec - } - - return ok; -} - -bool HsIpcChannel::waitForReadMessage(QVariantMap &message) -{ - if (!isConnected()) { - return false; - } - - QDataStream in(mSocket); - in.setVersion(QDataStream::Qt_4_6); - quint32 blockSize = 0; - bool ok = mSocket->waitForReadyRead(); - while( ok && mSocket->bytesAvailable() < (int)sizeof(quint32) ){ - ok = mSocket->waitForReadyRead(1000); - } - if(!ok){ - return false; - } - in >> blockSize; - - while(ok && mSocket->bytesAvailable() < blockSize){ - ok = mSocket->waitForReadyRead(1000); - } - - if(!ok){ - return false; - } - - // now we have all data - message.clear(); - in >> message; - return true; -} - -void HsIpcChannel::onReadyRead() -{ - QDataStream in(mSocket); - in.setVersion(QDataStream::Qt_4_6); - - if (mBlockSize == 0) { - if (mSocket->bytesAvailable() < (int)sizeof(quint32)){ - return; - } - in >> mBlockSize; - } - - if (mSocket->bytesAvailable() < mBlockSize){ - return; - } - mBlockSize = 0; - // now we have all data - QVariantMap message; - in >> message; - - emit messageReceived(message); -} - -void HsIpcChannel::onError(QLocalSocket::LocalSocketError socketError) -{ - Q_UNUSED(socketError); - emit connectionError(); -} - - - -HsIpcChannel::HsIpcChannel(QObject *parent) - : QObject(parent),mBlockSize(0),mSocket(0) -{ - -} diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hsipcchannelclient.cpp --- a/homescreenapp/hsdomainmodel/src/hsipcchannelclient.cpp Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +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 "hsipcchannelclient.h" - -/*! - \class HsIpcChannelClient - \ingroup group_hsutils - \brief Homescreen ipc transport channel client api. - - Client side communication channel management. - -*/ -HsIpcChannelClient::HsIpcChannelClient(QObject *parent) -: HsIpcChannel(parent) -{ -} - -HsIpcChannelClient::~HsIpcChannelClient() -{ - delete mSocket; -} - -bool HsIpcChannelClient::openConnection(const QString &serverName) -{ - closeConnection(); - delete mSocket; - mSocket = NULL; - mSocket = new QLocalSocket; - connect(mSocket, SIGNAL(connected()), SLOT(onConnected())); - connect(mSocket, SIGNAL(error(QLocalSocket::LocalSocketError)), - SLOT(onError(QLocalSocket::LocalSocketError))); - - mSocket->connectToServer(serverName); - - return true; -} -bool HsIpcChannelClient::waitForOpenConnection(const QString &serverName) -{ - delete mSocket; - mSocket = NULL; - mSocket = new QLocalSocket; - connect(mSocket, SIGNAL(error(QLocalSocket::LocalSocketError)), - SLOT(onError(QLocalSocket::LocalSocketError))); - - mSocket->connectToServer(serverName); - return mSocket->waitForConnected(1000); -} - -void HsIpcChannelClient::closeConnection() -{ - Q_ASSERT(mSocket); - mSocket->disconnectFromServer(); -} - -bool HsIpcChannelClient::waitForCloseConnection() -{ - Q_ASSERT(mSocket); - mSocket->disconnectFromServer(); - return mSocket->waitForDisconnected(1000); -} - - - -void HsIpcChannelClient::onConnected() -{ - disconnect(mSocket,SIGNAL(connected()),this, SLOT(onConnected()) ); - - connect(mSocket, SIGNAL(readyRead()), SLOT(onReadyRead())); - connect(mSocket, SIGNAL(disconnected()), SIGNAL(disconnected())); - emit connectionEstablished(); -} diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hsipcchannelhost.cpp --- a/homescreenapp/hsdomainmodel/src/hsipcchannelhost.cpp Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +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 <QDebug> -#include "hsipcchannelhost.h" - -/*! - \class HsIpcChannelHost - \ingroup group_hsutils - \brief Homescreen ipc transport channel server api. - - Server side communication channel management. - -*/ - -HsIpcChannelHost::HsIpcChannelHost(QLocalSocket *socket,QObject *parent) - : HsIpcChannel(parent) -{ - Q_ASSERT(socket); - - mSocket = socket; - connect(mSocket, SIGNAL(error(QLocalSocket::LocalSocketError)), - SLOT(onError(QLocalSocket::LocalSocketError))); - connect(mSocket, SIGNAL(readyRead()), SLOT(onReadyRead())); - connect(mSocket, SIGNAL(disconnected()), SIGNAL(disconnected())); - qDebug()<< "HsIpcChannelHost::HsIpcChannelHost(): " << (int)this; -} - -HsIpcChannelHost::~HsIpcChannelHost() -{ - qDebug()<< "HsIpcChannelHost::~HsIpcChannelHost(): " << (int)this; - delete mSocket; -} - -void HsIpcChannelHost::closeConnection() -{ - mSocket->close(); -} \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hsipcconnectiondispatcher.cpp --- a/homescreenapp/hsdomainmodel/src/hsipcconnectiondispatcher.cpp Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +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 "hsipcconnectiondispatcher.h" -#include "hscontentpublishhandler.h" -#include "hsipcserver.h" -#include "hsipcchannelhost.h" - -/*! - \class HsIpcConnectionDispatcher - \ingroup group_hsutils - \brief Dispatch ipc connections. - - Creates homescreen ipc communication server and dispatch ipc connections - asynchronously for connection handlers. - -*/ - -HsIpcConnectionDispatcher::HsIpcConnectionDispatcher( - const QString &connectionName,QObject *parent) - : QObject(parent), - mConnectionName(connectionName), - mIpcServer(new HsIpcServer()) -{ - mIpcServer->setParent(this); - -} - -HsIpcConnectionDispatcher::~HsIpcConnectionDispatcher() -{ - -} - -bool HsIpcConnectionDispatcher::start() -{ - if(!mIpcServer->startServer(mConnectionName)){ - return false; - } - connect(mIpcServer, SIGNAL(newConnection()), - SLOT(onConnectionEstablished())); - return true; -} -void HsIpcConnectionDispatcher::stop() -{ - mIpcServer->stopServer(); -} - -void HsIpcConnectionDispatcher::onConnectionEstablished() -{ - QScopedPointer<HsIpcChannelHost> newChannel(mIpcServer->takeConnection()); - new HsContentPublishHandler(newChannel.data()); - newChannel.take(); -} - diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hsipcserver.cpp --- a/homescreenapp/hsdomainmodel/src/hsipcserver.cpp Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,92 +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 <QLocalServer> -#include <QDataStream> -#include <QDebug> -#include "hsipcserver.h" -#include "hsipcchannelhost.h" - -/*! - \class HsIpcServer - \ingroup group_hsutils - \brief Homescreen ipc server api. - - Server to host ipc communication. Signals when new - connection arrives. - -*/ - -HsIpcServer::HsIpcServer(QObject *parent) - : QObject(parent), - mServer(0) -{ -} - -HsIpcServer::~HsIpcServer() -{ - stopServer(); -} - -bool HsIpcServer::startServer(const QString &serverName) -{ - stopServer(); - QLocalServer::removeServer(serverName); - mServer = new QLocalServer; - connect(mServer, SIGNAL(newConnection()), SLOT(onNewConnection())); - if(!mServer->listen(serverName)){ - qDebug()<< "HsIpcServer::startServer listen failed"; - delete mServer; - mServer = NULL; - return false; - } - return true; -} - - -void HsIpcServer::stopServer() -{ - if (mServer) { - mServer->close(); - delete mServer; - mServer = NULL; - - } - while(!mConnections.isEmpty()){ - delete mConnections.dequeue(); - } - -} -HsIpcChannelHost* HsIpcServer::takeConnection() -{ - if(!mConnections.isEmpty()){ - return mConnections.dequeue(); - } - return 0; -} - -void HsIpcServer::onNewConnection() -{ - QLocalSocket* socket = mServer->nextPendingConnection(); - if (socket) { - qDebug() << "HsIpcServer::onNewConnection"; - QScopedPointer<HsIpcChannelHost> channel( new HsIpcChannelHost(socket) ); - mConnections.enqueue(channel.data()); - channel.take(); - emit newConnection(); - } -} diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hspage.cpp --- a/homescreenapp/hsdomainmodel/src/hspage.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsdomainmodel/src/hspage.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -16,16 +16,15 @@ */ #include <QPainter> +#include <QRectF> #include <QGraphicsLinearLayout> #include <HbInstance> +#include "hsdomainmodeldatastructures.h" #include "hspage.h" #include "hsscene.h" #include "hsdatabase.h" #include "hswidgethost.h" -#include "hswidgetdata.h" -#include "hswidgetpresentationdata.h" -#include "hspagedata.h" #include "hswallpaper.h" #include "hswidgetpositioningonwidgetadd.h" @@ -51,6 +50,9 @@ setFlag(QGraphicsItem::ItemHasNoContents); setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored)); + + mStartPoint["portrait"] = QPointF(); + mStartPoint["landscape"] = QPointF(); } /*! @@ -81,35 +83,31 @@ */ bool HsPage::load() { - HsDatabase *db = HsDatabase::instance(); - Q_ASSERT(db); + if (mDatabaseId < 0) { + return false; + } - HsPageData pageData; - if (!db->page(mDatabaseId, pageData, true)) { + HsDatabase *db = HsDatabase::instance(); + + QList<HsWidgetData> datas; + if (!db->widgets(mDatabaseId, datas)) { return false; } - QList<HsWidgetData> widgetDatas = pageData.widgets(); - foreach (HsWidgetData widgetData, widgetDatas) { - HsWidgetHost *widget = new HsWidgetHost(widgetData.id()); - connectWidget(widget); - widget->load(); - - if (!widget->isValid()) { - qDebug() << "HsPage: Widget loading failed."; - continue; + foreach (HsWidgetData data, datas) { + QScopedPointer<HsWidgetHost> widget(new HsWidgetHost(data.id)); + if(!widget->load() || !widget->isValid()) { + continue; } - + connectWidget(widget.data()); widget->setPage(this); - mWidgets << widget; + widget->initializeWidget(); + widget->showWidget(); + mWidgets.append(widget.data()); + widget->setParentItem(this); + widget.take(); // now this page owns widget } - foreach (HsWidgetHost *widget, mWidgets) { - widget->initializeWidget(); - widget->showWidget(); - widget->setParentItem(this); - } - return true; } @@ -171,17 +169,16 @@ HsWidgetPresentationData presentation; if (!widgetHost->widgetPresentationData(key, presentation)) { - presentation.setKey(key); - presentation.setPosition(QPointF()); + presentation.key = key; + presentation.setPos(QPointF()); presentation.setSize(widgetHost->preferredSize()); - presentation.setZValue(0); + presentation.zValue = 0; widgetHost->setWidgetPresentationData(presentation); } widgetHost->hide(); - widgetHost->setGeometry(QRectF(presentation.position(), - presentation.size())); - widgetHost->setZValue(presentation.zValue()); + widgetHost->setGeometry(presentation.geometry()); + widgetHost->setZValue(presentation.zValue); connectWidget(widgetHost); mNewWidgets << widgetHost; @@ -194,29 +191,39 @@ */ void HsPage::layoutNewWidgets() { - QList<QRectF> oldWidgetGeometries; + if (mNewWidgets.isEmpty()) { + return; + } + + QString key = HsScene::orientation() == Qt::Horizontal ? + "landscape" : "portrait"; - foreach(HsWidgetHost *widget, mNewWidgets) { - oldWidgetGeometries << widget->rect(); - } + QList<QRectF> rects; - QList<QRectF> newWidgetGeometries = - HsWidgetPositioningOnWidgetAdd::instance()->convert( - rect().adjusted(10, 10, -10, -10), - oldWidgetGeometries); - + foreach (HsWidgetHost *newWidget, mNewWidgets) { + rects << newWidget->rect(); + } + + HsWidgetPositioningOnWidgetAdd *algorithm = + HsWidgetPositioningOnWidgetAdd::instance(); + + QList<QRectF> calculatedRects = + algorithm->convert(HsScene::mainWindow()->layoutRect(), rects, mStartPoint[key]); + updateZValues(); - HsWidgetHost *widget = NULL; - for(int i = 0; i < mNewWidgets.count(); ++i) { - widget = mNewWidgets[i]; - widget->setGeometry(newWidgetGeometries[i]); + HsWidgetHost *widget = 0; + for (int i = 0; i < mNewWidgets.count(); ++i) { + widget = mNewWidgets.at(i); + widget->setGeometry(calculatedRects.at(i)); widget->setWidgetPresentation(); widget->setPage(this); widget->setParentItem(this); widget->show(); - mWidgets << widget; } + mStartPoint[key] = widget->geometry().bottomRight(); + mWidgets << mNewWidgets; + mNewWidgets.clear(); } /*! @@ -229,24 +236,18 @@ bool HsPage::deleteFromDatabase() { - HsDatabase *db = HsDatabase::instance(); - Q_ASSERT(db); - - db->transaction(); - + HsDatabase *db = HsDatabase::instance(); + foreach (HsWidgetHost *widget, mWidgets) { - if (!widget->deleteFromDatabase()) { - db->rollback(); + if (!widget->deleteFromDatabase()) { return false; } } if (!db->deletePage(mDatabaseId)) { - db->rollback(); return false; } - db->commit(); return true; } @@ -274,39 +275,79 @@ bool HsPage::updateZValues() { - if (mWidgets.isEmpty()) { - return true; - } - - QMultiMap<qreal, HsWidgetHost *> map; - foreach (HsWidgetHost *widget, mWidgets) { - map.insert(widget->zValue(), widget); - } - - QList<HsWidgetHost *> sortedWidgets = map.values(); - - HsWidgetHost *activeWidget = HsScene::instance()->activeWidget(); - if (sortedWidgets.contains(activeWidget)) { - sortedWidgets.removeOne(activeWidget); - sortedWidgets.append(activeWidget); + int z = 0; + + if (!mWidgets.isEmpty()) { + QMultiMap<qreal, HsWidgetHost *> map; + foreach (HsWidgetHost *widget, mWidgets) { + map.insert(widget->zValue(), widget); + } + + QList<HsWidgetHost *> sortedWidgets = map.values(); + + HsWidgetHost *activeWidget = HsScene::instance()->activeWidget(); + if (sortedWidgets.contains(activeWidget)) { + sortedWidgets.removeOne(activeWidget); + sortedWidgets.append(activeWidget); + } + + foreach (HsWidgetHost *widget, sortedWidgets) { + widget->setZValue(z++); + widget->setWidgetPresentation(); + } } - int z = 0; - foreach (HsWidgetHost *widget, sortedWidgets) { - widget->setZValue(z++); - widget->setWidgetPresentation(); - } - - foreach (HsWidgetHost *widget, mNewWidgets) { - widget->setZValue(z++); - widget->setWidgetPresentation(); + if (!mNewWidgets.isEmpty()) { + foreach (HsWidgetHost *widget, mNewWidgets) { + widget->setZValue(z++); + widget->setWidgetPresentation(); + } } return true; } + +HsPage *HsPage::createInstance(const HsPageData &pageData) +{ + HsDatabase *db = HsDatabase::instance(); + Q_ASSERT(db); + + HsPageData data(pageData); + if (db->insertPage(data)) { + HsPage *page = new HsPage; + page->setDatabaseId(data.id); + return page; + } + + return 0; +} + +/*! + Calls onShow() for contained widgets. +*/ +void HsPage::showWidgets() +{ + foreach (HsWidgetHost *widget, mWidgets) { + if (widget->parentItem() == this) { + widget->showWidget(); + } + } +} + +/*! + Calls onHide() for contained widgets. +*/ +void HsPage::hideWidgets() +{ + foreach (HsWidgetHost *widget, mWidgets) { + if (widget->parentItem() == this) { + widget->hideWidget(); + } + } +} + /*! Propogate online state to widgets. - */ void HsPage::setOnline(bool online) { @@ -318,21 +359,6 @@ } } -HsPage *HsPage::createInstance(const HsPageData &pageData) -{ - HsDatabase *db = HsDatabase::instance(); - Q_ASSERT(db); - - HsPageData data(pageData); - if (!db->insertPage(data)) { - return 0; - } - - HsPage *page = new HsPage; - page->setDatabaseId(data.id()); - return page; -} - void HsPage::connectWidget(HsWidgetHost *widget) { connect(widget, SIGNAL(widgetFinished(HsWidgetHost*)), @@ -346,14 +372,13 @@ void HsPage::onWidgetFinished(HsWidgetHost *widget) { - if (mNewWidgets.contains(widget)) { - mNewWidgets.removeOne(widget); - } else if (mWidgets.contains(widget)) { - mWidgets.removeOne(widget); - } else { - return; + Q_ASSERT(widget); + // It can be in new widget list if we haven't layouted it yet + // or layouted new widget and widget list + if (!mNewWidgets.removeOne(widget)) { + mWidgets.removeOne(widget); } - + disconnectWidget(widget); widget->uninitializeWidget(); widget->deleteFromDatabase(); diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hspagedata.cpp --- a/homescreenapp/hsdomainmodel/src/hspagedata.cpp Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,110 +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: HsPage meta data. -* -*/ - -#include "hspagedata.h" - -/*! - \class HsPageData - \ingroup group_hsdatamodel - \brief Contains page metadata. - - Used by content store and content service for - holding page metadata. -*/ - - -/*! - \fn HsPageData::HsPageData() - - Constructor -*/ -HsPageData::HsPageData() - : mId(-1), - mIndex(-1) -{ - -} - -/*! - \fn HsPageData::~HsPageData() - - Destructor -*/ -HsPageData::~HsPageData() -{ - -} - -/*! - \fn void HsPageData::setId(int aId) - - Set page \a pageId -*/ -void HsPageData::setId(int pageId) -{ - mId = pageId; -} - -/*! - \fn int HsPageData::id() const - - Return page id -*/ -int HsPageData::id() const -{ - return mId; -} - -/*! - \fn void HsPageData::setIndex(int index) - - Set page \a index i.e it's appearance order -*/ -void HsPageData::setIndex(int index) -{ - mIndex = index; -} - -/*! - \fn int HsPageData::index() const - - Return page index -*/ -int HsPageData::index() const -{ - return mIndex; -} - -/*! - \fn QList<HsWidgetData> HsPageData::widgets() const - - Get widgets belonging to this page -*/ -QList<HsWidgetData> HsPageData::widgets() const -{ - return mWidgets; -} - -/*! - \fn QList<HsWidgetData> &HsPageData::widgets() - - Get modifiable list of widgets belonging to this page -*/ -QList<HsWidgetData> &HsPageData::widgets() -{ - return mWidgets; -} diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hsscene.cpp --- a/homescreenapp/hsdomainmodel/src/hsscene.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsdomainmodel/src/hsscene.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -16,62 +16,50 @@ */ #include <HbInstance> +#include "hsdomainmodeldatastructures.h" #include "hsscene.h" -#include "hsscene_p.h" -#include "hsscenedata.h" #include "hspage.h" -#include "hspagedata.h" #include "hswidgethost.h" #include "hsdatabase.h" #include "hswallpaper.h" -#ifndef Q_OS_SYMBIAN -#include "hsipcconnectiondispatcher.h" -#endif +#include "hsdatabase.h" + -HsScenePrivate::HsScenePrivate() - : mDatabaseId(-1), - mIsOnline(true), - mWallpaper(0), - mActivePage(0), - mActiveWidget(0) -#ifndef Q_OS_SYMBIAN - ,mIpcConnectionDispatcher(0) -#endif -{ - mWallpaper = new HsWallpaper; -} - -HsScenePrivate::~HsScenePrivate() +/*! + Destructor. +*/ +HsScene::~HsScene() { delete mWallpaper; qDeleteAll(mPages); } - -HsScene::~HsScene() + +/*! + Return database id. +*/ +int HsScene::databaseId() const { + return mDatabaseId; } -int HsScene::databaseId() const -{ - return mD->mDatabaseId; -} - +/*! + Load scene from database. +*/ bool HsScene::load() { HsDatabase *db = HsDatabase::instance(); - Q_ASSERT(db); HsSceneData sceneData; if (!db->scene(sceneData)) { return false; } - if (sceneData.portraitWallpaper().isEmpty()) { - mD->mWallpaper->setImagesById(); + if (sceneData.portraitWallpaper.isEmpty()) { + mWallpaper->setImagesById(); } else { - mD->mWallpaper->setImagesByPaths( - sceneData.landscapeWallpaper(), - sceneData.portraitWallpaper()); + mWallpaper->setImagesByPaths( + sceneData.landscapeWallpaper, + sceneData.portraitWallpaper); } QList<HsPageData> pageDatas; @@ -79,116 +67,197 @@ return false; } - HsPage *page = 0; foreach (HsPageData pageData, pageDatas) { - page = new HsPage; - page->setDatabaseId(pageData.id()); + HsPage *page = new HsPage; + page->setDatabaseId(pageData.id); if (page->load()) { - mD->mPages << page; + mPages.append(page); } else { - qDebug() << "HsScene: Page loading failed."; - // TODO + delete page; + continue; + } + if (pageData.id == sceneData.defaultPageId) { + mActivePage = page; + mActivePage->setRemovable(false); } } - - int defaultPageIndex = sceneData.defaultPage().index(); - if(defaultPageIndex > -1){ - mD->mActivePage = mD->mPages[defaultPageIndex]; - mD->mActivePage->setRemovable(false); - } -#ifndef Q_OS_SYMBIAN - mD->mIpcConnectionDispatcher = new HsIpcConnectionDispatcher("hs_content_publish"); - mD->mIpcConnectionDispatcher->setParent(this); - return mD->mIpcConnectionDispatcher->start(); -#endif + + mMaximumPageCount = sceneData.maximumPageCount; + return true; } +/*! + Return wallpaper. +*/ HsWallpaper *HsScene::wallpaper() const { - return mD->mWallpaper; + return mWallpaper; } +/*! + Return pages array. +*/ QList<HsPage *> HsScene::pages() const { - return mD->mPages; + return mPages; } +/*! + Add page \a page. +*/ bool HsScene::addPage(HsPage *page) { if (!page) { return false; } - if (mD->mPages.contains(page)) { + if (mPages.contains(page)) { return true; } HsDatabase *db = HsDatabase::instance(); - - HsPageData pageData; - if (!db->page(page->databaseId(), pageData, false)) { + + HsPageData data; + data.id = page->databaseId(); + if (!db->page(data)) { return false; } - int index = mD->mPages.count(); - if (pageData.index() != index) { - pageData.setIndex(index); - if (!db->updatePage(pageData, false)) { + + db->transaction(); + + for (int i = data.indexPosition; i < mPages.count(); ++i) { + data.id = mPages.at(i)->databaseId(); + data.indexPosition = i + 1; + if (!db->updatePage(data)) { + db->rollback(); return false; } } - mD->mPages << page; + db->commit(); + + mPages.insert(data.indexPosition, page); return true; } +/*! + Removes page \a page. +*/ bool HsScene::removePage(HsPage *page) { if (!page) { return false; } - return mD->mPages.removeOne(page); + + if (!mPages.contains(page)) { + return true; + } + + int index = mPages.indexOf(page) + 1; + + HsDatabase *db = HsDatabase::instance(); + db->transaction(); + + HsPageData data; + for (int i = index; i < mPages.count(); ++i) { + data.id = mPages.at(i)->databaseId(); + data.indexPosition = i - 1; + if (!db->updatePage(data)) { + db->rollback(); + return false; + } + } + + if (!page->deleteFromDatabase()) { + db->rollback(); + return false; + } + + db->commit(); + + mPages.removeOne(page); + return true; } +/*! + Set active page \a page. +*/ bool HsScene::setActivePage(HsPage *page) { if (!page) { return false; } - if (!mD->mPages.contains(page)) { + if (!mPages.contains(page)) { return false; } - mD->mActivePage = page; + if (page == mActivePage) { + return true; + } + + mActivePage = page; + + foreach (HsPage *p, mPages) { + if (p == mActivePage) { + p->showWidgets(); + } else { + p->hideWidgets(); + } + } + return true; } +/*! + Set active page \a index. +*/ bool HsScene::setActivePageIndex(int index) { - if (index < 0 || mD->mPages.count() <= index) { + if (index < 0 || mPages.count() <= index) { return false; } - return setActivePage(mD->mPages[index]); + return setActivePage(mPages[index]); } +/*! + Return active page. +*/ HsPage *HsScene::activePage() const { - return mD->mActivePage; + return mActivePage; } +/*! + Return active page index. +*/ int HsScene::activePageIndex() const { - return mD->mPages.indexOf(mD->mActivePage); + return mPages.indexOf(mActivePage); } +/*! + Return maximum number of pages. +*/ +int HsScene::maximumPageCount() const +{ + return mMaximumPageCount; +} + +/*! + Set active widget \a widget. +*/ void HsScene::setActiveWidget(HsWidgetHost *widget) { - mD->mActiveWidget = widget; + mActiveWidget = widget; } +/*! + Return active widget. +*/ HsWidgetHost *HsScene::activeWidget() const { - return mD->mActiveWidget; + return mActiveWidget; } /*! Toggle application online state. Defaults @@ -196,17 +265,23 @@ */ void HsScene::setOnline(bool online) { - mD->mIsOnline = online; - foreach (HsPage *page, mD->mPages) { + mIsOnline = online; + foreach (HsPage *page, mPages) { page->setOnline(online); } } +/*! + Return current online setting. +*/ bool HsScene::isOnline()const { - return mD->mIsOnline; + return mIsOnline; } +/*! + Singleton. +*/ HsScene *HsScene::instance() { if (mInstance.isNull()) { @@ -215,20 +290,39 @@ return mInstance.data(); } +/*! + Return current orientation. +*/ Qt::Orientation HsScene::orientation() { - return hbInstance->orientation(); + return mainWindow()->orientation(); } +/*! + Return main window. +*/ HbMainWindow *HsScene::mainWindow() { return hbInstance->allMainWindows().first(); } +/*! + Constructor +*/ HsScene::HsScene(QObject *parent) - : QObject(parent) + : QObject(parent), + mDatabaseId(-1), + mIsOnline(true), + mWallpaper(0), + mMaximumPageCount(1), + mActivePage(0), + mActiveWidget(0) + { - mD.reset(new HsScenePrivate); + mWallpaper = new HsWallpaper; } +/*! + Points to the scene instance. +*/ QScopedPointer<HsScene> HsScene::mInstance(0); diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hsscenedata.cpp --- a/homescreenapp/hsdomainmodel/src/hsscenedata.cpp Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,125 +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: Scene meta data. -* -*/ - - -#include "hsscenedata.h" - - -/*! - \class HsSceneData - \ingroup group_hsdatamodel - \brief Contains scene metadata. - - Used by content store and content service for - holding scene metadata. -*/ - - -/*! - \fn HsSceneData::HsSceneData() - - Initialize scene id to -1 -*/ -HsSceneData::HsSceneData() - : mId(-1) -{ - -} - -/*! - \fn HsSceneData::~HsSceneData() - - Destructor -*/ -HsSceneData::~HsSceneData() -{ - -} - -/*! - \fn void HsSceneData::setId(int id) - - Set scene \a id -*/ -void HsSceneData::setId(int id) -{ - mId = id; -} - -/*! - \fn int HsSceneData::id() const - - Return scene id -*/ -int HsSceneData::id() const -{ - return mId; -} - -/*! - Sets portrait wallpaper \a path. -*/ -void HsSceneData::setPortraitWallpaper(const QString &path) -{ - mPortraitWallpaper = path; -} - -/*! - Returns portrait wallpaper. -*/ -QString HsSceneData::portraitWallpaper() const -{ - return mPortraitWallpaper; -} - -/*! - Sets landscape wallpaper \a path. -*/ -void HsSceneData::setLandscapeWallpaper(const QString &path) -{ - mLandscapeWallpaper = path; -} - -/*! - Returns landscape wallpaper. -*/ -QString HsSceneData::landscapeWallpaper() const -{ - return mLandscapeWallpaper; -} - -/*! - \fn void HsSceneData::setDefaultPage(const HsPageData &defaultPage) - - Set scene \a defaultPage -*/ -void HsSceneData::setDefaultPage(const HsPageData &defaultPage) -{ - mDefaultPage = defaultPage; -} - -/*! - \fn HsPageData HsSceneData::defaultPage() const - - Return scene default page -*/ -HsPageData HsSceneData::defaultPage() const -{ - return mDefaultPage; -} - - diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hsshortcutservice.cpp --- a/homescreenapp/hsdomainmodel/src/hsshortcutservice.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsdomainmodel/src/hsshortcutservice.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -19,13 +19,13 @@ #include "hsshortcutservice.h" #include "hsshortcutservice_p.h" #include "hsdatabase.h" -#include "hswidgetdata.h" +#include "hsdomainmodeldatastructures.h" #include "hsmenueventfactory.h" namespace { - const char SHORTCUT_ID[] = "mcsId"; - const char SHORTCUT_WIDGET_URI[] = "hsshortcutwidgetplugin"; + const char gShortcutId[] = "mcsId"; + const char gShortcutWidgetUri[] = "hsshortcutwidgetplugin"; } HsShortcutServicePrivate::HsShortcutServicePrivate(QStateMachine *stateMachine, QObject *parent) @@ -52,12 +52,12 @@ HsDatabase *db = HsDatabase::instance(); Q_ASSERT(db); - QList<int> ids; - if (db->widgetIds(SHORTCUT_WIDGET_URI, ids)) { - for (int i = 0; i < ids.count(); ++i) { - QString id; - if (db->widgetPreferenceForKey(ids.at(i), SHORTCUT_ID, id) - && id.toInt() == itemId) { + QList<HsWidgetData> widgetDatas; + if (db->widgets(gShortcutWidgetUri, widgetDatas)) { + for (int i = 0; i < widgetDatas.count(); ++i) { + QVariant id; + if (db->widgetPreference(widgetDatas.at(i).id, gShortcutId, id) && + id.toInt() == itemId) { return true; } } diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hswallpaper.cpp --- a/homescreenapp/hsdomainmodel/src/hswallpaper.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsdomainmodel/src/hswallpaper.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -18,24 +18,14 @@ #include <QDir> #include <QPainter> #include "hswallpaper.h" -#include "hswallpaper_p.h" #include "hsscene.h" -HsWallpaperPrivate::HsWallpaperPrivate() - : mOrientation(Qt::Vertical) -{ -} - -HsWallpaperPrivate::~HsWallpaperPrivate() +HsWallpaper::HsWallpaper(QGraphicsItem *parent) + : HbWidget(parent), + mOrientation(Qt::Vertical) { } -HsWallpaper::HsWallpaper(QGraphicsItem *parent) - : HbWidget(parent) -{ - mD.reset(new HsWallpaperPrivate); -} - HsWallpaper::~HsWallpaper() { } @@ -48,18 +38,18 @@ Q_UNUSED(widget); Qt::Orientation orientation = HsScene::orientation(); - if (orientation != mD->mOrientation) { - mD->mOrientation = orientation; - mD->mImage = QPixmap(); + if (orientation != mOrientation) { + mOrientation = orientation; + mImage = QPixmap(); if (orientation == Qt::Horizontal) { - mD->mImage.load(mD->mLImagePath); + mImage.load(mLImagePath); } else { - mD->mImage.load(mD->mPImagePath); + mImage.load(mPImagePath); } } - if (!mD->mImage.isNull()) { - painter->drawPixmap(rect().toRect(), mD->mImage); + if (!mImage.isNull()) { + painter->drawPixmap(rect().toRect(), mImage); } } @@ -74,26 +64,26 @@ bool HsWallpaper::setImagesByPaths(const QString &landscapeImagePath, const QString &portraitImagePath) { - mD->mLImagePath = landscapeImagePath; - mD->mPImagePath = portraitImagePath; - mD->mOrientation = HsScene::orientation(); + mLImagePath = landscapeImagePath; + mPImagePath = portraitImagePath; + mOrientation = HsScene::orientation(); - if (mD->mOrientation == Qt::Horizontal) { - return mD->mImage.load(mD->mLImagePath); + if (mOrientation == Qt::Horizontal) { + return mImage.load(mLImagePath); } else { - return mD->mImage.load(mD->mPImagePath); + return mImage.load(mPImagePath); } } bool HsWallpaper::removeImages() { - if (mD->mLImagePath != wallpaperPath(Qt::Horizontal)) { - QFile::remove(mD->mLImagePath); - mD->mLImagePath.clear(); + if (mLImagePath != wallpaperPath(Qt::Horizontal)) { + QFile::remove(mLImagePath); + mLImagePath.clear(); } - if (mD->mPImagePath != wallpaperPath(Qt::Vertical)) { - QFile::remove(mD->mPImagePath); - mD->mPImagePath.clear(); + if (mPImagePath != wallpaperPath(Qt::Vertical)) { + QFile::remove(mPImagePath); + mPImagePath.clear(); } return true; } diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hswidgetdata.cpp --- a/homescreenapp/hsdomainmodel/src/hswidgetdata.cpp Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +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: Home screen widget meta data. -* -*/ - - -#include "hswidgetdata.h" - - -/*! - \class HsWidgetData - \ingroup group_hsdatamodel - \brief Contains widget metadata. - - Used by content store and content service for - holding widget metadata. -*/ - - - -/*! - \fn HsWidgetData::HsWidgetData() - - Initialize widget and page id to -1 -*/ -HsWidgetData::HsWidgetData() - : mId(-1), - mPageId(-1) -{ - -} - -/*! - \fn HsWidgetData::~HsWidgetData() - - Destructor -*/ -HsWidgetData::~HsWidgetData() -{ - -} - -/*! - Set widget \a id -*/ -void HsWidgetData::setId(int id) -{ - mId = id; -} - -/*! - Return widget id -*/ -int HsWidgetData::id() const -{ - return mId; -} - -/*! - Set widget \a uri -*/ -void HsWidgetData::setUri(const QString &uri) -{ - mUri = uri; -} - -/*! - Return widget uri. -*/ -QString HsWidgetData::uri() const -{ - return mUri; -} - - -/*! - Return widget presentations -*/ -QList<HsWidgetPresentationData> HsWidgetData::presentations() const -{ - return mPresentations; -} - -/*! - Return modifiable widget presentations -*/ -QList<HsWidgetPresentationData> &HsWidgetData::presentations() -{ - return mPresentations; -} - -/*! - Set \a pageId where widget is -*/ -void HsWidgetData::setPageId(int pageId) -{ - mPageId = pageId; -} - -/*! - Return widget page id -*/ -int HsWidgetData::pageId() const -{ - return mPageId; -} - - diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hswidgethost.cpp --- a/homescreenapp/hsdomainmodel/src/hswidgethost.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsdomainmodel/src/hswidgethost.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -28,7 +28,7 @@ #include "hswidgethost.h" #include "hsdatabase.h" -#include "hswidgetdata.h" +#include "hsdomainmodeldatastructures.h" #include "hspage.h" #include "hsapp_defs.h" #include "hsscene.h" @@ -49,21 +49,18 @@ homescreen widget has its own host. */ -HsWidgetHost* HsWidgetHost::createInstance(const HsWidgetData &widgetData, - const QVariantMap &preferences) +HsWidgetHost* HsWidgetHost::createInstance(HsWidgetData &widgetData, + const QVariantHash &preferences) { - HsWidgetHost *host = NULL; - HsDatabase* db = HsDatabase::instance(); Q_ASSERT(db); - int databaseId = -1; - if (db->insertWidget(widgetData, databaseId)) { - db->setWidgetPreferences(databaseId, preferences); - host = new HsWidgetHost(databaseId); + if (db->insertWidget(widgetData)) { + db->setWidgetPreferences(widgetData.id, preferences); + return new HsWidgetHost(widgetData.id); } - return host; + return 0; } /*! Construct a widget host for the given \a databaseId. @@ -73,6 +70,7 @@ : HbWidget(parent), mWidget(0), mPage(0), + mState(Constructed), mDatabaseId(databaseId) { CaQuery query; @@ -81,8 +79,8 @@ CaNotifier *notifier = CaService::instance()->createNotifier(filter); notifier->setParent(this); connect(notifier, - SIGNAL(entryChanged(const CaEntry&, ChangeType)), - SLOT(onEntryChanged(const CaEntry&, ChangeType)), Qt::QueuedConnection); + SIGNAL(entryChanged(CaEntry,ChangeType)), + SLOT(onEntryChanged(CaEntry,ChangeType)), Qt::QueuedConnection); /* TODO: Uncomment after the Qt bug has been fixed. QGraphicsDropShadowEffect *effect = @@ -111,22 +109,22 @@ } HsDatabase *db = HsDatabase::instance(); - Q_ASSERT(db); - + // Find the widget data. - HsWidgetData widgetData; - if (!db->widget(mDatabaseId, widgetData, false)) { + HsWidgetData data; + data.id = mDatabaseId; + if (!db->widget(data)) { return false; } - mUri = widgetData.uri(); + mUri = data.uri; // Create the hosted widget. QServiceManager manager; - QServiceFilter filter("com.nokia.IHomeScreenWidget"); - filter.setServiceName(widgetData.uri()); + QServiceFilter filter("com.nokia.symbian.IHomeScreenWidget"); + filter.setServiceName(mUri); QList<QServiceInterfaceDescriptor> interfaces = manager.findInterfaces(filter); - if(interfaces.isEmpty()) { + if (interfaces.isEmpty()) { return false; } @@ -174,13 +172,14 @@ Q_ASSERT(db); HsWidgetData data; - if (db->widget(mDatabaseId, data, false)) { + data.id = mDatabaseId; + if (db->widget(data)) { if (!page) { - data.setPageId(-1); + data.pageId = -1; } else { - data.setPageId(page->databaseId()); + data.pageId = page->databaseId(); } - if (!db->updateWidget(data, false)) { + if (!db->updateWidget(data)) { return false; } } else { @@ -219,11 +218,14 @@ */ bool HsWidgetHost::deleteFromDatabase() { - if (HsDatabase::instance()->deleteWidget(mDatabaseId)) { - mDatabaseId = -1; - return true; + HsDatabase *db = HsDatabase::instance(); + + if (!db->deleteWidget(mDatabaseId)) { + return false; } - return false; + + mDatabaseId = -1; + return true; } /*! @@ -235,29 +237,17 @@ HsDatabase *db = HsDatabase::instance(); Q_ASSERT(db); - QString key = hbInstance->orientation() == Qt::Vertical ? + QString key = HsScene::orientation() == Qt::Vertical ? "portrait" : "landscape"; - HsWidgetPresentationData data; - data.setWidgetId(databaseId()); - data.setKey(key); - data.setPosition(pos()); + HsWidgetPresentationData data; + data.key = key; + data.setPos(pos()); data.setSize(size()); - data.setZValue(zValue()); + data.zValue = zValue(); + data.widgetId = databaseId(); - HsWidgetPresentationData temp; - if (!db->widgetPresentation(databaseId(), key, temp)) { - if (!db->insertWidgetPresentation(data)) { - return false; - } - } else { - data.setId(temp.id()); - if (!db->updateWidgetPresentation(data)) { - return false; - } - } - - return true; + return db->setWidgetPresentation(data); } /*! @@ -266,18 +256,26 @@ */ bool HsWidgetHost::setWidgetPresentationData(HsWidgetPresentationData &presentationData) { - presentationData.setWidgetId(mDatabaseId); - return HsDatabase::instance()->insertWidgetPresentation(presentationData); + HsDatabase *db = HsDatabase::instance(); + Q_ASSERT(db); + + presentationData.widgetId = mDatabaseId; + return db->setWidgetPresentation(presentationData); } + /*! Get widget presentation data matching given \a key. Data is returned on given empty \a presentationData. Return true if successfull */ -bool HsWidgetHost::widgetPresentationData( - const QString &key, - HsWidgetPresentationData &presentationData) +bool HsWidgetHost::widgetPresentationData(const QString &key, + HsWidgetPresentationData &presentationData) { - return HsDatabase::instance()->widgetPresentation(mDatabaseId,key,presentationData); + HsDatabase *db = HsDatabase::instance(); + Q_ASSERT(db); + + presentationData.key = key; + presentationData.widgetId = mDatabaseId; + return db->widgetPresentation(presentationData); } /*! @@ -292,12 +290,13 @@ "portrait" : "landscape"; HsWidgetPresentationData data; - if (db->widgetPresentation(databaseId(), key, data)) { + data.key = key; + data.widgetId = mDatabaseId; + if (db->widgetPresentation(data)) { return data; } else { return HsWidgetPresentationData(); } - } /*! @@ -306,18 +305,19 @@ bool HsWidgetHost::loadWidgetPresentation() { HsDatabase *db = HsDatabase::instance(); - Q_ASSERT(db); - - QString key = hbInstance->orientation() == Qt::Vertical ? + + QString key = HsScene::orientation() == Qt::Vertical ? "portrait" : "landscape"; HsWidgetPresentationData data; - if (!db->widgetPresentation(databaseId(), key, data)) { + data.key = key; + data.widgetId = mDatabaseId; + if (!db->widgetPresentation(data)) { return false; } - setGeometry(QRectF(data.position(), data.size())); - setZValue(data.zValue()); + setGeometry(data.geometry()); + setZValue(data.zValue); return true; } @@ -333,17 +333,8 @@ QString key = orientation == Qt::Vertical ? "portrait" : "landscape"; - - HsWidgetPresentationData data; - if (!db->widgetPresentation(databaseId(), key, data)) { - return true; - } else { - if (!db->deleteWidgetPresentation(data.id())) { - return false; - } - } - - return true; + + return db->deleteWidgetPresentation(mDatabaseId, key); } /*! @@ -363,10 +354,16 @@ widget defines it. */ void HsWidgetHost::initializeWidget() -{ +{ + if (mState != Constructed) { + return; + } + setPreferencesToWidget(); setOnline(HsScene::instance()->isOnline()); mOnInitializeMethod.invoke(mWidget); + + mState = Initialized; } /*! @@ -375,7 +372,14 @@ */ void HsWidgetHost::showWidget() { + if (mState != Initialized && + mState != Hidden) { + return; + } + mOnShowMethod.invoke(mWidget); + + mState = Visible; } /*! @@ -384,7 +388,14 @@ */ void HsWidgetHost::hideWidget() { + if (mState != Initialized && + mState != Visible) { + return; + } + mOnHideMethod.invoke(mWidget); + + mState = Hidden; } /*! @@ -393,7 +404,14 @@ */ void HsWidgetHost::uninitializeWidget() { + if (mState != Visible && + mState != Hidden) { + return; + } + mOnUninitializeMethod.invoke(mWidget); + + mState = Uninitialized; } /*! @@ -511,7 +529,7 @@ HsDatabase *db = HsDatabase::instance(); Q_ASSERT(db); - QVariantMap preferences; + QVariantHash preferences; if (!db->widgetPreferences(mDatabaseId, preferences)) { return false; } @@ -539,7 +557,7 @@ return; } - QVariantMap preferences; + QVariantHash preferences; foreach (QString name, names) { QVariant value = mWidget->property(name.toLatin1()); @@ -562,6 +580,7 @@ */ void HsWidgetHost::onFinished() { + mState = Finished; emit widgetFinished(this); } @@ -572,6 +591,7 @@ */ void HsWidgetHost::onError() { + mState = Faulted; emit widgetError(this); } diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsdomainmodel/src/hswidgetpresentationdata.cpp --- a/homescreenapp/hsdomainmodel/src/hswidgetpresentationdata.cpp Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,149 +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: Home screen widget presentation data. -* -*/ - - -#include "hswidgetpresentationdata.h" - -/*! - \class HsWidgetPresentationData - \ingroup group_hsdatamodel - \brief Contains widget presentation metadata. - - Used by content store and content service for - holding widget presentation metadata. - -*/ - - - - -/*! - Initialize id and widget id to -1 and z value to 0.0 -*/ -HsWidgetPresentationData::HsWidgetPresentationData() - : mId(-1), - mWidgetId(-1), - mZValue(0.0) -{ - -} - -/*! - Destructor -*/ -HsWidgetPresentationData::~HsWidgetPresentationData() -{ - -} - -/*! - Set widget \a id -*/ -void HsWidgetPresentationData::setId(int id) -{ - mId = id; -} - -/*! - Return widget id -*/ -int HsWidgetPresentationData::id() const -{ - return mId; -} - -/*! - Set \a key to distinguish presentations -*/ -void HsWidgetPresentationData::setKey(const QString &key) -{ - mKey = key; -} - -/*! - Return presentation key -*/ -QString HsWidgetPresentationData::key() const -{ - return mKey; -} - -/*! - Set \a position -*/ -void HsWidgetPresentationData::setPosition(const QPointF &position) -{ - mPosition = position; -} - -/*! - Return position -*/ -QPointF HsWidgetPresentationData::position() const -{ - return mPosition; -} - -/*! - Set \a zValue -*/ -void HsWidgetPresentationData::setZValue(qreal zValue) -{ - mZValue = zValue; -} - -/*! - Return z value -*/ -qreal HsWidgetPresentationData::zValue() const -{ - return mZValue; -} - -/*! - Set \a size -*/ -void HsWidgetPresentationData::setSize(const QSizeF &size) -{ - mSize = size; -} - -/*! - Return size -*/ -QSizeF HsWidgetPresentationData::size() const -{ - return mSize; -} - -/*! - Set \a widgetId -*/ -void HsWidgetPresentationData::setWidgetId(int widgetId) -{ - mWidgetId = widgetId; -} - -/*! - Return widget id -*/ -int HsWidgetPresentationData::widgetId() const -{ - return mWidgetId; -} - - diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hshomescreenclientplugin/hshomescreenclientplugin.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hshomescreenclientplugin/hshomescreenclientplugin.pri Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,23 @@ +# +# 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: +# + +HEADERS += ./inc/hshomescreenclientplugin.h +SOURCES += ./src/hshomescreenclientplugin.cpp +symbian:{ + HEADERS += ./inc/hshomescreenclient.h + SOURCES += ./src/hshomescreenclient.cpp +} + diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hshomescreenclientplugin/hshomescreenclientplugin.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hshomescreenclientplugin/hshomescreenclientplugin.pro Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,40 @@ +# +# 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: +# + + +TEMPLATE = lib +CONFIG += plugin hb mobility console +MOBILITY = serviceframework + +PLUGIN_SUBDIR = /hsresources/plugins/homescreenclientplugin + +include (../common.pri) + +DEPENDPATH += ./inc \ + ./src + +INCLUDEPATH += ./inc + +symbian: { + TARGET.UID3 = 0x20022F72 + LIBS += -lxqservice +} + +win32: { + error("Only Symbian supported!") +} + +include(hshomescreenclientplugin.pri) \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hshomescreenclientplugin/inc/hshomescreenclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hshomescreenclientplugin/inc/hshomescreenclient.h Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,53 @@ +/* +* 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: Homescreen client api. +* +*/ + +#ifndef HSHOMESCREENCLIENT_H +#define HSHOMESCREENCLIENT_H + +#include <QObject> +#include <QVariant> + +#include "hstest_global.h" + +HOMESCREEN_TEST_CLASS(HsHomescreenClientPluginTest) + +class XQServiceRequest; + +class HsHomescreenClient : public QObject +{ + Q_OBJECT + +public: + HsHomescreenClient(QObject *parent = 0); + virtual ~HsHomescreenClient(); + +public slots: + bool addWidget(const QString &uri, const QVariantHash &preferences); +private slots: + void onRequestCompleted(const QVariant &result); + void onRequestError(int error); + void doAddWidget(const QString &uri, const QVariantHash &preferences); +signals: + void requestFinished(); +private: + XQServiceRequest* mAsyncRequest; + bool mRequestResult; + + HOMESCREEN_TEST_FRIEND_CLASS(HsHomescreenClientPluginTest) +}; + +#endif diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hshomescreenclientplugin/inc/hshomescreenclientplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hshomescreenclientplugin/inc/hshomescreenclientplugin.h Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,37 @@ +/* +* 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: Plugin factory. +* +*/ + +#ifndef HSHOMESCREENCLIENTPLUGIN_H +#define HSHOMESCREENCLIENTPLUGIN_H + +#include <QObject> +#include <qserviceplugininterface.h> + +QTM_USE_NAMESPACE + +class HsHomescreenClientPlugin : public QObject, public QServicePluginInterface +{ + Q_OBJECT + Q_INTERFACES(QtMobility::QServicePluginInterface) + +public: + QObject *createInstance(const QServiceInterfaceDescriptor &descriptor, + QServiceContext *context, + QAbstractSecuritySession *session); +}; + +#endif //HSHOMESCREENCLIENTPLUGIN_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hshomescreenclientplugin/resource/hshomescreenclientplugin.s60xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hshomescreenclientplugin/resource/hshomescreenclientplugin.s60xml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<service> + <name>hshomescreenclientplugin</name> + <filepath>z:/hsresources/plugins/homescreenclientplugin/hshomescreenclientplugin.qtplugin</filepath> + <description>Homescreen client plugin</description> + <interface> + <name>com.nokia.symbian.IHomeScreenClient</name> + <version>1.0</version> + <description>Homescreen exposed service interface </description> + <capabilities></capabilities> + </interface> +</service> diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hshomescreenclientplugin/resource/hshomescreenclientplugin.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hshomescreenclientplugin/resource/hshomescreenclientplugin.xml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<service> + <name>hshomescreenclientplugin</name> + <filepath>hshomescreenclientplugin</filepath> + <description>Homescreen client plugin</description> + <interface> + <name>com.nokia.symbian.IHomeScreenClient</name> + <version>1.0</version> + <description>Homescreen exposed service interface </description> + <capabilities></capabilities> + </interface> +</service> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hshomescreenclientplugin/src/hshomescreenclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hshomescreenclientplugin/src/hshomescreenclient.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,81 @@ +/* +* 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: Homescreen client api +* +*/ +#include "hshomescreenclient.h" +#include <xqservicerequest.h> +#include <QEventLoop> + +const char INTERFACE_NAME[] = "com.nokia.services.hsapplication.IHomeScreenClient"; +HsHomescreenClient::HsHomescreenClient(QObject *parent) + :QObject(parent), + mAsyncRequest(0), + mRequestResult(false) +{ +} + +HsHomescreenClient::~HsHomescreenClient() +{ + delete mAsyncRequest; +} + +bool HsHomescreenClient::addWidget( + const QString &uri, + const QVariantHash &preferences) +{ + QEventLoop eventLoop; + connect(this, SIGNAL(requestFinished()), &eventLoop, SLOT(quit())); + QMetaObject::invokeMethod(this, "doAddWidget", Qt::QueuedConnection, + Q_ARG(QString,uri),Q_ARG(QVariantHash,preferences)); + eventLoop.exec(); + + return mRequestResult; +} + +void HsHomescreenClient::onRequestCompleted(const QVariant &result) +{ + mRequestResult = result.toBool(); + emit requestFinished(); +} + +void HsHomescreenClient::onRequestError(int error) +{ + Q_UNUSED(error) + emit requestFinished(); +} + +void HsHomescreenClient::doAddWidget( + const QString &uri, + const QVariantHash &preferences) +{ + delete mAsyncRequest; + mAsyncRequest = 0; + mAsyncRequest = new XQServiceRequest(INTERFACE_NAME, + "addWidget(QString,QVariantHash)",false); + *mAsyncRequest << uri; + *mAsyncRequest << preferences; + + connect(mAsyncRequest, SIGNAL(requestCompleted(QVariant)), + SLOT(onRequestCompleted(QVariant))); + connect(mAsyncRequest, SIGNAL(requestError(int)), + SLOT(onRequestError(int))); + + mRequestResult = false; + bool res=mAsyncRequest->send(); + if(!res){ + emit requestFinished(); + } + +} diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hshomescreenclientplugin/src/hshomescreenclientplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hshomescreenclientplugin/src/hshomescreenclientplugin.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,53 @@ +/* +* 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: Plugin factory. +* +*/ + +#include <qserviceinterfacedescriptor.h> +#include <qabstractsecuritysession.h> +#include <qservicecontext.h> + +#include "hshomescreenclientplugin.h" +#ifdef Q_OS_SYMBIAN +#include "hshomescreenclient.h" +#endif + +#ifdef COVERAGE_MEASUREMENT +#pragma CTC SKIP +#endif //COVERAGE_MEASUREMENT + +QObject *HsHomescreenClientPlugin::createInstance(const QServiceInterfaceDescriptor &descriptor, + QServiceContext *context, + QAbstractSecuritySession *session) +{ + Q_UNUSED(context); + Q_UNUSED(session); + + if (descriptor.interfaceName() == QLatin1String("com.nokia.symbian.IHomeScreenClient")) { +#ifdef Q_OS_SYMBIAN + return new HsHomescreenClient(this); +#else + return NULL; +#endif + } else { + return 0; + } +} + +Q_EXPORT_PLUGIN2(hshomescreenclientplugin, HsHomescreenClientPlugin) + +#ifdef COVERAGE_MEASUREMENT +#pragma CTC ENDSKIP +#endif //COVERAGE_MEASUREMENT diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hshomescreenclientplugin/tsrc/t_hshomescreenclientplugin/inc/t_hshomescreenclientplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hshomescreenclientplugin/tsrc/t_hshomescreenclientplugin/inc/t_hshomescreenclientplugin.h Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,49 @@ +/* +* 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: Test class for hshomescreenclientplugin +* +*/ + + +#include <QtTest/QtTest> + +#include "hshomescreenclientplugin.h" + + +/** +* @test Test class for hshomescreenclientplugin. +*/ +class HsHomescreenClientPluginTest : public QObject +{ + Q_OBJECT + +private slots: + + void cleanupTestCase(); + void initTestCase(); + + /** + * HsHomescreenClient + */ + void testConstruction(); + void testAddWidget(); + void testAddInvalidWidget(); + +signals: + void onRequestCompletedTest(const QVariant &result); + +private: + +}; + diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hshomescreenclientplugin/tsrc/t_hshomescreenclientplugin/sis/gen_sisx.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hshomescreenclientplugin/tsrc/t_hshomescreenclientplugin/sis/gen_sisx.bat Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,30 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem +@echo off + +if exist t_hshomescreenclientplugin.sisx del t_hshomescreenclientplugin.sisx + +makesis t_hshomescreenclientplugin.pkg +signsis t_hshomescreenclientplugin.sis t_hshomescreenclientplugin.sisx ../../../../sis/rd.cer ../../../../sis/rd-key.pem + +if exist t_hshomescreenclientplugin.sisx ( +echo t_hshomescreenclientplugin.sisx creation SUCCEEDED +del t_hshomescreenclientplugin.sis +) + +if not exist t_hshomescreenclientplugin.sisx ( +echo t_hshomescreenclientplugin.sisx creation FAILED +) \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hshomescreenclientplugin/tsrc/t_hshomescreenclientplugin/sis/t_hshomescreenclientplugin.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hshomescreenclientplugin/tsrc/t_hshomescreenclientplugin/sis/t_hshomescreenclientplugin.pkg Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,35 @@ +; +; 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: +; + +; Language +&EN + +; SIS header: name, uid, version +#{"t_hshomescreenclientplugin"},(0x20022F73),1,0,0 + +; Localised Vendor name +%{"Nokia"} + +; Unique Vendor name +:"Nokia" + +; Supports S60 5th Edition +[0x1028315F], 0, 0, 0, {"S60ProductID"} + +; HS Content Publish Plugin tests +"/epoc32/release/armv5/urel/t_hshomescreenclientplugin.exe" - "c:/sys/bin/t_hshomescreenclientplugin.exe" +"/epoc32/data/z/private/10003a3f/import/apps/t_hshomescreenclientplugin_reg.rsc" - "c:/private/10003a3f/import/apps/t_hshomescreenclientplugin_reg.rsc" +"/epoc32/data/z/resource/apps/t_hshomescreenclientplugin.rsc" - "c:/resource/apps/t_hshomescreenclientplugin.rsc" diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hshomescreenclientplugin/tsrc/t_hshomescreenclientplugin/src/t_hshomescreenclientplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hshomescreenclientplugin/tsrc/t_hshomescreenclientplugin/src/t_hshomescreenclientplugin.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,88 @@ +/* +* 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: Test class for hshomescreenclientplugin +* +*/ + +#include "t_hshomescreenclientplugin.h" +#include "hshomescreenclient.h" + +#include <xqservicerequest.h> + +#include <QSignalSpy> + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsHomescreenClientPluginTest::initTestCase() +{ +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsHomescreenClientPluginTest::cleanupTestCase() +{ +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsHomescreenClientPluginTest::testConstruction() +{ + HsHomescreenClient *client = new HsHomescreenClient; + QVERIFY(client); + delete client; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsHomescreenClientPluginTest::testAddWidget() +{ + HsHomescreenClient *client = new HsHomescreenClient; + + QSignalSpy requestFinishedSpy(client, SIGNAL(requestFinished())); + + // add invalid widget + QVariantHash preferences; + bool result = client->addWidget("invalidwidget", preferences); + + // but emit correct signals + connect(this, SIGNAL(onRequestCompletedTest(QVariant)), client, SLOT(onRequestCompleted(QVariant))); + emit onRequestCompletedTest(true); + + QVERIFY(requestFinishedSpy.count()); + QVERIFY(client->mRequestResult); + + delete client; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void HsHomescreenClientPluginTest::testAddInvalidWidget() +{ + HsHomescreenClient *client = new HsHomescreenClient; + + QVariantHash preferences; + bool result = client->addWidget("invalidwidget", preferences); + + QVERIFY(!result); + QVERIFY(!client->mRequestResult); + + delete client; +} + +QTEST_MAIN(HsHomescreenClientPluginTest) diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hshomescreenclientplugin/tsrc/t_hshomescreenclientplugin/t_hshomescreenclientplugin.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hshomescreenclientplugin/tsrc/t_hshomescreenclientplugin/t_hshomescreenclientplugin.pri Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,24 @@ +# +# 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: +# + +#Header files +HEADERS += ./inc/*.h \ + ../../inc/hshomescreenclient.h \ + +#Source files +SOURCES += ./src/*.cpp \ + ../../src/hshomescreenclient.cpp + \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hshomescreenclientplugin/tsrc/t_hshomescreenclientplugin/t_hshomescreenclientplugin.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hshomescreenclientplugin/tsrc/t_hshomescreenclientplugin/t_hshomescreenclientplugin.pro Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,58 @@ +# +# 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: +# + +TEMPLATE = app + +CONFIG(debug, debug|release) { + DESTDIR = ./debug +} +else { + DESTDIR = ./release +} + +CONFIG += debug_and_release \ + console + +QT += testlib + +DEFINES += HOMESCREEN_TEST + +DEPENDPATH += .\ + ./src \ + ./inc \ + ../../src \ + ../../inc + +INCLUDEPATH += .\ + ./inc \ + ../../inc \ + ../../../inc + +symbian: { + CONFIG += symbian_test + load(hb.prf) + CONFIG -= symbian_i18n + SYMBIAN_PLATFORMS = WINSCW ARMV5 + TARGET.UID3 = 0x20022F73 + TARGET.CAPABILITY = CAP_APPLICATION AllFiles + TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB + LIBS += -lxqservice +} else { + error("Only Symbian supported!") +} + +include(t_hshomescreenclientplugin.pri) + diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hshomescreenclientplugin/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hshomescreenclientplugin/tsrc/tsrc.pro Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,21 @@ +# +# 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: +# + +TEMPLATE = subdirs +SUBDIRS += t_hshomescreenclientplugin + +CONFIG += ordered + diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsmenucontentpublish/hsmenucontentpublish.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsmenucontentpublish/hsmenucontentpublish.pro Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,44 @@ +# +# 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: +# + +TEMPLATE = lib + +CONFIG += plugin mobility +MOBILITY = serviceframework + +PLUGIN_SUBDIR = /hsresources/plugins/hsmenucontentpublishplugin + +LIBS += -lcaclient + +INCLUDEPATH += inc + +HEADERS += inc/hsmenucontentpublish.h \ + inc/hsmenucontentpublishplugin.h \ + +SOURCES += src/hsmenucontentpublish.cpp \ + src/hsmenucontentpublishplugin.cpp \ + +symbian: { + TARGET.UID3 = 0x20028715 +#export interface header to platform +BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>" +BLD_INF_RULES.prj_exports += "inc/hsmenucontentpublish.h \ + APP_LAYER_PLATFORM_EXPORT_PATH(hsmenucontentpublish.h)" +} + +include(../common.pri) + + diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsmenucontentpublish/inc/hsmenucontentpublish.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsmenucontentpublish/inc/hsmenucontentpublish.h Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,67 @@ +/* + * 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: hsmenucontentpublish.h + * + */ + +#ifndef HSMENUCONTENTPUBLISH_H +#define HSMENUCONTENTPUBLISH_H + +#include <QObject> +#include <QVariant> +#include <qservicemanager.h> + +QTM_USE_NAMESPACE + +//mandatory keys +const QString hsItemName("item:name"); +const QString hsitemLaunchUri("item:launchuri"); +const QString hsitemPublisherId("item:publisherId"); + +//not mandatory +const QString hsItemWidgetUri("widget:uri"); +const QString hsItemDescription("item:description"); + +//for icon - not mandatory +const QString hsIconFileName("icon:filename");//to display specific icon from file +const QString hsIconName("icon:name");// it is used in similar way in HbIcon +const QString hsIconApplicationId("icon:applicationid"); //publisherid makes rest + + +class HsMenuContentPublishPrivate; + +class HsMenuContentPublish : public QObject +{ + Q_OBJECT + +public: + HsMenuContentPublish(QObject *parent = 0); + ~HsMenuContentPublish(); +public slots: + bool add(const QVariantMap &entryPreference = QVariantMap()); + bool remove(const QVariantMap &queryPreference = QVariantMap()) const; + + QList<QVariantMap > getList(const QVariantMap &queryPreference = QVariantMap()); + +private: + Q_DISABLE_COPY(HsMenuContentPublish) + /** + * Pointer to a private implementation. + */ + HsMenuContentPublishPrivate * const m_d; +}; + + + +#endif // HSMENUCONTENTPUBLISH_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsmenucontentpublish/inc/hsmenucontentpublish_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsmenucontentpublish/inc/hsmenucontentpublish_p.h Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,44 @@ +/* + * 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: hsmenucontentpublish_p.h + * + */ + +#ifndef HSMENUCONTENTPUBLISH_PRIVATE_H +#define HSMENUCONTENTPUBLISH_PRIVATE_H + +// hidden +const QString hsItemId("id"); + +class HsMenuContentPublish; + +class HsMenuContentPublishPrivate +{ + +public: + + explicit HsMenuContentPublishPrivate(HsMenuContentPublish *publishPublic); + ~HsMenuContentPublishPrivate(); + bool add(const QVariantMap &entryPreference = QVariantMap()); + bool remove(const QVariantMap &queryPreference = QVariantMap()) const; + QList<QVariantMap > getList(const QVariantMap &queryPreference = QVariantMap()); + +private: + /** + * Points to the HsMenuContentPublish instance that uses this private implementation. + */ + HsMenuContentPublish *const m_q; +}; + +#endif //HSMENUCONTENTPUBLISH_PRIVATE_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsmenucontentpublish/inc/hsmenucontentpublishplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsmenucontentpublish/inc/hsmenucontentpublishplugin.h Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,37 @@ +/* +* 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: Plugin factory. +* +*/ + +#ifndef HSMENUCONTENTPUBLISHPLUGIN_H +#define HSMENUCONTENTPUBLISHPLUGIN_H + +#include <QObject> +#include <qserviceplugininterface.h> + +QTM_USE_NAMESPACE + +class HsMenuContentPublishPlugin : public QObject, public QServicePluginInterface +{ + Q_OBJECT + Q_INTERFACES(QtMobility::QServicePluginInterface) + +public: + QObject *createInstance(const QServiceInterfaceDescriptor &descriptor, + QServiceContext *context, + QAbstractSecuritySession *session); +}; + +#endif //HSMENUCONTENTPUBLISHPLUGIN_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsmenucontentpublish/resource/hsmenucontentpublish.s60xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsmenucontentpublish/resource/hsmenucontentpublish.s60xml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<service> + <name>hsmenucontentpublishplugin</name> + <filepath>z:/hsresources/plugins/hsmenucontentpublishplugin/hsmenucontentpublish.qtplugin</filepath> + <description>HsMenu Client plugin</description> + <interface> + <name>com.nokia.symbian.IMenuClient</name> + <version>1.0</version> + <description>HsMenu Client exposed service interface </description> + <capabilities></capabilities> + </interface> +</service> diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsmenucontentpublish/resource/hsmenucontentpublish.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsmenucontentpublish/resource/hsmenucontentpublish.xml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<service> + <name>hsmenucontentpublishplugin</name> + <filepath>hsmenucontentpublish</filepath> + <description>HsMenu Client plugin</description> + <interface> + <name>com.nokia.symbian.IMenuClient</name> + <version>1.0</version> + <description>HsMenu Client exposed service interface </description> + <capabilities></capabilities> + </interface> +</service> \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsmenucontentpublish/src/hsmenucontentpublish.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsmenucontentpublish/src/hsmenucontentpublish.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,196 @@ +/* + * 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: hsmenucontentpublish.cpp + * + */ + +#include <QString> +#include <QDebug> + +#include "hsapp_defs.h" +#include "caquery.h" +#include "caentry.h" +#include "caicondescription.h" +#include "caservice.h" + +#include "hsmenucontentpublish.h" +#include "hsmenucontentpublish_p.h" + +HsMenuContentPublish::HsMenuContentPublish(QObject *parent) + :QObject(parent), m_d(new HsMenuContentPublishPrivate(this)) +{ + +} + +HsMenuContentPublish::~HsMenuContentPublish() +{ + delete m_d; +} + +bool HsMenuContentPublish::add(const QVariantMap &entryPreference) +{ + return m_d->add(entryPreference); +} +bool HsMenuContentPublish::remove(const QVariantMap &entry) const +{ + return m_d->remove(entry); +} + +QList<QVariantMap > HsMenuContentPublish::getList(const QVariantMap &queryPreference) +{ + return m_d->getList(queryPreference); +} + +/*! + Constructor + \param publishPublic pointer to public contentPublish + */ +HsMenuContentPublishPrivate::HsMenuContentPublishPrivate(HsMenuContentPublish *publishPublic) : + m_q(publishPublic) +{ + +} + +/*! + destructor + */ +HsMenuContentPublishPrivate::~HsMenuContentPublishPrivate() +{ + +} + +bool HsMenuContentPublishPrivate::add(const QVariantMap &entryPreference) +{ + bool result = false; + QMap<QString, QVariant> pref = entryPreference; + + CaIconDescription iconDesc; + if(pref.contains(hsItemId)) + { + CaEntry *update_entry = CaService::instance()->getEntry(pref.take(hsItemId).toInt()); + + update_entry->setText(pref.take(hsItemName).toString()); + + update_entry->setDescription(pref.take(hsItemDescription).toString()); + + iconDesc.setFilename(pref.take(hsIconFileName).toString()); + iconDesc.setSkinId(pref.take(hsIconName).toString()); + iconDesc.setApplicationId(pref.take(hsIconApplicationId).toString()); + update_entry->setIconDescription(iconDesc); + QMapIterator<QString, QVariant> k(pref); + while (k.hasNext()) { + k.next(); + update_entry->setAttribute(k.key(),k.value().toString()); + } + + result = CaService::instance()->updateEntry(*update_entry); + } + else if (pref.contains(hsItemName) && pref.contains(hsitemLaunchUri) && pref.contains(hsitemPublisherId)) + { + CaEntry add_entry(ItemEntryRole); + add_entry.setEntryTypeName(templatedApplicationTypeName()); + // mandatory values + add_entry.setText(pref.take(hsItemName).toString()); + + iconDesc.setFilename(pref.take(hsIconFileName).toString()); + iconDesc.setSkinId(pref.take(hsIconName).toString()); + iconDesc.setApplicationId(pref.take(hsIconApplicationId).toString()); + add_entry.setIconDescription(iconDesc); + + add_entry.setDescription(pref.take(hsItemDescription).toString()); + QMapIterator<QString, QVariant> k(pref); + while (k.hasNext()) { + k.next(); + add_entry.setAttribute(k.key(),k.value().toString()); + } + + add_entry.setFlags(add_entry.flags() & ~RemovableEntryFlag); + + CaEntry *entry = CaService::instance()->createEntry(add_entry); + if (entry) { + result = true; + delete entry; + } + } + else + { + return false; + } + return result; + + +} +bool HsMenuContentPublishPrivate::remove(const QVariantMap &entry) const +{ + bool result = false; + if (entry.contains(hsItemId)) + { + result = CaService::instance()->removeEntry(entry.value(hsItemId).toInt()); + } + return result; +} + +QList<QVariantMap > HsMenuContentPublishPrivate::getList(const QVariantMap &queryPreference) +{ + QList<QVariantMap> list; + QMap<QString, QVariant> map = queryPreference; + + map.remove(hsItemName); + map.remove(hsItemDescription); + + CaQuery query; + // define query + query.setFlagsOn(VisibleEntryFlag); + query.setEntryRoles(ItemEntryRole); + query.setEntryTypeNames(QStringList(templatedApplicationTypeName())); + + + // add atributes to caquery + QMapIterator<QString, QVariant> k(map); + while (k.hasNext()) { + k.next(); + query.setAttribute(k.key(),k.value().toString()); + } + QList<CaEntry *> entries = CaService::instance()->getEntries(query); + map.clear(); + if (entries.count()) { + QMap<QString, QString> attrMap; + QMapIterator<QString, QString> k(attrMap); + //walk trought entrys and extract keys into map + for (int i = 0; i < entries.count(); ++i) { + map[hsItemId] = entries.at(i)->id(); + map[hsItemName] = entries.at(i)->text(); + map[hsItemDescription] = entries.at(i)->description(); + CaIconDescription iconDesc = entries.at(i)->iconDescription(); + map[hsIconFileName] = iconDesc.filename(); + map[hsIconName] = iconDesc.skinId(); + map[hsIconApplicationId] = iconDesc.applicationId(); + + // extract entry atributes + attrMap = entries.at(i)->attributes(); + QMapIterator<QString, QString> k(attrMap); + // insert entrys attr into map + while (k.hasNext()) { + k.next(); + map.insert(k.key(),k.value()); + } + list.append(map); //append entry map to list + // clean used maps + map.clear(); + attrMap.clear(); + } + } + qDeleteAll(entries); + return list; +} diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsmenucontentpublish/src/hsmenucontentpublishplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsmenucontentpublish/src/hsmenucontentpublishplugin.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,47 @@ +/* +* 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: Plugin factory. +* +*/ + +#include <qserviceinterfacedescriptor.h> +#include <qabstractsecuritysession.h> +#include <qservicecontext.h> + +#include "hsmenucontentpublishplugin.h" +#include "hsmenucontentpublish.h" + +#ifdef COVERAGE_MEASUREMENT +#pragma CTC SKIP +#endif //COVERAGE_MEASUREMENT + +QObject *HsMenuContentPublishPlugin::createInstance(const QServiceInterfaceDescriptor &descriptor, + QServiceContext *context, + QAbstractSecuritySession *session) +{ + Q_UNUSED(context); + Q_UNUSED(session); + + if (descriptor.interfaceName() == QLatin1String("com.nokia.symbian.IMenuClient")) { + return new HsMenuContentPublish(this); + } else { + return 0; + } +} + +Q_EXPORT_PLUGIN2(hsmenucontentpublishplugin, HsMenuContentPublishPlugin) + +#ifdef COVERAGE_MEASUREMENT +#pragma CTC ENDSKIP +#endif //COVERAGE_MEASUREMENT diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsutils/inc/hsmenueventfactory.h --- a/homescreenapp/hsutils/inc/hsmenueventfactory.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsutils/inc/hsmenueventfactory.h Fri Apr 16 14:54:01 2010 +0300 @@ -42,7 +42,8 @@ int entryId, const QString &entryTypeName = QString(), const QString &uri = QString(), - const QString &library = QString() + const QString &library = QString(), + QMap<QString, QString>* attributes = NULL ); static QEvent *createOpenCollectionEvent(int itemId, diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsutils/inc/hspageindicator.h --- a/homescreenapp/hsutils/inc/hspageindicator.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsutils/inc/hspageindicator.h Fri Apr 16 14:54:01 2010 +0300 @@ -11,64 +11,51 @@ * * Contributors: * -* Description: Page indicator +* Description: * */ #ifndef HSPAGEINDICATOR_H #define HSPAGEINDICATOR_H -#include <hbwidget.h> +#include <HbWidget> #include "hsutils_global.h" + #include "hstest_global.h" - -class QGraphicsLinearLayout; -class QParallelAnimationGroup; -class HbIconItem; - HOMESCREEN_TEST_CLASS(t_hsUtils) -class HSUTILS_EXPORT HsPageIndicator: public HbWidget +class HsPageIndicatorItem; + +class HSUTILS_EXPORT HsPageIndicator : public HbWidget { Q_OBJECT public: - HsPageIndicator(QGraphicsItem* parent = 0); + HsPageIndicator(QGraphicsItem *parent = 0); ~HsPageIndicator(); - -signals: - void currentItemChangeAnimationFinished(); -public slots: - void addItem(bool setAsCurrent=false,bool animated=true); - void removeItem(bool animated=true); - void setCurrentIndex(int currentIndex,bool animated=true); + void initialize(int itemCount, int activeItemIndex); + + int itemCount() const; -public: - void setItemCount(int itemCount); - int itemCount(); - int currentIndex(); - bool isAnimatingCurrentItemChange(); - -private slots: - void resetEffect(); - -private: - void addItemInternal(bool setAsCurrent,int itemIndex,bool animated=true); + void setActiveItemIndex(int index); + int activeItemIndex() const; - void startItemAnimation(); + void addItem(int activeItemIndex); + void removeItem(int activeItemIndex); + + bool isAnimationRunning() const; private: - int mItemCount; - int mCurrentIndex; - HbIcon *mNonActiveIcon; - HbIcon *mActiveIcon; - QSizeF mItemSize; - QGraphicsLinearLayout *mPageIndicatorLayout; - QParallelAnimationGroup *mIconAnimationGroup; + Q_DISABLE_COPY(HsPageIndicator) + void layoutItems(); + +private: + QList<HsPageIndicatorItem *> mItems; + int mActiveItemIndex; HOMESCREEN_TEST_FRIEND_CLASS(t_hsUtils) }; -#endif +#endif // HSPAGEINDICATOR_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsutils/inc/hspageindicatoritem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsutils/inc/hspageindicatoritem.h Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,51 @@ +/* +* 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: +* +*/ + +#ifndef HSPAGEINDICATORITEM_H +#define HSPAGEINDICATORITEM_H + +#include <HbWidget> + +class HbIconItem; + +class HsPageIndicatorItem : public HbWidget +{ + Q_OBJECT + +public: + HsPageIndicatorItem(bool active = false, QGraphicsItem *parent = 0); + ~HsPageIndicatorItem(); + +public: + void setActive(bool active = true); + bool isActive() const; + + bool isAnimationRunning() const; + +private: + Q_DISABLE_COPY(HsPageIndicatorItem) + void startAnimation(); + +private slots: + void animationFinished(); + +private: + HbIconItem *mIconItem; + bool mIsActive; +}; + +#endif // HSPAGEINDICATORITEM_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsutils/inc/hswidgetpositioningonwidgetadd.h --- a/homescreenapp/hsutils/inc/hswidgetpositioningonwidgetadd.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsutils/inc/hswidgetpositioningonwidgetadd.h Fri Apr 16 14:54:01 2010 +0300 @@ -28,8 +28,9 @@ virtual ~HsWidgetPositioningOnWidgetAdd() {} virtual QList<QRectF> convert(const QRectF &contentArea, - const QList<QRectF> &widgets) = 0; - + const QList<QRectF> &rects, + const QPointF &startPoint) = 0; + static void setInstance(HsWidgetPositioningOnWidgetAdd *instance); static HsWidgetPositioningOnWidgetAdd *instance(); @@ -41,15 +42,18 @@ { public: QList<QRectF> convert(const QRectF &contentArea, - const QList<QRectF> &widgets); + const QList<QRectF> &rects, + const QPointF &startPoint); + }; class HSUTILS_EXPORT HsAnchorPointInCenter : public HsWidgetPositioningOnWidgetAdd { public: QList<QRectF> convert(const QRectF &contentArea, - const QList<QRectF> &widgets); -}; + const QList<QRectF> &rects, + const QPointF &startPoint); + }; #endif // HSWIDGETPOSITIONINGONWIDGETADD_H diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsutils/src/hsmenueventfactory.cpp --- a/homescreenapp/hsutils/src/hsmenueventfactory.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsutils/src/hsmenueventfactory.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -41,20 +41,23 @@ \param entryTypeName Name of the entry type (e.g. application, widget). \param uri Widget uri. \param library Widget library path and name. + \param attributes Widget params. \return Event for adding the widget to homescreen. */ QEvent *HsMenuEventFactory::createAddToHomeScreenEvent( int entryId, const QString &entryTypeName, const QString &uri, - const QString &library) + const QString &library, + QMap<QString, QString>* attributes) { // get CaEntry type, and if widget get uri and library stored as properties... QVariantMap params; + QVariantMap widgetParams; params.insert(itemIdKey(), entryId); - if (entryTypeName == widgetTypeName()) { + if (entryTypeName == widgetTypeName() || entryTypeName == templatedApplicationTypeName()) { params.insert( widgetUriAttributeName(), uri); @@ -64,6 +67,19 @@ library); params.insert(entryTypeNameKey(), entryTypeName); + + if (entryTypeName == templatedApplicationTypeName()) { + QMapIterator<QString, QString> i(*attributes); + while (i.hasNext()) { + i.next(); + QString key(i.key()); + QString value(i.value()); + if (key.contains(widgetParam())) { + widgetParams.insert(key,value); + } + } + params.insert(widgetParam(),widgetParams); + } } return new HsMenuEvent(HsMenuEvent::AddToHomeScreen, params); diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsutils/src/hspageindicator.cpp --- a/homescreenapp/hsutils/src/hspageindicator.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsutils/src/hspageindicator.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -11,240 +11,133 @@ * * Contributors: * -* Description: Menu Event. +* Description: * */ #include <QGraphicsLinearLayout> -#include <QGraphicsBlurEffect> -#include <QPropertyAnimation> -#include <QParallelAnimationGroup> -#include <QPointer> - -#include <HbIconItem> #include "hspageindicator.h" - -const char *KPageIndicatorActiveItemImageName = "qtg_graf_hspage_highlight"; -const char *KPageIndicatorNonActiveItemImageName = "qtg_graf_hspage_normal"; - -/*! - \class HsPageIndicator - \ingroup group_hsutils - \brief Page indicator widget. -*/ +#include "hspageindicatoritem.h" /*! - Constructor. - - \a parent Owner. -*/ -HsPageIndicator::HsPageIndicator(QGraphicsItem* parent): - HbWidget(parent), - mItemCount(0), - mCurrentIndex(0), - mNonActiveIcon(0), - mActiveIcon(0), - mIconAnimationGroup(0) -{ - mItemSize = QSizeF(30, 15); - // perf improvement to load icons only once - mNonActiveIcon = new HbIcon(KPageIndicatorNonActiveItemImageName); - mActiveIcon = new HbIcon(KPageIndicatorActiveItemImageName); - - QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Horizontal); - layout->addStretch(); +*/ +HsPageIndicator::HsPageIndicator(QGraphicsItem *parent) + : HbWidget(parent), + mActiveItemIndex(-1) +{ +} - mPageIndicatorLayout = new QGraphicsLinearLayout(Qt::Horizontal); - layout->addItem(mPageIndicatorLayout); +/*! - layout->addStretch(); - - setLayout(layout); +*/ +HsPageIndicator::~HsPageIndicator() +{ + qDeleteAll(mItems); } /*! - Destructor. -*/ -HsPageIndicator::~HsPageIndicator() -{ -} - -/*! - \fn HsPageIndicator::currentItemChangeAnimationFinished() - Signaled when current item is changed and animation is finished. -*/ -/*! - Add an item and animates if \a animated is true and sets the - new page as current if \a setAsCurrent is true */ -void HsPageIndicator::addItem(bool setAsCurrent,bool animated) +void HsPageIndicator::initialize(int itemCount, int activeItemIndex) { - mItemCount++; - addItemInternal(setAsCurrent,mItemCount - 1,animated); -} + qDeleteAll(mItems); + mItems.clear(); + mActiveItemIndex = -1; -/*! - Removes on item and animates if \a animated is true. -*/ -void HsPageIndicator::removeItem(bool animated) -{ - if (mItemCount < 1) { + if (itemCount < 1 || activeItemIndex < 0 || + itemCount <= activeItemIndex) { return; } - mItemCount--; + for (int i = 0; i < itemCount; ++i) { + mItems << new HsPageIndicatorItem(i == activeItemIndex); + } + mActiveItemIndex = activeItemIndex; + layoutItems(); +} + +/*! - if(mCurrentIndex == mItemCount) { - setCurrentIndex(mItemCount-1,animated); - } - - QGraphicsLayoutItem *item = mPageIndicatorLayout->itemAt(mPageIndicatorLayout->count() - 1); - mPageIndicatorLayout->removeAt(mPageIndicatorLayout->count() - 1); - - if (mItemCount < 2) { - hide(); - } - - delete item; - layout()->invalidate(); +*/ +int HsPageIndicator::itemCount() const +{ + return mItems.count(); } /*! - Set \a currentIndex as current item and animates the change if \a animated - is true. + */ -void HsPageIndicator::setCurrentIndex(int currentIndex,bool animated) +void HsPageIndicator::setActiveItemIndex(int activeItemIndex) { - if( currentIndex < mPageIndicatorLayout->count() && currentIndex>=0) { - if ( mIconAnimationGroup ) { - mIconAnimationGroup->disconnect(this); - resetEffect(); - } - - QGraphicsLayoutItem *previousItem = mPageIndicatorLayout->itemAt(mCurrentIndex); - HbIconItem *previousIconItem = static_cast<HbIconItem*>(previousItem); - previousIconItem->setIcon(*mNonActiveIcon); - mCurrentIndex = currentIndex; + if (activeItemIndex < 0 || itemCount() <= activeItemIndex) { + return; + } - if (animated) { - startItemAnimation(); - } + mActiveItemIndex = activeItemIndex; + for (int i = 0; i < mItems.count(); ++i) { + mItems[i]->setActive(i == activeItemIndex); } } + +/*! + +*/ +int HsPageIndicator::activeItemIndex() const +{ + return mActiveItemIndex; +} /*! - Sets the item count to \a itemCount. Ie. removes or adds items if - necessary. -*/ -void HsPageIndicator::setItemCount(int itemCount) -{ - if (mItemCount < itemCount) { - int count = itemCount - mItemCount; - for (int i = 0; i < count; ++i) { - addItem(false,false); - } - } else if (mItemCount > itemCount) { - int count = mItemCount - itemCount; - for (int i = 0; i < count; ++i) { - removeItem(false); - } - } -} -/*! - Returns the item count */ -int HsPageIndicator::itemCount() +void HsPageIndicator::addItem(int activeItemIndex) { - return mItemCount; -} - + if (activeItemIndex < 0 || itemCount() < activeItemIndex) { + return; + } -/*! - Returns current index. -*/ -int HsPageIndicator::currentIndex() -{ - return mCurrentIndex; -} - -/*! - Returns true if current item animation is ongoing. -*/ -bool HsPageIndicator::isAnimatingCurrentItemChange() -{ - return mIconAnimationGroup; + mItems.append(new HsPageIndicatorItem); + layoutItems(); + setActiveItemIndex(activeItemIndex); } /*! - \internal + */ -void HsPageIndicator::resetEffect() -{ - QGraphicsLayoutItem *item = mPageIndicatorLayout->itemAt(mCurrentIndex); - HbIconItem *iconItem = static_cast<HbIconItem*>(item); - if ( iconItem ) { - QPointer<QGraphicsEffect> iconEffect = iconItem->graphicsEffect(); - iconItem->setGraphicsEffect(0); - if (iconEffect) { - delete iconEffect; - } +void HsPageIndicator::removeItem(int activeItemIndex) +{ + if (activeItemIndex < 0 || itemCount() - 1 <= activeItemIndex) { + return; } - mIconAnimationGroup = 0; - emit currentItemChangeAnimationFinished(); + + delete mItems.last(); + mItems.removeLast(); + layoutItems(); + setActiveItemIndex(activeItemIndex); } /*! - \internal + */ -void HsPageIndicator::addItemInternal(bool setAsCurrent,int itemIndex,bool animated) -{ - HbIconItem *iconItem = new HbIconItem(); - iconItem->setIcon(*mNonActiveIcon); - iconItem->setPreferredSize(mItemSize); - iconItem->setMinimumSize(mItemSize); - iconItem->setMaximumSize(mItemSize); - - mPageIndicatorLayout->addItem(iconItem); - if (setAsCurrent) { - setCurrentIndex(itemIndex,animated); - } - layout()->invalidate(); - - if (mItemCount < 2) { - hide(); - } else { - show(); - } +bool HsPageIndicator::isAnimationRunning() const +{ + return mItems.at(mActiveItemIndex)->isAnimationRunning(); } /*! - \internal + */ -void HsPageIndicator::startItemAnimation() +void HsPageIndicator::layoutItems() { - QGraphicsLayoutItem *item = mPageIndicatorLayout->itemAt(mCurrentIndex); - HbIconItem *iconItem = static_cast<HbIconItem*>(item); - iconItem->setIcon(*mActiveIcon); - - QGraphicsBlurEffect* iconBlurEffect = new QGraphicsBlurEffect(); - iconBlurEffect->setBlurRadius(9); - iconItem->setGraphicsEffect(iconBlurEffect); - iconItem->setTransformOriginPoint(iconItem->rect().center()); - - mIconAnimationGroup = new QParallelAnimationGroup(); - - QPropertyAnimation *animation = new QPropertyAnimation(iconItem, "scale"); - animation->setDuration(1000); - animation->setKeyValueAt(0.5, 2); - animation->setEndValue(1.0); - mIconAnimationGroup->addAnimation(animation); - - connect(mIconAnimationGroup, SIGNAL(finished()), SLOT(resetEffect())); - - mIconAnimationGroup->start(QAbstractAnimation::DeleteWhenStopped); - + QGraphicsLinearLayout *layout = new QGraphicsLinearLayout; + layout->setContentsMargins(0, 0, 0, 0); + layout->setSpacing(8); + layout->addStretch(); + foreach (HsPageIndicatorItem *item, mItems) { + layout->addItem(item); + } + layout->addStretch(); + setLayout(layout); } diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsutils/src/hspageindicatoritem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/hsutils/src/hspageindicatoritem.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,121 @@ +/* +* 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 <QGraphicsLinearLayout> +#include <QGraphicsColorizeEffect> +#include <QPropertyAnimation> + +#include <HbIconItem> + +#include "hspageindicatoritem.h" + +namespace +{ + const char gNormalIconName[] = "qtg_graf_hspage_normal"; + const char gHighlightIconName[] = "qtg_graf_hspage_highlight"; +} + +/*! + +*/ +HsPageIndicatorItem::HsPageIndicatorItem(bool active, QGraphicsItem *parent) + : HbWidget(parent), + mIconItem(0), + mIsActive(active) +{ + mIconItem = new HbIconItem; + if (active) { + mIconItem->setIcon(HbIcon(gHighlightIconName)); + } else { + mIconItem->setIcon(HbIcon(gNormalIconName)); + } + + QGraphicsLinearLayout *layout = new QGraphicsLinearLayout; + layout->setContentsMargins(0, 0, 0, 0); + layout->addItem(mIconItem); + setLayout(layout); + + QGraphicsColorizeEffect *effect = new QGraphicsColorizeEffect; + effect->setColor(Qt::white); + effect->setStrength(0); + effect->setEnabled(false); + setGraphicsEffect(effect); +} + +/*! + +*/ +HsPageIndicatorItem::~HsPageIndicatorItem() +{ +} + +/*! + +*/ +void HsPageIndicatorItem::setActive(bool active) +{ + if (mIsActive != active) { + mIsActive = active; + if (mIsActive) { + mIconItem->setIcon(HbIcon(gHighlightIconName)); + startAnimation(); + } else { + mIconItem->setIcon(HbIcon(gNormalIconName)); + } + } +} + +/*! + +*/ +bool HsPageIndicatorItem::isActive() const +{ + return mIsActive; +} + + +/*! + +*/ +bool HsPageIndicatorItem::isAnimationRunning() const +{ + return graphicsEffect()->isEnabled(); +} + +/*! + +*/ +void HsPageIndicatorItem::startAnimation() +{ + graphicsEffect()->setEnabled(true); + setTransformOriginPoint(rect().center()); + QPropertyAnimation *animation = + new QPropertyAnimation(graphicsEffect(), "strength"); + animation->setDuration(800); + animation->setKeyValueAt(0.2, 1); + animation->setEndValue(0); + connect(animation, SIGNAL(finished()), SLOT(animationFinished())); + animation->start(QAbstractAnimation::DeleteWhenStopped); +} + +/*! + +*/ +void HsPageIndicatorItem::animationFinished() +{ + graphicsEffect()->setEnabled(false); +} diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsutils/src/hstrashbinwidget.cpp --- a/homescreenapp/hsutils/src/hstrashbinwidget.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsutils/src/hstrashbinwidget.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -16,12 +16,16 @@ */ #include <QGraphicsLinearLayout> + #include <HbIconItem> #include "hstrashbinwidget.h" -const char* KTrashBinNormalItemImageName = "qtg_graf_hs_delete_normal"; -const char* KTrashBinHighlightItemImageName = "qtg_graf_hs_delete_highlight"; +namespace +{ + const char gNormalIconName[] = "qtg_graf_hs_delete_normal"; + const char gHighlightIconName[] = "qtg_graf_hs_delete_highlight"; +} /*! \internal @@ -43,14 +47,14 @@ mHighlightIcon(0), mNormalIconVisible(false) { - mIconItem = new HbIconItem(this); - - mNormalIcon = new HbIcon(KTrashBinNormalItemImageName); - mHighlightIcon = new HbIcon(KTrashBinHighlightItemImageName); - + mNormalIcon = new HbIcon(gNormalIconName); + mHighlightIcon = new HbIcon(gHighlightIconName); + + mIconItem = new HbIconItem; mIconItem->setIcon(*mNormalIcon); - setPreferredSize(80,80); // workaround for icon updating problem when changing theme - QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Horizontal); + + QGraphicsLinearLayout *layout = new QGraphicsLinearLayout; + layout->setContentsMargins(0, 0, 0, 0); layout->addItem(mIconItem); setLayout(layout); } @@ -61,7 +65,6 @@ */ HsTrashBinWidget::~HsTrashBinWidget() { - } /*! diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsutils/src/hswidgetpositioningonwidgetadd.cpp --- a/homescreenapp/hsutils/src/hswidgetpositioningonwidgetadd.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsutils/src/hswidgetpositioningonwidgetadd.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -64,7 +64,8 @@ */ QList<QRectF> HsAnchorPointInBottomRight::convert( const QRectF &contentArea, - const QList<QRectF> &widgets) + const QList<QRectF> &rects, + const QPointF &startPoint) { QList<QRectF> toGeometries; @@ -74,30 +75,49 @@ qreal offset_y = k*offset_x; QPointF offsetPoint(offset_x, offset_y); - QLineF diagonal(contentArea.topLeft(), contentArea.bottomRight()); - QLineF widgetRight(contentArea.center().x()+ widgets.at(0).width()/2, - contentArea.top(), - contentArea.center().x()+ widgets.at(0).width()/2, - contentArea.bottom()); + QPointF anchorPoint; + + if(startPoint.isNull()){ + + QLineF diagonal(contentArea.topLeft(), contentArea.bottomRight()); + QLineF widgetRightSide(contentArea.center().x()+ rects.at(0).width()/2, + contentArea.top(), + contentArea.center().x()+ rects.at(0).width()/2, + contentArea.bottom()); - QPointF anchorPoint; - if(QLineF::BoundedIntersection != diagonal.intersect(widgetRight, &anchorPoint)) { - return widgets; //Return original since undefined error. - //In this case widget's must be wider than the content area. + // right side line intersection with diagonal will be bottom right position + // for the first rect + if(QLineF::BoundedIntersection != + diagonal.intersect(widgetRightSide, &anchorPoint)) { + return rects; //Return original since undefined error. + //In this case widget's must be wider than the content area. + } + }else{ + anchorPoint = startPoint - offsetPoint; } - //First widget to the center of the content area - foreach (QRectF g, widgets) { - g.moveBottomRight(anchorPoint); - toGeometries << g; + QRectF widgetRect; + for(int i=0;i<rects.count();++i) { + widgetRect = rects.at(i); + widgetRect.moveBottomRight(anchorPoint); + //if widget rect doesn't fit, try to move it + if(!contentArea.contains(widgetRect)) { + /*! precondition is that + widget's max height < content area height + widget's max widht < content area width + */ + widgetRect.moveBottomRight(contentArea.bottomRight()); + // anchorPoin is always previous bottom right + anchorPoint = widgetRect.bottomRight(); + } + toGeometries << widgetRect; anchorPoint -= offsetPoint; - if(!contentArea.contains(anchorPoint)) { - anchorPoint = contentArea.bottomRight(); - } + } return toGeometries; } + /*! \class HsAnchorPointInCenter \brief Diagonal widget positioning algorithm. @@ -110,8 +130,11 @@ #endif //COVERAGE_MEASUREMENT QList<QRectF> HsAnchorPointInCenter::convert( const QRectF &contentArea, - const QList<QRectF> &widgets) + const QList<QRectF> &rects, + const QPointF &startPoint ) { + Q_UNUSED(startPoint) + QList<QRectF> toGeometries; //Offset for widgets' centers position to each other @@ -122,7 +145,7 @@ //First widget to the center of the content area QPointF anchorPoint = contentArea.center(); - foreach (QRectF g, widgets) { + foreach (QRectF g, rects) { g.moveCenter(anchorPoint); toGeometries << g; anchorPoint -= offsetPoint; @@ -133,6 +156,7 @@ return toGeometries; } + #ifdef COVERAGE_MEASUREMENT #pragma CTC ENDSKIP #endif //COVERAGE_MEASUREMENT diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/hsutils/src/xqaiwgetimageclient.cpp --- a/homescreenapp/hsutils/src/xqaiwgetimageclient.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/hsutils/src/xqaiwgetimageclient.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -39,9 +39,9 @@ XQAIWGetImageClient::XQAIWGetImageClient(): mImageGrid(0) { - mImageGrid = new HsImageGridWidget(QStringList(),0); - mBackAction = new HbAction(Hb::BackAction, this); - + mImageGrid = new HsImageGridWidget(QStringList(), 0); + mBackAction = new HbAction(Hb::BackNaviAction, this); + mImageGrid->setNavigationAction(mBackAction); } // --------------------------------------------------------------------------- @@ -99,22 +99,20 @@ QStringList images; - foreach(QString imageDir, imageDirs) - { + foreach (QString imageDir, imageDirs) { findImages(QDir(imageDir).absolutePath(), filters, images); } - HbMainWindow *window = HbInstance::instance()->allMainWindows().at(0); - window->addSoftKeyAction(Hb::SecondarySoftKey, mBackAction); - + HbMainWindow *window = HbInstance::instance()->allMainWindows().first(); + mImageGrid->setContent(images); - connect(mImageGrid,SIGNAL(imageSelected(const QString&)),this,SLOT(imageSelected(const QString&))); + connect(mImageGrid, SIGNAL(imageSelected(QString)), SLOT(imageSelected(QString))); - HbInstance::instance()->allMainWindows().at(0)->addView(mImageGrid); - HbInstance::instance()->allMainWindows().at(0)->setCurrentView(mImageGrid,false); + window->addView(mImageGrid); + window->setCurrentView(mImageGrid, false); - connect(mBackAction,SIGNAL(triggered()),this,SLOT(imageSelectionCancelled())); + connect(mBackAction, SIGNAL(triggered()), SLOT(imageSelectionCancelled())); } // --------------------------------------------------------------------------- @@ -128,10 +126,9 @@ list << val; - HbMainWindow *window = HbInstance::instance()->allMainWindows().at(0); + HbMainWindow *window = HbInstance::instance()->allMainWindows().first(); window->removeView(mImageGrid); - window->removeSoftKeyAction(Hb::SecondarySoftKey, mBackAction); - + emit fetchComplete(list); QStringList images; mImageGrid->setContent(images); @@ -149,14 +146,12 @@ { mImageGrid->disconnect(this); - HbMainWindow *window = HbInstance::instance()->allMainWindows().at(0); + HbMainWindow *window = HbInstance::instance()->allMainWindows().first(); window->removeView(mImageGrid); - window->removeSoftKeyAction(Hb::SecondarySoftKey, mBackAction); - + emit fetchFailed(-1);//KErrNotFound QStringList images; mImageGrid->setContent(images); - } // --------------------------------------------------------------------------- diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/inc/hsapp_defs.h --- a/homescreenapp/inc/hsapp_defs.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/inc/hsapp_defs.h Fri Apr 16 14:54:01 2010 +0300 @@ -27,6 +27,8 @@ inline const QString collectionDownloadedTypeName(); inline const QString menuCollectionsTypeName(); inline const QString widgetTypeName(); +inline const QString templatedApplicationTypeName(); +inline const QString widgetParam(); inline const QString openActionIdentifier(); inline const QString removeActionIdentifier(); inline const QString itemIdKey(); @@ -54,6 +56,13 @@ AddHsMenuMode }; +const int taskSwitcherUid = 0x2002677D; +const int taskSwitcherPropertyValue = 1; + +const char LIBRARY[] = "library"; +const char URI[] = "uri"; +const char PREFERENCES[] = "preferences"; + #include "hsapp_defs.inl" #endif diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/inc/hsapp_defs.inl --- a/homescreenapp/inc/hsapp_defs.inl Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/inc/hsapp_defs.inl Fri Apr 16 14:54:01 2010 +0300 @@ -18,6 +18,16 @@ #ifndef HSAPPDEFS_INL_ #define HSAPPDEFS_INL_ + +/*! +\return widget path attribute name +*/ +inline const QString widgetPathAttributeName() +{ + static const QString name("widget:path"); + return name; +} + /*! \return widget library attribute name */ @@ -90,6 +100,24 @@ } /*! +\return temploated application entry type name +*/ +inline const QString templatedApplicationTypeName() +{ + static const QString name("templatedApplication"); + return name; +} + +/*! +\return widget param name +*/ +inline const QString widgetParam() +{ + static const QString name("widgetparam:"); + return name; +} + +/*! \return identifier for open an item action */ inline const QString openActionIdentifier() diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/rom/homescreenapp_core.iby --- a/homescreenapp/rom/homescreenapp_core.iby Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/rom/homescreenapp_core.iby Fri Apr 16 14:54:01 2010 +0300 @@ -24,7 +24,7 @@ data=ZPRIVATE\10003a3f\import\apps\hsapplication_reg.rsc private\10003a3f\import\apps\hsapplication_reg.rsc data=\epoc32\data\z\resource\apps\hsapplication.rsc resource\apps\hsapplication.rsc data=\epoc32\data\z\resource\apps\hsapplication.mif resource\apps\hsapplication.mif -data=ZPRIVATE\20022f35\homescreendb private\20022f35\homescreendb +data=ZPRIVATE\20022f35\homescreen.db private\20022f35\homescreen.db data=ZPRIVATE\20022f35\wallpapers\d_portrait.png private\20022f35\wallpapers\d_portrait.png data=ZPRIVATE\20022f35\wallpapers\d_landscape.png private\20022f35\wallpapers\d_landscape.png data=\epoc32\data\z\data\images\kqtihswallpapers\bg_1.png data\images\kqtihswallpapers\bg_1.png @@ -39,6 +39,11 @@ file=ABI_DIR\BUILD_DIR\hsdomainmodel.dll SHARED_LIB_DIR\hsdomainmodel.dll +// -------- hshomescreenclientplugin +file=ABI_DIR\BUILD_DIR\hshomescreenclientplugin.dll SHARED_LIB_DIR\hshomescreenclientplugin.dll +data=\epoc32\data\z\hsresources\plugins\homescreenclientplugin\hshomescreenclientplugin.qtplugin hsresources\plugins\homescreenclientplugin\hshomescreenclientplugin.qtplugin +data=\epoc32\data\z\hsresources\plugins\homescreenclientplugin\hshomescreenclientplugin.xml hsresources\plugins\homescreenclientplugin\hshomescreenclientplugin.xml + // ---- runtimeplugins -------------------------------------------- // -------- hsdefaultruntimeplugin @@ -96,4 +101,12 @@ file=ABI_DIR\BUILD_DIR\hsanalogclockstyleplugin.dll SHARED_LIB_DIR\hsanalogclockstyleplugin.dll data=\epoc32\data\z\hsresources\plugins\styleplugins\hsanalogclockstyleplugin.qtplugin hsresources\plugins\styleplugins\hsanalogclockstyleplugin.qtplugin +// ---- IMenuClient -------------------------------------------- + +// -------- hsmenucontentpublish +file=ABI_DIR\BUILD_DIR\hsmenucontentpublish.dll SHARED_LIB_DIR\hsmenucontentpublish.dll +data=\epoc32\data\z\hsresources\plugins\hsmenucontentpublishplugin\hsmenucontentpublish.qtplugin hsresources\plugins\hsmenucontentpublishplugin\hsmenucontentpublish.qtplugin +data=\epoc32\data\z\hsresources\plugins\hsmenucontentpublishplugin\hsmenucontentpublish.xml hsresources\plugins\hsmenucontentpublishplugin\hsmenucontentpublish.xml + + #endif //__HOMESCREENAPP_CORE_IBY__ diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/rom/homescreenapp_resources.iby --- a/homescreenapp/rom/homescreenapp_resources.iby Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/rom/homescreenapp_resources.iby Fri Apr 16 14:54:01 2010 +0300 @@ -14,8 +14,8 @@ * Description: * */ -#ifndef __HOMESCREENAPP_LANGUAGE_IBY__ -#define __HOMESCREENAPP_LANGUAGE_IBY__ +#ifndef __HOMESCREENAPP_RESOURCE_IBY__ +#define __HOMESCREENAPP_RESOURCE_IBY__ #include <data_caging_paths_for_iby.hrh> diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/runtimeplugins/hsdefaultruntimeplugin/inc/hsdefaultruntime.h --- a/homescreenapp/runtimeplugins/hsdefaultruntimeplugin/inc/hsdefaultruntime.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/runtimeplugins/hsdefaultruntimeplugin/inc/hsdefaultruntime.h Fri Apr 16 14:54:01 2010 +0300 @@ -19,6 +19,7 @@ #define HSDEFAULTRUNTIME_H #include <QStateMachine> +#include <qmobilityglobal.h> #ifndef HSDEFAULTRUNTIMEPLUGIN_UNITTEST #define TEST_CLASS_FWD @@ -29,6 +30,11 @@ #endif class HsContentService; +QTM_BEGIN_NAMESPACE +class QValueSpacePublisher; +QTM_END_NAMESPACE + +QTM_USE_NAMESPACE TEST_CLASS_FWD @@ -49,6 +55,7 @@ private: Q_DISABLE_COPY(HsDefaultRuntime) + void createStatePublisher(); void createContentServiceParts(); void createStates(); void assignServices(); @@ -63,6 +70,8 @@ bool mHomeScreenActive; bool mIdleStateActive; + + QValueSpacePublisher *mPublisher; TEST_FRIEND }; diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/runtimeplugins/hsdefaultruntimeplugin/resource/hsdefaultruntimeplugin.s60xml --- a/homescreenapp/runtimeplugins/hsdefaultruntimeplugin/resource/hsdefaultruntimeplugin.s60xml Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/runtimeplugins/hsdefaultruntimeplugin/resource/hsdefaultruntimeplugin.s60xml Fri Apr 16 14:54:01 2010 +0300 @@ -4,7 +4,7 @@ <filepath>z:/hsresources/plugins/runtimeplugins/hsdefaultruntimeplugin.qtplugin</filepath> <description>Homescreen Runtime Plugin</description> <interface> - <name>com.nokia.homescreen.runtime.HsRuntime</name> + <name>com.nokia.symbian.IHomeScreenRuntime</name> <version>1.0</version> <description>Default implementation for homescreen runtime</description> <capabilities></capabilities> diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/runtimeplugins/hsdefaultruntimeplugin/resource/hsdefaultruntimeplugin.xml --- a/homescreenapp/runtimeplugins/hsdefaultruntimeplugin/resource/hsdefaultruntimeplugin.xml Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/runtimeplugins/hsdefaultruntimeplugin/resource/hsdefaultruntimeplugin.xml Fri Apr 16 14:54:01 2010 +0300 @@ -4,7 +4,7 @@ <filepath>hsdefaultruntimeplugin</filepath> <description>Homescreen Runtime Plugin</description> <interface> - <name>com.nokia.homescreen.runtime.HsRuntime</name> + <name>com.nokia.symbian.IHomeScreenRuntime</name> <version>1.0</version> <description>Default implementation for homescreen runtime</description> <capabilities></capabilities> diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/runtimeplugins/hsdefaultruntimeplugin/src/hsdefaultruntime.cpp --- a/homescreenapp/runtimeplugins/hsdefaultruntimeplugin/src/hsdefaultruntime.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/runtimeplugins/hsdefaultruntimeplugin/src/hsdefaultruntime.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -29,6 +29,7 @@ #include "homescreendomainpskeys.h" #include "hsdefaultruntime.h" +#include "hsdatabase.h" #include "hscontentservice.h" #include "hsshortcutservice.h" #include "hsmenueventtransition.h" @@ -62,16 +63,28 @@ : QStateMachine(parent), mContentService(0), mHomeScreenActive(false), - mIdleStateActive(false) + mIdleStateActive(false), + mPublisher(NULL) { HSTEST_FUNC_ENTRY("HS::HsDefaultRuntime::HsDefaultRuntime"); + HsDatabase *db = new HsDatabase; + db->setConnectionName("homescreen.dbc"); +#ifdef Q_OS_SYMBIAN + db->setDatabaseName("c:/private/20022f35/homescreen.db"); +#else + db->setDatabaseName("homescreen.db"); +#endif + db->open(); + HsDatabase::setInstance(db); + HsWidgetPositioningOnOrientationChange::setInstance( new HsAdvancedWidgetPositioningOnOrientationChange); HsWidgetPositioningOnWidgetAdd::setInstance( new HsAnchorPointInBottomRight); + createStatePublisher(); createContentServiceParts(); createStates(); assignServices(); @@ -86,6 +99,7 @@ HsDefaultRuntime::~HsDefaultRuntime() { HsWidgetPositioningOnOrientationChange::setInstance(0); + delete mPublisher; } /*! @@ -121,6 +135,21 @@ } /*! + Creates Home screen state publisher. +*/ +void HsDefaultRuntime::createStatePublisher() +{ + mPublisher = new QValueSpacePublisher(QValueSpace::PermanentLayer, HsStatePSKeyPath); + + if (!mPublisher->isConnected()){ + // No permanent layer available + mPublisher = new QValueSpacePublisher(HsStatePSKeyPath); + } + + mPublisher->setValue(HsStatePSKeySubPath, EHomeScreenInactive); +} + +/*! Creates content service parts. */ void HsDefaultRuntime::createContentServiceParts() @@ -147,20 +176,24 @@ guiRootState->addTransition(this, SIGNAL(event_exit()), finalState); - // Workaround to QtSF bug. Create in stack after the bug is fixed. - QServiceManager *manager = new QServiceManager(this); + QServiceManager manager; + QServiceFilter filter; filter.setInterface("com.nokia.homescreen.state.HsLoadSceneState"); - QList<QServiceInterfaceDescriptor> interfaces = manager->findInterfaces(filter); - QObject *loadSceneStateObj = manager->loadInterface(interfaces.first().interfaceName()); +#ifdef HSDEFAULTRUNTIMEPLUGIN_UNITTEST + filter.setServiceName("mockstateplugins"); +#endif + QList<QServiceInterfaceDescriptor> interfaces = manager.findInterfaces(filter); + + QObject *loadSceneStateObj = manager.loadInterface(interfaces.first()); QState *loadSceneState = qobject_cast<QState *>(loadSceneStateObj); loadSceneState->setParent(guiRootState); loadSceneState->setObjectName(interfaces.first().interfaceName()); filter.setInterface("com.nokia.homescreen.state.HsIdleState"); - interfaces = manager->findInterfaces(filter); - QObject *idleStateObj = manager->loadInterface(interfaces.first().interfaceName()); + interfaces = manager.findInterfaces(filter); + QObject *idleStateObj = manager.loadInterface(interfaces.first()); QState *idleState = qobject_cast<QState *>(idleStateObj); idleState->setParent(guiRootState); idleState->setObjectName(interfaces.first().interfaceName()); @@ -176,16 +209,16 @@ QState *menuRootState = new QState(menuParallelState); filter.setInterface("com.nokia.homescreen.state.HsAppLibraryState"); - interfaces = manager->findInterfaces(filter); - QObject *appLibraryStateObj = manager->loadInterface(interfaces.first().interfaceName()); + interfaces = manager.findInterfaces(filter); + QObject *appLibraryStateObj = manager.loadInterface(interfaces.first()); QState *appLibraryState = qobject_cast<QState *>(appLibraryStateObj); appLibraryState->setParent(menuRootState); appLibraryState->setObjectName(interfaces.first().interfaceName()); menuRootState->setInitialState(appLibraryState); filter.setInterface("com.nokia.homescreen.state.HsMenuWorkerState"); - interfaces = manager->findInterfaces(filter); - QObject *menuWorkerStateObj = manager->loadInterface(interfaces.first().interfaceName()); + interfaces = manager.findInterfaces(filter); + QObject *menuWorkerStateObj = manager.loadInterface(interfaces.first()); QState *menuWorkerState = qobject_cast<QState *>(menuWorkerStateObj); menuWorkerState->setParent(menuParallelState); menuWorkerState->setObjectName(interfaces.first().interfaceName()); @@ -205,7 +238,7 @@ HsMenuEvent::OpenHomeScreen, appLibraryState, idleState); appLibraryState->addTransition(appLibToIdleTransition); - HbMainWindow *window = hbInstance->allMainWindows().at(0); + HbMainWindow *window = hbInstance->allMainWindows().first(); // key driven transition from idle to menu QKeyEventTransition *idleToMenuRootTransition = @@ -270,24 +303,26 @@ } /*! - + Publishes Home screen states via Publish & Subscribe. */ void HsDefaultRuntime::updatePSKeys() -{ - QValueSpacePublisher publisher(HsStatePSKeyPath); - - if (mHomeScreenActive && mIdleStateActive){ +{ + if (!mPublisher){ + createStatePublisher(); + } + + if (mHomeScreenActive && mIdleStateActive){ qDebug() << "HsDefaultRuntime::updatePSKeys: EHomeScreenIdleState"; - publisher.setValue(HsStatePSKeySubPath, EHomeScreenIdleState); + mPublisher->setValue(HsStatePSKeySubPath, EHomeScreenIdleState); } else{ qDebug() << "HsDefaultRuntime::updatePSKeys: EHomeScreenInactive"; - publisher.setValue(HsStatePSKeySubPath, EHomeScreenInactive); - } + mPublisher->setValue(HsStatePSKeySubPath, EHomeScreenInactive); + } } /*! - + Called when state machine is in Idle state. */ void HsDefaultRuntime::onIdleStateEntered() { @@ -296,7 +331,7 @@ } /*! - + Called when state machine leaves the Idle state. */ void HsDefaultRuntime::onIdleStateExited() { diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/runtimeplugins/hsdefaultruntimeplugin/src/hsdefaultruntimeplugin.cpp --- a/homescreenapp/runtimeplugins/hsdefaultruntimeplugin/src/hsdefaultruntimeplugin.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/runtimeplugins/hsdefaultruntimeplugin/src/hsdefaultruntimeplugin.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -33,7 +33,7 @@ Q_UNUSED(context); Q_UNUSED(session); - if (descriptor.interfaceName() == QLatin1String("com.nokia.homescreen.runtime.HsRuntime")) { + if (descriptor.interfaceName() == QLatin1String("com.nokia.symbian.IHomeScreenRuntime")) { return new HsDefaultRuntime(this); } else { return 0; diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/serviceproviders/hsmenuserviceprovider/hsmenuserviceprovider.pro --- a/homescreenapp/serviceproviders/hsmenuserviceprovider/hsmenuserviceprovider.pro Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/serviceproviders/hsmenuserviceprovider/hsmenuserviceprovider.pro Fri Apr 16 14:54:01 2010 +0300 @@ -10,7 +10,8 @@ # Description: TEMPLATE = lib -CONFIG += hb +CONFIG += hb mobility +MOBILITY += publishsubscribe include (../../common.pri) DEPENDPATH += . \ inc \ diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/serviceproviders/hsmenuserviceprovider/inc/hsmenuservice.h --- a/homescreenapp/serviceproviders/hsmenuserviceprovider/inc/hsmenuservice.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/serviceproviders/hsmenuserviceprovider/inc/hsmenuservice.h Fri Apr 16 14:54:01 2010 +0300 @@ -49,6 +49,7 @@ static QString getName(int entryId); static bool executeAction(int entryId, const QString &actionName = openActionIdentifier()); + static bool launchTaskSwitcher(); static int createCollection(const QString &name); static bool renameCollection(int collectionId, diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/serviceproviders/hsmenuserviceprovider/src/hsmenuservice.cpp --- a/homescreenapp/serviceproviders/hsmenuserviceprovider/src/hsmenuservice.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/serviceproviders/hsmenuserviceprovider/src/hsmenuservice.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -17,6 +17,7 @@ #include <QDebug> #include <QStandardItem> +#include <qvaluespacepublisher.h> #include "hsapp_defs.h" #include "hsmenuservice.h" @@ -26,6 +27,8 @@ #include "hsmenuitemmodel.h" #include "hsmenucollectionsitemmodel.h" +QTM_USE_NAMESPACE + // ======== MEMBER FUNCTIONS ======== // Initialization of a static member variable. @@ -47,6 +50,7 @@ query.addEntryTypeName(applicationTypeName()); query.addEntryTypeName(urlTypeName()); query.addEntryTypeName(widgetTypeName()); + query.addEntryTypeName(templatedApplicationTypeName()); query.setFlagsOn(VisibleEntryFlag); query.setFlagsOff(MissingEntryFlag); query.setSort(HsMenuServiceUtils::sortBy(sortAttribute), @@ -168,6 +172,26 @@ } /*! + Launch task switcher + \retval boolean launching status + */ +bool HsMenuService::launchTaskSwitcher() +{ + qDebug() << "HsMenuService::launchTS"; + QScopedPointer<CaEntry> tsEntry(new CaEntry); + tsEntry->setEntryTypeName(applicationTypeName()); + tsEntry->setAttribute( + applicationUidEntryKey(), QString::number(taskSwitcherUid)); + int retval = CaService::instance()->executeCommand(*tsEntry, + openActionIdentifier()); + if(retval) { + QValueSpacePublisher publisher("/TaskSwitcher"); + publisher.setValue("Activation", taskSwitcherPropertyValue); + } + return retval; +} + +/*! Adds new collection \param name of the collection \retval entryId of new collection diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/sis/homescreenapp.pkg --- a/homescreenapp/sis/homescreenapp.pkg Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/sis/homescreenapp.pkg Fri Apr 16 14:54:01 2010 +0300 @@ -36,7 +36,7 @@ "/epoc32/data/z/private/10003a3f/import/apps/hsapplication_reg.rsc" - "c:/private/10003a3f/import/apps/hsapplication_reg.rsc" "/epoc32/data/z/resource/apps/hsapplication.rsc" - "c:/resource/apps/hsapplication.rsc" "/epoc32/data/z/resource/apps/hsapplication.mif" - "c:/resource/apps/hsapplication.mif" -"/epoc32/data/z/private/20022F35/homescreendb" - "c:/private/20022f35/homescreendb" +"/epoc32/data/z/private/20022F35/homescreen.db" - "c:/private/20022f35/homescreen.db" "/epoc32/data/z/private/20022f35/wallpapers/1_portrait.png" - "c:/private/20022f35/wallpapers/1_portrait.png" "/epoc32/data/z/private/20022f35/wallpapers/1_landscape.png" - "c:/private/20022f35/wallpapers/1_landscape.png" "/epoc32/data/z/private/20022f35/wallpapers/2_portrait.png" - "c:/private/20022f35/wallpapers/2_portrait.png" diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/sis/homescreenapp_ut_hs.pkg --- a/homescreenapp/sis/homescreenapp_ut_hs.pkg Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/sis/homescreenapp_ut_hs.pkg Fri Apr 16 14:54:01 2010 +0300 @@ -50,7 +50,7 @@ "/epoc32/data/z/resource/apps/t_hsdomainmodel.rsc" - "c:/resource/apps/t_hsdomainmodel.rsc" -"../hsdomainmodel/tsrc/t_hsdomainmodel/testdomainmodeldb" - "c:/private/20022F59/testdomainmodeldb" +"../hsdomainmodel/tsrc/t_hsdomainmodel/hsdomainmodeltest.db" - "c:/private/20022F59/hsdomainmodeltest.db" "../hsdomainmodel/tsrc/t_hsdomainmodel/d_landscape.png" - "c:/private/20022F59/d_landscape.png" "../hsdomainmodel/tsrc/t_hsdomainmodel/d_portrait.png" - "c:/private/20022F59/d_portrait.png" diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsapplibrarystateplugin/inc/hsallappsstate.h --- a/homescreenapp/stateplugins/hsapplibrarystateplugin/inc/hsallappsstate.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/inc/hsallappsstate.h Fri Apr 16 14:54:01 2010 +0300 @@ -86,6 +86,8 @@ private slots: + bool openTaskSwitcher(); + /** * Slot connected to List widget in normal mode. * diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsapplibrarystateplugin/inc/hsallcollectionsstate.h --- a/homescreenapp/stateplugins/hsapplibrarystateplugin/inc/hsallcollectionsstate.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/inc/hsallcollectionsstate.h Fri Apr 16 14:54:01 2010 +0300 @@ -91,6 +91,8 @@ private slots: + bool openTaskSwitcher(); + /** * Slot connected to List widget in normal mode. * diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsapplibrarystateplugin/inc/hscollectionstate.h --- a/homescreenapp/stateplugins/hsapplibrarystateplugin/inc/hscollectionstate.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/inc/hscollectionstate.h Fri Apr 16 14:54:01 2010 +0300 @@ -89,6 +89,8 @@ private slots: + bool openTaskSwitcher(); + /** * Slot connected to List widget. * @@ -239,6 +241,13 @@ HbAction *mSecondarySoftkeyAction; /** + * Old navigation icon. + * Not own. + */ + HbAction *mOldNavigationAction; + + + /** * Item Model for the List. * Own. */ diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsapplibrarystateplugin/inc/hsmenuview.h --- a/homescreenapp/stateplugins/hsapplibrarystateplugin/inc/hsmenuview.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/inc/hsmenuview.h Fri Apr 16 14:54:01 2010 +0300 @@ -87,6 +87,8 @@ QAbstractItemView::PositionAtTop); private: + HbAbstractItemView::ScrollHint convertScrollHint( + QAbstractItemView::ScrollHint hint); void connectItemViewsSignals(); void disconnectItemViewsSignals(); diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsallappsstate.cpp --- a/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsallappsstate.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsallappsstate.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -80,6 +80,9 @@ { HSMENUTEST_FUNC_ENTRY("HsAllAppsState::setMenuOptions"); HbMenu *const mOptions = new HbMenu(); + mOptions->addAction(hbTrId("txt_applib_opt_task_switcher"), + this, + SLOT(openTaskSwitcher())); mOptions->addAction(hbTrId("txt_applib_opt_add_to_collection"), this, SLOT(addToCollection())); @@ -188,6 +191,15 @@ qDebug("AllAppsState::stateExited()"); } +/*! + Open task switcher. + \retval true if operation is successful. + */ +bool HsAllAppsState::openTaskSwitcher() +{ + return HsMenuService::launchTaskSwitcher(); +} + // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // @@ -233,7 +245,6 @@ Handles long-item-pressed event in all apps view by showing context menu \param item the event pertains to \param position at which context menu is shown - \retval void */ void HsAllAppsState::listItemLongPressed(HbAbstractViewItem *item, const QPointF &coords) @@ -322,11 +333,16 @@ { HSMENUTEST_FUNC_ENTRY("HsAllAppsState::addToHomeScreen"); const CaEntry *entry = mAllAppsModel->entry(index); - + + QMap<QString, QString> attributes = entry->attributes(); + machine()-> postEvent(HsMenuEventFactory::createAddToHomeScreenEvent( - entry->id(), entry->entryTypeName(), entry->attribute( - widgetUriAttributeName()), entry->attribute( - widgetLibraryAttributeName()))); + entry->id(), + entry->entryTypeName(), + entry->attribute(widgetUriAttributeName()), + entry->attribute(widgetLibraryAttributeName()), + &attributes)); + HSMENUTEST_FUNC_EXIT("HsAllAppsState::addToHomeScreen"); } diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsallcollectionsstate.cpp --- a/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsallcollectionsstate.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsallcollectionsstate.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -80,6 +80,9 @@ { HSMENUTEST_FUNC_ENTRY("HsAllCollectionsState::setMenuOptions"); HbMenu *const options = new HbMenu(); + options->addAction(hbTrId("txt_applib_opt_task_switcher"), + this, + SLOT(openTaskSwitcher())); options->addAction(hbTrId("txt_applib_opt_new_collection"), this, SLOT(createNewCollection())); @@ -203,6 +206,15 @@ qDebug("AllCollectionsState::stateExited()"); } +/*! + Open task switcher. + \retval true if operation is successful. + */ +bool HsAllCollectionsState::openTaskSwitcher() +{ + return HsMenuService::launchTaskSwitcher(); +} + // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsapplibrarystate.cpp --- a/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsapplibrarystate.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsapplibrarystate.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -55,9 +55,8 @@ HbInstance::instance()->allMainWindows().value(0); if (hbW) { + mMenuView.view()->setNavigationAction(NULL); hbW->removeView(mMenuView.view()); - hbW->removeSoftKeyAction(Hb::SecondarySoftKey, - mSecondarySoftkeyAction); } } @@ -155,8 +154,8 @@ HbMainWindow *hbW = HbInstance::instance()->allMainWindows().value(0); if (!hbW->views().contains(mMenuView.view())) { hbW->addView(mMenuView.view()); - } - hbW->addSoftKeyAction(Hb::SecondarySoftKey, mSecondarySoftkeyAction); + mMenuView.view()->setNavigationAction(mSecondarySoftkeyAction); + } hbW->setCurrentView(mMenuView.view()); HSTEST_FUNC_EXIT("AppLibraryState::stateEntered"); } @@ -166,14 +165,7 @@ // void HsAppLibraryState::stateExited() { - HSTEST_FUNC_ENTRY("AppLibraryState::stateExited"); - HbMainWindow *hbW = HbInstance::instance()->allMainWindows().value(0); - - //when exiting the pointer can be NULL - if (hbW) { - hbW->removeSoftKeyAction(Hb::SecondarySoftKey, - mSecondarySoftkeyAction); - } + HSTEST_FUNC_ENTRY("AppLibraryState::stateExited"); HSTEST_FUNC_EXIT("AppLibraryState::stateExited"); } diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsapplibrarystateplugin/src/hscollectionstate.cpp --- a/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hscollectionstate.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hscollectionstate.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -122,6 +122,9 @@ if (!mOptions) { mOptions = new HbMenu(); + mOptions->addAction(hbTrId("txt_applib_opt_task_switcher"), + this, + SLOT(openTaskSwitcher())); EntryFlags flags = mCollectionModel->root().data(CaItemModel::FlagsRole).value< @@ -170,13 +173,9 @@ mOptions->setParent(this); mMenuView.view()->setMenu(mOptions); } - - HbMainWindow *hbMainWindow = - HbInstance::instance()->allMainWindows().value(0); - // add BackStepping action - - hbMainWindow->addSoftKeyAction(Hb::SecondarySoftKey, - mSecondarySoftkeyAction); + mOldNavigationAction = mMenuView.view()->navigationAction(); + mMenuView.view()->setNavigationAction(mSecondarySoftkeyAction); + makeConnect(); HSMENUTEST_FUNC_EXIT("HsCollectionState::stateEntered"); } @@ -194,12 +193,9 @@ mMenuView.view()->setMenu(NULL); mMenuView.setLabelVisible(false); - HbMainWindow *hbW = HbInstance::instance()->allMainWindows().value(0); - if (hbW) { - //remove BackStepping action - hbW->removeSoftKeyAction(Hb::SecondarySoftKey, - mSecondarySoftkeyAction); - } + // revert navigation action + mMenuView.view()->setNavigationAction(mOldNavigationAction); + HSMENUTEST_FUNC_EXIT("HsCollectionState::stateExited"); qDebug("CollectionState::stateExited()"); } @@ -236,6 +232,15 @@ this, SLOT(listItemLongPressed(HbAbstractViewItem *, QPointF))); } +/*! + Open task switcher. + \retval true if operation is successful. + */ +bool HsCollectionState::openTaskSwitcher() +{ + return HsMenuService::launchTaskSwitcher(); +} + // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // @@ -386,14 +391,16 @@ void HsCollectionState::addElementToHomeScreen(const QModelIndex &index) { const CaEntry *entry = mCollectionModel->entry(index); + + QMap<QString, QString> attributes = entry->attributes(); - machine()-> - postEvent( + machine()->postEvent( HsMenuEventFactory::createAddToHomeScreenEvent( entry->id(), entry->entryTypeName(), entry->attribute(widgetUriAttributeName()), - entry->attribute(widgetLibraryAttributeName()))); + entry->attribute(widgetLibraryAttributeName()), + &attributes)); } /*! diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsmenuview.cpp --- a/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsmenuview.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsmenuview.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -287,14 +287,33 @@ */ void HsMenuView::scrollToRow(int row, QAbstractItemView::ScrollHint hint) { - // TODO: remove hint from the interface - Q_UNUSED(hint); HSMENUTEST_FUNC_ENTRY("HsMenuView::scrollToRow"); - scrollTo(mModel->index(row), HbAbstractItemView::PositionAtTop); + scrollTo(mModel->index(row), convertScrollHint(hint)); HSMENUTEST_FUNC_EXIT("HsMenuView::scrollToRow"); } /*! + Converts scroll hints. + \param Qt hint Where the target item should be positioned in visible area + after scroll. + \return Qrbit version of hint + */ +HbAbstractItemView::ScrollHint HsMenuView::convertScrollHint( + QAbstractItemView::ScrollHint hint) +{ + switch (hint) { + case QAbstractItemView::EnsureVisible: + return HbAbstractItemView::EnsureVisible; + case QAbstractItemView::PositionAtTop: + return HbAbstractItemView::PositionAtTop; + case QAbstractItemView::PositionAtBottom: + return HbAbstractItemView::PositionAtBottom; + default: + return HbAbstractItemView::PositionAtCenter; + } +} + +/*! Connects \a activated and \a longPressed signals coming from list view to trigger corresponding signal of this object. */ diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hshomescreenstateplugin/inc/hshomescreenstatecommon.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/stateplugins/hshomescreenstateplugin/inc/hshomescreenstatecommon.h Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,23 @@ +/* +* 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 HSHOMESCREENSTATECOMMON_H +#define HSHOMESCREENSTATECOMMON_H + +#define HSBOUNDARYEFFECT 20 // amount of extra pixels in wallpaper width reserved for boundary effect + +#endif // HSHOMESCREENSTATECOMMON_H \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hshomescreenstateplugin/inc/hsidlestate.h --- a/homescreenapp/stateplugins/hshomescreenstateplugin/inc/hsidlestate.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hshomescreenstateplugin/inc/hsidlestate.h Fri Apr 16 14:54:01 2010 +0300 @@ -53,6 +53,7 @@ void event_toggleConnection(); private: + Q_DISABLE_COPY(HsIdleState) void setupStates(); qreal pageLayerXPos(int pageIndex) const; void startPageChangeAnimation(int targetPageIndex, int duration); @@ -86,6 +87,7 @@ void action_moveWidget_startWidgetDragAnimation(); void action_moveWidget_connectMouseEventHandlers(); void action_moveWidget_connectGestureTimers(); + void action_moveWidget_reparentToPage(); void action_moveWidget_startWidgetDropAnimation(); void action_moveWidget_disconnectMouseEventHandlers(); @@ -129,7 +131,7 @@ private: HbView *mView; - HbAction *mSoftKeyAction; + HbAction *mNavigationAction; HsIdleWidget *mUiWidget; QTimer mTimer; diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hshomescreenstateplugin/inc/hsidlewidget.h --- a/homescreenapp/stateplugins/hshomescreenstateplugin/inc/hsidlewidget.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hshomescreenstateplugin/inc/hsidlewidget.h Fri Apr 16 14:54:01 2010 +0300 @@ -68,6 +68,7 @@ void polishEvent(); private: + Q_DISABLE_COPY(HsIdleWidget) void loadControlLayer(); void setItemsUnfocusable(QGraphicsSceneMouseEvent *event); void setItemsFocusable(); diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hshomescreenstateplugin/inc/hsselectbackgroundstate.h --- a/homescreenapp/stateplugins/hshomescreenstateplugin/inc/hsselectbackgroundstate.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hshomescreenstateplugin/inc/hsselectbackgroundstate.h Fri Apr 16 14:54:01 2010 +0300 @@ -11,7 +11,7 @@ * * Contributors: * -* Description: SelectBackground gui state. +* Description: * */ @@ -24,10 +24,9 @@ HOMESCREEN_TEST_CLASS(HomeScreenStatePluginTest) +class QImage; class HbView; -class HsContentService; class XQAIWGetImageClient; -class QImage; class HsSelectBackgroundState : public QState { @@ -41,16 +40,18 @@ void event_waitInput(); private: + Q_DISABLE_COPY(HsSelectBackgroundState) bool saveImage(QImage &image, const QString &path, Qt::Orientation orientation); private slots: - void selectPageBackgroundAction(); - void disconnectImageFetcherAction(); - void onBackgroundImageFetched(QStringList); - void onBackgroundImageFetchFailed(int); + void action_selectWallpaper(); + void action_disconnectImageFetcher(); + + void onFetchComplete(QStringList imageStringList); + void onFetchFailed(int error); private: - XQAIWGetImageClient *mXQAIWGetImageClient; + XQAIWGetImageClient *mImageFetcher; HbView *mSourceView; HOMESCREEN_TEST_FRIEND_CLASS(HomeScreenStatePluginTest) diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hshomescreenstateplugin/src/hsidlestate.cpp --- a/homescreenapp/stateplugins/hshomescreenstateplugin/src/hsidlestate.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hshomescreenstateplugin/src/hsidlestate.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -31,17 +31,18 @@ #include "hsidlestate.h" #include "hsidlewidget.h" +#include "hsdomainmodeldatastructures.h" #include "hsscene.h" #include "hspage.h" #include "hswidgethost.h" #include "hswallpaper.h" -#include "hspagedata.h" #include "hsselectbackgroundstate.h" #include "hstrashbinwidget.h" #include "hspageindicator.h" #include "hsapptranslator.h" #include "hswidgetpositioningonorientationchange.h" #include "hsmenueventfactory.h" +#include "hshomescreenstatecommon.h" // Helper macros for connecting state entry and exit actions. #define ENTRY_ACTION(state, action) \ @@ -51,31 +52,23 @@ // Helper macros for connecting and disconnecting mouse event handlers. #define CONNECT_MOUSE_EVENT_HANDLER(signal, slot) \ - connect(mUiWidget, SIGNAL(signal(QGraphicsItem*, QGraphicsSceneMouseEvent*, bool&)), \ - SLOT(slot(QGraphicsItem*, QGraphicsSceneMouseEvent*, bool&))); + connect(mUiWidget, SIGNAL(signal(QGraphicsItem*,QGraphicsSceneMouseEvent*,bool&)), \ + SLOT(slot(QGraphicsItem*,QGraphicsSceneMouseEvent*,bool&))); #define DISCONNECT_MOUSE_EVENT_HANDLER(signal, slot) \ - disconnect(mUiWidget, SIGNAL(signal(QGraphicsItem*, QGraphicsSceneMouseEvent*, bool&)), \ - this, SLOT(slot(QGraphicsItem*, QGraphicsSceneMouseEvent*, bool&))); + disconnect(mUiWidget, SIGNAL(signal(QGraphicsItem*,QGraphicsSceneMouseEvent*,bool&)), \ + this, SLOT(slot(QGraphicsItem*,QGraphicsSceneMouseEvent*,bool&))); namespace { - const char APP_LIB_BUTTON[] = - "hs_applib_button.png"; - /*const char TXT_HOMESCREEN_TITLE_OFFLINE[] = - "txt_homescreen_title_offline";*/ - const char TXT_HOMESCREEN_OPT_ADD_PAGE[] = - "txt_homescreen_opt_add_page"; - const char TXT_HOMESCREEN_OPT_REMOVE_PAGE[] = - "txt_homescreen_opt_remove_page"; - const char TXT_HOMESCREEN_OPT_HOME_SCREEN_TO_ONLINE[] = - "txt_homescreen_opt_home_screen_to_online"; - const char TXT_HOMESCREEN_OPT_HOME_SCREEN_TO_OFFLINE[] = - "txt_homescreen_opt_home_screen_to_offline"; - const char TXT_HOMESCREEN_LIST_CHANGE_WALLPAPER[] = - "txt_homescreen_list_change_wallpaper"; - const char TXT_HOMESCREEN_LIST_ADD_CONTENT[] = - "txt_homescreen_list_add_content"; + const char gApplicationLibraryIconName[] = "qtg_mono_applications_all"; + const char gAddPageTextName[] = "txt_homescreen_opt_add_page"; + const char gRemovePageTextName[] = "txt_homescreen_opt_remove_page"; + const char gToOnlineTextName[] = "txt_homescreen_opt_home_screen_to_online"; + const char gToOfflineTextName[] = "txt_homescreen_opt_home_screen_to_offline"; + const char gChangeWallpaperTextName[] = "txt_homescreen_list_change_wallpaper"; + const char gAddContentTextName[] = "txt_homescreen_list_add_content"; + //const char gTitleOfflineTextName[] = "txt_homescreen_title_offline"; } /*! @@ -94,7 +87,7 @@ */ HsIdleState::HsIdleState(QState *parent) : QState(parent), - mView(0), mSoftKeyAction(0), mUiWidget(0), + mView(0), mNavigationAction(0), mUiWidget(0), mTapAndHoldDistance(16), mPageChangeZoneWidth(60) { @@ -268,6 +261,7 @@ ENTRY_ACTION(state_moveWidget, action_moveWidget_startWidgetDragAnimation) ENTRY_ACTION(state_moveWidget, action_moveWidget_connectMouseEventHandlers) ENTRY_ACTION(state_moveWidget, action_moveWidget_connectGestureTimers) + EXIT_ACTION(state_moveWidget, action_moveWidget_reparentToPage) EXIT_ACTION(state_moveWidget, action_moveWidget_startWidgetDropAnimation) EXIT_ACTION(state_moveWidget, action_moveWidget_disconnectMouseEventHandlers) @@ -313,7 +307,7 @@ animationGroup->addAnimation(animation); animation = new QPropertyAnimation(mUiWidget->sceneLayer(), "x"); - animation->setEndValue(parallaxFactor() * pageLayerXPos(targetPageIndex)); + animation->setEndValue((parallaxFactor() * pageLayerXPos(targetPageIndex)) - HSBOUNDARYEFFECT / 2); animation->setDuration(duration); animationGroup->addAnimation(animation); @@ -362,7 +356,7 @@ void HsIdleState::addPageToScene(int pageIndex) { HsPageData data; - data.setIndex(pageIndex); + data.indexPosition = pageIndex; HsPage *page = HsPage::createInstance(data); page->load(); HsScene::instance()->addPage(page); @@ -376,7 +370,7 @@ qreal HsIdleState::parallaxFactor() const { qreal clw = mUiWidget->controlLayer()->size().width(); - qreal slw = mUiWidget->sceneLayer()->size().width(); + qreal slw = mUiWidget->sceneLayer()->size().width() - HSBOUNDARYEFFECT; int n = HsScene::instance()->pages().count(); if (n < 2) { return 1; @@ -412,11 +406,12 @@ mUiWidget = new HsIdleWidget; mView = HsScene::mainWindow()->addView(mUiWidget); mView->setContentFullScreen(); - mView->setTitle("Home Screen"/*hbTrId(TXT_HOMESCREEN_TITLE_OFFLINE)*/); + mView->setTitle("Home Screen"/*hbTrId(gTitleOfflineTextName)*/); - mSoftKeyAction = new HbAction(this); - mSoftKeyAction->setIcon(HbIcon(APP_LIB_BUTTON)); - connect(mSoftKeyAction, SIGNAL(triggered()), SIGNAL(event_applicationLibrary())); + mNavigationAction = new HbAction(this); + mNavigationAction->setIcon(HbIcon(gApplicationLibraryIconName)); + connect(mNavigationAction, SIGNAL(triggered()), SIGNAL(event_applicationLibrary())); + mView->setNavigationAction(mNavigationAction); #ifndef Q_OS_SYMBIAN connect(HsAppTranslator::instance(), @@ -426,7 +421,6 @@ QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); } - HsScene::mainWindow()->addSoftKeyAction(Hb::SecondarySoftKey, mSoftKeyAction); HsScene::mainWindow()->setCurrentView(mView); } @@ -452,7 +446,7 @@ } page->layoutNewWidgets(); - page->resetNewWidgets(); + } /*! @@ -463,7 +457,7 @@ { qreal x = pageLayerXPos(HsScene::instance()->activePageIndex()); mUiWidget->pageLayer()->setX(x); - mUiWidget->sceneLayer()->setX(parallaxFactor() * x); + mUiWidget->sceneLayer()->setX((parallaxFactor() * x) - HSBOUNDARYEFFECT / 2); } /*! @@ -481,8 +475,6 @@ */ void HsIdleState::action_idle_cleanupView() { - HsScene::mainWindow()->removeSoftKeyAction( - Hb::SecondarySoftKey, mSoftKeyAction); } /*! @@ -500,19 +492,28 @@ */ void HsIdleState::action_waitInput_updateOptionsMenu() { + HsScene *scene = HsScene::instance(); + HbMenu *menu = new HbMenu(); - menu->addAction(hbTrId(TXT_HOMESCREEN_OPT_ADD_PAGE), - this, SIGNAL(event_addPage())); - menu->addAction(hbTrId(TXT_HOMESCREEN_OPT_REMOVE_PAGE), - this, SIGNAL(event_removePage()))->setEnabled( - HsScene::instance()->activePage()->isRemovable()); - - if (HsScene::instance()->isOnline()) { - menu->addAction(hbTrId(TXT_HOMESCREEN_OPT_HOME_SCREEN_TO_OFFLINE), + // Add page + if (scene->pages().count() < scene->maximumPageCount()) { + menu->addAction(hbTrId(gAddPageTextName), + this, SIGNAL(event_addPage())); + } + + // Remove page + if (scene->activePage()->isRemovable()) { + menu->addAction(hbTrId(gRemovePageTextName), + this, SIGNAL(event_removePage())); + } + + // Online / Offline + if (scene->isOnline()) { + menu->addAction(hbTrId(gToOfflineTextName), this, SIGNAL(event_toggleConnection())); } else { - menu->addAction(hbTrId(TXT_HOMESCREEN_OPT_HOME_SCREEN_TO_ONLINE), + menu->addAction(hbTrId(gToOnlineTextName), this, SIGNAL(event_toggleConnection())); } @@ -728,9 +729,9 @@ HbMenu menu; HbAction *changeWallpaperAction = - menu.addAction(hbTrId(TXT_HOMESCREEN_LIST_CHANGE_WALLPAPER)); + menu.addAction(hbTrId(gChangeWallpaperTextName)); HbAction *addContentAction = - menu.addAction(hbTrId(TXT_HOMESCREEN_LIST_ADD_CONTENT)); + menu.addAction(hbTrId(gAddContentTextName)); HbAction *action = menu.exec(mSceneMenuPos); if (action == changeWallpaperAction) { @@ -756,7 +757,8 @@ addPageToScene(pageIndex); scene->setActivePageIndex(pageIndex); startPageChangeAnimation(pageIndex, 700); - mUiWidget->pageIndicator()->addItem(true, true); + mUiWidget->pageIndicator()->addItem(pageIndex); + mUiWidget->showPageIndicator(); } /*! @@ -770,7 +772,6 @@ mUiWidget->removePage(pageIndex); scene->removePage(page); - page->deleteFromDatabase(); delete page; pageIndex = pageIndex == 0 ? 0 : pageIndex - 1; @@ -778,8 +779,9 @@ startPageChangeAnimation(pageIndex, 200); - mUiWidget->pageIndicator()->removeItem(); + mUiWidget->pageIndicator()->removeItem(pageIndex); mUiWidget->setActivePage(pageIndex); + mUiWidget->showPageIndicator(); } /*! @@ -843,7 +845,7 @@ } QPointF point = - event->screenPos() - event->buttonDownScreenPos(Qt::LeftButton); + event->scenePos() - event->buttonDownScenePos(Qt::LeftButton); if (mTapAndHoldDistance < point.manhattanLength()) { mTimer.stop(); mUiWidget->sendDelayedPress(); @@ -892,7 +894,7 @@ } QPointF point = - event->screenPos() - event->buttonDownScreenPos(Qt::LeftButton); + event->scenePos() - event->buttonDownScenePos(Qt::LeftButton); if (mTapAndHoldDistance < point.manhattanLength()) { mTimer.stop(); mUiWidget->clearDelayedPress(); @@ -936,7 +938,7 @@ HsWidgetHost *widget = HsScene::instance()->activeWidget(); Q_ASSERT(widget); - QPointF delta(event->screenPos() - event->lastScreenPos()); + QPointF delta(event->scenePos() - event->lastScenePos()); QRectF region = mView->rect().adjusted(10, 55, -10, -10); QPointF position = widget->geometry().center() + delta; if (!region.contains(position)) { @@ -962,7 +964,7 @@ mUiWidget->trashBin()->deactivate(); } - if (!mUiWidget->pageIndicator()->isAnimatingCurrentItemChange()) { + if (!mUiWidget->pageIndicator()->isAnimationRunning()) { mUiWidget->showTrashBin(); } } @@ -1023,14 +1025,14 @@ HsScene *scene = HsScene::instance(); qreal delta = - event->screenPos().x() - event->buttonDownScreenPos(Qt::LeftButton).x(); - - qreal x = qBound(pageLayerXPos(scene->pages().count() - 1), + event->scenePos().x() - event->buttonDownScenePos(Qt::LeftButton).x(); + + qreal x = qBound(pageLayerXPos(scene->pages().count() - 1) - HSBOUNDARYEFFECT / 2 / parallaxFactor(), pageLayerXPos(scene->activePageIndex()) + delta, - pageLayerXPos(0)); - + pageLayerXPos(0) + (HSBOUNDARYEFFECT / 2 / parallaxFactor()) - qreal(0.5)); + mUiWidget->pageLayer()->setX(x); - mUiWidget->sceneLayer()->setX(parallaxFactor() * x); + mUiWidget->sceneLayer()->setX((parallaxFactor() * x) - HSBOUNDARYEFFECT / 2); } /*! @@ -1051,10 +1053,10 @@ int pageIndex = HsScene::instance()->activePageIndex(); QPointF delta( - event->screenPos() - event->buttonDownScreenPos(Qt::LeftButton)); - if (delta.x() < -pageSize.width() / 2) { + event->scenePos() - event->buttonDownScenePos(Qt::LeftButton)); + if (delta.x() < -pageSize.width() / 3) { pageIndex = qMin(pageIndex + 1, pages.count() - 1); - } else if(pageSize.width() / 2 < delta.x()) { + } else if (pageSize.width() / 3 < delta.x()) { pageIndex = qMax(pageIndex - 1, 0); } @@ -1075,22 +1077,25 @@ QList<HsWidgetHost *> widgets; HsWidgetHost *widget = 0; + const int KChromeHeight = 64; // TODO: get this somewhere + const int KWidgetAdjust = 10; // TODO: get this somewhere + for (int i = 0; i < pages.count(); ++i) { widgets = pages[i]->widgets(); for (int j = 0; j < widgets.count(); ++j) { widget = widgets[j]; HsWidgetPresentationData presentation = widget->widgetPresentation(orientation); - if (presentation.id() < 0) { + if (presentation.widgetId < 0) { QList<QRectF> geometries = HsWidgetPositioningOnOrientationChange::instance()->convert( - pages[i]->rect().adjusted(10, 10, -10, -10), QList<QRectF>() << widget->geometry(), - QRectF(0, 0, pages[i]->rect().height() + 40, - pages[i]->rect().width() - 40).adjusted(10, 10, -10, -10)); + QRectF(0, KChromeHeight, pages[i]->rect().height(), pages[i]->rect().width()-KChromeHeight).adjusted(KWidgetAdjust, KWidgetAdjust, -KWidgetAdjust, -KWidgetAdjust), + QList<QRectF>() << widget->geometry(), + QRectF(0, KChromeHeight, pages[i]->rect().width(), pages[i]->rect().height()-KChromeHeight).adjusted(KWidgetAdjust, KWidgetAdjust, -KWidgetAdjust, -KWidgetAdjust)); widget->setGeometry(geometries.first()); widget->setWidgetPresentation(); } else { - widget->setGeometry(QRectF(presentation.position(), presentation.size())); - widget->setZValue(presentation.zValue()); + widget->setGeometry(presentation.geometry()); + widget->setZValue(presentation.zValue); } } } @@ -1138,10 +1143,12 @@ if (pageIndex == scene->pages().count()) { if (scene->pages().last()->widgets().isEmpty()) { return; - } else { + } else if (scene->pages().count() < scene->maximumPageCount()) { addPageToScene(pageIndex); mUiWidget->showPageIndicator(); - mUiWidget->pageIndicator()->addItem(true); + mUiWidget->pageIndicator()->addItem(pageIndex); + } else { + return; } } @@ -1192,7 +1199,7 @@ */ void HsIdleState::translateUi() { - mView->setTitle("Home Screen"/*hbTrId(TXT_HOMESCREEN_TITLE_OFFLINE)*/); + mView->setTitle("Home Screen"/*hbTrId(gTitleOfflineTextName)*/); action_waitInput_updateOptionsMenu(); } #ifdef COVERAGE_MEASUREMENT diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hshomescreenstateplugin/src/hsidlewidget.cpp --- a/homescreenapp/stateplugins/hshomescreenstateplugin/src/hsidlewidget.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hshomescreenstateplugin/src/hsidlewidget.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -15,12 +15,13 @@ * */ +#include <QApplication> #include <QGraphicsSceneMouseEvent> #include <QGraphicsLinearLayout> #include <QDir> #include <HbMainWindow> -#include <HbInputMethod> +#include <HbVkbHost> #include "hsidlewidget.h" #include "hsscene.h" @@ -30,13 +31,14 @@ #include "hstrashbinwidget.h" #include "hspageindicator.h" #include "hsdocumentloader.h" +#include "hshomescreenstatecommon.h" namespace { - const char CONTROL_LAYER_DOCML_FILE[] = "controllayer.docml"; - const char CONTROL_LAYER[] = "controlLayer"; - const char TRASH_BIN[] = "trashBin"; - const char PAGE_INDICATOR[] = "pageIndicator"; + const char gControlLayerDocmlName[] = "controllayer.docml"; + const char gControlLayerName[] = "controlLayer"; + const char gTrashBinName[] = "trashBin"; + const char gPageIndicatorName[] = "pageIndicator"; } /*! @@ -109,7 +111,7 @@ int n = HsScene::instance()->pages().count(); mControlLayer->resize(rect.size()); mPageLayer->resize(n * rect.width(), rect.height()); - mSceneLayer->resize(2 * rect.width(), rect.height()); + mSceneLayer->resize(2 * rect.width() + HSBOUNDARYEFFECT, rect.height()); HbWidget::setGeometry(rect); } @@ -153,7 +155,7 @@ */ void HsIdleWidget::setActivePage(int index) { - mPageIndicator->setCurrentIndex(index); + mPageIndicator->setActiveItemIndex(index); } /*! @@ -265,8 +267,7 @@ { Q_UNUSED(object) - if (HbInputMethod::activeInputMethod() && - HbInputMethod::activeInputMethod()->focusObject()) { + if (HbVkbHost::activeVkbHost()) { setFiltersChildEvents(false); return false; } @@ -338,8 +339,7 @@ HsWallpaper *wallpaper = HsScene::instance()->wallpaper(); layout->addItem(wallpaper); - mPageIndicator->setItemCount(pages.count()); - setActivePage(scene->activePageIndex()); + mPageIndicator->initialize(pages.count(), scene->activePageIndex()); showPageIndicator(); HsScene::mainWindow()->scene()->installEventFilter(this); @@ -359,8 +359,8 @@ QString path = "c:"; #endif - QString file = path + "/hsresources/" + CONTROL_LAYER_DOCML_FILE; - QString fallbackPath = QString(":/") + CONTROL_LAYER_DOCML_FILE; + QString file = path + "/hsresources/" + gControlLayerDocmlName; + QString fallbackPath = QString(":/") + gControlLayerDocmlName; if (QFile::exists(file)) { loader.load(file, &loaded); @@ -372,14 +372,14 @@ } if (loaded) { - mControlLayer = qobject_cast<HbWidget *>(loader.findWidget(CONTROL_LAYER)); + mControlLayer = qobject_cast<HbWidget *>(loader.findWidget(gControlLayerName)); mControlLayer->setZValue(2); mControlLayer->setParentItem(this); - mTrashBin = qobject_cast<HsTrashBinWidget *>(loader.findWidget(TRASH_BIN)); + mTrashBin = qobject_cast<HsTrashBinWidget *>(loader.findWidget(gTrashBinName)); mTrashBin->setZValue(1e6); - mPageIndicator = qobject_cast<HsPageIndicator *>(loader.findWidget(PAGE_INDICATOR)); + mPageIndicator = qobject_cast<HsPageIndicator *>(loader.findWidget(gPageIndicatorName)); mPageIndicator->setZValue(1e6); } else { // TODO: Handle error. @@ -393,18 +393,33 @@ void HsIdleWidget::setItemsUnfocusable(QGraphicsSceneMouseEvent *event) { mFocusableItems.clear(); - QList<QGraphicsItem *> items = - HsScene::mainWindow()->scene()->items(event->scenePos()); + + if (!scene()) { + return; + } + + QList<QGraphicsItem *> items = scene()->items(event->scenePos()); + if (items.isEmpty()) { + return; + } + int i = 0; - while (!mPageLayer->isAncestorOf(items[i++])) {} + for (; i < items.count(); ++i) { + if (mPageLayer->isAncestorOf(items[i])) { + ++i; + break; + } + } + HsPage *page = HsScene::instance()->activePage(); QList<HsWidgetHost *> widgets = page->widgets(); + for (; i < items.count(); ++i) { QGraphicsItem *item = items.at(i); if (page->isAncestorOf(item)) { foreach (HsWidgetHost *widget, widgets) { if ((item == widget || widget->isAncestorOf(item))&& item->isEnabled() && (item->flags() & QGraphicsItem::ItemIsFocusable)) { - if (!item->isWidget() || static_cast<QGraphicsWidget*>(item)->focusPolicy() & Qt::ClickFocus) { + if (!item->isWidget() || static_cast<QGraphicsWidget *>(item)->focusPolicy() & Qt::ClickFocus) { item->setFlag(QGraphicsItem::ItemIsFocusable, false); mFocusableItems.append(item); } diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hshomescreenstateplugin/src/hsselectbackgroundstate.cpp --- a/homescreenapp/stateplugins/hshomescreenstateplugin/src/hsselectbackgroundstate.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hshomescreenstateplugin/src/hsselectbackgroundstate.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -23,9 +23,10 @@ #include "hsselectbackgroundstate.h" #include "hsscene.h" -#include "hsscenedata.h" +#include "hsdomainmodeldatastructures.h" #include "hswallpaper.h" #include "hsdatabase.h" +#include "hshomescreenstatecommon.h" #include "xqaiwgetimageclient.h" #include "xqaiwcommon.h" @@ -44,12 +45,12 @@ */ HsSelectBackgroundState::HsSelectBackgroundState(QState *parent): QState(parent), - mXQAIWGetImageClient(0), + mImageFetcher(0), mSourceView(0) { - mXQAIWGetImageClient = new XQAIWGetImageClient; - connect(this, SIGNAL(entered()), SLOT(selectPageBackgroundAction())); - connect(this, SIGNAL(exited()), SLOT(disconnectImageFetcherAction())); + mImageFetcher = new XQAIWGetImageClient; + connect(this, SIGNAL(entered()), SLOT(action_selectWallpaper())); + connect(this, SIGNAL(exited()), SLOT(action_disconnectImageFetcher())); } /*! @@ -58,7 +59,7 @@ */ HsSelectBackgroundState::~HsSelectBackgroundState() { - delete mXQAIWGetImageClient; + delete mImageFetcher; } /*! @@ -70,9 +71,9 @@ { QRect rect; if (orientation == Qt::Vertical) { - rect.setRect(0, 0, 2 * 360, 640); + rect.setRect(0, 0, (2* 360) + HSBOUNDARYEFFECT, 640); } else { - rect.setRect(0, 0, 2 * 640, 360); + rect.setRect(0, 0, (2 * 640) + HSBOUNDARYEFFECT, 360); } if (image.rect().contains(rect)) { @@ -90,17 +91,16 @@ Connects to image fetcher and launches "remote" ui from photos from which user can select background image */ -void HsSelectBackgroundState::selectPageBackgroundAction() +void HsSelectBackgroundState::action_selectWallpaper() { mSourceView = HsScene::mainWindow()->currentView(); - connect(mXQAIWGetImageClient, SIGNAL(fetchComplete(QStringList)), - SLOT(onBackgroundImageFetched(QStringList))); - connect(mXQAIWGetImageClient, SIGNAL(fetchFailed(int)), - SLOT(onBackgroundImageFetchFailed(int))); + connect(mImageFetcher, SIGNAL(fetchComplete(QStringList)), + SLOT(onFetchComplete(QStringList))); + connect(mImageFetcher, SIGNAL(fetchFailed(int)), + SLOT(onFetchFailed(int))); - QVariantMap filter; - mXQAIWGetImageClient->fetch(filter, SelectionSingle); + mImageFetcher->fetch(QVariantMap(), SelectionSingle); } /*! @@ -108,17 +108,17 @@ disconnects photos image fetcher services slots. */ -void HsSelectBackgroundState::disconnectImageFetcherAction() +void HsSelectBackgroundState::action_disconnectImageFetcher() { HsScene::mainWindow()->setCurrentView(mSourceView); - mXQAIWGetImageClient->disconnect(this); + mImageFetcher->disconnect(this); } /*! \internal Called when user has selected an image */ -void HsSelectBackgroundState::onBackgroundImageFetched(QStringList imageStringList) +void HsSelectBackgroundState::onFetchComplete(QStringList imageStringList) { HsScene *scene = HsScene::instance(); @@ -137,8 +137,8 @@ fileExtension = fileInfo.suffix(); } - QFile::remove(sceneData.portraitWallpaper()); - QFile::remove(sceneData.landscapeWallpaper()); + QFile::remove(sceneData.portraitWallpaper); + QFile::remove(sceneData.landscapeWallpaper); QString wallpaperDir = HsWallpaper::wallpaperDirectory(); QDir dir(wallpaperDir); @@ -155,8 +155,8 @@ if (saveImage(image, portraitPath, Qt::Vertical) && saveImage(image, landscapePath, Qt::Horizontal)) { - sceneData.setPortraitWallpaper(portraitPath); - sceneData.setLandscapeWallpaper(landscapePath); + sceneData.portraitWallpaper = portraitPath; + sceneData.landscapeWallpaper = landscapePath; if (db->updateScene(sceneData)) { scene->wallpaper()->setImagesById(QString(), fileInfo.suffix()); } @@ -169,7 +169,7 @@ \internal Called when selection of background image fails */ -void HsSelectBackgroundState::onBackgroundImageFetchFailed(int error) +void HsSelectBackgroundState::onFetchFailed(int error) { Q_UNUSED(error) emit event_waitInput(); diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsmenuworkerstateplugin/hsmenuworkerstateplugin.qrc --- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/hsmenuworkerstateplugin.qrc Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/hsmenuworkerstateplugin.qrc Fri Apr 16 14:54:01 2010 +0300 @@ -1,5 +1,7 @@ <RCC> <qresource prefix="/xml" > - <file alias="hsmenuworkerstateplugin.docml">resource/hsmenuworkerstateplugin.docml</file> + <file alias="hsappchecklist.docml">resource/hsappchecklist.docml</file> + <file alias="hswidgetpreviewdialog.docml">resource/hswidgetpreviewdialog.docml</file> + <file alias="hsarrangedialog.docml">resource/hsarrangedialog.docml</file> </qresource> </RCC> diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsmenuworkerstateplugin/inc/hsaddtohomescreenstate.h --- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/inc/hsaddtohomescreenstate.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/inc/hsaddtohomescreenstate.h Fri Apr 16 14:54:01 2010 +0300 @@ -73,11 +73,14 @@ void showMessageWidgetCorrupted(int itemId); - void addWidget(HsContentService &service, const QString &library, - const QString &uri, int entryId); + void addWidget(HsContentService &service, const QString &uri, + int entryId); void addShortcut(HsContentService &contentService, int entryId); + void addTApplication(HsContentService &contentService, int entryId, + QVariantMap &data); + void logActionResult(QString operationName, int entryId, bool operationSucceded); diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsmenuworkerstateplugin/inc/hsappschecklist.h --- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/inc/hsappschecklist.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/inc/hsappschecklist.h Fri Apr 16 14:54:01 2010 +0300 @@ -95,7 +95,12 @@ HbView *mView; /** - * Action back. Owned. + * Previous view. Not owned. + */ + HbView *mPreviousView; + + /** + * Confirm action. Owned. */ HbAction *mActionConfirm; @@ -115,6 +120,11 @@ */ HsSortAttribute mSortAttribute; + /** + * List of objects loaded by document loader. Content owned. + */ + QObjectList mLoadedObjects; + }; #endif /* APPSCHECKLIST_H */ diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsmenuworkerstateplugin/inc/hsarrangestate.h --- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/inc/hsarrangestate.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/inc/hsarrangestate.h Fri Apr 16 14:54:01 2010 +0300 @@ -81,22 +81,11 @@ */ void construct(); - /* - * Fulfills collection list. - */ - void fulfillEntriesList(); + void fulfillEntriesList(HbListWidget& listWidget); - /** - * Appends new order of items to ids list. - */ - void getArrangedEntriesIds(); + void getArrangedEntriesIds(const HbListWidget& listWidget); - /** - * Saves data in content arsenal(selected applications in collection). - * - * @since S60 ?S60_version. - */ - void save(); + void save(const HbListWidget& listWidget); private: @@ -134,6 +123,8 @@ * Collection list. */ QList<int> mArrangedCollIdList; + + QObjectList mObjectList; }; diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsmenuworkerstateplugin/inc/hsmenustates_global.h --- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/inc/hsmenustates_global.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/inc/hsmenustates_global.h Fri Apr 16 14:54:01 2010 +0300 @@ -33,9 +33,17 @@ #define HS_STATES_TEST_FRIEND_CLASS(className) friend class className; #endif -static const char *const HS_MENU_WORKER_STATE_PROVIDER_LAYOUT = - ":/xml/hsmenuworkerstateplugin.docml"; +static const char *const HS_APP_CHECK_LIST_LAYOUT = + ":/xml/hsappchecklist.docml"; +static const char *const HS_WIDGET_PREVIEW_DIALOG_LAYOUT = + ":/xml/hswidgetpreviewdialog.docml"; +static const char *const HS_WIDGET_PREVIEW_DIALOG_NAME="preview_dialog"; +static const char *const HS_WIDGET_PREVIEW_SCROLL_AREA_NAME="preview_scroll_area"; +static const char *const HS_ARRANGE_DIALOG_LAYOUT = + ":/xml/hsarrangedialog.docml"; +static const char *const HS_ARRANGE_DIALOG_NAME="arrange_dialog"; +static const char *const HS_ARRANGE_LIST_NAME="arrange_list"; /*! To enable logging of function entry and exit use the following flag for qmake: -config nft diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsmenuworkerstateplugin/inc/hspreviewhswidgetstate.h --- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/inc/hspreviewhswidgetstate.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/inc/hspreviewhswidgetstate.h Fri Apr 16 14:54:01 2010 +0300 @@ -101,10 +101,12 @@ void subscribeForMemoryCardRemove(int entryId); private: - + HbDialog *mPopupDialog; CaNotifier *mNotifier; + + QObjectList mObjectList; }; diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsaddtohomescreenstate.cpp --- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsaddtohomescreenstate.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsaddtohomescreenstate.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -31,6 +31,7 @@ const char SHORTCUT_WIDGET_URI[] = "hsshortcutwidgetplugin"; const char SHORTCUT_ID[] = "mcsId"; +const char ADD_TO_HOMESCREEN_STATE[] = "AddToHomeScreenState"; /*! \class HsAddToHomeScreenState @@ -46,7 +47,7 @@ \retval void */ HsAddToHomeScreenState::HsAddToHomeScreenState(QState *parent) : - HsMenuBaseState("AddToHomeScreenState", parent) + HsMenuBaseState(ADD_TO_HOMESCREEN_STATE, parent) { requestServices(QList<QVariant> () << SHORTCUT_SERVICE_KEY << CONTENT_SERVICE_KEY); @@ -82,16 +83,16 @@ const int entryId = data.value(itemIdKey()).toInt(); if (entryTypeName == widgetTypeName()) { - const QString library = - data.value(widgetLibraryAttributeName()).toString(); - const QString uri = data.value(widgetUriAttributeName()).toString(); - - addWidget(*contentService(), library, uri, entryId); + addWidget(*contentService(), uri, entryId); + HsMenuService::touch(entryId); + } else if (entryTypeName==templatedApplicationTypeName()) { + addTApplication(*contentService(), entryId, data); HsMenuService::touch(entryId); } else { addShortcut(*contentService(), entryId); } + HSMENUTEST_FUNC_EXIT("HsAddToHomeScreenState::onEntry"); } @@ -104,13 +105,12 @@ \param activePage: active page of home screen \retval void */ -void HsAddToHomeScreenState::addWidget(HsContentService &contentService, - const QString &library, const QString &uri, int entryId) +void HsAddToHomeScreenState::addWidget(HsContentService &contentService, + const QString &uri, int entryId) { HSMENUTEST_FUNC_ENTRY("HsAddToHomeScreenState::addWidget"); - QVariantMap params; - params["library"] = library; - params["uri"] = uri; + QVariantHash params; + params[URI] = uri; bool ok = contentService.createWidget(params); if (!ok) { showMessageWidgetCorrupted(entryId); @@ -170,12 +170,12 @@ } } if (!mLibraryPath.isEmpty()) { - QVariantMap params; - params["library"] = mLibraryPath; - params["uri"] = SHORTCUT_WIDGET_URI; - QVariantMap preferences; + QVariantHash params; + params[LIBRARY] = mLibraryPath; + params[URI] = SHORTCUT_WIDGET_URI; + QVariantHash preferences; preferences[SHORTCUT_ID] = QString::number(entryId); - params["preferences"] = preferences; + params[PREFERENCES] = preferences; const bool result = contentService.createWidget(params); logActionResult("Adding shortcut", entryId, result); } @@ -183,6 +183,44 @@ } /*! + Adds a tapplication to active page of home screen + \param shortcutService: service for adding shortcuts + \param entryId: menu entry id + \param data: data from event + \retval void + */ +void HsAddToHomeScreenState::addTApplication(HsContentService &contentService, + int entryId, QVariantMap &data) +{ + CaEntry* entry = CaService::instance()->getEntry(entryId); + + + if (entry->attributes().contains(widgetUriAttributeName())) { + QVariantHash params; + const QString uri = entry->attribute(widgetUriAttributeName()); + params[URI] = uri; + + QVariantHash preferences; + QVariantMap widgetParams = data.value(widgetParam()).toMap(); + QMapIterator<QString, QVariant> i(widgetParams); + while (i.hasNext()) { + i.next(); + QString key(i.key()); + QString value = i.value().toString(); + preferences.insert(key.remove(widgetParam()), value); + } + params[PREFERENCES] = preferences; + + bool ok = contentService.createWidget(params); + if (!ok) { + addShortcut(contentService, entryId); + } + } else { + addShortcut(contentService, entryId); + } +} + +/*! Provides debug logging of add widget/shortcut action \param operation name: results of which operation is logged \param entryId: menu entry id that was added to home screen diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsappschecklist.cpp --- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsappschecklist.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsappschecklist.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -44,8 +44,8 @@ \retval void */ HsAppsCheckList::HsAppsCheckList() : - mView(0), mActionConfirm(0), mListView(0), mModel(0), mSortAttribute( - AscendingNameHsSortAttribute) + mView(0), mPreviousView(0), mActionConfirm(0), mListView(0), mModel(0), + mSortAttribute(AscendingNameHsSortAttribute) { } @@ -64,12 +64,14 @@ void HsAppsCheckList::cleanUp() { //clean up - delete mListView; + + qDeleteAll(mLoadedObjects); + mLoadedObjects.clear(); mListView = NULL; + mView = NULL; + delete mActionConfirm; mActionConfirm = NULL; - delete mView; - mView = NULL; delete mModel; mModel = NULL; mSortAttribute = AscendingNameHsSortAttribute; @@ -104,15 +106,13 @@ // Add mListView to main window HbMainWindow *hbMainWindow = mainWindow(); - // add action done - hbMainWindow->addSoftKeyAction(Hb::SecondarySoftKey, mActionConfirm); + // add confirm action + mView->setNavigationAction(mActionConfirm); - // We need to add the above created view into main window. - // We also need to hide the navi pane and turn off switching views. - hbMainWindow->setViewSwitchingEnabled(false); - hbMainWindow->hideItems(Hb::NaviPaneItem); hbMainWindow->addView(mView); - hbMainWindow->setCurrentViewIndex(hbMainWindow->viewCount() - 1); + // record the current view in order to activate it once done + mPreviousView = hbMainWindow->currentView(); + hbMainWindow->setCurrentView(mView); hbMainWindow->show(); HSMENUTEST_FUNC_EXIT("HsAppsCheckList::showAppsCheckboxList"); } @@ -126,32 +126,27 @@ { HSMENUTEST_FUNC_ENTRY("HsAppsCheckList::constructControls"); if (!mActionConfirm) { - mActionConfirm = new HbAction(Hb::ConfirmAction, mView); + mActionConfirm = new HbAction(Hb::ConfirmNaviAction, mView); connect(mActionConfirm, SIGNAL(triggered()),SLOT(selectApplicationsDone())); } if (!mView) { // it implies that mListView is NULL as well - bool loadStatusOk = false; HbDocumentLoader loader; - loader.load(HS_MENU_WORKER_STATE_PROVIDER_LAYOUT, &loadStatusOk); + mLoadedObjects = loader.load(HS_APP_CHECK_LIST_LAYOUT, &loadStatusOk); Q_ASSERT_X(loadStatusOk, - HS_MENU_WORKER_STATE_PROVIDER_LAYOUT, + HS_APP_CHECK_LIST_LAYOUT, "Error while loading docml file."); static const QString VIEW_WIDGET_NAME("view"); - mView - = qobject_cast<HbView *> (loader.findWidget(VIEW_WIDGET_NAME)); + mView = qobject_cast<HbView *> (loader.findWidget(VIEW_WIDGET_NAME)); + mView->setParent(this); - mView->setParent(this); - // TODO: configure via docml - mView->setTitle(hbTrId("txt_applib_title_select_applications")); static const QString LIST_VIEW_WIDGET_NAME("listView"); mListView = qobject_cast<HbListView *> (loader.findWidget( LIST_VIEW_WIDGET_NAME)); - mListView->setModel(mModel); } HSMENUTEST_FUNC_EXIT("HsAppsCheckList::constructControls"); @@ -168,12 +163,9 @@ HSMENUTEST_FUNC_ENTRY("HsAppsCheckList::selectApplicationsDone"); // Remove mListView from main window and restore previous view. HbMainWindow *hbMainWindow = mainWindow(); + hbMainWindow->setCurrentView(mPreviousView); hbMainWindow->removeView(mView); - hbMainWindow->setCurrentViewIndex(hbMainWindow->viewCount()-1); - hbMainWindow->showItems(Hb::NaviPaneItem); - hbMainWindow->setViewSwitchingEnabled(true); - hbMainWindow->removeSoftKeyAction(Hb::SecondarySoftKey, mActionConfirm); - + QItemSelectionModel *itemSelectionModel = mListView->selectionModel(); QList<int> itemsList; if (itemSelectionModel) { diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsarrangestate.cpp --- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsarrangestate.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsarrangestate.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -18,6 +18,7 @@ #include <QDebug> #include <hblistwidget.h> #include <hbdialog.h> +#include <HbDocumentLoader> #include <hblabel.h> #include <hbaction.h> #include <hsmenuservice.h> @@ -52,9 +53,6 @@ */ HsArrangeState::~HsArrangeState() { - if (mEntriesList) { - delete mEntriesList; - } if (mDialog) { delete mDialog; } @@ -74,15 +72,16 @@ HSMENUTEST_FUNC_EXIT("HsArrangeState::construct"); } -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -void HsArrangeState::save() +/*! + Send data to storage (selected applications in collection). + \param listWidget List of items to be stored. + */ +void HsArrangeState::save(const HbListWidget& listWidget) { qDebug("HsArrangeState::save()"); HSMENUTEST_FUNC_ENTRY("HsArrangeState::save"); - getArrangedEntriesIds(); + getArrangedEntriesIds(listWidget); if (mArrangedCollIdList.count() == mCollIdList.count()) { for (int i(0); i < mArrangedCollIdList.count(); i++) { if (mArrangedCollIdList.at(i) != mCollIdList.at(i)) { @@ -112,37 +111,45 @@ mTopItemId = data.value(itemIdKey()).toInt(); - mItemModel = HsMenuService::getAllCollectionsModel(); - - mEntriesList = new HbListWidget(); - fulfillEntriesList(); + HbDocumentLoader loader; + bool loadStatusOk = false; + mObjectList = + loader.load(HS_ARRANGE_DIALOG_LAYOUT, &loadStatusOk); + Q_ASSERT_X(loadStatusOk, + HS_ARRANGE_DIALOG_LAYOUT, + "Error while loading docml file."); + + mEntriesList = qobject_cast<HbListWidget*>( + loader.findWidget(HS_ARRANGE_LIST_NAME)); + + mDialog = qobject_cast<HbDialog*>( + loader.findWidget(HS_ARRANGE_DIALOG_NAME)); - mEntriesList->scrollTo(mTopModelIndex, - HbAbstractItemView::PositionAtTop); - mEntriesList->setArrangeMode(true); - - mDialog = new HbDialog(); - mDialog->setDismissPolicy(HbPopup::NoDismiss); - mDialog->setTimeout(HbPopup::NoTimeout); - - mDialog->setPreferredSize( - HbInstance::instance()->allMainWindows().at(0)->size()); + + if (mEntriesList != NULL && mDialog != NULL) { - HbLabel *label = new HbLabel(hbTrId("txt_applib_title_arrange")); - mDialog->setHeadingWidget(label); - mDialog->setContentWidget(mEntriesList); - - mDialog->setPrimaryAction(new HbAction(hbTrId("txt_common_button_ok"), - mDialog)); - - HbAction *result = mDialog->exec(); - mEntriesList->setArrangeMode(false); - if (result == mDialog->primaryAction()) { - save(); - } - delete result; - result = NULL; - + mItemModel = HsMenuService::getAllCollectionsModel(); + + fulfillEntriesList(*mEntriesList); + + mEntriesList->scrollTo(mTopModelIndex, + HbAbstractItemView::PositionAtTop); + + mEntriesList->setArrangeMode(true); + + mDialog->setTimeout(HbPopup::NoTimeout); + + mDialog->setPreferredSize( + HbInstance::instance()->allMainWindows().at(0)->size()); + + HbAction const* action(mDialog->exec()); + + mEntriesList->setArrangeMode(false); + + if (action == mDialog->primaryAction()) { + save(*mEntriesList); + } + } HSMENUTEST_FUNC_EXIT("HsArrangeState::onEntry"); } #ifdef COVERAGE_MEASUREMENT @@ -155,10 +162,10 @@ { HSMENUTEST_FUNC_ENTRY("HsArrangeState::stateExited"); - mDialog->setHeadingWidget(0); //delete label - mDialog->setContentWidget(0); //delete mEntriesList + qDeleteAll(mObjectList); + mObjectList.clear(); + mEntriesList = NULL; - delete mDialog; mDialog = NULL; delete mItemModel; mItemModel = NULL; @@ -170,10 +177,12 @@ qDebug("HsArrangeState::stateExited()"); } -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -void HsArrangeState::fulfillEntriesList() + +/*! + Put items from model into arrangable list of items represented by \a listWidget + \param listWidget Object to be filled with list of items from model. + */ +void HsArrangeState::fulfillEntriesList(HbListWidget& listWidget) { qDebug() << "HsArrangeState::fulfillEntriesList"; @@ -190,22 +199,24 @@ widgetItem->setData(mItemModel->data(idx, Qt::DecorationRole), Qt::DecorationRole); - mEntriesList->addItem(widgetItem); + listWidget.addItem(widgetItem); if (mTopItemId == itemId) { - mEntriesList->indexCount(); - mEntriesList->setCurrentItem(widgetItem); - mTopModelIndex = mEntriesList->currentIndex(); + listWidget.indexCount(); + listWidget.setCurrentItem(widgetItem); + mTopModelIndex = listWidget.currentIndex(); } } } -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -void HsArrangeState::getArrangedEntriesIds() + +/*! + Copy items in from \a listWidget to arranged collection id list + \param listWidget List of items in the requested order. + */ +void HsArrangeState::getArrangedEntriesIds(const HbListWidget& listWidget) { - for (int i(0); i < mEntriesList->count(); i++) { - HbListWidgetItem *widgetItem = mEntriesList->item(i); + for (int i(0); i < listWidget.count(); ++i) { + HbListWidgetItem *widgetItem = listWidget.item(i); QVariant entryId = widgetItem->data(CaItemModel::IdRole); mArrangedCollIdList.append(entryId.toInt()); } diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hscollectionnamedialog.cpp --- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hscollectionnamedialog.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hscollectionnamedialog.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -133,8 +133,8 @@ // void HsCollectionNameDialog::makeConnect() { - /*connect(lineEdit(), SIGNAL(textChanged(const QString &text)), - SLOT(onTextChanged(const QString &text)));*/ + /*connect(lineEdit(), SIGNAL(textChanged(QString&text)), + SLOT(onTextChanged(QString&text)));*/ connect(lineEdit(), SIGNAL(contentsChanged()), SLOT(onContentsChanged())); @@ -145,8 +145,8 @@ // void HsCollectionNameDialog::makeDisconnect() { - /*disconnect(lineEdit(), SIGNAL(textChanged(const QString &text)), - this, SLOT(onTextChanged(const QString &text)));*/ + /*disconnect(lineEdit(), SIGNAL(textChanged(QString&text)), + this, SLOT(onTextChanged(QString&text)));*/ disconnect(lineEdit(), SIGNAL(contentsChanged()), this, SLOT(onContentsChanged())); } diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hspreviewhswidgetstate.cpp --- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hspreviewhswidgetstate.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hspreviewhswidgetstate.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -21,14 +21,15 @@ #include <hbmessagebox.h> #include <qstatemachine.h> #include <hbaction.h> +#include <HbDocumentLoader> #include <hbdialog.h> #include <hbwidget.h> #include <hbscrollarea.h> #include <hbscrollbar.h> +#include <QtAlgorithms> #include "hsmenueventfactory.h" #include "hsmenuservice.h" -#include "hswidgetdata.h" #include "hswidgethost.h" #include "hspreviewhswidgetstate.h" #include "hsmenuevent.h" @@ -43,13 +44,16 @@ #include "hsdomainmodel_global.h" #include <hscontentservice.h> + +const char HS_PREVIEW_HS_WIDGET_STATE[] = "HsPreviewHSWidgetState"; + /*! Constructor \param parent: parent state \retval void */ HsPreviewHSWidgetState::HsPreviewHSWidgetState(QState *parent) : - HsMenuBaseState("HsPreviewHSWidgetState", parent), + HsMenuBaseState(HS_PREVIEW_HS_WIDGET_STATE, parent), mPopupDialog(0), mNotifier(0) { @@ -65,9 +69,6 @@ if (mNotifier) { delete mNotifier; } - if (mPopupDialog) { - delete mPopupDialog; - } } /*! @@ -94,65 +95,60 @@ const int entryId = data.value(itemIdKey()).toInt(); - QVariantMap widgetData; - widgetData.insert("library", data.value(widgetLibraryAttributeName()).toString()); - widgetData.insert("uri", data.value(widgetUriAttributeName()).toString()); - HsWidgetHost *widget = contentService()->createWidgetForPreview(widgetData); + QVariantHash widgetData; + widgetData.insert(LIBRARY, data.value(widgetLibraryAttributeName()).toString()); + widgetData.insert(URI, data.value(widgetUriAttributeName()).toString()); + QScopedPointer<HsWidgetHost> widget( + contentService()->createWidgetForPreview(widgetData)); if (widget) { widget->setMinimumSize(widget->preferredWidth(),widget->preferredHeight()); - HbScrollArea *scrollArea = new HbScrollArea(); - scrollArea->setClampingStyle(HbScrollArea::StrictClamping); - scrollArea->setScrollingStyle(HbScrollArea::Pan); - scrollArea->setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded); - scrollArea->setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAutoHide);// - scrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded); - scrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAutoHide);// - scrollArea->verticalScrollBar()->setInteractive(true); - scrollArea->horizontalScrollBar()->setInteractive(true); - // this sets up the scroll area to scroll in both directions - scrollArea->setScrollDirections(Qt::Vertical | Qt::Horizontal); - scrollArea->setContentWidget(widget); //ownership transferred - scrollArea->setAlignment(Qt::AlignCenter); + + HbDocumentLoader loader; - // Instantiate a popup - mPopupDialog = new HbDialog(); - - // Set dismiss policy that determines what tap events will cause the dialog - // to be dismissed - mPopupDialog->setDismissPolicy(HbDialog::NoDismiss); - mPopupDialog->setTimeout(HbDialog::NoTimeout); - - // Set content widget - mPopupDialog->setContentWidget(scrollArea); //ownership transferred + bool loadStatusOk = false; + mObjectList = + loader.load(HS_WIDGET_PREVIEW_DIALOG_LAYOUT, &loadStatusOk); + Q_ASSERT_X(loadStatusOk, + HS_WIDGET_PREVIEW_DIALOG_LAYOUT, + "Error while loading docml file."); - // Sets the primary action and secondary action - mPopupDialog->setPrimaryAction(new HbAction(hbTrId("txt_applib_button_add_to_homescreen"),mPopupDialog)); - mPopupDialog->setSecondaryAction(new HbAction(hbTrId("txt_common_button_close"),mPopupDialog)); - - subscribeForMemoryCardRemove(entryId); - widget->initializeWidget(); - widget->showWidget(); - // Launch popup syncronously - HbAction *result = mPopupDialog->exec(); - - disconnect(mNotifier, - SIGNAL(entryChanged(const CaEntry &, ChangeType)), - this, SLOT(memoryCardRemoved())); - - if (result == mPopupDialog->primaryAction()) { - // take it back from scrollarea + mPopupDialog = + qobject_cast<HbDialog*>( + loader.findWidget(HS_WIDGET_PREVIEW_DIALOG_NAME)); + + HbScrollArea *const scrollArea( + qobject_cast<HbScrollArea*>( + loader.findWidget(HS_WIDGET_PREVIEW_SCROLL_AREA_NAME))); + + if (mPopupDialog != NULL && scrollArea != NULL) { + mPopupDialog->setContentWidget(scrollArea); //ownership transferred + mPopupDialog->setTimeout(HbPopup::NoTimeout); + scrollArea->verticalScrollBar()->setInteractive(true); + scrollArea->horizontalScrollBar()->setInteractive(true); + scrollArea->setContentWidget(widget.data()); scrollArea->takeContentWidget(); - widget->hideWidget(); - widget->uninitializeWidget(); - HsScene::instance()->activePage()->addNewWidget(widget); - } else { - widget->deleteFromDatabase(); + + subscribeForMemoryCardRemove(entryId); + widget->initializeWidget(); + widget->showWidget(); + // Launch popup syncronously + const HbAction *const action(mPopupDialog->exec()); + + disconnect(mNotifier, + SIGNAL(entryChanged(CaEntry,ChangeType)), + this, SLOT(memoryCardRemoved())); + + if (action == mPopupDialog->primaryAction()) { + widget->hideWidget(); + HsScene::instance()->activePage()->addNewWidget( + widget.take()); // ownership transferred + } else { + widget->uninitializeWidget(); + widget->deleteFromDatabase(); + } } - delete result; - result = NULL; - } else { showMessageWidgetCorrupted(entryId); } @@ -171,15 +167,14 @@ { HSMENUTEST_FUNC_ENTRY("HsPreviewHSWidgetState::stateExited"); - if (mNotifier) { - delete mNotifier; - mNotifier = NULL; - } + + delete mNotifier; + mNotifier = NULL; - if (mPopupDialog) { - delete mPopupDialog; - mPopupDialog = NULL; - } + qDeleteAll(mObjectList); + mObjectList.clear(); + + mPopupDialog = NULL; HSMENUTEST_FUNC_EXIT("HsPreviewHSWidgetState::stateExited"); qDebug("HsPreviewHSWidgetState::stateExited()"); @@ -210,7 +205,7 @@ mNotifier = CaService::instance()->createNotifier(filter); mNotifier->setParent(this); connect(mNotifier, - SIGNAL(entryChanged(const CaEntry &, ChangeType)), + SIGNAL(entryChanged(CaEntry,ChangeType)), SLOT(memoryCardRemoved())); } diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/widgetplugins/hsclockwidgetplugin/resource/hsclockwidgetplugin.s60xml --- a/homescreenapp/widgetplugins/hsclockwidgetplugin/resource/hsclockwidgetplugin.s60xml Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/widgetplugins/hsclockwidgetplugin/resource/hsclockwidgetplugin.s60xml Fri Apr 16 14:54:01 2010 +0300 @@ -4,7 +4,7 @@ <filepath>z:/private/20022F35/import/widgetregistry/20022F6C/hsclockwidgetplugin.qtplugin</filepath> <description>Themable clock widget.</description> <interface> - <name>com.nokia.IHomeScreenWidget</name> + <name>com.nokia.symbian.IHomeScreenWidget</name> <version>1.0</version> <description>The clock widget displays current time.</description> <capabilities></capabilities> diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/widgetplugins/hsclockwidgetplugin/resource/hsclockwidgetplugin.xml --- a/homescreenapp/widgetplugins/hsclockwidgetplugin/resource/hsclockwidgetplugin.xml Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/widgetplugins/hsclockwidgetplugin/resource/hsclockwidgetplugin.xml Fri Apr 16 14:54:01 2010 +0300 @@ -4,7 +4,7 @@ <filepath>hsclockwidgetplugin</filepath> <description>Themable clock widget.</description> <interface> - <name>com.nokia.IHomeScreenWidget</name> + <name>com.nokia.symbian.IHomeScreenWidget</name> <version>1.0</version> <description>The clock widget displays current time.</description> <capabilities></capabilities> diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/widgetplugins/hsclockwidgetplugin/src/hsclockwidget.cpp --- a/homescreenapp/widgetplugins/hsclockwidgetplugin/src/hsclockwidget.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/widgetplugins/hsclockwidgetplugin/src/hsclockwidget.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -114,8 +114,6 @@ mLayout = new QGraphicsLinearLayout(Qt::Vertical); mLayout->setContentsMargins(0,0,0,0); - hide(); - mWidget = loadClockWidget(); mLayout->addItem(mWidget); setPreferredSize(mWidget->preferredSize()); @@ -124,7 +122,6 @@ mTimer = new QTimer(this); connect(mTimer, SIGNAL(timeout()), SLOT(updateTime())); setLayout(mLayout); - } /*! @@ -136,7 +133,6 @@ { mWidgetShown = true; mTimer->start(clockUpdateInterval); - show(); } @@ -149,7 +145,6 @@ { mWidgetShown = false; mTimer->stop(); - hide(); } /*! @@ -158,7 +153,6 @@ void HsClockWidget::onUninitialize() { mTimer->stop(); - hide(); } /*! @@ -183,7 +177,10 @@ */ void HsClockWidget::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { - Q_UNUSED(event); + if (!contains(event->pos())) { + return; + } + #ifndef Q_OS_SYMBIAN mTimer->stop(); toggleClockType(); @@ -203,7 +200,6 @@ updateTime(); update(); - mTimer->start(clockUpdateInterval); #endif } diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/widgetplugins/hsclockwidgetplugin/src/hsclockwidgetplugin.cpp --- a/homescreenapp/widgetplugins/hsclockwidgetplugin/src/hsclockwidgetplugin.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/widgetplugins/hsclockwidgetplugin/src/hsclockwidgetplugin.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -43,7 +43,7 @@ Q_UNUSED(context); Q_UNUSED(session); - if (descriptor.interfaceName() == QLatin1String("com.nokia.IHomeScreenWidget")) { + if (descriptor.interfaceName() == QLatin1String("com.nokia.symbian.IHomeScreenWidget")) { return new HsClockWidget(); } else { return 0; diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/widgetplugins/hsclockwidgetplugin/styles/hsanalogclockstyleplugin/inc/hsanalogclockstyleplugin.h --- a/homescreenapp/widgetplugins/hsclockwidgetplugin/styles/hsanalogclockstyleplugin/inc/hsanalogclockstyleplugin.h Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/widgetplugins/hsclockwidgetplugin/styles/hsanalogclockstyleplugin/inc/hsanalogclockstyleplugin.h Fri Apr 16 14:54:01 2010 +0300 @@ -34,7 +34,7 @@ public: int primitiveCount() const; - HbWidgetBase *createPrimitive(HbStyle::Primitive primitive, QGraphicsItem *parent = 0) const; + QGraphicsItem *createPrimitive(HbStyle::Primitive primitive, QGraphicsItem *parent = 0) const; void updatePrimitive(QGraphicsItem *item, HbStyle::Primitive primitive, const QStyleOption *option) const; QString layoutPath() const; diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/widgetplugins/hsclockwidgetplugin/styles/hsanalogclockstyleplugin/resource/hsanalogclockwidget.css --- a/homescreenapp/widgetplugins/hsclockwidgetplugin/styles/hsanalogclockstyleplugin/resource/hsanalogclockwidget.css Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/widgetplugins/hsclockwidgetplugin/styles/hsanalogclockstyleplugin/resource/hsanalogclockwidget.css Fri Apr 16 14:54:01 2010 +0300 @@ -1,21 +1,21 @@ -HbWidget { - margin-left: 0un; - margin-top: 0un; -} - HsAnalogClockWidget { layout: layout_1; } HsAnalogClockWidget::clock_background { - pref-width: 25.0un; - pref-height: 25.0un; + fixed-width: 25.0un; + fixed-height: 25.0un; + zvalue: 0; +} + +HsAnalogClockWidget::clock_minute_hand { + fixed-width: 25.0un; + fixed-height: 25.0un; + zvalue: 1; } HsAnalogClockWidget::clock_hour_hand { - pref-height: 15.0un; + fixed-width: 25.0un; + fixed-height: 25.0un; + zvalue: 2; } - -HsAnalogClockWidget::clock_minute_hand { - pref-height: 20.0un; -} diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/widgetplugins/hsclockwidgetplugin/styles/hsanalogclockstyleplugin/src/hsanalogclockstyleplugin.cpp --- a/homescreenapp/widgetplugins/hsclockwidgetplugin/styles/hsanalogclockstyleplugin/src/hsanalogclockstyleplugin.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/widgetplugins/hsclockwidgetplugin/styles/hsanalogclockstyleplugin/src/hsanalogclockstyleplugin.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -38,24 +38,21 @@ /*! @copydoc HbStyleInterface::createPrimitive() */ -HbWidgetBase* HsAnalogClockStylePlugin::createPrimitive(HbStyle::Primitive primitive, QGraphicsItem *parent) const +QGraphicsItem* HsAnalogClockStylePlugin::createPrimitive(HbStyle::Primitive primitive, QGraphicsItem *parent) const { if (primitive == backgroundItemIndex) { HbIconItem *item = new HbIconItem("qtg_graf_clock_day_bg", parent); HbStyle::setItemName(item, "clock_background"); - item->setZValue(1); return item; } else if (primitive == hourHandItemIndex) { HbIconItem *item = new HbIconItem("qtg_graf_clock_day_hour", parent); HbStyle::setItemName(item, "clock_hour_hand"); - item->setZValue(3); // hour hand is on top of minute hand return item; } else if (primitive == minuteHandItemIndex) { HbIconItem *item = new HbIconItem("qtg_graf_clock_day_min", parent); HbStyle::setItemName(item, "clock_minute_hand"); - item->setZValue(2); // minute hand is below hour hand return item; } return 0; diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/widgetplugins/hsshortcutwidgetplugin/resource/hsshortcutwidgetplugin.s60xml --- a/homescreenapp/widgetplugins/hsshortcutwidgetplugin/resource/hsshortcutwidgetplugin.s60xml Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/widgetplugins/hsshortcutwidgetplugin/resource/hsshortcutwidgetplugin.s60xml Fri Apr 16 14:54:01 2010 +0300 @@ -4,7 +4,7 @@ <filepath>z:/private/20022F35/import/widgetregistry/20022F46/hsshortcutwidgetplugin.qtplugin</filepath> <description>Shortcut widget.</description> <interface> - <name>com.nokia.IHomeScreenWidget</name> + <name>com.nokia.symbian.IHomeScreenWidget</name> <version>1.0</version> <description></description> <capabilities></capabilities> diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/widgetplugins/hsshortcutwidgetplugin/resource/hsshortcutwidgetplugin.xml --- a/homescreenapp/widgetplugins/hsshortcutwidgetplugin/resource/hsshortcutwidgetplugin.xml Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/widgetplugins/hsshortcutwidgetplugin/resource/hsshortcutwidgetplugin.xml Fri Apr 16 14:54:01 2010 +0300 @@ -4,7 +4,7 @@ <filepath>hsshortcutwidgetplugin</filepath> <description>Shortcut widget</description> <interface> - <name>com.nokia.IHomeScreenWidget</name> + <name>com.nokia.symbian.IHomeScreenWidget</name> <version>1.0</version> <description></description> <capabilities></capabilities> diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/widgetplugins/hsshortcutwidgetplugin/src/hsshortcutwidget.cpp --- a/homescreenapp/widgetplugins/hsshortcutwidgetplugin/src/hsshortcutwidget.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/widgetplugins/hsshortcutwidgetplugin/src/hsshortcutwidget.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -16,6 +16,7 @@ */ #include <QGraphicsLinearLayout> +#include <QGraphicsSceneMouseEvent> #include <HbStackedLayout> #include <HbIconItem> @@ -147,7 +148,6 @@ */ void HsShortcutWidget::onHide() { - hide(); } /*! @@ -156,9 +156,11 @@ Executes configured action */ void HsShortcutWidget::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) -{ - Q_UNUSED(event) - +{ + if (!contains(event->pos())) { + return; + } + CaEntry *entry = CaService::instance()->getEntry(mMcsId); if (!entry) { return; @@ -244,8 +246,8 @@ itemNotifier->setParent(this); connect(itemNotifier, - SIGNAL(entryChanged(const CaEntry&, ChangeType)), - SLOT(onEntryChanged(const CaEntry&, ChangeType)),Qt::QueuedConnection); + SIGNAL(entryChanged(CaEntry,ChangeType)), + SLOT(onEntryChanged(CaEntry,ChangeType)),Qt::QueuedConnection); } /*! diff -r f9ce957a272c -r cdae8c6c3876 homescreenapp/widgetplugins/hsshortcutwidgetplugin/src/hsshortcutwidgetplugin.cpp --- a/homescreenapp/widgetplugins/hsshortcutwidgetplugin/src/hsshortcutwidgetplugin.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/homescreenapp/widgetplugins/hsshortcutwidgetplugin/src/hsshortcutwidgetplugin.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -46,7 +46,7 @@ Q_UNUSED(context); Q_UNUSED(session); - if (descriptor.interfaceName() == QLatin1String("com.nokia.IHomeScreenWidget")) { + if (descriptor.interfaceName() == QLatin1String("com.nokia.symbian.IHomeScreenWidget")) { return new HsShortcutWidget(); } else { return 0; diff -r f9ce957a272c -r cdae8c6c3876 layers.sysdef.xml --- a/layers.sysdef.xml Fri Mar 19 09:27:44 2010 +0200 +++ b/layers.sysdef.xml Fri Apr 16 14:54:01 2010 +0300 @@ -10,5 +10,11 @@ <unit name="homescreen" unitID="homescreen" bldFile="&layer_real_source_path;" mrp="" proFile="homescreen.pro" qmakeArgs="-r -config rom"/> </module> </layer> + + <layer name="unit_test_layer"> + <module name="hs_app_unit_test"> + <unit unitID="hsdo.hs_app_unit_test" name="hs_app_unit_test" bldFile="&layer_real_source_path;/tsrc" mrp="" proFile="tsrc.pro" qmakeArgs="-r MMP_RULES+=EXPORTUNFROZEN"/> + </module> + </layer> </systemModel> </SystemDefinition> diff -r f9ce957a272c -r cdae8c6c3876 package_definition.xml --- a/package_definition.xml Fri Mar 19 09:27:44 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<SystemDefinition schema="3.0.0"> - <package id="homescreen" name="Home Screen Apps" levels="fw apps"> - <collection id="idlehomescreen" name="Idle Home Screen" level="apps"> - <component id="nativeuicontroller" filter="s60" name="Native UI Controller"> - <unit bldFile="idlehomescreen/nativeuicontroller/group"/> - </component> - <component id="exths" filter="s60" name="Active Idle Container" class="plugin"> - <!-- why is the ID so different from the name? Is one wrong? --> - <unit bldFile="idlehomescreen/exths/group"/> - </component> - <component id="activeidle3" filter="s60" name="Active Idle 3"> - <unit bldFile="idlehomescreen/activeidle3/group"/> - <!-- do these need to be built? --> - <!-- <unit bldFile="idlehomescreen/activeidle3/data/group"/> --> - <!-- <unit bldFile="idlehomescreen/activeidle3/xmluirendering/uiengine/group"/> --> - </component> - <component id="hsplugins" filter="s60" name="Home Screen Plugins" class="plugin"> - <unit bldFile="idlehomescreen/hsplugins/group"/> - <!-- do these need to be built? --> - <!-- <unit bldFile="idlehomescreen/hsplugins/organizer/qhd_tch/organizer_2001f481/group"/> --> - <!-- <unit bldFile="idlehomescreen/hsplugins/organizer/vga/organizer_2001f48d/group"/> --> - <!-- <unit bldFile="idlehomescreen/hsplugins/organizer/vga/organizer_2001fdba/group"/> --> - </component> - </collection> - <collection id="menufw" name="Menu Framework" level="fw"> - <component id="hierarchynavigator" filter="s60" name="Hierarchy Navigator"> - <unit bldFile="menufw/hierarchynavigator/group"/> - </component> - <component id="menufwui" filter="s60" name="Menu Framework UI"> - <unit bldFile="menufw/menufwui/group"/> - </component> - <component id="menusuites" filter="s60" name="Menu Suites"> - <unit bldFile="menufw/menusuites/group"/> - </component> - <component id="menufw_build" filter="s60" name="Menu Framework Build"> - <!-- can the exports be exported by the other components? --> - <unit bldFile="menufw/group"/> - </component> - </collection> - <collection id="homescreen_info" name="Home Screen Apps Info" level="apps"> - <component id="homescreen_test" filter="s60" purpose="development" name="Home Screen Apps Test"> - <!-- should this be commented out or not? --> - <!-- <unit bldFile="tsrc/group"/> --> - </component> - <component id="homescreen_plat" filter="s60" name="Home Screen Apps Platform Interfaces" class="api"> - <unit bldFile="homescreen_plat/group"/> - </component> - </collection> - </package> -</SystemDefinition> diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/common.pri --- a/taskswitcherapp/common.pri Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/common.pri Fri Apr 16 14:54:01 2010 +0300 @@ -36,8 +36,6 @@ win32: OUTPUT_DIR = $$PWD/../../bin/$$SUBDIRPART symbian: OUTPUT_DIR = $$PWD/bin -SOURCE_DIR = $$PWD/inc - #test whether we have a unit test !testcase { OBJECTS_DIR = $$OUTPUT_DIR/tmp/$$TARGET @@ -49,19 +47,24 @@ QT *= testlib CONFIG += console CONFIG -= app_bundle - OBJECTS_DIR = $$OUTPUT_DIR/bin/tests/$$SUBDIRPART/tmp/$$TARGET - DESTDIR = $$OUTPUT_DIR/bin/tests/$$SUBDIRPART - MOC_DIR = $$OUTPUT_DIR/bin/tests/$$SUBDIRPART/tmp/$$TARGET/moc - RCC_DIR = $$OUTPUT_DIR/bin/tests/$$SUBDIRPART/tmp/$$TARGET/rcc - UI_DIR = $$OUTPUT_DIR/bin/tests/$$SUBDIRPART/tmp/$$TARGET/ui - LIBS += -L$$OUTPUT_DIR/bin/$$SUBDIRPART/bin #link against library that we test + OBJECTS_DIR = $$OUTPUT_DIR/tests/tmp/$$TARGET + DESTDIR = $$OUTPUT_DIR + MOC_DIR = $$OUTPUT_DIR/tests/tmp/$$TARGET/moc + RCC_DIR = $$OUTPUT_DIR/tests/tmp/$$TARGET/rcc + UI_DIR = $$OUTPUT_DIR/tests/tmp/$$TARGET/ui + coverage { + DEFINES += COVERAGE_MEASUREMENT + DEFINES += QT_NO_DEBUG # omit ASSERTS in coverage measurements + } + + symbian { + TARGET.SID = 0x2002677D + } } # Add the output dirs to the link path too LIBS += -L$$DESTDIR -DEPENDPATH += . $$SOURCE_DIR -INCLUDEPATH += . $$SOURCE_DIR #For some reason the default include path doesn't include MOC_DIR on symbian symbian { INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE @@ -73,70 +76,6 @@ win32 { # add platfrom API for windows INCLUDEPATH += \ - $$PWD/../../homescreensrv/homescreensrv_plat/appruntimemodel_api \ $$PWD/../../homescreensrv/homescreensrv_plat/contentstorage_api \ $$PWD/../../homescreensrv/homescreensrv_plat/hswidgetmodel_api \ - $$PWD/../../homescreensrv/homescreensrv_plat/servicemodel_api \ - $$PWD/../../homescreensrv/homescreensrv_plat/statemodel_api } - -plugin: !isEmpty(PLUGIN_SUBDIR): DESTDIR = $$OUTPUT_DIR/$$PLUGIN_SUBDIR - -win32: plugin { # copy manifiers - manifest.path = $$DESTDIR - manifest.files = ./resource/*.manifest - manifest.CONFIG += no_build - - INSTALLS += manifest - PRE_TARGETDEPS += install_manifest - -} - -symbian: plugin { # copy qtstub and manifest - - pluginstub.sources = $${TARGET}.dll - pluginstub.path = $$PLUGIN_SUBDIR - - manifest.sources = resource/$${TARGET}.manifest - manifest.path = $$PLUGIN_SUBDIR - - DEPLOYMENT += pluginstub manifest - - qtplugins.path = $$PLUGIN_SUBDIR - qtplugins.sources += qmakepluginstubs/$${TARGET}.qtplugin - qtplugins.sources += resource/$${TARGET}.manifest - - for(qtplugin, qtplugins.sources):BLD_INF_RULES.prj_exports += "./$$qtplugin z:$$qtplugins.path/$$basename(qtplugin)" - -} - -defineTest(exportResources) { -symbian { - for(subdirs, 1) { - entries = $$files($$subdirs) - for(entry, entries) : BLD_INF_RULES.prj_exports += "./$$entry z:/$$replace(2, ^/,)/$$basename(entry)" - } - export ( BLD_INF_RULES.prj_exports) -} -win32 { - name = $$replace(1, [/\\\\\.\*], _) - eval ($${name}.path = $${OUTPUT_DIR}/$${2}) - eval ($${name}.files = $$1) - eval ($${name}.CONFIG += no_build) - - INSTALLS += $$name - PRE_TARGETDEPS += install_$${name} - - export ( $${name}.path ) - export ( $${name}.files ) - export ( $${name}.CONFIG ) - export ( INSTALLS ) - export ( PRE_TARGETDEPS ) -} -} - -# support for NFT -nft:DEFINES += NFT - -#ONLY FOR DEVELOPMENT! REMOVE THIS AFTER SPRINTS ENDS AT WK43 2009! -symbian: MMP_RULES += EXPORTUNFROZEN \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/rom/tsapplication_core.iby --- a/taskswitcherapp/rom/tsapplication_core.iby Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/rom/tsapplication_core.iby Fri Apr 16 14:54:01 2010 +0300 @@ -29,6 +29,8 @@ file=ABI_DIR\BUILD_DIR\tsdefaultruntimeplugin.dll SHARED_LIB_DIR\tsdefaultruntimeplugin.dll data=\epoc32\data\z\resource\qt\plugins\tsdefaultruntimeplugin.qtplugin resource\qt\plugins\tsdefaultruntimeplugin.qtplugin +data=\epoc32\data\z\resource\qt\crml\tsexternalactivation.qcrml resource\qt\crml\tsexternalactivation.qcrml + // stub sis data=ZSYSTEM/install/taskswitcher_stub.sis system/install/taskswitcher_stub.sis diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/runtimeplugins/tsdefaultruntimeplugin/src/tsdefaultruntime.cpp --- a/taskswitcherapp/runtimeplugins/tsdefaultruntimeplugin/src/tsdefaultruntime.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/runtimeplugins/tsdefaultruntimeplugin/src/tsdefaultruntime.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -26,7 +26,7 @@ /*! \class TsDefaultRuntime - \ingroup group_tsdefaultruntimeprovider + \ingroup group_tsdefaultruntimeplugin \brief Default implementation of the taskswitcher runtime. */ @@ -80,9 +80,7 @@ QObject *TsDefaultRuntime::createCriticalInterface(QServiceManager *serviceManager, const QString &name) { QObject *interface = serviceManager->loadInterface(name); - if (!interface) { - qFatal("Cannot initialize critical %s interafce.", qPrintable(name)); - } + Q_ASSERT_X(interface, "TsDefaultRuntime::createCriticalInterface", qPrintable(QString("Cannot initialize critical %1 interafce").arg(name))); interface->setParent(this); return interface; } diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/runtimeplugins/tsdefaultruntimeplugin/src/tsdefaultruntimeplugin.cpp --- a/taskswitcherapp/runtimeplugins/tsdefaultruntimeplugin/src/tsdefaultruntimeplugin.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/runtimeplugins/tsdefaultruntimeplugin/src/tsdefaultruntimeplugin.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -24,11 +24,10 @@ /*! \class TsDefaultRuntimePlugin - \ingroup group_tsdefaultruntimeprovider + \ingroup group_tsdefaultruntimeplugin \brief Provides a default implementation of the taskswitcher runtime. This provider includes a default implementation of the taskswitcher runtime. - The runtime is described in the tsdefaultruntimeplugin.xml file. */ #ifdef COVERAGE_MEASUREMENT diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/runtimeplugins/tsdefaultruntimeplugin/tsdefaultruntimeplugin.pro --- a/taskswitcherapp/runtimeplugins/tsdefaultruntimeplugin/tsdefaultruntimeplugin.pro Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/runtimeplugins/tsdefaultruntimeplugin/tsdefaultruntimeplugin.pro Fri Apr 16 14:54:01 2010 +0300 @@ -28,10 +28,10 @@ symbian { load(data_caging_paths) - TARGET.EPOCALLOWDLLDATA = 1 - TARGET.CAPABILITY = ALL -TCB plugin.sources = tsdefaultruntimeplugin.dll plugin.path = $$QT_PLUGINS_BASE_DIR DEPLOYMENT += plugin } + +include(../../common.pri) diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/sis/stubs/taskswitcher_stub.pkg --- a/taskswitcherapp/sis/stubs/taskswitcher_stub.pkg Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/sis/stubs/taskswitcher_stub.pkg Fri Apr 16 14:54:01 2010 +0300 @@ -46,3 +46,4 @@ ""-"Z:\resource\qt\plugins\tsdefaultruntimeplugin.qtplugin" ""-"Z:\resource\qt\translations\taskswitcher.qm" +""-"Z:\resource\qt\crml\tsexternalactivation.qcrml" diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/sis/stubs/taskswitcher_stub.sis Binary file taskswitcherapp/sis/stubs/taskswitcher_stub.sis has changed diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/sis/taskswitcher.pkg --- a/taskswitcherapp/sis/taskswitcher.pkg Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/sis/taskswitcher.pkg Fri Apr 16 14:54:01 2010 +0300 @@ -40,3 +40,4 @@ "/epoc32/data/z/resource/qt/plugins/tsdefaultruntimeplugin.qtplugin"-"!:\resource\qt\plugins\tsdefaultruntimeplugin.qtplugin" "/epoc32/data/z/resource/qt/translations/taskswitcher.qm"-"!:\resource\qt\translations\taskswitcher.qm" +"/epoc32/data/z/resource/qt/crml/tsexternalactivation.qcrml"-"!:\resource\qt\crml\tsexternalactivation.qcrml" diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/taskswitcherapp.pro --- a/taskswitcherapp/taskswitcherapp.pro Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/taskswitcherapp.pro Fri Apr 16 14:54:01 2010 +0300 @@ -16,13 +16,13 @@ TEMPLATE = subdirs -SUBDIRS += taskswitcherappecom +symbian:SUBDIRS += taskswitcherappecom SUBDIRS += tsserviceplugin SUBDIRS += runtimeplugins SUBDIRS += tsapplication tests { - SUBDIRS += taskswitcherappecom\tsrc + symbian:SUBDIRS += taskswitcherappecom\tsrc SUBDIRS += tsserviceplugin\tsrc SUBDIRS += runtimeplugins\tsdefaultruntimeplugin\tsrc SUBDIRS += tsapplication\tsrc diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsapplication/tsapplication.pro --- a/taskswitcherapp/tsapplication/tsapplication.pro Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsapplication/tsapplication.pro Fri Apr 16 14:54:01 2010 +0300 @@ -15,8 +15,6 @@ # TEMPLATE = app -TARGET = tsapplication - CONFIG += hb console mobility MOBILITY = serviceframework @@ -31,7 +29,8 @@ RESOURCES += tsapplication.qrc symbian { + TARGET.EPOCHEAPSIZE = 0x700000 0xF00000 TARGET.UID3 = 0x2002677D - TARGET.EPOCALLOWDLLDATA = 1 - TARGET.CAPABILITY = ALL -TCB } + +include(../common.pri) diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/inc/s60/tsexternalactivationwatcher_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcherapp/tsserviceplugin/inc/s60/tsexternalactivationwatcher_p.h Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,52 @@ +/* +* 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: +* +*/ +#ifndef TSEXTERNALACTIVATIONWATCHERPRIVATE_H +#define TSEXTERNALACTIVATIONWATCHERPRIVATE_H + +#include <e32base.h> +#include <e32property.h> + +class TsExternalActivationWatcher; + +class TsExternalActivationWatcherPrivate : public CActive +{ +public: + TsExternalActivationWatcherPrivate(TsExternalActivationWatcher *parent); + virtual ~TsExternalActivationWatcherPrivate(); + +public: //From CActive + /** + * Implements cancellation of an outstanding request. + */ + virtual void DoCancel(); + + /** + Handles an active object's request completion event. + */ + void RunL(); + +private: + bool CheckActivationFlag(); + void ResetActivationFlag(); + +private: + TsExternalActivationWatcher *mParent; + RProperty mProperty; + +}; + +#endif // TSEXTERNALACTIVATIONWATCHERPRIVATE_H diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/inc/tsclosedapplicationsfiltermodel.h --- a/taskswitcherapp/tsserviceplugin/inc/tsclosedapplicationsfiltermodel.h Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/inc/tsclosedapplicationsfiltermodel.h Fri Apr 16 14:54:01 2010 +0300 @@ -20,15 +20,6 @@ #include <QSortFilterProxyModel> -/** - * @ingroup group_tsserviceprovider - * @brief TsClosedApplicationsFilterModel filtering model to hide closed apps. - * - * Filter closed apps by task switcher from currently presented. - * - * @lib tsserviceprovider.lib - * @since S60 ?S60_version - */ class TsClosedApplicationsFilterModel : public QSortFilterProxyModel { Q_OBJECT diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/inc/tsdeactivation.h --- a/taskswitcherapp/tsserviceplugin/inc/tsdeactivation.h Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/inc/tsdeactivation.h Fri Apr 16 14:54:01 2010 +0300 @@ -19,14 +19,18 @@ #include "tsdeactivationinterface.h" +class QEvent; + class TsDeactivation : public TsDeactivationInterface { - Q_OBJECT public: TsDeactivation(QObject *parent = 0); +protected: + bool eventFilter(QObject *obj, QEvent *event); + }; #endif // TSDEACTIVATION_H diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/inc/tsexternalactivationwatcher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcherapp/tsserviceplugin/inc/tsexternalactivationwatcher.h Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,41 @@ +/* +* 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: +* +*/ +#ifndef TSEXTERNALACTIVATIONWATCHER_H +#define TSEXTERNALACTIVATIONWATCHER_H + +#include <QObject> + +class TsExternalActivationWatcherPrivate; + +class TsExternalActivationWatcher : public QObject +{ + Q_OBJECT + +public: + TsExternalActivationWatcher(QObject *parent = 0); + virtual ~TsExternalActivationWatcher(); + +signals: + void activationRequested(); + +private: + TsExternalActivationWatcherPrivate *d_ptr; + friend class TsExternalActivationWatcherPrivate; + +}; + +#endif // TSEXTERNALACTIVATIONWATCHER_H diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/inc/tspresentation.h --- a/taskswitcherapp/tsserviceplugin/inc/tspresentation.h Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/inc/tspresentation.h Fri Apr 16 14:54:01 2010 +0300 @@ -48,4 +48,3 @@ }; #endif // TSPRESENTATION_H - \ No newline at end of file diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/inc/tsrecentapplicationsmodel.h --- a/taskswitcherapp/tsserviceplugin/inc/tsrecentapplicationsmodel.h Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/inc/tsrecentapplicationsmodel.h Fri Apr 16 14:54:01 2010 +0300 @@ -28,15 +28,6 @@ class CaService; class CaNotifier; -/** - * @ingroup group_tsserviceprovider - * @brief TsRecentApplicationsModel model with recent application. - * - * Loads recent aplications from content arsenal. - * - * @lib tsserviceprovider.lib - * @since S60 ?S60_version - */ class TsRecentApplicationsModel : public QAbstractListModel { Q_OBJECT diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/inc/tstasksgriditem.h --- a/taskswitcherapp/tsserviceplugin/inc/tstasksgriditem.h Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/inc/tstasksgriditem.h Fri Apr 16 14:54:01 2010 +0300 @@ -24,11 +24,11 @@ class TsTasksGridItem : public HbAbstractViewItem { - Q_OBJECT public: TsTasksGridItem(); + TsTasksGridItem(const TsTasksGridItem& item); ~TsTasksGridItem(); HbAbstractViewItem *createItem(); diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/inc/win/tsexternalactivationwatcher_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcherapp/tsserviceplugin/inc/win/tsexternalactivationwatcher_p.h Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,49 @@ +/* +* 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: +* +*/ +#ifndef TSEXTERNALACTIVATIONWATCHERPRIVATE_H +#define TSEXTERNALACTIVATIONWATCHERPRIVATE_H + +#include <QObject> +#include <qmobilityglobal.h> + +QTM_BEGIN_NAMESPACE + class QValueSpacePublisher; + class QValueSpaceSubscriber; +QTM_END_NAMESPACE + +QTM_USE_NAMESPACE + +class TsExternalActivationWatcherPrivate : public QObject +{ + Q_OBJECT + +public: + TsExternalActivationWatcherPrivate(QObject *parent); + +private slots: + void checkActivationFlag(); + +signals: + void activationRequested(); + +private: + QValueSpacePublisher *mPublisher; + QValueSpaceSubscriber *mSubscriber; + +}; + +#endif // TSEXTERNALACTIVATIONWATCHERPRIVATE_H diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/resource/tsexternalactivation.qcrml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcherapp/tsserviceplugin/resource/tsexternalactivation.qcrml Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<repository target="RProperty" uidValue="0x2002677D"> + <key int="0x1" ref="/TaskSwitcher/Activation"/> +</repository> diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/src/s60/tsexternalactivationwatcher_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcherapp/tsserviceplugin/src/s60/tsexternalactivationwatcher_p.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,80 @@ +/* +* 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 "tsexternalactivationwatcher_p.h" +#include "tsexternalactivationwatcher.h" + +const TUid KTaskswitcherCategory = { 0x2002677D }; +const TUint KExternalActivationKey = 0x1; +const TInt KTaskswitcherActivateFlag = 1; + +/*! + \class TsExternalActivationWatcherPrivate + \ingroup group_tsserviceplugin + \brief Private implementation of external activation watcher. +*/ + +TsExternalActivationWatcherPrivate::TsExternalActivationWatcherPrivate(TsExternalActivationWatcher *parent) : CActive(CActive::EPriorityStandard), mParent(parent) +{ + CActiveScheduler::Add(this); + + TInt err = RProperty::Define(KTaskswitcherCategory, KExternalActivationKey, RProperty::EInt); + if (err == KErrNone || err == KErrAlreadyExists) { + err = mProperty.Attach(KTaskswitcherCategory, KExternalActivationKey); + } + + Q_ASSERT_X(err == KErrNone, "TsExternalActivationWatcherPrivate", qPrintable(QString("Cannot define/attach to activation watcher property %1").arg(err))); + + mProperty.Subscribe(iStatus); + SetActive(); +} + +TsExternalActivationWatcherPrivate::~TsExternalActivationWatcherPrivate() +{ + Cancel(); + mProperty.Close(); +} + +void TsExternalActivationWatcherPrivate::ResetActivationFlag() +{ + TInt value(0); + mProperty.Set(value); +} + +void TsExternalActivationWatcherPrivate::DoCancel() +{ + mProperty.Cancel(); +} + +void TsExternalActivationWatcherPrivate::RunL() +{ + if (iStatus.Int() != KErrCancel) { + + if (CheckActivationFlag()) { + ResetActivationFlag(); + QT_TRYCATCH_LEAVING(emit mParent->activationRequested()); + } + mProperty.Subscribe(iStatus); + SetActive(); + } +} + +bool TsExternalActivationWatcherPrivate::CheckActivationFlag() +{ + TInt value(0); + TInt result = mProperty.Get(value); + return (result == KErrNone && value & KTaskswitcherActivateFlag); +} diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/src/s60/tslongpresswatcher_p.cpp --- a/taskswitcherapp/tsserviceplugin/src/s60/tslongpresswatcher_p.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/src/s60/tslongpresswatcher_p.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -26,6 +26,12 @@ const TInt KTaskswitcherForegroundValue = KTaskswitcherBackgroundValue << 1; const TInt KTaskswitcherLongAppKeyPressed = KTaskswitcherForegroundValue << 1; +/*! + \class TsLongPressWatcherPrivate + \ingroup group_tsserviceplugin + \brief Private implementation of long press app key watcher. +*/ + TsLongPressWatcherPrivate::TsLongPressWatcherPrivate(TsLongPressWatcher *parent) : CActive(CActive::EPriorityStandard), mParent(parent) { CActiveScheduler::Add(this); diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/src/tsactivation.cpp --- a/taskswitcherapp/tsserviceplugin/src/tsactivation.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/src/tsactivation.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -18,9 +18,21 @@ #include "tsactivation.h" #include "tslongpresswatcher.h" +#include "tsexternalactivationwatcher.h" +/*! + \class TsActivation + \ingroup group_tsserviceplugin + \brief Activation service. + + Service responsible for observing all events that might show TS. When any of them + occurs it is emiting activation signal. +*/ TsActivation::TsActivation(QObject *parent) : TsActivationInterface(parent) { - TsLongPressWatcher *watcher = new TsLongPressWatcher(this); - connect(watcher, SIGNAL(applicationKeyLongPress()), this, SIGNAL(activated())); + TsLongPressWatcher *longPressWatcher = new TsLongPressWatcher(this); + connect(longPressWatcher, SIGNAL(applicationKeyLongPress()), this, SIGNAL(activated())); + + TsExternalActivationWatcher *externalActivationWatcher = new TsExternalActivationWatcher(this); + connect(externalActivationWatcher, SIGNAL(activationRequested()), this, SIGNAL(activated())); } diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/src/tsclosedapplicationsfiltermodel.cpp --- a/taskswitcherapp/tsserviceplugin/src/tsclosedapplicationsfiltermodel.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/src/tsclosedapplicationsfiltermodel.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -17,6 +17,15 @@ #include "tsclosedapplicationsfiltermodel.h" #include "tsdataroles.h" + +/*! + \class TsClosedApplicationsFilterModel + \ingroup group_tsserviceplugin + \brief Filtering model to hide closed apps. + + When app is closed from Task Switcher it is hidden from it and will be presented when TS is started once more. +*/ + /*! Constructor \param pointer to parent object diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/src/tsdeactivation.cpp --- a/taskswitcherapp/tsserviceplugin/src/tsdeactivation.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/src/tsdeactivation.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -17,6 +17,26 @@ #include "tsdeactivation.h" +#include <QCoreApplication> +#include <QEvent> + +/*! + \class TsDeactivation + \ingroup group_tsserviceplugin + \brief Deactivation service. + + Service responsible for observation of all events that might hide TS. When any of + them occurs it is emiting signal. +*/ TsDeactivation::TsDeactivation(QObject *parent) : TsDeactivationInterface(parent) { + qApp->installEventFilter(this); } + +bool TsDeactivation::eventFilter(QObject *obj, QEvent *event) +{ + if (event->type() == QEvent::ApplicationDeactivate) { + emit deactivated(); + } + return TsDeactivationInterface::eventFilter(obj, event); +} diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/src/tsdocumentloader.cpp --- a/taskswitcherapp/tsserviceplugin/src/tsdocumentloader.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/src/tsdocumentloader.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -19,6 +19,14 @@ #include "tstasksgrid.h" #include "tstasksgriditem.h" +/*! + \class TsDocumentLoader + \ingroup group_tsserviceplugin + \brief Document loader. + + TS implementation of document loader. It is creating TS objects used in UI +*/ + QObject *TsDocumentLoader::createObject(const QString &type, const QString &name) { if (type == TsTasksGrid::staticMetaObject.className()) { diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/src/tsexternalactivationwatcher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcherapp/tsserviceplugin/src/tsexternalactivationwatcher.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,29 @@ +/* +* 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 "tsexternalactivationwatcher.h" +#include "tsexternalactivationwatcher_p.h" + +TsExternalActivationWatcher::TsExternalActivationWatcher(QObject *parent) : QObject(parent) +{ + d_ptr = new TsExternalActivationWatcherPrivate(this); +} + +TsExternalActivationWatcher::~TsExternalActivationWatcher() +{ + delete d_ptr; +} diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/src/tsitemprovider.cpp --- a/taskswitcherapp/tsserviceplugin/src/tsitemprovider.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/src/tsitemprovider.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -26,6 +26,15 @@ #include "tsclosedapplicationsfiltermodel.h" #include "tsdataroles.h" +/*! + \class TsItemProvider + \ingroup group_tsserviceplugin + \brief Returns items that should be presented in TS. + + Service providing information about items that should be presented in TS. It also allows to + start some action on it (open/close). +*/ + TsItemProvider::TsItemProvider(QObject *parent) : TsItemProviderInterface(parent), mService(CaService::instance()) { TsRecentApplicationsModel *recentAppModel = new TsRecentApplicationsModel(this); @@ -63,8 +72,18 @@ void TsItemProvider::closeAllApplications() { + QList<int> closableList; for (int row(0); row < mModel->rowCount(); ++row) { - closeApplication(mModel->index(row, 0)); + if (mModel->index(row, 0).data(TsDataRoles::Closable).toBool()) { + QVariant entryId = mModel->index(row, 0).data(TsDataRoles::EntryId); + if (entryId.isValid()) { + closableList.append(entryId.toInt()); + } + } + } + foreach (int entryId, closableList) { + mModel->addId(entryId); + mService->executeCommand(entryId, QString("close")); } } diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/src/tslongpresswatcher.cpp --- a/taskswitcherapp/tsserviceplugin/src/tslongpresswatcher.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/src/tslongpresswatcher.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -18,6 +18,11 @@ #include "tslongpresswatcher.h" #include "tslongpresswatcher_p.h" +/*! + \class TsLongPressWatcher + \ingroup group_tsserviceplugin + \brief Class watching app key events. +*/ TsLongPressWatcher::TsLongPressWatcher(QObject *parent) : QObject(parent) { d_ptr = new TsLongPressWatcherPrivate(this); diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/src/tspresentation.cpp --- a/taskswitcherapp/tsserviceplugin/src/tspresentation.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/src/tspresentation.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -26,10 +26,15 @@ // FIXME: workaround for Orbit bug: not moving to foreground after QWidget::activateWindow(); #ifdef Q_OS_SYMBIAN -#include <APGTASK.H> +#include <apgtask.h> #include <eikenv.h> #endif +/*! + \class TsPresentation + \ingroup group_tsserviceplugin + \brief Class providing UI for presenting TS data. +*/ TsPresentation::TsPresentation(QObject *parent) : TsPresentationInterface(parent), mDialog(NULL), mGrid(NULL) { HbMainWindow *mainWindow = HbInstance::instance()->allMainWindows().first(); @@ -92,12 +97,9 @@ // FIXME: workaround for Orbit bug: not moving to foreground after QWidget::activateWindow(); TApaTaskList taskList(CEikonEnv::Static()->WsSession()); TApaTask task = taskList.FindApp(RProcess().Type()[2]); - if (task.Exists()) { - task.BringToForeground(); - } else { - qWarning("Can't bring TaskSwitcher to foreground: task not found"); - } -#endif + Q_ASSERT_X(task.Exists(), "Bringing task switcher to foreground", "Application couldn't find task with its own UID"); + task.BringToForeground(); +#endif mDialog->show(); } diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/src/tsrecentapplicationsmodel.cpp --- a/taskswitcherapp/tsserviceplugin/src/tsrecentapplicationsmodel.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/src/tsrecentapplicationsmodel.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -25,6 +25,12 @@ #include "tsdataroles.h" /*! + \class TsRecentApplicationsModel + \ingroup group_tsserviceplugin + \brief Model storing recent application. +*/ + +/*! Constructor \param query used to create model \param pointer to parent object diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/src/tsserviceplugin.cpp --- a/taskswitcherapp/tsserviceplugin/src/tsserviceplugin.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/src/tsserviceplugin.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -26,6 +26,16 @@ #include "tsdeactivation.h" #include "tspresentation.h" +#ifdef COVERAGE_MEASUREMENT +#pragma CTC SKIP +#endif //COVERAGE_MEASUREMENT + +/*! + \class TsServicePlugin + \ingroup group_tsserviceplugin + \brief Plugin implementation. +*/ + QObject *TsServicePlugin::createInstance(const QServiceInterfaceDescriptor &descriptor, QServiceContext *context, QAbstractSecuritySession *session) { Q_UNUSED(context); @@ -45,3 +55,7 @@ } Q_EXPORT_PLUGIN2(tsserviceplugin, TsServicePlugin) + +#ifdef COVERAGE_MEASUREMENT +#pragma CTC ENDSKIP +#endif //COVERAGE_MEASUREMENT diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/src/tstaskpopuphandler.cpp --- a/taskswitcherapp/tsserviceplugin/src/tstaskpopuphandler.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/src/tstaskpopuphandler.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -21,6 +21,12 @@ #include "tsdataroles.h" +/*! + \class TsTaskPopupHandler + \ingroup group_tsserviceplugin + \brief Create popup with options for TS app. +*/ + TsTaskPopupHandler::TsTaskPopupHandler(QObject *parent) : QObject(parent) { } diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/src/tstasksgriditem.cpp --- a/taskswitcherapp/tsserviceplugin/src/tstasksgriditem.cpp Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/src/tstasksgriditem.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -22,8 +22,19 @@ #include <hbanchorlayout.h> #include "tsdataroles.h" +/*! + \class TsTasksGridItem + \ingroup group_tsserviceplugin + \brief Item that should be presented in grid. +*/ + + TsTasksGridItem::TsTasksGridItem() : HbAbstractViewItem() { +} + +TsTasksGridItem::TsTasksGridItem(const TsTasksGridItem &item) : HbAbstractViewItem(item) +{ // add screenshot mScreenshotLabel = new HbLabel(); mScreenshotLabel->setAlignment(Qt::AlignHCenter); @@ -67,7 +78,7 @@ HbAbstractViewItem *TsTasksGridItem::createItem() { - TsTasksGridItem *newItem = new TsTasksGridItem(); + TsTasksGridItem *newItem = new TsTasksGridItem(*this); connect(newItem, SIGNAL(deleteClicked(QModelIndex)), itemView(), SIGNAL(deleteButtonClicked(QModelIndex))); return newItem; } diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/src/win/tsexternalactivationwatcher_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/taskswitcherapp/tsserviceplugin/src/win/tsexternalactivationwatcher_p.cpp Fri Apr 16 14:54:01 2010 +0300 @@ -0,0 +1,40 @@ +/* +* 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 "tsexternalactivationwatcher_p.h" + +#include <qvaluespacesubscriber.h> +#include <qvaluespacepublisher.h> + +QTM_USE_NAMESPACE + +TsExternalActivationWatcherPrivate::TsExternalActivationWatcherPrivate(QObject *parent) : QObject() +{ + mSubscriber = new QValueSpaceSubscriber("/TaskSwitcher/Activation", this); + mPublisher = new QValueSpacePublisher("/TaskSwitcher", this); + connect(mSubscriber, SIGNAL(contentsChanged()), this, SLOT(checkActivationFlag())); + connect(this, SIGNAL(activationRequested()), parent, SIGNAL(activationRequested())); +} + +void TsExternalActivationWatcherPrivate::checkActivationFlag() +{ + if (mSubscriber->value().isValid()) { + mPublisher->resetValue("Activation"); + mPublisher->sync(); + emit activationRequested(); + } +} diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/tsrc/t_tsitemprovider/data/castorage.db Binary file taskswitcherapp/tsserviceplugin/tsrc/t_tsitemprovider/data/castorage.db has changed diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/tsrc/t_tsitemprovider/data/castoragedb Binary file taskswitcherapp/tsserviceplugin/tsrc/t_tsitemprovider/data/castoragedb has changed diff -r f9ce957a272c -r cdae8c6c3876 taskswitcherapp/tsserviceplugin/tsserviceplugin.pro --- a/taskswitcherapp/tsserviceplugin/tsserviceplugin.pro Fri Mar 19 09:27:44 2010 +0200 +++ b/taskswitcherapp/tsserviceplugin/tsserviceplugin.pro Fri Apr 16 14:54:01 2010 +0300 @@ -15,10 +15,12 @@ # TEMPLATE = lib -TARGET = tsserviceplugin +CONFIG += plugin hb mobility +MOBILITY = serviceframework -CONFIG += plugin hb mobility -MOBILITY = serviceframework +win32 { + MOBILITY += publishsubscribe +} INCLUDEPATH += . inc @@ -27,6 +29,7 @@ inc/tsactivationinterface.h \ inc/tsactivation.h \ inc/tslongpresswatcher.h \ + inc/tsexternalactivationwatcher.h \ inc/tsdeactivationinterface.h \ inc/tsdeactivation.h \ inc/tsitemproviderinterface.h \ @@ -43,6 +46,7 @@ SOURCES += src/tsserviceplugin.cpp \ src/tsactivation.cpp \ src/tslongpresswatcher.cpp \ + src/tsexternalactivationwatcher.cpp \ src/tsdeactivation.cpp \ src/tsitemprovider.cpp \ src/tsclosedapplicationsfiltermodel.cpp \ @@ -60,8 +64,6 @@ symbian { load(data_caging_paths) - TARGET.EPOCALLOWDLLDATA = 1 - TARGET.CAPABILITY = ALL -TCB plugin.sources = tsserviceplugin.dll plugin.path = $$QT_PLUGINS_BASE_DIR @@ -70,23 +72,37 @@ translation.sources = ./*.qm translation.path = $$QT_PLUGINS_BASE_DIR/../translations - DEPLOYMENT += plugin translation -} - -symbian: { - INCLUDEPATH += inc/s60 - HEADERS += inc/s60/tslongpresswatcher_p.h - SOURCES += src/s60/tslongpresswatcher_p.cpp - LIBS += -lcone -lapgrfx -lws32 + # another ugly hack + crml.sources = ./resource/*.qcrml + crml.path = $$QT_PLUGINS_BASE_DIR/../crml + + DEPLOYMENT += plugin translation crml } -win32: { +symbian { + INCLUDEPATH += inc/s60 + HEADERS += inc/s60/tslongpresswatcher_p.h \ + inc/s60/tsexternalactivationwatcher_p.h \ + + SOURCES += src/s60/tslongpresswatcher_p.cpp \ + src/s60/tsexternalactivationwatcher_p.cpp \ + + LIBS += -lcone \ + -lapgrfx \ + -lws32 \ + +} + +win32 { INCLUDEPATH += inc/win - HEADERS += inc/win/tslongpresswatcher_p.h - SOURCES += src/win/tslongpresswatcher_p.cpp - LIBS += -lUser32 + HEADERS += inc/win/tslongpresswatcher_p.h \ + inc/win/tsexternalactivationwatcher_p.h \ - INCLUDEPATH += $$PWD/../../../../homescreensrv/homescreensrv_plat/contentstorage_api - LIBS += -L$$PWD/../../../../bin/debug + SOURCES += src/win/tslongpresswatcher_p.cpp \ + src/win/tsexternalactivationwatcher_p.cpp \ + + LIBS += -lUser32 } + +include(../common.pri)