From 17d11b7be38e359b25231a03f946392a8d43e31b Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@nokia.com>
Date: Fri, 10 Dec 2010 12:27:33 +0100
Subject: [PATCH] Update qmlobserver with latest qmlviewer patches

Update qmlobserver with changes in qmlviewer until 376e636eccedb8d8bb.
---
 .../qtcreator/qml/qmlobserver/Info_mac.plist  |  31 +
 .../{content => browser}/Browser.qml          |  50 +-
 .../qml/qmlobserver/browser/browser.qrc       |   9 +
 .../{content => browser}/images/folder.png    | Bin
 .../{content => browser}/images/titlebar.png  | Bin
 .../{content => browser}/images/titlebar.sci  |   0
 .../{content => browser}/images/up.png        | Bin
 .../qml/qmlobserver/deviceorientation.cpp     |   5 +
 .../qml/qmlobserver/deviceorientation.h       |   3 +
 .../deviceorientation_harmattan.cpp           | 161 ++++++
 .../qmlobserver/deviceorientation_maemo5.cpp  |  53 +-
 .../qmlobserver/deviceorientation_symbian.cpp | 192 +++++++
 share/qtcreator/qml/qmlobserver/main.cpp      | 541 +++++++++++-------
 .../qml/qmlobserver/qdeclarativetester.cpp    |  62 +-
 .../qml/qmlobserver/qdeclarativetester.h      |   5 +-
 share/qtcreator/qml/qmlobserver/qml.pri       |  29 +-
 .../qtcreator/qml/qmlobserver/qmlobserver.pro |  41 +-
 .../qtcreator/qml/qmlobserver/qmlruntime.cpp  | 401 ++++++++-----
 share/qtcreator/qml/qmlobserver/qmlruntime.h  |  14 +-
 .../qtcreator/qml/qmlobserver/qmlruntime.qrc  |   9 -
 .../qml/qmlobserver/startup/Logo.qml          | 179 ++++++
 .../qml/qmlobserver/startup/qt-back.png       | Bin 0 -> 3549 bytes
 .../qml/qmlobserver/startup/qt-blue.jpg       | Bin 0 -> 20900 bytes
 .../qml/qmlobserver/startup/qt-front.png      | Bin 0 -> 3318 bytes
 .../qml/qmlobserver/startup/qt-sketch.jpg     | Bin 0 -> 17048 bytes
 .../qml/qmlobserver/startup/qt-text.png       | Bin 0 -> 14565 bytes
 .../qml/qmlobserver/startup/quick-blur.png    | Bin 0 -> 2826 bytes
 .../qml/qmlobserver/startup/quick-regular.png | Bin 0 -> 1399 bytes
 .../qml/qmlobserver/startup/shadow.png        | Bin 0 -> 1592 bytes
 .../qml/qmlobserver/startup/startup.qml       | 173 ++++++
 .../qml/qmlobserver/startup/startup.qrc       |  16 +
 .../qml/qmlobserver/startup/white-star.png    | Bin 0 -> 2651 bytes
 32 files changed, 1559 insertions(+), 415 deletions(-)
 rename share/qtcreator/qml/qmlobserver/{content => browser}/Browser.qml (82%)
 create mode 100644 share/qtcreator/qml/qmlobserver/browser/browser.qrc
 rename share/qtcreator/qml/qmlobserver/{content => browser}/images/folder.png (100%)
 rename share/qtcreator/qml/qmlobserver/{content => browser}/images/titlebar.png (100%)
 rename share/qtcreator/qml/qmlobserver/{content => browser}/images/titlebar.sci (100%)
 rename share/qtcreator/qml/qmlobserver/{content => browser}/images/up.png (100%)
 create mode 100644 share/qtcreator/qml/qmlobserver/deviceorientation_harmattan.cpp
 create mode 100644 share/qtcreator/qml/qmlobserver/deviceorientation_symbian.cpp
 delete mode 100644 share/qtcreator/qml/qmlobserver/qmlruntime.qrc
 create mode 100644 share/qtcreator/qml/qmlobserver/startup/Logo.qml
 create mode 100644 share/qtcreator/qml/qmlobserver/startup/qt-back.png
 create mode 100644 share/qtcreator/qml/qmlobserver/startup/qt-blue.jpg
 create mode 100644 share/qtcreator/qml/qmlobserver/startup/qt-front.png
 create mode 100644 share/qtcreator/qml/qmlobserver/startup/qt-sketch.jpg
 create mode 100644 share/qtcreator/qml/qmlobserver/startup/qt-text.png
 create mode 100644 share/qtcreator/qml/qmlobserver/startup/quick-blur.png
 create mode 100644 share/qtcreator/qml/qmlobserver/startup/quick-regular.png
 create mode 100644 share/qtcreator/qml/qmlobserver/startup/shadow.png
 create mode 100644 share/qtcreator/qml/qmlobserver/startup/startup.qml
 create mode 100644 share/qtcreator/qml/qmlobserver/startup/startup.qrc
 create mode 100644 share/qtcreator/qml/qmlobserver/startup/white-star.png

diff --git a/share/qtcreator/qml/qmlobserver/Info_mac.plist b/share/qtcreator/qml/qmlobserver/Info_mac.plist
index 80ca6a35269..08775479baf 100644
--- a/share/qtcreator/qml/qmlobserver/Info_mac.plist
+++ b/share/qtcreator/qml/qmlobserver/Info_mac.plist
@@ -14,5 +14,36 @@
 	<string>@TYPEINFO@</string>
 	<key>CFBundleExecutable</key>
 	<string>@EXECUTABLE@</string>
+        <key>UTExportedTypeDeclarations</key>
+          <array>
+            <dict>
+              <key>UTTypeIdentifier</key>
+              <string>com.nokia.qt.qml</string>
+              <key>UTTypeDescription</key>
+              <string>Qt Markup Language</string>
+              <key>UTTypeConformsTo</key>
+              <array>
+                <string>public.plain-text</string>
+              </array>
+              <key>UTTypeTagSpecification</key>
+              <dict>
+                <key>public.filename-extension</key>
+                <array>
+                  <string>qml</string>
+                </array>
+              </dict>
+            </dict>
+          </array>
+        <key>CFBundleDocumentTypes</key>
+          <array>
+            <dict>
+              <key>LSItemContentTypes</key>
+                <array>
+                  <string>com.nokia.qt.qml</string>
+                </array>
+              <key>CFBundleTypeRole</key>
+              <string>Viewer</string>
+            </dict>
+          </array>
 </dict>
 </plist>
diff --git a/share/qtcreator/qml/qmlobserver/content/Browser.qml b/share/qtcreator/qml/qmlobserver/browser/Browser.qml
similarity index 82%
rename from share/qtcreator/qml/qmlobserver/content/Browser.qml
rename to share/qtcreator/qml/qmlobserver/browser/Browser.qml
index ff2bb476473..968d077c4e2 100644
--- a/share/qtcreator/qml/qmlobserver/content/Browser.qml
+++ b/share/qtcreator/qml/qmlobserver/browser/Browser.qml
@@ -39,12 +39,12 @@
 **
 ****************************************************************************/
 
