From e8781ec2d43ec3f7f905e20fc76b1910e83ee0c8 Mon Sep 17 00:00:00 2001
From: "Javier S. Pedro" <maemo@javispedro.com>
Date: Mon, 17 Oct 2011 20:54:22 +0200
Subject: Major change: sowatchd is now a QtM service

---
 .../qmlapplicationviewer/qmlapplicationviewer.cpp  | 200 +++++++++++++++++++++
 .../qmlapplicationviewer/qmlapplicationviewer.h    |  47 +++++
 .../qmlapplicationviewer/qmlapplicationviewer.pri  | 146 +++++++++++++++
 3 files changed, 393 insertions(+)
 create mode 100644 sowatchui/qmlapplicationviewer/qmlapplicationviewer.cpp
 create mode 100644 sowatchui/qmlapplicationviewer/qmlapplicationviewer.h
 create mode 100644 sowatchui/qmlapplicationviewer/qmlapplicationviewer.pri

(limited to 'sowatchui/qmlapplicationviewer')

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)
+}
-- 
cgit v1.2.3