diff options
author | Javier S. Pedro <maemo@javispedro.com> | 2011-10-17 20:54:22 +0200 |
---|---|---|
committer | Javier S. Pedro <maemo@javispedro.com> | 2011-10-17 20:54:22 +0200 |
commit | e8781ec2d43ec3f7f905e20fc76b1910e83ee0c8 (patch) | |
tree | 34a842fb825ecc14454ff044fc6af92e29b4ae10 | |
parent | e42e7dca8df8d1e4966545894e2dde228f19b6f0 (diff) | |
download | sowatch-e8781ec2d43ec3f7f905e20fc76b1910e83ee0c8.tar.gz sowatch-e8781ec2d43ec3f7f905e20fc76b1910e83ee0c8.zip |
Major change: sowatchd is now a QtM service
34 files changed, 851 insertions, 115 deletions
diff --git a/ckitcallnotification/ckitcallnotification.pro b/ckitcallnotification/ckitcallnotification.pro index 2cee7f8..05b37eb 100644 --- a/ckitcallnotification/ckitcallnotification.pro +++ b/ckitcallnotification/ckitcallnotification.pro @@ -26,16 +26,11 @@ INCLUDEPATH += $$PWD/../libsowatch DEPENDPATH += $$PWD/../libsowatch unix:!symbian { - maemo5 { - target.path = /opt/sowatch/notifications + !isEmpty(MEEGO_VERSION_MAJOR)|maemo5 { + QMAKE_RPATHDIR += /opt/sowatch/lib + target.path = /opt/sowatch/lib/notifications } else { target.path = /usr/lib/sowatch/notifications } INSTALLS += target } - - - - - - diff --git a/harmaccuweather/harmaccuweather.pro b/harmaccuweather/harmaccuweather.pro index 7c9bfe5..5a1facd 100644 --- a/harmaccuweather/harmaccuweather.pro +++ b/harmaccuweather/harmaccuweather.pro @@ -16,18 +16,11 @@ INCLUDEPATH += $$PWD/../libsowatch DEPENDPATH += $$PWD/../libsowatch unix:!symbian { - maemo5 { - target.path = /opt/sowatch/notifications + !isEmpty(MEEGO_VERSION_MAJOR)|maemo5 { + QMAKE_RPATHDIR += /opt/sowatch/lib + target.path = /opt/sowatch/lib/notifications } else { target.path = /usr/lib/sowatch/notifications } INSTALLS += target } - - - - - - - - diff --git a/libsowatch/libsowatch.pro b/libsowatch/libsowatch.pro index cb77a17..6f657c8 100644 --- a/libsowatch/libsowatch.pro +++ b/libsowatch/libsowatch.pro @@ -29,7 +29,7 @@ SOURCES += \ watchletplugininterface.cpp \ registry.cpp -HEADERS +=\ +HEADERS += \ watchsimulator.h \ watchserver.h \ watchpaintengine.h \ @@ -62,10 +62,10 @@ symbian { unix:!symbian { install_headers.path = /usr/include/sowatch - maemo5 { - target.path = /opt/maemo/usr/lib - } else { - target.path = /usr/lib - } + !isEmpty(MEEGO_VERSION_MAJOR)|maemo5 { + target.path = /opt/sowatch/lib + } else { + target.path = /usr/lib + } INSTALLS += install_headers target } diff --git a/libsowatch/sowatch_global.h b/libsowatch/sowatch_global.h index 1afa590..c317ba4 100644 --- a/libsowatch/sowatch_global.h +++ b/libsowatch/sowatch_global.h @@ -2,17 +2,20 @@ #define SOWATCH_GLOBAL_H #include <QtCore/qglobal.h> +#include <qplatformdefs.h> #if defined(SOWATCH_LIBRARY) -# define SOWATCH_EXPORT Q_DECL_EXPORT +# define SOWATCH_EXPORT Q_DECL_EXPORT #else -# define SOWATCH_EXPORT Q_DECL_IMPORT +# define SOWATCH_EXPORT Q_DECL_IMPORT #endif -#if defined(Q_WS_MAEMO_5) -# define SOWATCH_PLUGINS_DIR "/opt/sowatch" +#if defined(MEEGO_VERSION_MAJOR) || defined(Q_WS_MAEMO_5) +# define SOWATCH_PLUGINS_DIR "/opt/sowatch/lib" #elif defined(Q_OS_LINUX) -# define SOWATCH_PLUGINS_DIR "/usr/lib/sowatch" +# define SOWATCH_PLUGINS_DIR "/usr/lib/sowatch" +#else +# error Please define a path for your platform #endif #define SOWATCH_DRIVERS_DIR SOWATCH_PLUGINS_DIR "/drivers" diff --git a/meegohandsetnotification/meegohandsetnotification.pro b/meegohandsetnotification/meegohandsetnotification.pro index 4921d03..ea87c2c 100644 --- a/meegohandsetnotification/meegohandsetnotification.pro +++ b/meegohandsetnotification/meegohandsetnotification.pro @@ -23,20 +23,11 @@ INCLUDEPATH += $$PWD/../libsowatch DEPENDPATH += $$PWD/../libsowatch unix:!symbian { - maemo5 { - target.path = /opt/sowatch/notifications + !isEmpty(MEEGO_VERSION_MAJOR)|maemo5 { + QMAKE_RPATHDIR += /opt/sowatch/lib + target.path = /opt/sowatch/lib/notifications } else { target.path = /usr/lib/sowatch/notifications } INSTALLS += target } - - - - - - - - - - diff --git a/metawatch/metawatch.pro b/metawatch/metawatch.pro index 3435bb5..f48cfe0 100644 --- a/metawatch/metawatch.pro +++ b/metawatch/metawatch.pro @@ -66,8 +66,9 @@ symbian { } unix:!symbian { - maemo5 { - target.path = /opt/sowatch/drivers + !isEmpty(MEEGO_VERSION_MAJOR)|maemo5 { + QMAKE_RPATHDIR += /opt/sowatch/lib + target.path = /opt/sowatch/lib/drivers } else { target.path = /usr/lib/sowatch/drivers } diff --git a/notificationswatchlet/notificationswatchlet.pro b/notificationswatchlet/notificationswatchlet.pro index f5e4ce8..e64a8d6 100644 --- a/notificationswatchlet/notificationswatchlet.pro +++ b/notificationswatchlet/notificationswatchlet.pro @@ -17,8 +17,9 @@ INCLUDEPATH += $$PWD/../libsowatch DEPENDPATH += $$PWD/../libsowatch unix:!symbian { - maemo5 { - target.path = /opt/sowatch/watchlets + !isEmpty(MEEGO_VERSION_MAJOR)|maemo5 { + QMAKE_RPATHDIR += /opt/sowatch/lib + target.path = /opt/sowatch/lib/watchlets } else { target.path = /usr/lib/sowatch/watchlets } @@ -30,31 +31,3 @@ OTHER_FILES += \ RESOURCES += \ notificationswatchlet.qrc - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/qmafwwatchlet/qmafwwatchlet.pro b/qmafwwatchlet/qmafwwatchlet.pro index 2f8db66..2e22b4b 100644 --- a/qmafwwatchlet/qmafwwatchlet.pro +++ b/qmafwwatchlet/qmafwwatchlet.pro @@ -18,8 +18,9 @@ INCLUDEPATH += $$PWD/../libsowatch DEPENDPATH += $$PWD/../libsowatch unix:!symbian { - maemo5 { - target.path = /opt/sowatch/watchlets + !isEmpty(MEEGO_VERSION_MAJOR)|maemo5 { + QMAKE_RPATHDIR += /opt/sowatch/lib + target.path = /opt/sowatch/lib/watchlets } else { target.path = /usr/lib/sowatch/watchlets } @@ -31,9 +32,3 @@ OTHER_FILES += \ RESOURCES += \ qmafwwatchlet.qrc - - - - - - diff --git a/qmapwatchlet/qmapwatchlet.pro b/qmapwatchlet/qmapwatchlet.pro index da5cf6f..5e5fb81 100644 --- a/qmapwatchlet/qmapwatchlet.pro +++ b/qmapwatchlet/qmapwatchlet.pro @@ -17,8 +17,9 @@ INCLUDEPATH += $$PWD/../libsowatch DEPENDPATH += $$PWD/../libsowatch unix:!symbian { - maemo5 { - target.path = /opt/sowatch/watchlets + !isEmpty(MEEGO_VERSION_MAJOR)|maemo5 { + QMAKE_RPATHDIR += /opt/sowatch/lib + target.path = /opt/sowatch/lib/watchlets } else { target.path = /usr/lib/sowatch/watchlets } @@ -30,19 +31,3 @@ OTHER_FILES += \ RESOURCES += \ qmapwatchlet.qrc - - - - - - - - - - - - - - - - diff --git a/qtc_packaging/debian_harmattan/manifest.aegis b/qtc_packaging/debian_harmattan/manifest.aegis index 480b230..180419e 100644 --- a/qtc_packaging/debian_harmattan/manifest.aegis +++ b/qtc_packaging/debian_harmattan/manifest.aegis @@ -4,6 +4,6 @@ <credential name="TrackerReadAccess" /> <credential name="Location" /> - <for path="/usr/bin/sowatchd" /> + <for path="/opt/sowatch/bin/sowatchd" /> </request> </aegis> diff --git a/sowatch.pro b/sowatch.pro index 367bd36..6c03912 100644 --- a/sowatch.pro +++ b/sowatch.pro @@ -2,6 +2,7 @@ TEMPLATE = subdirs SUBDIRS = libsowatch \ metawatch \ sowatchd \ + sowatchui \ notificationswatchlet \ sysinfowatchlet @@ -46,3 +47,6 @@ OTHER_FILES += \ + + + diff --git a/sowatchd/com.javispedro.sowatch.service.sowatch-service.service b/sowatchd/com.javispedro.sowatch.service.sowatch-service.service new file mode 100644 index 0000000..714d1c4 --- /dev/null +++ b/sowatchd/com.javispedro.sowatch.service.sowatch-service.service @@ -0,0 +1,3 @@ +[D-BUS Service] +Name=com.nokia.qtmobility.sfw.sowatch-service +Exec=/opt/sowatch/bin/sowatchd diff --git a/sowatchd/daemon.h b/sowatchd/daemon.h index 48125fb..249f525 100644 --- a/sowatchd/daemon.h +++ b/sowatchd/daemon.h @@ -13,7 +13,7 @@ namespace sowatch class Daemon : public QObject { - Q_OBJECT + Q_OBJECT public: explicit Daemon(QObject *parent = 0); diff --git a/sowatchd/global.h b/sowatchd/global.h new file mode 100644 index 0000000..45c2b13 --- /dev/null +++ b/sowatchd/global.h @@ -0,0 +1,11 @@ +#ifndef GLOBAL_H +#define GLOBAL_H + +#include "daemon.h" + +namespace sowatch +{ +extern sowatch::Daemon* daemon; +} + +#endif // GLOBAL_H diff --git a/sowatchd/main.cpp b/sowatchd/main.cpp index 0d7abb9..22e63a2 100644 --- a/sowatchd/main.cpp +++ b/sowatchd/main.cpp @@ -1,20 +1,79 @@ #include <QtGui/QApplication> +#include <QtServiceFramework/QServiceManager> +#include <QtServiceFramework/QRemoteServiceRegister> #include <sowatch.h> -#include "daemon.h" +#include "global.h" +#include "service.h" + +namespace sowatch +{ + Daemon* daemon; +} using namespace sowatch; +QTM_USE_NAMESPACE + + +static QString adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + QString pathInInstallDir; + const QString applicationDirPath = QCoreApplication::applicationDirPath(); + pathInInstallDir = QString::fromAscii("%1/../%2").arg(applicationDirPath, path); + + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; +#endif +#endif + return path; +} + +static void unregisterService() +{ + QServiceManager m; + m.removeService("sowatch-service"); +} -static Daemon* d; +static void registerService() +{ + unregisterService(); + QServiceManager m; + QString path = adjustPath("xml/service.xml"); + if (!m.addService(path)) { + qWarning() << "Cannot register sowatch-service" << m.error() << "from" << path; + } +} int main(int argc, char *argv[]) { - QApplication a(argc, argv); + QApplication a(argc, argv); // Some plugins might require a UI. QApplication::setOrganizationDomain("com.javispedro.sowatch"); QApplication::setOrganizationName("sowatch"); QApplication::setApplicationName("sowatchd"); - d = new Daemon(); + sowatch::daemon = new Daemon(); + + registerService(); + + QRemoteServiceRegister *serviceRegister = new QRemoteServiceRegister(); + QRemoteServiceRegister::Entry entry = + serviceRegister->createEntry<Service>("sowatch-service", + "com.javispedro.sowatch.service", "1.0"); + entry.setInstantiationType(QRemoteServiceRegister::PrivateInstance); + + serviceRegister->setQuitOnLastInstanceClosed(false); + serviceRegister->publishEntries("sowatchd"); + + int res = a.exec(); + + delete serviceRegister; + delete sowatch::daemon; - return a.exec(); + return res; } diff --git a/sowatchd/service.cpp b/sowatchd/service.cpp new file mode 100644 index 0000000..0b3777c --- /dev/null +++ b/sowatchd/service.cpp @@ -0,0 +1,15 @@ +#include "global.h" +#include "service.h" + +using namespace sowatch; + +Service::Service(QObject *parent) : + QObject(parent) +{ + +} + +void Service::terminate() +{ + QCoreApplication::exit(0); +} diff --git a/sowatchd/service.h b/sowatchd/service.h new file mode 100644 index 0000000..797dc3d --- /dev/null +++ b/sowatchd/service.h @@ -0,0 +1,26 @@ +#ifndef SERVICE_H +#define SERVICE_H + +#include <QtCore/QObject> +#include <QtCore/QList> +#include <QtCore/QSettings> + +#include <sowatch.h> + +namespace sowatch +{ + +class Service : public QObject +{ + Q_OBJECT +public: + explicit Service(QObject *parent = 0); + +public slots: + void terminate(); + +}; + +} + +#endif // SERVICE_H diff --git a/sowatchd/service.xml b/sowatchd/service.xml new file mode 100644 index 0000000..b2ebc06 --- /dev/null +++ b/sowatchd/service.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<SFW version="1.1"> +<service> + <name>sowatch-service</name> + <ipcaddress>sowatchd</ipcaddress> + <description>Sowatch Service</description> + <interface> + <name>com.javispedro.sowatch.service</name> + <version>1.0</version> + <description></description> + <capabilities></capabilities> + </interface> +</service> +</SFW> diff --git a/sowatchd/sowatchd.pro b/sowatchd/sowatchd.pro index 1e02404..af13c9e 100644 --- a/sowatchd/sowatchd.pro +++ b/sowatchd/sowatchd.pro @@ -9,11 +9,13 @@ TEMPLATE = app TARGET = sowatchd QT += core gui -CONFIG += console +CONFIG += mobility CONFIG -= app_bundle +MOBILITY += serviceframework SOURCES += main.cpp \ - daemon.cpp + daemon.cpp \ + service.cpp win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../libsowatch/release/ -lsowatch else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../libsowatch/debug/ -lsowatch @@ -24,8 +26,9 @@ INCLUDEPATH += $$PWD/../libsowatch DEPENDPATH += $$PWD/../libsowatch unix { - maemo5 { - target.path = /opt/sowatch + !isEmpty(MEEGO_VERSION_MAJOR)|maemo5 { + QMAKE_RPATHDIR += /opt/sowatch/lib + target.path = /opt/sowatch/bin } else { target.path = /usr/bin } @@ -33,6 +36,12 @@ unix { } HEADERS += \ - daemon.h - - + daemon.h \ + service.h \ + global.h + +xml.path = /opt/sowatch/xml +xml.files = service.xml +dbus.path = /usr/share/dbus-1/services +dbus.files = com.javispedro.sowatch.service.sowatch-service.service +INSTALLS += xml dbus diff --git a/sowatchui/main.cpp b/sowatchui/main.cpp new file mode 100644 index 0000000..54a65fa --- /dev/null +++ b/sowatchui/main.cpp @@ -0,0 +1,14 @@ +#include <QtGui/QApplication> +#include "qmlapplicationviewer.h" + +Q_DECL_EXPORT int main(int argc, char *argv[]) +{ + QScopedPointer<QApplication> app(createApplication(argc, argv)); + QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create()); + + viewer->setOrientation(QmlApplicationViewer::ScreenOrientationAuto); + viewer->setMainQmlFile(QLatin1String("qml/main.qml")); + viewer->showExpanded(); + + return app->exec(); +} diff --git a/sowatchui/qml/MainPage.qml b/sowatchui/qml/MainPage.qml new file mode 100644 index 0000000..45b72f3 --- /dev/null +++ b/sowatchui/qml/MainPage.qml @@ -0,0 +1,9 @@ +import QtQuick 1.1 +import com.nokia.meego 1.0 + +import "sowatch.js" as Sowatch + +Page { + tools: commonTools + +} diff --git a/sowatchui/qml/ServiceLoader.qml b/sowatchui/qml/ServiceLoader.qml new file mode 100644 index 0000000..8128ca7 --- /dev/null +++ b/sowatchui/qml/ServiceLoader.qml @@ -0,0 +1,7 @@ +import QtQuick 1.1 +import QtMobility.serviceframework 1.1 + +Service { + id: sowatch + interfaceName: "com.javispedro.sowatch.service" +} diff --git a/sowatchui/qml/main.qml b/sowatchui/qml/main.qml new file mode 100644 index 0000000..8697b6d --- /dev/null +++ b/sowatchui/qml/main.qml @@ -0,0 +1,43 @@ +import QtQuick 1.1 +import com.nokia.meego 1.0 + +import "sowatch.js" as Sowatch + +PageStackWindow { + id: appWindow + + initialPage: mainPage + + MainPage { + id: mainPage + } + + ToolBarLayout { + id: commonTools + visible: true + ToolIcon { + platformIconId: "toolbar-view-menu" + anchors.right: (parent === undefined) ? undefined : parent.right + onClicked: (myMenu.status == DialogStatus.Closed) ? myMenu.open() : myMenu.close() + } + } + + Menu { + id: myMenu + visualParent: pageStack + MenuLayout { + MenuItem { + text: qsTr("Start service") + onClicked: { + Sowatch.start(); + } + } + MenuItem { + text: qsTr("Stop service") + onClicked: { + Sowatch.stop(); + } + } + } + } +} diff --git a/sowatchui/qml/sowatch.js b/sowatchui/qml/sowatch.js new file mode 100644 index 0000000..f2d48dd --- /dev/null +++ b/sowatchui/qml/sowatch.js @@ -0,0 +1,29 @@ +var service = null; + +function getService() { + var component = Qt.createComponent("ServiceLoader.qml"); + if (component.status == Component.Ready) { + var loader = component.createObject(null); + service = loader.serviceObject; + } +} + +function checkService() { + if (service === null) { + getService(); + } +} + +function start() { + getService(); +} + +function stop() { + checkService(); + service.terminate(); +} + +function restart() { + stop(); + start(); +} diff --git a/sowatchui/qmlapplicationviewer/qmlapplicationviewer.cpp b/sowatchui/qmlapplicationviewer/qmlapplicationviewer.cpp new file mode 100644 index 0000000..8ba6e88 --- /dev/null +++ b/sowatchui/qmlapplicationviewer/qmlapplicationviewer.cpp @@ -0,0 +1,200 @@ +// checksum 0x78c version 0x60010 +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#include "qmlapplicationviewer.h" + +#include <QtCore/QDir> +#include <QtCore/QFileInfo> +#include <QtDeclarative/QDeclarativeComponent> +#include <QtDeclarative/QDeclarativeEngine> +#include <QtDeclarative/QDeclarativeContext> +#include <QtGui/QApplication> + +#include <qplatformdefs.h> // MEEGO_EDITION_HARMATTAN + +#ifdef HARMATTAN_BOOSTER +#include <MDeclarativeCache> +#endif + +#if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800 + +#include <qt_private/qdeclarativedebughelper_p.h> + +#if !defined(NO_JSDEBUGGER) +#include <jsdebuggeragent.h> +#endif +#if !defined(NO_QMLOBSERVER) +#include <qdeclarativeviewobserver.h> +#endif + +// Enable debugging before any QDeclarativeEngine is created +struct QmlJsDebuggingEnabler +{ + QmlJsDebuggingEnabler() + { + QDeclarativeDebugHelper::enableDebugging(); + } +}; + +// Execute code in constructor before first QDeclarativeEngine is instantiated +static QmlJsDebuggingEnabler enableDebuggingHelper; + +#endif // QMLJSDEBUGGER + +class QmlApplicationViewerPrivate +{ + QmlApplicationViewerPrivate(QDeclarativeView *view_) : view(view_) {} + + QString mainQmlFile; + QDeclarativeView *view; + friend class QmlApplicationViewer; + QString adjustPath(const QString &path); +}; + +QString QmlApplicationViewerPrivate::adjustPath(const QString &path) +{ +#ifdef Q_OS_UNIX +#ifdef Q_OS_MAC + if (!QDir::isAbsolutePath(path)) + return QCoreApplication::applicationDirPath() + + QLatin1String("/../Resources/") + path; +#else + QString pathInInstallDir; + const QString applicationDirPath = QCoreApplication::applicationDirPath(); + pathInInstallDir = QString::fromAscii("%1/../%2").arg(applicationDirPath, path); + + if (QFileInfo(pathInInstallDir).exists()) + return pathInInstallDir; +#endif +#endif + return path; +} + +QmlApplicationViewer::QmlApplicationViewer(QWidget *parent) + : QDeclarativeView(parent) + , d(new QmlApplicationViewerPrivate(this)) +{ + connect(engine(), SIGNAL(quit()), SLOT(close())); + setResizeMode(QDeclarativeView::SizeRootObjectToView); + // Qt versions prior to 4.8.0 don't have QML/JS debugging services built in +#if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800 +#if !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(d->view->engine()); +#endif +#if !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(d->view, d->view); +#endif +#endif +} + +QmlApplicationViewer::QmlApplicationViewer(QDeclarativeView *view, QWidget *parent) + : QDeclarativeView(parent) + , d(new QmlApplicationViewerPrivate(view)) +{ + connect(view->engine(), SIGNAL(quit()), view, SLOT(close())); + view->setResizeMode(QDeclarativeView::SizeRootObjectToView); + // Qt versions prior to 4.8.0 don't have QML/JS debugging services built in +#if defined(QMLJSDEBUGGER) && QT_VERSION < 0x040800 +#if !defined(NO_JSDEBUGGER) + new QmlJSDebugger::JSDebuggerAgent(d->view->engine()); +#endif +#if !defined(NO_QMLOBSERVER) + new QmlJSDebugger::QDeclarativeViewObserver(d->view, d->view); +#endif +#endif +} + +QmlApplicationViewer::~QmlApplicationViewer() +{ + delete d; +} + +QmlApplicationViewer *QmlApplicationViewer::create() +{ +#ifdef HARMATTAN_BOOSTER + return new QmlApplicationViewer(MDeclarativeCache::qDeclarativeView(), 0); +#else + return new QmlApplicationViewer(); +#endif +} + +void QmlApplicationViewer::setMainQmlFile(const QString &file) +{ + d->mainQmlFile = d->adjustPath(file); + d->view->setSource(QUrl::fromLocalFile(d->mainQmlFile)); +} + +void QmlApplicationViewer::addImportPath(const QString &path) +{ + d->view->engine()->addImportPath(d->adjustPath(path)); +} + +void QmlApplicationViewer::setOrientation(ScreenOrientation orientation) +{ +#if defined(Q_OS_SYMBIAN) + // If the version of Qt on the device is < 4.7.2, that attribute won't work + if (orientation != ScreenOrientationAuto) { + const QStringList v = QString::fromAscii(qVersion()).split(QLatin1Char('.')); + if (v.count() == 3 && (v.at(0).toInt() << 16 | v.at(1).toInt() << 8 | v.at(2).toInt()) < 0x040702) { + qWarning("Screen orientation locking only supported with Qt 4.7.2 and above"); + return; + } + } +#endif // Q_OS_SYMBIAN + + Qt::WidgetAttribute attribute; + switch (orientation) { +#if QT_VERSION < 0x040702 + // Qt < 4.7.2 does not yet have the Qt::WA_*Orientation attributes + case ScreenOrientationLockPortrait: + attribute = static_cast<Qt::WidgetAttribute>(128); + break; + case ScreenOrientationLockLandscape: + attribute = static_cast<Qt::WidgetAttribute>(129); + break; + default: + case ScreenOrientationAuto: + attribute = static_cast<Qt::WidgetAttribute>(130); + break; +#else // QT_VERSION < 0x040702 + case ScreenOrientationLockPortrait: + attribute = Qt::WA_LockPortraitOrientation; + break; + case ScreenOrientationLockLandscape: + attribute = Qt::WA_LockLandscapeOrientation; + break; + default: + case ScreenOrientationAuto: + attribute = Qt::WA_AutoOrientation; + break; +#endif // QT_VERSION < 0x040702 + }; + setAttribute(attribute, true); +} + +void QmlApplicationViewer::showExpanded() +{ +#if defined(Q_OS_SYMBIAN) || defined(MEEGO_EDITION_HARMATTAN) || defined(Q_WS_SIMULATOR) + d->view->showFullScreen(); +#elif defined(Q_WS_MAEMO_5) + d->view->showMaximized(); +#else + d->view->show(); +#endif +} + +QApplication *createApplication(int &argc, char **argv) +{ +#ifdef HARMATTAN_BOOSTER + return MDeclarativeCache::qApplication(argc, argv); +#else + return new QApplication(argc, argv); +#endif +} diff --git a/sowatchui/qmlapplicationviewer/qmlapplicationviewer.h b/sowatchui/qmlapplicationviewer/qmlapplicationviewer.h new file mode 100644 index 0000000..f8008f5 --- /dev/null +++ b/sowatchui/qmlapplicationviewer/qmlapplicationviewer.h @@ -0,0 +1,47 @@ +// checksum 0x82ed version 0x60010 +/* + This file was generated by the Qt Quick Application wizard of Qt Creator. + QmlApplicationViewer is a convenience class containing mobile device specific + code such as screen orientation handling. Also QML paths and debugging are + handled here. + It is recommended not to modify this file, since newer versions of Qt Creator + may offer an updated version of it. +*/ + +#ifndef QMLAPPLICATIONVIEWER_H +#define QMLAPPLICATIONVIEWER_H + +#include <QtDeclarative/QDeclarativeView> + +class QmlApplicationViewer : public QDeclarativeView +{ + Q_OBJECT + +public: + enum ScreenOrientation { + ScreenOrientationLockPortrait, + ScreenOrientationLockLandscape, + ScreenOrientationAuto + }; + + explicit QmlApplicationViewer(QWidget *parent = 0); + virtual ~QmlApplicationViewer(); + + static QmlApplicationViewer *create(); + + void setMainQmlFile(const QString &file); + void addImportPath(const QString &path); + + // Note that this will only have an effect on Symbian and Fremantle. + void setOrientation(ScreenOrientation orientation); + + void showExpanded(); + +private: + explicit QmlApplicationViewer(QDeclarativeView *view, QWidget *parent); + class QmlApplicationViewerPrivate *d; +}; + +QApplication *createApplication(int &argc, char **argv); + +#endif // QMLAPPLICATIONVIEWER_H diff --git a/sowatchui/qmlapplicationviewer/qmlapplicationviewer.pri b/sowatchui/qmlapplicationviewer/qmlapplicationviewer.pri new file mode 100644 index 0000000..57842a7 --- /dev/null +++ b/sowatchui/qmlapplicationviewer/qmlapplicationviewer.pri @@ -0,0 +1,146 @@ +# checksum 0x368d version 0x60010 +# This file was generated by the Qt Quick Application wizard of Qt Creator. +# The code below adds the QmlApplicationViewer to the project and handles the +# activation of QML debugging. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +QT += declarative + +SOURCES += $$PWD/qmlapplicationviewer.cpp +HEADERS += $$PWD/qmlapplicationviewer.h +INCLUDEPATH += $$PWD + +# Include JS debugger library if QMLJSDEBUGGER_PATH is set +!isEmpty(QMLJSDEBUGGER_PATH) { + include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) +} else { + DEFINES -= QMLJSDEBUGGER +} + +contains(CONFIG,qdeclarative-boostable):contains(MEEGO_EDITION,harmattan) { + DEFINES += HARMATTAN_BOOSTER +} +# This file was generated by an application wizard of Qt Creator. +# The code below handles deployment to Symbian and Maemo, aswell as copying +# of the application data to shadow build directories on desktop. +# It is recommended not to modify this file, since newer versions of Qt Creator +# may offer an updated version of it. + +defineTest(qtcAddDeployment) { +for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemsources = $${item}.sources + $$itemsources = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath= $$eval($${deploymentfolder}.target) + export($$itemsources) + export($$itempath) + DEPLOYMENT += $$item +} + +MAINPROFILEPWD = $$PWD + +symbian { + isEmpty(ICON):exists($${TARGET}.svg):ICON = $${TARGET}.svg + isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 +} else:win32 { + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, /, \\) + sourcePathSegments = $$split(source, \\) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments) + target = $$replace(target, /, \\) + !isEqual(source,$$target) { + !isEmpty(copyCommand):copyCommand += && + isEqual(QMAKE_DIR_SEP, \\) { + copyCommand += $(COPY_DIR) \"$$source\" \"$$target\" + } else { + source = $$replace(source, \\\\, /) + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + target = $$replace(target, \\\\, /) + copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\" + } + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } +} else:unix { + maemo5 { + desktopfile.files = $${TARGET}.desktop + desktopfile.path = /usr/share/applications/hildon + icon.files = $${TARGET}64.png + icon.path = /usr/share/icons/hicolor/64x64/apps + } else:!isEmpty(MEEGO_VERSION_MAJOR) { + desktopfile.files = $${TARGET}_harmattan.desktop + desktopfile.path = /usr/share/applications + icon.files = $${TARGET}80.png + icon.path = /usr/share/icons/hicolor/80x80/apps + } else { # Assumed to be a Desktop Unix + copyCommand = + for(deploymentfolder, DEPLOYMENTFOLDERS) { + source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) + source = $$replace(source, \\\\, /) + macx { + target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) + } else { + target = $$OUT_PWD/$$eval($${deploymentfolder}.target) + } + target = $$replace(target, \\\\, /) + sourcePathSegments = $$split(source, /) + targetFullPath = $$target/$$last(sourcePathSegments) + !isEqual(source,$$targetFullPath) { + !isEmpty(copyCommand):copyCommand += && + copyCommand += $(MKDIR) \"$$target\" + copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\" + } + } + !isEmpty(copyCommand) { + copyCommand = @echo Copying application data... && $$copyCommand + copydeploymentfolders.commands = $$copyCommand + first.depends = $(first) copydeploymentfolders + export(first.depends) + export(copydeploymentfolders.commands) + QMAKE_EXTRA_TARGETS += first copydeploymentfolders + } + } + installPrefix = /opt/$${TARGET} + for(deploymentfolder, DEPLOYMENTFOLDERS) { + item = item$${deploymentfolder} + itemfiles = $${item}.files + $$itemfiles = $$eval($${deploymentfolder}.source) + itempath = $${item}.path + $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target) + export($$itemfiles) + export($$itempath) + INSTALLS += $$item + } + + !isEmpty(desktopfile.path) { + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + INSTALLS += icon desktopfile + } + + target.path = $${installPrefix}/bin + export(target.path) + INSTALLS += target +} + +export (ICON) +export (INSTALLS) +export (DEPLOYMENT) +export (TARGET.EPOCHEAPSIZE) +export (TARGET.CAPABILITY) +export (LIBS) +export (QMAKE_EXTRA_TARGETS) +} diff --git a/sowatchui/sowatch.desktop b/sowatchui/sowatch.desktop new file mode 100644 index 0000000..d1e799d --- /dev/null +++ b/sowatchui/sowatch.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=Sowatch +Exec=/opt/sowatch/bin/sowatch +Icon=sowatch64 +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/sowatchui/sowatch.svg b/sowatchui/sowatch.svg new file mode 100644 index 0000000..566acfa --- /dev/null +++ b/sowatchui/sowatch.svg @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + height="44px" + version="1.1" + viewBox="0 0 44 44" + width="44px" + x="0px" + y="0px" + id="svg2" + inkscape:version="0.47 r22583" + sodipodi:docname="qt.svg"> + <metadata + id="metadata18"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs16"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 22 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="44 : 22 : 1" + inkscape:persp3d-origin="22 : 14.666667 : 1" + id="perspective2836" /> + </defs> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1020" + id="namedview14" + showgrid="false" + inkscape:zoom="21.454545" + inkscape:cx="49.412871" + inkscape:cy="21.894358" + inkscape:window-x="-4" + inkscape:window-y="-4" + inkscape:window-maximized="1" + inkscape:current-layer="g3" /> + <g + transform="matrix(0.18308778,0,0,0.18308778,6.6100946,3.2385199)" + id="g3"> + <path + d="M 43.09,0.3586 C 40.94,0.0036 38.84,-0.0824 36.81,0.0776 31.968136,0.39505671 27.122677,0.73638425 22.28,1.0696 9.62,2.0816 0,12.4996 0,26.8896 l 0,169.7 14.19,13.2 28.87,-209.42 0.03,-0.011 z" + style="fill:#006225" + id="path5" + sodipodi:nodetypes="cccccccc" /> + <path + d="m 174.4,160 c 0,12.5 -7.75,24.07 -17.57,25.77 L 14.23,209.73 V 25.93 C 14.23,9.21 27.57,-2.27 43.12,0.3 l 131.3,21.52 v 138.2 z" + style="fill:#80c342" + id="path7" /> + <path + d="m 154.9,80.96 -12.96,-0.598 0,0.278 6.945,0.32 6.016,0 z" + style="fill:#006225" + id="path11" /> + <path + d="m 144.6,135.6 c 0.66,0.328 1.43,0.476 2.351,0.476 0.161,0 0.329,-0.004 0.497,-0.016 2.55,-0.148 5.32,-0.933 8.343,-2.308 h -6.015 c -1.821,0.832 -3.532,1.457 -5.176,1.848 z" + style="fill:#006225" + id="path13" /> + <path + id="path17" + style="fill:#ffffff" + d="m 91.15,132.4 c 2.351,-6.051 3.511,-17.91 3.511,-35.62 0,-15.89 -1.148,-26.82 -3.484,-32.81 -2.336,-6.027 -5.832,-9.281 -10.52,-9.691 -0.359,-0.031 -0.714,-0.051 -1.058,-0.051 -4.34,0 -7.68,2.535 -10.01,7.625 -2.52,5.543 -3.793,17.04 -3.793,34.44 0,16.82 1.238,28.75 3.734,35.75 2.356,6.672 5.879,9.976 10.5,9.976 0.207,0 0.41,-0.008 0.621,-0.019 4.633,-0.293 8.121,-3.496 10.49,-9.602 m 17.98,3.75 c -4.117,9.707 -10.39,16.06 -18.99,19 0.867,4.449 2.176,7.441 3.922,9.019 1.351,1.211 3.433,1.821 6.222,1.821 0.805,0 1.668,-0.055 2.59,-0.157 v 13.12 l -5.961,0.782 c -1.758,0.23 -3.426,0.343 -5.004,0.343 -5.218,0 -9.445,-1.265 -12.62,-3.824 -4.207,-3.379 -7.308,-9.894 -9.297,-19.54 -9.136,-1.945 -16.26,-7.754 -21.19,-17.5 -5.004,-9.902 -7.551,-24.39 -7.551,-43.34 0,-20.43 3.484,-35.51 10.34,-45.07 5.789,-8.07 13.86,-12.04 24.02,-12.04 1.629,0 3.309,0.102 5.043,0.305 11.95,1.375 20.62,7.016 26.26,16.79 5.535,9.562 8.254,23.27 8.254,41.26 0,16.48 -2,29.45 -6.043,39.02 z M 130.4,45.91 l 11.52,1.238 0,20.21 12.96,0.914 0,12.68 -12.96,-0.598 0,46.33 c 0,4.032 0.445,6.625 1.34,7.789 0.8,1.067 2.046,1.594 3.71,1.594 0.161,0 0.329,-0.004 0.497,-0.016 2.55,-0.148 5.32,-0.933 8.343,-2.308 v 11.65 c -5.136,2.258 -10.18,3.598 -15.12,4.02 -0.718,0.055 -1.41,0.086 -2.078,0.086 -4.48,0 -7.906,-1.301 -10.25,-3.934 -2.73,-3.051 -4.09,-7.949 -4.09,-14.67 V 79.535 L 118.046,79.25 V 65.66 l 7.586,0.547 4.773,-20.3 z" /> + <path + d="m 100.3,166 c 0.809,0 1.672,-0.055 2.59,-0.157 H 98.054 C 98.73,165.949 99.507,166 100.3,166 z" + style="fill:#006225" + id="path19" /> + <path + id="path21" + style="fill:#006225" + d="m 84.85,63.98 c 2.336,5.997 3.484,16.92 3.484,32.81 0,17.7 -1.16,29.57 -3.512,35.62 -1.894,4.879 -4.527,7.902 -7.863,9.07 0.965,0.368 1.992,0.551 3.078,0.551 0.207,0 0.41,-0.008 0.621,-0.019 4.633,-0.293 8.121,-3.496 10.49,-9.602 2.351,-6.051 3.511,-17.91 3.511,-35.62 0,-15.89 -1.148,-26.82 -3.484,-32.81 -2.336,-6.027 -5.832,-9.281 -10.52,-9.691 -0.359,-0.031 -0.714,-0.051 -1.058,-0.051 -1.09,0 -2.117,0.16 -3.082,0.481 h -0.004 c 3.601,1.121 6.379,4.215 8.336,9.261 z m -2.344,114.3 c -0.113,-0.05 -0.227,-0.105 -0.336,-0.16 -0.012,-0.004 -0.023,-0.012 -0.035,-0.015 -0.102,-0.051 -0.207,-0.106 -0.309,-0.157 -0.019,-0.011 -0.039,-0.019 -0.058,-0.031 -0.09,-0.051 -0.184,-0.098 -0.278,-0.148 -0.027,-0.016 -0.054,-0.036 -0.086,-0.051 -0.082,-0.043 -0.164,-0.09 -0.242,-0.137 -0.039,-0.023 -0.078,-0.047 -0.113,-0.07 -0.07,-0.039 -0.145,-0.082 -0.215,-0.125 -0.047,-0.031 -0.094,-0.059 -0.14,-0.09 -0.059,-0.039 -0.118,-0.074 -0.176,-0.113 -0.059,-0.039 -0.114,-0.075 -0.168,-0.114 -0.051,-0.031 -0.102,-0.066 -0.149,-0.097 -0.066,-0.047 -0.132,-0.094 -0.195,-0.137 -0.039,-0.027 -0.078,-0.055 -0.113,-0.082 -0.078,-0.055 -0.153,-0.113 -0.231,-0.172 -0.023,-0.016 -0.05,-0.035 -0.078,-0.055 -0.098,-0.078 -0.199,-0.156 -0.297,-0.234 -4.207,-3.379 -7.308,-9.894 -9.297,-19.54 -9.136,-1.945 -16.26,-7.754 -21.19,-17.5 -5.004,-9.902 -7.551,-24.39 -7.551,-43.34 0,-20.43 3.484,-35.51 10.34,-45.07 5.789,-8.07 13.86,-12.04 24.02,-12.04 h -6.351 c -10.15,0.008 -18.22,3.977 -24,12.04 -6.855,9.563 -10.34,24.64 -10.34,45.07 0,18.95 2.547,33.44 7.551,43.34 4.934,9.75 12.05,15.56 21.19,17.5 1.989,9.641 5.09,16.16 9.297,19.54 3.176,2.559 7.403,3.824 12.62,3.824 0.098,0 0.199,0 0.297,-0.004 h 5.539 c -3.406,-0.05 -6.383,-0.66 -8.906,-1.828 L 82.498,178.28 z M 128.4,145.6 c -2.73,-3.051 -4.09,-7.949 -4.09,-14.67 V 79.57 l -6.226,-0.285 v -13.59 h -6.016 v 3.035 c 0.871,3.273 1.555,6.82 2.063,10.64 l 4.164,0.192 v 51.36 c 0,6.723 1.367,11.62 4.09,14.67 2.343,2.633 5.765,3.934 10.25,3.934 h 6.015 c -4.48,0 -7.906,-1.301 -10.25,-3.934 z m 2.043,-99.66 -6.016,0 -4.668,19.88 5.911,0.422 4.773,-20.3 z" /> + </g> +</svg> diff --git a/sowatchui/sowatch64.png b/sowatchui/sowatch64.png Binary files differnew file mode 100644 index 0000000..707d5c4 --- /dev/null +++ b/sowatchui/sowatch64.png diff --git a/sowatchui/sowatch80.png b/sowatchui/sowatch80.png Binary files differnew file mode 100644 index 0000000..6ad8096 --- /dev/null +++ b/sowatchui/sowatch80.png diff --git a/sowatchui/sowatch_harmattan.desktop b/sowatchui/sowatch_harmattan.desktop new file mode 100644 index 0000000..64383b1 --- /dev/null +++ b/sowatchui/sowatch_harmattan.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Name=Sowatch +Exec=/usr/bin/invoker --type=d -s /opt/sowatch/bin/sowatch +Icon=/usr/share/icons/hicolor/80x80/apps/sowatch80.png +X-Window-Icon= +X-HildonDesk-ShowInToolbar=true +X-Osso-Type=application/x-executable diff --git a/sowatchui/sowatchui.pro b/sowatchui/sowatchui.pro new file mode 100644 index 0000000..297e394 --- /dev/null +++ b/sowatchui/sowatchui.pro @@ -0,0 +1,48 @@ +TARGET=sowatch + +# Add more folders to ship with the application, here +qml_folder.source = qml +qml_folder.target = . +DEPLOYMENTFOLDERS = qml_folder + +# Additional import path used to resolve QML modules in Creator's code model +QML_IMPORT_PATH = + +symbian:TARGET.UID3 = 0xE5EBE65C + +# Smart Installer package's UID +# This UID is from the protected range and therefore the package will +# fail to install if self-signed. By default qmake uses the unprotected +# range value if unprotected UID is defined for the application and +# 0x2002CCCF value if protected UID is given to the application +#symbian:DEPLOYMENT.installer_header = 0x2002CCCF + +# Allow network access on Symbian +symbian:TARGET.CAPABILITY += NetworkServices + +# If your application uses the Qt Mobility libraries, uncomment the following +# lines and add the respective components to the MOBILITY variable. +CONFIG += mobility +MOBILITY += serviceframework + +# Speed up launching on MeeGo/Harmattan when using applauncherd daemon +CONFIG += qdeclarative-boostable + +# Add dependency to Symbian components +# CONFIG += qt-components + +# The .cpp file which was generated for your project. Feel free to hack it. +SOURCES += main.cpp + +# Please do not modify the following two lines. Required for deployment. +include(qmlapplicationviewer/qmlapplicationviewer.pri) +qtcAddDeployment() + +OTHER_FILES += \ + qml/MainPage.qml \ + qml/main.qml \ + sowatch_harmattan.desktop \ + sowatch.desktop + + + diff --git a/sysinfowatchlet/sysinfowatchlet.pro b/sysinfowatchlet/sysinfowatchlet.pro index ebbaf9c..129bbc9 100644 --- a/sysinfowatchlet/sysinfowatchlet.pro +++ b/sysinfowatchlet/sysinfowatchlet.pro @@ -24,8 +24,9 @@ INCLUDEPATH += $$PWD/../libsowatch DEPENDPATH += $$PWD/../libsowatch unix:!symbian { - maemo5 { - target.path = /opt/sowatch/watchlets + !isEmpty(MEEGO_VERSION_MAJOR)|maemo5 { + QMAKE_RPATHDIR += /opt/sowatch/lib + target.path = /opt/sowatch/lib/watchlets } else { target.path = /usr/lib/sowatch/watchlets } |