-import Qt 4.7
+import QtQuick 1.0
 import Qt.labs.folderlistmodel 1.0
 
 Rectangle {
     id: root
-    property bool keyPressed: false
+    property bool showFocusHighlight: false
     property variant folders: folders1
     property variant view: view1
     width: 320
@@ -95,6 +95,19 @@ Rectangle {
         view.focus = true;
         folders.folder = path;
     }
+    function keyPressed(key) {
+        switch (key) {
+            case Qt.Key_Up:
+            case Qt.Key_Down:
+            case Qt.Key_Left:
+            case Qt.Key_Right:
+                root.showFocusHighlight = true;
+            break;
+            default:
+                // do nothing
+            break;
+        }
+    }
 
     Component {
         id: folderDelegate
@@ -113,6 +126,7 @@ Rectangle {
             Rectangle {
                 id: highlight; visible: false
                 anchors.fill: parent
+                color: palette.highlight
                 gradient: Gradient {
                     GradientStop { id: t1; position: 0.0; color: palette.highlight }
                     GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
@@ -128,12 +142,16 @@ Rectangle {
                 text: fileName
                 anchors.leftMargin: 54
                 font.pixelSize: 32
-                color: (wrapper.ListView.isCurrentItem && root.keyPressed) ? palette.highlightedText : palette.windowText
+                color: (wrapper.ListView.isCurrentItem && root.showFocusHighlight) ? palette.highlightedText : palette.windowText
                 elide: Text.ElideRight
             }
             MouseArea {
                 id: mouseRegion
                 anchors.fill: parent
+                onPressed: {
+                    root.showFocusHighlight = false;
+                    wrapper.ListView.view.currentIndex = index;
+                }
                 onClicked: { if (folders == wrapper.ListView.view.model) launch() }
             }
             states: [
@@ -155,7 +173,15 @@ Rectangle {
         width: parent.width
         model: folders1
         delegate: folderDelegate
-        highlight: Rectangle { color: palette.highlight; visible: root.keyPressed && view1.count != 0 }
+        highlight: Rectangle {
+            color: palette.highlight
+            visible: root.showFocusHighlight && view1.count != 0
+            gradient: Gradient {
+                GradientStop { id: t1; position: 0.0; color: palette.highlight }
+                GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
+            }
+            width: view1.currentItem == null ? 0 : view1.currentItem.width
+        }
         highlightMoveSpeed: 1000
         pressDelay: 100
         focus: true
@@ -186,7 +212,7 @@ Rectangle {
                 NumberAnimation { properties: "x"; duration: 250 }
             }
         ]
-        Keys.onPressed: { root.keyPressed = true; }
+        Keys.onPressed: root.keyPressed(event.key)
     }
 
     ListView {
@@ -197,7 +223,15 @@ Rectangle {
         width: parent.width
         model: folders2
         delegate: folderDelegate
-        highlight: Rectangle { color: palette.highlight; visible: root.keyPressed && view2.count != 0 }
+        highlight: Rectangle {
+            color: palette.highlight
+            visible: root.showFocusHighlight && view2.count != 0
+            gradient: Gradient {
+                GradientStop { id: t1; position: 0.0; color: palette.highlight }
+                GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
+            }
+            width: view1.currentItem == null ? 0 : view1.currentItem.width
+        }
         highlightMoveSpeed: 1000
         pressDelay: 100
         states: [
@@ -225,11 +259,11 @@ Rectangle {
                 NumberAnimation { properties: "x"; duration: 250 }
             }
         ]
-        Keys.onPressed: { root.keyPressed = true; }
+        Keys.onPressed: root.keyPressed(event.key)
     }
 
     Keys.onPressed: {
-        root.keyPressed = true;
+        root.keyPressed(event.key);
         if (event.key == Qt.Key_Return || event.key == Qt.Key_Select || event.key == Qt.Key_Right) {
             view.currentItem.launch();
             event.accepted = true;
diff --git a/share/qtcreator/qml/qmlobserver/browser/browser.qrc b/share/qtcreator/qml/qmlobserver/browser/browser.qrc
new file mode 100644
index 00000000000..9c688e75215
--- /dev/null
+++ b/share/qtcreator/qml/qmlobserver/browser/browser.qrc
@@ -0,0 +1,9 @@
+<RCC>
+    <qresource prefix="/browser">
+        <file>Browser.qml</file>
+        <file>images/up.png</file>
+        <file>images/folder.png</file>
+        <file>images/titlebar.sci</file>
+        <file>images/titlebar.png</file>
+    </qresource>
+</RCC>
diff --git a/share/qtcreator/qml/qmlobserver/content/images/folder.png b/share/qtcreator/qml/qmlobserver/browser/images/folder.png
similarity index 100%
rename from share/qtcreator/qml/qmlobserver/content/images/folder.png
rename to share/qtcreator/qml/qmlobserver/browser/images/folder.png
diff --git a/share/qtcreator/qml/qmlobserver/content/images/titlebar.png b/share/qtcreator/qml/qmlobserver/browser/images/titlebar.png
similarity index 100%
rename from share/qtcreator/qml/qmlobserver/content/images/titlebar.png
rename to share/qtcreator/qml/qmlobserver/browser/images/titlebar.png
diff --git a/share/qtcreator/qml/qmlobserver/content/images/titlebar.sci b/share/qtcreator/qml/qmlobserver/browser/images/titlebar.sci
similarity index 100%
rename from share/qtcreator/qml/qmlobserver/content/images/titlebar.sci
rename to share/qtcreator/qml/qmlobserver/browser/images/titlebar.sci
diff --git a/share/qtcreator/qml/qmlobserver/content/images/up.png b/share/qtcreator/qml/qmlobserver/browser/images/up.png
similarity index 100%
rename from share/qtcreator/qml/qmlobserver/content/images/up.png
rename to share/qtcreator/qml/qmlobserver/browser/images/up.png
diff --git a/share/qtcreator/qml/qmlobserver/deviceorientation.cpp b/share/qtcreator/qml/qmlobserver/deviceorientation.cpp
index e7c70d5fde7..d3014ad150f 100644
--- a/share/qtcreator/qml/qmlobserver/deviceorientation.cpp
+++ b/share/qtcreator/qml/qmlobserver/deviceorientation.cpp
@@ -53,6 +53,11 @@ public:
         return m_orientation;
     }
 
+    void pauseListening() {
+    }
+    void resumeListening() {
+    }
+
     void setOrientation(Orientation o) {
         if (o != m_orientation) {
             m_orientation = o;
diff --git a/share/qtcreator/qml/qmlobserver/deviceorientation.h b/share/qtcreator/qml/qmlobserver/deviceorientation.h
index 3bad5bec012..88ceb1bdae6 100644
--- a/share/qtcreator/qml/qmlobserver/deviceorientation.h
+++ b/share/qtcreator/qml/qmlobserver/deviceorientation.h
@@ -63,6 +63,9 @@ public:
     virtual Orientation orientation() const = 0;
     virtual void setOrientation(Orientation) = 0;
 
+    virtual void pauseListening() = 0;
+    virtual void resumeListening() = 0;
+
     static DeviceOrientation *instance();
 
 signals:
diff --git a/share/qtcreator/qml/qmlobserver/deviceorientation_harmattan.cpp b/share/qtcreator/qml/qmlobserver/deviceorientation_harmattan.cpp
new file mode 100644
index 00000000000..22f9f4c51fb
--- /dev/null
+++ b/share/qtcreator/qml/qmlobserver/deviceorientation_harmattan.cpp
@@ -0,0 +1,161 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "deviceorientation.h"
+#include <QtDBus>
+#include <QDebug>
+
+#define ORIENTATION_SERVICE "com.nokia.SensorService"
+#define ORIENTATION_PATH "/org/maemo/contextkit/Screen/TopEdge"
+#define CONTEXT_INTERFACE "org.maemo.contextkit.Property"
+#define CONTEXT_CHANGED "ValueChanged"
+#define CONTEXT_SUBSCRIBE "Subscribe"
+#define CONTEXT_UNSUBSCRIBE "Unsubscribe"
+#define CONTEXT_GET "Get"
+
+
+class HarmattanOrientation : public DeviceOrientation
+{
+    Q_OBJECT
+public:
+    HarmattanOrientation()
+        : o(UnknownOrientation), sensorEnabled(false)
+    {
+        resumeListening();
+        // connect to the orientation change signal
+        bool ok = QDBusConnection::systemBus().connect(ORIENTATION_SERVICE, ORIENTATION_PATH,
+                CONTEXT_INTERFACE,
+                CONTEXT_CHANGED,
+                this,
+                SLOT(deviceOrientationChanged(QList<QVariant>,quint64)));
+//        qDebug() << "connection OK" << ok;
+        QDBusMessage reply = QDBusConnection::systemBus().call(
+                QDBusMessage::createMethodCall(ORIENTATION_SERVICE, ORIENTATION_PATH,
+                                               CONTEXT_INTERFACE, CONTEXT_GET));
+        if (reply.type() != QDBusMessage::ErrorMessage) {
+            QList<QVariant> args;
+            qvariant_cast<QDBusArgument>(reply.arguments().at(0)) >> args;
+            deviceOrientationChanged(args, 0);
+        }
+    }
+
+    ~HarmattanOrientation()
+    {
+        // unsubscribe from the orientation sensor
+        if (sensorEnabled)
+            QDBusConnection::systemBus().call(
+                QDBusMessage::createMethodCall(ORIENTATION_SERVICE, ORIENTATION_PATH,
+                                               CONTEXT_INTERFACE, CONTEXT_UNSUBSCRIBE));
+    }
+
+    inline Orientation orientation() const
+    {
+        return o;
+    }
+
+    void setOrientation(Orientation)
+    {
+    }
+
+    void pauseListening() {
+        if (sensorEnabled) {
+            // unsubscribe from the orientation sensor
+            QDBusConnection::systemBus().call(
+                    QDBusMessage::createMethodCall(ORIENTATION_SERVICE, ORIENTATION_PATH,
+                                                   CONTEXT_INTERFACE, CONTEXT_UNSUBSCRIBE));
+            sensorEnabled = false;
+        }
+    }
+
+    void resumeListening() {
+        if (!sensorEnabled) {
+            // subscribe to the orientation sensor
+            QDBusMessage reply = QDBusConnection::systemBus().call(
+                    QDBusMessage::createMethodCall(ORIENTATION_SERVICE, ORIENTATION_PATH,
+                                                   CONTEXT_INTERFACE, CONTEXT_SUBSCRIBE));
+
+            if (reply.type() == QDBusMessage::ErrorMessage) {
+                qWarning("Unable to retrieve device orientation: %s", qPrintable(reply.errorMessage()));
+            } else {
+                sensorEnabled = true;
+            }
+        }
+    }
+
+private Q_SLOTS:
+    void deviceOrientationChanged(QList<QVariant> args,quint64)
+    {
+        if (args.count() == 0)
+            return;
+        Orientation newOrientation = toOrientation(args.at(0).toString());
+        if (newOrientation != o) {
+            o = newOrientation;
+            emit orientationChanged();
+        }
+//        qDebug() << "orientation" << args.at(0).toString();
+    }
+
+private:
+    static Orientation toOrientation(const QString &nativeOrientation)
+    {
+        if (nativeOrientation == "top")
+            return Landscape;
+        else if (nativeOrientation == "left")
+            return Portrait;
+        else if (nativeOrientation == "bottom")
+            return LandscapeInverted;
+        else if (nativeOrientation == "right")
+            return PortraitInverted;
+        return UnknownOrientation;
+    }
+
+private:
+    Orientation o;
+    bool sensorEnabled;
+};
+
+DeviceOrientation* DeviceOrientation::instance()
+{
+    static HarmattanOrientation *o = new HarmattanOrientation;
+    return o;
+}
+
+#include "deviceorientation_harmattan.moc"
diff --git a/share/qtcreator/qml/qmlobserver/deviceorientation_maemo5.cpp b/share/qtcreator/qml/qmlobserver/deviceorientation_maemo5.cpp
index e942579b70d..a324820d5fa 100644
--- a/share/qtcreator/qml/qmlobserver/deviceorientation_maemo5.cpp
+++ b/share/qtcreator/qml/qmlobserver/deviceorientation_maemo5.cpp
@@ -50,23 +50,9 @@ class MaemoOrientation : public DeviceOrientation
     Q_OBJECT
 public:
     MaemoOrientation()
-        : o(UnknownOrientation)
+        : o(UnknownOrientation), sensorEnabled(false)
     {
-        // enable the orientation sensor
-        QDBusConnection::systemBus().call(
-                QDBusMessage::createMethodCall(MCE_SERVICE, MCE_REQUEST_PATH,
-                                               MCE_REQUEST_IF, MCE_ACCELEROMETER_ENABLE_REQ));
-
-        // query the initial orientation
-        QDBusMessage reply = QDBusConnection::systemBus().call(
-                QDBusMessage::createMethodCall(MCE_SERVICE, MCE_REQUEST_PATH,
-                                               MCE_REQUEST_IF, MCE_DEVICE_ORIENTATION_GET));
-        if (reply.type() == QDBusMessage::ErrorMessage) {
-            qWarning("Unable to retrieve device orientation: %s", qPrintable(reply.errorMessage()));
-        } else {
-            o = toOrientation(reply.arguments().value(0).toString());
-        }
-
+        resumeListening();
         // connect to the orientation change signal
         QDBusConnection::systemBus().connect(QString(), MCE_SIGNAL_PATH, MCE_SIGNAL_IF,
                 MCE_DEVICE_ORIENTATION_SIG,
@@ -91,6 +77,40 @@ public:
     {
     }
 
+    void pauseListening() {
+        if (sensorEnabled) {
+            // disable the orientation sensor
+            QDBusConnection::systemBus().call(
+                    QDBusMessage::createMethodCall(MCE_SERVICE, MCE_REQUEST_PATH,
+                                                   MCE_REQUEST_IF, MCE_ACCELEROMETER_DISABLE_REQ));
+            sensorEnabled = false;
+        }
+    }
+
+    void resumeListening() {
+        if (!sensorEnabled) {
+            // enable the orientation sensor
+            QDBusConnection::systemBus().call(
+                    QDBusMessage::createMethodCall(MCE_SERVICE, MCE_REQUEST_PATH,
+                                                   MCE_REQUEST_IF, MCE_ACCELEROMETER_ENABLE_REQ));
+
+            QDBusMessage reply = QDBusConnection::systemBus().call(
+                    QDBusMessage::createMethodCall(MCE_SERVICE, MCE_REQUEST_PATH,
+                                                   MCE_REQUEST_IF, MCE_DEVICE_ORIENTATION_GET));
+
+            if (reply.type() == QDBusMessage::ErrorMessage) {
+                qWarning("Unable to retrieve device orientation: %s", qPrintable(reply.errorMessage()));
+            } else {
+                Orientation orientation = toOrientation(reply.arguments().value(0).toString());
+                if (o != orientation) {
+                    o = orientation;
+                    emit orientationChanged();
+                }
+                sensorEnabled = true;
+            }
+        }
+    }
+
 private Q_SLOTS:
     void deviceOrientationChanged(const QString &newOrientation)
     {
@@ -116,6 +136,7 @@ private:
 
 private:
     Orientation o;
+    bool sensorEnabled;
 };
 
 DeviceOrientation* DeviceOrientation::instance()
diff --git a/share/qtcreator/qml/qmlobserver/deviceorientation_symbian.cpp b/share/qtcreator/qml/qmlobserver/deviceorientation_symbian.cpp
new file mode 100644
index 00000000000..7710cf9b19c
--- /dev/null
+++ b/share/qtcreator/qml/qmlobserver/deviceorientation_symbian.cpp
@@ -0,0 +1,192 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "deviceorientation.h"
+
+#include <e32base.h>
+#include <sensrvchannelfinder.h>
+#include <sensrvdatalistener.h>
+#include <sensrvchannel.h>
+#include <sensrvorientationsensor.h>
+
+class SymbianOrientation : public DeviceOrientation, public MSensrvDataListener
+{
+    Q_OBJECT
+public:
+    SymbianOrientation()
+        : DeviceOrientation(), m_current(UnknownOrientation), m_sensorChannel(0), m_channelOpen(false)
+    {
+        TRAP_IGNORE(initL());
+        if (!m_sensorChannel)
+            qWarning("No valid sensors found.");
+    }
+
+    ~SymbianOrientation()
+    {
+        if (m_sensorChannel) {
+            m_sensorChannel->StopDataListening();
+            m_sensorChannel->CloseChannel();
+            delete m_sensorChannel;
+        }
+    }
+
+    void initL()
+    {
+        CSensrvChannelFinder *channelFinder = CSensrvChannelFinder::NewLC();
+        RSensrvChannelInfoList channelInfoList;
+        CleanupClosePushL(channelInfoList);
+
+        TSensrvChannelInfo searchConditions;
+        searchConditions.iChannelType = KSensrvChannelTypeIdOrientationData;
+        channelFinder->FindChannelsL(channelInfoList, searchConditions);
+
+        for (int i = 0; i < channelInfoList.Count(); ++i) {
+            TRAPD(error, m_sensorChannel = CSensrvChannel::NewL(channelInfoList[i]));
+            if (!error)
+                TRAP(error, m_sensorChannel->OpenChannelL());
+            if (!error) {
+                TRAP(error, m_sensorChannel->StartDataListeningL(this, 1, 1, 0));
+                m_channelOpen = true;
+                break;
+           }
+            if (error) {
+                delete m_sensorChannel;
+                m_sensorChannel = 0;
+            }
+        }
+
+        channelInfoList.Close();
+        CleanupStack::Pop(&channelInfoList);
+        CleanupStack::PopAndDestroy(channelFinder);
+    }
+
+    Orientation orientation() const
+    {
+        return m_current;
+    }
+
+   void setOrientation(Orientation) { }
+
+private:
+    DeviceOrientation::Orientation m_current;
+    CSensrvChannel *m_sensorChannel;
+    bool m_channelOpen;
+    void pauseListening() {
+        if (m_sensorChannel && m_channelOpen) {
+            m_sensorChannel->StopDataListening();
+            m_sensorChannel->CloseChannel();
+            m_channelOpen = false;
+        }
+    }
+
+    void resumeListening() {
+        if (m_sensorChannel && !m_channelOpen) {
+            TRAPD(error, m_sensorChannel->OpenChannelL());
+            if (!error) {
+                TRAP(error, m_sensorChannel->StartDataListeningL(this, 1, 1, 0));
+                if (!error) {
+                    m_channelOpen = true;
+                }
+            }
+            if (error) {
+                delete m_sensorChannel;
+                m_sensorChannel = 0;
+            }
+        }
+    }
+
+    void DataReceived(CSensrvChannel &channel, TInt count, TInt dataLost)
+    {
+        Q_UNUSED(dataLost)
+        if (channel.GetChannelInfo().iChannelType == KSensrvChannelTypeIdOrientationData) {
+            TSensrvOrientationData data;
+            for (int i = 0; i < count; ++i) {
+                TPckgBuf<TSensrvOrientationData> dataBuf;
+                channel.GetData(dataBuf);
+                data = dataBuf();
+                Orientation orientation = UnknownOrientation;
+                switch (data.iDeviceOrientation) {
+                case TSensrvOrientationData::EOrientationDisplayUp:
+                    orientation = Portrait;
+                    break;
+                case TSensrvOrientationData::EOrientationDisplayRightUp:
+                    orientation = Landscape;
+                    break;
+                case TSensrvOrientationData::EOrientationDisplayLeftUp:
+                    orientation = LandscapeInverted;
+                    break;
+                case TSensrvOrientationData::EOrientationDisplayDown:
+                    orientation = PortraitInverted;
+                    break;
+                case TSensrvOrientationData::EOrientationUndefined:
+                case TSensrvOrientationData::EOrientationDisplayUpwards:
+                case TSensrvOrientationData::EOrientationDisplayDownwards:
+                default:
+                    break;
+                }
+
+                if (m_current != orientation && orientation != UnknownOrientation) {
+                    m_current = orientation;
+                    emit orientationChanged();
+                }
+           }
+        }
+    }
+
+   void DataError(CSensrvChannel& /* channel */, TSensrvErrorSeverity /* error */)
+   {
+   }
+
+   void GetDataListenerInterfaceL(TUid /* interfaceUid */, TAny*& /* interface */)
+   {
+   }
+};
+
+
+DeviceOrientation* DeviceOrientation::instance()
+{
+    static SymbianOrientation *o = 0;
+    if (!o)
+        o = new SymbianOrientation;
+    return o;
+}
+
+#include "deviceorientation_symbian.moc"
diff --git a/share/qtcreator/qml/qmlobserver/main.cpp b/share/qtcreator/qml/qmlobserver/main.cpp
index 86a8085cd0a..9b607e81919 100644
--- a/share/qtcreator/qml/qmlobserver/main.cpp
+++ b/share/qtcreator/qml/qmlobserver/main.cpp
@@ -49,6 +49,7 @@
 #include <QTranslator>
 #include <QDebug>
 #include <QMessageBox>
+#include <QAtomicInt>
 #include "qdeclarativetester.h"
 #include "qt_private/qdeclarativedebughelper_p.h"
 
@@ -56,6 +57,9 @@ QT_USE_NAMESPACE
 
 QtMsgHandler systemMsgOutput = 0;
 
+static QDeclarativeViewer *openFile(const QString &fileName);
+static void showViewer(QDeclarativeViewer *viewer);
+
 #if defined (Q_OS_SYMBIAN)
 #include <unistd.h>
 #include <sys/types.h>
@@ -83,35 +87,50 @@ void myMessageOutput(QtMsgType type, const char *msg)
 QWeakPointer<LoggerWidget> logger;
 
 QString warnings;
-void showWarnings()
+void exitApp(int i)
 {
+#ifdef Q_OS_WIN
+    // Debugging output is not visible by default on Windows -
+    // therefore show modal dialog with errors instead.
     if (!warnings.isEmpty()) {
-        int argc = 0; char **argv = 0;
-        QApplication application(argc, argv); // QApplication() in main has been destroyed already.
-        Q_UNUSED(application)
         QMessageBox::warning(0, QApplication::tr("Qt QML Viewer"), warnings);
     }
+#endif
+    exit(i);
 }
 
+static QAtomicInt recursiveLock(0);
+
 void myMessageOutput(QtMsgType type, const char *msg)
 {
-    if (!logger.isNull()) {
-        QString strMsg = QString::fromAscii(msg);
-        QMetaObject::invokeMethod(logger.data(), "append", Q_ARG(QString, strMsg));
-    } else {
-        warnings += msg;
-        warnings += QLatin1Char('\n');
+    QString strMsg = QString::fromLatin1(msg);
+
+    if (!QCoreApplication::closingDown()) {
+        if (!logger.isNull()) {
+            if (recursiveLock.testAndSetOrdered(0, 1)) {
+                QMetaObject::invokeMethod(logger.data(), "append", Q_ARG(QString, strMsg));
+                recursiveLock = 0;
+            }
+        } else {
+            warnings += strMsg;
+            warnings += QLatin1Char('\n');
+        }
     }
     if (systemMsgOutput) { // Windows
         systemMsgOutput(type, msg);
     } else { // Unix
-        fprintf(stderr, "%s\n",msg);
+        fprintf(stderr, "%s\n", msg);
         fflush(stderr);
     }
 }
 
 #endif
 
+static QDeclarativeViewer* globalViewer = 0;
+
+// The qml file that is shown if the user didn't specify a QML file
+QString initialFile = "qrc:/startup/startup.qml";
+
 void usage()
 {
     qWarning("Usage: qmlobserver [options] <filename>");
@@ -143,7 +162,11 @@ void usage()
     qWarning("  -I <directory> ........................... prepend to the module import search path,");
     qWarning("                                             display path if <directory> is empty");
     qWarning("  -P <directory> ........................... prepend to the plugin search path");
+#if defined(Q_WS_MAC)
+    qWarning("  -no-opengl ............................... don't use a QGLWidget for the viewport");
+#else
     qWarning("  -opengl .................................. use a QGLWidget for the viewport");
+#endif
 #ifndef NO_PRIVATE_HEADERS
     qWarning("  -script <path> ........................... set the script to use");
     qWarning("  -scriptopts <options>|help ............... set the script options to use");
@@ -151,7 +174,8 @@ void usage()
 
     qWarning(" ");
     qWarning(" Press F1 for interactive help");
-    exit(1);
+
+    exitApp(1);
 }
 
 void scriptOptsUsage()
@@ -162,6 +186,7 @@ void scriptOptsUsage()
     qWarning("  play ..................................... playback an existing script");
     qWarning("  testimages ............................... record images or compare images on playback");
     qWarning("  testerror ................................ test 'error' property of root item on playback");
+    qWarning("  testskip  ................................ test 'skip' property of root item on playback");
     qWarning("  snapshot ................................. file being recorded is static,");
     qWarning("                                             only one frame will be recorded or tested");
     qWarning("  exitoncomplete ........................... cleanly exit the viewer on script completion");
@@ -169,142 +194,213 @@ void scriptOptsUsage()
     qWarning("  saveonexit ............................... save recording on viewer exit");
     qWarning(" ");
     qWarning(" One of record, play or both must be specified.");
-    exit(1);
+
+    exitApp(1);
 }
 
 enum WarningsConfig { ShowWarnings, HideWarnings, DefaultWarnings };
 
-int main(int argc, char ** argv)
+struct ViewerOptions
 {
-#if defined (Q_OS_SYMBIAN)
-    qInstallMsgHandler(myMessageOutput);
-#else
-    systemMsgOutput = qInstallMsgHandler(myMessageOutput);
+    ViewerOptions()
+        : frameless(false),
+          fps(0.0),
+          autorecord_from(0),
+          autorecord_to(0),
+          dither("none"),
+          runScript(false),
+          devkeys(false),
+          cache(0),
+          useGL(false),
+          fullScreen(false),
+          stayOnTop(false),
+          maximized(false),
+          useNativeFileBrowser(true),
+          experimentalGestures(false),
+          warningsConfig(DefaultWarnings),
+          sizeToView(true)
+    {
+#if defined(Q_OS_SYMBIAN)
+        maximized = true;
+        useNativeFileBrowser = false;
 #endif
 
-#if defined (Q_OS_WIN)
-    // Debugging output is not visible by default on Windows -
-    // therefore show modal dialog with errors instead.
-
-    // (Disabled in QmlObserver: We're usually running inside QtCreator anyway, see also QTCREATORBUG-2748)
-//    atexit(showWarnings);
+#if defined(Q_WS_MAC)
+        useGL = true;
 #endif
-
-#if defined (Q_WS_X11) || defined (Q_WS_MAC)
-    //### default to using raster graphics backend for now
-    bool gsSpecified = false;
-    for (int i = 0; i < argc; ++i) {
-        QString arg = argv[i];
-        if (arg == "-graphicssystem") {
-            gsSpecified = true;
-            break;
-        }
     }
 
-    if (!gsSpecified)
-        QApplication::setGraphicsSystem("raster");
-#endif
-
-    QApplication app(argc, argv);
-    app.setApplicationName("QtQmlViewer");
-    app.setOrganizationName("Nokia");
-    app.setOrganizationDomain("nokia.com");
-
-    QDeclarativeViewer::registerTypes();
-    QDeclarativeTester::registerTypes();
-
-    bool frameless = false;
-    QString fileName;
-    double fps = 0;
-    int autorecord_from = 0;
-    int autorecord_to = 0;
-    QString dither = "none";
+    bool frameless;
+    double fps;
+    int autorecord_from;
+    int autorecord_to;
+    QString dither;
     QString recordfile;
     QStringList recordargs;
     QStringList imports;
     QStringList plugins;
     QString script;
     QString scriptopts;
-    bool runScript = false;
-    bool devkeys = false;
-    int cache = 0;
+    bool runScript;
+    bool devkeys;
+    int cache;
     QString translationFile;
-    bool useGL = false;
-    bool fullScreen = false;
-    bool stayOnTop = false;
-    bool maximized = false;
-    bool useNativeFileBrowser = true;
-    bool experimentalGestures = false;
-    bool designModeBehavior = false;
-    bool debuggerModeBehavior = false;
-
-    WarningsConfig warningsConfig = DefaultWarnings;
-    bool sizeToView = true;
+    bool useGL;
+    bool fullScreen;
+    bool stayOnTop;
+    bool maximized;
+    bool useNativeFileBrowser;
+    bool experimentalGestures;
 
-#if defined(Q_OS_SYMBIAN)
-    maximized = true;
-    useNativeFileBrowser = false;
-#endif
+    WarningsConfig warningsConfig;
+    bool sizeToView;
 
-#if defined(Q_WS_MAC)
-    useGL = true;
-#endif
+    QDeclarativeViewer::ScriptOptions scriptOptions;
+};
 
-    for (int i = 1; i < argc; ++i) {
-        bool lastArg = (i == argc - 1);
-        QString arg = argv[i];
+static ViewerOptions opts;
+static QStringList fileNames;
+
+class Application : public QApplication
+{
+    Q_OBJECT
+public:
+    Application(int &argc, char **&argv)
+        : QApplication(argc, argv)
+    {}
+
+protected:
+    bool event(QEvent *ev)
+    {
+        if (ev->type() != QEvent::FileOpen)
+            return QApplication::event(ev);
+
+        QFileOpenEvent *fev = static_cast<QFileOpenEvent *>(ev);
+
+        globalViewer->open(fev->file());
+        if (!globalViewer->isVisible())
+            showViewer(globalViewer);
+
+        return true;
+    }
+
+private Q_SLOTS:
+    void showInitialViewer()
+    {
+        QApplication::processEvents();
+
+        QDeclarativeViewer *viewer = globalViewer;
+        if (!viewer)
+            return;
+        if (viewer->currentFile().isEmpty()) {
+            if(opts.useNativeFileBrowser)
+                viewer->open(initialFile);
+            else
+                viewer->openFile();
+        }
+        if (!viewer->isVisible())
+            showViewer(viewer);
+    }
+};
+
+static void parseScriptOptions()
+{
+    QStringList options =
+        opts.scriptopts.split(QLatin1Char(','), QString::SkipEmptyParts);
+
+    QDeclarativeViewer::ScriptOptions scriptOptions = 0;
+    for (int i = 0; i < options.count(); ++i) {
+        const QString &option = options.at(i);
+        if (option == QLatin1String("help")) {
+            scriptOptsUsage();
+        } else if (option == QLatin1String("play")) {
+            scriptOptions |= QDeclarativeViewer::Play;
+        } else if (option == QLatin1String("record")) {
+            scriptOptions |= QDeclarativeViewer::Record;
+        } else if (option == QLatin1String("testimages")) {
+            scriptOptions |= QDeclarativeViewer::TestImages;
+        } else if (option == QLatin1String("testerror")) {
+            scriptOptions |= QDeclarativeViewer::TestErrorProperty;
+        } else if (option == QLatin1String("testskip")) {
+            scriptOptions |= QDeclarativeViewer::TestSkipProperty;
+        } else if (option == QLatin1String("exitoncomplete")) {
+            scriptOptions |= QDeclarativeViewer::ExitOnComplete;
+        } else if (option == QLatin1String("exitonfailure")) {
+            scriptOptions |= QDeclarativeViewer::ExitOnFailure;
+        } else if (option == QLatin1String("saveonexit")) {
+            scriptOptions |= QDeclarativeViewer::SaveOnExit;
+        } else if (option == QLatin1String("snapshot")) {
+            scriptOptions |= QDeclarativeViewer::Snapshot;
+        } else {
+            scriptOptsUsage();
+        }
+    }
+
+    opts.scriptOptions = scriptOptions;
+}
+
+static void parseCommandLineOptions(const QStringList &arguments)
+{
+    for (int i = 1; i < arguments.count(); ++i) {
+        bool lastArg = (i == arguments.count() - 1);
+        QString arg = arguments.at(i);
         if (arg == "-frameless") {
-            frameless = true;
+            opts.frameless = true;
         } else if (arg == "-maximized") {
-            maximized = true;
+            opts.maximized = true;
         } else if (arg == "-fullscreen") {
-            fullScreen = true;
+            opts.fullScreen = true;
         } else if (arg == "-stayontop") {
-            stayOnTop = true;
+            opts.stayOnTop = true;
         } else if (arg == "-netcache") {
             if (lastArg) usage();
-            cache = QString(argv[++i]).toInt();
+            opts.cache = arguments.at(++i).toInt();
         } else if (arg == "-recordrate") {
             if (lastArg) usage();
-            fps = QString(argv[++i]).toDouble();
+            opts.fps = arguments.at(++i).toDouble();
         } else if (arg == "-recordfile") {
             if (lastArg) usage();
-            recordfile = QString(argv[++i]);
+            opts.recordfile = arguments.at(++i);
         } else if (arg == "-record") {
             if (lastArg) usage();
-            recordargs << QString(argv[++i]);
+            opts.recordargs << arguments.at(++i);
         } else if (arg == "-recorddither") {
             if (lastArg) usage();
-            dither = QString(argv[++i]);
+            opts.dither = arguments.at(++i);
         } else if (arg == "-autorecord") {
             if (lastArg) usage();
-            QString range = QString(argv[++i]);
+            QString range = arguments.at(++i);
             int dash = range.indexOf('-');
             if (dash > 0)
-                autorecord_from = range.left(dash).toInt();
-            autorecord_to = range.mid(dash+1).toInt();
+                opts.autorecord_from = range.left(dash).toInt();
+            opts.autorecord_to = range.mid(dash+1).toInt();
         } else if (arg == "-devicekeys") {
-            devkeys = true;
+            opts.devkeys = true;
         } else if (arg == "-dragthreshold") {
             if (lastArg) usage();
-            app.setStartDragDistance(QString(argv[++i]).toInt());
+            qApp->setStartDragDistance(arguments.at(++i).toInt());
         } else if (arg == QLatin1String("-v") || arg == QLatin1String("-version")) {
             qWarning("Qt QML Viewer version %s", QT_VERSION_STR);
-            exit(0);
+            exitApp(0);
         } else if (arg == "-translation") {
             if (lastArg) usage();
-            translationFile = argv[++i];
+            opts.translationFile = arguments.at(++i);
+#if defined(Q_WS_MAC)
+        } else if (arg == "-no-opengl") {
+            opts.useGL = false;
+#else
         } else if (arg == "-opengl") {
-            useGL = true;
+            opts.useGL = true;
+#endif
         } else if (arg == "-qmlbrowser") {
-            useNativeFileBrowser = false;
+            opts.useNativeFileBrowser = false;
         } else if (arg == "-warnings") {
             if (lastArg) usage();
-            QString warningsStr = QString(argv[++i]);
+            QString warningsStr = arguments.at(++i);
             if (warningsStr == QLatin1String("show")) {
-                warningsConfig = ShowWarnings;
+                opts.warningsConfig = ShowWarnings;
             } else if (warningsStr == QLatin1String("hide")) {
-                warningsConfig = HideWarnings;
+                opts.warningsConfig = HideWarnings;
             } else {
                 usage();
             }
@@ -315,164 +411,201 @@ int main(int argc, char ** argv)
                 QDeclarativeEngine tmpEngine;
                 QString paths = tmpEngine.importPathList().join(QLatin1String(":"));
                 qWarning("Current search path: %s", paths.toLocal8Bit().constData());
-                exit(0);
+                exitApp(0);
             }
-            imports << QString(argv[++i]);
+            opts.imports << arguments.at(++i);
         } else if (arg == "-P") {
             if (lastArg) usage();
-            plugins << QString(argv[++i]);
+            opts.plugins << arguments.at(++i);
         } else if (arg == "-script") {
             if (lastArg) usage();
-            script = QString(argv[++i]);
+            opts.script = arguments.at(++i);
         } else if (arg == "-scriptopts") {
             if (lastArg) usage();
-            scriptopts = QString(argv[++i]);
+            opts.scriptopts = arguments.at(++i);
         } else if (arg == "-savescript") {
             if (lastArg) usage();
-            script = QString(argv[++i]);
-            runScript = false;
+            opts.script = arguments.at(++i);
+            opts.runScript = false;
         } else if (arg == "-playscript") {
             if (lastArg) usage();
-            script = QString(argv[++i]);
-            runScript = true;
+            opts.script = arguments.at(++i);
+            opts.runScript = true;
         } else if (arg == "-sizeviewtorootobject") {
-            sizeToView = false;
+            opts.sizeToView = false;
         } else if (arg == "-sizerootobjecttoview") {
-            sizeToView = true;
+            opts.sizeToView = true;
         } else if (arg == "-experimentalgestures") {
-            experimentalGestures = true;
-        } else if (arg == "-designmode") {
-            designModeBehavior = true;
-        } else if (arg == "-debugger") {
-            debuggerModeBehavior = true;
-        } else if (arg[0] != '-') {
-            fileName = arg;
-        } else if (1 || arg == "-help") {
+            opts.experimentalGestures = true;
+        } else if (!arg.startsWith('-')) {
+            fileNames.append(arg);
+        } else if (true || arg == "-help") {
             usage();
         }
     }
 
-    QTranslator qmlTranslator;
-    if (!translationFile.isEmpty()) {
-        qmlTranslator.load(translationFile);
-        app.installTranslator(&qmlTranslator);
+    if (!opts.scriptopts.isEmpty()) {
+
+        parseScriptOptions();
+
+        if (opts.script.isEmpty())
+            usage();
+
+        if (!(opts.scriptOptions & QDeclarativeViewer::Record) && !(opts.scriptOptions & QDeclarativeViewer::Play))
+            scriptOptsUsage();
+    }  else if (!opts.script.isEmpty()) {
+        usage();
     }
 
-    Qt::WFlags wflags = (frameless ? Qt::FramelessWindowHint : Qt::Widget);
-    if (stayOnTop)
-        wflags |= Qt::WindowStaysOnTopHint;
+}
 
-    // enable remote debugging
-    QDeclarativeDebugHelper::enableDebugging();
+static QDeclarativeViewer *createViewer()
+{
+    Qt::WFlags wflags = (opts.frameless ? Qt::FramelessWindowHint : Qt::Widget);
+    if (opts.stayOnTop)
+        wflags |= Qt::WindowStaysOnTopHint;
 
     QDeclarativeViewer *viewer = new QDeclarativeViewer(0, wflags);
     viewer->setAttribute(Qt::WA_DeleteOnClose, true);
-    if (!scriptopts.isEmpty()) {
-        QStringList options =
-            scriptopts.split(QLatin1Char(','), QString::SkipEmptyParts);
-
-        QDeclarativeViewer::ScriptOptions scriptOptions = 0;
-        for (int i = 0; i < options.count(); ++i) {
-            const QString &option = options.at(i);
-            if (option == QLatin1String("help")) {
-                scriptOptsUsage();
-            } else if (option == QLatin1String("play")) {
-                scriptOptions |= QDeclarativeViewer::Play;
-            } else if (option == QLatin1String("record")) {
-                scriptOptions |= QDeclarativeViewer::Record;
-            } else if (option == QLatin1String("testimages")) {
-                scriptOptions |= QDeclarativeViewer::TestImages;
-            } else if (option == QLatin1String("testerror")) {
-                scriptOptions |= QDeclarativeViewer::TestErrorProperty;
-            } else if (option == QLatin1String("exitoncomplete")) {
-                scriptOptions |= QDeclarativeViewer::ExitOnComplete;
-            } else if (option == QLatin1String("exitonfailure")) {
-                scriptOptions |= QDeclarativeViewer::ExitOnFailure;
-            } else if (option == QLatin1String("saveonexit")) {
-                scriptOptions |= QDeclarativeViewer::SaveOnExit;
-            } else if (option == QLatin1String("snapshot")) {
-                scriptOptions |= QDeclarativeViewer::Snapshot;
-            } else {
-                scriptOptsUsage();
-            }
-        }
-
-        if (script.isEmpty())
-            usage();
+    viewer->setUseGL(opts.useGL);
 
-        if (!(scriptOptions & QDeclarativeViewer::Record) && !(scriptOptions & QDeclarativeViewer::Play))
-            scriptOptsUsage();
-        viewer->setScriptOptions(scriptOptions);
-        viewer->setScript(script);
-    }  else if (!script.isEmpty()) {
-        usage();
+    if (!opts.scriptopts.isEmpty()) {
+        viewer->setScriptOptions(opts.scriptOptions);
+        viewer->setScript(opts.script);
     }
 
 #if !defined(Q_OS_SYMBIAN)
     logger = viewer->warningsWidget();
-    if (warningsConfig == ShowWarnings) {
+    if (opts.warningsConfig == ShowWarnings) {
         logger.data()->setDefaultVisibility(LoggerWidget::ShowWarnings);
         logger.data()->show();
-    } else if (warningsConfig == HideWarnings){
+    } else if (opts.warningsConfig == HideWarnings){
         logger.data()->setDefaultVisibility(LoggerWidget::HideWarnings);
     }
 #endif
 
-    if (experimentalGestures)
+    if (opts.experimentalGestures)
         viewer->enableExperimentalGestures();
 
-    viewer->setDesignModeBehavior(designModeBehavior);
-    viewer->setStayOnTop(stayOnTop);
-
-    foreach (QString lib, imports)
+    foreach (QString lib, opts.imports)
         viewer->addLibraryPath(lib);
 
-    foreach (QString plugin, plugins)
+    foreach (QString plugin, opts.plugins)
         viewer->addPluginPath(plugin);
 
-    viewer->setNetworkCacheSize(cache);
-    viewer->setRecordFile(recordfile);
-    viewer->setSizeToView(sizeToView);
-    if (fps>0)
-        viewer->setRecordRate(fps);
-    if (autorecord_to)
-        viewer->setAutoRecord(autorecord_from,autorecord_to);
-    if (devkeys)
+    viewer->setNetworkCacheSize(opts.cache);
+    viewer->setRecordFile(opts.recordfile);
+    viewer->setSizeToView(opts.sizeToView);
+    if (opts.fps > 0)
+        viewer->setRecordRate(opts.fps);
+    if (opts.autorecord_to)
+        viewer->setAutoRecord(opts.autorecord_from, opts.autorecord_to);
+    if (opts.devkeys)
         viewer->setDeviceKeys(true);
-    viewer->setRecordDither(dither);
-    if (recordargs.count())
-        viewer->setRecordArgs(recordargs);
+    viewer->setRecordDither(opts.dither);
+    if (opts.recordargs.count())
+        viewer->setRecordArgs(opts.recordargs);
+
+    viewer->setUseNativeFileBrowser(opts.useNativeFileBrowser);
+
+    return viewer;
+}
+
+void showViewer(QDeclarativeViewer *viewer)
+{
+    if (opts.fullScreen)
+        viewer->showFullScreen();
+    else if (opts.maximized)
+        viewer->showMaximized();
+    else
+        viewer->show();
+    viewer->raise();
+}
+
+QDeclarativeViewer *openFile(const QString &fileName)
+{
+    QDeclarativeViewer *viewer = globalViewer;
+
+    viewer->open(fileName);
+    showViewer(viewer);
+
+    return viewer;
+}
+
+int main(int argc, char ** argv)
+{
+#if defined (Q_OS_SYMBIAN)
+    qInstallMsgHandler(myMessageOutput);
+#else
+    systemMsgOutput = qInstallMsgHandler(myMessageOutput);
+#endif
+
+#if defined (Q_WS_X11) || defined (Q_WS_MAC)
+    //### default to using raster graphics backend for now
+    bool gsSpecified = false;
+    for (int i = 0; i < argc; ++i) {
+        QString arg = argv[i];
+        if (arg == "-graphicssystem") {
+            gsSpecified = true;
+            break;
+        }
+    }
+
+    if (!gsSpecified)
+        QApplication::setGraphicsSystem("raster");
+#endif
+
+    Application app(argc, argv);
+    app.setApplicationName("QtQmlViewer");
+    app.setOrganizationName("Nokia");
+    app.setOrganizationDomain("nokia.com");
+
+    QDeclarativeViewer::registerTypes();
+    QDeclarativeTester::registerTypes();
+
+    parseCommandLineOptions(app.arguments());
 
-    viewer->setUseNativeFileBrowser(useNativeFileBrowser);
-    if (fullScreen && maximized)
+    QTranslator qmlTranslator;
+    if (!opts.translationFile.isEmpty()) {
+        qmlTranslator.load(opts.translationFile);
+        app.installTranslator(&qmlTranslator);
+    }
+
+    if (opts.fullScreen && opts.maximized)
         qWarning() << "Both -fullscreen and -maximized specified. Using -fullscreen.";
 
-    if (fileName.isEmpty()) {
+    if (fileNames.isEmpty()) {
         QFile qmlapp(QLatin1String("qmlapp"));
         if (qmlapp.exists() && qmlapp.open(QFile::ReadOnly)) {
-                QString content = QString::fromUtf8(qmlapp.readAll());
-                qmlapp.close();
-
-                int newline = content.indexOf(QLatin1Char('\n'));
-                if (newline >= 0)
-                    fileName = content.left(newline);
-                else
-                    fileName = content;
-            }
+            QString content = QString::fromUtf8(qmlapp.readAll());
+            qmlapp.close();
+
+            int newline = content.indexOf(QLatin1Char('\n'));
+            if (newline >= 0)
+                fileNames += content.left(newline);
+            else
+                fileNames += content;
+        }
     }
 
-    if (!fileName.isEmpty()) {
-        viewer->open(fileName);
-        fullScreen ? viewer->showFullScreen() : maximized ? viewer->showMaximized() : viewer->show();
+    //enable remote debugging
+    QDeclarativeDebugHelper::enableDebugging();
+
+    globalViewer = createViewer();
+
+    if (fileNames.isEmpty()) {
+        // show the initial viewer delayed.
+        // This prevents an initial viewer popping up while there
+        // are FileOpen events coming through the event queue
+        QTimer::singleShot(1, &app, SLOT(showInitialViewer()));
     } else {
-        if (!useNativeFileBrowser)
-            viewer->openFile();
-        fullScreen ? viewer->showFullScreen() : maximized ? viewer->showMaximized() : viewer->show();
-        if (useNativeFileBrowser)
-            viewer->openFile();
+        foreach (const QString &fileName, fileNames)
+            openFile(fileName);
     }
-    viewer->setUseGL(useGL);
-    viewer->raise();
+
+    QObject::connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
 
     return app.exec();
 }
+
+#include "main.moc"
diff --git a/share/qtcreator/qml/qmlobserver/qdeclarativetester.cpp b/share/qtcreator/qml/qmlobserver/qdeclarativetester.cpp
index 83e8c06018e..c736879a361 100644
--- a/share/qtcreator/qml/qmlobserver/qdeclarativetester.cpp
+++ b/share/qtcreator/qml/qmlobserver/qdeclarativetester.cpp
@@ -48,7 +48,6 @@
 #include <QDir>
 #include <QCryptographicHash>
 #include <QGraphicsObject>
-
 #ifndef NO_PRIVATE_HEADERS
 #include <private/qabstractanimation_p.h>
 #include <private/qdeclarativeitem_p.h>
@@ -56,6 +55,7 @@
 
 QT_BEGIN_NAMESPACE
 
+extern Q_GUI_EXPORT bool qt_applefontsmoothing_enabled;
 
 QDeclarativeTester::QDeclarativeTester(const QString &script, QDeclarativeViewer::ScriptOptions opts,
                      QDeclarativeView *parent)
@@ -67,6 +67,12 @@ QDeclarativeTester::QDeclarativeTester(const QString &script, QDeclarativeViewer
 #ifndef NO_PRIVATE_HEADERS
     QUnifiedTimer::instance()->setConsistentTiming(true);
 #endif
+
+    //Font antialiasing makes tests system-specific, so disable it
+    QFont noAA = QApplication::font();
+    noAA.setStyleStrategy(QFont::NoAntialias);
+    QApplication::setFont(noAA);
+
     if (options & QDeclarativeViewer::Play)
         this->run();
     start();
@@ -75,7 +81,7 @@ QDeclarativeTester::QDeclarativeTester(const QString &script, QDeclarativeViewer
 QDeclarativeTester::~QDeclarativeTester()
 {
     if (!hasFailed &&
-        options & QDeclarativeViewer::Record && 
+        options & QDeclarativeViewer::Record &&
         options & QDeclarativeViewer::SaveOnExit)
         save();
 }
@@ -142,8 +148,25 @@ void QDeclarativeTester::imagefailure()
 {
     hasFailed = true;
 
-    if (options & QDeclarativeViewer::ExitOnFailure)
-        exit(-1);
+    if (options & QDeclarativeViewer::ExitOnFailure){
+        testSkip();
+        exit(hasFailed?-1:0);
+    }
+}
+
+void QDeclarativeTester::testSkip()
+{
+    if (options & QDeclarativeViewer::TestSkipProperty){
+        QString e = m_view->rootObject()->property("skip").toString();
+        if (!e.isEmpty()) {
+            if(hasFailed){
+                qWarning() << "Test failed, but skipping it: " << e;
+            }else{
+                qWarning() << "Test skipped: " << e;
+            }
+            hasFailed = 0;
+        }
+    }
 }
 
 void QDeclarativeTester::complete()
@@ -155,7 +178,10 @@ void QDeclarativeTester::complete()
             hasFailed = true;
         }
     }
-    if (options & QDeclarativeViewer::ExitOnComplete) 
+
+
+    testSkip();
+    if (options & QDeclarativeViewer::ExitOnComplete)
         QApplication::exit(hasFailed?-1:0);
 
     if (hasCompleted)
@@ -207,7 +233,7 @@ void QDeclarativeTester::save()
         }
         ts << "    }\n";
 
-        while (!mouseevents.isEmpty() && 
+        while (!mouseevents.isEmpty() &&
                mouseevents.first().msec == fe.msec) {
             MouseEvent me = mouseevents.takeFirst();
 
@@ -255,7 +281,16 @@ void QDeclarativeTester::updateCurrentTime(int msec)
 
     if (options & QDeclarativeViewer::TestImages) {
         img.fill(qRgb(255,255,255));
+
+#ifdef Q_WS_MAC
+        bool oldSmooth = qt_applefontsmoothing_enabled;
+        qt_applefontsmoothing_enabled = false;
+#endif
         QPainter p(&img);
+#ifdef Q_WS_MAC
+        qt_applefontsmoothing_enabled = oldSmooth;
+#endif
+
         m_view->render(&p);
     }
 
@@ -266,7 +301,7 @@ void QDeclarativeTester::updateCurrentTime(int msec)
     fe.msec = msec;
     if (msec == 0 || !(options & QDeclarativeViewer::TestImages)) {
         // Skip first frame, skip if not doing images
-    } else if (0 == (m_savedFrameEvents.count() % 60) || snapshot) {
+    } else if (0 == ((m_savedFrameEvents.count()-1) % 60) || snapshot) {
         fe.image = img;
     } else {
         QCryptographicHash hash(QCryptographicHash::Md5);
@@ -317,14 +352,14 @@ void QDeclarativeTester::updateCurrentTime(int msec)
         if (QDeclarativeVisualTestFrame *frame = qobject_cast<QDeclarativeVisualTestFrame *>(event)) {
             if (frame->msec() < msec) {
                 if (options & QDeclarativeViewer::TestImages && !(options & QDeclarativeViewer::Record)) {
-                    qWarning() << "QDeclarativeTester: Extra frame.  Seen:" 
+                    qWarning() << "QDeclarativeTester(" << m_script << "): Extra frame.  Seen:"
                                << msec << "Expected:" << frame->msec();
                     imagefailure();
                 }
             } else if (frame->msec() == msec) {
                 if (!frame->hash().isEmpty() && frame->hash().toUtf8() != fe.hash.toHex()) {
                     if (options & QDeclarativeViewer::TestImages && !(options & QDeclarativeViewer::Record)) {
-                        qWarning() << "QDeclarativeTester: Mismatched frame hash at" << msec
+                        qWarning() << "QDeclarativeTester(" << m_script << "): Mismatched frame hash at" << msec
                                    << ".  Seen:" << fe.hash.toHex()
                                    << "Expected:" << frame->hash().toUtf8();
                         imagefailure();
@@ -336,9 +371,14 @@ void QDeclarativeTester::updateCurrentTime(int msec)
 
             if (options & QDeclarativeViewer::TestImages && !(options & QDeclarativeViewer::Record) && !frame->image().isEmpty()) {
                 QImage goodImage(frame->image().toLocalFile());
+                if (frame->msec() == 16 && goodImage.size() != img.size()){
+                    //Also an image mismatch, but this warning is more informative. Only checked at start though.
+                    qWarning() << "QDeclarativeTester(" << m_script << "): Size mismatch. This test must be run at " << goodImage.size();
+                    imagefailure();
+                }
                 if (goodImage != img) {
                     QString reject(frame->image().toLocalFile() + ".reject.png");
-                    qWarning() << "QDeclarativeTester: Image mismatch.  Reject saved to:" 
+                    qWarning() << "QDeclarativeTester(" << m_script << "): Image mismatch.  Reject saved to:"
                                << reject;
                     img.save(reject);
                     bool doDiff = (goodImage.size() == img.size());
@@ -391,7 +431,7 @@ void QDeclarativeTester::updateCurrentTime(int msec)
                 ke.destination = ViewPort;
             }
             m_savedKeyEvents.append(ke);
-        } 
+        }
         testscriptidx++;
     }
 
diff --git a/share/qtcreator/qml/qmlobserver/qdeclarativetester.h b/share/qtcreator/qml/qmlobserver/qdeclarativetester.h
index 021869d93a3..6fdf495c1f1 100644
--- a/share/qtcreator/qml/qmlobserver/qdeclarativetester.h
+++ b/share/qtcreator/qml/qmlobserver/qdeclarativetester.h
@@ -122,7 +122,7 @@ public:
 
     int type() const { return m_type; }
     void setType(int t) { m_type = t; }
-    
+
     int button() const { return m_button; }
     void setButton(int b) { m_button = b; }
 
@@ -228,6 +228,7 @@ private:
 
     void imagefailure();
     void complete();
+    void testSkip();
 
     enum Destination { View, ViewPort };
     void addKeyEvent(Destination, QKeyEvent *);
@@ -236,7 +237,7 @@ private:
 
     struct MouseEvent {
         MouseEvent(QMouseEvent *e)
-            : type(e->type()), button(e->button()), buttons(e->buttons()), 
+            : type(e->type()), button(e->button()), buttons(e->buttons()),
               pos(e->pos()), modifiers(e->modifiers()), destination(View) {}
 
         QEvent::Type type;
diff --git a/share/qtcreator/qml/qmlobserver/qml.pri b/share/qtcreator/qml/qmlobserver/qml.pri
index 7e485d3984c..5db76780810 100644
--- a/share/qtcreator/qml/qmlobserver/qml.pri
+++ b/share/qtcreator/qml/qmlobserver/qml.pri
@@ -1,14 +1,9 @@
 QT += declarative script network sql
-
 contains(QT_CONFIG, opengl) {
     QT += opengl
     DEFINES += GL_SUPPORTED
 }
 
-!exists($$[QT_INSTALL_HEADERS]/QtCore/private/qabstractanimation_p.h) {
-    DEFINES += NO_PRIVATE_HEADERS
-}
-
 INCLUDEPATH += $$PWD
 
 HEADERS += $$PWD/qmlruntime.h \
@@ -16,25 +11,31 @@ HEADERS += $$PWD/qmlruntime.h \
            $$PWD/qdeclarativetester.h \
            $$PWD/deviceorientation.h \
            $$PWD/loggerwidget.h
-
-
 SOURCES += $$PWD/qmlruntime.cpp \
            $$PWD/proxysettings.cpp \
            $$PWD/qdeclarativetester.cpp \
            $$PWD/loggerwidget.cpp
 
-RESOURCES += $$PWD/qmlruntime.qrc
-
-OTHER_FILES += toolbarstyle.css
+RESOURCES = $$PWD/browser/browser.qrc \
+            $$PWD/startup/startup.qrc
 
-maemo5 {
+symbian:!contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) {
+   SOURCES += $$PWD/deviceorientation_symbian.cpp
+   FORMS = $$PWD/recopts.ui \
+           $$PWD/proxysettings.ui
+} else:maemo5 {
     QT += dbus
     HEADERS += $$PWD/texteditautoresizer_maemo5.h
     SOURCES += $$PWD/deviceorientation_maemo5.cpp
-    FORMS += $$PWD/recopts_maemo5.ui \
+    FORMS = $$PWD/recopts_maemo5.ui \
             $$PWD/proxysettings_maemo5.ui
+} else:linux-g++-maemo {
+    QT += dbus
+    SOURCES += $$PWD/deviceorientation_harmattan.cpp
+    FORMS = $$PWD/recopts.ui \
+            $$PWD/proxysettings.ui
 } else {
     SOURCES += $$PWD/deviceorientation.cpp
-    FORMS += $$PWD/recopts.ui \
-             $$PWD/proxysettings.ui
+    FORMS = $$PWD/recopts.ui \
+            $$PWD/proxysettings.ui
 }
diff --git a/share/qtcreator/qml/qmlobserver/qmlobserver.pro b/share/qtcreator/qml/qmlobserver/qmlobserver.pro
index 379ca5fb040..5e09ed18751 100644
--- a/share/qtcreator/qml/qmlobserver/qmlobserver.pro
+++ b/share/qtcreator/qml/qmlobserver/qmlobserver.pro
@@ -1,5 +1,7 @@
 TEMPLATE = app
 
+CONFIG += qt uic
+
 ### FIXME: only debug plugins are now supported.
 CONFIG -= release
 CONFIG += debug
@@ -15,6 +17,44 @@ exists($$PWD/qmljsdebugger/qmljsdebugger-lib.pri) {
     include($$PWD/../qmljsdebugger/qmljsdebugger-lib.pri)
 }
 
+#INCLUDEPATH += ../../include/QtDeclarative
+#INCLUDEPATH += ../../src/declarative/util
+#INCLUDEPATH += ../../src/declarative/graphicsitems
+
+target.path = $$[QT_INSTALL_BINS]
+INSTALLS += target
+
+wince* {
+    QT += xml
+
+    contains(QT_CONFIG, scripttools) {
+        QT += scripttools
+    }
+    contains(QT_CONFIG, phonon) {
+        QT += phonon
+    }
+    contains(QT_CONFIG, xmlpatterns) {
+        QT += xmlpatterns
+    }
+    contains(QT_CONFIG, webkit) {
+        QT += webkit
+    }
+}
+maemo5 {
+    QT += maemo5
+}
+symbian {
+    TARGET.UID3 = 0x20021317
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+    TARGET.EPOCHEAPSIZE = 0x20000 0x4000000
+    TARGET.CAPABILITY = NetworkServices ReadUserData
+    !contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) {
+        LIBS += -lsensrvclient -lsensrvutil
+    }
+    contains(QT_CONFIG, s60): {
+        LIBS += -lavkon -lcone
+    }
+}
 mac {
     QMAKE_INFO_PLIST=Info_mac.plist
     TARGET=QMLObserver
@@ -22,4 +62,3 @@ mac {
 } else {
     TARGET=qmlobserver
 }
-
diff --git a/share/qtcreator/qml/qmlobserver/qmlruntime.cpp b/share/qtcreator/qml/qmlobserver/qmlruntime.cpp
index 03276350aea..339ec38a43b 100644
--- a/share/qtcreator/qml/qmlobserver/qmlruntime.cpp
+++ b/share/qtcreator/qml/qmlobserver/qmlruntime.cpp
@@ -54,9 +54,6 @@
 #  include "ui_recopts.h"
 #endif
 
-#include <qdeclarativeviewobserver.h>
-#include <qdeclarativeobserverservice.h>
-
 #include "qmlruntime.h"
 #include <qdeclarativecontext.h>
 #include <qdeclarativeengine.h>
@@ -67,6 +64,9 @@
 #include <private/qabstractanimation_p.h>
 #endif
 
+#include <qdeclarativeviewobserver.h>
+#include <qdeclarativeobserverservice.h>
+
 #include <QSettings>
 #include <QXmlStreamReader>
 #include <QBuffer>
@@ -90,28 +90,74 @@
 #include <QMenu>
 #include <QAction>
 #include <QFileDialog>
+#include <QInputDialog>
 #include <QTimer>
 #include <QGraphicsObject>
 #include <QNetworkProxyFactory>
 #include <QKeyEvent>
-#include <QToolBar>
 #include <QMutex>
 #include <QMutexLocker>
 #include "proxysettings.h"
 #include "deviceorientation.h"
-#include <QInputDialog>
 
 #ifdef GL_SUPPORTED
 #include <QGLWidget>
 #endif
 
-#include <qt_private/qdeclarativedebughelper_p.h>
+#if defined(Q_WS_S60)
+#include <aknappui.h> // For locking app orientation
+#endif
 
 #include <qdeclarativetester.h>
+
+#include <qt_private/qdeclarativedebughelper_p.h>
 #include "jsdebuggeragent.h"
 
 QT_BEGIN_NAMESPACE
 
+class DragAndDropView : public QDeclarativeView
+{
+    Q_OBJECT
+public:
+    DragAndDropView(QDeclarativeViewer *parent = 0)
+    : QDeclarativeView(parent)
+    {
+        setAcceptDrops(true);
+    }
+
+    void dragEnterEvent(QDragEnterEvent *event)
+    {
+        const QMimeData *mimeData = event->mimeData();
+        if (mimeData->hasUrls())
+            event->acceptProposedAction();
+    }
+
+    void dragMoveEvent(QDragMoveEvent *event)
+    {
+        event->acceptProposedAction();
+    }
+
+    void dragLeaveEvent(QDragLeaveEvent *event)
+    {
+        event->accept();
+    }
+
+    void dropEvent(QDropEvent *event)
+    {
+        const QMimeData *mimeData = event->mimeData();
+        if (!mimeData->hasUrls())
+            return;
+        const QList<QUrl> urlList = mimeData->urls();
+        foreach (const QUrl &url, urlList) {
+            if (url.scheme() == QLatin1String("file")) {
+                static_cast<QDeclarativeViewer *>(parent())->open(url.toLocalFile());
+                event->accept();
+                return;
+            }
+        }
+    }
+};
+
 class Runtime : public QObject
 {
     Q_OBJECT
@@ -166,38 +212,38 @@ public:
 
     QWidget *createWidget(QWidget *parent)
     {
-	QMaemo5ValueButton *button = new QMaemo5ValueButton(m_text, parent);
-	button->setValueLayout(QMaemo5ValueButton::ValueUnderTextCentered);
+        QMaemo5ValueButton *button = new QMaemo5ValueButton(m_text, parent);
+        button->setValueLayout(QMaemo5ValueButton::ValueUnderTextCentered);
         QMaemo5ListPickSelector *pick = new QMaemo5ListPickSelector(button);
-	button->setPickSelector(pick);
-	if (m_actions) {
-	    QStringList sl;
-	    int curIdx = -1, idx = 0;
-	    foreach (QAction *a, m_actions->actions()) {
-		sl << a->text();
-		if (a->isChecked())
-		    curIdx = idx;
-		idx++;
+        button->setPickSelector(pick);
+        if (m_actions) {
+            QStringList sl;
+            int curIdx = -1, idx = 0;
+            foreach (QAction *a, m_actions->actions()) {
+                sl << a->text();
+                if (a->isChecked())
+                    curIdx = idx;
+                idx++;
             }
-	    pick->setModel(new QStringListModel(sl));
-	    pick->setCurrentIndex(curIdx);
-	} else {
-	    button->setEnabled(false);
-	}
-	connect(pick, SIGNAL(selected(QString)), this, SLOT(emitTriggered()));
-	return button;
+            pick->setModel(new QStringListModel(sl));
+            pick->setCurrentIndex(curIdx);
+        } else {
+            button->setEnabled(false);
+        }
+        connect(pick, SIGNAL(selected(QString)), this, SLOT(emitTriggered()));
+        return button;
     }
 
 private slots:
     void emitTriggered()
     {
-	QMaemo5ListPickSelector *pick = qobject_cast<QMaemo5ListPickSelector *>(sender());
-	if (!pick)
-	    return;
-	int idx = pick->currentIndex();
+        QMaemo5ListPickSelector *pick = qobject_cast<QMaemo5ListPickSelector *>(sender());
+        if (!pick)
+            return;
+        int idx = pick->currentIndex();
 
-	if (m_actions && idx >= 0 && idx < m_actions->actions().count())
-	    m_actions->actions().at(idx)->trigger();
+        if (m_actions && idx >= 0 && idx < m_actions->actions().count())
+            m_actions->actions().at(idx)->trigger();
     }
 
 private:
@@ -441,65 +487,82 @@ private:
     mutable QMutex mutex;
 };
 
-class NetworkAccessManagerFactory : public QDeclarativeNetworkAccessManagerFactory
+class SystemProxyFactory : public QNetworkProxyFactory
 {
 public:
-    NetworkAccessManagerFactory() : cacheSize(0) {}
-    ~NetworkAccessManagerFactory() {}
-
-    QNetworkAccessManager *create(QObject *parent);
+    SystemProxyFactory() : proxyDirty(true), httpProxyInUse(false) {
+    }
 
-    void setupProxy(QNetworkAccessManager *nam)
+    virtual QList<QNetworkProxy> queryProxy(const QNetworkProxyQuery &query)
     {
-        class SystemProxyFactory : public QNetworkProxyFactory
-        {
-        public:
-            virtual QList<QNetworkProxy> queryProxy(const QNetworkProxyQuery &query)
-            {
-                QString protocolTag = query.protocolTag();
-                if (httpProxyInUse && (protocolTag == "http" || protocolTag == "https")) {
-                    QList<QNetworkProxy> ret;
-                    ret << httpProxy;
-                    return ret;
-                }
+        if (proxyDirty)
+            setupProxy();
+        QString protocolTag = query.protocolTag();
+        if (httpProxyInUse && (protocolTag == "http" || protocolTag == "https")) {
+            QList<QNetworkProxy> ret;
+            ret << httpProxy;
+            return ret;
+        }
 #ifdef Q_OS_WIN
-		// systemProxyForQuery can take insanely long on Windows (QTBUG-10106)
-                return QNetworkProxyFactory::proxyForQuery(query);
+        // systemProxyForQuery can take insanely long on Windows (QTBUG-10106)
+        return QNetworkProxyFactory::proxyForQuery(query);
 #else
-                return QNetworkProxyFactory::systemProxyForQuery(query);
+        return QNetworkProxyFactory::systemProxyForQuery(query);
 #endif
-            }
-            void setHttpProxy (QNetworkProxy proxy)
-            {
-                httpProxy = proxy;
-                httpProxyInUse = true;
-            }
-            void unsetHttpProxy ()
-            {
-                httpProxyInUse = false;
-            }
-        private:
-            bool httpProxyInUse;
-            QNetworkProxy httpProxy;
-        };
-
-        SystemProxyFactory *proxyFactory = new SystemProxyFactory;
-        if (ProxySettings::httpProxyInUse())
-            proxyFactory->setHttpProxy(ProxySettings::httpProxy());
-        else
-            proxyFactory->unsetHttpProxy();
-        nam->setProxyFactory(proxyFactory);
     }
 
+    void setupProxy() {
+        // Don't bother locking because we know that the proxy only
+        // changes in response to the settings dialog and that
+        // the view will be reloaded.
+        proxyDirty = false;
+        httpProxyInUse = ProxySettings::httpProxyInUse();
+        if (httpProxyInUse)
+            httpProxy = ProxySettings::httpProxy();
+    }
+
+    void proxyChanged() {
+        proxyDirty = true;
+    }
+
+private:
+    volatile bool proxyDirty;
+    bool httpProxyInUse;
+    QNetworkProxy httpProxy;
+};
+
+class NetworkAccessManagerFactory : public QObject, public QDeclarativeNetworkAccessManagerFactory
+{
+    Q_OBJECT
+public:
+    NetworkAccessManagerFactory() : cacheSize(0) {}
+    ~NetworkAccessManagerFactory() {}
+
+    QNetworkAccessManager *create(QObject *parent);
+
     void setCacheSize(int size) {
         if (size != cacheSize) {
             cacheSize = size;
         }
     }
 
+    void proxyChanged() {
+        foreach (QNetworkAccessManager *nam, namList) {
+            static_cast<SystemProxyFactory*>(nam->proxyFactory())->proxyChanged();
+        }
+    }
+
     static PersistentCookieJar *cookieJar;
+
+private slots:
+    void managerDestroyed(QObject *obj) {
+        namList.removeOne(static_cast<QNetworkAccessManager*>(obj));
+    }
+
+private:
     QMutex mutex;
     int cacheSize;
+    QList<QNetworkAccessManager*> namList;
 };
 
 PersistentCookieJar *NetworkAccessManagerFactory::cookieJar = 0;
@@ -520,7 +583,7 @@ QNetworkAccessManager *NetworkAccessManagerFactory::create(QObject *parent)
     }
     manager->setCookieJar(cookieJar);
     cookieJar->setParent(0);
-    setupProxy(manager);
+    manager->setProxyFactory(new SystemProxyFactory);
     if (cacheSize > 0) {
         QNetworkDiskCache *cache = new QNetworkDiskCache;
         cache->setCacheDirectory(QDir::tempPath()+QLatin1String("/qml-viewer-network-cache"));
@@ -529,6 +592,8 @@ QNetworkAccessManager *NetworkAccessManagerFactory::create(QObject *parent)
     } else {
         manager->setCache(0);
     }
+    connect(manager, SIGNAL(destroyed(QObject*)), this, SLOT(managerDestroyed(QObject*)));
+    namList.append(manager);
     qDebug() << "created new network access manager for" << parent;
     return manager;
 }
@@ -548,13 +613,13 @@ QDeclarativeViewer::QDeclarativeViewer(QWidget *parent, Qt::WindowFlags flags)
     : QMainWindow(parent, flags)
       , loggerWindow(new LoggerWidget(this))
       , frame_stream(0)
+      , rotateAction(0)
       , orientation(0)
       , showWarningsWindow(0)
       , designModeBehaviorAction(0)
       , m_scriptOptions(0)
       , tester(0)
       , useQmlFileBrowser(true)
-      , m_centralWidget(0)
       , translator(0)
 {
     QDeclarativeViewer::registerTypes();
@@ -589,28 +654,18 @@ QDeclarativeViewer::QDeclarativeViewer(QWidget *parent, Qt::WindowFlags flags)
         recdlg->warning->hide();
     }
 
-    canvas = new QDeclarativeView(this);
+    canvas = new DragAndDropView(this);
     observer = new QmlJSDebugger::QDeclarativeViewObserver(canvas, this);
     new QmlJSDebugger::JSDebuggerAgent(canvas->engine());
 
-    m_centralWidget = new QWidget(this);
-    QVBoxLayout *layout = new QVBoxLayout(m_centralWidget);
-    layout->setMargin(0);
-    layout->setSpacing(0);
-
-
-    layout->addWidget(canvas);
-    m_centralWidget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
-
     canvas->setAttribute(Qt::WA_OpaquePaintEvent);
     canvas->setAttribute(Qt::WA_NoSystemBackground);
 
     canvas->setFocus();
 
-    QObject::connect(observer, SIGNAL(reloadRequested()), this, SLOT(reload()));
     QObject::connect(canvas, SIGNAL(sceneResized(QSize)), this, SLOT(sceneResized(QSize)));
     QObject::connect(canvas, SIGNAL(statusChanged(QDeclarativeView::Status)), this, SLOT(statusChanged()));
-    QObject::connect(canvas->engine(), SIGNAL(quit()), QCoreApplication::instance (), SLOT(quit()));
+    QObject::connect(canvas->engine(), SIGNAL(quit()), this, SLOT(close()));
 
     QObject::connect(warningsWidget(), SIGNAL(opened()), this, SLOT(warningsWidgetOpened()));
     QObject::connect(warningsWidget(), SIGNAL(closed()), this, SLOT(warningsWidgetClosed()));
@@ -622,7 +677,7 @@ QDeclarativeViewer::QDeclarativeViewer(QWidget *parent, Qt::WindowFlags flags)
         setMenuBar(0);
     }
 
-    setCentralWidget(m_centralWidget);
+    setCentralWidget(canvas);
 
     namFactory = new NetworkAccessManagerFactory;
     canvas->engine()->setNetworkAccessManagerFactory(namFactory);
@@ -655,12 +710,14 @@ void QDeclarativeViewer::setDesignModeBehavior(bool value)
 
 void QDeclarativeViewer::enableExperimentalGestures()
 {
+#ifndef QT_NO_GESTURES
     canvas->viewport()->grabGesture(Qt::TapGesture,Qt::DontStartGestureOnChildren|Qt::ReceivePartialGestures|Qt::IgnoredGesturesPropagateToParent);
     canvas->viewport()->grabGesture(Qt::TapAndHoldGesture,Qt::DontStartGestureOnChildren|Qt::ReceivePartialGestures|Qt::IgnoredGesturesPropagateToParent);
     canvas->viewport()->grabGesture(Qt::PanGesture,Qt::DontStartGestureOnChildren|Qt::ReceivePartialGestures|Qt::IgnoredGesturesPropagateToParent);
     canvas->viewport()->grabGesture(Qt::PinchGesture,Qt::DontStartGestureOnChildren|Qt::ReceivePartialGestures|Qt::IgnoredGesturesPropagateToParent);
     canvas->viewport()->grabGesture(Qt::SwipeGesture,Qt::DontStartGestureOnChildren|Qt::ReceivePartialGestures|Qt::IgnoredGesturesPropagateToParent);
     canvas->viewport()->setAttribute(Qt::WA_AcceptTouchEvents);
+#endif
 }
 
 QDeclarativeView *QDeclarativeViewer::view() const
@@ -676,11 +733,14 @@ LoggerWidget *QDeclarativeViewer::warningsWidget() const
 void QDeclarativeViewer::createMenu()
 {
     QAction *openAction = new QAction(tr("&Open..."), this);
-    openAction->setShortcut(QKeySequence("Ctrl+O"));
+    openAction->setShortcuts(QKeySequence::Open);
     connect(openAction, SIGNAL(triggered()), this, SLOT(openFile()));
 
+    QAction *openUrlAction = new QAction(tr("Open &URL..."), this);
+    connect(openUrlAction, SIGNAL(triggered()), this, SLOT(openUrl()));
+
     QAction *reloadAction = new QAction(tr("&Reload"), this);
-    reloadAction->setShortcut(QKeySequence("Ctrl+R"));
+    reloadAction->setShortcuts(QKeySequence::Refresh);
     connect(reloadAction, SIGNAL(triggered()), this, SLOT(reload()));
 
     QAction *snapshotAction = new QAction(tr("&Take Snapshot"), this);
@@ -690,9 +750,6 @@ void QDeclarativeViewer::createMenu()
     recordAction = new QAction(tr("Start Recording &Video"), this);
     recordAction->setShortcut(QKeySequence("F9"));
     connect(recordAction, SIGNAL(triggered()), this, SLOT(toggleRecordingWithSelection()));
-#ifdef NO_PRIVATE_HEADERS
-    recordAction->setEnabled(false);
-#endif
 
     QAction *recordOptions = new QAction(tr("Video &Options..."), this);
     connect(recordOptions, SIGNAL(triggered()), this, SLOT(chooseRecordingOptions()));
@@ -715,6 +772,7 @@ void QDeclarativeViewer::createMenu()
 
     speedAction = playSpeedMenu->addAction(tr("0.25x"), this, SLOT(changeAnimationSpeed()));
     speedAction->setCheckable(true);
+    speedAction->setCheckable(true);
     speedAction->setData(4.0f);
     playSpeedMenuActions->addAction(speedAction);
 
@@ -753,7 +811,8 @@ void QDeclarativeViewer::createMenu()
     designModeBehaviorAction->setEnabled(QmlJSDebugger::QDeclarativeObserverService::hasDebuggingClient());
     connect(designModeBehaviorAction, SIGNAL(triggered(bool)), this, SLOT(setDesignModeBehavior(bool)));
     connect(observer, SIGNAL(designModeBehaviorChanged(bool)), designModeBehaviorAction, SLOT(setChecked(bool)));
-    connect(QmlJSDebugger::QDeclarativeObserverService::instance(), SIGNAL(debuggingClientChanged(bool)), designModeBehaviorAction, SLOT(setEnabled(bool)));
+    connect(QmlJSDebugger::QDeclarativeObserverService::instance(), SIGNAL(debuggingClientChanged(bool)),
+            designModeBehaviorAction, SLOT(setEnabled(bool)));
 
     appOnTopAction = new QAction(tr("Keep Window on Top"), this);
     appOnTopAction->setCheckable(true);
@@ -769,36 +828,49 @@ void QDeclarativeViewer::createMenu()
     fullscreenAction->setCheckable(true);
     connect(fullscreenAction, SIGNAL(triggered()), this, SLOT(toggleFullScreen()));
 
-    QAction *rotateOrientation = new QAction(tr("Rotate orientation"), this);
-    rotateOrientation->setShortcut(QKeySequence("Ctrl+T"));
-    connect(rotateOrientation, SIGNAL(triggered()), this, SLOT(rotateOrientation()));
+    rotateAction = new QAction(tr("Rotate orientation"), this);
+    rotateAction->setShortcut(QKeySequence("Ctrl+T"));
+    connect(rotateAction, SIGNAL(triggered()), this, SLOT(rotateOrientation()));
 
     orientation = new QActionGroup(this);
     orientation->setExclusive(true);
     connect(orientation, SIGNAL(triggered(QAction*)), this, SLOT(changeOrientation(QAction*)));
 
+#if defined(Q_OS_SYMBIAN)
+    QAction *autoOrientationAction = new QAction(tr("Auto-orientation"), this);
+    autoOrientationAction->setCheckable(true);
+#endif
     QAction *portraitAction = new QAction(tr("Portrait"), this);
     portraitAction->setCheckable(true);
     QAction *landscapeAction = new QAction(tr("Landscape"), this);
     landscapeAction->setCheckable(true);
+#if !defined(Q_OS_SYMBIAN)
     QAction *portraitInvAction = new QAction(tr("Portrait (inverted)"), this);
     portraitInvAction->setCheckable(true);
     QAction *landscapeInvAction = new QAction(tr("Landscape (inverted)"), this);
     landscapeInvAction->setCheckable(true);
+#endif
 
     QAction *aboutAction = new QAction(tr("&About Qt..."), this);
+    aboutAction->setMenuRole(QAction::AboutQtRole);
     connect(aboutAction, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
 
+    QAction *closeAction = new QAction(tr("&Close"), this);
+    closeAction->setShortcuts(QKeySequence::Close);
+    connect(closeAction, SIGNAL(triggered()), this, SLOT(close()));
+
     QAction *quitAction = new QAction(tr("&Quit"), this);
-    quitAction->setShortcut(QKeySequence("Ctrl+Q"));
+    quitAction->setMenuRole(QAction::QuitRole);
+    quitAction->setShortcuts(QKeySequence::Quit);
     connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
 
     QMenuBar *menu = menuBar();
     if (!menu)
-	return;
+        return;
 
 #if defined(Q_WS_MAEMO_5)
     menu->addAction(openAction);
+    menu->addAction(openUrlAction);
     menu->addAction(reloadAction);
 
     menu->addAction(snapshotAction);
@@ -819,38 +891,45 @@ void QDeclarativeViewer::createMenu()
 
     QMenu *fileMenu = menu->addMenu(tr("&File"));
     fileMenu->addAction(openAction);
+    fileMenu->addAction(openUrlAction);
     fileMenu->addAction(reloadAction);
     fileMenu->addSeparator();
+    fileMenu->addAction(closeAction);
+#if !defined(Q_OS_SYMBIAN)
     fileMenu->addAction(quitAction);
 
-#if !defined(Q_OS_SYMBIAN)
     QMenu *recordMenu = menu->addMenu(tr("&Recording"));
     recordMenu->addAction(snapshotAction);
     recordMenu->addAction(recordAction);
 
     QMenu *debugMenu = menu->addMenu(tr("&Debugging"));
-    debugMenu->addAction(playSpeedAction);
+    debugMenu->addMenu(playSpeedMenu);
     debugMenu->addAction(showWarningsWindow);
     debugMenu->addAction(designModeBehaviorAction);
     debugMenu->addAction(appOnTopAction);
 #endif // ! Q_OS_SYMBIAN
 
-    QMenu *settingsMenu = menu->addMenu(tr("S&ettings"));
+    QMenu *settingsMenu = menu->addMenu(tr("&Settings"));
     settingsMenu->addAction(proxyAction);
-#if !defined(Q_OS_SYMBIAN)
+#if defined(Q_OS_SYMBIAN)
+    settingsMenu->addAction(fullscreenAction);
+#else
     settingsMenu->addAction(recordOptions);
     settingsMenu->addMenu(loggerWindow->preferencesMenu());
-#else // ! Q_OS_SYMBIAN
-    settingsMenu->addAction(fullscreenAction);
-#endif // Q_OS_SYMBIAN
-    settingsMenu->addAction(rotateOrientation);
+#endif // !Q_OS_SYMBIAN
+    settingsMenu->addAction(rotateAction);
 
     QMenu *propertiesMenu = settingsMenu->addMenu(tr("Properties"));
 
+#if defined(Q_OS_SYMBIAN)
+    orientation->addAction(autoOrientationAction);
+#endif
     orientation->addAction(portraitAction);
     orientation->addAction(landscapeAction);
+#if !defined(Q_OS_SYMBIAN)
     orientation->addAction(portraitInvAction);
     orientation->addAction(landscapeInvAction);
+#endif
     propertiesMenu->addActions(orientation->actions());
 
     QMenu *helpMenu = menu->addMenu(tr("&Help"));
@@ -868,11 +947,29 @@ void QDeclarativeViewer::showProxySettings()
 
 void QDeclarativeViewer::proxySettingsChanged()
 {
+    namFactory->proxyChanged();
     reload ();
 }
 
 void QDeclarativeViewer::rotateOrientation()
 {
+#if defined(Q_WS_S60)
+    CAknAppUi *appUi = static_cast<CAknAppUi *>(CEikonEnv::Static()->AppUi());
+    if (appUi) {
+        CAknAppUi::TAppUiOrientation oldOrientation = appUi->Orientation();
+        QString newOrientation;
+        if (oldOrientation == CAknAppUi::EAppUiOrientationPortrait) {
+            newOrientation = QLatin1String("Landscape");
+        } else {
+            newOrientation = QLatin1String("Portrait");
+        }
+        foreach (QAction *action, orientation->actions()) {
+            if (action->text() == newOrientation) {
+                changeOrientation(action);
+            }
+        }
+    }
+#else
     QAction *current = orientation->checkedAction();
     QList<QAction *> actions = orientation->actions();
     int index = actions.indexOf(current);
@@ -881,6 +978,7 @@ void QDeclarativeViewer::rotateOrientation()
 
     QAction *newOrientation = actions[(index + 1) % actions.count()];
     changeOrientation(newOrientation);
+#endif
 }
 
 void QDeclarativeViewer::toggleFullScreen()
@@ -978,41 +1076,41 @@ void QDeclarativeViewer::toggleRecording()
 
 void QDeclarativeViewer::setAnimationsPaused(bool enable)
 {
-    if (enable) {
-        setAnimationSpeed(0.0);
-    } else {
-        setAnimationSpeed(animationSpeed);
-    }
+   if (enable) {
+       setAnimationSpeed(0.0);
+   } else {
+       setAnimationSpeed(animationSpeed);
+   }
 }
 
 void QDeclarativeViewer::pauseAnimations() {
-    pauseAnimationsAction->setChecked(true);
-    setAnimationsPaused(true);
+   pauseAnimationsAction->setChecked(true);
+   setAnimationsPaused(true);
 }
 
 void QDeclarativeViewer::stepAnimations()
 {
-    setAnimationSpeed(1.0);
-    QTimer::singleShot(m_stepSize, this, SLOT(pauseAnimations()));
-}
+   setAnimationSpeed(1.0);
+   QTimer::singleShot(m_stepSize, this, SLOT(pauseAnimations()));
+ }
 
 void QDeclarativeViewer::setAnimationStep()
 {
-    bool ok;
-    int stepSize = QInputDialog::getInt(this, tr("Set animation step duration"),
-                                              tr("Step duration (ms):"), m_stepSize, 20, 10000, 1, &ok);
-    if (ok) m_stepSize = stepSize;
+   bool ok;
+   int stepSize = QInputDialog::getInt(this, tr("Set animation step duration"),
+                                             tr("Step duration (ms):"), m_stepSize, 20, 10000, 1, &ok);
+   if (ok) m_stepSize = stepSize;
 }
 
 void QDeclarativeViewer::changeAnimationSpeed()
 {
-    QAction *action = qobject_cast<QAction*>(sender());
-    if (action) {
-        float f = action->data().toFloat();
-        animationSpeed = f;
-        if (!pauseAnimationsAction->isChecked())
-            setAnimationSpeed(animationSpeed);
-    }
+   QAction *action = qobject_cast<QAction*>(sender());
+   if (action) {
+       float f = action->data().toFloat();
+       animationSpeed = f;
+       if (!pauseAnimationsAction->isChecked())
+           setAnimationSpeed(animationSpeed);
+   }
 }
 
 void QDeclarativeViewer::addLibraryPath(const QString& lib)
@@ -1027,15 +1125,14 @@ void QDeclarativeViewer::addPluginPath(const QString& plugin)
 
 void QDeclarativeViewer::reload()
 {
-    observer->setDesignModeBehavior(false);
-    open(currentFileOrUrl);
+    launch(currentFileOrUrl);
 }
 
 void QDeclarativeViewer::openFile()
 {
     QString cur = canvas->source().toLocalFile();
     if (useQmlFileBrowser) {
-        open("qrc:/content/Browser.qml");
+        open("qrc:/browser/Browser.qml");
     } else {
         QString fileName = QFileDialog::getOpenFileName(this, tr("Open QML file"), cur, tr("QML Files (*.qml)"));
         if (!fileName.isEmpty()) {
@@ -1045,6 +1142,14 @@ void QDeclarativeViewer::openFile()
     }
 }
 
+void QDeclarativeViewer::openUrl()
+{
+    QString cur = canvas->source().toLocalFile();
+    QString url= QInputDialog::getText(this, tr("Open QML file"), tr("URL of main QML file:"), QLineEdit::Normal, cur);
+    if (!url.isEmpty())
+        open(url);
+}
+
 void QDeclarativeViewer::statusChanged()
 {
     if (canvas->status() == QDeclarativeView::Error && tester)
@@ -1077,11 +1182,7 @@ void QDeclarativeViewer::loadDummyDataFiles(const QString& directory)
     QStringList list = dir.entryList();
     for (int i = 0; i < list.size(); ++i) {
         QString qml = list.at(i);
-        QFile f(dir.filePath(qml));
-        f.open(QIODevice::ReadOnly);
-        QByteArray data = f.readAll();
-        QDeclarativeComponent comp(canvas->engine());
-        comp.setData(data, QUrl());
+        QDeclarativeComponent comp(canvas->engine(), dir.filePath(qml));
         QObject *dummyData = comp.create();
 
         if(comp.isError()) {
@@ -1220,8 +1321,10 @@ bool QDeclarativeViewer::event(QEvent *event)
 {
     if (event->type() == QEvent::WindowActivate) {
         Runtime::instance()->setActiveWindow(true);
+        DeviceOrientation::instance()->resumeListening();
     } else if (event->type() == QEvent::WindowDeactivate) {
         Runtime::instance()->setActiveWindow(false);
+        DeviceOrientation::instance()->pauseListening();
     }
     return QWidget::event(event);
 }
@@ -1397,6 +1500,8 @@ void QDeclarativeViewer::appAboutToQuit()
     // avoid crashes if messages are received after app has closed
     delete loggerWindow;
     loggerWindow = 0;
+    delete tester;
+    tester = 0;
 }
 
 void QDeclarativeViewer::autoStartRecording()
@@ -1431,9 +1536,24 @@ void QDeclarativeViewer::changeOrientation(QAction *action)
 {
     if (!action)
         return;
-    action->setChecked(true);
-
     QString o = action->text();
+    action->setChecked(true);
+#if defined(Q_WS_S60)
+    CAknAppUi *appUi = static_cast<CAknAppUi *>(CEikonEnv::Static()->AppUi());
+    if (appUi) {
+        CAknAppUi::TAppUiOrientation orientation = appUi->Orientation();
+        if (o == QLatin1String("Auto-orientation")) {
+            appUi->SetOrientationL(CAknAppUi::EAppUiOrientationAutomatic);
+            rotateAction->setVisible(false);
+        } else if (o == QLatin1String("Portrait")) {
+            appUi->SetOrientationL(CAknAppUi::EAppUiOrientationPortrait);
+            rotateAction->setVisible(true);
+        } else if (o == QLatin1String("Landscape")) {
+            appUi->SetOrientationL(CAknAppUi::EAppUiOrientationLandscape);
+            rotateAction->setVisible(true);
+        }
+    }
+#else
     if (o == QLatin1String("Portrait"))
         DeviceOrientation::instance()->setOrientation(DeviceOrientation::Portrait);
     else if (o == QLatin1String("Landscape"))
@@ -1442,6 +1562,7 @@ void QDeclarativeViewer::changeOrientation(QAction *action)
         DeviceOrientation::instance()->setOrientation(DeviceOrientation::PortraitInverted);
     else if (o == QLatin1String("Landscape (inverted)"))
         DeviceOrientation::instance()->setOrientation(DeviceOrientation::LandscapeInverted);
+#endif
 }
 
 void QDeclarativeViewer::orientationChanged()
@@ -1517,7 +1638,6 @@ void QDeclarativeViewer::updateSizeHints(bool initial)
         QSize newWindowSize = initial ? initialSize : canvas->sizeHint();
         //qWarning() << "USH:" << (initial ? "INIT:" : "V2R:") << "setting fixed size " << newWindowSize;
         if (!isFullScreen() && !isMaximized()) {
-            m_centralWidget->setFixedSize(newWindowSize.width(), newWindowSize.height() + 32);
             canvas->setFixedSize(newWindowSize);
             resize(1, 1);
             layout()->setSizeConstraint(QLayout::SetFixedSize);
@@ -1527,18 +1647,14 @@ void QDeclarativeViewer::updateSizeHints(bool initial)
     //qWarning() << "USH: R2V: setting free size ";
     layout()->setSizeConstraint(QLayout::SetNoConstraint);
     layout()->activate();
-
+    setMinimumSize(minimumSizeHint());
     setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
     canvas->setMinimumSize(QSize(0,0));
     canvas->setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
 
-    m_centralWidget->setMinimumSize(QSize(0,0));
-    m_centralWidget->setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));
-
     isRecursive = false;
 }
 
-
 void QDeclarativeViewer::registerTypes()
 {
     static bool registered = false;
@@ -1546,6 +1662,7 @@ void QDeclarativeViewer::registerTypes()
     if (!registered) {
         // registering only for exposing the DeviceOrientation::Orientation enum
         qmlRegisterUncreatableType<DeviceOrientation>("Qt",4,7,"Orientation","");
+        qmlRegisterUncreatableType<DeviceOrientation>("QtQuick",1,0,"Orientation","");
         registered = true;
     }
 }
diff --git a/share/qtcreator/qml/qmlobserver/qmlruntime.h b/share/qtcreator/qml/qmlobserver/qmlruntime.h
index b09d1b879b8..7ef1bd1479f 100644
--- a/share/qtcreator/qml/qmlobserver/qmlruntime.h
+++ b/share/qtcreator/qml/qmlobserver/qmlruntime.h
@@ -67,7 +67,6 @@ class NetworkAccessManagerFactory;
 class QTranslator;
 class QActionGroup;
 class QMenuBar;
-class QSplitter;
 
 class QDeclarativeViewer
     : public QMainWindow
@@ -75,7 +74,7 @@ class QDeclarativeViewer
     Q_OBJECT
 
 public:
-    explicit QDeclarativeViewer(QWidget *parent = 0, Qt::WindowFlags flags = 0);
+    QDeclarativeViewer(QWidget *parent = 0, Qt::WindowFlags flags = 0);
     ~QDeclarativeViewer();
 
     static void registerTypes();
@@ -88,7 +87,8 @@ public:
         SaveOnExit = 0x00000010,
         ExitOnComplete = 0x00000020,
         ExitOnFailure = 0x00000040,
-        Snapshot = 0x00000080
+        Snapshot = 0x00000080,
+        TestSkipProperty = 0x00000100
     };
     Q_DECLARE_FLAGS(ScriptOptions, ScriptOption)
     void setScript(const QString &s) { m_script = s; }
@@ -111,6 +111,7 @@ public:
 
     QDeclarativeView *view() const;
     LoggerWidget *warningsWidget() const;
+    QString currentFile() const { return currentFileOrUrl; }
 
     void enableExperimentalGestures();
 
@@ -119,6 +120,7 @@ public slots:
     void sceneResized(QSize size);
     bool open(const QString&);
     void openFile();
+    void openUrl();
     void reload();
     void takeSnapShot();
     void toggleRecording();
@@ -163,7 +165,6 @@ private:
     QString getVideoFileName();
 
     LoggerWidget *loggerWindow;
-
     QDeclarativeView *canvas;
     QmlJSDebugger::QDeclarativeViewObserver *observer;
     QSize initialSize;
@@ -183,8 +184,6 @@ private:
     int record_autotime;
     bool devicemode;
     QAction *recordAction;
-    QString currentSkin;
-    bool scaleSkin;
     RecordingDialog *recdlg;
 
     void senseImageMagick();
@@ -199,6 +198,7 @@ private:
     QAction *animationStepAction;
     QAction *animationSetStepAction;
 
+    QAction *rotateAction;
     QActionGroup *orientation;
     QAction *showWarningsWindow;
     QAction *designModeBehaviorAction;
@@ -214,8 +214,6 @@ private:
 
     bool useQmlFileBrowser;
 
-    QWidget *m_centralWidget;
-
     QTranslator *translator;
     void loadTranslationFile(const QString& directory);
 
diff --git a/share/qtcreator/qml/qmlobserver/qmlruntime.qrc b/share/qtcreator/qml/qmlobserver/qmlruntime.qrc
deleted file mode 100644
index 4136eafa526..00000000000
--- a/share/qtcreator/qml/qmlobserver/qmlruntime.qrc
+++ /dev/null
@@ -1,9 +0,0 @@
-<RCC>
-    <qresource prefix="/">
-        <file>content/Browser.qml</file>
-        <file>content/images/up.png</file>
-        <file>content/images/folder.png</file>
-        <file>content/images/titlebar.sci</file>
-        <file>content/images/titlebar.png</file>
-    </qresource>
-</RCC>
diff --git a/share/qtcreator/qml/qmlobserver/startup/Logo.qml b/share/qtcreator/qml/qmlobserver/startup/Logo.qml
new file mode 100644
index 00000000000..aa5648f5ed5
--- /dev/null
+++ b/share/qtcreator/qml/qmlobserver/startup/Logo.qml
@@ -0,0 +1,179 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+    id: myApp
+    width: 411
+    height: 411
+    color: "transparent"
+    property alias logoState : myApp.state
+    signal animationFinished
+
+    Item {
+        id: sketchBlueHolder
+        width: sketchLogo.width
+        height: sketchLogo.height
+        Image {
+            id: image1
+            x: -44
+            y: -45
+            smooth: true
+            source: "shadow.png"
+        }
+        Item {
+            clip: true
+            width: sketchLogo.width
+            height: sketchLogo.height
+            Image {
+                id: sketchLogo
+                smooth: true
+                source: "qt-sketch.jpg"
+            }
+            Image {
+                id: blueLogo
+                y: -420
+                smooth: true
+                source: "qt-blue.jpg"
+            }
+        }
+    }
+
+    states: [
+        State {
+            name: "showBlueprint"
+            PropertyChanges {
+                target: blueLogo
+                y: 0
+            }
+            PropertyChanges {
+                target: sketchLogo
+                opacity: 0
+            }
+        },
+        State {
+            extend: "showBlueprint"
+            name: "finale"
+            PropertyChanges {
+                target: fullLogo
+                opacity: 1
+            }
+            PropertyChanges {
+                target: backLogo
+                opacity: 1
+                scale: 1
+            }
+            PropertyChanges {
+                target: frontLogo
+                opacity: 1
+                scale: 1
+            }
+            PropertyChanges {
+                target: qtText
+                opacity: 1
+                scale: 1
+            }
+            PropertyChanges {
+                target: sketchBlueHolder
+                opacity: 0
+                scale: 1.4
+            }
+        }
+    ]
+
+    transitions: [
+        Transition {
+            to: "showBlueprint"
+            SequentialAnimation {
+                NumberAnimation { property: "y"; duration: 600; easing.type: "OutBounce" }
+                PropertyAction { target: sketchLogo; property: "opacity" }
+            }
+        },
+        Transition {
+            to: "finale"
+            PropertyAction { target: fullLogo; property: "opacity" }
+            SequentialAnimation {
+                NumberAnimation { target: backLogo; properties: "scale, opacity"; duration: 300 }
+                NumberAnimation { target: frontLogo; properties: "scale, opacity"; duration: 300 }
+                ParallelAnimation {
+                    NumberAnimation { target: qtText; properties: "opacity, scale"; duration: 400; easing.type: "OutQuad" }
+                    NumberAnimation { target: sketchBlueHolder; property: "opacity"; duration: 300; easing.type: "OutQuad" }
+                    NumberAnimation { target: sketchBlueHolder; property: "scale"; duration: 320; easing.type: "OutQuad" }
+                }
+                PauseAnimation { duration: 1000 }
+                ScriptAction { script: myApp.animationFinished() }
+            }
+        }
+    ]
+
+    Item {
+        id: fullLogo
+        opacity: 0
+        Image {
+            id: backLogo
+            x: -16
+            y: -41
+            opacity: 0
+            scale: 0.7
+            smooth: true
+            source: "qt-back.png"
+        }
+        Image {
+            id: frontLogo
+            x: -17
+            y: -41
+            opacity: 0
+            scale: 1.2
+            smooth: true
+            source: "qt-front.png"
+        }
+        Image {
+            id: qtText
+            x: -10
+            y: -41
+            opacity: 0
+            scale: 1.2
+            smooth: true
+            source: "qt-text.png"
+        }
+    }
+}
diff --git a/share/qtcreator/qml/qmlobserver/startup/qt-back.png b/share/qtcreator/qml/qmlobserver/startup/qt-back.png
new file mode 100644
index 0000000000000000000000000000000000000000..077215f882f67b610bffdda72029ee8c2d7dd485
GIT binary patch
literal 3549
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
Mj-hs$rhVw&00(;n>i_@%

literal 0
HcmV?d00001

diff --git a/share/qtcreator/qml/qmlobserver/startup/qt-blue.jpg b/share/qtcreator/qml/qmlobserver/startup/qt-blue.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b2048964836a6ef5056b6caaef326212d9b65ecc
GIT binary patch
literal 20900
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
ADF6Tf

literal 0
HcmV?d00001

diff --git a/share/qtcreator/qml/qmlobserver/startup/qt-front.png b/share/qtcreator/qml/qmlobserver/startup/qt-front.png
new file mode 100644
index 0000000000000000000000000000000000000000..dbfb43e374bb55847bb209fa60db200d197f3bef
GIT binary patch
literal 3318
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
Bie&%*

literal 0
HcmV?d00001

diff --git a/share/qtcreator/qml/qmlobserver/startup/qt-sketch.jpg b/share/qtcreator/qml/qmlobserver/startup/qt-sketch.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1ede6f079b534e6ea55c3fbbb1c4f01721054649
GIT binary patch
literal 17048
zcma&Nc{o&W_&<JT!5EC0G4^eYk;xXKkmU?B3{o@Jh{&Ew_DYMHQI;XQETzT}V=X&L
zQMMLkS6SYYgb;=H`ucpX-|u_<{`@`XI@fis`?;=j&htF?^W69Sx?lId*Z*b#w4JrB
zH2{GEfd9?~{96GqlxV+`=K%-+2LQlyN3;f@$o^-10|5Wd9SP*$Bya@~gu~$ia6th9
zL1Dq2TLd8}h!7D)B1Mo$QMBm)Hnb>894(F#m5{*UBqS8%<>eKW|8Ii`2?>dbipikS
zGIEj_NxA>q@&EVXUnhV;KyE;8z#td^ih;l|kbm7k1^_@|5C~-FKmVV$Gco}|7+h#a
z`2Q8}^g^I;Gys7?;qaYqI07ypup<L7P!*US87{y$jui}N5i*PGB)ar19dVLEL%yne
z*WYbKIQbFPtRfAh*gQk(uB>{B^FGY~yn5%e|L-?<-h<I2L$NCV-U6a9$j<M<Fn|T{
z^E;}ohyW9R%gj@O2|>~uD*=RJIvW`Kn1y0OWpl)^gkYvU4vxtOL+HXLs7usA=p{b)
zSUl0P5YPIZu{&9|fqQ0g5wa|JYgB~6L6AXfWFlaW;uee;f;T}80X$Qd-W0n|*EKzy
z0UqPyv*qvx>dH8D`vy2|wbvQp{#*lgfNMqonXK4DGI+e}Lz>Jzg^M_({k>VvsaBrk
z4?I5Y7D>)aB?F)CbW@NDiyG%E>0Tz&Kaa>cZ%|OhyF&CiXWZaQVXtS|m_E2D5P~=Q
zLz01{{Lm0rWivOWFJ@TlFvkXkbvHor0_%P{4iS(KUTNzBz*^69Tw`vUB7nyUWC-~q
zz5bE}i5e!Lkgq!oB9Yhx63tx5fGjrwPM6cbrL*CBDiC!JQ*c9ry}}I=UAWr?ZTPOS
zO9qFQ;t8gS_o>0v)hx4SNUB-lSgyxIbDBK=JI)dNgJ%LA@?}zJv*@T)(U6dH0yfr3
zz=AV6Z=SA$WQ(NAf-`p`P{#X$@yUdT-I%MvtT`yu=HSCCqMP9ym=X!rCYFv98h8fy
z{w0aiAm8yQMW_N@laTwGpo;CDW%|&iE5702$9sUt1R4azymfQXQUgU3zjF_qy<Ub;
zd1U}kMe9MXnhsjRoQUXdU3G<Ah1y<qAU^*}hPAjed=|<^B$R0+A!J?1W-1WuW)32N
z{<j;(znQ-dzI^;J7@cRtz@4Da2%!B!B1FwL$un{>DbEg_!yi|X1590@)BzaRk)|*h
zl@x~qo=8_9Vb+1p)_G9wd!@oaRw5C;L58P`8;B*7W$;=@m&giGrvH0M3O2F}99A8G
z>I<ZpF&rsZgtK5H;17a28Qe>jeK2T;hf9O8=kNqWF!rbcT;UqprlJHcZY|1=rb#&)
zuu5*$(}mzJ(23`2bea&F`8zZ9L5}0a{Mp?ec&8A?0Nq6G;6-PoFZpj8Q(6@cOcwA{
zzJO%|y?lQ~RbPr8N#?|p4R8)G2bqiKas$^vt4unR=IkVC`Ao|eM@L}CP;~TMyrflz
zsTW!PsyJL|`@ZHYg;s*f{Gu$M#k`w<5OIMQS0er!Wn-Ly1S34&xCU)&6oJ+>5dc_h
zk}(C^B`GXMfhAJ_2(g_@9LeJVY5>Wm2_`J;V+j@c3U*2)Ak>Up;3T1{YiLt%h4XlU
zK{@9~P4rmR9?;5(&280UV<YK@vLeA!P8zb983;c|D*4h7`xUHDQBok2O=$ePI3P80
zp4l%8`06^7#CkIJimSnay;o3>pjo!f9BY@-K{51hZWlazD;jce3<ZO7@j)EeF~nV6
zg>Z_3B21|7E$iXL-YnQG8v0#d*zF5hgwEAMTOK7sy2uJXFX^yhPrMa+FZqc}MO}Gw
zP>e4=oIEF=`^O<F#x_kclItcUW;^v>Vz)OmpTfZ8wRN1`SMFq{li+P~$ZA$78Ch1l
z{qnyV9h-%<`%BNPA8EW<O8V*KO6{93)Z1S82h3=M%w8)$j1>(EQ~rz_K^eGl#h*X2
z_<fLWrT7d$`-RsVkWmdsF~1#*Ev9sse}nuXUsa5h1l1Q08jg=YvejG4zbu#>-*^Vh
zOBO0*-63Us&+dY<y|Ym4tAjRGTwo%3wo?4X#Y_je%sxZ-5*{1*ls*)w;EYmJK&e2d
z^fJSlVCk(wQ97W9P-WZ$bMKfAMxl>8zRE)J^p;d#(^d5VIvg#tz#;|M!9{ijM!_lu
zbjd@>eF_=qy+&8u+z{#LG?I)DD?@^?!ZtR|05!e$fgY{1Oe51l<fATl&mftNKmubH
za3!xkcQLh=-iT6_0u9cm3x)#${mW;Cv&ODwZdsm437%{T0VoC_J>Z+y@Y<uJKVq)F
zmTHf>2p!*bcVA7pL(6MS6Gm3<<&idq-xN&)@g$y5nx6v-6>1n6Y+tdmFhE+}cA-aH
zzj0V~xe;MpUy`#uphxVQjf<)e@ynatWA($MU<3$}u<Dh+^Qg+mb8Zu~ZtzBb9f=m|
z6@bV$-4h>ZF*?V&kS*<{(t0B3YNxo#MTX+Ln5l==tOcYdUtJ~_hzKVSJptId=B9L2
zraQg!3e+;co(bDkt3XFvnV@*E@<JF{E{G#Q4CFWsC(-)~A*5!RFtC_K9#kp=esI+$
zvouR=mMG`uPOybURX6c*G!!${n+VjYWms!_(#g({wuvmjD##hy<d1H5fo@47Dt03%
zFW#Z&bEwu=4tv$!s$9IFd#8A_G9_Z5)1Oy)Av?_EwDR-BuXmMFd?H<OF^bLO=?=0o
z{{T7iN3ExJw8o1Z=DVa2d>Syfr~(&K8g;CTLf`vp#8Z(mNAMhWb5vpr;3fB=fRPW~
z61d0)<Y$<h$%3bhxV9%6zg*^1Hh3jBoBwDI?@|)Tb`sW>?EeR7{C@x5n-elCvljld
z;o6hz1d8tH8d|9x>OF1I1iSXCEKmE8>4{$wVn$O@j-tDii_A&2_c}tIQ@g%#S42`3
zbCC8U`@vv6viZrq_}hknK3SMcCaisjqrdZt0X-61+<qTIzA~wFd4WsDEL6$>{j%_E
zLou{wYXqOjm*#Vs^JpoxLDUgKnOY{&UJkCLJ+tyi<O|QkEs6QH=ZIUmZTZz}rl%>o
z5b_YeM?mtmSm5tt&5d=P??zpukH?F)3c%kL3MDU7_uIZQfO?<BGcn8DD9CLM9=z^u
zouo)Q9P4EO!&%N9NjHFF#o5sFvys$2Z=M*4BFf>G4O!@@q_7^yQrLO?u`DEXIbl)I
z5XH6fJ52gn)BOYgb!sx|$^(L*)-ko*(Z`pOi$C)|qGWmbHsQ@?(tZ)DO2yt0D95o-
zJ@a+~<2{zC*mYy!O`9_DiC0aihpkgZ`e%mjM49xdm)f%NJ)C&HkC`Ef+xN-<-MNn>
z$yCV{eGf!Zm3a0Sh9GQI=qnqrGYc&(I|N@gr@@pAK&wC|<PTqj8O&@xE{TDXD_IIz
zoZ9h&uOdf0x&ePnetps%oEQOa+m%6Iag-Q68I-)AW^Ol{(tusoKs1xe#le|iwy_UK
zH2jPqoS5}m$?j^-`R_a_aD<Jp$6Lc-w-6%p;b0C~0Hu*A(1R0wbAfJ^K$0JIKnjMv
z45kYe8(%?FHpk$5VFt)Rk$oieGcQkiOuV()-xd@NKq=t0=EKM)5IB0#__;$!=(^;5
z{Ou31j<!p_*3J&P4U=~e{{ZO9Y(!O6nczf4N0isqxo_IfOY0rYO0R!q*oll)CMi-s
zts+!!dch-Ds*bD<{3Q~gea#Z8nBE1iask4aZ23Z{m?B)zg>2GFD6Q}uLPD0wvl&9?
zQa+q!1Rg<>jHlxA_CVPwjh(9Qs_8GY8m~dpE2!4x!^};N3x?1&M9(Y1V|{FJ2!BQN
zo#Z*Dbj%q8NWbVCuA2^9f`Sg;<`t&0?v=cErjQVES{Zh&QSiMFX`;0@LOhiJL)9)^
z&26}%wlHSgZx(}kT&pN_BpnoEBUG)o@pu{ozNEc@;Hy&LEe;sT8_vFlCMCVm+nTg{
z`p?yH)q04lKAWAs%zhYJP@RaqX^aP72D61?49LRfBx(K+d?@z?#!hcODaZ#yM~{)>
zF*kVW<*-B?ydfOHHq~I?i~lk5VaSD=`IrN5{RikA6A+LNIbLnCkms7o+mjJ3so#Yz
z&4Ju;Je)=9DM+HI-x;#sPWi<^Kcq?B^$;DjHoh<jjv*kO05dAv3S>RxpJG^Rrv)ea
zymsaue`QXRasxW?UtdOMmLU+ymq{j|eOc=U)f6vw2$6U;Ouq|&n;SYC6(rRn1+m*<
z;46g;n{6H|m%hi9ig9V|FFICz`DYVhsv(lWLk^)4wKxzEOzXl;t8!5AdlVtENs`Xr
zV6N>`xRIYT+P4Qi6y+2ZKLEktUEq)ny40Rc4F$(me09-&X6J27!n0BzR;bPQh?*nZ
zS25MLa?RSmPiQ(C_>g$>L(ri?%f2q?med`~-N7M7Ts-!Y3&Qkg(dBFh3C(YQfKf)$
z%eCA5qBb7<m6Kc~a_$o8)$)U;y{GSnc2vvSVYFA>KA7LCy7b@lH&E4IPbjtiV8TS@
ztBAAi8PfYARJ(2Ubtak>hbmkC0d6fb&3kif=uTo68asNLL(DAp^NvKlkhvY}yZm;v
z<|ToSPg5a}_WB2~QPyK~p0~V=@tENkh0o%NqEYjVL4#8+J@RNa8WztHC{Ve9qDfi%
z4Azmyr~6y@rWwRqxsfhF(Mx9wG>__{8nx0k$ZDz}J38%Fux3ojNadJv$9|=r5Nh7h
zKS&rB?7_v}x(eT#@0T9yf+~0uG4Z}ho;#|OG1>(e^B^Q4<nX!(pqM8F&Fz7A@ws|6
z^u70ZypG8j;7_+r`!L7;3Zh@HlgnK-%KYB-H!8Qf_v&Pi^_4t|W-|gP2=tfG_=VP5
zP*vi2sN!T#Pu>rhFxz)E-9FjN^t@*BN!Wv;%Xg1xJ$4#h4m~c!T{tJeAMlF#Z^=B>
zGp+sHKY(#@^r(fSsZ3zr@T)z=Ct^ATuTLHK?LOUWgkVZ}#1@}2gtDWMPH^~SGHf{h
zRn^-lIllba>RxbR>>Iwc<6da{*^QWMlskw#lau9qC9o#MZ@S@|VF&fU$De$n3i}5q
zZ(-MsD~@Y?&m5j@=W~gKBffMi^$pM#1;c;fkDgdbtEvb57d6*Dw`+<2afU3obZMWF
z_gXUSaA>2=Bgo4w5icHA&z*AtSDlgYt4c}gV3g<)0;@~~+8;}IJAGEw>`>|6sDa!H
zDV6`^L`U7M$UTt6t8`sRT^IN;<cjJP8+Zr7&jRyIfSJ^%&+5>Em<K1nbEb>F;;<^A
z5bPo%1I`V;IVSlf`S*O-BIQE2y$h}d=8>J6LLgmmNsT^Z^_9~^_+1yO;7li|!xDlk
zhX0x}0O+fH5+ZQ<so<G&6J8S`sFcGxH_(5h-X~i`p(|ZawyMhujwf1S%r4E1zyD@4
zlU1kj4`@1IEhiF}G<Lh7vM5N^(axjZ&<s)m>bpBp;6TDpI$4?|$J~eDzM4-8Ezn1H
z{O2>g7Bj<Ge1v@az`W7!{&mv}I;;GV<v5M0=OKQ-s}hCNRD?Z9iTrL7pB(gpYZ)YW
zowT>TrnogUqi+9?7}YVOc*{emO8w~%Z|^I*HiV8G+4Z7H+9Qz2LFQJt*Ok@1J}Rm;
znbe}we*DUnl!qrx#*Nm@%Fi4wX}e&>Zx7t68<QBNmD!eQA2{n2>C}9rT|Z#g35jks
z!nhtb>@|s}lFa~e;wo^$@C<SknBz&Pj7d7YQTXK7KftnyFj1B!l*Lh1=BUitl6db8
zq5D;O=pwUQpxmKF;!dO+)qsP<%gu3(u9C5SPE@$SI$5?;d}pN|^AQ=wc%NYY-LunA
z-VJd?@Cx{&^_w*R9s!|KHh*h2ehdeMP&YbBd{G9vKY$HM@|D3?tSLT@^^$&8_djaA
zdGzbR5f@rR+1uu)|J{$vlQ=M9R6sB_%WGP0dOO*^P&;w(?mvK}+yG&sYHa1p_&x*d
z=hpZS91TO^+4zC#i4%=64u2@!+Nrh_-~F$~Qsm5wd6S=)TRkzs7hKD)pDCV<b9%>b
z);Vc#_7ufWZyEObHgWUK>Vf9Oh!K&uN7?hJ<3Vy`iG_e2GVR^lIQcuD8VASSx7=Ix
z;F`OAW5zeW|511Ne5mZ{Vu$EYwsT5^{SY<s=Hf>p?&yghh1ZT%eV)=2$_cKam5*94
zv_Clh<@pmUAybp`&8nfv6M^&8X4UTMs<cm}qDS<;zp~|7mX*H@Uk>;bB3oTcgXIzn
zInX!nDNqKg+lZ`&Wl@Mn#s=M1Gc2x+4HupJp-KCeH23{J=TJiSJYDy=oL>*HY#_*2
z!=YJ4E|f)ZNQ_CP!U3~zGEup2AE>tKjFB0FArisZ-Ca<-*8-2(pgwZl`)nD**&TXu
z6zc!G?VKc4JS6T%*^!G&=o;EXeYjv36^f8?;@}}kT4?KX9n#*R)aYLiKHD{KK1}h`
zsUD-+#6YUYgPV^Yn(){854L8bI#;cEvU#aE$X+BIs+$BrItAU`PC&ZgkfqO5wKvw&
zZHKHgQHO~#Rr{jNMp|F4zC9g#K7X=#vp_kxChV2A=eBn9Lf-m9w?p$%pomH9v%Z$<
z)eD&;GV$f@N7e5A8LK&Xe(U~)>4xfrkHzp{ou^Ir!?&#dw5Dd~ylWo{IlbIC{&_Ob
zSqFl*F}z-sj1buSl^PK38b?~Ag}hrDKG`8{ZFyeOJ;c0`6h1&b-y+W*=d3&p&Cij%
zaAaR2M!&DT@>sOSDCgF&I-_dJ@b&M>dCKi}Ie`;$Z=f&*F|UB~l&I{}Z`uC<pOL57
zs$csy9}(|G-0ktOX74Yt=^?*0Nm}3>H?n<$k-dsGC28y&Z>iB9W&Z$7dY$uyzel$D
zcXBK1c&Lag^=SxW=~-I@>KLue_d}%-Pg#^<t+%-W9tl|BrV7~S0KGTSs4RYw;l&Ky
zlt5N@q#*);piksiBH!cp$J)r?zr7G8ObvN{lttLy^NqK7+v{lZ;L$ZLmkK#?+LPD3
zq{pl_+zx0p6%9LF+!6gr=K2QBRNg#mUz8p(4(szWsGyS1d#&{<Y)ve5-o}~o(190*
zN!+S(+^;8wd9HRnvz5mMjNfMw(jOSQX|3wFgyb1wrFeU{7)RVnTDJRx_kD6rAP_i?
z+Fn;JH5x7tUskscLV7ihuokdt=X-7(NEkmJL11)15vGrM?e%x3>&hQBd+jlkd=k1R
zIsMHyHQFerhidC9Pjm^22#%9)noj!bFXZ*;vvu*2+`>0;jF_h<{<{2asJIuq#}Y%_
zvQ8AZ?6l-Eqg*L}_-R_UUBK5Mm9O}o&Wn#5o_Sl3{^hNFd2_{pGBfc~5#1n@6?;vi
zOxYnQ_;jCr;}Hq52*z@o^?A8mjh^{daWzS=_M@4TTTqpGpCjjq8s!b2PrMumnF<vz
zINd$B1y_))kj^p)^W>KZKQu69c&X}Zph)5`_oQr)hfUZF$zNtqFKfE~11?^aEIpc>
zMdD%&EAHaZ&yJ}G=?m&G<3e`FL+p4cwKo|y{1<cmsyD+(ypJ$Tw5U6{a*kbz5NCp9
zS<VJ1tO^$yqcdCoHo8Q{KL8@wgicn{U7X{K^gOM2ob1{tcPw>aX~zM>ik|1ITC7k3
z852TzD=|Ps?#Mr&uN9t%ueQ7KkQ*FxiMjyey;<4_L^M5VFevLC@Im}sFj+V(>!M+u
zpq*f0$q5s3(CY#!dL#?hcFX@-n=Uy{Vuv0)rzu;bfQQ4v7!GqB+ipAkGzy;o27!K5
ze)fkO5tz5H<ka4M{H=|(`NZAdzL&9kIA)w$&#(-~e*s$v>luVA`l8}zPMciX_4R?}
zht>jlUN}*ds2I{9T=F_*`tZ4s)D`mkP<X6WY#r~+yW2H^w_BR4q)pzHUkT`@?5^>B
z1;DKUF5Y(&%+ubownAH><M;AcE<Kpeoi=-3c!IWN|Dm60J105%_<7@&BGF^&Zm(x-
z_QCTpzb1R9JD!{w4>7-V<K6{*)zSCT&eu-)9<<8M#cI%D5@`YgF%x0etobm8VF<PH
z%t65RiJF{gXf&pP5(T%NRCp{rqN9aI-3rFde#Z$cU893!(?OZcKYYcTMkF~X(HZY2
zw~q!(T3`;{mIn0{(2-h)iS#|!X`0>M=Y-6!Pz!vzsA}Vjc`WCkU-W;#c-(-BN9IM_
zlIn^%(_ARI?JLFUB%<Tt(rRJv=)rUj|L*7ZfkvxC=FMd*+N^FfN6F$z?Gz9D7-p$2
z@R2I{>9WiMT`FT>(1vIpT-`$Nm^mwC`&aB{M1;%It+z>7U&VqPr%rRFO%ak_#K|rJ
zRO*cjYxN`d@>4s%X>ih(^+vu)y}Hy9d9x-u!jR^Ae`uHKs1sZF6%m%|$?ZL}UofTZ
z!+zMtKC<ZxwLd2rd1C3#YEwU}QWspgkaeP(>KQ1a#z?F2a*jxtpfV0XTZMxSN#yQ(
zL?3!!i}yc(KX^UPHh^)bML3FICP{*`BKG>b#Jm#U@_6)l_M&8k)MGuZWzzNJu-%3D
z*A>K}b&|<Vy$F`VuZ-Qr+}dCv#^qpPExIl^zd64sqr`ojq>_n{uD}hpb&`aMm1+JN
z7#cCWODIkK&uiMB7Z@pG@^K3N_GrdDJ?Mf%(zwO<;T@wWETpdB%!r_)!x0>9W9bWt
z3>8KwRK2^B^YZJiwRerL)5oMA9*>)Tdc?KLR_}lwUjJE#-raQg4x;X4bDUG6+2VC|
zW@&uW)s?4eVNx|5GX}<b6;NfKrHavM*ZYXLv&Uu5Dj(@xtvBQFvLAI{iFuy>DWMjy
z@2<i&jUT-1Ofx*b?jAh6hpy3&-$j`}$Ne#}-14eU5p~z@iIec=1WY2y<IAhEJwapN
zl4t&2&eFYk-^2BJgZAaUh8?dDw8UNicqVju^IpSl_VEaTu6e0bA+8J4{V(()q&%=I
z1M~5@OTE)=o(35BZKBMj!^@|rKPHD)C${#@9t?_59Y&NFPCU0bl<~)U#P(reqNCb&
z;`7Xd<~O5`-g<OlP17XB<LLFqn3AQoh+R6~g?mo70@Q1+&YjKfgyeyHDgrT+5Jl_K
z(d<3N9+|-iU+&cx7tu0k*~fySHl}RE?=%u_i;(DGj|26h#DRfpdgM{N)R_QCxWXVY
zWx{~I!0e6$%P4fbcn{pD{Q!QQc6*=;x9O8quV~puNc~&9P9hy}2BL3&Ev*SOP!uo1
zF_wHI5ja30-9YwFenIGD^0i~f)3f-M{{_VS1J12pR~`z*w)#f8hUHx!9;*w5mD1;T
zG#W)FD=6QAKc)H~2pmleTWe8g7~j)$$)At{q$8ed;}~BTDiL@y_aSGGr%`8>a;Jok
z=0><2aK3!U+A3&d`l>_wdWNaSEvFIt7TR<BQ#WG;F6OvZX$-DYwVsB0GIlV%(UW1f
z-UQmnc*0Fa?RYCsWKVvU@x?1o<r4mj3jQWFx?<+EXFfjQO!=K@>mrRX%DI+vnJpnk
z7u)vN5h~g($ib(^4^v{x79vjB-=PgED&3?$^z`l|Rfy1;rJw>E@J=k;-Epvc2(9)$
z3pvemGAVKiD>CB@YhO9!ZyrLry@&zgt-pdBSal@VEMk_WA)+uuy*byPL;z3GO)30y
z{%ojsIuU9eKZ8a*9Xj+3@P0}UklAcT!hb~dK$v}5;u7L7mA^?+Z<cgXBkupf!lX1f
zN+Zcj<FLP4l{K`XI?-i;9FPZ(9JY4gAa(x3{C2$`-Z^!~w~3JFZvJRgOuOOGHPfoO
zyS9^&NYLdKwtg^Kx`)s9`^9iL#NOhm>P<RX<gbP5-tY3rEQM#4SgWP?WJ0>K_i1Qa
zv_CJoJosJOBX#1&!>;R3@M99qabMvnZtdYo!*AkR&5`0x?C^DlC8J!xdjHlgth}<*
zANTZ2k~<sY%;tQ-NkihF&by^wI{uUYJNNd3LTVAMsj`Ux)ZpC8rn=_QVbeEP@24s2
zcnkPy{4#r_R<E3*Y*3#2t0}mIoHB%YX-S@(;Xo<eKo};AaQ8$?NK>Np?ZFzto2N29
z+|a@>&`eJ&5}eI|^m9>kO%u{)o=*rfRku=b>s&Z!iHhjE9xQ4pxU`cLKtK$G=w!ya
zvrPCl-xRC*HS7(U5hxrDv>wB%N@<kr_*C}?^*iu8E|s*;e5<B5ac=j(n5DxN;ZA+z
zq5sZ~^{0QY_svOtS^55NnS08+as!X0Ta%y8LXwOHuBZA7M~S{yosTaXrU>J-=>EU-
zx1Qf07<LT$F|X;k57R@%`mR_)_DuJ2G!JxGd~ClQN^@0<_?)G^vR^&yryuE}qhxra
z*R=tG6gJOwZbtNu>Nw1vO?m{4*Zav<{Rf23l#E_<*_l+U&DnoI?Py$>cI;to!Ecx!
ze<wWW8>AY?pFp~((Sk-D4A1@YiC<Q2ez&<jJ(Bxw6(&)4B$7UR!Lig!j^kFy(Yvlq
zfs&V5x&~aTg^MXhvOOSLj;FWxrzByp^~nG=DmmPfZrK}mKS?P=c8ZX={R8hd$I2AL
z*m0R|bDXdv3Zn{db?o&KvKhKJ3}qo<cE!P)WC1<8%q<zh1DUmdz<0?2f7xYTY5$MN
zPyxZXCJ&3$fzP(%ReEs*F=uD}i)iBC(#lP;&AsWA5T5Y4>5Sd97a>0XRqVUtx=+mY
z{-MeK3<5+}tBPODBc)eIfc}s)W0L-KNw8J;G|%EsqO5<D`!%1wxe}`p555SL9<;wL
z?$PP@`z-`~-EKVUbL}#kRXY&(r|XEz%)prstK<0HGM$jwXD;dPl09V7ill7XKS1d3
z%){R{J>I6}wX(`1Ny#Uhl&6qCgPv16TGzBoFK<?sdW`mtmMR;{Nd(lB=caAbCi(Bb
zd`M*1X|y+p|JqelXJ|fJA%}ReVCo#a?qeVCOh*0J1ho@-F~^ohRIZkf@yGrFaf^1D
zfx+)^8~AhKl*5Z?K+K5EF{33>WeDkqXtI1}f=WLf48JHyLwCzvpv%m9(e3NmSiWl&
zNluj`%+_e#x*TB?rIBL1???{R=SIZ31`;*GAD3|JP^)|qymx201mSaRyZ?9(X?u@q
zw|R_zn*IFSX1j`3GeNQG*z`{j>@G4nGzpP;CZ544Npt7=0xE;#;T}QnriIDcC56K;
zqfhEpLOONohZd2-qw$6hDF1+|SXj0+viyw2rNe)+Jk0}k0`vkE53y#4()#aF;%v>)
z*;{r3nIV<>$`x`c8Lv})m1{xtIg^J@BYS_I`Um7M!!EHl+(yhjycS-YJ!$Hn6V2Z(
z)ilmL-bIzQ8GS>j`j+DNWtFTP;SEoA@hZmdJBsUB-ibj|FX`BEmZW1O$-}x~9BhhG
zHC>oOGe>B|<kLb7ZT1wbyOw&;CX(iONj)5xvzSb)&<wM&V_CqLAAT5z?!FF&2t<Nu
z8nz(!!l1;#K@7n-o(e-GDA;k0g(Tszyre)9=kdo2V&5dCPKDELcOYJePHyok_{3G{
zdv}ei9|#I1G3-t-!H_9BeRb%{{!39*H3HEw(`srk=fI<&c9?w;J!2j^`fiVQQ@#Oc
z<S*qMEFyZ3VWU8oR@91Do4n-u>vl}zo8Dt%RZsR_e^edj9(-_W;w@9EM*!9OD11rK
z605<vJz7Fq*%oM7F8U4?4EYf>!f5^n3?KP$>cDr>$hd7k2_8QeulzH8IOh4jb^TUS
z(+9KN7m%aJ+h)$Rnrn=vOfSZL@hY__EqGK%b8Q9yWi>gyvysj=*-`(1k-H-+_OltT
zF<j-GBVu+{j(g1ALr5j^{&HAO=uOQ9u6r~i1BUM7@Tx)xZd+i0=~#u7V|;F|#JgE$
zpHz>KHGUMIgw+zB<%dBkS*(R;SF`im$H-6HD)DNS7wLO@YuP^HJ>Wqm<SS^ZOI5J&
z1v)u&?hZIJW21b%QtJkXc_<@Sf5$tZCH$`=*C6KuGh&n*8yg^#mt@}OldYB-ruJLq
zwV$Gi!>Km0$w$XeoACbuPeu{XJWH$XCf;Q1oAX8^ImE;;UU97;AJ}ZVm@8X^Ge3Ox
zq*dM{#Pc`Q*h6pgVZ*QaJYRMoiOan&_HqfP>FW6-H}=rjBmORn#L3z4>y?w@hR2sG
zhAF)mSwPBV36FOgbJU1e{Es2MCwSHD81=z*o?Bw$s`bq07$ELR#KoPNxG;6JHHK^S
zH0NqapEphUB>S3zUFz0OT+Iz=34#5I_a-L0Ocw`>754WOC2zQv9%I7NG)PHvf+QmM
z+3th(t=k&7-U5Q=K0d2rJnqF$$x`=C<XDcI@D_BY2X^509T;%zD&#T^r`y9A*1rpv
z=;foI<_GkENC*~kCYDDZWk3J~pC2+6K@rRkV=+}`_$AhqbCi-FRSL0^QsAx3E-(-A
z!*QK_dsQ9gD*nHoa)Kz%IZY#>K<2_AV~w#mW6*L)0?Q(C{%$p?)*o6&oqD-{cYhVK
z<;~sSe<W`tu2Q7GIA*TuDIrNhmuV#<%Vp{~>ys{Heh*G(UD{uR7T0YWjv1NE)!^l4
zIN;zzna-~8phqErBF`{D8me;luUFsOd!PGc9_@8hVD=ozy<0D*s{35q<a(54|2jE+
zO?=C&OT<rPpRK7GHAGG4iT{&}4=kQ3<0_Pjmcg^Aag@#xqQ~fDbqFu1I7(r^ZCp!;
z+^yt`ST(op^Qp}z)t0<>@Y_wanA!5~go}fR8~a2v?0h+bz^Fc<;j~}HXt#p8x38nt
zec@e6wUPBi`#D`zqEdto<rcqn4u?`-f+x(=m0G!IU+;7Q8_QQLVjvTf!4n8o15L<6
z1ZI9qx+Dl0h0pfmaiBvOSyaT2gBac*@5DVFLccgEptm7(TJ^*8t{v00%VJ#OuR(5w
zoYFlFobxi4FUsGW#5Kb6*8qVO50+Kny#Mb8TJC-avyNk9mxpw8Ch_MoDe--8?#G`E
zsDqlt*gU^2og8pN`or5Q4FzQbQNpT6<=#I}At%Eow*oC(KR(z0yCs?Iwmo;yN-|fM
zwd+o%H51ED4BiTfF3jFu%a4Dy15jP-77My?;&h#=ga0$i@nr+I($#x)OIP(~T|Ka#
zbL`{Z2G$1-OH|B6zis_lGOpeC*yz`I=F;Tp{Ld4%C2wJ`olAH92G<-)3U2(8y!xR!
zH4zNRwUN24wsT@+{%&V<PUdwX@2-rD)Su{5%9!2%Kj^vbG>1btea#De9Ppo-74;c2
zLo~dSU-9PYZ`VfUjomA*nWsIMo{l;`vwV;#jNj0TU>p-!AGM}3@w1jC+5dffGC*EU
zt=g=V*%0c&D74<q5*``7h@&qVB2?cWL|cO4$<82YjjI<0Pd7*Ky>3h;-Ky{OVK*}h
zW&|_``SqBLJ^}cBr6HJ<PW*wlo4<D;5R;v3>pE=*-SC+~s1#{l-^oXPBK*zzP-rk`
zS@NXWYkySua`rQEVN^JeP||W&5%uftWct|6htb8)&ixuI{ZL(ew=IBz3<F=h4rEug
zHTE$Yr<eW)l(j3%j2+2ceA9GqY<2q#r8URu`$DeYYZ_8q=VMjc4RXvz38f|3x$;jL
zp_eU4O;(KD$aO5GZ%=R3t|?x=uj3cttus}>bam%wzE%rHxCbjlJD=x0xKUd#=XHOZ
z=e)?$BXMdchWb~V*JuW{62`EU{`*aMk6r(T|Cho!Dz-*`zb5<-_@Z6r$UUz|b1j>C
zs&JlE%X2oZCqHoyb!%)nov;O_M<9>Ae5CyRAAs_o&^koF87b;oY0Zu;GOHVlSn)Bw
z&am|h8=T2o|7=N-!b_8vQxkO9!lFtXXrOGtV_w4vi%*89zx}-$Le0D(r8Jh?+4o5f
ze*%Jjc16s!3s_>K!o%LdfZrVaX4~C1N%%QAZt9V2Hmg%-g^3m!82~U^tWM%k5;9q3
z4u{n_I>$=QaD5Tq-r859X4A?s+9pYT{E`-sL651*t_k-p+O=b=z0oDMRy}NdL=Y$g
z?R(44+H0ac6C<X*d@1I8w5TP&Vl6U~Tsw4T-;#X950C4=vW;?mT^}8ekv{b}T!#pO
zM>5LkpwBBch`!jShLm3|k>*Iw2xu;%G+$a+d&A#c`kZa1^-{7|qkc@br-)xaqWLgX
zZ{lQ0Nz<O$*95m4`nn<vjrO*0?ahrb+pFm1iIX0qz%M-m{oMqQq3xHi&YYaoc2ALK
z#$iu8hHJQ%_B67>YzjG$duI{)Uhga0D#lLiOF;$1TDm17P#V1_?YSeDl^sF{f8mj&
z$_{FURcq|z$bn<dE|Q8LLO*nbj#VX~AF4+Fs&|#F85wwg%wA)8^kXJjRZhB-SNH4V
zi8Fd*UgIksuO550AHApYp3tNzrT^uR#pmglA6-8_$R~f2Cl{Ucy*OC+`d9j?H4_J)
ziRnk7t3x6gH<Od~%Y^R-nzxsyuRrna8kaW`a|ONTY{_no&;PjIsf=CDB@7f%4Sa=l
zB%#h^8OVEQNXc_fe351sg8)hS1r<yZT^5WfLo#O`vjI<qa{`bTT%G=1k{_8M7*`DV
z{RuA3TzWDfbmidXFhOy+&BNo&O3j;3cK|Okc~aWq6YL+*o3XQ^4RgP9;DrqM)?O|)
zd5(Se;?T?O{9{eOe+ktJnfO-Qtsh?h^>8fWMU{M=UWT#cp<_zVr$2k-PG`IC*^1R4
zR9~I^MN~`H^c5MMs~=2^)evd(m;BZHylmQFhat1L)P~)z<=E-VvJ3Nj&H{fZgC{<g
z4<SNofXDCi2d<Z?jp=l8KN}_YZs&cNYCY!IYKy<QSkqlNx&1BZiA~g}t>NF+@6O69
z5R6bFQcbD{O@He%N~`?l<Da*ltX?$89{n#r6)#L2!W6Au5*Uc7-TqdAI&=M=T8^NI
zi>m8~*VUCJtxB)@$GaUz3*TQFv8=YcyC!du`erS~r47(|^L|Y3%GC=OPM&ROTa7uB
z9Q)dOJ`#(=-?>tiU$?+Zw|$m`ASM{&nSt?UGg_yDrz<Y2g{TD^)a$okb$xjE^&*``
z-<R%$GMf8Xf6HCv|EdpGYFCC+b*~=_022;p3s`2`CDLs^WWn<xOY@a*f1x*21NZ+7
zVTBV0kQ5<jv_%tWy39s@X!YgjJmKKkdI$me9^91;gr<Mo49pi_scjOVa?n{gqWhue
z%|w5kVtI&mHSxj2s2%$yI_i7}3B12530sYz+ahK|_yeCdvnCB4N8cu!*!O+sUdrxq
zW_<ps*`o7yy7}u!?MQ~-U;n+yu4*TKMYf&_{YiVKbYp09rtxy4zh3kWDVH&TTggcy
zcw_1N3~(3ehca0xV=hC6ZI8c_$nU`k`@|PbUSFNu+opo(EiJ@%FK<a7sEYorbGz!x
z!0x|V{lPD-7Cqjj9d*ztoW5qN^*ECWP0=>NC{)H5{c`>6QB*OmFKWXPeRzMo<m5S-
zXA8Gi4hkLbtWiZ=c=Y$}v`&cj+ni15`ERRwit3-KCk>1GhV~u%vAR0k9eQGm4!p;L
z_^;6^a@TbdmRj=Tzb9ei&XH=}&Q6zg{@qmxd{yx@oP9L?Q*UYLZCh1A4Embc9X-R@
zwCRq|7ZPqe)xaD|8dQvqND|XDN{%CvIw?rf&@|bITl=P8uE<GlYvOgKb}UPW<7nSX
zHX#d)0=+pe@P~3>wR?+&dYm=s&B)!eHtOJ}%3}dM7mp6s1!bS-pnI-qoagFLb?4Z0
z31{>uo$GFWIFExI!DufkNsUQ`iH0){pKGefPTBFsnrNBhn56rcDo3yFu&y|et`A)h
zUpjO~0LU;}h%b8Xy4Fk2KbO&~E@15z{U*B5SiX=RR93OCPH)}irr*~6Pd~-n-f!-e
zYC2@@F9z@XEWoH+Ju~Xi68#Tw;OCE=EU`VBS-kG}BgD1Q4ohIDW(sn4PwBqzp^_~f
z+%dvpn|PZo*L+^peurP7ldIXWi#dM>TE}gkx?{&9lncL6N95~nrJoYajPvXplze9#
zvMGN#kL<h8U=V%9+VgryUpXIn0d4sMc?C#)%ZFex^lnlTVQl2|nb4K{EkAw+({9p`
z%f4ma<%$*K{s!D=xy>xepA}yf-@X3RE|_{MLmw3vQrNnE;@8pRBja+x1^xj$<hi-W
zFS8v&wMBfj*{BTwFncDH8qW>$<m$8hybUBT7#ey!yY%4V4z*zZ=BTqjKr^EobcHda
z@W+^!Yaz}glvxi|7&6OR?RH|rhP_@j!TF&G-1XWZxU*V6ktbknxWMsqoWej7<+x1z
z-Q4=KnfTpb)?Jjo3a>M)=hZYFm$kYCFEo}o1pWS>L=BaylHw)}wtnY&3_<pcDzWHw
z`0ON-Fw7zrSv1nre61JzV;n4a9NuH7_x0AwA8ivq#n7~s`#zp|1j{ybliA*jHO;Gg
zVou-i=_nm9a-+mPq|UCrf#yk_^qxFA)#6Y;&hsl<x#^h*C0P!nXe?S}am<XlUq7j;
zmba>Gy|51_r>vUYGKoLSs8H7b-lk$~SKSAEa><{x9BZeip6;fgM6`)@cbg=IHWBem
z(=TADR3&WHlpd))!8~5b&3N|`2{-dPM4ZaN>^2Kwr7m{<z!UtDiR)CEmrbHcemive
z0&AsiYRu@tXpfSdveo$-!bG(kAFrbbtMifXfl1w=D;o&v9`EPccC%k!wba!?0;JvZ
zT%SKi?+c;bNF>+QV2&d@%W5!;ND}%KwoZl!CIZZOR~h_zd+2PyV5L^F=<@C$!s+Kw
z*`1kvt?1J~lhve39{I!3yvdvWl?w>^BfNKv)bSK9bMzkF)~E*t=#igzl}R_|omNo8
z0t@UN66|8}sfj!9R9;BAmb%8w$~k-un=Il5e62w__081K#wiIs;~uuQ6?r)1k#wA_
zO2q;7u&Jx>M~cUl_?|}A3qId#R9)noKVl9<!sXb=XDOrmo1mL{d)x+K0f}rN_7%Xo
zSs1k9tZuKMN0#9T0D8OFNs#19U|;~g3xop7=fC5j<a@<WB}Jc%5GfKBrkTgIYc1XG
z-k#Z^J=_c&cv8q&49M>iqV;Fm<-nt1435grHXL@e!<25je+8^RB^V5tsljs+j^Gu~
z!9}!$x&Q$P)|bAchfacEjVH3CYtJ8l<*80?{jxX}=&*SAv{lmjY?Hsu+|RoGrO!sM
zDfruJYDj1;r-47c4JZ-e4Ep*DE+Aduj17-bz(Mslxjx5Cy$x{9leYJ#N1p#UoA{#T
zeZC8BdhpP6TX4&bI7j^-Cf9$}8>n|3$*mrKxxc!1-o6)<(`sDtNMlC>7bD0YCKjV&
zKka&1_PVGc6UjNh-M9+&Syi_OsxEil;+jg1_Qm^8e3m=CurSf;^@FFf@=D+Mj;gza
zrR`UDr@{FZ=HPJ-m#xHy_^|@un6&7fu|v`jTwU``%bSP%*aA6Lfh_nTK^8=D&pK6m
zGV@y7b168_w4L@>$X&8PfBTN=+wT(2P9i)5m5i9Mu8f%Eu<twU;zR)<kw|>AUCAQ{
zbA%KHu25==AISo~w^Gqmw4tCm6=UKK;Lmdt)VJ|wL?QEe7+)MNIjnfJQ*})vMGkr>
zWViYe+7|<|)g;cOMf~>(ZReDq=Sda2R249g?{K8QayrhLh;>GM!4Yn{V2K#U0xN#M
zK9`U~o}Jm;zvs1dwbbYlGrGB~My^Zct=rL)I!m7^sMh?K#>pBkX9GV=8+=o*|FrNn
z1y{Fs`(386uiaalQ9V@s@P6zlsDKJ#ia$~lw2Vytd>!(3%=Lay^FuvMidN&E&K+Yh
z*E%OD0V8wRP^Pjk4Ew$iGQvTOp0WdcZB|H<yfH~ot`T7>pR**7HgCUE(WP>%!>}%7
z%BPDd39hY-l8Phr4MX6Tk3S#G=MXwvKMVEV96b9Ya}Is}o%s%d^v$UUdQmn9>Wt;^
z^F8;Xoa6+}X;(3|BwqK|`6NBHwkx8Zw@5PkxA0iivLwLoa0K!V>_><AYZs;U$cqfi
zCFtmFDGkwoK!}vd<H!y|ljEMZSE&FB&Qnnr&42>$=Qvk}IRaZUJGC$HunO=83MrTj
z_jy7TjkWqpwz|J^HYmd5n&^EU%%_%Z|LO|AkJAI?Q>!ocAG-CSgUZ{k?UWYk*0v7b
z{%`rsNG5Mh-p%0aHNo=IP5VA}%Tu%cg~z_Gu2KlcYnmxnmB@Z_6Zg(c9&mFzvy;Hw
zCHEn+b^9n|?{8;XnwFDT;I>!LLeccuqk&T;zUU<hLe@gfJ9X`+`193`c)@wPHA<0g
zD<cH*4u<iVnO8B6I;I#gOQSZjD2VF;^wa?Kzy|phBSz}<v-wwLDh!vF$y+51?bCx4
z2W^`?T<KBpJPJudcjC=?G6_)%LBf3|N;G^y$UOJ9E_Y3F39K}eJ6TE}6N*W_N~NnG
zvUv*4JNpF`=^FrWoi6ZHj?glEoeYcLydns;n3Hf!u@H8%&)*1nn1D?)sEiYdX%3jB
z2eo_l|JA9U_@5n543ull&9xQEFb?EjF`j2ib)mClxSpBx`AZx@Ot!HBd87-T2{dpq
zM2;Z&*=mZLm1k1s0{gDpr2H;^oU(l=SlBAyb?{u`@$E+YJ}M9%6A)7%{tpO<`I<1C
z=%BZh7<y_wz5FmRl{2EWYM#}T)WnAzq++}_lHq#M5J*ZY6na#2Okj@W3}NP?&2+nf
zQ1f{)nR{XEsMN<mEJ4GgGTpqy+xLaNQricaF(J-Oo=a`}*J#G#J@K*$WgL}X4+oQc
z^chwkYzBa9Sx1$joMml@rF=3dmXGeiEVP%Yyf*P|{oQs+IDTl@6SG2*$;SQz;7Y9y
zvx{PKNdRh%X?Tu%#n-GKM~6$8yW`W|3_;-8c3hYgNpn}+408wK<&;e0KeFaH_Ki(i
ziy`dz#;&EY^slzjA=XS-el%_)dsZXKPsw1O73)CXWB(LaFP5f|f$0L@<p)u)HJx0;
zU3^?dzqB0in~plx4P~4Xpj*1%<jPh;3}%^Its8S(Gbk7VQmlqk+0oWUqg<=F!xGE+
zu!736tP9t#8zk?wxG!www2@b8k?2cN7=X%|9lbeOhG{m=vAQhb9{w<}q&%Glsx}=p
zESk)YWEnUp)&#FuEkC}?(QFet$m#+;s!9CJtA`=UV7JQ~7Tr>znI=U}xiCm9V7w|b
zMMqxq%E6?#2wjlC>!aR77jc{K@<DQOi4skU5%~h|(I>|%S?8(5)|K#*)Os-J_5*cP
zSJvMz;y*&_zr8ey;$^)%8Bs>vLAw;L`NeT8n^Y}#qO%g&dtwXx(BSx8OJ~@cH*Zy=
zt%*WBsCIKG-2jB<f9!%AsDYx7YM?_<_TDJS?=~)h0c5U{U;1Y$3s}C~O1gBCXC9n}
zomditKkvjQB#nD!oQyrM1Rt4W{vPQ5b2L2Z&m7yvp|-X6!&;U#24P}zlJz&>>8pW<
z!eu5lr-mu5&BAjb31)hAA^0dJ3WPgtZgMv0rr?v;e5MNshCdyHmc?_J`TqcSkbsh{
zBs$Q#>gbkMMqrtB5@gRT-F9;j`CS7BR|**et$dli{`PFmVdA??Y-<i&!j5;V^g96?
zF4#89GNE0}*xmbZ)Jc#0B1@y+^uX1Wvaqou+7T0Pem!B=X%3Z6c#OV<#|D}=MhYO7
z!UuNPbAoY=ox0;fk2i~UqAQ(DS2ZdsujG8COad6&pFGQTm#)%)eQ*}_QTUC<j4ZH(
zgCbXVN^N*Ok7~kTbNsopilo3i#=P)BgRF@cJ6ihUjwj9EAYtv@eki78haNBIb!z#{
zy?1E#Wp`QH#mVe~*%h;XzdIc*_E?Jq)8)d}&+@KwW_qxvLOxSy38_<q7zL<GXUbPn
z*^;`R3mk^B<7T}4@ExB<qe^uRN}=A65V;XNgc=U%wJ7Us-OVq~zF;Sy!xUPUB+Ixk
zOb(0YDEXTBGe=YDcE<}jpMzPL9%l>Zx7BP)`~D`JXC5hObLSM&_>OlMmY_gt_aTIv
zBH6-&A@3MoHIuc;f7R_5+vV~<=+Ia}Q4N~<`^BmK2}KQ-NZ;j##(8DW-h|&tJNTG9
zzkKuNB|g?#)lld_VG85t2ym{_^vhJ^y^;b2ASud0Yrh2Hpw=PK$Nk~%1lCxn#N`xA
zSZc~|wD^-x^OxMZz1KKgSm@awc|m$b?l7A(!-B!ksgoNHo@ZM^r@*Bo0a(Us-z_?^
zH1?-uF%$2<h=^2w3d53^Ow$YttMp>n#e1@uKs*~t@`NjjSv}Ms(Tr=5e66WL^mjs;
z5E~DDrePGqfItccE$73KR|3NvaKO6(xZhz87l|oAsAhARt#kYjMh)@td}A!-h7O77
zm3dg$S!ib^2GX;jvI(?g4dZTnCNULl;5XKfUsSRAj>l?guwpxP!oY)FIOhocJ#KX8
zGm{F@+dDDEz9x8Vkdo<Gu9o9=bNcy7?WvJvt>|n5wKKeOj5c_qorP<{%*FX~puHa~
zYR-XSNpy*p!r#wFGGA7sG0jWlpGA})!cy4*5qeT^C#;`vAHkCP#yyto&z13Ik+)5N
z*&znuiMnwP-0p6k0eru!B-o9_p^fqLtk+RlJ9R0do?UO!;V7Xku1a45jVX-X06ViS
zSv;ImR3Pi*ER#JoCeZ^d;fIUKqLzT|awTH^9UE>m25nnbonyr(+>wOw+m%C@Sov3y
z<Z?Kc0hbhlp}%wKvm-AEsljBWKJshe<rW#p)thJWG;i=sCX-`l`HNkZTtQzIA^ALB
z7|B?E43c?p4^&JR4S~DhhIBO91O+Qmw55?~q%)x5iN_{|hM*!c?waNb!o^K<L|^Pq
zcHVQFBcMfkHOD#_9wjU{%VfC`l7!!_fk)UVnu2k67{xpaQJ%87?;KCMdW5~ZPdrxT
ze!i0y2OxUA83e7>af*;rd^Rm}hl7qwV1yar^@{8h$dI#<RLFAI?H)jXSIr#9jl|Ya
z<Ot-3@!(K0OdqP?!=e#g=nsPrJP4zozYF$$EM*|*kP0&VNVFNoOKV#2piLoaBh{;m
zr&`i2CkU#=n9|RGtRSNGz;r@L2*+J;0WJE2Yj!M0q6&^8x>yaTg>d~ogS849V0JDk
zK9iZLKEq!^C{?nJ@Sm_UtvtML|9%5>w@m6FEI8`jAzH0B>410${`Ym%Vy&;hQv@Ql
zp$pwvxHGv&`-pC|Eekok;+{RPS#t={BzOx)!#r5U;w|%HZ^?axf5<XqOfH)Pe8d6$
z^%~Zc1oZ**V~2ym9DLT%EZA5Up4R%4zMCg#prBBRJ_z%)WNyjgwfMoKBTvB~!0!eA
zYroG}D8l&pLbUPEHd5J6)n5f;vWj&FZ5u)mB&Au;m*=7oTo^Keq#$a<Wy;+Lyg0xp
z58`@?tunU~&&?x>eU*s>^T+BywP9PaV<aFsR>0=mLxifh0DvJzxQGqg;{~x#450LE
zE_>GleUPUgR}9e;8-ON3#UVQ-=h_q}2;ntXyHL>3m$mCN2jY!p((>lHPSQqPf_3o_
z7|4Xmu$-}6Zg46G;psf94^rB=#6+@K@Jf>7_X9cTXjsY^z3ebSUep<_6v7_s5dz;m
zW?rf+#4DoCVG03)ZP3<E0h_^}L*MI#q=1xw0<v1*knd|Bv`Rcym#V_zgYE^3Y~WZf
zsD^!Y6%7!fDol$}wiM_K71Uy4EfKa5p`&3XH|+$C7{HQ1gA1IS#tFK!m!hdBB*ma-
zY`LIyjd(fh-*_@M>OA0d{3f2h0cQ+q=Hi62HB{6xQ1|bBrE9Uo3juPEr0Jlw<Q!9I
z>5dUMxZB*El#uFxHsGO*t~kmx8*#6sX(biukmyPU|0jb1eEu`gqLs5mD2$0f!X~uM
zP+dXX+YS5N0-;5=DhDv>4~RgxvkWjm@gNL55FWC~5<!r1G9=)EOX5e8Dm8eZjKu&r
zRR9iA60Cw4gHnom<A^}vx={!Rsn8e>saFAt4y55qWKc-pfS8(Ofq=yERSVNliZlb@
zpi+1s9bob(6x?bmCs59)Ah_l5<bi<&1dyc<k_722OF2NK@dyO^MOi?g3~GujS<w)L
z5CO&fQBjU40}8$@f%-sf_@WqK_#idn=n%OzMF|HZ=|LhYf)dVvJ`IW@41Cc{KnR3?
zilfsXte_I}Kr%S_;DN2RFhC9{7+`?Q588ocj!L7Mz~G{kVyK57=;{e95Gn`|PAI01
z2!b#up}_}Bcz)DF$p8wWj!G$`fmI8i?NLHle#8lyp(Kc3wfj*;0FTxvIz<Byt@~6C
zF#U)*+{gAH^Uo52;erT%qo5h0hJVq}6hZxnqrm~qR1=8BMFEaz1hERBj1&o%wG{#g
MezF7YK@flc+2^Q6cmMzZ

literal 0
HcmV?d00001

diff --git a/share/qtcreator/qml/qmlobserver/startup/qt-text.png b/share/qtcreator/qml/qmlobserver/startup/qt-text.png
new file mode 100644
index 0000000000000000000000000000000000000000..d44995c9b34ed3a9ff263becd861268e8a1b9441
GIT binary patch
literal 14565
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
Q#RIyx3~rWQ|2yoz0ruY#x&QzG

literal 0
HcmV?d00001

diff --git a/share/qtcreator/qml/qmlobserver/startup/quick-blur.png b/share/qtcreator/qml/qmlobserver/startup/quick-blur.png
new file mode 100644
index 0000000000000000000000000000000000000000..29ec2433874bc2da07776332cdca881e7a9c73c3
GIT binary patch
literal 2826
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
PX9R$@#30HpT)+DtH|&3(

literal 0
HcmV?d00001

diff --git a/share/qtcreator/qml/qmlobserver/startup/quick-regular.png b/share/qtcreator/qml/qmlobserver/startup/quick-regular.png
new file mode 100644
index 0000000000000000000000000000000000000000..38321cbf19366635ad6f183a43a5ecda30304117
GIT binary patch
literal 1399
zcmV--1&I2IP)<h;3K|Lk000e1NJLTq006!K002P*0{{R3ot^_?0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUyFi=cXMgRZ*|NsC0|NsC0|NsC0|NsC0
z|NsC0|NsC0|NsC0|NsC0|NsC0|NsC0|NsC0|4y&CKmY&$4|GyaQveYnGelKpcZiv)
zyUgA0Mk@80000ESNkl<ZSi`kgy-piJ5MG19*npu+kso-02)Y!Jf;*Z>rcM#lrSuh%
zh!iFG4UF;vcBJ(94UQB^N|GmlBt=R?FxdES<J;Z&*}Xjl#Cfap?d~_bGxL2jXCZDq
zvUS<r6w@2~Qp&D(rZSn4{X4?XMIds=H&vI3rf)t93cux>I*ev6?})#w@K1eH?P%t2
zD)?ufnM|_fTl?oIF*2=G;=Aja$*GxI8u{5vzS-_w@hAN1m3$LR3V(XkTT}ScBlcDV
zKb)>`$m{9h|3@C4Oy;|{j{aUl%F*6x^mrWMcaj#qSJ4?y3{-XgWf@)IXgbA-Ub#^J
z9t9u|=j#1q^|s02Uz(i*k!fp@;&f3*yAWc*tUAz}=G*3XWP4UUd{;_w;)bFC3uP;(
zp+uh11&+3476t0<>@n`T0Ae?Z2}~(6w6eQlM2gX67MxNvi!{F~xG6gJ0$C2VCtT|3
z5gPxl5MA(STV{=l=RDg~0~hSz%|A1IRT<=0j9<;B3m(m!c%<G|)pI`(GjAhUeYbTW
z!f=(~^+|ek<p8!{v*_#~N&Doqp>p8URU;2$MEk*x{|FDgDADVTE=6)m72iH|f>;5k
ztB27#!*8G~a^&BT=z>QxRxj~s=*UA4?)8ho&qyqs=F-BZ3u`<=SUTgvs2E-e@k||t
z%XFSNqj&Z3>Bu@7SUtr}0ihTU&M0pEjtloD;dg~a7uI-?)eUt_N|KDJ`wtjFxaS7U
zRU{9AB@bY==22tdphxA7jpwXTu$*L#2U$Hqo4mRoc#5#b)RD|0)H3DdEQO)~u4HP)
zgBaB5thVJAV_M73Nv5P|HP(!1iP?6ej%NxSs50dwQ?4~g--6rbYPs6?)UajNSCA;P
zoMcLhRvD#Pbszg$INnzfRD+sfhK1*gH492O2EG=TFD;@i%1OQet;W73v|QCaJp>a<
z2F04;3N1K>^TiykgyV7pMcScPSJ+T2C%KZM)mR>C&n$X+T)wn!%R`Oip+ih)+2LU%
zI@SF7Y2h~*KC+wTBvaCPwAyfF0Gj`kc!JXLj1ru4qFPj4!1Q(TfjCu1_UuA3hfpjh
zbEKq;cKUW)lJ1&P7$o2q5NeHba*4K3`nvuHlIC1pvhc||lZP@%!3J7&n^_>Kj`LMQ
zeD@KmLh=w&P7@QDe9$3=5Y166Kh@Gq8=<IA&@mZ1R4Mza`!(Kn*X8e!(qoJ-d(?*v
zoI<(gd~7wqa;*0>P2W0pR|CZFlY6u)PLK%&rvpdgXo_@V&1Vxlp`p;|eMu2xg;KB8
zqV%F<gyS69IEdA+!DjZ5LFxN{5xF)t;7~oAbQSqch<o)(x4<~K?=}#bwzS5D{XrmQ
z8UAqKMX}5ll#ExJn8WY|!Wv;5XCw;Rmqk$0JS&Ph3!lkVUb-~~zIx=y?b%d1m6qW=
z))#u6<1dostc=wdSo(@x4UK+On**%jV^GXC!!NSB62@vwRtM{Y)l)v#dq3$Lmqe`S
zqK95Xx5(XX)tKx%DgOlK{?K%6hw5eW$i9gju_takR@|l|<*~*6JB3kon~s!6-4Wfi
zN9Yu#v`5?N=~Eu*{DGM~=B)o-(jO`Pftff8o{x_^j(;a72=SYzx`6-y002ovPDHLk
FV1jOozfS-F

literal 0
HcmV?d00001

diff --git a/share/qtcreator/qml/qmlobserver/startup/shadow.png b/share/qtcreator/qml/qmlobserver/startup/shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..44f92fee736f67843f88a74da87c109878d231ee
GIT binary patch
literal 1592
zcmeAS@N?(olHy`uVBq!ia0y~yVEh8Y9LzwGKOFiyfRtp3YeY$Kep*R+Vo@rCV@iHf
zs)A>3VtQ&&YGO)d;mK4RprZ2uJ|V6^`v3p`KyrA1M_*6e2l~XdB*-rq7${84EUawo
z9GqO-JiL7T0)j%qViJ;4(lQE)O3G^L8k$-<x<;lJmR8m_PR{OLzW#xs(J=|hDQTIx
zMJ44GHO=jvZd+E%GBB{L^K@|xskrs_j$_^vGXaN-T3)hGm@Hl2)o;8hskD023~mo*
z-nNeW@zQZ0c6ObO`*G$%`Rfvv3#_r&(L(NB3$P+*@e;@D<u30#1O+Dw{^Pz`R_fyJ
z5_0F^PWzY2O2)>@3*WcjyLk7m@~fv`?TVgAC=372dvZ7Q>ebTM&(HsEwkwi3UYPc5
z!^7{l-d??1ymm$4;(K$xoGG05yztq?!z<pKzPP&j_$*89-&eoRdu(C<yt2-y*x^3s
z-d(??j2ADCcRT;Mo%!C@`r|)EV@tE8<b8K-zPs)GjzzB{zG_uH``~)++>5~Ut9!m?
zzGhs~U6cN0g@3H&z1mH!*MFXqjWzC{?Z$u2`pevl+V0PMm$1M7`|RC?`5MJ3eY4F!
z2$#6;HvDx$Msoe);QLjVKL2BVBl(TDnGZ+su*%{H9&W1=M_>qHLob^2up{g-0E!v9
z*n%^vsp=P;wtx~84un0pfWe3}#7MWL9Y>^4)t0|PRo3frU(es$cMg~;U#;7h`GsZg
zoVUj&$K4IpUwl7a?icggSG)E;JkMV5eZkyq{_5(xCRH2masS#En;jc|e@~<Qn(wpz
z|M~j;d9jS8k?iNV??1P$Gkv~h`}OLzru!G!6{~zXJ1_g{^<T5HubzIrxB6_4owhMM
zNUZj(<@2iFe($?_*6mvJo%j0hS395m;hh|}`Spr3GK{tAUsk-Em%X;C@>2Gd6)Q~L
zcU}6v`^xTByLK&#oBO5X)VWg*`;@EyOnZM%+pXNC?e4zEZU296{eAlVm)rXTZ<kBo
kt*Cd#9((wr?*He1%qq`BvMN~bJq8u(p00i_>zopr0Q;ePmH+?%

literal 0
HcmV?d00001

diff --git a/share/qtcreator/qml/qmlobserver/startup/startup.qml b/share/qtcreator/qml/qmlobserver/startup/startup.qml
new file mode 100644
index 00000000000..35c44c2cf8f
--- /dev/null
+++ b/share/qtcreator/qml/qmlobserver/startup/startup.qml
@@ -0,0 +1,173 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+    id: treatsApp
+    width: 800
+    height: 480
+    color: "darkgrey"
+    Component.onCompleted: treatsApp.state = "part1"
+    signal animationFinished
+
+    Item {
+        width: 800
+        height: 480
+        anchors.centerIn: parent
+        clip: true
+
+        Logo {
+            id: logo
+            x: 165
+            y: 35
+            rotation: -15
+            scale: 0.6
+            opacity: 0
+            onAnimationFinished: treatsApp.animationFinished();
+        }
+
+        Item {
+            id: quickblur
+            x: 800//325
+            y: 344
+            Image {
+                id: blurText
+                source: "quick-blur.png"
+            }
+            Image {
+                id: quickregular
+                x: -1
+                y: 0
+                opacity: 0
+                source: "quick-regular.png"
+            }
+            Image {
+                id: star
+                x: -1
+                y: 0
+                opacity: 0
+                source: "white-star.png"
+                smooth: true
+                NumberAnimation on rotation {
+                    from: 0
+                    to: 360
+                    loops: NumberAnimation.Infinite
+                    running: true
+                    duration: 2000
+                }
+            }
+        }
+    }
+
+    states: [
+        State {
+            name: "part1"
+            PropertyChanges {
+                target: logo
+                scale: 0.8
+                opacity: 1
+                rotation: 0
+            }
+            PropertyChanges {
+                target: treatsApp
+                color: "black"
+            }
+            PropertyChanges {
+                target: logo
+                y: 10
+            }
+            PropertyChanges {
+                target: quickblur
+                x: logo.x + 145
+            }
+            PropertyChanges {
+                target: blurText
+                opacity: 0
+            }
+            PropertyChanges {
+                target: quickregular
+                opacity: 1
+            }
+            PropertyChanges {
+                target: star
+                x: -7
+                y: -37
+            }
+        }
+    ]
+
+    transitions: [
+        Transition {
+            ParallelAnimation {
+                NumberAnimation { target: logo; property: "opacity"; duration: 500 }
+                NumberAnimation { target: logo; property: "scale"; duration: 4000; }
+                NumberAnimation { target: logo; property: "rotation"; duration: 2000; easing.type: "OutBack"}
+                ColorAnimation { duration: 3000}
+                SequentialAnimation {
+                    PauseAnimation { duration: 1000 }
+                    ScriptAction { script: logo.logoState = "showBlueprint" }
+                    PauseAnimation { duration: 800 }
+                    ScriptAction { script: logo.logoState = "finale" }
+                    PauseAnimation { duration: 800 }
+                    ParallelAnimation {
+                        NumberAnimation { target: quickblur; property: "x"; duration: 200;}
+                        SequentialAnimation {
+                            PauseAnimation { duration: 200}
+                            ParallelAnimation {
+                                NumberAnimation { target: blurText; property: "opacity"; duration: 300;}
+                                NumberAnimation { target: quickregular; property: "opacity"; duration: 300;}
+                            }
+                            NumberAnimation { target: star; property: "opacity"; from: 0; to: 1; duration: 500 }
+                            PauseAnimation { duration: 200 }
+                            NumberAnimation { target: star; property: "opacity"; from: 1; to: 0; duration: 500 }
+                        }
+                        SequentialAnimation {
+                            PauseAnimation { duration: 150}
+                            NumberAnimation { target: logo; property: "y"; duration: 300; easing.type: "OutBounce" }
+                        }
+                    }
+                }
+            }
+        }
+    ]
+
+} // treatsApp
diff --git a/share/qtcreator/qml/qmlobserver/startup/startup.qrc b/share/qtcreator/qml/qmlobserver/startup/startup.qrc
new file mode 100644
index 00000000000..52e67050d94
--- /dev/null
+++ b/share/qtcreator/qml/qmlobserver/startup/startup.qrc
@@ -0,0 +1,16 @@
+<RCC>
+    <qresource prefix="/startup">
+        <file>Logo.qml</file>
+        <file>qt-back.png</file>
+        <file>qt-blue.jpg</file>
+        <file>qt-front.png</file>
+        <file>qt-sketch.jpg</file>
+        <file>qt-text.png</file>
+        <file>quick-blur.png</file>
+        <file>quick-regular.png</file>
+        <file>shadow.png</file>
+        <file>startup.qml</file>
+        <file>startup.qrc</file>
+        <file>white-star.png</file>
+    </qresource>
+</RCC>
diff --git a/share/qtcreator/qml/qmlobserver/startup/white-star.png b/share/qtcreator/qml/qmlobserver/startup/white-star.png
new file mode 100644
index 0000000000000000000000000000000000000000..f467c9480e4fa553ea46c153ed8deec9b43394b7
GIT binary patch
literal 2651
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

literal 0
HcmV?d00001

-- 
GitLab