Index: trunk/demos/affine/affine.pro
===================================================================
--- trunk/demos/affine/affine.pro	(revision 521)
+++ trunk/demos/affine/affine.pro	(revision 561)
@@ -19,4 +19,6 @@
 INSTALLS += target sources
 
+symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+
 wince*: {
     DEPLOYMENT_PLUGIN += qjpeg
Index: trunk/demos/affine/main.cpp
===================================================================
--- trunk/demos/affine/main.cpp	(revision 521)
+++ trunk/demos/affine/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -55,6 +55,8 @@
 
     QList<QWidget *> widgets = qFindChildren<QWidget *>(&xformWidget);
-    foreach (QWidget *w, widgets)
+    foreach (QWidget *w, widgets) {
         w->setStyle(arthurStyle);
+        w->setAttribute(Qt::WA_AcceptTouchEvents);
+    }
 
     xformWidget.show();
Index: trunk/demos/affine/xform.cpp
===================================================================
--- trunk/demos/affine/xform.cpp	(revision 521)
+++ trunk/demos/affine/xform.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -69,6 +69,6 @@
     ctrlPoints << QPointF(250, 250) << QPointF(350, 250);
     pts->setPoints(ctrlPoints);
-    connect(pts, SIGNAL(pointsChanged(const QPolygonF&)),
-            this, SLOT(updateCtrlPoints(const QPolygonF &)));
+    connect(pts, SIGNAL(pointsChanged(QPolygonF)),
+            this, SLOT(updateCtrlPoints(QPolygonF)));
     setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
 }
@@ -896,5 +896,5 @@
     view->reset();
     vectorType->setChecked(true);
-    textEditor->setText("Qt Software");
+    textEditor->setText("Qt Affine Transformation Demo");
     textEditor->setEnabled(false);
 
Index: trunk/demos/affine/xform.h
===================================================================
--- trunk/demos/affine/xform.h	(revision 521)
+++ trunk/demos/affine/xform.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/arthurplugin/arthurplugin.pro
===================================================================
--- trunk/demos/arthurplugin/arthurplugin.pro	(revision 521)
+++ trunk/demos/arthurplugin/arthurplugin.pro	(revision 561)
@@ -46,4 +46,6 @@
 INSTALLS += target sources
 
+symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+
 win32-msvc* {
 	QMAKE_CFLAGS += /Zm500
Index: trunk/demos/arthurplugin/plugin.cpp
===================================================================
--- trunk/demos/arthurplugin/plugin.cpp	(revision 521)
+++ trunk/demos/arthurplugin/plugin.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -56,5 +56,24 @@
 QT_FORWARD_DECLARE_CLASS(QDesignerFormEditorInterface)
 
-static inline QString customWidgetDomXml(const QString &className)
+// Specify "text" to be a singleline property (no richtext)
+static inline QString textSingleLinePropertyDeclaration(const QString &className)
+{
+    QString rc = QLatin1String(
+            "<customwidgets>\n"
+            "  <customwidget>\n"
+            "    <class>");
+    rc += className;
+    rc += QLatin1String("</class>\n"
+            "    <propertyspecifications>\n"
+            "      <stringpropertyspecification name=\"text\" type=\"singleline\"/>\n"
+            "    </propertyspecifications>\n"
+            "  </customwidget>\n"
+            "</customwidgets>\n");
+    return rc;
+}
+
+// Plain XML for a custom widget
+static inline QString customWidgetDomXml(const QString &className,
+                                         const QString &customSection = QString())
 {
     QString rc = QLatin1String("<ui language=\"c++\"><widget class=\"");
@@ -64,5 +83,7 @@
     objectName[0] = objectName.at(0).toLower();
     rc += objectName;
-    rc += QLatin1String("\"/></ui>");
+    rc += QLatin1String("\"/>");
+    rc += customSection;
+    rc += QLatin1String("</ui>");
     return rc;
 }
@@ -81,5 +102,5 @@
 
 protected:
-    DemoPlugin(const QString &className);
+    explicit DemoPlugin(const QString &className, const QString &customSection = QString());
 
 public:
@@ -106,7 +127,7 @@
 };
 
-DemoPlugin::DemoPlugin(const QString &className) :
+DemoPlugin::DemoPlugin(const QString &className, const QString &customSection) :
     m_className(className),
-    m_domXml(customWidgetDomXml(className)),
+    m_domXml(customWidgetDomXml(className, customSection)),
     m_initialized(false)
 {
@@ -118,6 +139,6 @@
 
 public:
-    DeformPlugin(QObject *parent = 0) : QObject(parent), DemoPlugin(QLatin1String("PathDeformRendererEx")) { }
-    QString includeFile() const { return "deform.h"; }
+    explicit DeformPlugin(QObject *parent = 0);
+    QString includeFile() const { return QLatin1String("deform.h"); }
 
     QWidget *createWidget(QWidget *parent)
@@ -127,5 +148,5 @@
         deform->setAnimated(false);
         deform->setFontSize(20);
-        deform->setText("Arthur Widgets Demo");
+        deform->setText(QLatin1String("Arthur Widgets Demo"));
 
         return deform;
@@ -133,4 +154,11 @@
 };
 
+DeformPlugin::DeformPlugin(QObject *parent) :
+    QObject(parent),
+    DemoPlugin(QLatin1String("PathDeformRendererEx"),
+               textSingleLinePropertyDeclaration(QLatin1String("PathDeformRendererEx")))
+{
+}
+
 class XFormRendererEx : public XFormView
 {
@@ -145,16 +173,22 @@
     Q_OBJECT
 public:
-    XFormPlugin(QObject *parent = 0) : QObject(parent), DemoPlugin(QLatin1String("XFormRendererEx")) { }
-    QString includeFile() const { return "xform.h"; }
+    explicit XFormPlugin(QObject *parent = 0);
+    QString includeFile() const { return QLatin1String("xform.h"); }
 
     QWidget *createWidget(QWidget *parent)
     {
         XFormRendererEx *xform = new XFormRendererEx(parent);
-        xform->setText("Qt - Hello World!!");
-        xform->setPixmap(QPixmap(":/trolltech/arthurplugin/bg1.jpg"));
+        xform->setText(QLatin1String("Qt - Hello World!!"));
+        xform->setPixmap(QPixmap(QLatin1String(":/trolltech/arthurplugin/bg1.jpg")));
         return xform;
     }
 };
 
+XFormPlugin::XFormPlugin(QObject *parent) :
+    QObject(parent),
+    DemoPlugin(QLatin1String("XFormRendererEx"),
+               textSingleLinePropertyDeclaration(QLatin1String("XFormRendererEx")))
+{
+}
 
 class GradientEditorPlugin : public QObject, public DemoPlugin
@@ -162,5 +196,5 @@
     Q_OBJECT
 public:
-    GradientEditorPlugin(QObject *parent = 0) : QObject(parent), DemoPlugin(QLatin1String("GradientEditor")) { }
+    explicit GradientEditorPlugin(QObject *parent = 0) : QObject(parent), DemoPlugin(QLatin1String("GradientEditor")) { }
     QString includeFile() const { return "gradients.h"; }
 
@@ -185,5 +219,5 @@
 public:
     GradientRendererPlugin(QObject *parent = 0) : QObject(parent), DemoPlugin(QLatin1String("GradientRendererEx")) { }
-    QString includeFile() const { return "gradients.h"; }
+    QString includeFile() const { return QLatin1String("gradients.h"); }
 
     QWidget *createWidget(QWidget *parent)
@@ -199,5 +233,5 @@
     Q_OBJECT
 public:
-    PathStrokeRendererEx(QWidget *p) : PathStrokeRenderer(p) { }
+    explicit PathStrokeRendererEx(QWidget *p) : PathStrokeRenderer(p) { }
     QSize sizeHint() const { return QSize(300, 200); }
 };
@@ -207,6 +241,6 @@
     Q_OBJECT
 public:
-    StrokeRenderPlugin(QObject *parent = 0) : QObject(parent), DemoPlugin(QLatin1String("PathStrokeRendererEx")) { }
-    QString includeFile() const { return "pathstroke.h"; }
+    explicit StrokeRenderPlugin(QObject *parent = 0) : QObject(parent), DemoPlugin(QLatin1String("PathStrokeRendererEx")) { }
+    QString includeFile() const { return QLatin1String("pathstroke.h"); }
 
     QWidget *createWidget(QWidget *parent)
@@ -222,6 +256,6 @@
     Q_OBJECT
 public:
-    CompositionModePlugin(QObject *parent = 0) : QObject(parent), DemoPlugin(QLatin1String("CompositionRenderer")) { }
-    QString includeFile() const { return "composition.h"; }
+    explicit CompositionModePlugin(QObject *parent = 0) : QObject(parent), DemoPlugin(QLatin1String("CompositionRenderer")) { }
+    QString includeFile() const { return QLatin1String("composition.h"); }
 
     QWidget *createWidget(QWidget *parent)
@@ -240,5 +274,5 @@
 
 public:
-    ArthurPlugins(QObject *parent = 0);
+    explicit ArthurPlugins(QObject *parent = 0);
     QList<QDesignerCustomWidgetInterface*> customWidgets() const { return m_plugins; }
 
Index: trunk/demos/books/bookdelegate.cpp
===================================================================
--- trunk/demos/books/bookdelegate.cpp	(revision 521)
+++ trunk/demos/books/bookdelegate.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/books/bookdelegate.h
===================================================================
--- trunk/demos/books/bookdelegate.h	(revision 521)
+++ trunk/demos/books/bookdelegate.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/books/books.pro
===================================================================
--- trunk/demos/books/books.pro	(revision 521)
+++ trunk/demos/books/books.pro	(revision 561)
@@ -14,4 +14,6 @@
 INSTALLS += target sources
 
+symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+
 wince*: {
     CONFIG(debug, debug|release):sqlPlugins.sources = $$QT_BUILD_TREE/plugins/sqldrivers/*d4.dll
Index: trunk/demos/books/bookwindow.cpp
===================================================================
--- trunk/demos/books/bookwindow.cpp	(revision 521)
+++ trunk/demos/books/bookwindow.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/books/bookwindow.h
===================================================================
--- trunk/demos/books/bookwindow.h	(revision 521)
+++ trunk/demos/books/bookwindow.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/books/initdb.h
===================================================================
--- trunk/demos/books/initdb.h	(revision 521)
+++ trunk/demos/books/initdb.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/books/main.cpp
===================================================================
--- trunk/demos/books/main.cpp	(revision 521)
+++ trunk/demos/books/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/boxes/basic.fsh
===================================================================
--- trunk/demos/boxes/basic.fsh	(revision 521)
+++ trunk/demos/boxes/basic.fsh	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/boxes/basic.vsh
===================================================================
--- trunk/demos/boxes/basic.vsh	(revision 521)
+++ trunk/demos/boxes/basic.vsh	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/boxes/boxes.pro
===================================================================
--- trunk/demos/boxes/boxes.pro	(revision 521)
+++ trunk/demos/boxes/boxes.pro	(revision 561)
@@ -12,15 +12,12 @@
            glbuffers.h \
            glextensions.h \
-           glshaders.h \
            gltrianglemesh.h \
            qtbox.h \
            roundedbox.h \
            scene.h \
-           trackball.h \
-           vector.h
+           trackball.h
 SOURCES += 3rdparty/fbm.c \
            glbuffers.cpp \
            glextensions.cpp \
-           glshaders.cpp \
            main.cpp \
            qtbox.cpp \
@@ -46,5 +43,7 @@
 
 win32-msvc* {
-    QMAKE_CXXFLAGS += /Zm1200
-    QMAKE_CFLAGS += /Zm1200
+    QMAKE_CXXFLAGS -= -Zm200
+    QMAKE_CFLAGS -= -Zm200
+    QMAKE_CXXFLAGS += -Zm500
+    QMAKE_CFLAGS += -Zm500
 }
Index: trunk/demos/boxes/dotted.fsh
===================================================================
--- trunk/demos/boxes/dotted.fsh	(revision 521)
+++ trunk/demos/boxes/dotted.fsh	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/boxes/fresnel.fsh
===================================================================
--- trunk/demos/boxes/fresnel.fsh	(revision 521)
+++ trunk/demos/boxes/fresnel.fsh	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/boxes/glass.fsh
===================================================================
--- trunk/demos/boxes/glass.fsh	(revision 521)
+++ trunk/demos/boxes/glass.fsh	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/boxes/glbuffers.cpp
===================================================================
--- trunk/demos/boxes/glbuffers.cpp	(revision 521)
+++ trunk/demos/boxes/glbuffers.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -41,4 +41,5 @@
 
 #include "glbuffers.h"
+#include <QtGui/qmatrix4x4.h>
 
 //============================================================================//
@@ -347,5 +348,5 @@
 }
 
-void GLRenderTargetCube::getViewMatrix(gfx::Matrix4x4f& mat, int face)
+void GLRenderTargetCube::getViewMatrix(QMatrix4x4& mat, int face)
 {
     if (face < 0 || face >= 6) {
@@ -372,19 +373,20 @@
     };
 
-    memset(mat.bits(), 0, sizeof(float) * 16);
+    mat.fill(0.0f);
     for (int i = 0; i < 3; ++i)
-        mat(perm[face][i], i) = signs[face][i];
+        mat(i, perm[face][i]) = signs[face][i];
     mat(3, 3) = 1.0f;
 }
 
-void GLRenderTargetCube::getProjectionMatrix(gfx::Matrix4x4f& mat, float nearZ, float farZ)
-{
-    float proj[] = {
-        1.0f, 0.0f, 0.0f, 0.0f,
-        0.0f, 1.0f, 0.0f, 0.0f,
-        0.0f, 0.0f, (nearZ+farZ)/(nearZ-farZ), -1.0f,
-        0.0f, 0.0f, 2.0f*nearZ*farZ/(nearZ-farZ), 0.0f,
-    };
-
-    memcpy(mat.bits(), proj, sizeof(float) * 16);
-}
+void GLRenderTargetCube::getProjectionMatrix(QMatrix4x4& mat, float nearZ, float farZ)
+{
+    static const QMatrix4x4 reference(
+            1.0f, 0.0f, 0.0f, 0.0f,
+            0.0f, 1.0f, 0.0f, 0.0f,
+            0.0f, 0.0f, 0.0f, 0.0f,
+            0.0f, 0.0f, -1.0f, 0.0f);
+
+    mat = reference;
+    mat(2, 2) = (nearZ+farZ)/(nearZ-farZ);
+    mat(2, 3) = 2.0f*nearZ*farZ/(nearZ-farZ);
+}
Index: trunk/demos/boxes/glbuffers.h
===================================================================
--- trunk/demos/boxes/glbuffers.h	(revision 521)
+++ trunk/demos/boxes/glbuffers.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -48,6 +48,4 @@
 #include <QtGui>
 #include <QtOpenGL>
-
-#include "vector.h"
 
 #define BUFFER_OFFSET(i) ((char*)0 + (i))
@@ -60,4 +58,8 @@
     returnStatement;                                                                        \
 }
+
+QT_BEGIN_NAMESPACE
+class QMatrix4x4;
+QT_END_NAMESPACE
 
 class GLTexture
@@ -136,6 +138,6 @@
     virtual bool failed() {return m_failed || m_fbo.failed();}
 
-    static void getViewMatrix(gfx::Matrix4x4f& mat, int face);
-    static void getProjectionMatrix(gfx::Matrix4x4f& mat, float nearZ, float farZ);
+    static void getViewMatrix(QMatrix4x4& mat, int face);
+    static void getProjectionMatrix(QMatrix4x4& mat, float nearZ, float farZ);
 private:
     GLFrameBufferObject m_fbo;
Index: trunk/demos/boxes/glextensions.cpp
===================================================================
--- trunk/demos/boxes/glextensions.cpp	(revision 521)
+++ trunk/demos/boxes/glextensions.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -47,21 +47,4 @@
 {
 	bool ok = true;
-
-	RESOLVE_GL_FUNC(CreateShaderObjectARB)
-	RESOLVE_GL_FUNC(ShaderSourceARB)
-	RESOLVE_GL_FUNC(CompileShaderARB)
-	RESOLVE_GL_FUNC(GetObjectParameterivARB)
-	RESOLVE_GL_FUNC(DeleteObjectARB)
-	RESOLVE_GL_FUNC(GetInfoLogARB)
-	RESOLVE_GL_FUNC(CreateProgramObjectARB)
-	RESOLVE_GL_FUNC(AttachObjectARB)
-	RESOLVE_GL_FUNC(DetachObjectARB)
-	RESOLVE_GL_FUNC(LinkProgramARB)
-	RESOLVE_GL_FUNC(UseProgramObjectARB)
-	RESOLVE_GL_FUNC(GetUniformLocationARB)
-	RESOLVE_GL_FUNC(Uniform1iARB)
-	RESOLVE_GL_FUNC(Uniform1fARB)
-	RESOLVE_GL_FUNC(Uniform4fARB)
-	RESOLVE_GL_FUNC(UniformMatrix4fvARB)
 
 	RESOLVE_GL_FUNC(GenFramebuffersEXT)
@@ -87,24 +70,4 @@
 
 	return ok;
-}
-
-bool GLExtensionFunctions::glslSupported() {
-    return CreateShaderObjectARB
-	    && CreateShaderObjectARB
-	    && ShaderSourceARB
-	    && CompileShaderARB
-	    && GetObjectParameterivARB
-	    && DeleteObjectARB
-	    && GetInfoLogARB
-	    && CreateProgramObjectARB
-	    && AttachObjectARB
-	    && DetachObjectARB
-	    && LinkProgramARB
-	    && UseProgramObjectARB
-	    && GetUniformLocationARB
-	    && Uniform1iARB
-	    && Uniform1fARB
-	    && Uniform4fARB
-            && UniformMatrix4fvARB;
 }
 
Index: trunk/demos/boxes/glextensions.h
===================================================================
--- trunk/demos/boxes/glextensions.h	(revision 521)
+++ trunk/demos/boxes/glextensions.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -47,21 +47,4 @@
 /*
 Functions resolved:
-
-glCreateShaderObjectARB
-glShaderSourceARB
-glCompileShaderARB
-glGetObjectParameterivARB
-glDeleteObjectARB
-glGetInfoLogARB
-glCreateProgramObjectARB
-glAttachObjectARB
-glDetachObjectARB
-glLinkProgramARB
-glUseProgramObjectARB
-glGetUniformLocationARB
-glUniform1iARB
-glUniform1fARB
-glUniform4fARB
-glUniformMatrix4fvARB
 
 glGenFramebuffersEXT
@@ -121,6 +104,9 @@
 #endif
 
+#ifndef GL_ARB_vertex_buffer_object
+typedef ptrdiff_t GLsizeiptrARB;
+#endif
+
 #ifndef GL_VERSION_1_5
-typedef ptrdiff_t GLsizeiptr;
 #define GL_ARRAY_BUFFER 0x8892
 #define GL_ELEMENT_ARRAY_BUFFER 0x8893
@@ -136,37 +122,4 @@
 #define GL_DEPTH_ATTACHMENT_EXT 0x8D00
 #endif
-
-#ifndef GL_ARB_vertex_shader
-#define GL_VERTEX_SHADER_ARB 0x8B31
-#endif
-
-#ifndef GL_ARB_fragment_shader
-#define GL_FRAGMENT_SHADER_ARB 0x8B30
-#endif
-
-#ifndef GL_ARB_shader_objects
-typedef char GLcharARB;
-typedef unsigned int GLhandleARB;
-#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81
-#define GL_OBJECT_LINK_STATUS_ARB 0x8B82
-#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84
-#endif
-
-typedef GLhandleARB (APIENTRY *_glCreateShaderObjectARB) (GLenum);
-typedef void (APIENTRY *_glShaderSourceARB) (GLhandleARB, GLuint, const GLcharARB**, GLint *);
-typedef void (APIENTRY *_glCompileShaderARB) (GLhandleARB);
-typedef void (APIENTRY *_glGetObjectParameterivARB) (GLhandleARB, GLenum, int *);
-typedef void (APIENTRY *_glDeleteObjectARB) (GLhandleARB);
-typedef void (APIENTRY *_glGetInfoLogARB) (GLhandleARB, GLsizei, GLsizei *, GLcharARB *);
-typedef GLhandleARB (APIENTRY *_glCreateProgramObjectARB) ();
-typedef void (APIENTRY *_glAttachObjectARB) (GLhandleARB, GLhandleARB);
-typedef void (APIENTRY *_glDetachObjectARB) (GLhandleARB, GLhandleARB);
-typedef void (APIENTRY *_glLinkProgramARB) (GLhandleARB);
-typedef void (APIENTRY *_glUseProgramObjectARB) (GLhandleARB);
-typedef GLint (APIENTRY *_glGetUniformLocationARB) (GLhandleARB, const GLcharARB *);
-typedef void (APIENTRY *_glUniform1iARB) (GLint, GLint);
-typedef void (APIENTRY *_glUniform1fARB) (GLint, GLfloat);
-typedef void (APIENTRY *_glUniform4fARB) (GLint, GLfloat, GLfloat, GLfloat, GLfloat);
-typedef void (APIENTRY *_glUniformMatrix4fvARB) (GLint, GLuint, GLboolean, const GLfloat *);
 
 typedef void (APIENTRY *_glGenFramebuffersEXT) (GLsizei, GLuint *);
@@ -186,5 +139,5 @@
 typedef void (APIENTRY *_glGenBuffers) (GLsizei, GLuint *);
 typedef void (APIENTRY *_glBindBuffer) (GLenum, GLuint);
-typedef void (APIENTRY *_glBufferData) (GLenum, GLsizeiptr, const GLvoid *, GLenum);
+typedef void (APIENTRY *_glBufferData) (GLenum, GLsizeiptrARB, const GLvoid *, GLenum);
 typedef void (APIENTRY *_glDeleteBuffers) (GLsizei, const GLuint *);
 typedef void *(APIENTRY *_glMapBuffer) (GLenum, GLenum);
@@ -195,24 +148,6 @@
 	bool resolve(const QGLContext *context);
 
-    bool glslSupported();
     bool fboSupported();
     bool openGL15Supported(); // the rest: multi-texture, 3D-texture, vertex buffer objects
-
-	_glCreateShaderObjectARB CreateShaderObjectARB;
-	_glShaderSourceARB ShaderSourceARB;
-	_glCompileShaderARB CompileShaderARB;
-	_glGetObjectParameterivARB GetObjectParameterivARB;
-	_glDeleteObjectARB DeleteObjectARB;
-	_glGetInfoLogARB GetInfoLogARB;
-	_glCreateProgramObjectARB CreateProgramObjectARB;
-	_glAttachObjectARB AttachObjectARB;
-	_glDetachObjectARB DetachObjectARB;
-	_glLinkProgramARB LinkProgramARB;
-	_glUseProgramObjectARB UseProgramObjectARB;
-	_glGetUniformLocationARB GetUniformLocationARB;
-	_glUniform1iARB Uniform1iARB;
-	_glUniform1fARB Uniform1fARB;
-	_glUniform4fARB Uniform4fARB;
-	_glUniformMatrix4fvARB UniformMatrix4fvARB;
 
 	_glGenFramebuffersEXT GenFramebuffersEXT;
@@ -244,21 +179,4 @@
 }
 
-#define glCreateShaderObjectARB getGLExtensionFunctions().CreateShaderObjectARB
-#define glShaderSourceARB getGLExtensionFunctions().ShaderSourceARB
-#define glCompileShaderARB getGLExtensionFunctions().CompileShaderARB
-#define glGetObjectParameterivARB getGLExtensionFunctions().GetObjectParameterivARB
-#define glDeleteObjectARB getGLExtensionFunctions().DeleteObjectARB
-#define glGetInfoLogARB getGLExtensionFunctions().GetInfoLogARB
-#define glCreateProgramObjectARB getGLExtensionFunctions().CreateProgramObjectARB
-#define glAttachObjectARB getGLExtensionFunctions().AttachObjectARB
-#define glDetachObjectARB getGLExtensionFunctions().DetachObjectARB
-#define glLinkProgramARB getGLExtensionFunctions().LinkProgramARB
-#define glUseProgramObjectARB getGLExtensionFunctions().UseProgramObjectARB
-#define glGetUniformLocationARB getGLExtensionFunctions().GetUniformLocationARB
-#define glUniform1iARB getGLExtensionFunctions().Uniform1iARB
-#define glUniform1fARB getGLExtensionFunctions().Uniform1fARB
-#define glUniform4fARB getGLExtensionFunctions().Uniform4fARB
-#define glUniformMatrix4fvARB getGLExtensionFunctions().UniformMatrix4fvARB
-
 #define glGenFramebuffersEXT getGLExtensionFunctions().GenFramebuffersEXT
 #define glGenRenderbuffersEXT getGLExtensionFunctions().GenRenderbuffersEXT
Index: trunk/demos/boxes/glshaders.cpp
===================================================================
--- trunk/demos/boxes/glshaders.cpp	(revision 521)
+++ 	(revision )
@@ -1,266 +1,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Nokia.
-**
-** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "glshaders.h"
-
-#define GLSHADERS_ASSERT_OPENGL(prefix, assertion, returnStatement)                         \
-if (m_failed || !(assertion)) {                                                             \
-    if (!m_failed) qCritical(prefix ": The necessary OpenGL functions are not available."); \
-    m_failed = true;                                                                        \
-    returnStatement;                                                                        \
-}
-
-
-GLShader::GLShader(const char *data, int size, GLenum shaderType)
-: m_compileError(false), m_failed(false)
-{
-    GLSHADERS_ASSERT_OPENGL("GLShader::GLShader",
-        glCreateShaderObjectARB && glShaderSourceARB && glCompileShaderARB && glGetObjectParameterivARB, return)
-
-    m_shader = glCreateShaderObjectARB(shaderType);
-
-    GLint glSize = size;
-    glShaderSourceARB(m_shader, 1, &data, &glSize);
-    glCompileShaderARB(m_shader);
-    int status;
-    glGetObjectParameterivARB(m_shader, GL_OBJECT_COMPILE_STATUS_ARB, &status);
-    m_compileError = (status != 1);
-}
-
-GLShader::GLShader(const QString& fileName, GLenum shaderType)
-    : m_compileError(false), m_failed(false)
-{
-    GLSHADERS_ASSERT_OPENGL("GLShader::GLShader",
-        glCreateShaderObjectARB && glShaderSourceARB && glCompileShaderARB && glGetObjectParameterivARB, return)
-
-    m_shader = glCreateShaderObjectARB(shaderType);
-
-    QFile file(fileName);
-    if (file.open(QIODevice::ReadOnly)) {
-        QByteArray bytes = file.readAll();
-        GLint size = file.size();
-        const char *p = bytes.data();
-        file.close();
-        glShaderSourceARB(m_shader, 1, &p, &size);
-        glCompileShaderARB(m_shader);
-        int status;
-        glGetObjectParameterivARB(m_shader, GL_OBJECT_COMPILE_STATUS_ARB, &status);
-        m_compileError = (status != 1);
-    } else {
-        m_compileError = true;
-    }
-}
-
-GLShader::~GLShader()
-{
-    GLSHADERS_ASSERT_OPENGL("GLShader::~GLShader", glDeleteObjectARB, return)
-
-    glDeleteObjectARB(m_shader);
-}
-
-QString GLShader::log()
-{
-    GLSHADERS_ASSERT_OPENGL("GLShader::log", glGetObjectParameterivARB
-        && glGetInfoLogARB, return QLatin1String("GLSL not supported."))
-
-    int length;
-    glGetObjectParameterivARB(m_shader, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length);
-    char *log = new char[length + 1];
-    GLsizei glLength = length;
-    glGetInfoLogARB(m_shader, glLength, &glLength, log);
-    log[glLength] = '\0';
-    QString result(log);
-    delete log;
-    return result;
-}
-
-GLVertexShader::GLVertexShader(const char *data, int size) : GLShader(data, size, GL_VERTEX_SHADER_ARB)
-{
-}
-
-GLVertexShader::GLVertexShader(const QString& fileName) : GLShader(fileName, GL_VERTEX_SHADER_ARB)
-{
-}
-
-GLFragmentShader::GLFragmentShader(const char *data, int size) : GLShader(data, size, GL_FRAGMENT_SHADER_ARB)
-{
-}
-
-GLFragmentShader::GLFragmentShader(const QString& fileName) : GLShader(fileName, GL_FRAGMENT_SHADER_ARB)
-{
-}
-
-GLProgram::GLProgram() : m_linked(false), m_linkError(false), m_failed(false)
-{
-    GLSHADERS_ASSERT_OPENGL("GLProgram::GLProgram", glCreateProgramObjectARB, return)
-
-    m_program = glCreateProgramObjectARB();
-}
-
-GLProgram::~GLProgram()
-{
-    GLSHADERS_ASSERT_OPENGL("GLProgram::~GLProgram", glDeleteObjectARB, return)
-
-    glDeleteObjectARB(m_program);
-}
-
-void GLProgram::attach(const GLShader &shader)
-{
-    GLSHADERS_ASSERT_OPENGL("GLProgram::attach", glAttachObjectARB, return)
-
-    glAttachObjectARB(m_program, shader.m_shader);
-    m_linked = m_linkError = false;
-}
-
-void GLProgram::detach(const GLShader &shader)
-{
-    GLSHADERS_ASSERT_OPENGL("GLProgram::detach", glDetachObjectARB, return)
-
-    glDetachObjectARB(m_program, shader.m_shader);
-    m_linked = m_linkError = false;
-}
-
-bool GLProgram::failed()
-{
-    if (m_failed || m_linkError)
-        return true;
-
-    if (m_linked)
-        return false;
-
-    GLSHADERS_ASSERT_OPENGL("GLProgram::failed", glLinkProgramARB && glGetObjectParameterivARB, return true)
-
-    glLinkProgramARB(m_program);
-    int status;
-    glGetObjectParameterivARB(m_program, GL_OBJECT_LINK_STATUS_ARB, &status);
-    m_linkError = !(m_linked = (status == 1));
-    return m_linkError;
-}
-
-QString GLProgram::log()
-{
-    GLSHADERS_ASSERT_OPENGL("GLProgram::log", glGetObjectParameterivARB && glGetInfoLogARB,
-        return QLatin1String("Failed."))
-
-    int length;
-    glGetObjectParameterivARB(m_program, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length);
-    char *log = new char[length + 1];
-    GLsizei glLength = length;
-    glGetInfoLogARB(m_program, glLength, &glLength, log);
-    log[glLength] = '\0';
-    QString result(log);
-    delete log;
-    return result;
-}
-
-void GLProgram::bind()
-{
-    GLSHADERS_ASSERT_OPENGL("GLProgram::bind", glUseProgramObjectARB, return)
-
-    if (!failed())
-        glUseProgramObjectARB(m_program);
-}
-
-void GLProgram::unbind()
-{
-    GLSHADERS_ASSERT_OPENGL("GLProgram::bind", glUseProgramObjectARB, return)
-
-    glUseProgramObjectARB(0);
-}
-
-bool GLProgram::hasParameter(const QString& name)
-{
-    GLSHADERS_ASSERT_OPENGL("GLProgram::hasParameter", glGetUniformLocationARB, return false)
-
-    if (!failed()) {
-        QByteArray asciiName = name.toAscii();
-        return -1 != glGetUniformLocationARB(m_program, asciiName.data());
-    }
-    return false;
-}
-
-void GLProgram::setInt(const QString& name, int value)
-{
-    GLSHADERS_ASSERT_OPENGL("GLProgram::setInt", glGetUniformLocationARB && glUniform1iARB, return)
-
-    if (!failed()) {
-        QByteArray asciiName = name.toAscii();
-        int loc = glGetUniformLocationARB(m_program, asciiName.data());
-	    glUniform1iARB(loc, value);
-    }
-}
-
-void GLProgram::setFloat(const QString& name, float value)
-{
-    GLSHADERS_ASSERT_OPENGL("GLProgram::setFloat", glGetUniformLocationARB && glUniform1fARB, return)
-
-    if (!failed()) {
-        QByteArray asciiName = name.toAscii();
-        int loc = glGetUniformLocationARB(m_program, asciiName.data());
-	    glUniform1fARB(loc, value);
-    }
-}
-
-void GLProgram::setColor(const QString& name, QRgb value)
-{
-    GLSHADERS_ASSERT_OPENGL("GLProgram::setColor", glGetUniformLocationARB && glUniform4fARB, return)
-
-    //qDebug() << "Setting color" << name;
-    if (!failed()) {
-        QByteArray asciiName = name.toAscii();
-        int loc = glGetUniformLocationARB(m_program, asciiName.data());
-        //qDebug() << "Location of" << name << "is" << loc;
-        QColor color(value);
-	    glUniform4fARB(loc, color.redF(), color.greenF(), color.blueF(), color.alphaF());
-    }
-}
-
-void GLProgram::setMatrix(const QString& name, const gfx::Matrix4x4f &mat)
-{
-    GLSHADERS_ASSERT_OPENGL("GLProgram::setMatrix", glGetUniformLocationARB && glUniformMatrix4fvARB, return)
-
-    if (!failed()) {
-        QByteArray asciiName = name.toAscii();
-        int loc = glGetUniformLocationARB(m_program, asciiName.data());
-        //qDebug() << "Location of" << name << "is" << loc;
-	    glUniformMatrix4fvARB(loc, 1, GL_FALSE, mat.bits());
-    }
-}
Index: trunk/demos/boxes/glshaders.h
===================================================================
--- trunk/demos/boxes/glshaders.h	(revision 521)
+++ 	(revision )
@@ -1,108 +1,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Nokia.
-**
-** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef GLSHADERS_H
-#define GLSHADERS_H
-
-//#include <GL/glew.h>
-#include "glextensions.h"
-
-#include <QtGui>
-#include <QtOpenGL>
-
-#include "vector.h"
-
-class GLShader
-{
-public:
-    friend class GLProgram;
-    virtual ~GLShader();
-    bool failed() const {return m_failed;}
-    QString log();
-protected:
-    GLShader(const char *data, int size, GLenum shaderType);
-    GLShader(const QString& fileName, GLenum shaderType);
-
-    GLhandleARB m_shader;
-    bool m_compileError;
-    bool m_failed;
-};
-
-class GLVertexShader : public GLShader
-{
-public:
-    GLVertexShader(const char *data, int size);
-    GLVertexShader(const QString& fileName);
-};
-
-class GLFragmentShader : public GLShader
-{
-public:
-    GLFragmentShader(const char *data, int size);
-    GLFragmentShader(const QString& fileName);
-};
-
-class GLProgram
-{
-public:
-    GLProgram();
-    ~GLProgram();
-    void attach(const GLShader &shader);
-    void detach(const GLShader &shader);
-    void bind();
-    void unbind();
-    bool failed();
-    QString log();
-    bool hasParameter(const QString& name);
-    // use program before setting values
-    void setInt(const QString& name, int value);
-    void setFloat(const QString& name, float value);
-    void setColor(const QString& name, QRgb value);
-    void setMatrix(const QString& name, const gfx::Matrix4x4f &mat);
-    // TODO: add a bunch of set-functions for different types.
-private:
-    GLhandleARB m_program;
-    bool m_linked;
-    bool m_linkError;
-    bool m_failed;
-};
-
-#endif
Index: trunk/demos/boxes/gltrianglemesh.h
===================================================================
--- trunk/demos/boxes/gltrianglemesh.h	(revision 521)
+++ trunk/demos/boxes/gltrianglemesh.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/boxes/granite.fsh
===================================================================
--- trunk/demos/boxes/granite.fsh	(revision 521)
+++ trunk/demos/boxes/granite.fsh	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/boxes/main.cpp
===================================================================
--- trunk/demos/boxes/main.cpp	(revision 521)
+++ trunk/demos/boxes/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -69,5 +69,5 @@
 {
     int subStringLength = strlen(subString);
-    return (strncmp(extensionString, subString, subStringLength) == 0) 
+    return (strncmp(extensionString, subString, subStringLength) == 0)
         && ((extensionString[subStringLength] == ' ') || (extensionString[subStringLength] == '\0'));
 }
@@ -138,9 +138,10 @@
         "work poorly or not at all on your system.");
 
+    widget->makeCurrent(); // The current context must be set before calling Scene's constructor
+    Scene scene(1024, 768, maxTextureSize);
     GraphicsView view;
     view.setViewport(widget);
     view.setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
-    widget->makeCurrent(); // The current context must be set before calling Scene's constructor
-    view.setScene(new Scene(1024, 768, maxTextureSize));
+    view.setScene(&scene);
     view.show();
 
Index: trunk/demos/boxes/marble.fsh
===================================================================
--- trunk/demos/boxes/marble.fsh	(revision 521)
+++ trunk/demos/boxes/marble.fsh	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/boxes/qtbox.cpp
===================================================================
--- trunk/demos/boxes/qtbox.cpp	(revision 521)
+++ trunk/demos/boxes/qtbox.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -123,5 +123,5 @@
 
     foreach (QGraphicsItem *item, selected) {
-        ItemBase *itemBase = dynamic_cast<ItemBase *>(item);
+        ItemBase *itemBase = qgraphicsitem_cast<ItemBase *>(item);
         if (itemBase)
             scene->addItem(itemBase->createNew(itemBase->m_size, itemBase->pos().x() + itemBase->m_size, itemBase->pos().y()));
@@ -138,5 +138,5 @@
 
     foreach (QGraphicsItem *item, selected) {
-        ItemBase *itemBase = dynamic_cast<ItemBase *>(item);
+        ItemBase *itemBase = qgraphicsitem_cast<ItemBase *>(item);
         if (itemBase)
             delete itemBase;
@@ -153,5 +153,5 @@
 
     foreach (QGraphicsItem *item, selected) {
-        ItemBase *itemBase = dynamic_cast<ItemBase *>(item);
+        ItemBase *itemBase = qgraphicsitem_cast<ItemBase *>(item);
         if (itemBase) {
             itemBase->prepareGeometryChange();
@@ -172,5 +172,5 @@
 
     foreach (QGraphicsItem *item, selected) {
-        ItemBase *itemBase = dynamic_cast<ItemBase *>(item);
+        ItemBase *itemBase = qgraphicsitem_cast<ItemBase *>(item);
         if (itemBase) {
             itemBase->prepareGeometryChange();
@@ -258,4 +258,10 @@
 }
 
+int ItemBase::type() const
+{
+    return Type;
+}
+
+
 bool ItemBase::isInResizeArea(const QPointF &pos)
 {
@@ -270,17 +276,18 @@
 {
     for (int i = 0; i < 8; ++i) {
-        m_vertices[i][0] = (i & 1 ? 0.5f : -0.5f);
-        m_vertices[i][1] = (i & 2 ? 0.5f : -0.5f);
-        m_vertices[i][2] = (i & 4 ? 0.5f : -0.5f);
+        m_vertices[i].setX(i & 1 ? 0.5f : -0.5f);
+        m_vertices[i].setY(i & 2 ? 0.5f : -0.5f);
+        m_vertices[i].setZ(i & 4 ? 0.5f : -0.5f);
     }
     for (int i = 0; i < 4; ++i) {
-        m_texCoords[i][0] = (i & 1 ? 1.0f : 0.0f);
-        m_texCoords[i][1] = (i & 2 ? 1.0f : 0.0f);
-    }
-    memset(m_normals, 0, sizeof(m_normals));
-    for (int i = 0; i < 3; ++i) {
-        m_normals[2 * i + 0][i] = -1.0f;
-        m_normals[2 * i + 1][i] = 1.0f;
-    }
+        m_texCoords[i].setX(i & 1 ? 1.0f : 0.0f);
+        m_texCoords[i].setY(i & 2 ? 1.0f : 0.0f);
+    }
+    m_normals[0] = QVector3D(-1.0f, 0.0f, 0.0f);
+    m_normals[1] = QVector3D(1.0f, 0.0f, 0.0f);
+    m_normals[2] = QVector3D(0.0f, -1.0f, 0.0f);
+    m_normals[3] = QVector3D(0.0f, 1.0f, 0.0f);
+    m_normals[4] = QVector3D(0.0f, 0.0f, -1.0f);
+    m_normals[5] = QVector3D(0.0f, 0.0f, 1.0f);
 }
 
@@ -313,4 +320,6 @@
     };
 
+    painter->beginNativePainting();
+
     glMatrixMode(GL_PROJECTION);
     glPushMatrix();
@@ -352,9 +361,9 @@
 
         glBegin(GL_TRIANGLE_STRIP);
-        glNormal3fv(m_normals[2 * dir + 0].bits());
+        glNormal3fv(reinterpret_cast<float *>(&m_normals[2 * dir + 0]));
         for (int i = 0; i < 2; ++i) {
             for (int j = 0; j < 2; ++j) {
-                glTexCoord2fv(m_texCoords[(j << 1) | i].bits());
-                glVertex3fv(m_vertices[(i << ((dir + 2) % 3)) | (j << ((dir + 1) % 3))].bits());
+                glTexCoord2fv(reinterpret_cast<float *>(&m_texCoords[(j << 1) | i]));
+                glVertex3fv(reinterpret_cast<float *>(&m_vertices[(i << ((dir + 2) % 3)) | (j << ((dir + 1) % 3))]));
             }
         }
@@ -362,9 +371,9 @@
 
         glBegin(GL_TRIANGLE_STRIP);
-        glNormal3fv(m_normals[2 * dir + 1].bits());
+        glNormal3fv(reinterpret_cast<float *>(&m_normals[2 * dir + 1]));
         for (int i = 0; i < 2; ++i) {
             for (int j = 0; j < 2; ++j) {
-                glTexCoord2fv(m_texCoords[(j << 1) | i].bits());
-                glVertex3fv(m_vertices[(1 << dir) | (i << ((dir + 1) % 3)) | (j << ((dir + 2) % 3))].bits());
+                glTexCoord2fv(reinterpret_cast<float *>(&m_texCoords[(j << 1) | i]));
+                glVertex3fv(reinterpret_cast<float *>(&m_vertices[(1 << dir) | (i << ((dir + 1) % 3)) | (j << ((dir + 2) % 3))]));
             }
         }
@@ -385,4 +394,6 @@
     glMatrixMode(GL_PROJECTION);
     glPopMatrix();
+
+    painter->endNativePainting();
 
     ItemBase::paint(painter, option, widget);
Index: trunk/demos/boxes/qtbox.h
===================================================================
--- trunk/demos/boxes/qtbox.h	(revision 521)
+++ trunk/demos/boxes/qtbox.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -45,11 +45,12 @@
 #include <QtGui>
 
-#include "vector.h"
+#include <QtGui/qvector3d.h>
 #include "glbuffers.h"
 
-class ItemBase : public QObject, public QGraphicsItem
+class ItemBase : public QGraphicsItem
 {
-    Q_OBJECT
 public:
+    enum { Type = UserType + 1 };
+
     ItemBase(int size, int x, int y);
     virtual ~ItemBase();
@@ -65,4 +66,5 @@
     virtual void keyPressEvent(QKeyEvent *event);
     virtual void wheelEvent(QGraphicsSceneWheelEvent *event);
+    virtual int type() const;
     bool isInResizeArea(const QPointF &pos);
 
@@ -86,7 +88,7 @@
     virtual ItemBase *createNew(int size, int x, int y);
 private:
-    gfx::Vector3f m_vertices[8];
-    gfx::Vector2f m_texCoords[4];
-    gfx::Vector3f m_normals[6];
+    QVector3D m_vertices[8];
+    QVector3D m_texCoords[4];
+    QVector3D m_normals[6];
     GLTexture *m_texture;
 };
Index: trunk/demos/boxes/reflection.fsh
===================================================================
--- trunk/demos/boxes/reflection.fsh	(revision 521)
+++ trunk/demos/boxes/reflection.fsh	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/boxes/refraction.fsh
===================================================================
--- trunk/demos/boxes/refraction.fsh	(revision 521)
+++ trunk/demos/boxes/refraction.fsh	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/boxes/roundedbox.cpp
===================================================================
--- trunk/demos/boxes/roundedbox.cpp	(revision 521)
+++ trunk/demos/boxes/roundedbox.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -47,7 +47,8 @@
 
 VertexDescription P3T2N3Vertex::description[] = {
-    {VertexDescription::Position, GL_FLOAT, SIZE_OF_MEMBER(P3T2N3Vertex, position) / sizeof(float), offsetof(P3T2N3Vertex, position), 0},
-    {VertexDescription::TexCoord, GL_FLOAT, SIZE_OF_MEMBER(P3T2N3Vertex, texCoord) / sizeof(float), offsetof(P3T2N3Vertex, texCoord), 0},
-    {VertexDescription::Normal, GL_FLOAT, SIZE_OF_MEMBER(P3T2N3Vertex, normal) / sizeof(float), offsetof(P3T2N3Vertex, normal), 0},
+    {VertexDescription::Position, GL_FLOAT, SIZE_OF_MEMBER(P3T2N3Vertex, position) / sizeof(float), 0, 0},
+    {VertexDescription::TexCoord, GL_FLOAT, SIZE_OF_MEMBER(P3T2N3Vertex, texCoord) / sizeof(float), sizeof(QVector3D), 0},
+    {VertexDescription::Normal, GL_FLOAT, SIZE_OF_MEMBER(P3T2N3Vertex, normal) / sizeof(float), sizeof(QVector3D) + sizeof(QVector2D), 0},
+
     {VertexDescription::Null, 0, 0, 0, 0},
 };
@@ -79,8 +80,7 @@
 
     for (int corner = 0; corner < 8; ++corner) {
-        gfx::Vector3f centre;
-        centre[0] = (corner & 1 ? 1.0f : -1.0f);
-        centre[1] = (corner & 2 ? 1.0f : -1.0f);
-        centre[2] = (corner & 4 ? 1.0f : -1.0f);
+        QVector3D centre(corner & 1 ? 1.0f : -1.0f,
+                corner & 2 ? 1.0f : -1.0f,
+                corner & 4 ? 1.0f : -1.0f);
         int winding = (corner & 1) ^ ((corner >> 1) & 1) ^ (corner >> 2);
         int offsX = ((corner ^ 1) - corner) * vertexCountPerCorner;
@@ -130,10 +130,11 @@
 
             for (int j = 0; j <= i; ++j) {
-                gfx::Vector3f normal = gfx::Vector3f::vector(i - j, j, n + 1 - i).normalized();
-                gfx::Vector3f pos = centre * (0.5f - r + r * normal);
+                QVector3D normal = QVector3D(i - j, j, n + 1 - i).normalized();
+                QVector3D offset(0.5f - r, 0.5f - r, 0.5f - r);
+                QVector3D pos = centre * (offset + r * normal);
 
                 vp[vidx].position = scale * pos;
                 vp[vidx].normal = centre * normal;
-                vp[vidx].texCoord = gfx::Vector2f::vector(pos[0], pos[1]) + 0.5f;
+                vp[vidx].texCoord = QVector2D(pos.x() + 0.5f, pos.y() + 0.5f);
 
                 // Corner polygons
Index: trunk/demos/boxes/roundedbox.h
===================================================================
--- trunk/demos/boxes/roundedbox.h	(revision 521)
+++ trunk/demos/boxes/roundedbox.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -50,12 +50,13 @@
 
 #include "gltrianglemesh.h"
-#include "vector.h"
+#include <QtGui/qvector3d.h>
+#include <QtGui/qvector2d.h>
 #include "glbuffers.h"
 
 struct P3T2N3Vertex
 {
-    gfx::Vector3f position;
-    gfx::Vector2f texCoord;
-    gfx::Vector3f normal;
+    QVector3D position;
+    QVector2D texCoord;
+    QVector3D normal;
     static VertexDescription description[];
 };
Index: trunk/demos/boxes/scene.cpp
===================================================================
--- trunk/demos/boxes/scene.cpp	(revision 521)
+++ trunk/demos/boxes/scene.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,11 +34,14 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/
 
+#include <QDebug>
 #include "scene.h"
+#include <QtGui/qmatrix4x4.h>
+#include <QtGui/qvector3d.h>
 
 #include "3rdparty/fbm.h"
@@ -343,5 +346,5 @@
                         m_parameterEdits << colorEdit;
                         layout->addWidget(colorEdit);
-                        connect(colorEdit, SIGNAL(colorChanged(QRgb, int)), this, SLOT(setColorParameter(QRgb, int)));
+                        connect(colorEdit, SIGNAL(colorChanged(QRgb,int)), this, SLOT(setColorParameter(QRgb,int)));
                         ++row;
                     } else if (type == "float") {
@@ -351,5 +354,5 @@
                         m_parameterEdits << floatEdit;
                         layout->addWidget(floatEdit);
-                        connect(floatEdit, SIGNAL(valueChanged(float, int)), this, SLOT(setFloatParameter(float, int)));
+                        connect(floatEdit, SIGNAL(valueChanged(float,int)), this, SLOT(setFloatParameter(float,int)));
                         ++row;
                     }
@@ -485,7 +488,7 @@
     setSceneRect(0, 0, width, height);
 
-    m_trackBalls[0] = TrackBall(0.0005f, gfx::Vector3f::vector(0, 1, 0), TrackBall::Sphere);
-    m_trackBalls[1] = TrackBall(0.0001f, gfx::Vector3f::vector(0, 0, 1), TrackBall::Sphere);
-    m_trackBalls[2] = TrackBall(0.0f, gfx::Vector3f::vector(0, 1, 0), TrackBall::Plane);
+    m_trackBalls[0] = TrackBall(0.05f, QVector3D(0, 1, 0), TrackBall::Sphere);
+    m_trackBalls[1] = TrackBall(0.005f, QVector3D(0, 0, 1), TrackBall::Sphere);
+    m_trackBalls[2] = TrackBall(0.0f, QVector3D(0, 1, 0), TrackBall::Plane);
 
     m_renderOptions = new RenderOptionsDialog;
@@ -494,6 +497,6 @@
 
     connect(m_renderOptions, SIGNAL(dynamicCubemapToggled(int)), this, SLOT(toggleDynamicCubemap(int)));
-    connect(m_renderOptions, SIGNAL(colorParameterChanged(const QString &, QRgb)), this, SLOT(setColorParameter(const QString &, QRgb)));
-    connect(m_renderOptions, SIGNAL(floatParameterChanged(const QString &, float)), this, SLOT(setFloatParameter(const QString &, float)));
+    connect(m_renderOptions, SIGNAL(colorParameterChanged(QString,QRgb)), this, SLOT(setColorParameter(QString,QRgb)));
+    connect(m_renderOptions, SIGNAL(floatParameterChanged(QString,float)), this, SLOT(setFloatParameter(QString,float)));
     connect(m_renderOptions, SIGNAL(textureChanged(int)), this, SLOT(setTexture(int)));
     connect(m_renderOptions, SIGNAL(shaderChanged(int)), this, SLOT(setShader(int)));
@@ -532,9 +535,9 @@
     if (m_mainCubemap)
         delete m_mainCubemap;
-    foreach (GLProgram *program, m_programs)
+    foreach (QGLShaderProgram *program, m_programs)
         if (program) delete program;
     if (m_vertexShader)
         delete m_vertexShader;
-    foreach (GLFragmentShader *shader, m_fragmentShaders)
+    foreach (QGLShader *shader, m_fragmentShaders)
         if (shader) delete shader;
     foreach (GLRenderTargetCube *rt, m_cubemaps)
@@ -550,5 +553,6 @@
     m_box = new GLRoundedBox(0.25f, 1.0f, 10);
 
-    m_vertexShader = new GLVertexShader(":/res/boxes/basic.vsh");
+    m_vertexShader = new QGLShader(QGLShader::Vertex);
+    m_vertexShader->compileSourceFile(QLatin1String(":/res/boxes/basic.vsh"));
 
     QStringList list;
@@ -556,8 +560,10 @@
          << ":/res/boxes/cubemap_negy.jpg" << ":/res/boxes/cubemap_posz.jpg" << ":/res/boxes/cubemap_negz.jpg";
     m_environment = new GLTextureCube(list, qMin(1024, m_maxTextureSize));
-    m_environmentShader = new GLFragmentShader(environmentShaderText, strlen(environmentShaderText));
-    m_environmentProgram = new GLProgram;
-    m_environmentProgram->attach(*m_vertexShader);
-    m_environmentProgram->attach(*m_environmentShader);
+    m_environmentShader = new QGLShader(QGLShader::Fragment);
+    m_environmentShader->compileSourceCode(environmentShaderText);
+    m_environmentProgram = new QGLShaderProgram;
+    m_environmentProgram->addShader(m_vertexShader);
+    m_environmentProgram->addShader(m_environmentShader);
+    m_environmentProgram->link();
 
     const int NOISE_SIZE = 128; // for a different size, B and BM in fbm.c must also be changed
@@ -611,10 +617,11 @@
     files = QDir(":/res/boxes/").entryInfoList(filter, QDir::Files | QDir::Readable);
     foreach (QFileInfo file, files) {
-        GLProgram *program = new GLProgram;
-        GLFragmentShader* shader = new GLFragmentShader(file.absoluteFilePath());
+        QGLShaderProgram *program = new QGLShaderProgram;
+        QGLShader* shader = new QGLShader(QGLShader::Fragment);
+        shader->compileSourceFile(file.absoluteFilePath());
         // The program does not take ownership over the shaders, so store them in a vector so they can be deleted afterwards.
-        program->attach(*m_vertexShader);
-        program->attach(*shader);
-        if (program->failed()) {
+        program->addShader(m_vertexShader);
+        program->addShader(shader);
+        if (!program->link()) {
             qWarning("Failed to compile and link shader program");
             qWarning("Vertex shader log:");
@@ -635,19 +642,37 @@
 
         program->bind();
-        m_cubemaps << (program->hasParameter("env") ? new GLRenderTargetCube(qMin(256, m_maxTextureSize)) : 0);
-        program->unbind();
+        m_cubemaps << ((program->uniformLocation("env") != -1) ? new GLRenderTargetCube(qMin(256, m_maxTextureSize)) : 0);
+        program->release();
     }
 
     if (m_programs.size() == 0)
-        m_programs << new GLProgram;
+        m_programs << new QGLShaderProgram;
 
     m_renderOptions->emitParameterChanged();
+}
+
+static void loadMatrix(const QMatrix4x4& m)
+{
+    GLfloat mat[16];
+    const qreal *data = m.constData();
+    for (int index = 0; index < 16; ++index)
+        mat[index] = data[index];
+    glLoadMatrixf(mat);
+}
+
+static void multMatrix(const QMatrix4x4& m)
+{
+    GLfloat mat[16];
+    const qreal *data = m.constData();
+    for (int index = 0; index < 16; ++index)
+        mat[index] = data[index];
+    glMultMatrixf(mat);
 }
 
 // If one of the boxes should not be rendered, set excludeBox to its index.
 // If the main box should not be rendered, set excludeBox to -1.
-void Scene::renderBoxes(const gfx::Matrix4x4f &view, int excludeBox)
-{
-    gfx::Matrix4x4f invView = view.inverse();
+void Scene::renderBoxes(const QMatrix4x4 &view, int excludeBox)
+{
+    QMatrix4x4 invView = view.inverted();
 
     // If multi-texturing is supported, use three saplers.
@@ -665,9 +690,9 @@
     glDisable(GL_CULL_FACE);
 
-    gfx::Matrix4x4f viewRotation(view);
+    QMatrix4x4 viewRotation(view);
     viewRotation(3, 0) = viewRotation(3, 1) = viewRotation(3, 2) = 0.0f;
     viewRotation(0, 3) = viewRotation(1, 3) = viewRotation(2, 3) = 0.0f;
     viewRotation(3, 3) = 1.0f;
-    glLoadMatrixf(viewRotation.bits());
+    loadMatrix(viewRotation);
     glScalef(20.0f, 20.0f, 20.0f);
 
@@ -676,13 +701,13 @@
         m_environment->bind();
         m_environmentProgram->bind();
-        m_environmentProgram->setInt("tex", 0);
-        m_environmentProgram->setInt("env", 1);
-        m_environmentProgram->setInt("noise", 2);
+        m_environmentProgram->setUniformValue("tex", GLint(0));
+        m_environmentProgram->setUniformValue("env", GLint(1));
+        m_environmentProgram->setUniformValue("noise", GLint(2));
         m_box->draw();
-        m_environmentProgram->unbind();
+        m_environmentProgram->release();
         m_environment->unbind();
     }
 
-    glLoadMatrixf(view.bits());
+    loadMatrix(view);
 
     glEnable(GL_CULL_FACE);
@@ -694,7 +719,7 @@
 
         glPushMatrix();
-        gfx::Matrix4x4f m;
-        m_trackBalls[1].rotation().matrix(m);
-        glMultMatrixf(m.bits());
+        QMatrix4x4 m;
+        m.rotate(m_trackBalls[1].rotation());
+        multMatrix(m);
 
         glRotatef(360.0f * i / m_programs.size(), 0.0f, 0.0f, 1.0f);
@@ -709,11 +734,11 @@
         }
         m_programs[i]->bind();
-        m_programs[i]->setInt("tex", 0);
-        m_programs[i]->setInt("env", 1);
-        m_programs[i]->setInt("noise", 2);
-        m_programs[i]->setMatrix("view", view);
-        m_programs[i]->setMatrix("invView", invView);
+        m_programs[i]->setUniformValue("tex", GLint(0));
+        m_programs[i]->setUniformValue("env", GLint(1));
+        m_programs[i]->setUniformValue("noise", GLint(2));
+        m_programs[i]->setUniformValue("view", view);
+        m_programs[i]->setUniformValue("invView", invView);
         m_box->draw();
-        m_programs[i]->unbind();
+        m_programs[i]->release();
 
         if (glActiveTexture) {
@@ -727,7 +752,7 @@
 
     if (-1 != excludeBox) {
-        gfx::Matrix4x4f m;
-        m_trackBalls[0].rotation().matrix(m);
-        glMultMatrixf(m.bits());
+        QMatrix4x4 m;
+        m.rotate(m_trackBalls[0].rotation());
+        multMatrix(m);
 
         if (glActiveTexture) {
@@ -739,11 +764,11 @@
 
         m_programs[m_currentShader]->bind();
-        m_programs[m_currentShader]->setInt("tex", 0);
-        m_programs[m_currentShader]->setInt("env", 1);
-        m_programs[m_currentShader]->setInt("noise", 2);
-        m_programs[m_currentShader]->setMatrix("view", view);
-        m_programs[m_currentShader]->setMatrix("invView", invView);
+        m_programs[m_currentShader]->setUniformValue("tex", GLint(0));
+        m_programs[m_currentShader]->setUniformValue("env", GLint(1));
+        m_programs[m_currentShader]->setUniformValue("noise", GLint(2));
+        m_programs[m_currentShader]->setUniformValue("view", view);
+        m_programs[m_currentShader]->setUniformValue("invView", invView);
         m_box->draw();
-        m_programs[m_currentShader]->unbind();
+        m_programs[m_currentShader]->release();
 
         if (glActiveTexture) {
@@ -830,15 +855,15 @@
     const int N = (m_updateAllCubemaps ? 1 : 3);
 
-    gfx::Matrix4x4f mat;
+    QMatrix4x4 mat;
     GLRenderTargetCube::getProjectionMatrix(mat, 0.1f, 100.0f);
 
     glMatrixMode(GL_PROJECTION);
     glPushMatrix();
-    glLoadMatrixf(mat.bits());
+    loadMatrix(mat);
 
     glMatrixMode(GL_MODELVIEW);
     glPushMatrix();
 
-    gfx::Vector3f center;
+    QVector3D center;
 
     for (int i = m_frame % N; i < m_cubemaps.size(); i += N) {
@@ -847,5 +872,6 @@
 
         float angle = 2.0f * PI * i / m_cubemaps.size();
-        center = m_trackBalls[1].rotation().transform(gfx::Vector3f::vector(cos(angle), sin(angle), 0));
+
+        center = m_trackBalls[1].rotation().rotatedVector(QVector3D(cos(angle), sin(angle), 0.0f));
 
         for (int face = 0; face < 6; ++face) {
@@ -853,6 +879,6 @@
 
             GLRenderTargetCube::getViewMatrix(mat, face);
-            gfx::Vector4f v = gfx::Vector4f::vector(-center[0], -center[1], -center[2], 1.0);
-            mat[3] = v * mat;
+            QVector4D v = QVector4D(-center.x(), -center.y(), -center.z(), 1.0);
+            mat.setColumn(3, mat * v);
 
             glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
@@ -886,4 +912,5 @@
     float height = float(painter->device()->height());
 
+    painter->beginNativePainting();
     setStates();
 
@@ -898,14 +925,13 @@
     glMatrixMode(GL_MODELVIEW);
 
-    //gfx::Matrix4x4f view = gfx::Matrix4x4f::identity();
-    //view(3, 2) -= 2.0f * exp(m_distExp / 1200.0f);
-
-    gfx::Matrix4x4f view;
-    m_trackBalls[2].rotation().matrix(view);
-    view(3, 2) -= 2.0f * exp(m_distExp / 1200.0f);
+    QMatrix4x4 view;
+    view.rotate(m_trackBalls[2].rotation());
+    view(2, 3) -= 2.0f * exp(m_distExp / 1200.0f);
     renderBoxes(view);
 
     defaultStates();
     ++m_frame;
+
+    painter->endNativePainting();
 }
 
@@ -937,8 +963,8 @@
 
     if (event->buttons() & Qt::MidButton) {
-        m_trackBalls[2].move(pixelPosToViewPos(event->scenePos()), gfx::Quaternionf::identity());
+        m_trackBalls[2].move(pixelPosToViewPos(event->scenePos()), QQuaternion());
         event->accept();
     } else {
-        m_trackBalls[2].release(pixelPosToViewPos(event->scenePos()), gfx::Quaternionf::identity());
+        m_trackBalls[2].release(pixelPosToViewPos(event->scenePos()), QQuaternion());
     }
 }
@@ -961,5 +987,5 @@
 
     if (event->buttons() & Qt::MidButton) {
-        m_trackBalls[2].push(pixelPosToViewPos(event->scenePos()), gfx::Quaternionf::identity());
+        m_trackBalls[2].push(pixelPosToViewPos(event->scenePos()), QQuaternion());
         event->accept();
     }
@@ -983,5 +1009,5 @@
 
     if (event->button() == Qt::MidButton) {
-        m_trackBalls[2].release(pixelPosToViewPos(event->scenePos()), gfx::Quaternionf::identity());
+        m_trackBalls[2].release(pixelPosToViewPos(event->scenePos()), QQuaternion());
         event->accept();
     }
@@ -1022,8 +1048,8 @@
 {
     // set the color in all programs
-    foreach (GLProgram *program, m_programs) {
+    foreach (QGLShaderProgram *program, m_programs) {
         program->bind();
-        program->setColor(name, color);
-        program->unbind();
+        program->setUniformValue(program->uniformLocation(name), QColor(color));
+        program->release();
     }
 }
@@ -1032,8 +1058,8 @@
 {
     // set the color in all programs
-    foreach (GLProgram *program, m_programs) {
+    foreach (QGLShaderProgram *program, m_programs) {
         program->bind();
-        program->setFloat(name, value);
-        program->unbind();
+        program->setUniformValue(program->uniformLocation(name), value);
+        program->release();
     }
 }
Index: trunk/demos/boxes/scene.h
===================================================================
--- trunk/demos/boxes/scene.h	(revision 521)
+++ trunk/demos/boxes/scene.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -51,11 +51,13 @@
 #include "roundedbox.h"
 #include "gltrianglemesh.h"
-#include "vector.h"
 #include "trackball.h"
 #include "glbuffers.h"
-#include "glshaders.h"
 #include "qtbox.h"
 
 #define PI 3.14159265358979
+
+QT_BEGIN_NAMESPACE
+class QMatrix4x4;
+QT_END_NAMESPACE
 
 class ParameterEdit : public QWidget
@@ -107,4 +109,6 @@
 class GraphicsWidget : public QGraphicsProxyWidget
 {
+public:
+    GraphicsWidget() : QGraphicsProxyWidget(0, Qt::Window) {}
 protected:
     virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value);
@@ -196,5 +200,5 @@
     void newItem(ItemDialog::ItemType type);
 protected:
-    void renderBoxes(const gfx::Matrix4x4f &view, int excludeBox = -2);
+    void renderBoxes(const QMatrix4x4 &view, int excludeBox = -2);
     void setStates();
     void setLights();
@@ -232,12 +236,10 @@
     GLRenderTargetCube *m_mainCubemap;
     QVector<GLRenderTargetCube *> m_cubemaps;
-    QVector<GLProgram *> m_programs;
-    GLVertexShader *m_vertexShader;
-    QVector<GLFragmentShader *> m_fragmentShaders;
-    GLFragmentShader *m_environmentShader;
-    GLProgram *m_environmentProgram;
-};
-
-
+    QVector<QGLShaderProgram *> m_programs;
+    QGLShader *m_vertexShader;
+    QVector<QGLShader *> m_fragmentShaders;
+    QGLShader *m_environmentShader;
+    QGLShaderProgram *m_environmentProgram;
+};
 
 #endif
Index: trunk/demos/boxes/trackball.cpp
===================================================================
--- trunk/demos/boxes/trackball.cpp	(revision 521)
+++ trunk/demos/boxes/trackball.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -41,4 +41,5 @@
 
 #include "trackball.h"
+#include "scene.h"
 
 //============================================================================//
@@ -52,10 +53,10 @@
     , m_mode(mode)
 {
-    m_axis = gfx::Vector3f::vector(0, 1, 0);
-    m_rotation = gfx::Quaternionf::quaternion(1.0f, 0.0f, 0.0f, 0.0f);
+    m_axis = QVector3D(0, 1, 0);
+    m_rotation = QQuaternion();
     m_lastTime = QTime::currentTime();
 }
 
-TrackBall::TrackBall(float angularVelocity, const gfx::Vector3f& axis, TrackMode mode)
+TrackBall::TrackBall(float angularVelocity, const QVector3D& axis, TrackMode mode)
     : m_axis(axis)
     , m_angularVelocity(angularVelocity)
@@ -64,9 +65,9 @@
     , m_mode(mode)
 {
-    m_rotation = gfx::Quaternionf::quaternion(1.0f, 0.0f, 0.0f, 0.0f);
+    m_rotation = QQuaternion();
     m_lastTime = QTime::currentTime();
 }
 
-void TrackBall::push(const QPointF& p, const gfx::Quaternionf &)
+void TrackBall::push(const QPointF& p, const QQuaternion &)
 {
     m_rotation = rotation();
@@ -77,5 +78,5 @@
 }
 
-void TrackBall::move(const QPointF& p, const gfx::Quaternionf &transformation)
+void TrackBall::move(const QPointF& p, const QQuaternion &transformation)
 {
     if (!m_pressed)
@@ -91,36 +92,37 @@
         {
             QLineF delta(m_lastPos, p);
-            m_angularVelocity = delta.length() / msecs;
-            m_axis = gfx::Vector3f::vector(delta.dy(), -delta.dx(), 0.0f).normalized();
-            m_axis = transformation.transform(m_axis);
-            m_rotation *= gfx::Quaternionf::rotation(delta.length(), m_axis);
+            m_angularVelocity = 180*delta.length() / (PI*msecs);
+            m_axis = QVector3D(-delta.dy(), delta.dx(), 0.0f).normalized();
+            m_axis = transformation.rotatedVector(m_axis);
+            m_rotation = QQuaternion::fromAxisAndAngle(m_axis, 180 / PI * delta.length()) * m_rotation;
         }
         break;
     case Sphere:
         {
-            gfx::Vector3f lastPos3D = gfx::Vector3f::vector(m_lastPos.x(), m_lastPos.y(), 0);
-            float sqrZ = 1 - lastPos3D.sqrNorm();
+            QVector3D lastPos3D = QVector3D(m_lastPos.x(), m_lastPos.y(), 0.0f);
+            float sqrZ = 1 - QVector3D::dotProduct(lastPos3D, lastPos3D);
             if (sqrZ > 0)
-                lastPos3D[2] = sqrt(sqrZ);
+                lastPos3D.setZ(sqrt(sqrZ));
             else
                 lastPos3D.normalize();
 
-            gfx::Vector3f currentPos3D = gfx::Vector3f::vector(p.x(), p.y(), 0);
-            sqrZ = 1 - currentPos3D.sqrNorm();
+            QVector3D currentPos3D = QVector3D(p.x(), p.y(), 0.0f);
+            sqrZ = 1 - QVector3D::dotProduct(currentPos3D, currentPos3D);
             if (sqrZ > 0)
-                currentPos3D[2] = sqrt(sqrZ);
+                currentPos3D.setZ(sqrt(sqrZ));
             else
                 currentPos3D.normalize();
 
-            m_axis = gfx::Vector3f::cross(currentPos3D, lastPos3D);
-            float angle = asin(sqrt(m_axis.sqrNorm()));
+            m_axis = QVector3D::crossProduct(lastPos3D, currentPos3D);
+            float angle = 180 / PI * asin(sqrt(QVector3D::dotProduct(m_axis, m_axis)));
 
             m_angularVelocity = angle / msecs;
             m_axis.normalize();
-            m_axis = transformation.transform(m_axis);
-            m_rotation *= gfx::Quaternionf::rotation(angle, m_axis);
+            m_axis = transformation.rotatedVector(m_axis);
+            m_rotation = QQuaternion::fromAxisAndAngle(m_axis, angle) * m_rotation;
         }
         break;
     }
+
 
     m_lastPos = p;
@@ -128,5 +130,5 @@
 }
 
-void TrackBall::release(const QPointF& p, const gfx::Quaternionf &transformation)
+void TrackBall::release(const QPointF& p, const QQuaternion &transformation)
 {
     // Calling move() caused the rotation to stop if the framerate was too low.
@@ -147,5 +149,5 @@
 }
 
-gfx::Quaternionf TrackBall::rotation() const
+QQuaternion TrackBall::rotation() const
 {
     if (m_paused || m_pressed)
@@ -154,5 +156,5 @@
     QTime currentTime = QTime::currentTime();
     float angle = m_angularVelocity * m_lastTime.msecsTo(currentTime);
-    return m_rotation * gfx::Quaternionf::rotation(angle, m_axis);
+    return QQuaternion::fromAxisAndAngle(m_axis, angle) * m_rotation;
 }
 
Index: trunk/demos/boxes/trackball.h
===================================================================
--- trunk/demos/boxes/trackball.h	(revision 521)
+++ trunk/demos/boxes/trackball.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -45,5 +45,6 @@
 #include <QtGui>
 
-#include "vector.h"
+#include <QtGui/qvector3d.h>
+#include <QtGui/qquaternion.h>
 
 class TrackBall
@@ -56,15 +57,15 @@
     };
     TrackBall(TrackMode mode = Sphere);
-    TrackBall(float angularVelocity, const gfx::Vector3f& axis, TrackMode mode = Sphere);
+    TrackBall(float angularVelocity, const QVector3D& axis, TrackMode mode = Sphere);
     // coordinates in [-1,1]x[-1,1]
-    void push(const QPointF& p, const gfx::Quaternionf &transformation);
-    void move(const QPointF& p, const gfx::Quaternionf &transformation);
-    void release(const QPointF& p, const gfx::Quaternionf &transformation);
+    void push(const QPointF& p, const QQuaternion &transformation);
+    void move(const QPointF& p, const QQuaternion &transformation);
+    void release(const QPointF& p, const QQuaternion &transformation);
     void start(); // starts clock
     void stop(); // stops clock
-    gfx::Quaternionf rotation() const;
+    QQuaternion rotation() const;
 private:
-    gfx::Quaternionf m_rotation;
-    gfx::Vector3f m_axis;
+    QQuaternion m_rotation;
+    QVector3D m_axis;
     float m_angularVelocity;
 
Index: trunk/demos/boxes/vector.h
===================================================================
--- trunk/demos/boxes/vector.h	(revision 521)
+++ 	(revision )
@@ -1,602 +1,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
-**
-** This file is part of the demonstration applications of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial Usage
-** Licensees holding valid Qt Commercial licenses may use this file in
-** accordance with the Qt Commercial License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Nokia.
-**
-** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef VECTOR_H
-#define VECTOR_H
-
-#include <cassert>
-#include <cmath>
-#include <iostream>
-
-namespace gfx
-{
-
-template<class T, int n>
-struct Vector
-{
-    // Keep the Vector struct a plain old data (POD) struct by avoiding constructors
-
-    static Vector vector(T x)
-    {
-        Vector result;
-        for (int i = 0; i < n; ++i)
-            result.v[i] = x;
-        return result;
-    }
-
-    // Use only for 2D vectors
-    static Vector vector(T x, T y)
-    {
-        assert(n == 2);
-        Vector result;
-        result.v[0] = x;
-        result.v[1] = y;
-        return result;
-    }
-
-    // Use only for 3D vectors
-    static Vector vector(T x, T y, T z)
-    {
-        assert(n == 3);
-        Vector result;
-        result.v[0] = x;
-        result.v[1] = y;
-        result.v[2] = z;
-        return result;
-    }
-
-    // Use only for 4D vectors
-    static Vector vector(T x, T y, T z, T w)
-    {
-        assert(n == 4);
-        Vector result;
-        result.v[0] = x;
-        result.v[1] = y;
-        result.v[2] = z;
-        result.v[3] = w;
-        return result;
-    }
-
-    // Pass 'n' arguments to this function.
-    static Vector vector(T *v)
-    {
-        Vector result;
-        for (int i = 0; i < n; ++i)
-            result.v[i] = v[i];
-        return result;
-    }
-
-    T &operator [] (int i) {return v[i];}
-    T operator [] (int i) const {return v[i];}
-
-#define VECTOR_BINARY_OP(op, arg, rhs)      \
-    Vector operator op (arg) const          \
-    {                                       \
-        Vector result;                      \
-        for (int i = 0; i < n; ++i)         \
-            result.v[i] = v[i] op rhs;      \
-        return result;                      \
-    }
-
-    VECTOR_BINARY_OP(+, const Vector &u, u.v[i])
-    VECTOR_BINARY_OP(-, const Vector &u, u.v[i])
-    VECTOR_BINARY_OP(*, const Vector &u, u.v[i])
-    VECTOR_BINARY_OP(/, const Vector &u, u.v[i])
-    VECTOR_BINARY_OP(+, T s, s)
-    VECTOR_BINARY_OP(-, T s, s)
-    VECTOR_BINARY_OP(*, T s, s)
-    VECTOR_BINARY_OP(/, T s, s)
-#undef VECTOR_BINARY_OP
-
-    Vector operator - () const
-    {
-        Vector result;
-        for (int i = 0; i < n; ++i)
-            result.v[i] = -v[i];
-        return result;
-    }
-
-#define VECTOR_ASSIGN_OP(op, arg, rhs)      \
-    Vector &operator op (arg)               \
-    {                                       \
-        for (int i = 0; i < n; ++i)         \
-            v[i] op rhs;                    \
-        return *this;                       \
-    }
-
-    VECTOR_ASSIGN_OP(+=, const Vector &u, u.v[i])
-    VECTOR_ASSIGN_OP(-=, const Vector &u, u.v[i])
-    VECTOR_ASSIGN_OP(=, T s, s)
-    VECTOR_ASSIGN_OP(*=, T s, s)
-    VECTOR_ASSIGN_OP(/=, T s, s)
-#undef VECTOR_ASSIGN_OP
-
-    static T dot(const Vector &u, const Vector &v)
-    {
-        T sum(0);
-        for (int i = 0; i < n; ++i)
-            sum += u.v[i] * v.v[i];
-        return sum;
-    }
-
-    static Vector cross(const Vector &u, const Vector &v)
-    {
-        assert(n == 3);
-        return vector(u.v[1] * v.v[2] - u.v[2] * v.v[1],
-                      u.v[2] * v.v[0] - u.v[0] * v.v[2],
-                      u.v[0] * v.v[1] - u.v[1] * v.v[0]);
-    }
-
-    T sqrNorm() const
-    {
-        return dot(*this, *this);
-    }
-
-    // requires floating point type T
-    void normalize()
-    {
-        T s = sqrNorm();
-        if (s != 0)
-            *this /= sqrt(s);
-    }
-
-    // requires floating point type T
-    Vector normalized() const
-    {
-        T s = sqrNorm();
-        if (s == 0)
-            return *this;
-        return *this / sqrt(s);
-    }
-
-    T *bits() {return v;}
-    const T *bits() const {return v;}
-
-    T v[n];
-};
-
-#define SCALAR_VECTOR_BINARY_OP(op)                     \
-template<class T, int n>                                \
-Vector<T, n> operator op (T s, const Vector<T, n>& u)   \
-{                                                       \
-    Vector<T, n> result;                                \
-    for (int i = 0; i < n; ++i)                         \
-        result[i] = s op u[i];                          \
-    return result;                                      \
-}
-
-SCALAR_VECTOR_BINARY_OP(+)
-SCALAR_VECTOR_BINARY_OP(-)
-SCALAR_VECTOR_BINARY_OP(*)
-SCALAR_VECTOR_BINARY_OP(/)
-#undef SCALAR_VECTOR_BINARY_OP
-
-template<class T, int n>
-std::ostream &operator << (std::ostream &os, const Vector<T, n> &v)
-{
-    assert(n > 0);
-    os << "[" << v[0];
-    for (int i = 1; i < n; ++i)
-        os << ", " << v[i];
-    os << "]";
-    return os;
-}
-
-typedef Vector<float, 2> Vector2f;
-typedef Vector<float, 3> Vector3f;
-typedef Vector<float, 4> Vector4f;
-
-template<class T, int rows, int cols>
-struct Matrix
-{
-    // Keep the Matrix struct a plain old data (POD) struct by avoiding constructors
-
-    static Matrix matrix(T x)
-    {
-        Matrix result;
-        for (int i = 0; i < rows; ++i) {
-            for (int j = 0; j < cols; ++j)
-                result.v[i][j] = x;
-        }
-        return result;
-    }
-
-    static Matrix matrix(T *m)
-    {
-        Matrix result;
-        for (int i = 0; i < rows; ++i) {
-            for (int j = 0; j < cols; ++j) {
-                result.v[i][j] = *m;
-                ++m;
-            }
-        }
-        return result;
-    }
-
-    T &operator () (int i, int j) {return v[i][j];}
-    T operator () (int i, int j) const {return v[i][j];}
-    Vector<T, cols> &operator [] (int i) {return v[i];}
-    const Vector<T, cols> &operator [] (int i) const {return v[i];}
-
-    // TODO: operators, methods
-
-    Vector<T, rows> operator * (const Vector<T, cols> &u) const
-    {
-        Vector<T, rows> result;
-        for (int i = 0; i < rows; ++i)
-            result[i] = Vector<T, cols>::dot(v[i], u);
-        return result;
-    }
-
-    template<int k>
-    Matrix<T, rows, k> operator * (const Matrix<T, cols, k> &m)
-    {
-        Matrix<T, rows, k> result;
-        for (int i = 0; i < rows; ++i)
-            result[i] = v[i] * m;
-        return result;
-    }
-
-    T* bits() {return reinterpret_cast<T *>(this);}
-    const T* bits() const {return reinterpret_cast<const T *>(this);}
-
-    // Simple Gauss elimination.
-    // TODO: Optimize and improve stability.
-    Matrix inverse(bool *ok = 0) const
-    {
-        assert(rows == cols);
-        Matrix rhs = identity();
-        Matrix lhs(*this);
-        T temp;
-        // Down
-        for (int i = 0; i < rows; ++i) {
-            // Pivoting
-            int pivot = i;
-            for (int j = i; j < rows; ++j) {
-                if (qAbs(lhs(j, i)) > lhs(pivot, i))
-                    pivot = j;
-            }
-			// TODO: fuzzy compare.
-            if (lhs(pivot, i) == T(0)) {
-                if (ok)
-                    *ok = false;
-                return rhs;
-            }
-            if (pivot != i) {
-                for (int j = i; j < cols; ++j) {
-                    temp = lhs(pivot, j);
-                    lhs(pivot, j) = lhs(i, j);
-                    lhs(i, j) = temp;
-                }
-                for (int j = 0; j < cols; ++j) {
-                    temp = rhs(pivot, j);
-                    rhs(pivot, j) = rhs(i, j);
-                    rhs(i, j) = temp;
-                }
-            }
-
-            // Normalize i-th row
-            rhs[i] /= lhs(i, i);
-            for (int j = cols - 1; j > i; --j)
-                lhs(i, j) /= lhs(i, i);
-
-			// Eliminate non-zeros in i-th column below the i-th row.
-            for (int j = i + 1; j < rows; ++j) {
-                rhs[j] -= lhs(j, i) * rhs[i];
-                for (int k = i + 1; k < cols; ++k)
-                    lhs(j, k) -= lhs(j, i) * lhs(i, k);
-            }
-        }
-        // Up
-        for (int i = rows - 1; i > 0; --i) {
-            for (int j = i - 1; j >= 0; --j)
-                rhs[j] -= lhs(j, i) * rhs[i];
-        }
-        if (ok)
-            *ok = true;
-        return rhs;
-    }
-
-    Matrix<T, cols, rows> transpose() const
-    {
-        Matrix<T, cols, rows> result;
-        for (int i = 0; i < rows; ++i) {
-            for (int j = 0; j < cols; ++j)
-                result.v[j][i] = v[i][j];
-        }
-        return result;
-    }
-
-    static Matrix identity()
-    {
-        Matrix result = matrix(T(0));
-        for (int i = 0; i < rows && i < cols; ++i)
-            result.v[i][i] = T(1);
-        return result;
-    }
-
-    Vector<T, cols> v[rows];
-};
-
-template<class T, int rows, int cols>
-Vector<T, cols> operator * (const Vector<T, rows> &u, const Matrix<T, rows, cols> &m)
-{
-    Vector<T, cols> result = Vector<T, cols>::vector(T(0));
-    for (int i = 0; i < rows; ++i)
-        result += m[i] * u[i];
-    return result;
-}
-
-template<class T, int rows, int cols>
-std::ostream &operator << (std::ostream &os, const Matrix<T, rows, cols> &m)
-{
-    assert(rows > 0);
-    os << "[" << m[0];
-    for (int i = 1; i < rows; ++i)
-        os << ", " << m[i];
-    os << "]";
-    return os;
-}
-
-
-typedef Matrix<float, 2, 2> Matrix2x2f;
-typedef Matrix<float, 3, 3> Matrix3x3f;
-typedef Matrix<float, 4, 4> Matrix4x4f;
-
-template<class T>
-struct Quaternion
-{
-    // Keep the Quaternion struct a plain old data (POD) struct by avoiding constructors
-
-    static Quaternion quaternion(T s, T x, T y, T z)
-    {
-        Quaternion result;
-        result.scalar = s;
-        result.vector[0] = x;
-        result.vector[1] = y;
-        result.vector[2] = z;
-        return result;
-    }
-
-    static Quaternion quaternion(T s, const Vector<T, 3> &v)
-    {
-        Quaternion result;
-        result.scalar = s;
-        result.vector = v;
-        return result;
-    }
-
-    static Quaternion identity()
-    {
-        return quaternion(T(1), T(0), T(0), T(0));
-    }
-
-    // assumes that all the elements are packed tightly
-    T& operator [] (int i) {return reinterpret_cast<T *>(this)[i];}
-    T operator [] (int i) const {return reinterpret_cast<const T *>(this)[i];}
-
-#define QUATERNION_BINARY_OP(op, arg, rhs)  \
-    Quaternion operator op (arg) const      \
-    {                                       \
-        Quaternion result;                  \
-        for (int i = 0; i < 4; ++i)         \
-            result[i] = (*this)[i] op rhs;  \
-        return result;                      \
-    }
-
-    QUATERNION_BINARY_OP(+, const Quaternion &q, q[i])
-    QUATERNION_BINARY_OP(-, const Quaternion &q, q[i])
-    QUATERNION_BINARY_OP(*, T s, s)
-    QUATERNION_BINARY_OP(/, T s, s)
-#undef QUATERNION_BINARY_OP
-
-    Quaternion operator - () const
-    {
-        return Quaternion(-scalar, -vector);
-    }
-
-    Quaternion operator * (const Quaternion &q) const
-    {
-        Quaternion result;
-        result.scalar = scalar * q.scalar - Vector<T, 3>::dot(vector, q.vector);
-        result.vector = scalar * q.vector + vector * q.scalar + Vector<T, 3>::cross(vector, q.vector);
-        return result;
-    }
-
-    Quaternion operator * (const Vector<T, 3> &v) const
-    {
-        Quaternion result;
-        result.scalar = -Vector<T, 3>::dot(vector, v);
-        result.vector = scalar * v + Vector<T, 3>::cross(vector, v);
-        return result;
-    }
-
-    friend Quaternion operator * (const Vector<T, 3> &v, const Quaternion &q)
-    {
-        Quaternion result;
-        result.scalar = -Vector<T, 3>::dot(v, q.vector);
-        result.vector = v * q.scalar + Vector<T, 3>::cross(v, q.vector);
-        return result;
-    }
-
-#define QUATERNION_ASSIGN_OP(op, arg, rhs)  \
-    Quaternion &operator op (arg)           \
-    {                                       \
-        for (int i = 0; i < 4; ++i)         \
-            (*this)[i] op rhs;              \
-        return *this;                       \
-    }
-
-    QUATERNION_ASSIGN_OP(+=, const Quaternion &q, q[i])
-    QUATERNION_ASSIGN_OP(-=, const Quaternion &q, q[i])
-    QUATERNION_ASSIGN_OP(=, T s, s)
-    QUATERNION_ASSIGN_OP(*=, T s, s)
-    QUATERNION_ASSIGN_OP(/=, T s, s)
-#undef QUATERNION_ASSIGN_OP
-
-    Quaternion& operator *= (const Quaternion &q)
-    {
-        Quaternion result;
-        result.scalar = scalar * q.scalar - Vector<T, 3>::dot(vector, q.vector);
-        result.vector = scalar * q.vector + vector * q.scalar + Vector<T, 3>::cross(vector, q.vector);
-        return (*this = result);
-    }
-
-    Quaternion& operator *= (const Vector<T, 3> &v)
-    {
-        Quaternion result;
-        result.scalar = -Vector<T, 3>::dot(vector, v);
-        result.vector = scalar * v + Vector<T, 3>::cross(vector, v);
-        return (*this = result);
-    }
-
-    Quaternion conjugate() const
-    {
-        return quaternion(scalar, -vector);
-    }
-
-    T sqrNorm() const
-    {
-        return scalar * scalar + vector.sqrNorm();
-    }
-
-    Quaternion inverse() const
-    {
-        return conjugate() / sqrNorm();
-    }
-
-    // requires floating point type T
-    Quaternion normalized() const
-    {
-        T s = sqrNorm();
-        if (s == 0)
-            return *this;
-        return *this / sqrt(s);
-    }
-
-    void matrix(Matrix<T, 3, 3>& m) const
-    {
-        T bb = vector[0] * vector[0];
-        T cc = vector[1] * vector[1];
-        T dd = vector[2] * vector[2];
-        T diag = scalar * scalar - bb - cc - dd;
-        T ab = scalar * vector[0];
-        T ac = scalar * vector[1];
-        T ad = scalar * vector[2];
-        T bc = vector[0] * vector[1];
-        T cd = vector[1] * vector[2];
-        T bd = vector[2] * vector[0];
-        m(0, 0) = diag + 2 * bb;
-        m(0, 1) = 2 * (bc - ad);
-        m(0, 2) = 2 * (ac + bd);
-        m(1, 0) = 2 * (ad + bc);
-        m(1, 1) = diag + 2 * cc;
-        m(1, 2) = 2 * (cd - ab);
-        m(2, 0) = 2 * (bd - ac);
-        m(2, 1) = 2 * (ab + cd);
-        m(2, 2) = diag + 2 * dd;
-    }
-
-    void matrix(Matrix<T, 4, 4>& m) const
-    {
-        T bb = vector[0] * vector[0];
-        T cc = vector[1] * vector[1];
-        T dd = vector[2] * vector[2];
-        T diag = scalar * scalar - bb - cc - dd;
-        T ab = scalar * vector[0];
-        T ac = scalar * vector[1];
-        T ad = scalar * vector[2];
-        T bc = vector[0] * vector[1];
-        T cd = vector[1] * vector[2];
-        T bd = vector[2] * vector[0];
-        m(0, 0) = diag + 2 * bb;
-        m(0, 1) = 2 * (bc - ad);
-        m(0, 2) = 2 * (ac + bd);
-        m(0, 3) = 0;
-        m(1, 0) = 2 * (ad + bc);
-        m(1, 1) = diag + 2 * cc;
-        m(1, 2) = 2 * (cd - ab);
-        m(1, 3) = 0;
-        m(2, 0) = 2 * (bd - ac);
-        m(2, 1) = 2 * (ab + cd);
-        m(2, 2) = diag + 2 * dd;
-        m(2, 3) = 0;
-        m(3, 0) = 0;
-        m(3, 1) = 0;
-        m(3, 2) = 0;
-        m(3, 3) = 1;
-    }
-
-    // assumes that 'this' is normalized
-    Vector<T, 3> transform(const Vector<T, 3> &v) const
-    {
-        Matrix<T, 3, 3> m;
-        matrix(m);
-        return v * m;
-    }
-
-    // assumes that all the elements are packed tightly
-    T* bits() {return reinterpret_cast<T *>(this);}
-    const T* bits() const {return reinterpret_cast<const T *>(this);}
-
-    // requires floating point type T
-    static Quaternion rotation(T angle, const Vector<T, 3> &unitAxis)
-    {
-        T s = sin(angle / 2);
-        T c = cos(angle / 2);
-        return quaternion(c, unitAxis * s);
-    }
-
-    T scalar;
-    Vector<T, 3> vector;
-};
-
-template<class T>
-Quaternion<T> operator * (T s, const Quaternion<T>& q)
-{
-    return Quaternion<T>::quaternion(s * q.scalar, s * q.vector);
-}
-
-typedef Quaternion<float> Quaternionf;
-
-} // end namespace gfx
-
-#endif
Index: trunk/demos/boxes/wood.fsh
===================================================================
--- trunk/demos/boxes/wood.fsh	(revision 521)
+++ trunk/demos/boxes/wood.fsh	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/autosaver.cpp
===================================================================
--- trunk/demos/browser/autosaver.cpp	(revision 521)
+++ trunk/demos/browser/autosaver.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/autosaver.h
===================================================================
--- trunk/demos/browser/autosaver.h	(revision 521)
+++ trunk/demos/browser/autosaver.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/bookmarks.cpp
===================================================================
--- trunk/demos/browser/bookmarks.cpp	(revision 521)
+++ trunk/demos/browser/bookmarks.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -73,9 +73,9 @@
     , m_bookmarkModel(0)
 {
-    connect(this, SIGNAL(entryAdded(BookmarkNode *)),
+    connect(this, SIGNAL(entryAdded(BookmarkNode*)),
             m_saveTimer, SLOT(changeOccurred()));
-    connect(this, SIGNAL(entryRemoved(BookmarkNode *, int, BookmarkNode *)),
+    connect(this, SIGNAL(entryRemoved(BookmarkNode*,int,BookmarkNode*)),
             m_saveTimer, SLOT(changeOccurred()));
-    connect(this, SIGNAL(entryChanged(BookmarkNode *)),
+    connect(this, SIGNAL(entryChanged(BookmarkNode*)),
             m_saveTimer, SLOT(changeOccurred()));
 }
@@ -363,10 +363,10 @@
     , m_bookmarksManager(bookmarkManager)
 {
-    connect(bookmarkManager, SIGNAL(entryAdded(BookmarkNode *)),
-            this, SLOT(entryAdded(BookmarkNode *)));
-    connect(bookmarkManager, SIGNAL(entryRemoved(BookmarkNode *, int, BookmarkNode *)),
-            this, SLOT(entryRemoved(BookmarkNode *, int, BookmarkNode *)));
-    connect(bookmarkManager, SIGNAL(entryChanged(BookmarkNode *)),
-            this, SLOT(entryChanged(BookmarkNode *)));
+    connect(bookmarkManager, SIGNAL(entryAdded(BookmarkNode*)),
+            this, SLOT(entryAdded(BookmarkNode*)));
+    connect(bookmarkManager, SIGNAL(entryRemoved(BookmarkNode*,int,BookmarkNode*)),
+            this, SLOT(entryRemoved(BookmarkNode*,int,BookmarkNode*)));
+    connect(bookmarkManager, SIGNAL(entryChanged(BookmarkNode*)),
+            this, SLOT(entryChanged(BookmarkNode*)));
 }
 
@@ -734,6 +734,6 @@
     , m_bookmarksManager(0)
 {
-    connect(this, SIGNAL(activated(const QModelIndex &)),
-            this, SLOT(activated(const QModelIndex &)));
+    connect(this, SIGNAL(activated(QModelIndex)),
+            this, SLOT(activated(QModelIndex)));
     setMaxRows(-1);
     setHoverRole(BookmarksModel::UrlStringRole);
@@ -793,9 +793,9 @@
     tree->header()->resizeSection(0, header);
     tree->header()->setStretchLastSection(true);
-    connect(tree, SIGNAL(activated(const QModelIndex&)),
+    connect(tree, SIGNAL(activated(QModelIndex)),
             this, SLOT(open()));
     tree->setContextMenuPolicy(Qt::CustomContextMenu);
-    connect(tree, SIGNAL(customContextMenuRequested(const QPoint &)),
-            this, SLOT(customContextMenuRequested(const QPoint &)));
+    connect(tree, SIGNAL(customContextMenuRequested(QPoint)),
+            this, SLOT(customContextMenuRequested(QPoint)));
     connect(addFolderButton, SIGNAL(clicked()),
             this, SLOT(newFolder()));
@@ -885,7 +885,7 @@
     setRootIndex(model->index(0, 0));
     connect(m_bookmarksModel, SIGNAL(modelReset()), this, SLOT(build()));
-    connect(m_bookmarksModel, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(build()));
-    connect(m_bookmarksModel, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), this, SLOT(build()));
-    connect(m_bookmarksModel, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(build()));
+    connect(m_bookmarksModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(build()));
+    connect(m_bookmarksModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(build()));
+    connect(m_bookmarksModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(build()));
     setAcceptDrops(true);
 }
@@ -957,6 +957,6 @@
             button->setText(idx.data().toString());
             ModelMenu *menu = new ModelMenu(this);
-            connect(menu, SIGNAL(activated(const QModelIndex &)),
-                    this, SLOT(activated(const QModelIndex &)));
+            connect(menu, SIGNAL(activated(QModelIndex)),
+                    this, SLOT(activated(QModelIndex)));
             menu->setModel(m_bookmarksModel);
             menu->setRootIndex(idx);
Index: trunk/demos/browser/bookmarks.h
===================================================================
--- trunk/demos/browser/bookmarks.h	(revision 521)
+++ trunk/demos/browser/bookmarks.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/browser.pro
===================================================================
--- trunk/demos/browser/browser.pro	(revision 521)
+++ trunk/demos/browser/browser.pro	(revision 561)
@@ -4,6 +4,8 @@
 
 CONFIG += qt warn_on
-contains(QT_BUILD_PARTS, tools): CONFIG += uitools
+contains(QT_BUILD_PARTS, tools):!embedded: CONFIG += uitools
 else: DEFINES += QT_NO_UITOOLS
+
+release:DEFINES+=QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT
 
 FORMS += \
@@ -79,4 +81,14 @@
     QMAKE_INFO_PLIST = Info_mac.plist
     TARGET = Browser
+
+    # No 64-bit Flash on Mac, so build the browser 32-bit
+    contains(QT_CONFIG, x86) {
+        CONFIG -= x86_64
+        CONFIG += x86
+    }
+    contains(QT_CONFIG, ppc) {
+        CONFIG -= ppc64
+        CONFIG += ppc
+    }
 }
 
@@ -87,5 +99,10 @@
 # install
 target.path = $$[QT_INSTALL_DEMOS]/browser
-sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.plist *.icns *.ico *.rc *.pro *.html *.doc images htmls
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.plist *.icns *.ico *.rc *.pro *.html *.doc images htmls data
 sources.path = $$[QT_INSTALL_DEMOS]/browser
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000CF70
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+}
Index: trunk/demos/browser/browserapplication.cpp
===================================================================
--- trunk/demos/browser/browserapplication.cpp	(revision 521)
+++ trunk/demos/browser/browserapplication.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -80,5 +80,5 @@
     , m_localServer(0)
 {
-    QCoreApplication::setOrganizationName(QLatin1String("Trolltech"));
+    QCoreApplication::setOrganizationName(QLatin1String("Qt"));
     QCoreApplication::setApplicationName(QLatin1String("demobrowser"));
     QCoreApplication::setApplicationVersion(QLatin1String("0.1"));
@@ -206,4 +206,5 @@
         directory = QDir::homePath() + QLatin1String("/.") + QCoreApplication::applicationName();
     QWebSettings::setIconDatabasePath(directory);
+    QWebSettings::setOfflineStoragePath(directory);
 
     setWindowIcon(QIcon(QLatin1String(":browser.svg")));
@@ -247,4 +248,6 @@
     QUrl url = settings.value(QLatin1String("userStyleSheet")).toUrl();
     defaultSettings->setUserStyleSheetUrl(url);
+
+    defaultSettings->setAttribute(QWebSettings::DnsPrefetchEnabled, true);
 
     settings.endGroup();
Index: trunk/demos/browser/browserapplication.h
===================================================================
--- trunk/demos/browser/browserapplication.h	(revision 521)
+++ trunk/demos/browser/browserapplication.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/browsermainwindow.cpp
===================================================================
--- trunk/demos/browser/browsermainwindow.cpp	(revision 521)
+++ trunk/demos/browser/browsermainwindow.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -82,4 +82,5 @@
     , m_reload(0)
 {
+    setToolButtonStyle(Qt::ToolButtonFollowStyle);
     setAttribute(Qt::WA_DeleteOnClose, true);
     statusBar()->setSizeGripEnabled(true);
@@ -90,6 +91,6 @@
     BookmarksModel *boomarksModel = BrowserApplication::bookmarksManager()->bookmarksModel();
     m_bookmarksToolbar = new BookmarksToolBar(boomarksModel, this);
-    connect(m_bookmarksToolbar, SIGNAL(openUrl(const QUrl&)),
-            m_tabWidget, SLOT(loadUrlInCurrentTab(const QUrl&)));
+    connect(m_bookmarksToolbar, SIGNAL(openUrl(QUrl)),
+            m_tabWidget, SLOT(loadUrlInCurrentTab(QUrl)));
     connect(m_bookmarksToolbar->toggleViewAction(), SIGNAL(toggled(bool)),
             this, SLOT(updateBookmarksToolbarActionText(bool)));
@@ -109,20 +110,20 @@
 	setCentralWidget(centralWidget);
 
-    connect(m_tabWidget, SIGNAL(loadPage(const QString &)),
-        this, SLOT(loadPage(const QString &)));
-    connect(m_tabWidget, SIGNAL(setCurrentTitle(const QString &)),
-        this, SLOT(slotUpdateWindowTitle(const QString &)));
-    connect(m_tabWidget, SIGNAL(showStatusBarMessage(const QString&)),
-            statusBar(), SLOT(showMessage(const QString&)));
-    connect(m_tabWidget, SIGNAL(linkHovered(const QString&)),
-            statusBar(), SLOT(showMessage(const QString&)));
+    connect(m_tabWidget, SIGNAL(loadPage(QString)),
+        this, SLOT(loadPage(QString)));
+    connect(m_tabWidget, SIGNAL(setCurrentTitle(QString)),
+        this, SLOT(slotUpdateWindowTitle(QString)));
+    connect(m_tabWidget, SIGNAL(showStatusBarMessage(QString)),
+            statusBar(), SLOT(showMessage(QString)));
+    connect(m_tabWidget, SIGNAL(linkHovered(QString)),
+            statusBar(), SLOT(showMessage(QString)));
     connect(m_tabWidget, SIGNAL(loadProgress(int)),
             this, SLOT(slotLoadProgress(int)));
     connect(m_tabWidget, SIGNAL(tabsChanged()),
             m_autoSaver, SLOT(changeOccurred()));
-    connect(m_tabWidget, SIGNAL(geometryChangeRequested(const QRect &)),
-            this, SLOT(geometryChangeRequested(const QRect &)));
-    connect(m_tabWidget, SIGNAL(printRequested(QWebFrame *)),
-            this, SLOT(printRequested(QWebFrame *)));
+    connect(m_tabWidget, SIGNAL(geometryChangeRequested(QRect)),
+            this, SLOT(geometryChangeRequested(QRect)));
+    connect(m_tabWidget, SIGNAL(printRequested(QWebFrame*)),
+            this, SLOT(printRequested(QWebFrame*)));
     connect(m_tabWidget, SIGNAL(menuBarVisibilityChangeRequested(bool)),
             menuBar(), SLOT(setVisible(bool)));
@@ -369,8 +370,8 @@
     // History
     HistoryMenu *historyMenu = new HistoryMenu(this);
-    connect(historyMenu, SIGNAL(openUrl(const QUrl&)),
-            m_tabWidget, SLOT(loadUrlInCurrentTab(const QUrl&)));
-    connect(historyMenu, SIGNAL(hovered(const QString&)), this,
-            SLOT(slotUpdateStatusbar(const QString&)));
+    connect(historyMenu, SIGNAL(openUrl(QUrl)),
+            m_tabWidget, SLOT(loadUrlInCurrentTab(QUrl)));
+    connect(historyMenu, SIGNAL(hovered(QString)), this,
+            SLOT(slotUpdateStatusbar(QString)));
     historyMenu->setTitle(tr("Hi&story"));
     menuBar()->addMenu(historyMenu);
@@ -404,8 +405,8 @@
     // Bookmarks
     BookmarksMenu *bookmarksMenu = new BookmarksMenu(this);
-    connect(bookmarksMenu, SIGNAL(openUrl(const QUrl&)),
-            m_tabWidget, SLOT(loadUrlInCurrentTab(const QUrl&)));
-    connect(bookmarksMenu, SIGNAL(hovered(const QString&)),
-            this, SLOT(slotUpdateStatusbar(const QString&)));
+    connect(bookmarksMenu, SIGNAL(openUrl(QUrl)),
+            m_tabWidget, SLOT(loadUrlInCurrentTab(QUrl)));
+    connect(bookmarksMenu, SIGNAL(hovered(QString)),
+            this, SLOT(slotUpdateStatusbar(QString)));
     bookmarksMenu->setTitle(tr("&Bookmarks"));
     menuBar()->addMenu(bookmarksMenu);
@@ -455,6 +456,6 @@
     connect(m_historyBackMenu, SIGNAL(aboutToShow()),
             this, SLOT(slotAboutToShowBackMenu()));
-    connect(m_historyBackMenu, SIGNAL(triggered(QAction *)),
-            this, SLOT(slotOpenActionUrl(QAction *)));
+    connect(m_historyBackMenu, SIGNAL(triggered(QAction*)),
+            this, SLOT(slotOpenActionUrl(QAction*)));
     m_navigationBar->addAction(m_historyBack);
 
@@ -463,6 +464,6 @@
     connect(m_historyForwardMenu, SIGNAL(aboutToShow()),
             this, SLOT(slotAboutToShowForwardMenu()));
-    connect(m_historyForwardMenu, SIGNAL(triggered(QAction *)),
-            this, SLOT(slotOpenActionUrl(QAction *)));
+    connect(m_historyForwardMenu, SIGNAL(triggered(QAction*)),
+            this, SLOT(slotOpenActionUrl(QAction*)));
     m_historyForward->setMenu(m_historyForwardMenu);
     m_navigationBar->addAction(m_historyForward);
@@ -478,5 +479,5 @@
     m_toolbarSearch = new ToolbarSearch(m_navigationBar);
     m_navigationBar->addWidget(m_toolbarSearch);
-    connect(m_toolbarSearch, SIGNAL(search(const QUrl&)), SLOT(loadUrl(const QUrl&)));
+    connect(m_toolbarSearch, SIGNAL(search(QUrl)), SLOT(loadUrl(QUrl)));
 
     m_chaseWidget = new ChaseWidget(this);
@@ -487,6 +488,6 @@
 {
     BookmarksDialog *dialog = new BookmarksDialog(this);
-    connect(dialog, SIGNAL(openUrl(const QUrl&)),
-            m_tabWidget, SLOT(loadUrlInCurrentTab(const QUrl&)));
+    connect(dialog, SIGNAL(openUrl(QUrl)),
+            m_tabWidget, SLOT(loadUrlInCurrentTab(QUrl)));
     dialog->show();
 }
@@ -550,45 +551,4 @@
     }
     m_autoSaver->changeOccurred();
-}
-
-QUrl BrowserMainWindow::guessUrlFromString(const QString &string)
-{
-    QString urlStr = string.trimmed();
-    QRegExp test(QLatin1String("^[a-zA-Z]+\\:.*"));
-
-    // Check if it looks like a qualified URL. Try parsing it and see.
-    bool hasSchema = test.exactMatch(urlStr);
-    if (hasSchema) {
-        QUrl url = QUrl::fromEncoded(urlStr.toUtf8(), QUrl::TolerantMode);
-        if (url.isValid())
-            return url;
-    }
-
-    // Might be a file.
-    if (QFile::exists(urlStr)) {
-        QFileInfo info(urlStr);
-        return QUrl::fromLocalFile(info.absoluteFilePath());
-    }
-
-    // Might be a shorturl - try to detect the schema.
-    if (!hasSchema) {
-        int dotIndex = urlStr.indexOf(QLatin1Char('.'));
-        if (dotIndex != -1) {
-            QString prefix = urlStr.left(dotIndex).toLower();
-            QByteArray schema = (prefix == QLatin1String("ftp")) ? prefix.toLatin1() : "http";
-            QUrl url =
-                QUrl::fromEncoded(schema + "://" + urlStr.toUtf8(), QUrl::TolerantMode);
-            if (url.isValid())
-                return url;
-        }
-    }
-
-    // Fall back to QUrl's own tolerant parser.
-    QUrl url = QUrl::fromEncoded(string.toUtf8(), QUrl::TolerantMode);
-
-    // finally for cases where the user just types in a hostname add http
-    if (url.scheme().isEmpty())
-        url = QUrl::fromEncoded("http://" + string.toUtf8(), QUrl::TolerantMode);
-    return url;
 }
 
@@ -677,6 +637,6 @@
         return;
     QPrintPreviewDialog *dialog = new QPrintPreviewDialog(this);
-    connect(dialog, SIGNAL(paintRequested(QPrinter *)),
-            currentTab(), SLOT(print(QPrinter *)));
+    connect(dialog, SIGNAL(paintRequested(QPrinter*)),
+            currentTab(), SLOT(print(QPrinter*)));
     dialog->exec();
 #endif
@@ -740,5 +700,5 @@
         int ret = QMessageBox::warning(this, QString(),
                            tr("Are you sure you want to close the window?"
-                              "  There are %1 tab open").arg(m_tabWidget->count()),
+                              "  There are %1 tabs open").arg(m_tabWidget->count()),
                            QMessageBox::Yes | QMessageBox::No,
                            QMessageBox::No);
@@ -839,5 +799,5 @@
     QSettings settings;
     settings.beginGroup(QLatin1String("MainWindow"));
-    QString home = settings.value(QLatin1String("home"), QLatin1String("http://qtsoftware.com/")).toString();
+    QString home = settings.value(QLatin1String("home"), QLatin1String("http://qt.nokia.com/")).toString();
     loadPage(home);
 }
@@ -873,5 +833,5 @@
 void BrowserMainWindow::loadPage(const QString &page)
 {
-    QUrl url = guessUrlFromString(page);
+    QUrl url = QUrl::fromUserInput(page);
     loadUrl(url);
 }
Index: trunk/demos/browser/browsermainwindow.h
===================================================================
--- trunk/demos/browser/browsermainwindow.h	(revision 521)
+++ trunk/demos/browser/browsermainwindow.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -69,5 +69,4 @@
 
 public:
-    static QUrl guessUrlFromString(const QString &url);
     TabWidget *tabWidget() const;
     WebView *currentTab() const;
Index: trunk/demos/browser/chasewidget.cpp
===================================================================
--- trunk/demos/browser/chasewidget.cpp	(revision 521)
+++ trunk/demos/browser/chasewidget.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/chasewidget.h
===================================================================
--- trunk/demos/browser/chasewidget.h	(revision 521)
+++ trunk/demos/browser/chasewidget.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/cookiejar.cpp
===================================================================
--- trunk/demos/browser/cookiejar.cpp	(revision 521)
+++ trunk/demos/browser/cookiejar.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -669,6 +669,6 @@
     domainLineEdit->setCompleter(new QCompleter(cookieModel, domainLineEdit));
 
-    connect(domainLineEdit, SIGNAL(textChanged(const QString &)),
-            this, SLOT(textChanged(const QString &)));
+    connect(domainLineEdit, SIGNAL(textChanged(QString)),
+            this, SLOT(textChanged(QString)));
     connect(blockButton, SIGNAL(clicked()), this, SLOT(block()));
     connect(allowButton, SIGNAL(clicked()), this, SLOT(allow()));
Index: trunk/demos/browser/cookiejar.h
===================================================================
--- trunk/demos/browser/cookiejar.h	(revision 521)
+++ trunk/demos/browser/cookiejar.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/data/defaultbookmarks.xbel
===================================================================
--- trunk/demos/browser/data/defaultbookmarks.xbel	(revision 521)
+++ trunk/demos/browser/data/defaultbookmarks.xbel	(revision 561)
@@ -4,17 +4,17 @@
     <folder folded="yes">
         <title>Bookmarks Bar</title>
-        <bookmark href="http://qtsoftware.com/">
-            <title>Qt Software</title>
+        <bookmark href="http://qt.nokia.com/">
+            <title>Qt Home Page</title>
         </bookmark>
         <bookmark href="http://webkit.org/">
             <title>WebKit.org</title>
         </bookmark>
-        <bookmark href="http://doc.trolltech.com/">
+        <bookmark href="http://qt.nokia.com/doc/">
             <title>Qt Documentation</title>
         </bookmark>
-        <bookmark href="http://doc.trolltech.com/qq/">
+        <bookmark href="http://qt.nokia.com/doc/qq/">
             <title>Qt Quarterly</title>
         </bookmark>
-        <bookmark href="http://labs.trolltech.com/">
+        <bookmark href="http://labs.qt.nokia.com/">
             <title>Qt Labs</title>
         </bookmark>
@@ -31,4 +31,7 @@
             <title>xkcd</title>
         </bookmark>
+       <bookmark href="http://twitter.com/qtbynokia">
+            <title>Twitter</title>
+        </bookmark>
     </folder>
     <folder folded="yes">
Index: trunk/demos/browser/downloadmanager.cpp
===================================================================
--- trunk/demos/browser/downloadmanager.cpp	(revision 521)
+++ trunk/demos/browser/downloadmanager.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -95,6 +95,6 @@
     connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)),
             this, SLOT(error(QNetworkReply::NetworkError)));
-    connect(m_reply, SIGNAL(downloadProgress(qint64, qint64)),
-            this, SLOT(downloadProgress(qint64, qint64)));
+    connect(m_reply, SIGNAL(downloadProgress(qint64,qint64)),
+            this, SLOT(downloadProgress(qint64,qint64)));
     connect(m_reply, SIGNAL(metaDataChanged()),
             this, SLOT(metaDataChanged()));
Index: trunk/demos/browser/downloadmanager.h
===================================================================
--- trunk/demos/browser/downloadmanager.h	(revision 521)
+++ trunk/demos/browser/downloadmanager.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/edittableview.cpp
===================================================================
--- trunk/demos/browser/edittableview.cpp	(revision 521)
+++ trunk/demos/browser/edittableview.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/edittableview.h
===================================================================
--- trunk/demos/browser/edittableview.h	(revision 521)
+++ trunk/demos/browser/edittableview.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/edittreeview.cpp
===================================================================
--- trunk/demos/browser/edittreeview.cpp	(revision 521)
+++ trunk/demos/browser/edittreeview.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/edittreeview.h
===================================================================
--- trunk/demos/browser/edittreeview.h	(revision 521)
+++ trunk/demos/browser/edittreeview.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/history.cpp
===================================================================
--- trunk/demos/browser/history.cpp	(revision 521)
+++ trunk/demos/browser/history.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -78,7 +78,7 @@
     connect(&m_expiredTimer, SIGNAL(timeout()),
             this, SLOT(checkForExpired()));
-    connect(this, SIGNAL(entryAdded(const HistoryItem &)),
+    connect(this, SIGNAL(entryAdded(HistoryItem)),
             m_saveTimer, SLOT(changeOccurred()));
-    connect(this, SIGNAL(entryRemoved(const HistoryItem &)),
+    connect(this, SIGNAL(entryRemoved(HistoryItem)),
             m_saveTimer, SLOT(changeOccurred()));
     load();
@@ -370,8 +370,8 @@
     connect(m_history, SIGNAL(historyReset()),
             this, SLOT(historyReset()));
-    connect(m_history, SIGNAL(entryRemoved(const HistoryItem &)),
+    connect(m_history, SIGNAL(entryRemoved(HistoryItem)),
             this, SLOT(historyReset()));
 
-    connect(m_history, SIGNAL(entryAdded(const HistoryItem &)),
+    connect(m_history, SIGNAL(entryAdded(HistoryItem)),
             this, SLOT(entryAdded()));
     connect(m_history, SIGNAL(entryUpdated(int)),
@@ -596,6 +596,6 @@
     , m_history(0)
 {
-    connect(this, SIGNAL(activated(const QModelIndex &)),
-            this, SLOT(activated(const QModelIndex &)));
+    connect(this, SIGNAL(activated(QModelIndex)),
+            this, SLOT(activated(QModelIndex)));
     setHoverRole(HistoryModel::UrlStringRole);
 }
@@ -640,6 +640,6 @@
 {
     HistoryDialog *dialog = new HistoryDialog(this);
-    connect(dialog, SIGNAL(openUrl(const QUrl&)),
-            this, SIGNAL(openUrl(const QUrl&)));
+    connect(dialog, SIGNAL(openUrl(QUrl)),
+            this, SIGNAL(openUrl(QUrl)));
     dialog->show();
 }
@@ -688,9 +688,9 @@
     tree->header()->resizeSection(0, header);
     tree->header()->setStretchLastSection(true);
-    connect(tree, SIGNAL(activated(const QModelIndex&)),
+    connect(tree, SIGNAL(activated(QModelIndex)),
             this, SLOT(open()));
     tree->setContextMenuPolicy(Qt::CustomContextMenu);
-    connect(tree, SIGNAL(customContextMenuRequested(const QPoint &)),
-            this, SLOT(customContextMenuRequested(const QPoint &)));
+    connect(tree, SIGNAL(customContextMenuRequested(QPoint)),
+            this, SLOT(customContextMenuRequested(QPoint)));
 }
 
@@ -752,10 +752,10 @@
     if (sourceModel()) {
         disconnect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset()));
-        disconnect(sourceModel(), SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)),
-                   this, SLOT(dataChanged(const QModelIndex &, const QModelIndex &)));
-        disconnect(sourceModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
-                this, SLOT(sourceRowsInserted(const QModelIndex &, int, int)));
-        disconnect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
-                this, SLOT(sourceRowsRemoved(const QModelIndex &, int, int)));
+        disconnect(sourceModel(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+                   this, SLOT(dataChanged(QModelIndex,QModelIndex)));
+        disconnect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
+                this, SLOT(sourceRowsInserted(QModelIndex,int,int)));
+        disconnect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
+                this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
     }
 
@@ -765,10 +765,10 @@
         m_loaded = false;
         connect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset()));
-        connect(sourceModel(), SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)),
-                   this, SLOT(sourceDataChanged(const QModelIndex &, const QModelIndex &)));
-        connect(sourceModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
-                this, SLOT(sourceRowsInserted(const QModelIndex &, int, int)));
-        connect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
-                this, SLOT(sourceRowsRemoved(const QModelIndex &, int, int)));
+        connect(sourceModel(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+                   this, SLOT(sourceDataChanged(QModelIndex,QModelIndex)));
+        connect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
+                this, SLOT(sourceRowsInserted(QModelIndex,int,int)));
+        connect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
+                this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
     }
 }
@@ -907,6 +907,6 @@
         return false;
     int lastRow = row + count - 1;
-    disconnect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
-                this, SLOT(sourceRowsRemoved(const QModelIndex &, int, int)));
+    disconnect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
+                this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
     beginRemoveRows(parent, row, lastRow);
     int oldCount = rowCount();
@@ -915,6 +915,6 @@
     sourceModel()->removeRows(start, end - start + 1);
     endRemoveRows();
-    connect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
-                this, SLOT(sourceRowsRemoved(const QModelIndex &, int, int)));
+    connect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
+                this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
     m_loaded = false;
     if (oldCount - count != rowCount())
@@ -989,7 +989,7 @@
     if (sourceModel()) {
         disconnect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset()));
-        disconnect(sourceModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
+        disconnect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
                 this, SLOT(sourceReset()));
-        disconnect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
+        disconnect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
                 this, SLOT(sourceReset()));
     }
@@ -999,7 +999,7 @@
     if (newSourceModel) {
         connect(newSourceModel, SIGNAL(modelReset()), this, SLOT(sourceReset()));
-        connect(sourceModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
+        connect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
                 this, SLOT(sourceReset()));
-        connect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
+        connect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
                 this, SLOT(sourceReset()));
     }
@@ -1178,8 +1178,8 @@
         disconnect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset()));
         disconnect(sourceModel(), SIGNAL(layoutChanged()), this, SLOT(sourceReset()));
-        disconnect(sourceModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
-                this, SLOT(sourceRowsInserted(const QModelIndex &, int, int)));
-        disconnect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
-                this, SLOT(sourceRowsRemoved(const QModelIndex &, int, int)));
+        disconnect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
+                this, SLOT(sourceRowsInserted(QModelIndex,int,int)));
+        disconnect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
+                this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
     }
 
@@ -1189,8 +1189,8 @@
         connect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset()));
         connect(sourceModel(), SIGNAL(layoutChanged()), this, SLOT(sourceReset()));
-        connect(sourceModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
-                this, SLOT(sourceRowsInserted(const QModelIndex &, int, int)));
-        connect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
-                this, SLOT(sourceRowsRemoved(const QModelIndex &, int, int)));
+        connect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
+                this, SLOT(sourceRowsInserted(QModelIndex,int,int)));
+        connect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
+                this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
     }
 
Index: trunk/demos/browser/history.h
===================================================================
--- trunk/demos/browser/history.h	(revision 521)
+++ trunk/demos/browser/history.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/htmls/notfound.html
===================================================================
--- trunk/demos/browser/htmls/notfound.html	(revision 521)
+++ trunk/demos/browser/htmls/notfound.html	(revision 561)
@@ -50,6 +50,6 @@
     <h2>When connecting to: %3.</h2>
     <ul>
-      <li>Check the address for errors such as <b>ww</b>.trolltech.com
-      instead of <b>www</b>.trolltech.com</li>
+      <li>Check the address for errors such as <b>ww</b>.example.com
+      instead of <b>www</b>.example.com</li>
       <li>If the address is correct, try checking the network
       connection.</li>
Index: trunk/demos/browser/main.cpp
===================================================================
--- trunk/demos/browser/main.cpp	(revision 521)
+++ trunk/demos/browser/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/modelmenu.cpp
===================================================================
--- trunk/demos/browser/modelmenu.cpp	(revision 521)
+++ trunk/demos/browser/modelmenu.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/modelmenu.h
===================================================================
--- trunk/demos/browser/modelmenu.h	(revision 521)
+++ trunk/demos/browser/modelmenu.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/networkaccessmanager.cpp
===================================================================
--- trunk/demos/browser/networkaccessmanager.cpp	(revision 521)
+++ trunk/demos/browser/networkaccessmanager.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -58,17 +58,22 @@
 #include <QtNetwork/QNetworkDiskCache>
 #include <QtNetwork/QNetworkProxy>
+#include <QtNetwork/QNetworkRequest>
 #include <QtNetwork/QNetworkReply>
 #include <QtNetwork/QSslError>
 
 NetworkAccessManager::NetworkAccessManager(QObject *parent)
-    : QNetworkAccessManager(parent)
-{
-    connect(this, SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)),
+    : QNetworkAccessManager(parent),
+    requestFinishedCount(0), requestFinishedFromCacheCount(0), requestFinishedPipelinedCount(0),
+    requestFinishedSecureCount(0)
+{
+    connect(this, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
             SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*)));
-    connect(this, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)),
-            SLOT(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
+    connect(this, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
+            SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
+    connect(this, SIGNAL(finished(QNetworkReply*)),
+            SLOT(requestFinished(QNetworkReply*)));
 #ifndef QT_NO_OPENSSL
-    connect(this, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError>&)),
-            SLOT(sslErrors(QNetworkReply*, const QList<QSslError>&)));
+    connect(this, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
+            SLOT(sslErrors(QNetworkReply*,QList<QSslError>)));
 #endif
     loadSettings();
@@ -78,4 +83,36 @@
     diskCache->setCacheDirectory(location);
     setCache(diskCache);
+}
+
+QNetworkReply* NetworkAccessManager::createRequest(Operation op, const QNetworkRequest & req, QIODevice * outgoingData)
+{
+    QNetworkRequest request = req; // copy so we can modify
+    // this is a temporary hack until we properly use the pipelining flags from QtWebkit
+    // pipeline everything! :)
+    request.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
+    return QNetworkAccessManager::createRequest(op, request, outgoingData);
+}
+
+void NetworkAccessManager::requestFinished(QNetworkReply *reply)
+{
+    requestFinishedCount++;
+
+    if (reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool() == true)
+        requestFinishedFromCacheCount++;
+
+    if (reply->attribute(QNetworkRequest::HttpPipeliningWasUsedAttribute).toBool() == true)
+        requestFinishedPipelinedCount++;
+
+    if (reply->attribute(QNetworkRequest::ConnectionEncryptedAttribute).toBool() == true)
+        requestFinishedSecureCount++;
+
+    if (requestFinishedCount % 10)
+        return;
+
+    double pctCached = (double(requestFinishedFromCacheCount) * 100.0/ double(requestFinishedCount));
+    double pctPipelined = (double(requestFinishedPipelinedCount) * 100.0/ double(requestFinishedCount));
+    double pctSecure = (double(requestFinishedSecureCount) * 100.0/ double(requestFinishedCount));
+    qDebug("STATS [%lli requests total] [%3.2f%% from cache] [%3.2f%% pipelined] [%3.2f%% SSL/TLS]", requestFinishedCount, pctCached, pctPipelined, pctSecure);
+
 }
 
Index: trunk/demos/browser/networkaccessmanager.h
===================================================================
--- trunk/demos/browser/networkaccessmanager.h	(revision 521)
+++ trunk/demos/browser/networkaccessmanager.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -44,4 +44,5 @@
 
 #include <QtNetwork/QNetworkAccessManager>
+#include <QtNetwork/QNetworkRequest>
 
 class NetworkAccessManager : public QNetworkAccessManager
@@ -52,9 +53,16 @@
     NetworkAccessManager(QObject *parent = 0);
 
+    virtual QNetworkReply* createRequest ( Operation op, const QNetworkRequest & req, QIODevice * outgoingData = 0 );
+
 private:
     QList<QString> sslTrustedHostList;
+    qint64 requestFinishedCount;
+    qint64 requestFinishedFromCacheCount;
+    qint64 requestFinishedPipelinedCount;
+    qint64 requestFinishedSecureCount;
 
 public slots:
     void loadSettings();
+    void requestFinished(QNetworkReply *reply);
 
 private slots:
Index: trunk/demos/browser/searchlineedit.cpp
===================================================================
--- trunk/demos/browser/searchlineedit.cpp	(revision 521)
+++ trunk/demos/browser/searchlineedit.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -51,5 +51,7 @@
   : QAbstractButton(parent)
 {
+#ifndef QT_NO_CURSOR
     setCursor(Qt::ArrowCursor);
+#endif // QT_NO_CURSOR
     setToolTip(tr("Clear"));
     setVisible(false);
@@ -104,5 +106,7 @@
 {
     setObjectName(QLatin1String("SearchButton"));
+#ifndef QT_NO_CURSOR
     setCursor(Qt::ArrowCursor);
+#endif //QT_NO_CURSOR
     setFocusPolicy(Qt::NoFocus);
 }
@@ -166,6 +170,6 @@
     m_searchButton(new SearchButton(this))
 {
-    connect(lineEdit(), SIGNAL(textChanged(const QString &)),
-            this, SIGNAL(textChanged(const QString &)));
+    connect(lineEdit(), SIGNAL(textChanged(QString)),
+            this, SIGNAL(textChanged(QString)));
     setLeftWidget(m_searchButton);
     m_inactiveText = tr("Search");
Index: trunk/demos/browser/searchlineedit.h
===================================================================
--- trunk/demos/browser/searchlineedit.h	(revision 521)
+++ trunk/demos/browser/searchlineedit.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/settings.cpp
===================================================================
--- trunk/demos/browser/settings.cpp	(revision 521)
+++ trunk/demos/browser/settings.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -90,5 +90,5 @@
     QSettings settings;
     settings.beginGroup(QLatin1String("MainWindow"));
-    QString defaultHome = QLatin1String("http://qtsoftware.com");
+    QString defaultHome = QLatin1String("http://qt.nokia.com");
     homeLineEdit->setText(settings.value(QLatin1String("home"), defaultHome).toString());
     settings.endGroup();
Index: trunk/demos/browser/settings.h
===================================================================
--- trunk/demos/browser/settings.h	(revision 521)
+++ trunk/demos/browser/settings.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/squeezelabel.cpp
===================================================================
--- trunk/demos/browser/squeezelabel.cpp	(revision 521)
+++ trunk/demos/browser/squeezelabel.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/squeezelabel.h
===================================================================
--- trunk/demos/browser/squeezelabel.h	(revision 521)
+++ trunk/demos/browser/squeezelabel.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/tabwidget.cpp
===================================================================
--- trunk/demos/browser/tabwidget.cpp	(revision 521)
+++ trunk/demos/browser/tabwidget.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -65,6 +65,6 @@
     setContextMenuPolicy(Qt::CustomContextMenu);
     setAcceptDrops(true);
-    connect(this, SIGNAL(customContextMenuRequested(const QPoint &)),
-            this, SLOT(contextMenuRequested(const QPoint &)));
+    connect(this, SIGNAL(customContextMenuRequested(QPoint)),
+            this, SLOT(contextMenuRequested(QPoint)));
 
     QString alt = QLatin1String("Alt+%1");
@@ -222,5 +222,5 @@
     connect(m_tabBar, SIGNAL(reloadTab(int)), this, SLOT(reloadTab(int)));
     connect(m_tabBar, SIGNAL(reloadAllTabs()), this, SLOT(reloadAllTabs()));
-    connect(m_tabBar, SIGNAL(tabMoved(int, int)), this, SLOT(moveTab(int, int)));
+    connect(m_tabBar, SIGNAL(tabMoved(int,int)), this, SLOT(moveTab(int,int)));
     setTabBar(m_tabBar);
     setDocumentMode(true);
@@ -258,6 +258,6 @@
     connect(m_recentlyClosedTabsMenu, SIGNAL(aboutToShow()),
             this, SLOT(aboutToShowRecentTabsMenu()));
-    connect(m_recentlyClosedTabsMenu, SIGNAL(triggered(QAction *)),
-            this, SLOT(aboutToShowRecentTriggeredAction(QAction *)));
+    connect(m_recentlyClosedTabsMenu, SIGNAL(triggered(QAction*)),
+            this, SLOT(aboutToShowRecentTriggeredAction(QAction*)));
     m_recentlyClosedTabsAction = new QAction(tr("Recently Closed Tabs"), this);
     m_recentlyClosedTabsAction->setMenu(m_recentlyClosedTabsMenu);
@@ -305,16 +305,16 @@
     WebView *oldWebView = this->webView(m_lineEdits->currentIndex());
     if (oldWebView) {
-        disconnect(oldWebView, SIGNAL(statusBarMessage(const QString&)),
-                this, SIGNAL(showStatusBarMessage(const QString&)));
-        disconnect(oldWebView->page(), SIGNAL(linkHovered(const QString&, const QString&, const QString&)),
-                this, SIGNAL(linkHovered(const QString&)));
+        disconnect(oldWebView, SIGNAL(statusBarMessage(QString)),
+                this, SIGNAL(showStatusBarMessage(QString)));
+        disconnect(oldWebView->page(), SIGNAL(linkHovered(QString,QString,QString)),
+                this, SIGNAL(linkHovered(QString)));
         disconnect(oldWebView, SIGNAL(loadProgress(int)),
                 this, SIGNAL(loadProgress(int)));
     }
 
-    connect(webView, SIGNAL(statusBarMessage(const QString&)),
-            this, SIGNAL(showStatusBarMessage(const QString&)));
-    connect(webView->page(), SIGNAL(linkHovered(const QString&, const QString&, const QString&)),
-            this, SIGNAL(linkHovered(const QString&)));
+    connect(webView, SIGNAL(statusBarMessage(QString)),
+            this, SIGNAL(showStatusBarMessage(QString)));
+    connect(webView->page(), SIGNAL(linkHovered(QString,QString,QString)),
+            this, SIGNAL(linkHovered(QString)));
     connect(webView, SIGNAL(loadProgress(int)),
             this, SIGNAL(loadProgress(int)));
@@ -451,14 +451,14 @@
     connect(webView, SIGNAL(iconChanged()),
             this, SLOT(webViewIconChanged()));
-    connect(webView, SIGNAL(titleChanged(const QString &)),
-            this, SLOT(webViewTitleChanged(const QString &)));
-    connect(webView, SIGNAL(urlChanged(const QUrl &)),
-            this, SLOT(webViewUrlChanged(const QUrl &)));
+    connect(webView, SIGNAL(titleChanged(QString)),
+            this, SLOT(webViewTitleChanged(QString)));
+    connect(webView, SIGNAL(urlChanged(QUrl)),
+            this, SLOT(webViewUrlChanged(QUrl)));
     connect(webView->page(), SIGNAL(windowCloseRequested()),
             this, SLOT(windowCloseRequested()));
-    connect(webView->page(), SIGNAL(geometryChangeRequested(const QRect &)),
-            this, SIGNAL(geometryChangeRequested(const QRect &)));
-    connect(webView->page(), SIGNAL(printRequested(QWebFrame *)),
-            this, SIGNAL(printRequested(QWebFrame *)));
+    connect(webView->page(), SIGNAL(geometryChangeRequested(QRect)),
+            this, SIGNAL(geometryChangeRequested(QRect)));
+    connect(webView->page(), SIGNAL(printRequested(QWebFrame*)),
+            this, SIGNAL(printRequested(QWebFrame*)));
     connect(webView->page(), SIGNAL(menuBarVisibilityChangeRequested(bool)),
             this, SIGNAL(menuBarVisibilityChangeRequested(bool)));
@@ -561,8 +561,11 @@
         hasFocus = tab->hasFocus();
 
-        m_recentlyClosedTabsAction->setEnabled(true);
-        m_recentlyClosedTabs.prepend(tab->url());
-        if (m_recentlyClosedTabs.size() >= TabWidget::m_recentlyClosedTabsSize)
-            m_recentlyClosedTabs.removeLast();
+        QWebSettings *globalSettings = QWebSettings::globalSettings();
+        if (!globalSettings->testAttribute(QWebSettings::PrivateBrowsingEnabled)) {
+            m_recentlyClosedTabsAction->setEnabled(true);
+            m_recentlyClosedTabs.prepend(tab->url());
+            if (m_recentlyClosedTabs.size() >= TabWidget::m_recentlyClosedTabsSize)
+                m_recentlyClosedTabs.removeLast();
+        }
     }
     QWidget *lineEdit = m_lineEdits->widget(index);
@@ -762,5 +765,5 @@
         return;
     connect(m_root, SIGNAL(triggered()), this, SLOT(rootTriggered()));
-    connect(root, SIGNAL(destroyed(QObject *)), this, SLOT(rootDestroyed()));
+    connect(root, SIGNAL(destroyed(QObject*)), this, SLOT(rootDestroyed()));
     root->setEnabled(false);
 }
@@ -811,5 +814,5 @@
 {
     if (m_currentParent)
-        disconnect(m_currentParent, SIGNAL(destroyed(QObject *)),
+        disconnect(m_currentParent, SIGNAL(destroyed(QObject*)),
                    this, SLOT(currentDestroyed()));
 
@@ -825,5 +828,5 @@
     m_root->setChecked(source->isChecked());
     m_root->setEnabled(source->isEnabled());
-    connect(m_currentParent, SIGNAL(destroyed(QObject *)),
+    connect(m_currentParent, SIGNAL(destroyed(QObject*)),
             this, SLOT(currentDestroyed()));
 }
Index: trunk/demos/browser/tabwidget.h
===================================================================
--- trunk/demos/browser/tabwidget.h	(revision 521)
+++ trunk/demos/browser/tabwidget.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/toolbarsearch.cpp
===================================================================
--- trunk/demos/browser/toolbarsearch.cpp	(revision 521)
+++ trunk/demos/browser/toolbarsearch.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/toolbarsearch.h
===================================================================
--- trunk/demos/browser/toolbarsearch.h	(revision 521)
+++ trunk/demos/browser/toolbarsearch.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/urllineedit.cpp
===================================================================
--- trunk/demos/browser/urllineedit.cpp	(revision 521)
+++ trunk/demos/browser/urllineedit.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -88,6 +88,6 @@
     connect(m_clearButton, SIGNAL(clicked()),
             m_lineEdit, SLOT(clear()));
-    connect(m_lineEdit, SIGNAL(textChanged(const QString&)),
-            m_clearButton, SLOT(textChanged(const QString&)));
+    connect(m_lineEdit, SIGNAL(textChanged(QString)),
+            m_clearButton, SLOT(textChanged(QString)));
 }
 
@@ -271,6 +271,6 @@
     m_webView = webView;
     m_iconLabel->m_webView = webView;
-    connect(webView, SIGNAL(urlChanged(const QUrl &)),
-        this, SLOT(webViewUrlChanged(const QUrl &)));
+    connect(webView, SIGNAL(urlChanged(QUrl)),
+        this, SLOT(webViewUrlChanged(QUrl)));
     connect(webView, SIGNAL(loadFinished(bool)),
         this, SLOT(webViewIconChanged()));
Index: trunk/demos/browser/urllineedit.h
===================================================================
--- trunk/demos/browser/urllineedit.h	(revision 521)
+++ trunk/demos/browser/urllineedit.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/webview.cpp
===================================================================
--- trunk/demos/browser/webview.cpp	(revision 521)
+++ trunk/demos/browser/webview.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -55,5 +55,7 @@
 #include <QtWebKit/QWebHitTestResult>
 
+#ifndef QT_NO_UITOOLS
 #include <QtUiTools/QUiLoader>
+#endif  //QT_NO_UITOOLS
 
 #include <QtCore/QDebug>
@@ -67,6 +69,6 @@
 {
     setNetworkAccessManager(BrowserApplication::networkAccessManager());
-    connect(this, SIGNAL(unsupportedContent(QNetworkReply *)),
-            this, SLOT(handleUnsupportedContent(QNetworkReply *)));
+    connect(this, SIGNAL(unsupportedContent(QNetworkReply*)),
+            this, SLOT(handleUnsupportedContent(QNetworkReply*)));
 }
 
@@ -150,4 +152,6 @@
     bool isOpened = file.open(QIODevice::ReadOnly);
     Q_ASSERT(isOpened);
+    Q_UNUSED(isOpened)
+
     QString title = tr("Error loading page: %1").arg(reply->url().toString());
     QString html = QString(QLatin1String(file.readAll()))
@@ -189,14 +193,14 @@
 {
     setPage(m_page);
-    connect(page(), SIGNAL(statusBarMessage(const QString&)),
-            SLOT(setStatusBarText(const QString&)));
+    connect(page(), SIGNAL(statusBarMessage(QString)),
+            SLOT(setStatusBarText(QString)));
     connect(this, SIGNAL(loadProgress(int)),
             this, SLOT(setProgress(int)));
     connect(this, SIGNAL(loadFinished(bool)),
             this, SLOT(loadFinished()));
-    connect(page(), SIGNAL(loadingUrl(const QUrl&)),
-            this, SIGNAL(urlChanged(const QUrl &)));
-    connect(page(), SIGNAL(downloadRequested(const QNetworkRequest &)),
-            this, SLOT(downloadRequested(const QNetworkRequest &)));
+    connect(page(), SIGNAL(loadingUrl(QUrl)),
+            this, SIGNAL(urlChanged(QUrl)));
+    connect(page(), SIGNAL(downloadRequested(QNetworkRequest)),
+            this, SLOT(downloadRequested(QNetworkRequest)));
     page()->setForwardUnsupportedContent(true);
 
Index: trunk/demos/browser/webview.h
===================================================================
--- trunk/demos/browser/webview.h	(revision 521)
+++ trunk/demos/browser/webview.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/browser/xbel.cpp
===================================================================
--- trunk/demos/browser/xbel.cpp	(revision 521)
+++ trunk/demos/browser/xbel.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -134,14 +134,11 @@
     BookmarkNode *root = new BookmarkNode(BookmarkNode::Root);
     setDevice(device);
-    while (!atEnd()) {
-        readNext();
-        if (isStartElement()) {
-            QString version = attributes().value(QLatin1String("version")).toString();
-            if (name() == QLatin1String("xbel")
-                && (version.isEmpty() || version == QLatin1String("1.0"))) {
-                readXBEL(root);
-            } else {
-                raiseError(QObject::tr("The file is not an XBEL version 1.0 file."));
-            }
+    if (readNextStartElement()) {
+        QString version = attributes().value(QLatin1String("version")).toString();
+        if (name() == QLatin1String("xbel")
+            && (version.isEmpty() || version == QLatin1String("1.0"))) {
+            readXBEL(root);
+        } else {
+            raiseError(QObject::tr("The file is not an XBEL version 1.0 file."));
         }
     }
@@ -153,19 +150,13 @@
     Q_ASSERT(isStartElement() && name() == QLatin1String("xbel"));
 
-    while (!atEnd()) {
-        readNext();
-        if (isEndElement())
-            break;
-
-        if (isStartElement()) {
-            if (name() == QLatin1String("folder"))
-                readFolder(parent);
-            else if (name() == QLatin1String("bookmark"))
-                readBookmarkNode(parent);
-            else if (name() == QLatin1String("separator"))
-                readSeparator(parent);
-            else
-                skipUnknownElement();
-        }
+    while (readNextStartElement()) {
+        if (name() == QLatin1String("folder"))
+            readFolder(parent);
+        else if (name() == QLatin1String("bookmark"))
+            readBookmarkNode(parent);
+        else if (name() == QLatin1String("separator"))
+            readSeparator(parent);
+        else
+            skipCurrentElement();
     }
 }
@@ -178,24 +169,17 @@
     folder->expanded = (attributes().value(QLatin1String("folded")) == QLatin1String("no"));
 
-    while (!atEnd()) {
-        readNext();
-
-        if (isEndElement())
-            break;
-
-        if (isStartElement()) {
-            if (name() == QLatin1String("title"))
-                readTitle(folder);
-            else if (name() == QLatin1String("desc"))
-                readDescription(folder);
-            else if (name() == QLatin1String("folder"))
-                readFolder(folder);
-            else if (name() == QLatin1String("bookmark"))
-                readBookmarkNode(folder);
-            else if (name() == QLatin1String("separator"))
-                readSeparator(folder);
-            else
-                skipUnknownElement();
-        }
+    while (readNextStartElement()) {
+        if (name() == QLatin1String("title"))
+            readTitle(folder);
+        else if (name() == QLatin1String("desc"))
+            readDescription(folder);
+        else if (name() == QLatin1String("folder"))
+            readFolder(folder);
+        else if (name() == QLatin1String("bookmark"))
+            readBookmarkNode(folder);
+        else if (name() == QLatin1String("separator"))
+            readSeparator(folder);
+        else
+            skipCurrentElement();
     }
 }
@@ -225,35 +209,14 @@
     BookmarkNode *bookmark = new BookmarkNode(BookmarkNode::Bookmark, parent);
     bookmark->url = attributes().value(QLatin1String("href")).toString();
-    while (!atEnd()) {
-        readNext();
-        if (isEndElement())
-            break;
-
-        if (isStartElement()) {
-            if (name() == QLatin1String("title"))
-                readTitle(bookmark);
-            else if (name() == QLatin1String("desc"))
-                readDescription(bookmark);
-            else
-                skipUnknownElement();
-        }
+    while (readNextStartElement()) {
+        if (name() == QLatin1String("title"))
+            readTitle(bookmark);
+        else if (name() == QLatin1String("desc"))
+            readDescription(bookmark);
+        else
+            skipCurrentElement();
     }
     if (bookmark->title.isEmpty())
         bookmark->title = QObject::tr("Unknown title");
-}
-
-void XbelReader::skipUnknownElement()
-{
-    Q_ASSERT(isStartElement());
-
-    while (!atEnd()) {
-        readNext();
-
-        if (isEndElement())
-            break;
-
-        if (isStartElement())
-            skipUnknownElement();
-    }
 }
 
Index: trunk/demos/browser/xbel.h
===================================================================
--- trunk/demos/browser/xbel.h	(revision 521)
+++ trunk/demos/browser/xbel.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -88,5 +88,4 @@
 
 private:
-    void skipUnknownElement();
     void readXBEL(BookmarkNode *parent);
     void readTitle(BookmarkNode *parent);
Index: trunk/demos/chip/chip.cpp
===================================================================
--- trunk/demos/chip/chip.cpp	(revision 521)
+++ trunk/demos/chip/chip.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -75,6 +75,7 @@
         fillColor = fillColor.light(125);
 
-    if (option->levelOfDetail < 0.2) {
-        if (option->levelOfDetail < 0.125) {
+    const qreal lod = option->levelOfDetailFromTransform(painter->worldTransform());
+    if (lod < 0.2) {
+        if (lod < 0.125) {
             painter->fillRect(QRectF(0, 0, 110, 70), fillColor);
             return;
@@ -101,5 +102,5 @@
     painter->setBrush(b);
 
-    if (option->levelOfDetail >= 1) {
+    if (lod >= 1) {
         painter->setPen(QPen(Qt::gray, 1));
         painter->drawLine(15, 54, 94, 54);
@@ -109,5 +110,5 @@
 
     // Draw text
-    if (option->levelOfDetail >= 2) {
+    if (lod >= 2) {
         QFont font("Times", 10);
         font.setStyleStrategy(QFont::ForceOutline);
@@ -123,15 +124,15 @@
     // Draw lines
     QVarLengthArray<QLineF, 36> lines;
-    if (option->levelOfDetail >= 0.5) {
-        for (int i = 0; i <= 10; i += (option->levelOfDetail > 0.5 ? 1 : 2)) {
+    if (lod >= 0.5) {
+        for (int i = 0; i <= 10; i += (lod > 0.5 ? 1 : 2)) {
             lines.append(QLineF(18 + 7 * i, 13, 18 + 7 * i, 5));
             lines.append(QLineF(18 + 7 * i, 54, 18 + 7 * i, 62));
         }
-        for (int i = 0; i <= 6; i += (option->levelOfDetail > 0.5 ? 1 : 2)) {
+        for (int i = 0; i <= 6; i += (lod > 0.5 ? 1 : 2)) {
             lines.append(QLineF(5, 18 + i * 5, 13, 18 + i * 5));
             lines.append(QLineF(94, 18 + i * 5, 102, 18 + i * 5));
         }
     }
-    if (option->levelOfDetail >= 0.4) {
+    if (lod >= 0.4) {
         const QLineF lineData[] = {
             QLineF(25, 35, 35, 35),
Index: trunk/demos/chip/chip.h
===================================================================
--- trunk/demos/chip/chip.h	(revision 521)
+++ trunk/demos/chip/chip.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/chip/chip.pro
===================================================================
--- trunk/demos/chip/chip.pro	(revision 521)
+++ trunk/demos/chip/chip.pro	(revision 561)
@@ -18,2 +18,3 @@
 INSTALLS += target sources
 
+symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
Index: trunk/demos/chip/main.cpp
===================================================================
--- trunk/demos/chip/main.cpp	(revision 521)
+++ trunk/demos/chip/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/chip/mainwindow.cpp
===================================================================
--- trunk/demos/chip/mainwindow.cpp	(revision 521)
+++ trunk/demos/chip/mainwindow.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/chip/mainwindow.h
===================================================================
--- trunk/demos/chip/mainwindow.h	(revision 521)
+++ trunk/demos/chip/mainwindow.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/chip/view.cpp
===================================================================
--- trunk/demos/chip/view.cpp	(revision 521)
+++ trunk/demos/chip/view.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/chip/view.h
===================================================================
--- trunk/demos/chip/view.h	(revision 521)
+++ trunk/demos/chip/view.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/composition/composition.cpp
===================================================================
--- trunk/demos/composition/composition.cpp	(revision 521)
+++ trunk/demos/composition/composition.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -378,5 +378,7 @@
             p.fillRect(QRect(0, 0, m_pbuffer->width(), m_pbuffer->height()), Qt::transparent);
 
-            p.save();
+            p.save(); // Needed when using the GL1 engine
+            p.beginNativePainting(); // Needed when using the GL2 engine
+
             glBindTexture(GL_TEXTURE_2D, m_base_tex);
             glEnable(GL_TEXTURE_2D);
@@ -400,5 +402,7 @@
 
             glDisable(GL_TEXTURE_2D);
-            p.restore();
+
+            p.endNativePainting(); // Needed when using the GL2 engine
+            p.restore(); // Needed when using the GL1 engine
 
             drawSource(p);
@@ -407,7 +411,10 @@
         }
 
-        glWidget()->makeCurrent();
+        painter->beginNativePainting(); // Needed when using the GL2 engine
+        glWidget()->makeCurrent(); // Needed when using the GL1 engine
         glBindTexture(GL_TEXTURE_2D, m_compositing_tex);
         glEnable(GL_TEXTURE_2D);
+        glEnable(GL_BLEND);
+        glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
         glColor4f(1.,1.,1.,1.);
         glBegin(GL_QUADS);
@@ -427,4 +434,5 @@
         glEnd();
         glDisable(GL_TEXTURE_2D);
+        painter->endNativePainting(); // Needed when using the GL2 engine
     } else
 #endif
@@ -450,5 +458,5 @@
         m_buffer = m_base_buffer;
 #else
-        memcpy(m_buffer.bits(), m_base_buffer.bits(), m_buffer.numBytes());
+        memcpy(m_buffer.bits(), m_base_buffer.bits(), m_buffer.byteCount());
 #endif
 
Index: trunk/demos/composition/composition.h
===================================================================
--- trunk/demos/composition/composition.h	(revision 521)
+++ trunk/demos/composition/composition.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/composition/composition.pro
===================================================================
--- trunk/demos/composition/composition.pro	(revision 521)
+++ trunk/demos/composition/composition.pro	(revision 561)
@@ -18,4 +18,6 @@
 INSTALLS += target sources
 
+symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+
 win32-msvc* {
     QMAKE_CXXFLAGS += /Zm500
Index: trunk/demos/composition/main.cpp
===================================================================
--- trunk/demos/composition/main.cpp	(revision 521)
+++ trunk/demos/composition/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -43,4 +43,7 @@
 
 #include <QApplication>
+#ifdef QT_OPENGL_SUPPORT
+#include <QtOpenGL>
+#endif
 
 int main(int argc, char **argv)
@@ -48,4 +51,7 @@
  //   Q_INIT_RESOURCE(deform);
 
+#ifdef QT_OPENGL_SUPPORT
+    QGL::setPreferredPaintEngine(QPaintEngine::OpenGL);
+#endif
     QApplication app(argc, argv);
 
Index: trunk/demos/deform/deform.pro
===================================================================
--- trunk/demos/deform/deform.pro	(revision 521)
+++ trunk/demos/deform/deform.pro	(revision 561)
@@ -18,2 +18,7 @@
 sources.path = $$[QT_INSTALL_DEMOS]/deform
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000A63D
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+}
Index: trunk/demos/deform/main.cpp
===================================================================
--- trunk/demos/deform/main.cpp	(revision 521)
+++ trunk/demos/deform/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -69,4 +69,7 @@
         deformWidget.show();
 
+#ifdef QT_KEYPAD_NAVIGATION
+    QApplication::setNavigationMode(Qt::NavigationModeCursorAuto);
+#endif
     return app.exec();
 }
Index: trunk/demos/deform/pathdeform.cpp
===================================================================
--- trunk/demos/deform/pathdeform.cpp	(revision 521)
+++ trunk/demos/deform/pathdeform.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -54,5 +54,4 @@
 #include <qmath.h>
 
-
 PathDeformControls::PathDeformControls(QWidget *parent, PathDeformRenderer* renderer, bool smallScreen)
       : QWidget(parent)
@@ -242,4 +241,5 @@
     QRect screen_size = QApplication::desktop()->screenGeometry();
     radiusSlider->setValue(qMin(screen_size.width(), screen_size.height())/5);
+
     m_renderer->setText(tr("Qt"));
 }
Index: trunk/demos/deform/pathdeform.h
===================================================================
--- trunk/demos/deform/pathdeform.h	(revision 521)
+++ trunk/demos/deform/pathdeform.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/demos.pro
===================================================================
--- trunk/demos/demos.pro	(revision 521)
+++ trunk/demos/demos.pro	(revision 561)
@@ -1,19 +1,42 @@
 TEMPLATE    = subdirs
 SUBDIRS     = \
-	demos_shared \
-	demos_deform \
-	demos_gradients \
-	demos_pathstroke \
-	demos_affine \
-	demos_composition \
-        demos_books \
-        demos_interview \
-        demos_mainwindow \
-        demos_spreadsheet \
-        demos_textedit \
-        demos_chip \
-        demos_embeddeddialogs \
-        demos_undo 
+            demos_shared \
+            demos_deform \
+            demos_gradients \
+            demos_pathstroke \
+            demos_affine \
+            demos_composition \
+            demos_books \
+            demos_interview \
+            demos_mainwindow \
+            demos_spreadsheet \
+            demos_textedit \
+            demos_chip \
+            demos_embeddeddialogs \
+            demos_undo \
+            demos_sub-attaq
 
+symbian: SUBDIRS = \
+            demos_shared \
+            demos_deform \
+            demos_pathstroke
+            
+wince*:  SUBDIRS = \
+            demos_shared \
+            demos_deform \
+            demos_gradients \
+            demos_pathstroke \
+            demos_affine \
+            demos_composition \
+            demos_books \
+            demos_interview \
+            demos_mainwindow \
+            demos_spreadsheet \
+            demos_textedit \
+            # demos_chip \
+            demos_embeddeddialogs \
+            demos_undo \
+            demos_sub-attaq
+            
 contains(QT_CONFIG, opengl):!contains(QT_CONFIG, opengles1):!contains(QT_CONFIG, opengles1cl):!contains(QT_CONFIG, opengles2):{
 SUBDIRS += demos_boxes
@@ -21,5 +44,5 @@
 
 mac*: SUBDIRS += demos_macmainwindow
-wince*|embedded: SUBDIRS += embedded
+wince*|symbian|embedded|x11: SUBDIRS += embedded
 
 !contains(QT_EDITION, Console):!cross_compile:!embedded:!wince*:SUBDIRS += demos_arthurplugin
@@ -28,9 +51,9 @@
 contains(QT_BUILD_PARTS, tools):{
 !wince*:!os2:SUBDIRS += demos_sqlbrowser demos_qtdemo
-wince*|os2: SUBDIRS += demos_sqlbrowser
+wince*|os2:SUBDIRS += demos_sqlbrowser
 }
 }
-contains(QT_CONFIG, phonon)!static:SUBDIRS += demos_mediaplayer
-contains(QT_CONFIG, webkit):contains(QT_CONFIG, svg):SUBDIRS += demos_browser
+contains(QT_CONFIG, phonon):!static:SUBDIRS += demos_mediaplayer
+contains(QT_CONFIG, webkit):contains(QT_CONFIG, svg):!symbian:SUBDIRS += demos_browser
 
 # install
@@ -38,4 +61,6 @@
 sources.path = $$[QT_INSTALL_DEMOS]
 INSTALLS += sources
+
+symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
 
 demos_chip.subdir = chip
@@ -57,9 +82,10 @@
 demos_undo.subdir = undo
 demos_qtdemo.subdir = qtdemo
-demos_mediaplayer.subdir = mediaplayer
+demos_mediaplayer.subdir = qmediaplayer
 
 demos_browser.subdir = browser
 
 demos_boxes.subdir = boxes
+demos_sub-attaq.subdir = sub-attaq
 
 #CONFIG += ordered
Index: trunk/demos/embedded/anomaly/anomaly.pro
===================================================================
--- trunk/demos/embedded/anomaly/anomaly.pro	(revision 561)
+++ trunk/demos/embedded/anomaly/anomaly.pro	(revision 561)
@@ -0,0 +1,36 @@
+QT += network \
+    webkit
+HEADERS += src/BrowserWindow.h \
+    src/BrowserView.h \
+    src/TitleBar.h \
+    src/HomeView.h \
+    src/AddressBar.h \
+    src/BookmarksView.h \
+    src/flickcharm.h \
+    src/ZoomStrip.h \
+    src/ControlStrip.h
+SOURCES += src/Main.cpp \
+    src/BrowserWindow.cpp \
+    src/BrowserView.cpp \
+    src/TitleBar.cpp \
+    src/HomeView.cpp \
+    src/AddressBar.cpp \
+    src/BookmarksView.cpp \
+    src/flickcharm.cpp \
+    src/ZoomStrip.cpp \
+    src/ControlStrip.cpp
+RESOURCES += src/anomaly.qrc
+
+symbian {
+    TARGET.UID3 = 0xA000CF71
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+    HEADERS += $$QT_SOURCE_TREE/examples/network/qftp/sym_iap_util.h
+    LIBS += -lesock -linsock -lconnmon
+    TARGET.CAPABILITY = NetworkServices
+    TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
+}
+
+target.path = $$[QT_INSTALL_DEMOS]/embedded/anomaly
+sources.files = $$SOURCES $$HEADERS $$RESOURCES *.pro src/images
+sources.path = $$[QT_INSTALL_DEMOS]/embedded/anomaly
+INSTALLS += target sources
Index: trunk/demos/embedded/anomaly/src/AddressBar.cpp
===================================================================
--- trunk/demos/embedded/anomaly/src/AddressBar.cpp	(revision 561)
+++ trunk/demos/embedded/anomaly/src/AddressBar.cpp	(revision 561)
@@ -0,0 +1,109 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "AddressBar.h"
+
+#include <QtCore>
+#include <QtGui>
+
+class LineEdit: public QLineEdit
+{
+public:
+    LineEdit(QWidget *parent = 0): QLineEdit(parent) {}
+
+    void paintEvent(QPaintEvent *event) {
+        QLineEdit::paintEvent(event);
+        if (text().isEmpty()) {
+            QPainter p(this);
+            int flags = Qt::AlignLeft | Qt::AlignVCenter;
+            p.setPen(palette().color(QPalette::Disabled, QPalette::Text));
+            p.drawText(rect().adjusted(10, 0, 0, 0), flags, "Enter address or search terms");
+            p.end();
+        }
+    }
+};
+
+AddressBar::AddressBar(QWidget *parent)
+    : QWidget(parent)
+{
+    m_lineEdit = new LineEdit(parent);
+    connect(m_lineEdit, SIGNAL(returnPressed()), SLOT(processAddress()));
+    m_toolButton = new QToolButton(parent);
+    m_toolButton->setText("Go");
+    connect(m_toolButton, SIGNAL(clicked()), SLOT(processAddress()));
+}
+
+QSize AddressBar::sizeHint() const
+{
+    return m_lineEdit->sizeHint();
+}
+
+void AddressBar::processAddress()
+{
+    if (!m_lineEdit->text().isEmpty())
+        emit addressEntered(m_lineEdit->text());
+}
+
+void AddressBar::resizeEvent(QResizeEvent *event)
+{
+    int x, y, w, h;
+
+    m_toolButton->adjustSize();
+    x = width() - m_toolButton->width();
+    y = 0;
+    w = m_toolButton->width();
+    h = height() - 1;
+    m_toolButton->setGeometry(x, y, w, h);
+    m_toolButton->show();
+
+    x = 0;
+    y = 0;
+    w = width() - m_toolButton->width();
+    h = height() - 1;
+    m_lineEdit->setGeometry(x, y, w, h);
+    m_lineEdit->show();
+}
+
+void AddressBar::focusInEvent(QFocusEvent *event)
+{
+    m_lineEdit->setFocus();
+    QWidget::focusInEvent(event);
+}
Index: trunk/demos/embedded/anomaly/src/AddressBar.h
===================================================================
--- trunk/demos/embedded/anomaly/src/AddressBar.h	(revision 561)
+++ trunk/demos/embedded/anomaly/src/AddressBar.h	(revision 561)
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ADDRESSBAR_H
+#define ADDRESSBAR_H
+
+#include <QWidget>
+
+class QLineEdit;
+class QToolButton;
+
+class AddressBar : public QWidget
+{
+    Q_OBJECT
+
+public:
+    AddressBar(QWidget *parent = 0);
+    QSize sizeHint() const;
+
+protected:
+    void resizeEvent(QResizeEvent *event);
+    void focusInEvent(QFocusEvent *event);
+
+signals:
+    void addressEntered(const QString &address);
+
+private slots:
+    void processAddress();
+
+private:
+    QLineEdit *m_lineEdit;
+    QToolButton *m_toolButton;
+};
+
+#endif // ADDRESSBAR_H
Index: trunk/demos/embedded/anomaly/src/BookmarksView.cpp
===================================================================
--- trunk/demos/embedded/anomaly/src/BookmarksView.cpp	(revision 561)
+++ trunk/demos/embedded/anomaly/src/BookmarksView.cpp	(revision 561)
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "BookmarksView.h"
+
+#include <QtGui>
+
+BookmarksView::BookmarksView(QWidget *parent)
+    : QWidget(parent)
+{
+    QListWidget *m_iconView = new QListWidget(this);
+    connect(m_iconView, SIGNAL(itemActivated(QListWidgetItem*)), SLOT(activate(QListWidgetItem*)));
+
+    QVBoxLayout *layout = new QVBoxLayout(this);
+    setLayout(layout);
+    layout->addWidget(m_iconView);
+
+    m_iconView->addItem("www.google.com");
+    m_iconView->addItem("qt.nokia.com/doc/4.5");
+    m_iconView->addItem("news.bbc.co.uk/text_only.stm");
+    m_iconView->addItem("mobile.wikipedia.org");
+    m_iconView->addItem("qt.nokia.com");
+    m_iconView->addItem("en.wikipedia.org");
+
+    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+}
+
+void BookmarksView::activate(QListWidgetItem *item)
+{
+    QUrl url = item->text().prepend("http://");
+    emit urlSelected(url);
+}
Index: trunk/demos/embedded/anomaly/src/BookmarksView.h
===================================================================
--- trunk/demos/embedded/anomaly/src/BookmarksView.h	(revision 561)
+++ trunk/demos/embedded/anomaly/src/BookmarksView.h	(revision 561)
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef BOOKMARKSVIEW_H
+#define BOOKMARKSVIEW_H
+
+#include <QWidget>
+
+class QListWidgetItem;
+class QUrl;
+
+class BookmarksView : public QWidget
+{
+    Q_OBJECT
+
+public:
+    BookmarksView(QWidget *parent = 0);
+
+signals:
+    void urlSelected(const QUrl &url);
+
+private slots:
+    void activate(QListWidgetItem *item);
+};
+
+#endif // BOOKMARKSVIEW_H
Index: trunk/demos/embedded/anomaly/src/BrowserView.cpp
===================================================================
--- trunk/demos/embedded/anomaly/src/BrowserView.cpp	(revision 561)
+++ trunk/demos/embedded/anomaly/src/BrowserView.cpp	(revision 561)
@@ -0,0 +1,185 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "BrowserView.h"
+
+#include <QtGui>
+#include <QtNetwork>
+#include <QtWebKit>
+
+#include "ControlStrip.h"
+#include "TitleBar.h"
+#include "flickcharm.h"
+#include "ZoomStrip.h"
+
+#if defined (Q_OS_SYMBIAN)
+#include "sym_iap_util.h"
+#endif
+
+BrowserView::BrowserView(QWidget *parent)
+    : QWidget(parent)
+    , m_titleBar(0)
+    , m_webView(0)
+    , m_progress(0)
+    , m_currentZoom(100)
+{
+    m_titleBar = new TitleBar(this);
+    m_webView = new QWebView(this);
+    m_zoomStrip = new ZoomStrip(this);
+    m_controlStrip = new ControlStrip(this);
+
+    m_zoomLevels << 30 << 50 << 67 << 80 << 90;
+    m_zoomLevels << 100;
+    m_zoomLevels << 110 << 120 << 133 << 150 << 170 << 200 << 240 << 300;
+
+    QTimer::singleShot(0, this, SLOT(initialize()));
+}
+
+void BrowserView::initialize()
+{
+    connect(m_zoomStrip, SIGNAL(zoomInClicked()), SLOT(zoomIn()));
+    connect(m_zoomStrip, SIGNAL(zoomOutClicked()), SLOT(zoomOut()));
+
+    connect(m_controlStrip, SIGNAL(menuClicked()), SIGNAL(menuButtonClicked()));
+    connect(m_controlStrip, SIGNAL(backClicked()), m_webView, SLOT(back()));
+    connect(m_controlStrip, SIGNAL(forwardClicked()), m_webView, SLOT(forward()));
+
+    QPalette pal = m_webView->palette();
+    pal.setBrush(QPalette::Base, Qt::white);
+    m_webView->setPalette(pal);
+
+    FlickCharm *flickCharm = new FlickCharm(this);
+    flickCharm->activateOn(m_webView);
+
+    m_webView->setZoomFactor(static_cast<qreal>(m_currentZoom)/100.0);
+    connect(m_webView, SIGNAL(loadStarted()), SLOT(start()));
+    connect(m_webView, SIGNAL(loadProgress(int)), SLOT(setProgress(int)));
+    connect(m_webView, SIGNAL(loadFinished(bool)), SLOT(finish(bool)));
+    connect(m_webView, SIGNAL(urlChanged(QUrl)), SLOT(updateTitleBar()));
+
+    m_webView->setHtml("Will try to load page soon!");
+    m_webView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    m_webView->setFocus();
+#ifdef Q_OS_SYMBIAN
+    QTimer::singleShot(0, this, SLOT(setDefaultIap()));
+#endif
+}
+
+void BrowserView::start()
+{
+    m_progress = 0;
+    updateTitleBar();
+    //m_titleBar->setText(m_webView->url().toString());
+}
+
+void BrowserView::setProgress(int percent)
+{
+    m_progress = percent;
+    updateTitleBar();
+    //m_titleBar->setText(QString("Loading %1%").arg(percent));
+}
+
+void BrowserView::updateTitleBar()
+{
+    QUrl url = m_webView->url();
+    m_titleBar->setHost(url.host());
+    m_titleBar->setTitle(m_webView->title());
+    m_titleBar->setProgress(m_progress);
+}
+
+void BrowserView::finish(bool ok)
+{
+    m_progress = 0;
+    updateTitleBar();
+
+    // TODO: handle error
+    if (!ok) {
+        //m_titleBar->setText("Loading failed.");
+    }
+}
+
+void BrowserView::zoomIn()
+{
+    int i = m_zoomLevels.indexOf(m_currentZoom);
+    Q_ASSERT(i >= 0);
+    if (i < m_zoomLevels.count() - 1)
+        m_currentZoom = m_zoomLevels[i + 1];
+
+    m_webView->setZoomFactor(static_cast<qreal>(m_currentZoom)/100.0);
+}
+
+void BrowserView::zoomOut()
+{
+    int i = m_zoomLevels.indexOf(m_currentZoom);
+    Q_ASSERT(i >= 0);
+    if (i > 0)
+        m_currentZoom = m_zoomLevels[i - 1];
+
+    m_webView->setZoomFactor(static_cast<qreal>(m_currentZoom)/100.0);
+}
+
+void BrowserView::resizeEvent(QResizeEvent *event)
+{
+    QWidget::resizeEvent(event);
+
+    int h1 = m_titleBar->sizeHint().height();
+    int h2 = m_controlStrip->sizeHint().height();
+
+    m_titleBar->setGeometry(0, 0, width(), h1);
+    m_controlStrip->setGeometry(0, height() - h2, width(), h2);
+    m_webView->setGeometry(0, h1, width(), height() - h1);
+
+    int zw = m_zoomStrip->sizeHint().width();
+    int zh = m_zoomStrip->sizeHint().height();
+    m_zoomStrip->move(width() - zw, (height() - zh) / 2);
+}
+#ifdef Q_OS_SYMBIAN
+void BrowserView::setDefaultIap()
+{
+    qt_SetDefaultIap();
+    m_webView->load(QUrl("http://news.bbc.co.uk/text_only.stm"));
+}
+#endif
+
+void BrowserView::navigate(const QUrl &url)
+{
+    m_webView->load(url);
+}
Index: trunk/demos/embedded/anomaly/src/BrowserView.h
===================================================================
--- trunk/demos/embedded/anomaly/src/BrowserView.h	(revision 561)
+++ trunk/demos/embedded/anomaly/src/BrowserView.h	(revision 561)
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef BROWSERVIEW_H
+#define BROWSERVIEW_H
+
+#include <QWidget>
+#include <QVector>
+
+class QUrl;
+class QWebView;
+class TitleBar;
+class ControlStrip;
+class ZoomStrip;
+
+class BrowserView : public QWidget
+{
+    Q_OBJECT
+
+public:
+    BrowserView(QWidget *parent = 0);
+
+public slots:
+    void navigate(const QUrl &url);
+    void zoomIn();
+    void zoomOut();
+#ifdef Q_OS_SYMBIAN
+    void setDefaultIap();
+#endif
+
+private slots:
+    void initialize();
+    void start();
+    void setProgress(int percent);
+    void finish(bool);
+    void updateTitleBar();
+
+signals:
+    void menuButtonClicked();
+
+protected:
+    void resizeEvent(QResizeEvent *event);
+
+private:
+    TitleBar *m_titleBar;
+    QWebView *m_webView;
+    ZoomStrip *m_zoomStrip;
+    ControlStrip *m_controlStrip;
+    int m_progress;
+    int m_currentZoom;
+    QVector<int> m_zoomLevels;
+};
+
+#endif // BROWSERVIEW_H
Index: trunk/demos/embedded/anomaly/src/BrowserWindow.cpp
===================================================================
--- trunk/demos/embedded/anomaly/src/BrowserWindow.cpp	(revision 561)
+++ trunk/demos/embedded/anomaly/src/BrowserWindow.cpp	(revision 561)
@@ -0,0 +1,166 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "BrowserWindow.h"
+
+#include <QtCore>
+#include <QtGui>
+#include <QPropertyAnimation>
+#include <QResizeEvent>
+
+#include "BrowserView.h"
+#include "HomeView.h"
+
+BrowserWindow::BrowserWindow()
+    : m_slidingSurface(new QWidget(this))
+    , m_homeView(new HomeView(m_slidingSurface))
+    , m_browserView(new BrowserView(m_slidingSurface))
+    , m_animation(new QPropertyAnimation(this, "slideValue"))
+{
+    m_slidingSurface->setAutoFillBackground(true);
+
+    m_homeView->resize(size());
+
+    m_browserView->resize(size());
+
+    connect(m_homeView, SIGNAL(addressEntered(QString)), SLOT(gotoAddress(QString)));
+    connect(m_homeView, SIGNAL(urlActivated(QUrl)), SLOT(navigate(QUrl)));
+
+    connect(m_browserView, SIGNAL(menuButtonClicked()), SLOT(showHomeView()));
+
+    m_animation->setDuration(200);
+    connect(m_animation, SIGNAL(finished()), SLOT(animationFinished()));
+
+    setSlideValue(0.0f);
+}
+
+void BrowserWindow::gotoAddress(const QString &address)
+{
+    m_browserView->navigate(QUrl::fromUserInput(address));
+    showBrowserView();
+}
+
+void BrowserWindow::animationFinished()
+{
+    m_animation->setDirection(QAbstractAnimation::Forward);
+}
+
+void BrowserWindow::navigate(const QUrl &url)
+{
+    m_browserView->navigate(url);
+    showBrowserView();
+}
+
+void BrowserWindow::setSlideValue(qreal slideRatio)
+{
+    // we use a ratio to handle resize corectly
+    const int pos = -qRound(slideRatio * width());
+    m_slidingSurface->scroll(pos - m_homeView->x(), 0);
+
+    if (qFuzzyCompare(slideRatio, static_cast<qreal>(1.0f))) {
+        m_browserView->show();
+        m_homeView->hide();
+    } else if (qFuzzyCompare(slideRatio, static_cast<qreal>(0.0f))) {
+        m_homeView->show();
+        m_browserView->hide();
+    } else {
+        m_browserView->show();
+        m_homeView->show();
+    }
+}
+
+qreal BrowserWindow::slideValue() const
+{
+    Q_ASSERT(m_slidingSurface->x() < width());
+    return static_cast<qreal>(qAbs(m_homeView->x())) / width();
+}
+
+void BrowserWindow::showHomeView()
+{
+    m_animation->setStartValue(slideValue());
+    m_animation->setEndValue(0.0f);
+    m_animation->start();
+    m_homeView->setFocus();
+}
+
+void BrowserWindow::showBrowserView()
+{
+    m_animation->setStartValue(slideValue());
+    m_animation->setEndValue(1.0f);
+    m_animation->start();
+
+    m_browserView->setFocus();
+}
+
+void BrowserWindow::keyReleaseEvent(QKeyEvent *event)
+{
+    QWidget::keyReleaseEvent(event);
+
+    if (event->key() == Qt::Key_F3) {
+        if (m_animation->state() == QAbstractAnimation::Running) {
+            const QAbstractAnimation::Direction direction =  m_animation->direction() == QAbstractAnimation::Forward
+                                                             ? QAbstractAnimation::Forward
+                                                                 : QAbstractAnimation::Backward;
+            m_animation->setDirection(direction);
+        } else if (qFuzzyCompare(slideValue(), static_cast<qreal>(1.0f)))
+            showHomeView();
+        else
+            showBrowserView();
+        event->accept();
+    }
+}
+
+void BrowserWindow::resizeEvent(QResizeEvent *event)
+{
+    const QSize oldSize = event->oldSize();
+    const qreal oldSlidingRatio = static_cast<qreal>(qAbs(m_homeView->x())) / oldSize.width();
+
+    const QSize newSize = event->size();
+    m_slidingSurface->resize(newSize.width() * 2, newSize.height());
+
+    m_homeView->resize(newSize);
+    m_homeView->move(0, 0);
+
+    m_browserView->resize(newSize);
+    m_browserView->move(newSize.width(), 0);
+
+    setSlideValue(oldSlidingRatio);
+}
Index: trunk/demos/embedded/anomaly/src/BrowserWindow.h
===================================================================
--- trunk/demos/embedded/anomaly/src/BrowserWindow.h	(revision 561)
+++ trunk/demos/embedded/anomaly/src/BrowserWindow.h	(revision 561)
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef BROWSERWINDOW_H
+#define BROWSERWINDOW_H
+
+#include <QWidget>
+class QPropertyAnimation;
+class QUrl;
+
+class BrowserView;
+class HomeView;
+
+class BrowserWindow : public QWidget
+{
+    Q_OBJECT
+    Q_PROPERTY(qreal slideValue READ slideValue WRITE setSlideValue)
+
+public:
+    BrowserWindow();
+
+private slots:
+    void navigate(const QUrl &url);
+    void gotoAddress(const QString &address);
+    void animationFinished();
+
+public slots:
+    void showBrowserView();
+    void showHomeView();
+
+protected:
+    void keyReleaseEvent(QKeyEvent *event);
+    void resizeEvent(QResizeEvent *event);
+
+private:
+    void setSlideValue(qreal);
+    qreal slideValue() const;
+
+    QWidget *m_slidingSurface;
+    HomeView *m_homeView;
+    BrowserView *m_browserView;
+    QPropertyAnimation *m_animation;
+};
+
+#endif // BROWSERWINDOW_H
Index: trunk/demos/embedded/anomaly/src/ControlStrip.cpp
===================================================================
--- trunk/demos/embedded/anomaly/src/ControlStrip.cpp	(revision 561)
+++ trunk/demos/embedded/anomaly/src/ControlStrip.cpp	(revision 561)
@@ -0,0 +1,101 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "ControlStrip.h"
+
+#include <QtCore>
+#include <QtGui>
+
+ControlStrip::ControlStrip(QWidget *parent)
+    : QWidget(parent)
+{
+    menuPixmap.load(":/images/edit-find.png");
+    backPixmap.load(":/images/go-previous.png");
+    forwardPixmap.load(":/images/go-next.png");
+}
+
+QSize ControlStrip::sizeHint() const
+{
+    return minimumSizeHint();
+}
+
+QSize ControlStrip::minimumSizeHint() const
+{
+    return QSize(320, 48);
+}
+
+void ControlStrip::mousePressEvent(QMouseEvent *event)
+{
+    int h = height();
+    int x = event->pos().x();
+
+    if (x < h) {
+        emit menuClicked();
+        event->accept();
+        return;
+    }
+
+    if (x > width() - h) {
+        emit forwardClicked();
+        event->accept();
+        return;
+    }
+
+    if ((x < width() - 2 * h) && (x > width() - 3 * h)) {
+        emit backClicked();
+        event->accept();
+        return;
+    }
+}
+
+void ControlStrip::paintEvent(QPaintEvent *event)
+{
+    int h = height();
+    int s = (h - menuPixmap.height()) / 2;
+
+    QPainter p(this);
+    p.fillRect(event->rect(), QColor(32, 32, 32, 192));
+    p.setCompositionMode(QPainter::CompositionMode_SourceOver);
+    p.drawPixmap(s, s, menuPixmap);
+    p.drawPixmap(width() - 3 * h + s, s, backPixmap);
+    p.drawPixmap(width() - h + s, s, forwardPixmap);
+    p.end();
+}
Index: trunk/demos/embedded/anomaly/src/ControlStrip.h
===================================================================
--- trunk/demos/embedded/anomaly/src/ControlStrip.h	(revision 561)
+++ trunk/demos/embedded/anomaly/src/ControlStrip.h	(revision 561)
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef CONTROLSTRIP_H
+#define CONTROLSTRIP_H
+
+#include <QWidget>
+
+class ControlStrip : public QWidget
+{
+    Q_OBJECT
+
+public:
+    ControlStrip(QWidget *parent = 0);
+
+    QSize sizeHint() const;
+    QSize minimumSizeHint() const;
+
+signals:
+    void menuClicked();
+    void backClicked();
+    void forwardClicked();
+
+protected:
+    void paintEvent(QPaintEvent *event);
+    void mousePressEvent(QMouseEvent *event);
+
+private:
+    QPixmap menuPixmap;
+    QPixmap backPixmap;
+    QPixmap forwardPixmap;
+};
+
+#endif // CONTROLSTRIP_H
Index: trunk/demos/embedded/anomaly/src/HomeView.cpp
===================================================================
--- trunk/demos/embedded/anomaly/src/HomeView.cpp	(revision 561)
+++ trunk/demos/embedded/anomaly/src/HomeView.cpp	(revision 561)
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "HomeView.h"
+
+#include <QtCore>
+#include <QtGui>
+
+#include "AddressBar.h"
+#include "BookmarksView.h"
+
+HomeView::HomeView(QWidget *parent)
+    : QWidget(parent)
+    , m_addressBar(0)
+{
+    m_addressBar = new AddressBar(parent);
+    connect(m_addressBar, SIGNAL(addressEntered(QString)), SLOT(gotoAddress(QString)));
+
+    m_bookmarks = new BookmarksView(parent);
+    connect(m_bookmarks, SIGNAL(urlSelected(QUrl)), SIGNAL(urlActivated(QUrl)));
+
+    QVBoxLayout *layout = new QVBoxLayout(this);
+    layout->setMargin(4);
+    layout->setSpacing(4);
+    layout->addWidget(m_addressBar);
+    layout->addWidget(m_bookmarks);
+}
+
+void HomeView::gotoAddress(const QString &address)
+{
+    emit addressEntered(address);
+}
+
+void HomeView::focusInEvent(QFocusEvent *event)
+{
+    m_addressBar->setFocus();
+    QWidget::focusInEvent(event);
+}
Index: trunk/demos/embedded/anomaly/src/HomeView.h
===================================================================
--- trunk/demos/embedded/anomaly/src/HomeView.h	(revision 561)
+++ trunk/demos/embedded/anomaly/src/HomeView.h	(revision 561)
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef HOMEVIEW_H
+#define HOMEVIEW_H
+
+#include <QWidget>
+
+class QUrl;
+
+class AddressBar;
+class BookmarksView;
+
+class HomeView : public QWidget
+{
+    Q_OBJECT
+
+public:
+    HomeView(QWidget *parent);
+
+signals:
+    void urlActivated(const QUrl &url);
+    void addressEntered(const QString &address);
+
+private slots:
+    void gotoAddress(const QString &address);
+
+protected:
+    void focusInEvent(QFocusEvent *event);
+
+private:
+    AddressBar *m_addressBar;
+    BookmarksView *m_bookmarks;
+};
+
+#endif // HOMEVIEW_H
Index: trunk/demos/embedded/anomaly/src/Main.cpp
===================================================================
--- trunk/demos/embedded/anomaly/src/Main.cpp	(revision 561)
+++ trunk/demos/embedded/anomaly/src/Main.cpp	(revision 561)
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore>
+#include <QtGui>
+#include <QtWebKit>
+
+#include "BrowserWindow.h"
+
+int main(int argc, char *argv[])
+{
+#if !defined(Q_WS_S60)
+    QApplication::setGraphicsSystem("raster");
+#endif
+
+    QApplication app(argc, argv);
+
+    app.setApplicationName("Anomaly");
+    app.setApplicationVersion("0.0.0");
+
+    BrowserWindow window;
+#ifdef Q_OS_SYMBIAN
+    window.showFullScreen();
+    QWebSettings::globalSettings()->setObjectCacheCapacities(128*1024, 1024*1024, 1024*1024);
+    QWebSettings::globalSettings()->setMaximumPagesInCache(3);
+#else
+    window.resize(360, 640);
+    window.show();
+    app.setStyle("windows");
+#endif
+
+#ifdef QT_KEYPAD_NAVIGATION
+    QApplication::setNavigationMode(Qt::NavigationModeCursorAuto);
+#endif
+    return app.exec();
+}
Index: trunk/demos/embedded/anomaly/src/TitleBar.cpp
===================================================================
--- trunk/demos/embedded/anomaly/src/TitleBar.cpp	(revision 561)
+++ trunk/demos/embedded/anomaly/src/TitleBar.cpp	(revision 561)
@@ -0,0 +1,124 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "TitleBar.h"
+
+#include <QtCore>
+#include <QtGui>
+
+TitleBar::TitleBar(QWidget *parent)
+    : QWidget(parent)
+    , m_progress(0)
+{
+    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
+}
+
+void TitleBar::setHost(const QString &host)
+{
+    m_host = host;
+    update();
+}
+
+void TitleBar::setTitle(const QString &title)
+{
+    m_title = title;
+    update();
+}
+
+void TitleBar::setProgress(int percent)
+{
+    m_progress = percent;
+    update();
+}
+
+QSize TitleBar::sizeHint() const
+{
+    return minimumSizeHint();
+}
+
+QSize TitleBar::minimumSizeHint() const
+{
+    QFontMetrics fm = fontMetrics();
+    return QSize(100, fm.height());
+}
+
+void TitleBar::paintEvent(QPaintEvent *event)
+{
+    QString title = m_host;
+    if (!m_title.isEmpty())
+        title.append(": ").append(m_title);
+
+    QPalette pal = palette();
+    QPainter p(this);
+    p.fillRect(event->rect(), pal.color(QPalette::Highlight));
+
+    if (m_progress > 0) {
+
+        QRect box = rect();
+        box.setLeft(16);
+        box.setWidth(width() - box.left() - 110);
+
+        p.setPen(pal.color(QPalette::HighlightedText));
+        p.setOpacity(0.8);
+        p.drawText(box, Qt::AlignLeft + Qt::AlignVCenter, title);
+
+        int x = width() - 100 - 5;
+        int y = 1;
+        int h = height() - 4;
+
+        p.setOpacity(1.0);
+        p.setBrush(Qt::NoBrush);
+        p.setPen(pal.color(QPalette::HighlightedText));
+        p.drawRect(x, y, 100, h);
+        p.setPen(Qt::NoPen);
+        p.setBrush(pal.color(QPalette::HighlightedText));
+        p.drawRect(x, y, m_progress, h);
+    } else {
+
+        QRect box = rect();
+        box.setLeft(16);
+        box.setWidth(width() - box.left() - 5);
+        p.setPen(pal.color(QPalette::HighlightedText));
+        p.drawText(box, Qt::AlignLeft + Qt::AlignVCenter, title);
+    }
+
+    p.end();
+}
Index: trunk/demos/embedded/anomaly/src/TitleBar.h
===================================================================
--- trunk/demos/embedded/anomaly/src/TitleBar.h	(revision 561)
+++ trunk/demos/embedded/anomaly/src/TitleBar.h	(revision 561)
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef TITLEBAR_H
+#define TITLEBAR_H
+
+#include <QWidget>
+
+class TitleBar : public QWidget
+{
+    Q_OBJECT
+
+public:
+    TitleBar(QWidget *parent = 0);
+
+    void setHost(const QString &host);
+    void setTitle(const QString &title);
+    void setProgress(int percent);
+
+    QSize sizeHint() const;
+    QSize minimumSizeHint() const;
+
+protected:
+    void paintEvent(QPaintEvent *event);
+
+private:
+    QString m_host;
+    QString m_title;
+    int m_progress;
+};
+
+#endif // TITLEBAR_H
Index: trunk/demos/embedded/anomaly/src/ZoomStrip.cpp
===================================================================
--- trunk/demos/embedded/anomaly/src/ZoomStrip.cpp	(revision 561)
+++ trunk/demos/embedded/anomaly/src/ZoomStrip.cpp	(revision 561)
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "ZoomStrip.h"
+
+#include <QtCore>
+#include <QtGui>
+
+ZoomStrip::ZoomStrip(QWidget *parent)
+    : QWidget(parent)
+{
+    zoomInPixmap.load(":/images/list-add.png");
+    zoomOutPixmap.load(":/images/list-remove.png");
+}
+
+QSize ZoomStrip::sizeHint() const
+{
+    return minimumSizeHint();
+}
+
+QSize ZoomStrip::minimumSizeHint() const
+{
+    return QSize(48, 96);
+}
+
+void ZoomStrip::mousePressEvent(QMouseEvent *event)
+{
+    if (event->pos().y() < height() / 2)
+        emit zoomInClicked();
+    else
+        emit zoomOutClicked();
+}
+
+void ZoomStrip::paintEvent(QPaintEvent *event)
+{
+    int w = width();
+    int s = (w - zoomInPixmap.width()) / 2;
+
+    QPainter p(this);
+    p.fillRect(event->rect(), QColor(128, 128, 128, 128));
+    p.drawPixmap(s, s, zoomInPixmap);
+    p.drawPixmap(s, s + w, zoomOutPixmap);
+    p.end();
+}
Index: trunk/demos/embedded/anomaly/src/ZoomStrip.h
===================================================================
--- trunk/demos/embedded/anomaly/src/ZoomStrip.h	(revision 561)
+++ trunk/demos/embedded/anomaly/src/ZoomStrip.h	(revision 561)
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ZOOMSTRIP_H
+#define ZOOMSTRIP_H
+
+#include <QWidget>
+
+class ZoomStrip : public QWidget
+{
+    Q_OBJECT
+
+public:
+    ZoomStrip(QWidget *parent = 0);
+
+    QSize sizeHint() const;
+    QSize minimumSizeHint() const;
+
+signals:
+    void zoomInClicked();
+    void zoomOutClicked();
+
+protected:
+    void paintEvent(QPaintEvent *event);
+    void mousePressEvent(QMouseEvent *event);
+
+private:
+    QPixmap zoomInPixmap;
+    QPixmap zoomOutPixmap;
+};
+
+#endif // ZOOMSTRIP_H
Index: trunk/demos/embedded/anomaly/src/anomaly.qrc
===================================================================
--- trunk/demos/embedded/anomaly/src/anomaly.qrc	(revision 561)
+++ trunk/demos/embedded/anomaly/src/anomaly.qrc	(revision 561)
@@ -0,0 +1,9 @@
+<RCC>
+    <qresource prefix="/" >
+        <file>images/go-next.png</file>
+        <file>images/go-previous.png</file>
+        <file>images/edit-find.png</file>
+        <file>images/list-add.png</file>
+        <file>images/list-remove.png</file>
+    </qresource>
+</RCC>
Index: trunk/demos/embedded/anomaly/src/flickcharm.cpp
===================================================================
--- trunk/demos/embedded/anomaly/src/flickcharm.cpp	(revision 561)
+++ trunk/demos/embedded/anomaly/src/flickcharm.cpp	(revision 561)
@@ -0,0 +1,335 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "flickcharm.h"
+
+#include <QAbstractScrollArea>
+#include <QApplication>
+#include <QBasicTimer>
+#include <QEvent>
+#include <QHash>
+#include <QList>
+#include <QMouseEvent>
+#include <QScrollBar>
+#include <QWebFrame>
+#include <QWebView>
+
+#include <QDebug>
+
+struct FlickData {
+    typedef enum { Steady, Pressed, ManualScroll, AutoScroll, Stop } State;
+    State state;
+    QWidget *widget;
+    QPoint pressPos;
+    QPoint offset;
+    QPoint dragPos;
+    QPoint speed;
+    QList<QEvent*> ignored;
+};
+
+class FlickCharmPrivate
+{
+public:
+    QHash<QWidget*, FlickData*> flickData;
+    QBasicTimer ticker;
+};
+
+FlickCharm::FlickCharm(QObject *parent): QObject(parent)
+{
+    d = new FlickCharmPrivate;
+}
+
+FlickCharm::~FlickCharm()
+{
+    delete d;
+}
+
+void FlickCharm::activateOn(QWidget *widget)
+{
+    QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea*>(widget);
+    if (scrollArea) {
+        scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+        scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+
+        QWidget *viewport = scrollArea->viewport();
+
+        viewport->installEventFilter(this);
+        scrollArea->installEventFilter(this);
+
+        d->flickData.remove(viewport);
+        d->flickData[viewport] = new FlickData;
+        d->flickData[viewport]->widget = widget;
+        d->flickData[viewport]->state = FlickData::Steady;
+
+        return;
+    }
+
+    QWebView *webView = qobject_cast<QWebView*>(widget);
+    if (webView) {
+        QWebFrame *frame = webView->page()->mainFrame();
+        frame->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
+        frame->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
+
+        webView->installEventFilter(this);
+
+        d->flickData.remove(webView);
+        d->flickData[webView] = new FlickData;
+        d->flickData[webView]->widget = webView;
+        d->flickData[webView]->state = FlickData::Steady;
+
+        return;
+    }
+
+    qWarning() << "FlickCharm only works on QAbstractScrollArea (and derived classes)";
+    qWarning() << "or QWebView (and derived classes)";
+}
+
+void FlickCharm::deactivateFrom(QWidget *widget)
+{
+    QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea*>(widget);
+    if (scrollArea) {
+        QWidget *viewport = scrollArea->viewport();
+
+        viewport->removeEventFilter(this);
+        scrollArea->removeEventFilter(this);
+
+        delete d->flickData[viewport];
+        d->flickData.remove(viewport);
+
+        return;
+    }
+
+    QWebView *webView = qobject_cast<QWebView*>(widget);
+    if (webView) {
+        webView->removeEventFilter(this);
+
+        delete d->flickData[webView];
+        d->flickData.remove(webView);
+
+        return;
+    }
+}
+
+static QPoint scrollOffset(QWidget *widget)
+{
+    int x = 0, y = 0;
+
+    QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea*>(widget);
+    if (scrollArea) {
+        x = scrollArea->horizontalScrollBar()->value();
+        y = scrollArea->verticalScrollBar()->value();
+    }
+
+    QWebView *webView = qobject_cast<QWebView*>(widget);
+    if (webView) {
+        QWebFrame *frame = webView->page()->mainFrame();
+        x = frame->evaluateJavaScript("window.scrollX").toInt();
+        y = frame->evaluateJavaScript("window.scrollY").toInt();
+    }
+
+    return QPoint(x, y);
+}
+
+static void setScrollOffset(QWidget *widget, const QPoint &p)
+{
+    QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea*>(widget);
+    if (scrollArea) {
+        scrollArea->horizontalScrollBar()->setValue(p.x());
+        scrollArea->verticalScrollBar()->setValue(p.y());
+    }
+
+    QWebView *webView = qobject_cast<QWebView*>(widget);
+    QWebFrame *frame = webView ? webView->page()->mainFrame() : 0;
+    if (frame)
+        frame->evaluateJavaScript(QString("window.scrollTo(%1,%2);").arg(p.x()).arg(p.y()));
+}
+
+static QPoint deaccelerate(const QPoint &speed, int a = 1, int max = 64)
+{
+    int x = qBound(-max, speed.x(), max);
+    int y = qBound(-max, speed.y(), max);
+    x = (x == 0) ? x : (x > 0) ? qMax(0, x - a) : qMin(0, x + a);
+    y = (y == 0) ? y : (y > 0) ? qMax(0, y - a) : qMin(0, y + a);
+    return QPoint(x, y);
+}
+
+bool FlickCharm::eventFilter(QObject *object, QEvent *event)
+{
+    if (!object->isWidgetType())
+        return false;
+
+    QEvent::Type type = event->type();
+    if (type != QEvent::MouseButtonPress &&
+            type != QEvent::MouseButtonRelease &&
+            type != QEvent::MouseMove)
+        return false;
+
+    QMouseEvent *mouseEvent = 0;
+    switch (event->type()) {
+        case QEvent::MouseButtonPress:
+        case QEvent::MouseButtonRelease:
+        case QEvent::MouseMove:
+            mouseEvent = static_cast<QMouseEvent*>(event);
+            break;
+    }
+
+    if (!mouseEvent || mouseEvent->modifiers() != Qt::NoModifier)
+        return false;
+
+    QWidget *viewport = qobject_cast<QWidget*>(object);
+    FlickData *data = d->flickData.value(viewport);
+    if (!viewport || !data || data->ignored.removeAll(event))
+        return false;
+
+    bool consumed = false;
+    switch (data->state) {
+
+    case FlickData::Steady:
+        if (mouseEvent->type() == QEvent::MouseButtonPress)
+            if (mouseEvent->buttons() == Qt::LeftButton) {
+                consumed = true;
+                data->state = FlickData::Pressed;
+                data->pressPos = mouseEvent->pos();
+                data->offset = scrollOffset(data->widget);
+            }
+        break;
+
+    case FlickData::Pressed:
+        if (mouseEvent->type() == QEvent::MouseButtonRelease) {
+            consumed = true;
+            data->state = FlickData::Steady;
+
+            QMouseEvent *event1 = new QMouseEvent(QEvent::MouseButtonPress,
+                                                  data->pressPos, Qt::LeftButton,
+                                                  Qt::LeftButton, Qt::NoModifier);
+            QMouseEvent *event2 = new QMouseEvent(*mouseEvent);
+
+            data->ignored << event1;
+            data->ignored << event2;
+            QApplication::postEvent(object, event1);
+            QApplication::postEvent(object, event2);
+        }
+        if (mouseEvent->type() == QEvent::MouseMove) {
+            consumed = true;
+            data->state = FlickData::ManualScroll;
+            data->dragPos = QCursor::pos();
+            if (!d->ticker.isActive())
+                d->ticker.start(20, this);
+        }
+        break;
+
+    case FlickData::ManualScroll:
+        if (mouseEvent->type() == QEvent::MouseMove) {
+            consumed = true;
+            QPoint delta = mouseEvent->pos() - data->pressPos;
+            setScrollOffset(data->widget, data->offset - delta);
+        }
+        if (mouseEvent->type() == QEvent::MouseButtonRelease) {
+            consumed = true;
+            data->state = FlickData::AutoScroll;
+        }
+        break;
+
+    case FlickData::AutoScroll:
+        if (mouseEvent->type() == QEvent::MouseButtonPress) {
+            consumed = true;
+            data->state = FlickData::Stop;
+            data->speed = QPoint(0, 0);
+            data->pressPos = mouseEvent->pos();
+            data->offset = scrollOffset(data->widget);
+        }
+        if (mouseEvent->type() == QEvent::MouseButtonRelease) {
+            consumed = true;
+            data->state = FlickData::Steady;
+            data->speed = QPoint(0, 0);
+        }
+        break;
+
+    case FlickData::Stop:
+        if (mouseEvent->type() == QEvent::MouseButtonRelease) {
+            consumed = true;
+            data->state = FlickData::Steady;
+        }
+        if (mouseEvent->type() == QEvent::MouseMove) {
+            consumed = true;
+            data->state = FlickData::ManualScroll;
+            data->dragPos = QCursor::pos();
+            if (!d->ticker.isActive())
+                d->ticker.start(20, this);
+        }
+        break;
+
+    default:
+        break;
+    }
+
+    return consumed;
+}
+
+void FlickCharm::timerEvent(QTimerEvent *event)
+{
+    int count = 0;
+    QHashIterator<QWidget*, FlickData*> item(d->flickData);
+    while (item.hasNext()) {
+        item.next();
+        FlickData *data = item.value();
+
+        if (data->state == FlickData::ManualScroll) {
+            count++;
+            data->speed = QCursor::pos() - data->dragPos;
+            data->dragPos = QCursor::pos();
+        }
+
+        if (data->state == FlickData::AutoScroll) {
+            count++;
+            data->speed = deaccelerate(data->speed);
+            QPoint p = scrollOffset(data->widget);
+            setScrollOffset(data->widget, p - data->speed);
+            if (data->speed == QPoint(0, 0))
+                data->state = FlickData::Steady;
+        }
+    }
+
+    if (!count)
+        d->ticker.stop();
+
+    QObject::timerEvent(event);
+}
Index: trunk/demos/embedded/anomaly/src/flickcharm.h
===================================================================
--- trunk/demos/embedded/anomaly/src/flickcharm.h	(revision 561)
+++ trunk/demos/embedded/anomaly/src/flickcharm.h	(revision 561)
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demos of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef FLICKCHARM_H
+#define FLICKCHARM_H
+
+#include <QObject>
+
+class FlickCharmPrivate;
+class QWidget;
+
+class FlickCharm: public QObject
+{
+    Q_OBJECT
+public:
+    FlickCharm(QObject *parent = 0);
+    ~FlickCharm();
+    void activateOn(QWidget *widget);
+    void deactivateFrom(QWidget *widget);
+    bool eventFilter(QObject *object, QEvent *event);
+
+protected:
+    void timerEvent(QTimerEvent *event);
+
+private:
+    FlickCharmPrivate *d;
+};
+
+#endif // FLICKCHARM_H
Index: trunk/demos/embedded/desktopservices/contenttab.cpp
===================================================================
--- trunk/demos/embedded/desktopservices/contenttab.cpp	(revision 561)
+++ trunk/demos/embedded/desktopservices/contenttab.cpp	(revision 561)
@@ -0,0 +1,165 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+// EXTERNAL INCLUDES
+#include <QKeyEvent>
+#include <QMessageBox>
+#include <QListWidget>
+#include <QVBoxLayout>
+#include <QFileInfoList>
+#include <QListWidgetItem>
+
+// INTERNAL INCLUDES
+
+// CLASS HEADER
+#include "contenttab.h"
+
+
+// CONSTRUCTORS & DESTRUCTORS
+ContentTab::ContentTab(QWidget *parent) :
+        QListWidget(parent)
+{
+    setDragEnabled(false);
+    setIconSize(QSize(45, 45));
+}
+
+ContentTab::~ContentTab()
+{
+}
+
+// NEW PUBLIC METHODS
+void ContentTab::init(const QDesktopServices::StandardLocation &location,
+                      const QString &filter,
+                      const QString &icon)
+{
+    setContentDir(location);
+    QStringList filterList;
+    filterList = filter.split(";");
+    m_ContentDir.setNameFilters(filterList);
+    setIcon(icon);
+
+    connect(this, SIGNAL(itemClicked(QListWidgetItem*)),
+            this, SLOT(openItem(QListWidgetItem*)));
+
+    populateListWidget();
+}
+
+// NEW PROTECTED METHODS
+void ContentTab::setContentDir(const QDesktopServices::StandardLocation &location)
+{
+    m_ContentDir.setPath(QDesktopServices::storageLocation(location));
+}
+
+void ContentTab::setIcon(const QString &icon)
+{
+    m_Icon = QIcon(icon);
+}
+
+void ContentTab::populateListWidget()
+{
+    QFileInfoList fileList = m_ContentDir.entryInfoList(QDir::Files, QDir::Time);
+    foreach(QFileInfo item, fileList) {
+        new QListWidgetItem(m_Icon, itemName(item), this);
+    }
+}
+
+QString ContentTab::itemName(const QFileInfo &item)
+{
+    return QString(item.baseName() + "." + item.completeSuffix());
+}
+
+QUrl ContentTab::itemUrl(QListWidgetItem *item)
+{
+    return QUrl("file:///" + m_ContentDir.absolutePath() + "/" + item->text());
+}
+
+void ContentTab::keyPressEvent(QKeyEvent *event)
+{
+    switch (event->key()) {
+    case Qt::Key_Up:
+        if (currentRow() == 0) {
+            setCurrentRow(count() - 1);
+        } else {
+            setCurrentRow(currentRow() - 1);
+        }
+        break;
+    case Qt::Key_Down:
+        if (currentRow() == (count() - 1)) {
+            setCurrentRow(0);
+        } else {
+            setCurrentRow(currentRow() + 1);
+        }
+        break;
+    case Qt::Key_Select:
+        openItem(currentItem());
+    default:
+        QListWidget::keyPressEvent(event);
+        break;
+    }
+}
+
+void ContentTab::handleErrorInOpen(QListWidgetItem *item)
+{
+    Q_UNUSED(item);
+    QMessageBox::warning(this, tr("Operation Failed"), tr("Unkown error!"), QMessageBox::Close);
+}
+
+// NEW SLOTS
+void ContentTab::openItem(QListWidgetItem *item)
+{
+#if defined(Q_OS_SYMBIAN) && defined(Q_CC_NOKIAX86)
+    // Opening music files doesn't work in Symbian emulator and in some SDKs freezes the
+    // emulator entirely, so prevent it.
+    QStringList nameFilters = m_ContentDir.nameFilters();
+    if (nameFilters.contains("*.mp3")) {
+        QMessageBox::warning(this, tr("Operation Failed"), tr("Action not supported in emulator."),
+                             QMessageBox::Close);
+    } else
+#endif
+    {
+        bool ret = QDesktopServices::openUrl(itemUrl(item));
+        if (!ret)
+            handleErrorInOpen(item);
+    }
+}
+
+
+// End of File
Index: trunk/demos/embedded/desktopservices/contenttab.h
===================================================================
--- trunk/demos/embedded/desktopservices/contenttab.h	(revision 561)
+++ trunk/demos/embedded/desktopservices/contenttab.h	(revision 561)
@@ -0,0 +1,101 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef CONTENTTAB_H_
+#define CONTENTTAB_H_
+
+// EXTERNAL INCLUDES
+#include <QDir>
+#include <QUrl>
+#include <QIcon>
+#include <QFileInfo>
+#include <QListWidget>
+#include <QDesktopServices>
+
+// INTERNAL INCLUDES
+
+// FORWARD DECLARATIONS
+QT_BEGIN_NAMESPACE
+class QListWidgetItem;
+QT_END_NAMESPACE
+
+// CLASS DECLARATION
+
+/**
+* ContentTab class.
+*
+* This class implements general purpose tab for media files.
+*/
+class ContentTab : public QListWidget
+{
+    Q_OBJECT
+
+public:         // Constructors & Destructors
+    ContentTab(QWidget *parent);
+    virtual ~ContentTab();
+
+public:         // New Methods
+    virtual void init(const QDesktopServices::StandardLocation &location,
+                      const QString &filter,
+                      const QString &icon);
+
+protected:      // New Methods
+    virtual void setContentDir(const QDesktopServices::StandardLocation &location);
+    virtual void setIcon(const QString &icon);
+    virtual void populateListWidget();
+    virtual QString itemName(const QFileInfo &item);
+    virtual QUrl itemUrl(QListWidgetItem *item);
+    virtual void handleErrorInOpen(QListWidgetItem *item);
+protected:
+    void keyPressEvent(QKeyEvent *event);
+
+public slots:   // New Slots
+    virtual void openItem(QListWidgetItem *item);
+
+protected:     // Owned variables
+    QDir m_ContentDir;
+    QIcon m_Icon;
+};
+
+
+#endif // CONTENTTAB_H_
+
+// End of File
Index: trunk/demos/embedded/desktopservices/desktopservices.pro
===================================================================
--- trunk/demos/embedded/desktopservices/desktopservices.pro	(revision 561)
+++ trunk/demos/embedded/desktopservices/desktopservices.pro	(revision 561)
@@ -0,0 +1,32 @@
+TEMPLATE = app
+TARGET =
+INCLUDEPATH += .
+
+HEADERS += desktopwidget.h contenttab.h linktab.h
+SOURCES += desktopwidget.cpp contenttab.cpp linktab.cpp main.cpp
+
+RESOURCES += desktopservices.qrc
+
+music.sources = data/*.mp3 data/*.wav
+image.sources = data/*.png
+
+target.path = $$[QT_INSTALL_DEMOS]/embedded/desktopservices
+sources.files = $$SOURCES $$HEADERS $$RESOURCES *.pro
+sources.path = $$[QT_INSTALL_DEMOS]/embedded/desktopservices
+
+symbian {
+    TARGET.UID3 = 0xA000C611
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+    ICON = ./resources/heart.svg
+    music.path = /data/sounds/
+    image.path = /data/images/
+    DEPLOYMENT += music image
+}
+
+wince*{
+    music.path = "\My Documents\My Music"
+    image.path = "\My Documents\My Pictures"
+    DEPLOYMENT += music image
+}
+
+INSTALLS += target sources
Index: trunk/demos/embedded/desktopservices/desktopservices.qrc
===================================================================
--- trunk/demos/embedded/desktopservices/desktopservices.qrc	(revision 561)
+++ trunk/demos/embedded/desktopservices/desktopservices.qrc	(revision 561)
@@ -0,0 +1,8 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/">
+    <file>resources/music.png</file>
+    <file>resources/photo.png</file>
+    <file>resources/browser.png</file>
+    <file>resources/message.png</file>
+</qresource>
+</RCC>
Index: trunk/demos/embedded/desktopservices/desktopwidget.cpp
===================================================================
--- trunk/demos/embedded/desktopservices/desktopwidget.cpp	(revision 561)
+++ trunk/demos/embedded/desktopservices/desktopwidget.cpp	(revision 561)
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+// EXTERNAL INCLUDES
+#include <QTabWidget>
+#include <QVBoxLayout>
+#include <QDesktopServices>
+
+// INTERNAL INCLUDES
+#include "linktab.h"
+#include "contenttab.h"
+
+// CLASS HEADER
+#include "desktopwidget.h"
+
+// CONSTRUCTORS & DESTRUCTORS
+DesktopWidget::DesktopWidget(QWidget *parent) : QWidget(parent)
+
+{
+    QTabWidget *tabWidget = new QTabWidget(this);
+
+    // Images
+    ContentTab* imageTab = new ContentTab(tabWidget);
+    imageTab->init(QDesktopServices::PicturesLocation,
+                   "*.png;*.jpg;*.jpeg;*.bmp;*.gif",
+                   ":/resources/photo.png");
+    tabWidget->addTab(imageTab, tr("Images"));
+
+    // Music
+    ContentTab* musicTab = new ContentTab(tabWidget);
+    musicTab->init(QDesktopServices::MusicLocation,
+                   "*.wav;*.mp3;*.mp4",
+                   ":/resources/music.png");
+    tabWidget->addTab(musicTab, tr("Music"));
+
+    // Links
+    LinkTab* othersTab = new LinkTab(tabWidget);;
+    // Given icon file will be overriden by LinkTab
+    othersTab->init(QDesktopServices::PicturesLocation, "", "");
+    tabWidget->addTab(othersTab, tr("Links"));
+
+    // Layout
+    QVBoxLayout *layout = new QVBoxLayout;
+    layout->addWidget(tabWidget);
+    setLayout(layout);
+}
+
+DesktopWidget::~DesktopWidget()
+{
+}
+
+// End of file
Index: trunk/demos/embedded/desktopservices/desktopwidget.h
===================================================================
--- trunk/demos/embedded/desktopservices/desktopwidget.h	(revision 561)
+++ trunk/demos/embedded/desktopservices/desktopwidget.h	(revision 561)
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef DESKTOPWIDGET_H_
+#define DESKTOPWIDGET_H_
+
+// EXTERNAL INCLUDES
+#include <QWidget>
+
+// INTERNAL INCLUDES
+
+// FORWARD DECLARATIONS
+QT_BEGIN_NAMESPACE
+class QTabWidget;
+QT_END_NAMESPACE
+
+// CLASS DECLARATION
+/**
+* DesktopWidget class.
+*
+* Implements the main top level widget for QDesktopServices demo app.
+*/
+class DesktopWidget : public QWidget
+{
+    Q_OBJECT
+
+public:        // Constructors & Destructors
+    DesktopWidget(QWidget *parent);
+    ~DesktopWidget();
+
+};
+
+#endif // DESKTOPWIDGET_H_
+
+// End of file
Index: trunk/demos/embedded/desktopservices/linktab.cpp
===================================================================
--- trunk/demos/embedded/desktopservices/linktab.cpp	(revision 561)
+++ trunk/demos/embedded/desktopservices/linktab.cpp	(revision 561)
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+// EXTERNAL INCLUDES
+#include <QUrl>
+#include <QMessageBox>
+#include <QListWidgetItem>
+
+// INTERNAL INCLUDES
+
+// CLASS HEADER
+#include "linktab.h"
+
+LinkTab::LinkTab(QWidget *parent) :
+        ContentTab(parent)
+{
+}
+
+LinkTab::~LinkTab()
+{
+}
+
+void LinkTab::populateListWidget()
+{
+    m_WebItem = new QListWidgetItem(QIcon(":/resources/browser.png"), tr("Launch Browser"), this);
+    m_MailToItem = new QListWidgetItem(QIcon(":/resources/message.png"), tr("New e-mail"), this);
+}
+
+QUrl LinkTab::itemUrl(QListWidgetItem *item)
+{
+    if (m_WebItem == item) {
+        return QUrl(tr("http://qt.nokia.com"));
+    } else if (m_MailToItem == item) {
+        return QUrl(tr("mailto:qts60-feedback@trolltech.com?subject=QtS60 feedback&body=Hello"));
+    } else {
+        // We should never endup here
+        Q_ASSERT(false);
+        return QUrl();
+    }
+}
+void LinkTab::handleErrorInOpen(QListWidgetItem *item)
+{
+    if (m_MailToItem == item) {
+        QMessageBox::warning(this, tr("Operation Failed"), tr("Please check that you have\ne-mail account defined."), QMessageBox::Close);
+    } else {
+        ContentTab::handleErrorInOpen(item);
+    }
+}
+
+// End of file
Index: trunk/demos/embedded/desktopservices/linktab.h
===================================================================
--- trunk/demos/embedded/desktopservices/linktab.h	(revision 561)
+++ trunk/demos/embedded/desktopservices/linktab.h	(revision 561)
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef LINKTAB_H_
+#define LINKTAB_H_
+
+// EXTERNAL INCLUDES
+
+// INTERNAL INCLUDES
+#include "contenttab.h"
+
+// FORWARD DECLARATIONS
+QT_BEGIN_NAMESPACE
+class QWidget;
+class QListWidgetItem;
+QT_END_NAMESPACE
+
+// CLASS DECLARATION
+
+/**
+* LinkTab class.
+*
+* This class implements tab for opening http and mailto links.
+*/
+class LinkTab : public ContentTab
+{
+    Q_OBJECT
+
+public:     // Constructors & Destructors
+    LinkTab(QWidget *parent);
+    ~LinkTab();
+
+protected:  // Derived Methods
+    virtual void populateListWidget();
+    virtual QUrl itemUrl(QListWidgetItem *item);
+    virtual void handleErrorInOpen(QListWidgetItem *item);
+
+private:    // Used variables
+    QListWidgetItem *m_WebItem;
+    QListWidgetItem *m_MailToItem;
+
+private:    // Owned variables
+
+};
+
+#endif // CONTENTTAB_H_
+
+// End of File
Index: trunk/demos/embedded/desktopservices/main.cpp
===================================================================
--- trunk/demos/embedded/desktopservices/main.cpp	(revision 561)
+++ trunk/demos/embedded/desktopservices/main.cpp	(revision 561)
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QApplication>
+#include "desktopwidget.h"
+
+int main(int argc, char *argv[])
+{
+    Q_INIT_RESOURCE(desktopservices);
+
+    QApplication app(argc, argv);
+    DesktopWidget* myWidget = new DesktopWidget(0);
+    myWidget->showMaximized();
+
+    return app.exec();
+}
+
+// End of file
Index: trunk/demos/embedded/desktopservices/resources/heart.svg
===================================================================
--- trunk/demos/embedded/desktopservices/resources/heart.svg	(revision 561)
+++ trunk/demos/embedded/desktopservices/resources/heart.svg	(revision 561)
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) --><svg viewBox="100 200 550 500" height="595.27559pt" id="svg1" inkscape:version="0.40+cvs" sodipodi:docbase="C:\Documents and Settings\Jon Phillips\My Documents\projects\clipart-project\submissions" sodipodi:docname="heart-left-highlight.svg" sodipodi:version="0.32" width="595.27559pt" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg">
+<metadata>
+<rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+<cc:Work rdf:about="">
+<dc:title>Heart Left-Highlight</dc:title>
+<dc:description>This is a normal valentines day heart.</dc:description>
+<dc:subject>
+<rdf:Bag>
+<rdf:li>holiday</rdf:li>
+<rdf:li>valentines</rdf:li>
+<rdf:li></rdf:li>
+<rdf:li>valentine</rdf:li>
+<rdf:li>hash(0x8a091c0)</rdf:li>
+<rdf:li>hash(0x8a0916c)</rdf:li>
+<rdf:li>signs_and_symbols</rdf:li>
+<rdf:li>hash(0x8a091f0)</rdf:li>
+<rdf:li>day</rdf:li>
+</rdf:Bag>
+</dc:subject>
+<dc:publisher>
+<cc:Agent rdf:about="http://www.openclipart.org">
+<dc:title>Jon Phillips</dc:title>
+</cc:Agent>
+</dc:publisher>
+<dc:creator>
+<cc:Agent>
+<dc:title>Jon Phillips</dc:title>
+</cc:Agent>
+</dc:creator>
+<dc:rights>
+<cc:Agent>
+<dc:title>Jon Phillips</dc:title>
+</cc:Agent>
+</dc:rights>
+<dc:date></dc:date>
+<dc:format>image/svg+xml</dc:format>
+<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+<cc:license rdf:resource="http://web.resource.org/cc/PublicDomain"/>
+<dc:language>en</dc:language>
+</cc:Work>
+<cc:License rdf:about="http://web.resource.org/cc/PublicDomain">
+<cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
+<cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
+<cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
+</cc:License>
+</rdf:RDF>
+</metadata>
+<defs id="defs3"/>
+<sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="layer1" inkscape:cx="549.40674" inkscape:cy="596.00159" inkscape:document-units="px" inkscape:guide-bbox="true" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="615" inkscape:window-width="866" inkscape:window-x="88" inkscape:window-y="116" inkscape:zoom="0.35000000" pagecolor="#ffffff" showguides="true"/>
+<g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1">
+<path d="M 263.41570,235.14588 C 197.17570,235.14588 143.41575,288.90587 143.41575,355.14588 C 143.41575,489.90139 279.34890,525.23318 371.97820,658.45392 C 459.55244,526.05056 600.54070,485.59932 600.54070,355.14588 C 600.54070,288.90588 546.78080,235.14587 480.54070,235.14588 C 432.49280,235.14588 391.13910,263.51631 371.97820,304.33338 C 352.81740,263.51630 311.46370,235.14587 263.41570,235.14588 z " id="path7" sodipodi:nodetypes="ccccccc" style="fill:#e60000;fill-opacity:1.0000000;stroke:#000000;stroke-width:18.700001;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"/>
+<path d="M 265.00000,253.59375 C 207.04033,253.59375 160.00000,300.63407 160.00000,358.59375 C 160.00000,476.50415 278.91857,507.43251 359.96875,624.00000 C 366.52868,614.08205 220.00000,478.47309 220.00000,378.59375 C 220.00000,320.63407 267.04033,273.59375 325.00000,273.59375 C 325.50453,273.59375 325.99718,273.64912 326.50000,273.65625 C 309.22436,261.07286 288.00557,253.59374 265.00000,253.59375 z " id="path220" sodipodi:nodetypes="ccccccc" style="fill:#e6e6e6;fill-opacity:0.64556962;stroke:none;stroke-width:18.700001;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"/>
+</g>
+</svg>
Index: trunk/demos/embedded/digiflip/digiflip.cpp
===================================================================
--- trunk/demos/embedded/digiflip/digiflip.cpp	(revision 561)
+++ trunk/demos/embedded/digiflip/digiflip.cpp	(revision 561)
@@ -0,0 +1,425 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore>
+#include <QtGui>
+
+class Digits: public QWidget
+{
+    Q_OBJECT
+
+public:
+
+    enum {
+        Slide,
+        Flip,
+        Rotate
+    };
+
+    Digits(QWidget *parent)
+        : QWidget(parent)
+        , m_number(0)
+        , m_transition(Slide)
+    {
+        setAttribute(Qt::WA_OpaquePaintEvent, true);
+        setAttribute(Qt::WA_NoSystemBackground, true);
+        connect(&m_animator, SIGNAL(frameChanged(int)), SLOT(update()));
+        m_animator.setFrameRange(0, 100);
+        m_animator.setDuration(600);
+        m_animator.setCurveShape(QTimeLine::EaseInOutCurve);
+    }
+
+    void setTransition(int tr) {
+        m_transition = tr;
+    }
+
+    int transition() const {
+        return m_transition;
+    }
+
+    void setNumber(int n) {
+        if (m_number != n) {
+            m_number = qBound(0, n, 99);
+            preparePixmap();
+            update();
+        }
+    }
+
+    void flipTo(int n) {
+        if (m_number != n) {
+            m_number = qBound(0, n, 99);
+            m_lastPixmap = m_pixmap;
+            preparePixmap();
+            m_animator.stop();
+            m_animator.start();
+        }
+    }
+
+protected:
+
+    void drawFrame(QPainter *p, const QRect &rect) {
+        p->setPen(Qt::NoPen);
+        QLinearGradient gradient(rect.topLeft(), rect.bottomLeft());
+        gradient.setColorAt(0.00, QColor(245, 245, 245));
+        gradient.setColorAt(0.49, QColor(192, 192, 192));
+        gradient.setColorAt(0.51, QColor(245, 245, 245));
+        gradient.setColorAt(1.00, QColor(192, 192, 192));
+        p->setBrush(gradient);
+        QRect r = rect;
+        p->drawRoundedRect(r, 15, 15, Qt::RelativeSize);
+        r.adjust(1, 4, -1, -4);
+        p->setPen(QColor(181, 181, 181));
+        p->setBrush(Qt::NoBrush);
+        p->drawRoundedRect(r, 15, 15, Qt::RelativeSize);
+        p->setPen(QColor(159, 159, 159));
+        int y = rect.top() + rect.height() / 2 - 1;
+        p->drawLine(rect.left(), y, rect.right(), y);
+    }
+
+    QPixmap drawDigits(int n, const QRect &rect) {
+
+        int scaleFactor = 2;
+#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM)
+        if (rect.height() > 240)
+            scaleFactor = 1;
+#endif
+
+        QString str = QString::number(n);
+        if (str.length() == 1)
+            str.prepend("0");
+
+        QFont font;
+        font.setFamily("Helvetica");
+        int fontHeight = scaleFactor * 0.55 * rect.height();
+        font.setPixelSize(fontHeight);
+        font.setBold(true);
+
+        QPixmap pixmap(rect.size() * scaleFactor);
+        pixmap.fill(Qt::transparent);
+
+        QLinearGradient gradient(QPoint(0, 0), QPoint(0, pixmap.height()));
+        gradient.setColorAt(0.00, QColor(128, 128, 128));
+        gradient.setColorAt(0.49, QColor(64, 64, 64));
+        gradient.setColorAt(0.51, QColor(128, 128, 128));
+        gradient.setColorAt(1.00, QColor(16, 16, 16));
+
+        QPainter p;
+        p.begin(&pixmap);
+        p.setFont(font);
+        QPen pen;
+        pen.setBrush(QBrush(gradient));
+        p.setPen(pen);
+        p.drawText(pixmap.rect(), Qt::AlignCenter, str);
+        p.end();
+
+        return pixmap.scaledToWidth(width(), Qt::SmoothTransformation);
+    }
+
+    void preparePixmap() {
+        m_pixmap = QPixmap(size());
+        m_pixmap.fill(Qt::transparent);
+        QPainter p;
+        p.begin(&m_pixmap);
+        p.drawPixmap(0, 0, drawDigits(m_number, rect()));
+        p.end();
+    }
+
+    void resizeEvent(QResizeEvent*) {
+        preparePixmap();
+        update();
+    }
+
+    void paintStatic() {
+        QPainter p(this);
+        p.fillRect(rect(), Qt::black);
+
+        int pad = width() / 10;
+        drawFrame(&p, rect().adjusted(pad, pad, -pad, -pad));
+        p.drawPixmap(0, 0, m_pixmap);
+    }
+
+    void paintSlide() {
+        QPainter p(this);
+        p.fillRect(rect(), Qt::black);
+
+        int pad = width() / 10;
+        QRect fr = rect().adjusted(pad, pad, -pad, -pad);
+        drawFrame(&p, fr);
+        p.setClipRect(fr);
+
+        int y = height() * m_animator.currentFrame() / 100;
+        p.drawPixmap(0, y, m_lastPixmap);
+        p.drawPixmap(0, y - height(), m_pixmap);
+    }
+
+    void paintFlip() {
+        QPainter p(this);
+#if !defined(Q_OS_SYMBIAN) && !defined(Q_OS_WINCE_WM)
+        p.setRenderHint(QPainter::SmoothPixmapTransform, true);
+        p.setRenderHint(QPainter::Antialiasing, true);
+#endif
+        p.fillRect(rect(), Qt::black);
+
+        int hw = width() / 2;
+        int hh = height() / 2;
+
+        // behind is the new pixmap
+        int pad = width() / 10;
+        QRect fr = rect().adjusted(pad, pad, -pad, -pad);
+        drawFrame(&p, fr);
+        p.drawPixmap(0, 0, m_pixmap);
+
+        int index = m_animator.currentFrame();
+
+        if (index <= 50) {
+
+            // the top part of the old pixmap is flipping
+            int angle = -180 * index / 100;
+            QTransform transform;
+            transform.translate(hw, hh);
+            transform.rotate(angle, Qt::XAxis);
+            p.setTransform(transform);
+            drawFrame(&p, fr.adjusted(-hw, -hh, -hw, -hh));
+            p.drawPixmap(-hw, -hh, m_lastPixmap);
+
+            // the bottom part is still the old pixmap
+            p.resetTransform();
+            p.setClipRect(0, hh, width(), hh);
+            drawFrame(&p, fr);
+            p.drawPixmap(0, 0, m_lastPixmap);
+        } else {
+
+            p.setClipRect(0, hh, width(), hh);
+
+            // the bottom part is still the old pixmap
+            drawFrame(&p, fr);
+            p.drawPixmap(0, 0, m_lastPixmap);
+
+            // the bottom part of the new pixmap is flipping
+            int angle = 180 - 180 * m_animator.currentFrame() / 100;
+            QTransform transform;
+            transform.translate(hw, hh);
+            transform.rotate(angle, Qt::XAxis);
+            p.setTransform(transform);
+            drawFrame(&p, fr.adjusted(-hw, -hh, -hw, -hh));
+            p.drawPixmap(-hw, -hh, m_pixmap);
+
+        }
+
+    }
+
+    void paintRotate() {
+        QPainter p(this);
+
+        int pad = width() / 10;
+        QRect fr = rect().adjusted(pad, pad, -pad, -pad);
+        drawFrame(&p, fr);
+        p.setClipRect(fr);
+
+        int angle1 = -180 * m_animator.currentFrame() / 100;
+        int angle2 = 180 - 180 * m_animator.currentFrame() / 100;
+        int angle = (m_animator.currentFrame() <= 50) ? angle1 : angle2;
+        QPixmap pix = (m_animator.currentFrame() <= 50) ? m_lastPixmap : m_pixmap;
+
+        QTransform transform;
+        transform.translate(width() / 2, height() / 2);
+        transform.rotate(angle, Qt::XAxis);
+
+        p.setTransform(transform);
+        p.setRenderHint(QPainter::SmoothPixmapTransform, true);
+        p.drawPixmap(-width() / 2, -height() / 2, pix);
+    }
+
+    void paintEvent(QPaintEvent *event) {
+        Q_UNUSED(event);
+        if (m_animator.state() == QTimeLine::Running) {
+            if (m_transition == Slide)
+                paintSlide();
+            if (m_transition == Flip)
+                paintFlip();
+            if (m_transition == Rotate)
+                paintRotate();
+        } else {
+            paintStatic();
+        }
+    }
+
+private:
+    int m_number;
+    int m_transition;
+    QPixmap m_pixmap;
+    QPixmap m_lastPixmap;
+    QTimeLine m_animator;
+};
+
+class DigiFlip : public QMainWindow
+{
+    Q_OBJECT
+
+public:
+    DigiFlip(QWidget *parent = 0)
+        : QMainWindow(parent)
+    {
+        m_hour = new Digits(this);
+        m_hour->show();
+        m_minute = new Digits(this);
+        m_minute->show();
+
+        QPalette pal = palette();
+        pal.setColor(QPalette::Window, Qt::black);
+        setPalette(pal);
+
+        m_ticker.start(1000, this);
+        QTime t = QTime::currentTime();
+        m_hour->setNumber(t.hour());
+        m_minute->setNumber(t.minute());
+        updateTime();
+
+        QAction *slideAction = new QAction("&Slide", this);
+        QAction *flipAction = new QAction("&Flip", this);
+        QAction *rotateAction = new QAction("&Rotate", this);
+        connect(slideAction, SIGNAL(triggered()), SLOT(chooseSlide()));
+        connect(flipAction, SIGNAL(triggered()), SLOT(chooseFlip()));
+        connect(rotateAction, SIGNAL(triggered()), SLOT(chooseRotate()));
+#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM)
+        menuBar()->addAction(slideAction);
+        menuBar()->addAction(flipAction);
+        menuBar()->addAction(rotateAction);
+#else
+        addAction(slideAction);
+        addAction(flipAction);
+        addAction(rotateAction);
+        setContextMenuPolicy(Qt::ActionsContextMenu);
+#endif
+    }
+
+    void updateTime() {
+        QTime t = QTime::currentTime();
+        m_hour->flipTo(t.hour());
+        m_minute->flipTo(t.minute());
+        QString str = t.toString("hh:mm:ss");
+        str.prepend(": ");
+        if (m_hour->transition() == Digits::Slide)
+            str.prepend("Slide");
+        if (m_hour->transition() == Digits::Flip)
+            str.prepend("Flip");
+        if (m_hour->transition() == Digits::Rotate)
+            str.prepend("Rotate");
+        setWindowTitle(str);
+    }
+
+    void switchTransition(int delta) {
+        int i = (m_hour->transition() + delta + 3) % 3;
+        m_hour->setTransition(i);
+        m_minute->setTransition(i);
+        updateTime();
+    }
+
+protected:
+    void resizeEvent(QResizeEvent*) {
+        int digitsWidth = width() / 2;
+        int digitsHeight = digitsWidth * 1.2;
+
+        int y = (height() - digitsHeight) / 3;
+
+        m_hour->resize(digitsWidth, digitsHeight);
+        m_hour->move(0, y);
+
+        m_minute->resize(digitsWidth, digitsHeight);
+        m_minute->move(width() / 2, y);
+    }
+
+    void timerEvent(QTimerEvent*) {
+        updateTime();
+    }
+
+    void keyPressEvent(QKeyEvent *event) {
+        if (event->key() == Qt::Key_Right) {
+            switchTransition(1);
+            event->accept();
+        }
+        if (event->key() == Qt::Key_Left) {
+            switchTransition(-1);
+            event->accept();
+        }
+    }
+
+private slots:
+    void chooseSlide() {
+        m_hour->setTransition(0);
+        m_minute->setTransition(0);
+        updateTime();
+    }
+
+    void chooseFlip() {
+        m_hour->setTransition(1);
+        m_minute->setTransition(1);
+        updateTime();
+    }
+
+    void chooseRotate() {
+        m_hour->setTransition(2);
+        m_minute->setTransition(2);
+        updateTime();
+    }
+
+private:
+    QBasicTimer m_ticker;
+    Digits *m_hour;
+    Digits *m_minute;
+};
+
+#include "digiflip.moc"
+
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+
+    DigiFlip time;
+#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM)
+    time.showMaximized();
+#else
+    time.resize(320, 240);
+    time.show();
+#endif
+
+    return app.exec();
+}
Index: trunk/demos/embedded/digiflip/digiflip.pro
===================================================================
--- trunk/demos/embedded/digiflip/digiflip.pro	(revision 561)
+++ trunk/demos/embedded/digiflip/digiflip.pro	(revision 561)
@@ -0,0 +1,11 @@
+SOURCES = digiflip.cpp
+
+symbian {
+    TARGET.UID3 = 0xA000CF72
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+}
+
+target.path = $$[QT_INSTALL_DEMOS]/embedded/digiflip
+sources.files = $$SOURCES $$HEADERS $$RESOURCES *.pro
+sources.path = $$[QT_INSTALL_DEMOS]/embedded/digiflip
+INSTALLS += target sources
Index: trunk/demos/embedded/embedded.pro
===================================================================
--- trunk/demos/embedded/embedded.pro	(revision 561)
+++ trunk/demos/embedded/embedded.pro	(revision 561)
@@ -0,0 +1,25 @@
+TEMPLATE  = subdirs
+SUBDIRS   = styledemo raycasting flickable digiflip
+
+contains(QT_CONFIG, svg) {
+    SUBDIRS += embeddedsvgviewer \
+               desktopservices
+    !vxworks:!qnx:SUBDIRS += fluidlauncher
+}
+
+SUBDIRS += lightmaps
+SUBDIRS += flightinfo
+contains(QT_CONFIG, svg) {
+    SUBDIRS += weatherinfo
+}
+
+contains(QT_CONFIG, webkit) {
+    SUBDIRS += anomaly
+}
+
+# install
+sources.files = README *.pro
+sources.path = $$[QT_INSTALL_DEMOS]/embedded
+INSTALLS += sources
+
+symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
Index: trunk/demos/embedded/embeddedsvgviewer/embeddedsvgviewer.cpp
===================================================================
--- trunk/demos/embedded/embeddedsvgviewer/embeddedsvgviewer.cpp	(revision 561)
+++ trunk/demos/embedded/embeddedsvgviewer/embeddedsvgviewer.cpp	(revision 561)
@@ -0,0 +1,181 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QPainter>
+#include <QApplication>
+
+#include "embeddedsvgviewer.h"
+
+
+
+EmbeddedSvgViewer::EmbeddedSvgViewer(const QString &filePath)
+{
+    qApp->setStyleSheet(" QSlider:vertical { width: 50px; } \
+                          QSlider::groove:vertical { border: 1px solid black; border-radius: 3px; width: 6px; } \
+                          QSlider::handle:vertical { height: 25px; margin: 0 -22px; image: url(':/files/v-slider-handle.svg'); } \
+                       ");
+
+    m_renderer = new QSvgRenderer(filePath);
+    m_imageSize = m_renderer->viewBox().size();
+
+    m_viewBoxCenter = (QPointF(m_imageSize.width() / qreal(2.0), m_imageSize.height() / qreal(2.0)));
+
+    m_zoomSlider = new QSlider(Qt::Vertical, this);
+    m_zoomSlider->setMaximum(150);
+    m_zoomSlider->setMinimum(1);
+
+    connect(m_zoomSlider, SIGNAL(valueChanged(int)), this, SLOT(setZoom(int)));
+    m_zoomSlider->setValue(100);
+
+    m_quitButton = new QPushButton("Quit", this);
+
+    connect(m_quitButton, SIGNAL(pressed()), QApplication::instance(), SLOT(quit()));
+
+    if (m_renderer->animated())
+        connect(m_renderer, SIGNAL(repaintNeeded()), this, SLOT(update()));
+
+}
+
+void EmbeddedSvgViewer::paintEvent(QPaintEvent *event)
+{
+    Q_UNUSED(event)
+    QPainter painter(this);
+    m_renderer->setViewBox(m_viewBox);
+    m_renderer->render(&painter);
+}
+
+
+void EmbeddedSvgViewer::mouseMoveEvent ( QMouseEvent * event )
+{
+    int incX = int((event->globalX() - m_mousePress.x()) * m_imageScale);
+    int incY = int((event->globalY() - m_mousePress.y()) * m_imageScale);
+
+    QPointF newCenter;
+    newCenter.setX(m_viewBoxCenterOnMousePress.x() - incX);
+    newCenter.setY(m_viewBoxCenterOnMousePress.y() - incY);
+  
+    QRectF newViewBox = getViewBox(newCenter);
+
+
+    // Do a bounded move on the horizontal:
+    if ( (newViewBox.left() >= m_viewBoxBounds.left()) &&
+         (newViewBox.right() <= m_viewBoxBounds.right()) ) 
+    {
+        m_viewBoxCenter.setX(newCenter.x());
+        m_viewBox.setLeft(newViewBox.left());
+        m_viewBox.setRight(newViewBox.right());
+    }
+
+    // do a bounded move on the vertical:
+    if (  (newViewBox.top() >= m_viewBoxBounds.top()) &&
+          (newViewBox.bottom() <= m_viewBoxBounds.bottom()) )
+    {
+        m_viewBoxCenter.setY(newCenter.y());
+        m_viewBox.setTop(newViewBox.top());
+        m_viewBox.setBottom(newViewBox.bottom());
+    }
+
+    update();
+}
+
+void EmbeddedSvgViewer::mousePressEvent ( QMouseEvent * event )
+{
+    m_viewBoxCenterOnMousePress = m_viewBoxCenter;
+    m_mousePress = event->globalPos();
+}
+
+
+QRectF EmbeddedSvgViewer::getViewBox(QPointF viewBoxCenter)
+{
+    QRectF result;
+    result.setLeft(viewBoxCenter.x() - (m_viewBoxSize.width() / 2));
+    result.setTop(viewBoxCenter.y() - (m_viewBoxSize.height() / 2));
+    result.setRight(viewBoxCenter.x() + (m_viewBoxSize.width() / 2));
+    result.setBottom(viewBoxCenter.y() + (m_viewBoxSize.height() / 2));
+    return result;
+}
+
+void EmbeddedSvgViewer::updateImageScale()
+{
+    m_imageScale = qMax( (qreal)m_imageSize.width() / (qreal)width(), 
+                               (qreal)m_imageSize.height() / (qreal)height())*m_zoomLevel;
+
+    m_viewBoxSize.setWidth((qreal)width() * m_imageScale);
+    m_viewBoxSize.setHeight((qreal)height() * m_imageScale);
+}
+
+
+void EmbeddedSvgViewer::resizeEvent ( QResizeEvent * /* event */ )
+{
+    qreal origZoom = m_zoomLevel;
+
+    // Get the new bounds:
+    m_zoomLevel = 1.0;
+    updateImageScale();
+    m_viewBoxBounds = getViewBox(QPointF(m_imageSize.width() / 2.0, m_imageSize.height() / 2.0));
+
+    m_zoomLevel = origZoom;
+    updateImageScale();
+    m_viewBox = getViewBox(m_viewBoxCenter);
+
+    QRect sliderRect;
+    sliderRect.setLeft(width() - m_zoomSlider->sizeHint().width());
+    sliderRect.setRight(width());
+    sliderRect.setTop(height()/4);
+    sliderRect.setBottom(height() - (height()/4));
+    m_zoomSlider->setGeometry(sliderRect);
+}
+
+
+void EmbeddedSvgViewer::setZoom(int newZoom)
+{
+    m_zoomLevel = qreal(newZoom) / qreal(100);
+    
+    updateImageScale();
+    m_viewBox = getViewBox(m_viewBoxCenter);
+
+    update();
+}
+
+
+
+
+
Index: trunk/demos/embedded/embeddedsvgviewer/embeddedsvgviewer.h
===================================================================
--- trunk/demos/embedded/embeddedsvgviewer/embeddedsvgviewer.h	(revision 561)
+++ trunk/demos/embedded/embeddedsvgviewer/embeddedsvgviewer.h	(revision 561)
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef EMBEDDED_SVG_VIEWER_H
+#define EMBEDDED_SVG_VIEWER_H
+
+#include <QWidget>
+#include <QString>
+#include <QSvgRenderer>
+#include <QSize>
+#include <QMouseEvent>
+#include <QSlider>
+#include <QPushButton>
+
+class EmbeddedSvgViewer : public QWidget
+{
+    Q_OBJECT
+public:
+    EmbeddedSvgViewer(const QString& filePath);
+    virtual void paintEvent(QPaintEvent *event);
+    void mouseMoveEvent ( QMouseEvent * event );
+    void mousePressEvent ( QMouseEvent * event );
+    void resizeEvent ( QResizeEvent * event );
+
+public slots:
+    void setZoom(int); // 100 <= newZoom < 0
+
+private:
+    QSvgRenderer* m_renderer;
+    QSlider* m_zoomSlider;
+    QPushButton* m_quitButton;
+    QSize m_imageSize;
+    qreal m_zoomLevel;
+    qreal m_imageScale; // How many Image coords 1 widget pixel is worth
+
+    QRectF m_viewBox;
+    QRectF m_viewBoxBounds;
+    QSizeF m_viewBoxSize;
+    QPointF m_viewBoxCenter;
+    QPointF m_viewBoxCenterOnMousePress;
+    QPoint m_mousePress;
+
+    void updateImageScale();
+    QRectF getViewBox(QPointF viewBoxCenter);
+};
+
+
+
+#endif
Index: trunk/demos/embedded/embeddedsvgviewer/embeddedsvgviewer.pro
===================================================================
--- trunk/demos/embedded/embeddedsvgviewer/embeddedsvgviewer.pro	(revision 561)
+++ trunk/demos/embedded/embeddedsvgviewer/embeddedsvgviewer.pro	(revision 561)
@@ -0,0 +1,21 @@
+TEMPLATE = app
+QT += svg
+
+# Input
+HEADERS += embeddedsvgviewer.h
+SOURCES += embeddedsvgviewer.cpp main.cpp
+RESOURCES += embeddedsvgviewer.qrc
+
+target.path = $$[QT_INSTALL_DEMOS]/embedded/embeddedsvgviewer
+sources.files = $$SOURCES $$HEADERS $$RESOURCES *.pro *.html *.svg files
+sources.path = $$[QT_INSTALL_DEMOS]/embedded/embeddedsvgviewer
+INSTALLS += target sources
+
+wince* {
+   DEPLOYMENT_PLUGIN += qsvg
+}
+
+symbian {
+    TARGET.UID3 = 0xA000A640
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+}
Index: trunk/demos/embedded/embeddedsvgviewer/embeddedsvgviewer.qrc
===================================================================
--- trunk/demos/embedded/embeddedsvgviewer/embeddedsvgviewer.qrc	(revision 561)
+++ trunk/demos/embedded/embeddedsvgviewer/embeddedsvgviewer.qrc	(revision 561)
@@ -0,0 +1,7 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/">
+    <file>files/v-slider-handle.svg</file>
+    <file>files/default.svg</file>
+</qresource>
+</RCC>
+
Index: trunk/demos/embedded/embeddedsvgviewer/files/default.svg
===================================================================
--- trunk/demos/embedded/embeddedsvgviewer/files/default.svg	(revision 561)
+++ trunk/demos/embedded/embeddedsvgviewer/files/default.svg	(revision 561)
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="400px"
+   height="400px"
+   baseProfile="tiny"
+   id="svg8268"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   sodipodi:docname="simple2.svg"
+   sodipodi:docbase="/nfs/OpenMoko/SVGs"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <metadata
+     id="metadata8283">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs8281" />
+  <sodipodi:namedview
+     inkscape:window-height="917"
+     inkscape:window-width="1324"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     inkscape:zoom="2.1452345"
+     inkscape:cx="185.25"
+     inkscape:cy="214.75"
+     inkscape:window-x="0"
+     inkscape:window-y="30"
+     inkscape:current-layer="svg8268" />
+  <g
+     stroke="DarkBlue"
+     stroke-width="10"
+     id="g8270">
+    <rect
+       fill="blue"
+       fill-opacity="0.5"
+       x="25"
+       y="25"
+       width="175"
+       height="175"
+       id="rect8272" />
+  </g>
+  <circle
+     cx="200"
+     cy="200"
+     r="75"
+     id="circle8274"
+     sodipodi:cx="200"
+     sodipodi:cy="200"
+     sodipodi:rx="75"
+     sodipodi:ry="75"
+     transform="translate(-26.104372,21.909027)"
+     style="fill:#ffff00;fill-opacity:0.5;stroke:#000000" />
+  <polygon
+     fill="green"
+     stroke="black"
+     fill-opacity="0.5"
+     stroke-width="1"
+     points="200,225 350,225 275,350"
+     id="polygon8276" />
+  <path
+     style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0.50196081"
+     d="M 303.7037,50.705207 C 173.88522,56.588264 90.320951,92.710345 162.85059,120.82533 C 211.91719,139.84524 196.63811,214.12391 233.86243,192.59259 C 284.31755,163.4083 299.34345,193.75691 311.11111,187.30159 C 347.88407,167.12924 269.34382,134.85785 303.81608,114.5167 C 394.71183,60.881583 332.47907,46.043712 303.7037,50.705207 z "
+     id="path8289"
+     sodipodi:nodetypes="cssssc" />
+</svg>
Index: trunk/demos/embedded/embeddedsvgviewer/files/v-slider-handle.svg
===================================================================
--- trunk/demos/embedded/embeddedsvgviewer/files/v-slider-handle.svg	(revision 561)
+++ trunk/demos/embedded/embeddedsvgviewer/files/v-slider-handle.svg	(revision 561)
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="50"
+   height="25"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   version="1.0"
+   sodipodi:docbase="/home/tcooksey/Projects/qt-4.4/demos/embedded/embeddedsvgviewer/files"
+   sodipodi:docname="v-slider-handle.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient2158">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop2160" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop2162" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2158"
+       id="linearGradient2164"
+       x1="26.10779"
+       y1="9.1025448"
+       x2="26.10779"
+       y2="-0.01334004"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9876687,0,0,2.5969342,0.3086332,-0.476397)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="12.256878"
+     inkscape:cx="42.920885"
+     inkscape:cy="4.2252457"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     width="50px"
+     height="25px"
+     inkscape:window-width="1282"
+     inkscape:window-height="879"
+     inkscape:window-x="137"
+     inkscape:window-y="30" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:url(#linearGradient2164);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.60153389px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 10.191803,24.254577 C 26.804559,24.254577 25.309299,24.303278 39.985656,24.303278 C 52.503796,24.303278 51.963217,0.91536797 40.722957,0.91536797 C 13.837108,0.91536797 16.298612,0.86901372 10.385089,0.86901372 C -2.0345215,0.86901372 -2.5249912,24.254577 10.191803,24.254577 z "
+       id="path2162"
+       sodipodi:nodetypes="csssc" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#868686;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+       id="path2166"
+       sodipodi:cx="9.4232807"
+       sodipodi:cy="13.169908"
+       sodipodi:rx="2.2436383"
+       sodipodi:ry="1.9580842"
+       d="M 9.4232808,15.127992 A 2.2436383,1.9580842 0 1 1 9.4232808,11.211823 L 9.4232807,13.169908 z"
+       sodipodi:start="1.5707963"
+       sodipodi:end="4.712389"
+       transform="matrix(4.3804554,0,0,2.228386,-25.247974,-16.463284)" />
+  </g>
+</svg>
Index: trunk/demos/embedded/embeddedsvgviewer/main.cpp
===================================================================
--- trunk/demos/embedded/embeddedsvgviewer/main.cpp	(revision 561)
+++ trunk/demos/embedded/embeddedsvgviewer/main.cpp	(revision 561)
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QApplication>
+#include <QDebug>
+
+#include "embeddedsvgviewer.h"
+
+int main(int argc, char** argv)
+{
+    QApplication app(argc, argv);
+    Q_INIT_RESOURCE(embeddedsvgviewer);
+
+    QString filePath;
+
+    if (argc == 1)
+      filePath = QLatin1String(":/files/default.svg");
+    else if (argc == 2)
+      filePath = argv[1];
+    else {
+        qDebug() << QLatin1String("Please specify an svg file!");
+        return -1;
+    }
+
+    EmbeddedSvgViewer viewer(filePath);
+
+    viewer.showFullScreen();
+
+#ifdef QT_KEYPAD_NAVIGATION
+    QApplication::setNavigationMode(Qt::NavigationModeCursorAuto);
+#endif
+    return app.exec();
+} 
Index: trunk/demos/embedded/embeddedsvgviewer/shapes.svg
===================================================================
--- trunk/demos/embedded/embeddedsvgviewer/shapes.svg	(revision 561)
+++ trunk/demos/embedded/embeddedsvgviewer/shapes.svg	(revision 561)
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="400px"
+   height="400px"
+   baseProfile="tiny"
+   id="svg8268"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   sodipodi:docname="simple2.svg"
+   sodipodi:docbase="/nfs/OpenMoko/SVGs"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <metadata
+     id="metadata8283">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs8281" />
+  <sodipodi:namedview
+     inkscape:window-height="917"
+     inkscape:window-width="1324"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     inkscape:zoom="2.1452345"
+     inkscape:cx="185.25"
+     inkscape:cy="214.75"
+     inkscape:window-x="0"
+     inkscape:window-y="30"
+     inkscape:current-layer="svg8268" />
+  <g
+     stroke="DarkBlue"
+     stroke-width="10"
+     id="g8270">
+    <rect
+       fill="blue"
+       fill-opacity="0.5"
+       x="25"
+       y="25"
+       width="175"
+       height="175"
+       id="rect8272" />
+  </g>
+  <circle
+     cx="200"
+     cy="200"
+     r="75"
+     id="circle8274"
+     sodipodi:cx="200"
+     sodipodi:cy="200"
+     sodipodi:rx="75"
+     sodipodi:ry="75"
+     transform="translate(-26.104372,21.909027)"
+     style="fill:#ffff00;fill-opacity:0.5;stroke:#000000" />
+  <polygon
+     fill="green"
+     stroke="black"
+     fill-opacity="0.5"
+     stroke-width="1"
+     points="200,225 350,225 275,350"
+     id="polygon8276" />
+  <path
+     style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:0.50196081"
+     d="M 303.7037,50.705207 C 173.88522,56.588264 90.320951,92.710345 162.85059,120.82533 C 211.91719,139.84524 196.63811,214.12391 233.86243,192.59259 C 284.31755,163.4083 299.34345,193.75691 311.11111,187.30159 C 347.88407,167.12924 269.34382,134.85785 303.81608,114.5167 C 394.71183,60.881583 332.47907,46.043712 303.7037,50.705207 z "
+     id="path8289"
+     sodipodi:nodetypes="cssssc" />
+</svg>
Index: trunk/demos/embedded/embeddedsvgviewer/spheres.svg
===================================================================
--- trunk/demos/embedded/embeddedsvgviewer/spheres.svg	(revision 561)
+++ trunk/demos/embedded/embeddedsvgviewer/spheres.svg	(revision 561)
@@ -0,0 +1,81 @@
+<?xml version="1.0" standalone="no"?>
+<svg width="8cm" height="8cm" viewBox="0 0 400 400"
+    xmlns="http://www.w3.org/2000/svg"
+    xmlns:xlink="http://www.w3.org/1999/xlink/"
+    baseProfile="tiny" version="1.2">
+  <title>Spheres</title>
+  <desc>Gradient filled spheres with different colors.</desc>
+    <defs>
+      <!-- Create radial gradients for each circle to make them look like
+           spheres. -->
+      <radialGradient id="blueSphere" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="-50">
+        <stop offset="0%" stop-color="white" />
+        <stop offset="75%" stop-color="blue" />
+        <stop offset="100%" stop-color="#222244" />
+      </radialGradient>
+      <radialGradient id="redSphere" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="-50">
+        <stop offset="0%" stop-color="white" />
+        <stop offset="75%" stop-color="red" />
+        <stop offset="100%" stop-color="#442222" />
+      </radialGradient>
+      <radialGradient id="greenSphere" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="-50">
+        <stop offset="0%" stop-color="white" />
+        <stop offset="75%" stop-color="green" />
+        <stop offset="100%" stop-color="#113311" />
+      </radialGradient>
+      <radialGradient id="yellowSphere" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="-50">
+        <stop offset="0%" stop-color="white" />
+        <stop offset="75%" stop-color="yellow" />
+        <stop offset="100%" stop-color="#444422" />
+      </radialGradient>
+      <radialGradient id="shadowGrad" gradientUnits="userSpaceOnUse"
+                      cx="0" cy="0" r="100" fx="-50" fy="50">
+        <stop offset="0%" stop-color="black" stop-opacity="1.0" />
+        <stop offset="100%" stop-color="white" stop-opacity="0.0" />
+      </radialGradient>
+
+      <!-- Define a shadow for each sphere. -->
+      <circle id="shadow" fill="url(#shadowGrad)" cx="0" cy="0" r="100" />
+    </defs>
+  <g fill="#ffee99" stroke="none" >
+    <rect x="0" y="0" width="400" height="400" />
+  </g>
+  <g fill="white" stroke="none" >
+    <rect x="0" y="175" width="400" height="225" />
+  </g>
+  <g transform="translate(200,290) scale(2.0,1.0) rotate(45)" >
+    <rect fill="#a6ce39" x="-69" y="-69" width="138" height="138" />
+    <circle fill="black" cx="0" cy="0" r="50" />
+    <circle fill="#a6ce39" cx="0" cy="0" r="33" />
+    <path fill="black" d="M 37,50 L 50,37 L 12,-1 L 22,-11 L 10,-24 L -24,10
+                          L -11,22 L -1,12 Z" />
+    <animateTransform attributeName="transform"  type="rotate" values="0; 360"
+	       begin="0s" dur="10s" fill="freeze" />
+  </g>
+  <g transform="translate(200,175)">
+    <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+    <circle fill="url(#blueSphere)" cx="0" cy="0" r="100" />
+  </g>
+  <g transform="translate(315,240)">
+    <g transform="scale(0.5,0.5)">
+      <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+      <circle fill="url(#redSphere)" cx="0" cy="0" r="100" />
+    </g>
+  </g>
+  <g transform="translate(80,275)">
+    <g transform="scale(0.65,0.65)">
+      <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+      <circle fill="url(#greenSphere)" cx="0" cy="0" r="100" />
+    </g>
+  </g>
+  <g transform="translate(255,325)">
+    <g transform="scale(0.3,0.3)">
+      <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
+      <circle fill="url(#yellowSphere)" cx="0" cy="0" r="100" />
+    </g>
+  </g>
+</svg>
Index: trunk/demos/embedded/flickable/flickable.cpp
===================================================================
--- trunk/demos/embedded/flickable/flickable.cpp	(revision 561)
+++ trunk/demos/embedded/flickable/flickable.cpp	(revision 561)
@@ -0,0 +1,284 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "flickable.h"
+
+#include <QtCore>
+#include <QtGui>
+
+class FlickableTicker: QObject
+{
+public:
+    FlickableTicker(Flickable *scroller) {
+        m_scroller = scroller;
+    }
+
+    void start(int interval) {
+        if (!m_timer.isActive())
+            m_timer.start(interval, this);
+    }
+
+    void stop() {
+        m_timer.stop();
+    }
+
+protected:
+    void timerEvent(QTimerEvent *event) {
+        Q_UNUSED(event);
+        m_scroller->tick();
+    }
+
+private:
+    Flickable *m_scroller;
+    QBasicTimer m_timer;
+};
+
+class FlickablePrivate
+{
+public:
+    typedef enum {
+        Steady,
+        Pressed,
+        ManualScroll,
+        AutoScroll,
+        Stop
+    } State;
+
+    State state;
+    int threshold;
+    QPoint pressPos;
+    QPoint offset;
+    QPoint delta;
+    QPoint speed;
+    FlickableTicker *ticker;
+    QTime timeStamp;
+    QWidget *target;
+    QList<QEvent*> ignoreList;
+};
+
+Flickable::Flickable()
+{
+    d = new FlickablePrivate;
+    d->state = FlickablePrivate::Steady;
+    d->threshold = 10;
+    d->ticker = new FlickableTicker(this);
+    d->timeStamp = QTime::currentTime();
+    d->target = 0;
+}
+
+Flickable::~Flickable()
+{
+    delete d;
+}
+
+void Flickable::setThreshold(int th)
+{
+    if (th >= 0)
+        d->threshold = th;
+}
+
+int Flickable::threshold() const
+{
+    return d->threshold;
+}
+
+void Flickable::setAcceptMouseClick(QWidget *target)
+{
+    d->target = target;
+}
+
+static QPoint deaccelerate(const QPoint &speed, int a = 1, int max = 64)
+{
+    int x = qBound(-max, speed.x(), max);
+    int y = qBound(-max, speed.y(), max);
+    x = (x == 0) ? x : (x > 0) ? qMax(0, x - a) : qMin(0, x + a);
+    y = (y == 0) ? y : (y > 0) ? qMax(0, y - a) : qMin(0, y + a);
+    return QPoint(x, y);
+}
+
+void Flickable::handleMousePress(QMouseEvent *event)
+{
+    event->ignore();
+
+    if (event->button() != Qt::LeftButton)
+        return;
+
+    if (d->ignoreList.removeAll(event))
+        return;
+
+    switch (d->state) {
+
+    case FlickablePrivate::Steady:
+        event->accept();
+        d->state = FlickablePrivate::Pressed;
+        d->pressPos = event->pos();
+        break;
+
+    case FlickablePrivate::AutoScroll:
+        event->accept();
+        d->state = FlickablePrivate::Stop;
+        d->speed = QPoint(0, 0);
+        d->pressPos = event->pos();
+        d->offset = scrollOffset();
+        d->ticker->stop();
+        break;
+
+    default:
+        break;
+    }
+}
+
+void Flickable::handleMouseRelease(QMouseEvent *event)
+{
+    event->ignore();
+
+    if (event->button() != Qt::LeftButton)
+        return;
+
+    if (d->ignoreList.removeAll(event))
+        return;
+
+    QPoint delta;
+
+    switch (d->state) {
+
+    case FlickablePrivate::Pressed:
+        event->accept();
+        d->state = FlickablePrivate::Steady;
+        if (d->target) {
+            QMouseEvent *event1 = new QMouseEvent(QEvent::MouseButtonPress,
+                                                  d->pressPos, Qt::LeftButton,
+                                                  Qt::LeftButton, Qt::NoModifier);
+            QMouseEvent *event2 = new QMouseEvent(*event);
+            d->ignoreList << event1;
+            d->ignoreList << event2;
+            QApplication::postEvent(d->target, event1);
+            QApplication::postEvent(d->target, event2);
+        }
+        break;
+
+    case FlickablePrivate::ManualScroll:
+        event->accept();
+        delta = event->pos() - d->pressPos;
+        if (d->timeStamp.elapsed() > 100) {
+            d->timeStamp = QTime::currentTime();
+            d->speed = delta - d->delta;
+            d->delta = delta;
+        }
+        d->offset = scrollOffset();
+        d->pressPos = event->pos();
+        if (d->speed == QPoint(0, 0)) {
+            d->state = FlickablePrivate::Steady;
+        } else {
+            d->speed /= 4;
+            d->state = FlickablePrivate::AutoScroll;
+            d->ticker->start(20);
+        }
+        break;
+
+    case FlickablePrivate::Stop:
+        event->accept();
+        d->state = FlickablePrivate::Steady;
+        d->offset = scrollOffset();
+        break;
+
+    default:
+        break;
+    }
+}
+
+void Flickable::handleMouseMove(QMouseEvent *event)
+{
+    event->ignore();
+
+    if (!(event->buttons() & Qt::LeftButton))
+        return;
+
+    if (d->ignoreList.removeAll(event))
+        return;
+
+    QPoint delta;
+
+    switch (d->state) {
+
+    case FlickablePrivate::Pressed:
+    case FlickablePrivate::Stop:
+        delta = event->pos() - d->pressPos;
+        if (delta.x() > d->threshold || delta.x() < -d->threshold ||
+                delta.y() > d->threshold || delta.y() < -d->threshold) {
+            d->timeStamp = QTime::currentTime();
+            d->state = FlickablePrivate::ManualScroll;
+            d->delta = QPoint(0, 0);
+            d->pressPos = event->pos();
+            event->accept();
+        }
+        break;
+
+    case FlickablePrivate::ManualScroll:
+        event->accept();
+        delta = event->pos() - d->pressPos;
+        setScrollOffset(d->offset - delta);
+        if (d->timeStamp.elapsed() > 100) {
+            d->timeStamp = QTime::currentTime();
+            d->speed = delta - d->delta;
+            d->delta = delta;
+        }
+        break;
+
+    default:
+        break;
+    }
+}
+
+void Flickable::tick()
+{
+    if (d->state == FlickablePrivate:: AutoScroll) {
+        d->speed = deaccelerate(d->speed);
+        setScrollOffset(d->offset - d->speed);
+        d->offset = scrollOffset();
+        if (d->speed == QPoint(0, 0)) {
+            d->state = FlickablePrivate::Steady;
+            d->ticker->stop();
+        }
+    } else {
+        d->ticker->stop();
+    }
+}
Index: trunk/demos/embedded/flickable/flickable.h
===================================================================
--- trunk/demos/embedded/flickable/flickable.h	(revision 561)
+++ trunk/demos/embedded/flickable/flickable.h	(revision 561)
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef FLICKABLE_H
+#define FLICKABLE_H
+
+class QMouseEvent;
+class QPoint;
+class QWidget;
+
+class FlickableTicker;
+class FlickablePrivate;
+
+class Flickable
+{
+public:
+
+    Flickable();
+    virtual ~Flickable();
+
+    void setThreshold(int threshold);
+    int threshold() const;
+
+    void setAcceptMouseClick(QWidget *target);
+
+    void handleMousePress(QMouseEvent *event);
+    void handleMouseMove(QMouseEvent *event);
+    void handleMouseRelease(QMouseEvent *event);
+
+protected:
+    virtual QPoint scrollOffset() const = 0;
+    virtual void setScrollOffset(const QPoint &offset) = 0;
+
+private:
+    void tick();
+
+private:
+    FlickablePrivate *d;
+    friend class FlickableTicker;
+};
+
+#endif // FLICKABLE_H
Index: trunk/demos/embedded/flickable/flickable.pro
===================================================================
--- trunk/demos/embedded/flickable/flickable.pro	(revision 561)
+++ trunk/demos/embedded/flickable/flickable.pro	(revision 561)
@@ -0,0 +1,12 @@
+SOURCES = flickable.cpp main.cpp
+HEADERS = flickable.h
+
+symbian {
+    TARGET.UID3 = 0xA000CF73
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+}
+
+target.path = $$[QT_INSTALL_DEMOS]/embedded/flickable
+sources.files = $$SOURCES $$HEADERS $$RESOURCES *.pro
+sources.path = $$[QT_INSTALL_DEMOS]/embedded/flickable
+INSTALLS += target sources
Index: trunk/demos/embedded/flickable/main.cpp
===================================================================
--- trunk/demos/embedded/flickable/main.cpp	(revision 561)
+++ trunk/demos/embedded/flickable/main.cpp	(revision 561)
@@ -0,0 +1,233 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore>
+#include <QtGui>
+
+#include "flickable.h"
+
+// Returns a list of two-word color names
+static QStringList colorPairs(int max)
+{
+    // capitalize the first letter
+    QStringList colors = QColor::colorNames();
+    colors.removeAll("transparent");
+    int num = colors.count();
+    for (int c = 0; c < num; ++c)
+        colors[c] = colors[c][0].toUpper() + colors[c].mid(1);
+
+    // combine two colors, e.g. "lime skyblue"
+    QStringList combinedColors;
+    for (int i = 0; i < num; ++i)
+        for (int j = 0; j < num; ++j)
+            combinedColors << QString("%1 %2").arg(colors[i]).arg(colors[j]);
+
+    // randomize it
+    colors.clear();
+    while (combinedColors.count()) {
+        int i = qrand() % combinedColors.count();
+        colors << combinedColors[i];
+        combinedColors.removeAt(i);
+        if (colors.count() == max)
+            break;
+    }
+
+    return colors;
+}
+
+class ColorList : public QWidget, public Flickable
+{
+    Q_OBJECT
+
+public:
+    ColorList(QWidget *parent = 0)
+            : QWidget(parent) {
+        m_offset = 0;
+        m_height = QFontMetrics(font()).height() + 5;
+        m_highlight = -1;
+        m_selected = -1;
+
+        QStringList colors = colorPairs(999);
+        for (int i = 0; i < colors.count(); ++i) {
+            QString c = colors[i];
+            QString str;
+            str.sprintf("%4d", i + 1);
+            m_colorNames << (str + "   " + c);
+
+            QStringList duet = c.split(' ');
+            m_firstColor << duet[0];
+            m_secondColor << duet[1];
+        }
+
+        setAttribute(Qt::WA_OpaquePaintEvent, true);
+        setAttribute(Qt::WA_NoSystemBackground, true);
+
+        setMouseTracking(true);
+        Flickable::setAcceptMouseClick(this);
+    }
+
+protected:
+    // reimplement from Flickable
+    virtual QPoint scrollOffset() const {
+        return QPoint(0, m_offset);
+    }
+
+    // reimplement from Flickable
+    virtual void setScrollOffset(const QPoint &offset) {
+        int yy = offset.y();
+        if (yy != m_offset) {
+            m_offset = qBound(0, yy, m_height * m_colorNames.count() - height());
+            update();
+        }
+    }
+
+protected:
+    void paintEvent(QPaintEvent *event) {
+        QPainter p(this);
+        p.fillRect(event->rect(), Qt::white);
+        int start = m_offset / m_height;
+        int y = start * m_height - m_offset;
+        if (m_offset <= 0) {
+            start = 0;
+            y = -m_offset;
+        }
+        int end = start + height() / m_height + 1;
+        if (end > m_colorNames.count() - 1)
+            end = m_colorNames.count() - 1;
+        for (int i = start; i <= end; ++i, y += m_height) {
+
+            p.setBrush(Qt::NoBrush);
+            p.setPen(Qt::black);
+            if (i == m_highlight) {
+                p.fillRect(0, y, width(), m_height, QColor(0, 64, 128));
+                p.setPen(Qt::white);
+            }
+            if (i == m_selected) {
+                p.fillRect(0, y, width(), m_height, QColor(0, 128, 240));
+                p.setPen(Qt::white);
+            }
+
+            p.drawText(m_height + 2, y, width(), m_height, Qt::AlignVCenter, m_colorNames[i]);
+
+            p.setPen(Qt::NoPen);
+            p.setBrush(m_firstColor[i]);
+            p.drawRect(1, y + 1, m_height - 2, m_height - 2);
+            p.setBrush(m_secondColor[i]);
+            p.drawRect(5, y + 5, m_height - 11, m_height - 11);
+        }
+        p.end();
+    }
+
+    void keyReleaseEvent(QKeyEvent *event) {
+        if (event->key() == Qt::Key_Down) {
+            m_offset += 20;
+            event->accept();
+            update();
+            return;
+        }
+        if (event->key() == Qt::Key_Up) {
+            m_offset -= 20;
+            event->accept();
+            update();
+            return;
+        }
+    }
+
+    void mousePressEvent(QMouseEvent *event) {
+        Flickable::handleMousePress(event);
+        if (event->isAccepted())
+            return;
+
+        if (event->button() == Qt::LeftButton) {
+            int y = event->pos().y() + m_offset;
+            int i = y / m_height;
+            if (i != m_highlight) {
+                m_highlight = i;
+                m_selected = -1;
+                update();
+            }
+            event->accept();
+        }
+    }
+
+    void mouseMoveEvent(QMouseEvent *event) {
+        Flickable::handleMouseMove(event);
+    }
+
+    void mouseReleaseEvent(QMouseEvent *event) {
+        Flickable::handleMouseRelease(event);
+        if (event->isAccepted())
+            return;
+
+        if (event->button() == Qt::LeftButton) {
+            m_selected = m_highlight;
+            event->accept();
+            update();
+        }
+    }
+
+private:
+    int m_offset;
+    int m_height;
+    int m_highlight;
+    int m_selected;
+    QStringList m_colorNames;
+    QList<QColor> m_firstColor;
+    QList<QColor> m_secondColor;
+};
+
+#include "main.moc"
+
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+
+    ColorList list;
+    list.setWindowTitle("Kinetic Scrolling");
+#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM)
+    list.showMaximized();
+#else
+    list.resize(320, 320);
+    list.show();
+#endif
+
+    return app.exec();
+}
Index: trunk/demos/embedded/flightinfo/flightinfo.cpp
===================================================================
--- trunk/demos/embedded/flightinfo/flightinfo.cpp	(revision 561)
+++ trunk/demos/embedded/flightinfo/flightinfo.cpp	(revision 561)
@@ -0,0 +1,415 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore>
+#include <QtGui>
+#include <QtNetwork>
+
+#if defined (Q_OS_SYMBIAN)
+#include "sym_iap_util.h"
+#endif
+
+#include "ui_form.h"
+
+#define FLIGHTVIEW_URL "http://mobile.flightview.com/TrackByFlight.aspx"
+#define FLIGHTVIEW_RANDOM "http://mobile.flightview.com/TrackSampleFlight.aspx"
+
+// strips all invalid constructs that might trip QXmlStreamReader
+static QString sanitized(const QString &xml)
+{
+    QString data = xml;
+
+    // anything up to the html tag
+    int i = data.indexOf("<html");
+    if (i > 0)
+        data.remove(0, i - 1);
+
+    // everything inside the head tag
+    i = data.indexOf("<head");
+    if (i > 0)
+        data.remove(i, data.indexOf("</head>") - i + 7);
+
+    // invalid link for JavaScript code
+    while (true) {
+        i  = data.indexOf("onclick=\"gotoUrl(");
+        if (i < 0)
+            break;
+        data.remove(i, data.indexOf('\"', i + 9) - i + 1);
+    }
+
+    // all inline frames
+    while (true) {
+        i  = data.indexOf("<iframe");
+        if (i < 0)
+            break;
+        data.remove(i, data.indexOf("</iframe>") - i + 8);
+    }
+
+    // entities
+    data.remove("&nbsp;");
+    data.remove("&copy;");
+
+    return data;
+}
+
+class FlightInfo : public QMainWindow
+{
+    Q_OBJECT
+
+private:
+
+    Ui_Form ui;
+    QUrl m_url;
+    QDate m_searchDate;
+    QPixmap m_map;
+
+public:
+
+    FlightInfo(QMainWindow *parent = 0): QMainWindow(parent) {
+
+        QWidget *w = new QWidget(this);
+        ui.setupUi(w);
+        setCentralWidget(w);
+
+        ui.searchBar->hide();
+        ui.infoBox->hide();
+        connect(ui.searchButton, SIGNAL(clicked()), SLOT(startSearch()));
+        connect(ui.flightEdit, SIGNAL(returnPressed()), SLOT(startSearch()));
+
+        setWindowTitle("Flight Info");
+        QTimer::singleShot(0, this, SLOT(delayedInit()));
+
+        // Rendered from the public-domain vectorized aircraft
+        // http://openclipart.org/media/people/Jarno
+        m_map = QPixmap(":/aircraft.png");
+
+        QAction *searchTodayAction = new QAction("Today's Flight", this);
+        QAction *searchYesterdayAction = new QAction("Yesterday's Flight", this);
+        QAction *randomAction = new QAction("Random Flight", this);
+        connect(searchTodayAction, SIGNAL(triggered()), SLOT(today()));
+        connect(searchYesterdayAction, SIGNAL(triggered()), SLOT(yesterday()));
+        connect(randomAction, SIGNAL(triggered()), SLOT(randomFlight()));
+#if defined(Q_OS_SYMBIAN)
+        menuBar()->addAction(searchTodayAction);
+        menuBar()->addAction(searchYesterdayAction);
+        menuBar()->addAction(randomAction);
+#else
+        addAction(searchTodayAction);
+        addAction(searchYesterdayAction);
+        addAction(randomAction);
+        setContextMenuPolicy(Qt::ActionsContextMenu);
+#endif
+    }
+
+private slots:
+    void delayedInit() {
+#if defined(Q_OS_SYMBIAN)
+        qt_SetDefaultIap();
+#endif
+    }
+
+
+    void handleNetworkData(QNetworkReply *networkReply) {
+        if (!networkReply->error()) {
+            // Assume UTF-8 encoded
+            QByteArray data = networkReply->readAll();
+            QString xml = QString::fromUtf8(data);
+            digest(xml);
+        }
+        networkReply->deleteLater();
+        networkReply->manager()->deleteLater();
+    }
+
+    void handleMapData(QNetworkReply *networkReply) {
+        if (!networkReply->error()) {
+            m_map.loadFromData(networkReply->readAll());
+            update();
+        }
+        networkReply->deleteLater();
+        networkReply->manager()->deleteLater();
+    }
+
+    void today() {
+        QDateTime timestamp = QDateTime::currentDateTime();
+        m_searchDate = timestamp.date();
+        searchFlight();
+    }
+
+    void yesterday() {
+        QDateTime timestamp = QDateTime::currentDateTime();
+        timestamp = timestamp.addDays(-1);
+        m_searchDate = timestamp.date();
+        searchFlight();
+    }
+
+    void searchFlight() {
+        ui.searchBar->show();
+        ui.infoBox->hide();
+        ui.flightStatus->hide();
+        ui.flightName->setText("Enter flight number");
+        m_map = QPixmap();
+        update();
+    }
+
+    void startSearch() {
+        ui.searchBar->hide();
+        QString flight = ui.flightEdit->text().simplified();
+        if (!flight.isEmpty())
+            request(flight, m_searchDate);
+    }
+
+    void randomFlight() {
+        request(QString(), QDate::currentDate());
+    }
+
+public slots:
+
+    void request(const QString &flightCode, const QDate &date) {
+
+        setWindowTitle("Loading...");
+
+        QString code = flightCode.simplified();
+        QString airlineCode = code.left(2).toUpper();
+        QString flightNumber = code.mid(2, code.length());
+
+        ui.flightName->setText("Searching for " + code);
+
+        m_url = QUrl(FLIGHTVIEW_URL);
+        m_url.addEncodedQueryItem("view", "detail");
+        m_url.addEncodedQueryItem("al", QUrl::toPercentEncoding(airlineCode));
+        m_url.addEncodedQueryItem("fn", QUrl::toPercentEncoding(flightNumber));
+        m_url.addEncodedQueryItem("dpdat", QUrl::toPercentEncoding(date.toString("yyyyMMdd")));
+
+        if (code.isEmpty()) {
+            // random flight as sample
+            m_url = QUrl(FLIGHTVIEW_RANDOM);
+            ui.flightName->setText("Getting a random flight...");
+        }
+
+        QNetworkAccessManager *manager = new QNetworkAccessManager(this);
+        connect(manager, SIGNAL(finished(QNetworkReply*)),
+                this, SLOT(handleNetworkData(QNetworkReply*)));
+        manager->get(QNetworkRequest(m_url));
+    }
+
+
+private:
+
+    void digest(const QString &content) {
+
+        setWindowTitle("Flight Info");
+        QString data = sanitized(content);
+
+        // do we only get the flight list?
+        // we grab the first leg in the flight list
+        // then fetch another URL for the real flight info
+        int i = data.indexOf("a href=\"?view=detail");
+        if (i > 0) {
+            QString href = data.mid(i, data.indexOf('\"', i + 8) - i + 1);
+            QRegExp regex("dpap=([A-Za-z0-9]+)");
+            regex.indexIn(href);
+            QString airport = regex.cap(1);
+            m_url.addEncodedQueryItem("dpap", QUrl::toPercentEncoding(airport));
+            QNetworkAccessManager *manager = new QNetworkAccessManager(this);
+            connect(manager, SIGNAL(finished(QNetworkReply*)),
+                    this, SLOT(handleNetworkData(QNetworkReply*)));
+            manager->get(QNetworkRequest(m_url));
+            return;
+        }
+
+        QXmlStreamReader xml(data);
+        bool inFlightName = false;
+        bool inFlightStatus = false;
+        bool inFlightMap = false;
+        bool inFieldName = false;
+        bool inFieldValue = false;
+
+        QString flightName;
+        QString flightStatus;
+        QStringList fieldNames;
+        QStringList fieldValues;
+
+        while (!xml.atEnd()) {
+            xml.readNext();
+
+            if (xml.tokenType() == QXmlStreamReader::StartElement) {
+                QStringRef className = xml.attributes().value("class");
+                inFlightName |= xml.name() == "h1";
+                inFlightStatus |= className == "FlightDetailHeaderStatus";
+                inFlightMap |= className == "flightMap";
+                if (xml.name() == "td" && !className.isEmpty()) {
+                    QString cn = className.toString();
+                    if (cn.contains("fieldTitle")) {
+                        inFieldName = true;
+                        fieldNames += QString();
+                        fieldValues += QString();
+                    }
+                    if (cn.contains("fieldValue"))
+                        inFieldValue = true;
+                }
+                if (xml.name() == "img" && inFlightMap) {
+                    QString src = xml.attributes().value("src").toString();
+                    src.prepend("http://mobile.flightview.com");
+                    QUrl url = QUrl::fromPercentEncoding(src.toAscii());
+                    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
+                    connect(manager, SIGNAL(finished(QNetworkReply*)),
+                            this, SLOT(handleMapData(QNetworkReply*)));
+                    manager->get(QNetworkRequest(url));
+                }
+            }
+
+            if (xml.tokenType() == QXmlStreamReader::EndElement) {
+                inFlightName &= xml.name() != "h1";
+                inFlightStatus &= xml.name() != "div";
+                inFlightMap &= xml.name() != "div";
+                inFieldName &= xml.name() != "td";
+                inFieldValue &= xml.name() != "td";
+            }
+
+            if (xml.tokenType() == QXmlStreamReader::Characters) {
+                if (inFlightName)
+                    flightName += xml.text();
+                if (inFlightStatus)
+                    flightStatus += xml.text();
+                if (inFieldName)
+                    fieldNames.last() += xml.text();
+                if (inFieldValue)
+                    fieldValues.last() += xml.text();
+            }
+        }
+
+        if (fieldNames.isEmpty()) {
+            QString code = ui.flightEdit->text().simplified().left(10);
+            QString msg = QString("Flight %1 is not found").arg(code);
+            ui.flightName->setText(msg);
+            return;
+        }
+
+        ui.flightName->setText(flightName);
+        flightStatus.remove("Status: ");
+        ui.flightStatus->setText(flightStatus);
+        ui.flightStatus->show();
+
+        QStringList whiteList;
+        whiteList << "Departure";
+        whiteList << "Arrival";
+        whiteList << "Scheduled";
+        whiteList << "Takeoff";
+        whiteList << "Estimated";
+        whiteList << "Term-Gate";
+
+        QString text;
+        text = QString("<table width=%1>").arg(width() - 25);
+        for (int i = 0; i < fieldNames.count(); i++) {
+            QString fn = fieldNames[i].simplified();
+            if (fn.endsWith(':'))
+                fn = fn.left(fn.length() - 1);
+            if (!whiteList.contains(fn))
+                continue;
+
+            QString fv = fieldValues[i].simplified();
+            bool special = false;
+            special |= fn.startsWith("Departure");
+            special |= fn.startsWith("Arrival");
+            text += "<tr>";
+            if (special) {
+                text += "<td align=center colspan=2>";
+                text += "<b><font size=+1>" + fv + "</font></b>";
+                text += "</td>";
+            } else {
+                text += "<td align=right>";
+                text += fn;
+                text += " : ";
+                text += "&nbsp;";
+                text += "</td>";
+                text += "<td>";
+                text += fv;
+                text += "</td>";
+            }
+            text += "</tr>";
+        }
+        text += "</table>";
+        ui.detailedInfo->setText(text);
+        ui.infoBox->show();
+    }
+
+    void resizeEvent(QResizeEvent *event) {
+        Q_UNUSED(event);
+        ui.detailedInfo->setMaximumWidth(width() - 25);
+    }
+
+    void paintEvent(QPaintEvent *event) {
+        QMainWindow::paintEvent(event);
+        QPainter p(this);
+        p.fillRect(rect(), QColor(131, 171, 210));
+        if (!m_map.isNull()) {
+            int x = (width() - m_map.width()) / 2;
+            int space = ui.infoBox->pos().y();
+            if (!ui.infoBox->isVisible())
+                space = height();
+            int top = ui.titleBox->height();
+            int y = qMax(top, (space - m_map.height()) / 2);
+            p.drawPixmap(x, y, m_map);
+        }
+        p.end();
+    }
+
+};
+
+
+#include "flightinfo.moc"
+
+int main(int argc, char **argv)
+{
+    Q_INIT_RESOURCE(flightinfo);
+
+    QApplication app(argc, argv);
+
+    FlightInfo w;
+#if defined(Q_OS_SYMBIAN)
+    w.showMaximized();
+#else
+    w.resize(360, 504);
+    w.show();
+#endif
+
+    return app.exec();
+}
Index: trunk/demos/embedded/flightinfo/flightinfo.pro
===================================================================
--- trunk/demos/embedded/flightinfo/flightinfo.pro	(revision 561)
+++ trunk/demos/embedded/flightinfo/flightinfo.pro	(revision 561)
@@ -0,0 +1,19 @@
+TEMPLATE = app
+TARGET = flightinfo
+SOURCES = flightinfo.cpp
+FORMS += form.ui
+RESOURCES = flightinfo.qrc
+QT += network
+
+symbian {
+    TARGET.UID3 = 0xA000CF74
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+    HEADERS += $$QT_SOURCE_TREE/examples/network/qftp/sym_iap_util.h
+    LIBS += -lesock  -lconnmon -linsock
+    TARGET.CAPABILITY = NetworkServices
+}
+
+target.path = $$[QT_INSTALL_DEMOS]/embedded/flightinfo
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro
+sources.path = $$[QT_INSTALL_DEMOS]/embedded/flightinfo
+INSTALLS += target sources
Index: trunk/demos/embedded/flightinfo/flightinfo.qrc
===================================================================
--- trunk/demos/embedded/flightinfo/flightinfo.qrc	(revision 561)
+++ trunk/demos/embedded/flightinfo/flightinfo.qrc	(revision 561)
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/" >
+        <file>aircraft.png</file>
+    </qresource>
+</RCC>
Index: trunk/demos/embedded/flightinfo/form.ui
===================================================================
--- trunk/demos/embedded/flightinfo/form.ui	(revision 561)
+++ trunk/demos/embedded/flightinfo/form.ui	(revision 561)
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>220</width>
+    <height>171</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="spacing">
+    <number>0</number>
+   </property>
+   <property name="margin">
+    <number>0</number>
+   </property>
+   <item>
+    <widget class="QFrame" name="titleBox">
+     <property name="styleSheet">
+      <string>QFrame {
+background-color: #45629a;
+}
+
+QLabel {
+color: white;
+}</string>
+     </property>
+     <property name="frameShape">
+      <enum>QFrame::NoFrame</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Raised</enum>
+     </property>
+     <property name="lineWidth">
+      <number>0</number>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout">
+      <property name="spacing">
+       <number>0</number>
+      </property>
+      <property name="margin">
+       <number>4</number>
+      </property>
+      <item>
+       <widget class="QLabel" name="flightName">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Powered by FlightView</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLabel" name="flightStatus">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="font">
+         <font>
+          <weight>75</weight>
+          <bold>true</bold>
+         </font>
+        </property>
+        <property name="styleSheet">
+         <string>background-color: white;
+color:  #45629a;</string>
+        </property>
+        <property name="lineWidth">
+         <number>0</number>
+        </property>
+        <property name="text">
+         <string>Ready</string>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignCenter</set>
+        </property>
+        <property name="margin">
+         <number>4</number>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QFrame" name="searchBar">
+     <property name="frameShape">
+      <enum>QFrame::NoFrame</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Raised</enum>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_2">
+      <property name="margin">
+       <number>5</number>
+      </property>
+      <item>
+       <widget class="QLineEdit" name="flightEdit">
+        <property name="styleSheet">
+         <string>color: black;
+border: 1px solid black;
+background: white;
+selection-background-color: lightgray;</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QToolButton" name="searchButton">
+        <property name="styleSheet">
+         <string>color: rgb(255, 255, 255);
+background-color: rgb(85, 85, 255);
+padding: 2px;
+border: 2px solid  rgb(0, 0, 127);</string>
+        </property>
+        <property name="text">
+         <string>Search</string>
+        </property>
+        <property name="toolButtonStyle">
+         <enum>Qt::ToolButtonTextBesideIcon</enum>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <spacer name="horizontalSpacer">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>58</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
+    <widget class="QFrame" name="infoBox">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="styleSheet">
+      <string>QFrame { border: 2px solid white;
+border-radius: 10px;
+margin: 5px;
+background-color: rgba(69, 98, 154, 192); }</string>
+     </property>
+     <property name="frameShape">
+      <enum>QFrame::NoFrame</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Raised</enum>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_3">
+      <property name="spacing">
+       <number>0</number>
+      </property>
+      <property name="margin">
+       <number>5</number>
+      </property>
+      <item>
+       <widget class="QLabel" name="detailedInfo">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="styleSheet">
+         <string>color: white;
+border: none;
+background-color: none;</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+        <property name="textFormat">
+         <enum>Qt::RichText</enum>
+        </property>
+        <property name="wordWrap">
+         <bool>true</bool>
+        </property>
+        <property name="textInteractionFlags">
+         <set>Qt::NoTextInteraction</set>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
Index: trunk/demos/embedded/fluidlauncher/config.xml
===================================================================
--- trunk/demos/embedded/fluidlauncher/config.xml	(revision 561)
+++ trunk/demos/embedded/fluidlauncher/config.xml	(revision 561)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<demolauncher>
+  <demos>
+    <example filename="../embeddedsvgviewer/embeddedsvgviewer" name="SVG Viewer" image="screenshots/embeddedsvgviewer.png" args="../embeddedsvgviewer/shapes.svg"/>
+    <example filename="../styledemo/styledemo" name="Stylesheets" image="screenshots/styledemo.png"/>
+    <example filename="../../deform/deform" name="Vector Deformation" image="screenshots/deform.png" args="-small-screen"/>
+    <example filename="../../pathstroke/pathstroke" name="Path Stroking" image="screenshots/pathstroke.png" args="-small-screen"/>
+    <example filename="../../../examples/widgets/wiggly/wiggly" name="Wiggly Text" image="screenshots/wiggly.png"/>
+    <example filename="../../../examples/painting/concentriccircles/concentriccircles" name="Concentric Circles" image="screenshots/concentriccircles.png"/>
+<!--
+    <example filename="../../../examples/graphicsview/elasticnodes/elasticnodes" name="Elastic Nodes" image="screenshots/elasticnodes.png" args="-maximize"/>
+    <example filename="../../../examples/assistant/simpletextviewer/simpletextviewer" name="Simple Text Viewer" image="../../../doc/html/images/simpletextviewer-mainwindow.png"/>
+    <example filename="../../../examples/dialogs/trivialwizard/trivialwizard" name="Trivial Wizard" image="../../../doc/html/images/trivialwizard-example-conclusion.png"/>
+    <example filename="../../../examples/draganddrop/draggableicons/draggableicons" name="Draggable Icons" image="../../../doc/html/images/draggableicons-example.png"/>
+    <example filename="../../../examples/draganddrop/draggabletext/draggabletext" name="Draggable Text" image="../../../doc/html/images/draggabletext-example.png"/>
+    <example filename="../../../examples/draganddrop/fridgemagnets/fridgemagnets" name="Fridge Magnets" image="../../../doc/html/images/fridgemagnets-example.png"/>
+    <example filename="../../../examples/graphicsview/collidingmice/collidingmice" name="Colliding Mice" image="../../../doc/html/images/collidingmice-example.png"/>
+    <example filename="../../../examples/graphicsview/padnavigator/padnavigator" name="Pad Navigator" image="../../../doc/html/images/padnavigator-example.png"/>
+    <example filename="../../../examples/itemviews/coloreditorfactory/coloreditorfactory" name="Color Editor" image="../../../doc/html/images/coloreditorfactoryimage.png"/>
+-->    
+    
+  </demos>
+  <slideshow timeout="60000" interval="10000">
+    <imagedir dir="slides"/>
+  </slideshow>
+</demolauncher>
Index: trunk/demos/embedded/fluidlauncher/config_s60/config.xml
===================================================================
--- trunk/demos/embedded/fluidlauncher/config_s60/config.xml	(revision 561)
+++ trunk/demos/embedded/fluidlauncher/config_s60/config.xml	(revision 561)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<demolauncher>
+  <demos>
+    <example filename="embeddedsvgviewer" name="SVG Viewer" image="screenshots/embeddedsvgviewer_s60.png" args="/data/images/qt/demos/embeddedsvgviewer/shapes.svg"/>
+    <example filename="styledemo" name="Stylesheets" image="screenshots/styledemo_s60.png"/>
+    <example filename="deform" name="Vector Deformation" image="screenshots/deform.png" args="-small-screen"/>
+    <example filename="pathstroke" name="Path Stroking" image="screenshots/pathstroke.png" args="-small-screen"/>
+    <example filename="wiggly" name="Wiggly Text" image="screenshots/wiggly_s60.png" args="-small-screen"/>
+    <example filename="qftp" name="Ftp Client" image="screenshots/ftp_s60.png"/>
+    <example filename="context2d" name="Context2d" image="screenshots/context2d_s60.png" args="-small-screen"/>
+    <example filename="saxbookmarks" name="SaxBookmarks" image="screenshots/saxbookmarks_s60.png"/>
+    <example filename="desktopservices" name="Desktop Services" image="screenshots/desktopservices_s60.png"/>
+    <example filename="fridgemagnets" name="Fridge Magnets" image="screenshots/fridgemagnets_s60.png" args="-small-screen"/>
+    <example filename="softkeys" name="Softkeys" image="screenshots/softkeys_s60.png"/>
+    <example filename="anomaly" name="Anomaly Browser" image="screenshots/anomaly_s60.png"/>
+    <example filename="raycasting" name="Ray casting" image="screenshots/raycasting.png"/>
+    <example filename="lightmaps" name="OpenStreetMap" image="screenshots/lightmaps.png"/>
+    <example filename="flightinfo" name="Flight Info" image="screenshots/flightinfo_s60.png"/>
+    <example filename="weatherinfo" name="Weather Info" image="screenshots/weatherinfo.png"/>
+    <example filename="flickable" name="Kinetic Scrolling" image="screenshots/flickable.png"/>
+    <example filename="digiflip" name="Flipping Clock" image="screenshots/digiflip.png"/>
+    <example filename="qmediaplayer" name="Media Player" image="screenshots/mediaplayer.png" args="-small-screen"/>
+  </demos>
+  <slideshow timeout="60000" interval="10000">
+    <imagedir dir="slides"/>
+  </slideshow>
+</demolauncher>
Index: trunk/demos/embedded/fluidlauncher/config_wince/config.xml
===================================================================
--- trunk/demos/embedded/fluidlauncher/config_wince/config.xml	(revision 561)
+++ trunk/demos/embedded/fluidlauncher/config_wince/config.xml	(revision 561)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<demolauncher>
+  <demos>
+    <example filename="embeddedsvgviewer" name="SVG Viewer" image="screenshots/embeddedsvgviewer.png" args="shapes.svg"/>
+    <example filename="styledemo" name="Stylesheets" image="screenshots/styledemo.png"/>
+    <example filename="deform" name="Vector Deformation" image="screenshots/deform.png" args="-small-screen"/>
+    <example filename="pathstroke" name="Path Stroking" image="screenshots/pathstroke.png" args="-small-screen"/>
+    <example filename="wiggly" name="Wiggly Text" image="screenshots/wiggly.png"/>
+  </demos>
+  <slideshow timeout="60000" interval="10000">
+    <imagedir dir="slides"/>
+  </slideshow>
+</demolauncher>
Index: trunk/demos/embedded/fluidlauncher/demoapplication.cpp
===================================================================
--- trunk/demos/embedded/fluidlauncher/demoapplication.cpp	(revision 561)
+++ trunk/demos/embedded/fluidlauncher/demoapplication.cpp	(revision 561)
@@ -0,0 +1,116 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QDebug>
+#include <QDir>
+
+#include "demoapplication.h"
+
+
+
+DemoApplication::DemoApplication(QString executableName, QString caption, QString imageName, QStringList args)
+{
+    imagePath = imageName;
+    appCaption = caption;
+
+    if (executableName[0] == QLatin1Char('/'))
+        executablePath = executableName;
+    else
+        executablePath = QDir::cleanPath(QDir::currentPath() + QLatin1Char('/') + executableName);
+  
+    arguments = args;
+
+    process.setProcessChannelMode(QProcess::ForwardedChannels);
+
+    QObject::connect( &process, SIGNAL(finished(int,QProcess::ExitStatus)), 
+                      this, SLOT(processFinished(int,QProcess::ExitStatus)));
+
+    QObject::connect( &process, SIGNAL(error(QProcess::ProcessError)), 
+                      this, SLOT(processError(QProcess::ProcessError)));
+
+    QObject::connect( &process, SIGNAL(started()), this, SLOT(processStarted()));
+}
+
+
+void DemoApplication::launch()
+{
+    process.start(executablePath, arguments);
+}
+
+QImage* DemoApplication::getImage()
+{
+    return new QImage(imagePath);
+}
+
+QString DemoApplication::getCaption()
+{
+    return appCaption;
+}
+
+void DemoApplication::processFinished(int exitCode, QProcess::ExitStatus exitStatus)
+{
+    Q_UNUSED(exitCode);
+    Q_UNUSED(exitStatus);
+
+    emit demoFinished();
+
+    QObject::disconnect(this, SIGNAL(demoStarted()), 0, 0);
+    QObject::disconnect(this, SIGNAL(demoFinished()), 0, 0);
+}
+
+void DemoApplication::processError(QProcess::ProcessError err)
+{
+    qDebug() << "Process error: " << err;
+    if (err == QProcess::Crashed)
+        emit demoFinished();
+}
+
+
+void DemoApplication::processStarted()
+{
+    emit demoStarted();
+}
+
+
+
+
+
+
Index: trunk/demos/embedded/fluidlauncher/demoapplication.h
===================================================================
--- trunk/demos/embedded/fluidlauncher/demoapplication.h	(revision 561)
+++ trunk/demos/embedded/fluidlauncher/demoapplication.h	(revision 561)
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef DEMO_APPLICATION_H
+#define DEMO_APPLICATION_H
+
+#include <QPixmap>
+#include <QImage>
+#include <QProcess>
+#include <QObject>
+
+class DemoApplication : public QObject
+{
+  Q_OBJECT
+
+public:
+    DemoApplication(QString executableName, QString caption, QString imageName, QStringList args);
+    void launch();
+    QImage* getImage();
+    QString getCaption();
+
+public slots:
+    void processStarted();
+    void processFinished(int exitCode, QProcess::ExitStatus exitStatus);
+    void processError(QProcess::ProcessError err);
+
+signals:
+    void demoStarted();
+    void demoFinished();
+
+private:
+    QString imagePath;
+    QString appCaption;
+    QString executablePath;
+    QStringList arguments;
+    QProcess process;
+};
+
+
+
+
+#endif
+
+
Index: trunk/demos/embedded/fluidlauncher/fluidlauncher.cpp
===================================================================
--- trunk/demos/embedded/fluidlauncher/fluidlauncher.cpp	(revision 561)
+++ trunk/demos/embedded/fluidlauncher/fluidlauncher.cpp	(revision 561)
@@ -0,0 +1,289 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QXmlStreamReader>
+
+#include "fluidlauncher.h"
+
+
+#define DEFAULT_INPUT_TIMEOUT 10000
+#define SIZING_FACTOR_HEIGHT 6/10
+#define SIZING_FACTOR_WIDTH 6/10
+
+FluidLauncher::FluidLauncher(QStringList* args)
+{
+    pictureFlowWidget = new PictureFlow();
+    slideShowWidget = new SlideShow();
+    inputTimer = new QTimer();
+
+    addWidget(pictureFlowWidget);
+    addWidget(slideShowWidget);
+    setCurrentWidget(pictureFlowWidget);
+    pictureFlowWidget->setFocus();
+
+    QRect screen_size = QApplication::desktop()->screenGeometry();
+
+    QObject::connect(pictureFlowWidget, SIGNAL(itemActivated(int)), this, SLOT(launchApplication(int)));
+    QObject::connect(pictureFlowWidget, SIGNAL(inputReceived()),    this, SLOT(resetInputTimeout()));
+    QObject::connect(slideShowWidget,   SIGNAL(inputReceived()),    this, SLOT(switchToLauncher()));
+    QObject::connect(inputTimer,        SIGNAL(timeout()),          this, SLOT(inputTimedout()));
+
+    inputTimer->setSingleShot(true);
+    inputTimer->setInterval(DEFAULT_INPUT_TIMEOUT);
+
+    const int h = screen_size.height() * SIZING_FACTOR_HEIGHT;
+    const int w = screen_size.width() * SIZING_FACTOR_WIDTH;
+    const int hh = qMin(h, w);
+    const int ww = hh / 3 * 2;
+    pictureFlowWidget->setSlideSize(QSize(ww, hh));
+
+    bool success;
+    int configIndex = args->indexOf("-config");
+    if ( (configIndex != -1) && (configIndex != args->count()-1) )
+        success = loadConfig(args->at(configIndex+1));
+    else
+        success = loadConfig("config.xml");
+
+    if (success) {
+      populatePictureFlow();
+
+      showFullScreen();
+      inputTimer->start();
+    } else {
+        pictureFlowWidget->setAttribute(Qt::WA_DeleteOnClose, true);
+        pictureFlowWidget->close();
+    }
+
+}
+
+FluidLauncher::~FluidLauncher()
+{
+    delete pictureFlowWidget;
+    delete slideShowWidget;
+}
+
+bool FluidLauncher::loadConfig(QString configPath)
+{
+    QFile xmlFile(configPath);
+
+    if (!xmlFile.exists() || (xmlFile.error() != QFile::NoError)) {
+        qDebug() << "ERROR: Unable to open config file " << configPath;
+        return false;
+    }
+
+    slideShowWidget->clearImages();
+
+    xmlFile.open(QIODevice::ReadOnly);
+    QXmlStreamReader reader(&xmlFile);
+    while (!reader.atEnd()) {
+        reader.readNext();
+
+        if (reader.isStartElement()) {
+            if (reader.name() == "demos")
+                parseDemos(reader);
+            else if(reader.name() == "slideshow")
+                parseSlideshow(reader);
+        }
+    }
+
+    if (reader.hasError()) {
+       qDebug() << QString("Error parsing %1 on line %2 column %3: \n%4")
+                .arg(configPath)
+                .arg(reader.lineNumber())
+                .arg(reader.columnNumber())
+                .arg(reader.errorString());
+    }
+
+    // Append an exit Item
+    DemoApplication* exitItem = new DemoApplication(QString(), QLatin1String("Exit Embedded Demo"), QString(), QStringList());
+    demoList.append(exitItem);
+
+    return true;
+}
+
+
+void FluidLauncher::parseDemos(QXmlStreamReader& reader)
+{
+    while (!reader.atEnd()) {
+        reader.readNext();
+        if (reader.isStartElement() && reader.name() == "example") {
+            QXmlStreamAttributes attrs = reader.attributes();
+            QStringRef filename = attrs.value("filename");
+            if (!filename.isEmpty()) {
+                QStringRef name = attrs.value("name");
+                QStringRef image = attrs.value("image");
+                QStringRef args = attrs.value("args");
+
+                DemoApplication* newDemo = new DemoApplication(
+                        filename.toString(),
+                        name.isEmpty() ? "Unamed Demo" : name.toString(),
+                        image.toString(),
+                        args.toString().split(" "));
+                demoList.append(newDemo);
+            }
+        } else if(reader.isEndElement() && reader.name() == "demos") {
+            return;
+        }
+    }
+}
+
+void FluidLauncher::parseSlideshow(QXmlStreamReader& reader)
+{
+    QXmlStreamAttributes attrs = reader.attributes();
+
+    QStringRef timeout = attrs.value("timeout");
+    bool valid;
+    if (!timeout.isEmpty()) {
+        int t = timeout.toString().toInt(&valid);
+        if (valid)
+            inputTimer->setInterval(t);
+    }
+
+    QStringRef interval = attrs.value("interval");
+    if (!interval.isEmpty()) {
+        int i = interval.toString().toInt(&valid);
+        if (valid)
+            slideShowWidget->setSlideInterval(i);
+    }
+
+    while (!reader.atEnd()) {
+        reader.readNext();
+        if (reader.isStartElement()) {
+            QXmlStreamAttributes attrs = reader.attributes();
+            if (reader.name() == "imagedir") {
+                QStringRef dir = attrs.value("dir");
+                slideShowWidget->addImageDir(dir.toString());
+            } else if(reader.name() == "image") {
+                QStringRef image = attrs.value("image");
+                slideShowWidget->addImage(image.toString());
+            }
+        } else if(reader.isEndElement() && reader.name() == "slideshow") {
+            return;
+        }
+    }
+
+}
+
+void FluidLauncher::populatePictureFlow()
+{
+    pictureFlowWidget->setSlideCount(demoList.count());
+
+    for (int i=demoList.count()-1; i>=0; --i) {
+        pictureFlowWidget->setSlide(i, *(demoList[i]->getImage()));
+        pictureFlowWidget->setSlideCaption(i, demoList[i]->getCaption());
+    }
+
+    pictureFlowWidget->setCurrentSlide(demoList.count()/2);
+}
+
+
+void FluidLauncher::launchApplication(int index)
+{
+    // NOTE: Clearing the caches will free up more memory for the demo but will cause
+    // a delay upon returning, as items are reloaded.
+    //pictureFlowWidget->clearCaches();
+
+    if (index == demoList.size() -1) {
+        qApp->quit();
+        return;
+    }
+
+    inputTimer->stop();
+
+    QObject::connect(demoList[index], SIGNAL(demoFinished()), this, SLOT(demoFinished()));
+
+    demoList[index]->launch();
+}
+
+
+void FluidLauncher::switchToLauncher()
+{
+    slideShowWidget->stopShow();
+    inputTimer->start();
+    setCurrentWidget(pictureFlowWidget);
+}
+
+
+void FluidLauncher::resetInputTimeout()
+{
+    if (inputTimer->isActive())
+        inputTimer->start();
+}
+
+void FluidLauncher::inputTimedout()
+{
+    switchToSlideshow();
+}
+
+
+void FluidLauncher::switchToSlideshow()
+{
+    inputTimer->stop();
+    slideShowWidget->startShow();
+    setCurrentWidget(slideShowWidget);
+}
+
+void FluidLauncher::demoFinished()
+{
+    setCurrentWidget(pictureFlowWidget);
+    inputTimer->start();
+
+    // Bring the Fluidlauncher to the foreground to allow selecting another demo
+    raise();
+    activateWindow();
+}
+
+void FluidLauncher::changeEvent(QEvent* event)
+{
+    if (event->type() == QEvent::ActivationChange) {
+        if (isActiveWindow()) {
+            if(currentWidget() == pictureFlowWidget) {
+                resetInputTimeout();
+            } else {
+                slideShowWidget->startShow();
+            }
+        } else {
+            inputTimer->stop();
+            slideShowWidget->stopShow();
+        }
+    }
+    QStackedWidget::changeEvent(event);
+}
Index: trunk/demos/embedded/fluidlauncher/fluidlauncher.h
===================================================================
--- trunk/demos/embedded/fluidlauncher/fluidlauncher.h	(revision 561)
+++ trunk/demos/embedded/fluidlauncher/fluidlauncher.h	(revision 561)
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef FLUID_LAUNCHER_H
+#define FLUID_LAUNCHER_H
+
+#include <QtGui>
+#include <QTimer>
+#include <QStringRef>
+
+#include "pictureflow.h"
+#include "slideshow.h"
+#include "demoapplication.h"
+
+class FluidLauncher : public QStackedWidget
+{
+    Q_OBJECT
+
+public:
+    FluidLauncher(QStringList* args);
+    ~FluidLauncher();
+
+public slots:
+    void launchApplication(int index);
+    void switchToLauncher();
+    void resetInputTimeout();
+    void inputTimedout();
+    void demoFinished();
+
+protected:
+    void changeEvent(QEvent *event);
+
+private:
+    PictureFlow* pictureFlowWidget;
+    SlideShow* slideShowWidget;
+    QTimer* inputTimer;
+    QList<DemoApplication*> demoList;
+
+    bool loadConfig(QString configPath);
+    void populatePictureFlow();
+    void switchToSlideshow();
+    void parseDemos(QXmlStreamReader& reader);
+    void parseSlideshow(QXmlStreamReader& reader);
+
+};
+
+
+#endif
Index: trunk/demos/embedded/fluidlauncher/fluidlauncher.pro
===================================================================
--- trunk/demos/embedded/fluidlauncher/fluidlauncher.pro	(revision 561)
+++ trunk/demos/embedded/fluidlauncher/fluidlauncher.pro	(revision 561)
@@ -0,0 +1,214 @@
+TEMPLATE = app
+TARGET =
+DEPENDPATH += .
+INCLUDEPATH += .
+
+# Input
+HEADERS += \
+           demoapplication.h \
+           fluidlauncher.h \
+           pictureflow.h \
+           slideshow.h
+
+SOURCES += \
+           demoapplication.cpp \
+           fluidlauncher.cpp \
+           main.cpp \
+           pictureflow.cpp \
+           slideshow.cpp
+
+embedded{
+    target.path = $$[QT_INSTALL_DEMOS]/embedded/fluidlauncher
+    sources.files = $$SOURCES $$HEADERS $$RESOURCES *.pro *.html config.xml screenshots slides
+    sources.path = $$[QT_INSTALL_DEMOS]/embedded/fluidlauncher
+    INSTALLS += target sources
+}
+
+wince*{
+    QT += svg
+
+    BUILD_DIR = release
+    if(!debug_and_release|build_pass):CONFIG(debug, debug|release) {
+        BUILD_DIR = debug
+    }
+
+    executables.sources = \
+        $$QT_BUILD_TREE/demos/embedded/embeddedsvgviewer/$${BUILD_DIR}/embeddedsvgviewer.exe \
+        $$QT_BUILD_TREE/demos/embedded/styledemo/$${BUILD_DIR}/styledemo.exe \
+        $$QT_BUILD_TREE/demos/deform/$${BUILD_DIR}/deform.exe \
+        $$QT_BUILD_TREE/demos/pathstroke/$${BUILD_DIR}/pathstroke.exe \
+        $$QT_BUILD_TREE/examples/graphicsview/elasticnodes/$${BUILD_DIR}/elasticnodes.exe \
+        $$QT_BUILD_TREE/examples/widgets/wiggly/$${BUILD_DIR}/wiggly.exe \
+        $$QT_BUILD_TREE/examples/painting/concentriccircles/$${BUILD_DIR}/concentriccircles.exe \
+        $$QT_BUILD_TREE/examples/draganddrop/$${BUILD_DIR}/fridgemagnets.exe
+
+    executables.path = .
+
+    files.sources = $$PWD/screenshots $$PWD/slides $$PWD/../embeddedsvgviewer/shapes.svg
+    files.path = .
+
+    config.sources = $$PWD/config_wince/config.xml
+    config.path = .
+
+    DEPLOYMENT += config files executables
+
+    DEPLOYMENT_PLUGIN += qgif qjpeg qmng qsvg
+}
+
+symbian {
+    load(data_caging_paths)
+
+    TARGET.UID3 = 0xA000A641
+    ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
+
+    executables.sources = \
+        styledemo.exe \
+        deform.exe \
+        pathstroke.exe \
+        wiggly.exe \
+        qftp.exe \
+        saxbookmarks.exe \
+        desktopservices.exe \
+        fridgemagnets.exe \
+        softkeys.exe \
+        raycasting.exe \
+        flickable.exe \
+        digiflip.exe \
+        lightmaps.exe \
+        flightinfo.exe
+
+    executables.path = /sys/bin
+
+    reg_resource.sources = \
+        $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/styledemo_reg.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/deform_reg.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/pathstroke_reg.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/wiggly_reg.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/qftp_reg.rsc\
+        $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/saxbookmarks_reg.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/desktopservices_reg.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/fridgemagnets_reg.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/softkeys_reg.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/raycasting_reg.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/flickable_reg.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/digiflip_reg.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/lightmaps_reg.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/flightinfo_reg.rsc
+
+    contains(QT_CONFIG, phonon) {
+        reg_resource.sources += $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/qmediaplayer_reg.rsc
+    }
+
+
+    reg_resource.path = $$REG_RESOURCE_IMPORT_DIR
+
+    resource.sources = \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/styledemo.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/deform.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/pathstroke.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/wiggly.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/qftp.rsc\
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/saxbookmarks.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/desktopservices.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/fridgemagnets.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/softkeys.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/raycasting.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/flickable.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/digiflip.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/lightmaps.rsc \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/flightinfo.rsc
+
+
+    resource.path = $$APP_RESOURCE_DIR
+
+    mifs.sources = \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/fluidlauncher.mif \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/styledemo.mif \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/deform.mif \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/pathstroke.mif \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/wiggly.mif \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/qftp.mif \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/saxbookmarks.mif \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/desktopservices.mif \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/fridgemagnets.mif \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/softkeys.mif \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/raycasting.mif \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/flickable.mif \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/digiflip.mif \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/lightmaps.mif \
+        $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/flightinfo.mif
+    mifs.path = $$APP_RESOURCE_DIR
+
+    contains(QT_CONFIG, svg) {
+        executables.sources += \
+            embeddedsvgviewer.exe \
+            weatherinfo.exe
+
+        reg_resource.sources += \
+            $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/embeddedsvgviewer_reg.rsc \
+            $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/weatherinfo_reg.rsc
+
+        resource.sources += \
+            $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/embeddedsvgviewer.rsc \
+            $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/weatherinfo.rsc
+
+        mifs.sources += \
+            $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/embeddedsvgviewer.mif \
+            $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/weatherinfo.mif
+
+    }
+    contains(QT_CONFIG, webkit) {
+        executables.sources += anomaly.exe
+        reg_resource.sources += $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/anomaly_reg.rsc
+        resource.sources += $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/anomaly.rsc
+        mifs.sources += \
+            $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/anomaly.mif
+
+        # Since Fluidlauncher itself doesn't link webkit, we won't get dependency automatically
+        executables.pkg_prerules += \
+            "; Dependency to Qt Webkit" \
+            "(0x200267C2), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION},  {\"QtWebKit\"}"
+    }
+
+    contains(QT_CONFIG, phonon) {
+        executables.sources += qmediaplayer.exe
+        resource.sources += $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/qmediaplayer.rsc
+        mifs.sources += \
+            $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/qmediaplayer.mif
+    }
+
+    contains(QT_CONFIG, script) {
+        executables.sources += context2d.exe
+        reg_resource.sources += $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/context2d_reg.rsc
+        resource.sources += $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/context2d.rsc
+        mifs.sources += \
+            $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/context2d.mif
+    }
+
+    files.sources = $$PWD/screenshots $$PWD/slides
+    files.path = .
+
+    config.sources = $$PWD/config_s60/config.xml
+    config.path = .
+
+    viewerimages.sources = $$PWD/../embeddedsvgviewer/shapes.svg
+    viewerimages.path = /data/images/qt/demos/embeddedsvgviewer
+
+    # demos/mediaplayer make also use of these files.
+    desktopservices_music.sources = \
+        $$PWD/../desktopservices/data/*.mp3 \
+        $$PWD/../desktopservices/data/*.wav
+    desktopservices_music.path = /data/sounds
+
+    desktopservices_images.sources = $$PWD/../desktopservices/data/*.png
+    desktopservices_images.path = /data/images
+
+    saxbookmarks.sources = $$PWD/../../../examples/xml/saxbookmarks/frank.xbel
+    saxbookmarks.sources += $$PWD/../../../examples/xml/saxbookmarks/jennifer.xbel
+    saxbookmarks.path = /data/qt/saxbookmarks
+
+    DEPLOYMENT += config files executables viewerimages saxbookmarks reg_resource resource \
+        mifs desktopservices_music desktopservices_images
+
+    TARGET.EPOCHEAPSIZE = 100000 20000000
+}
Index: trunk/demos/embedded/fluidlauncher/main.cpp
===================================================================
--- trunk/demos/embedded/fluidlauncher/main.cpp	(revision 561)
+++ trunk/demos/embedded/fluidlauncher/main.cpp	(revision 561)
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QApplication>
+#include <QStringList>
+
+#include "fluidlauncher.h"
+
+
+int main(int argc, char** argv)
+{
+    QStringList originalArgs;
+
+    for (int i=0; i<argc; i++)
+      originalArgs << argv[i];
+
+    QApplication app(argc, argv);
+    FluidLauncher launcher(&originalArgs);
+
+
+    return app.exec();
+} 
Index: trunk/demos/embedded/fluidlauncher/pictureflow.cpp
===================================================================
--- trunk/demos/embedded/fluidlauncher/pictureflow.cpp	(revision 561)
+++ trunk/demos/embedded/fluidlauncher/pictureflow.cpp	(revision 561)
@@ -0,0 +1,1405 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the ActiveQt framework of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*
+  ORIGINAL COPYRIGHT HEADER
+  PictureFlow - animated image show widget
+  http://pictureflow.googlecode.com
+
+  Copyright (C) 2007 Ariya Hidayat (ariya@kde.org)
+
+  Permission is hereby granted, free of charge, to any person obtaining a copy
+  of this software and associated documentation files (the "Software"), to deal
+  in the Software without restriction, including without limitation the rights
+  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+  copies of the Software, and to permit persons to whom the Software is
+  furnished to do so, subject to the following conditions:
+
+  The above copyright notice and this permission notice shall be included in
+  all copies or substantial portions of the Software.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+  THE SOFTWARE.
+*/
+
+#include "pictureflow.h"
+
+#include <QBasicTimer>
+#include <QCache>
+#include <QImage>
+#include <QKeyEvent>
+#include <QPainter>
+#include <QPixmap>
+#include <QTimer>
+#include <QVector>
+#include <QWidget>
+#include <QTime>
+
+#ifdef Q_WS_QWS
+#include <QScreen>
+#endif
+
+#include <QDebug>
+
+static const int captionFontSize =
+#ifdef Q_WS_S60
+    8;
+#else
+    14;
+#endif
+
+
+// uncomment this to enable bilinear filtering for texture mapping
+// gives much better rendering, at the cost of memory space
+// #define PICTUREFLOW_BILINEAR_FILTER
+
+// for fixed-point arithmetic, we need minimum 32-bit long
+// long long (64-bit) might be useful for multiplication and division
+typedef long PFreal;
+
+typedef unsigned short QRgb565;
+
+#define RGB565_RED_MASK 0xF800
+#define RGB565_GREEN_MASK 0x07E0
+#define RGB565_BLUE_MASK 0x001F
+
+#define RGB565_RED(col) ((col&RGB565_RED_MASK)>>11)
+#define RGB565_GREEN(col) ((col&RGB565_GREEN_MASK)>>5)
+#define RGB565_BLUE(col) (col&RGB565_BLUE_MASK)
+
+#define PFREAL_SHIFT 10
+#define PFREAL_FACTOR (1 << PFREAL_SHIFT)
+#define PFREAL_ONE (1 << PFREAL_SHIFT)
+#define PFREAL_HALF (PFREAL_ONE >> 1)
+
+inline PFreal fmul(PFreal a, PFreal b)
+{
+  return ((long long)(a))*((long long)(b)) >> PFREAL_SHIFT;
+}
+
+inline PFreal fdiv(PFreal num, PFreal den)
+{
+  long long p = (long long)(num) << (PFREAL_SHIFT*2);
+  long long q = p / (long long)den;
+  long long r = q >> PFREAL_SHIFT;
+
+  return r;
+}
+
+inline float fixedToFloat(PFreal val)
+{
+  return ((float)val) / (float)PFREAL_ONE;
+}
+
+inline PFreal floatToFixed(float val)
+{
+  return (PFreal)(val*PFREAL_ONE);
+}
+
+#define IANGLE_MAX 1024
+#define IANGLE_MASK 1023
+
+// warning: regenerate the table if IANGLE_MAX and PFREAL_SHIFT are changed!
+static const PFreal sinTable[IANGLE_MAX] = {
+     3,      9,     15,     21,     28,     34,     40,     47,
+    53,     59,     65,     72,     78,     84,     90,     97,
+   103,    109,    115,    122,    128,    134,    140,    147,
+   153,    159,    165,    171,    178,    184,    190,    196,
+   202,    209,    215,    221,    227,    233,    239,    245,
+   251,    257,    264,    270,    276,    282,    288,    294,
+   300,    306,    312,    318,    324,    330,    336,    342,
+   347,    353,    359,    365,    371,    377,    383,    388,
+   394,    400,    406,    412,    417,    423,    429,    434,
+   440,    446,    451,    457,    463,    468,    474,    479,
+   485,    491,    496,    501,    507,    512,    518,    523,
+   529,    534,    539,    545,    550,    555,    561,    566,
+   571,    576,    581,    587,    592,    597,    602,    607,
+   612,    617,    622,    627,    632,    637,    642,    647,
+   652,    656,    661,    666,    671,    675,    680,    685,
+   690,    694,    699,    703,    708,    712,    717,    721,
+   726,    730,    735,    739,    743,    748,    752,    756,
+   760,    765,    769,    773,    777,    781,    785,    789,
+   793,    797,    801,    805,    809,    813,    816,    820,
+   824,    828,    831,    835,    839,    842,    846,    849,
+   853,    856,    860,    863,    866,    870,    873,    876,
+   879,    883,    886,    889,    892,    895,    898,    901,
+   904,    907,    910,    913,    916,    918,    921,    924,
+   927,    929,    932,    934,    937,    939,    942,    944,
+   947,    949,    951,    954,    956,    958,    960,    963,
+   965,    967,    969,    971,    973,    975,    977,    978,
+   980,    982,    984,    986,    987,    989,    990,    992,
+   994,    995,    997,    998,    999,   1001,   1002,   1003,
+  1004,   1006,   1007,   1008,   1009,   1010,   1011,   1012,
+  1013,   1014,   1015,   1015,   1016,   1017,   1018,   1018,
+  1019,   1019,   1020,   1020,   1021,   1021,   1022,   1022,
+  1022,   1023,   1023,   1023,   1023,   1023,   1023,   1023,
+  1023,   1023,   1023,   1023,   1023,   1023,   1023,   1022,
+  1022,   1022,   1021,   1021,   1020,   1020,   1019,   1019,
+  1018,   1018,   1017,   1016,   1015,   1015,   1014,   1013,
+  1012,   1011,   1010,   1009,   1008,   1007,   1006,   1004,
+  1003,   1002,   1001,    999,    998,    997,    995,    994,
+   992,    990,    989,    987,    986,    984,    982,    980,
+   978,    977,    975,    973,    971,    969,    967,    965,
+   963,    960,    958,    956,    954,    951,    949,    947,
+   944,    942,    939,    937,    934,    932,    929,    927,
+   924,    921,    918,    916,    913,    910,    907,    904,
+   901,    898,    895,    892,    889,    886,    883,    879,
+   876,    873,    870,    866,    863,    860,    856,    853,
+   849,    846,    842,    839,    835,    831,    828,    824,
+   820,    816,    813,    809,    805,    801,    797,    793,
+   789,    785,    781,    777,    773,    769,    765,    760,
+   756,    752,    748,    743,    739,    735,    730,    726,
+   721,    717,    712,    708,    703,    699,    694,    690,
+   685,    680,    675,    671,    666,    661,    656,    652,
+   647,    642,    637,    632,    627,    622,    617,    612,
+   607,    602,    597,    592,    587,    581,    576,    571,
+   566,    561,    555,    550,    545,    539,    534,    529,
+   523,    518,    512,    507,    501,    496,    491,    485,
+   479,    474,    468,    463,    457,    451,    446,    440,
+   434,    429,    423,    417,    412,    406,    400,    394,
+   388,    383,    377,    371,    365,    359,    353,    347,
+   342,    336,    330,    324,    318,    312,    306,    300,
+   294,    288,    282,    276,    270,    264,    257,    251,
+   245,    239,    233,    227,    221,    215,    209,    202,
+   196,    190,    184,    178,    171,    165,    159,    153,
+   147,    140,    134,    128,    122,    115,    109,    103,
+    97,     90,     84,     78,     72,     65,     59,     53,
+    47,     40,     34,     28,     21,     15,      9,      3,
+    -4,    -10,    -16,    -22,    -29,    -35,    -41,    -48,
+   -54,    -60,    -66,    -73,    -79,    -85,    -91,    -98,
+  -104,   -110,   -116,   -123,   -129,   -135,   -141,   -148,
+  -154,   -160,   -166,   -172,   -179,   -185,   -191,   -197,
+  -203,   -210,   -216,   -222,   -228,   -234,   -240,   -246,
+  -252,   -258,   -265,   -271,   -277,   -283,   -289,   -295,
+  -301,   -307,   -313,   -319,   -325,   -331,   -337,   -343,
+  -348,   -354,   -360,   -366,   -372,   -378,   -384,   -389,
+  -395,   -401,   -407,   -413,   -418,   -424,   -430,   -435,
+  -441,   -447,   -452,   -458,   -464,   -469,   -475,   -480,
+  -486,   -492,   -497,   -502,   -508,   -513,   -519,   -524,
+  -530,   -535,   -540,   -546,   -551,   -556,   -562,   -567,
+  -572,   -577,   -582,   -588,   -593,   -598,   -603,   -608,
+  -613,   -618,   -623,   -628,   -633,   -638,   -643,   -648,
+  -653,   -657,   -662,   -667,   -672,   -676,   -681,   -686,
+  -691,   -695,   -700,   -704,   -709,   -713,   -718,   -722,
+  -727,   -731,   -736,   -740,   -744,   -749,   -753,   -757,
+  -761,   -766,   -770,   -774,   -778,   -782,   -786,   -790,
+  -794,   -798,   -802,   -806,   -810,   -814,   -817,   -821,
+  -825,   -829,   -832,   -836,   -840,   -843,   -847,   -850,
+  -854,   -857,   -861,   -864,   -867,   -871,   -874,   -877,
+  -880,   -884,   -887,   -890,   -893,   -896,   -899,   -902,
+  -905,   -908,   -911,   -914,   -917,   -919,   -922,   -925,
+  -928,   -930,   -933,   -935,   -938,   -940,   -943,   -945,
+  -948,   -950,   -952,   -955,   -957,   -959,   -961,   -964,
+  -966,   -968,   -970,   -972,   -974,   -976,   -978,   -979,
+  -981,   -983,   -985,   -987,   -988,   -990,   -991,   -993,
+  -995,   -996,   -998,   -999,  -1000,  -1002,  -1003,  -1004,
+ -1005,  -1007,  -1008,  -1009,  -1010,  -1011,  -1012,  -1013,
+ -1014,  -1015,  -1016,  -1016,  -1017,  -1018,  -1019,  -1019,
+ -1020,  -1020,  -1021,  -1021,  -1022,  -1022,  -1023,  -1023,
+ -1023,  -1024,  -1024,  -1024,  -1024,  -1024,  -1024,  -1024,
+ -1024,  -1024,  -1024,  -1024,  -1024,  -1024,  -1024,  -1023,
+ -1023,  -1023,  -1022,  -1022,  -1021,  -1021,  -1020,  -1020,
+ -1019,  -1019,  -1018,  -1017,  -1016,  -1016,  -1015,  -1014,
+ -1013,  -1012,  -1011,  -1010,  -1009,  -1008,  -1007,  -1005,
+ -1004,  -1003,  -1002,  -1000,   -999,   -998,   -996,   -995,
+  -993,   -991,   -990,   -988,   -987,   -985,   -983,   -981,
+  -979,   -978,   -976,   -974,   -972,   -970,   -968,   -966,
+  -964,   -961,   -959,   -957,   -955,   -952,   -950,   -948,
+  -945,   -943,   -940,   -938,   -935,   -933,   -930,   -928,
+  -925,   -922,   -919,   -917,   -914,   -911,   -908,   -905,
+  -902,   -899,   -896,   -893,   -890,   -887,   -884,   -880,
+  -877,   -874,   -871,   -867,   -864,   -861,   -857,   -854,
+  -850,   -847,   -843,   -840,   -836,   -832,   -829,   -825,
+  -821,   -817,   -814,   -810,   -806,   -802,   -798,   -794,
+  -790,   -786,   -782,   -778,   -774,   -770,   -766,   -761,
+  -757,   -753,   -749,   -744,   -740,   -736,   -731,   -727,
+  -722,   -718,   -713,   -709,   -704,   -700,   -695,   -691,
+  -686,   -681,   -676,   -672,   -667,   -662,   -657,   -653,
+  -648,   -643,   -638,   -633,   -628,   -623,   -618,   -613,
+  -608,   -603,   -598,   -593,   -588,   -582,   -577,   -572,
+  -567,   -562,   -556,   -551,   -546,   -540,   -535,   -530,
+  -524,   -519,   -513,   -508,   -502,   -497,   -492,   -486,
+  -480,   -475,   -469,   -464,   -458,   -452,   -447,   -441,
+  -435,   -430,   -424,   -418,   -413,   -407,   -401,   -395,
+  -389,   -384,   -378,   -372,   -366,   -360,   -354,   -348,
+  -343,   -337,   -331,   -325,   -319,   -313,   -307,   -301,
+  -295,   -289,   -283,   -277,   -271,   -265,   -258,   -252,
+  -246,   -240,   -234,   -228,   -222,   -216,   -210,   -203,
+  -197,   -191,   -185,   -179,   -172,   -166,   -160,   -154,
+  -148,   -141,   -135,   -129,   -123,   -116,   -110,   -104,
+   -98,    -91,    -85,    -79,    -73,    -66,    -60,    -54,
+   -48,    -41,    -35,    -29,    -22,    -16,    -10,     -4
+};
+
+// this is the program the generate the above table
+#if 0
+#include <stdio.h>
+#include <math.h>
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
+#define PFREAL_ONE 1024
+#define IANGLE_MAX 1024
+
+int main(int, char**)
+{
+  FILE*f = fopen("table.c","wt");
+  fprintf(f,"PFreal sinTable[] = {\n");
+  for(int i = 0; i < 128; i++)
+  {
+    for(int j = 0; j < 8; j++)
+    {
+      int iang = j+i*8;
+      double ii = (double)iang + 0.5;
+      double angle = ii * 2 * M_PI / IANGLE_MAX;
+      double sinAngle = sin(angle);
+      fprintf(f,"%6d, ", (int)(floor(PFREAL_ONE*sinAngle)));
+    }
+    fprintf(f,"\n");
+  }
+  fprintf(f,"};\n");
+  fclose(f);
+
+  return 0;
+}
+#endif
+
+inline PFreal fsin(int iangle)
+{
+  while(iangle < 0)
+    iangle += IANGLE_MAX;
+  return sinTable[iangle & IANGLE_MASK];
+}
+
+inline PFreal fcos(int iangle)
+{
+  // quarter phase shift
+  return fsin(iangle + (IANGLE_MAX >> 2));
+}
+
+struct SlideInfo
+{
+  int slideIndex;
+  int angle;
+  PFreal cx;
+  PFreal cy;
+};
+
+class PictureFlowPrivate
+{
+public:
+  PictureFlowPrivate(PictureFlow* widget);
+
+  int slideCount() const;
+  void setSlideCount(int count);
+
+  QSize slideSize() const;
+  void setSlideSize(QSize size);
+
+  int zoomFactor() const;
+  void setZoomFactor(int z);
+
+  QImage slide(int index) const;
+  void setSlide(int index, const QImage& image);
+
+  int currentSlide() const;
+  void setCurrentSlide(int index);
+
+  int getTarget() const;
+
+  void showPrevious();
+  void showNext();
+  void showSlide(int index);
+
+  void resize(int w, int h);
+
+  void render();
+  void startAnimation();
+  void updateAnimation();
+
+  void clearSurfaceCache();
+
+  QImage buffer;
+  QBasicTimer animateTimer;
+
+  bool   singlePress;
+  int    singlePressThreshold;
+  QPoint firstPress;
+  QPoint previousPos;
+  QTime  previousPosTimestamp;
+  int    pixelDistanceMoved;
+  int    pixelsToMovePerSlide;
+
+  QVector<QString> captions;
+
+private:
+  PictureFlow* widget;
+
+  int slideWidth;
+  int slideHeight;
+  int zoom;
+
+  QVector<QImage> slideImages;
+  int centerIndex;
+  SlideInfo centerSlide;
+  QVector<SlideInfo> leftSlides;
+  QVector<SlideInfo> rightSlides;
+
+  QVector<PFreal> rays;
+  int itilt;
+  int spacing;
+  PFreal offsetX;
+  PFreal offsetY;
+
+  QImage blankSurface;
+  QCache<int, QImage> surfaceCache;
+  QTimer triggerTimer;
+
+  int slideFrame;
+  int step;
+  int target;
+  int fade;
+
+  void recalc(int w, int h);
+  QRect renderSlide(const SlideInfo &slide, int alpha=256, int col1=-1, int col=-1);
+  QImage* surface(int slideIndex);
+  void triggerRender();
+  void resetSlides();
+};
+
+PictureFlowPrivate::PictureFlowPrivate(PictureFlow* w)
+{
+  widget = w;
+
+  slideWidth = 200;
+  slideHeight = 200;
+  zoom = 100;
+
+  centerIndex = 0;
+
+  slideFrame = 0;
+  step = 0;
+  target = 0;
+  fade = 256;
+
+  triggerTimer.setSingleShot(true);
+  triggerTimer.setInterval(0);
+  QObject::connect(&triggerTimer, SIGNAL(timeout()), widget, SLOT(render()));
+
+  recalc(200, 200);
+  resetSlides();
+}
+
+int PictureFlowPrivate::slideCount() const
+{
+  return slideImages.count();
+}
+
+void PictureFlowPrivate::setSlideCount(int count)
+{
+  slideImages.resize(count);
+  captions.resize(count);
+  surfaceCache.clear();
+  resetSlides();
+  triggerRender();
+}
+
+QSize PictureFlowPrivate::slideSize() const
+{
+  return QSize(slideWidth, slideHeight);
+}
+
+void PictureFlowPrivate::setSlideSize(QSize size)
+{
+  slideWidth = size.width();
+  slideHeight = size.height();
+  recalc(buffer.width(), buffer.height());
+  triggerRender();
+}
+
+int PictureFlowPrivate::zoomFactor() const
+{
+  return zoom;
+}
+
+void PictureFlowPrivate::setZoomFactor(int z)
+{
+  if(z <= 0)
+    return;
+
+  zoom = z;
+  recalc(buffer.width(), buffer.height());
+  triggerRender();
+}
+
+QImage PictureFlowPrivate::slide(int index) const
+{
+  return slideImages[index];
+}
+
+void PictureFlowPrivate::setSlide(int index, const QImage& image)
+{
+  if((index >= 0) && (index < slideImages.count()))
+  {
+    slideImages[index] = image;
+    surfaceCache.remove(index);
+    triggerRender();
+  }
+}
+
+int PictureFlowPrivate::getTarget() const
+{
+  return target;
+}
+
+int PictureFlowPrivate::currentSlide() const
+{
+  return centerIndex;
+}
+
+void PictureFlowPrivate::setCurrentSlide(int index)
+{
+  step = 0;
+  centerIndex = qBound(index, 0, slideImages.count()-1);
+  target = centerIndex;
+  slideFrame = index << 16;
+  resetSlides();
+  triggerRender();
+}
+
+void PictureFlowPrivate::showPrevious()
+{
+  if(step >= 0)
+  {
+    if(centerIndex > 0)
+    {
+      target--;
+      startAnimation();
+    }
+  }
+  else
+  {
+    target = qMax(0, centerIndex - 2);
+  }
+}
+
+void PictureFlowPrivate::showNext()
+{
+  if(step <= 0)
+  {
+    if(centerIndex < slideImages.count()-1)
+    {
+      target++;
+      startAnimation();
+    }
+  }
+  else
+  {
+    target = qMin(centerIndex + 2, slideImages.count()-1);
+  }
+}
+
+void PictureFlowPrivate::showSlide(int index)
+{
+  index = qMax(index, 0);
+  index = qMin(slideImages.count()-1, index);
+  if(index == centerSlide.slideIndex)
+    return;
+
+  target = index;
+  startAnimation();
+}
+
+void PictureFlowPrivate::resize(int w, int h)
+{
+  recalc(w, h);
+  resetSlides();
+  triggerRender();
+}
+
+
+// adjust slides so that they are in "steady state" position
+void PictureFlowPrivate::resetSlides()
+{
+  centerSlide.angle = 0;
+  centerSlide.cx = 0;
+  centerSlide.cy = 0;
+  centerSlide.slideIndex = centerIndex;
+
+  leftSlides.clear();
+  leftSlides.resize(3);
+  for(int i = 0; i < leftSlides.count(); i++)
+  {
+    SlideInfo& si = leftSlides[i];
+    si.angle = itilt;
+    si.cx = -(offsetX + spacing*i*PFREAL_ONE);
+    si.cy = offsetY;
+    si.slideIndex = centerIndex-1-i;
+    //qDebug() << "Left[" << i << "] x=" << fixedToFloat(si.cx) << ", y=" << fixedToFloat(si.cy) ;
+  }
+
+  rightSlides.clear();
+  rightSlides.resize(3);
+  for(int i = 0; i < rightSlides.count(); i++)
+  {
+    SlideInfo& si = rightSlides[i];
+    si.angle = -itilt;
+    si.cx = offsetX + spacing*i*PFREAL_ONE;
+    si.cy = offsetY;
+    si.slideIndex = centerIndex+1+i;
+    //qDebug() << "Right[" << i << "] x=" << fixedToFloat(si.cx) << ", y=" << fixedToFloat(si.cy) ;
+  }
+}
+
+#define BILINEAR_STRETCH_HOR 4
+#define BILINEAR_STRETCH_VER 4
+
+static QImage prepareSurface(QImage img, int w, int h)
+{
+  Qt::TransformationMode mode = Qt::SmoothTransformation;
+  img = img.scaled(w, h, Qt::IgnoreAspectRatio, mode);
+
+  // slightly larger, to accomodate for the reflection
+  int hs = h * 2;
+  int hofs = h / 3;
+
+  // offscreen buffer: black is sweet
+  QImage result(hs, w, QImage::Format_RGB16);
+  result.fill(0);
+
+  // transpose the image, this is to speed-up the rendering
+  // because we process one column at a time
+  // (and much better and faster to work row-wise, i.e in one scanline)
+  for(int x = 0; x < w; x++)
+    for(int y = 0; y < h; y++)
+      result.setPixel(hofs + y, x, img.pixel(x, y));
+
+  // create the reflection
+  int ht = hs - h - hofs;
+  int hte = ht;
+  for(int x = 0; x < w; x++)
+    for(int y = 0; y < ht; y++)
+    {
+      QRgb color = img.pixel(x, img.height()-y-1);
+      //QRgb565 color = img.scanLine(img.height()-y-1) + x*sizeof(QRgb565); //img.pixel(x, img.height()-y-1);
+      int a = qAlpha(color);
+      int r = qRed(color)   * a / 256 * (hte - y) / hte * 3/5;
+      int g = qGreen(color) * a / 256 * (hte - y) / hte * 3/5;
+      int b = qBlue(color)  * a / 256 * (hte - y) / hte * 3/5;
+      result.setPixel(h+hofs+y, x, qRgb(r, g, b));
+    }
+
+#ifdef PICTUREFLOW_BILINEAR_FILTER
+  int hh = BILINEAR_STRETCH_VER*hs;
+  int ww = BILINEAR_STRETCH_HOR*w;
+  result = result.scaled(hh, ww, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+#endif
+
+  return result;
+}
+
+
+// get transformed image for specified slide
+// if it does not exist, create it and place it in the cache
+QImage* PictureFlowPrivate::surface(int slideIndex)
+{
+  if(slideIndex < 0)
+    return 0;
+  if(slideIndex >= slideImages.count())
+    return 0;
+
+  if(surfaceCache.contains(slideIndex))
+    return surfaceCache[slideIndex];
+
+  QImage img = widget->slide(slideIndex);
+  if(img.isNull())
+  {
+    if(blankSurface.isNull())
+    {
+      blankSurface = QImage(slideWidth, slideHeight, QImage::Format_RGB16);
+
+      QPainter painter(&blankSurface);
+      QPoint p1(slideWidth*4/10, 0);
+      QPoint p2(slideWidth*6/10, slideHeight);
+      QLinearGradient linearGrad(p1, p2);
+      linearGrad.setColorAt(0, Qt::black);
+      linearGrad.setColorAt(1, Qt::white); 
+      painter.setBrush(linearGrad);
+      painter.fillRect(0, 0, slideWidth, slideHeight, QBrush(linearGrad));
+
+      painter.setPen(QPen(QColor(64,64,64), 4));
+      painter.setBrush(QBrush());
+      painter.drawRect(2, 2, slideWidth-3, slideHeight-3);
+      painter.end();
+      blankSurface = prepareSurface(blankSurface, slideWidth, slideHeight);
+    }
+    return &blankSurface;
+  }
+
+  surfaceCache.insert(slideIndex, new QImage(prepareSurface(img, slideWidth, slideHeight)));
+  return surfaceCache[slideIndex];
+}
+
+
+// Schedules rendering the slides. Call this function to avoid immediate
+// render and thus cause less flicker.
+void PictureFlowPrivate::triggerRender()
+{
+  triggerTimer.start();
+}
+
+// Render the slides. Updates only the offscreen buffer.
+void PictureFlowPrivate::render()
+{
+  buffer.fill(0);
+
+  int nleft = leftSlides.count();
+  int nright = rightSlides.count();
+
+  QRect r = renderSlide(centerSlide);
+  int c1 = r.left();
+  int c2 = r.right();
+
+  if(step == 0)
+  {
+    // no animation, boring plain rendering
+    for(int index = 0; index < nleft-1; index++)
+    {
+      int alpha = (index < nleft-2) ? 256 : 128;
+      QRect rs = renderSlide(leftSlides[index], alpha, 0, c1-1);
+      if(!rs.isEmpty())
+        c1 = rs.left();
+    }
+    for(int index = 0; index < nright-1; index++)
+    {
+      int alpha = (index < nright-2) ? 256 : 128;
+      QRect rs = renderSlide(rightSlides[index], alpha, c2+1, buffer.width());
+      if(!rs.isEmpty())
+        c2 = rs.right();
+    }
+
+    QPainter painter;
+    painter.begin(&buffer);
+
+    QFont font("Arial", captionFontSize);
+    font.setBold(true);
+    painter.setFont(font);
+    painter.setPen(Qt::white);
+    //painter.setPen(QColor(255,255,255,127));
+
+    if (!captions.isEmpty())
+        painter.drawText( QRect(0,0, buffer.width(), (buffer.height() - slideSize().height())/4),
+        Qt::AlignCenter, captions[centerIndex]);
+
+    painter.end();
+
+  }
+  else
+  {
+    // the first and last slide must fade in/fade out
+    for(int index = 0; index < nleft; index++)
+    {
+      int alpha = 256;
+      if(index == nleft-1)
+        alpha = (step > 0) ? 0 : 128-fade/2;
+      if(index == nleft-2)
+        alpha = (step > 0) ? 128-fade/2 : 256-fade/2;
+      if(index == nleft-3)
+        alpha = (step > 0) ? 256-fade/2 : 256;
+      QRect rs = renderSlide(leftSlides[index], alpha, 0, c1-1);
+      if(!rs.isEmpty())
+        c1 = rs.left();
+
+      alpha = (step > 0) ? 256-fade/2 : 256;
+    }
+    for(int index = 0; index < nright; index++)
+    {
+      int alpha = (index < nright-2) ? 256 : 128;
+      if(index == nright-1)
+        alpha = (step > 0) ? fade/2 : 0;
+      if(index == nright-2)
+        alpha = (step > 0) ? 128+fade/2 : fade/2;
+      if(index == nright-3)
+        alpha = (step > 0) ? 256 : 128+fade/2;
+      QRect rs = renderSlide(rightSlides[index], alpha, c2+1, buffer.width());
+      if(!rs.isEmpty())
+        c2 = rs.right();
+    }
+
+    QPainter painter;
+    painter.begin(&buffer);
+
+    QFont font("Arial", captionFontSize);
+    font.setBold(true);
+    painter.setFont(font);
+
+    int leftTextIndex = (step>0) ? centerIndex : centerIndex-1;
+
+    painter.setPen(QColor(255,255,255, (255-fade) ));
+    painter.drawText( QRect(0,0, buffer.width(), (buffer.height() - slideSize().height())/4),
+                      Qt::AlignCenter, captions[leftTextIndex]);
+
+    painter.setPen(QColor(255,255,255, fade));
+    painter.drawText( QRect(0,0, buffer.width(), (buffer.height() - slideSize().height())/4),
+                      Qt::AlignCenter, captions[leftTextIndex+1]);
+
+    painter.end();
+  }
+}
+
+
+static inline uint BYTE_MUL_RGB16(uint x, uint a) {
+    a += 1;
+    uint t = (((x & 0x07e0)*a) >> 8) & 0x07e0;
+    t |= (((x & 0xf81f)*(a>>2)) >> 6) & 0xf81f;
+    return t;
+}
+
+static inline uint BYTE_MUL_RGB16_32(uint x, uint a) {
+    uint t = (((x & 0xf81f07e0) >> 5)*a) & 0xf81f07e0;
+    t |= (((x & 0x07e0f81f)*a) >> 5) & 0x07e0f81f;
+    return t;
+}
+
+
+// Renders a slide to offscreen buffer. Returns a rect of the rendered area.
+// alpha=256 means normal, alpha=0 is fully black, alpha=128 half transparent
+// col1 and col2 limit the column for rendering.
+QRect PictureFlowPrivate::renderSlide(const SlideInfo &slide, int alpha, 
+int col1, int col2)
+{
+  QImage* src = surface(slide.slideIndex);
+  if(!src)
+    return QRect();
+
+  QRect rect(0, 0, 0, 0);
+
+#ifdef PICTUREFLOW_BILINEAR_FILTER
+  int sw = src->height() / BILINEAR_STRETCH_HOR;
+  int sh = src->width() / BILINEAR_STRETCH_VER;
+#else
+  int sw = src->height();
+  int sh = src->width();
+#endif
+  int h = buffer.height();
+  int w = buffer.width();
+
+  if(col1 > col2)
+  {
+    int c = col2;
+    col2 = col1;
+    col1 = c;
+  }
+
+  col1 = (col1 >= 0) ? col1 : 0;
+  col2 = (col2 >= 0) ? col2 : w-1;
+  col1 = qMin(col1, w-1);
+  col2 = qMin(col2, w-1);
+
+  int distance = h * 100 / zoom;
+  PFreal sdx = fcos(slide.angle);
+  PFreal sdy = fsin(slide.angle);
+  PFreal xs = slide.cx - slideWidth * sdx/2;
+  PFreal ys = slide.cy - slideWidth * sdy/2;
+  PFreal dist = distance * PFREAL_ONE;
+
+  int xi = qMax((PFreal)0, ((w*PFREAL_ONE/2) + fdiv(xs*h, dist+ys)) >> PFREAL_SHIFT);
+  if(xi >= w)
+    return rect;
+
+  bool flag = false;
+  rect.setLeft(xi);
+  for(int x = qMax(xi, col1); x <= col2; x++)
+  {
+    PFreal hity = 0;
+    PFreal fk = rays[x];
+    if(sdy)
+    {
+      fk = fk - fdiv(sdx,sdy);
+      hity = -fdiv((rays[x]*distance - slide.cx + slide.cy*sdx/sdy), fk);
+    }
+
+    dist = distance*PFREAL_ONE + hity;
+    if(dist < 0)
+      continue;
+
+    PFreal hitx = fmul(dist, rays[x]);
+    PFreal hitdist = fdiv(hitx - slide.cx, sdx);
+
+#ifdef PICTUREFLOW_BILINEAR_FILTER
+    int column = sw*BILINEAR_STRETCH_HOR/2 + (hitdist*BILINEAR_STRETCH_HOR >> PFREAL_SHIFT);
+    if(column >= sw*BILINEAR_STRETCH_HOR)
+      break;
+#else
+    int column = sw/2 + (hitdist >> PFREAL_SHIFT);
+    if(column >= sw)
+      break;
+#endif
+    if(column < 0)
+      continue;
+
+    rect.setRight(x);
+    if(!flag)
+      rect.setLeft(x);
+    flag = true;
+
+    int y1 = h/2;
+    int y2 = y1+ 1;
+    QRgb565* pixel1 = (QRgb565*)(buffer.scanLine(y1)) + x;
+    QRgb565* pixel2 = (QRgb565*)(buffer.scanLine(y2)) + x;
+    int pixelstep = pixel2 - pixel1;
+
+#ifdef PICTUREFLOW_BILINEAR_FILTER
+    int center = (sh*BILINEAR_STRETCH_VER/2);
+    int dy = dist*BILINEAR_STRETCH_VER / h;
+#else
+    int center = (sh/2);
+    int dy = dist / h;
+#endif
+    int p1 = center*PFREAL_ONE - dy/2;
+    int p2 = center*PFREAL_ONE + dy/2;
+
+    const QRgb565 *ptr = (const QRgb565*)(src->scanLine(column));
+    if(alpha == 256)
+      while((y1 >= 0) && (y2 < h) && (p1 >= 0))
+      {
+        *pixel1 = ptr[p1 >> PFREAL_SHIFT];
+        *pixel2 = ptr[p2 >> PFREAL_SHIFT];
+        p1 -= dy;
+        p2 += dy;
+        y1--;
+        y2++;
+        pixel1 -= pixelstep;
+        pixel2 += pixelstep;
+      }
+    else
+      while((y1 >= 0) && (y2 < h) && (p1 >= 0))
+      {
+        QRgb565 c1 = ptr[p1 >> PFREAL_SHIFT];
+        QRgb565 c2 = ptr[p2 >> PFREAL_SHIFT];
+
+        *pixel1 = BYTE_MUL_RGB16(c1, alpha);
+        *pixel2 = BYTE_MUL_RGB16(c2, alpha);
+
+/*
+        int r1 = qRed(c1) * alpha/256;
+        int g1 = qGreen(c1) * alpha/256;
+        int b1 = qBlue(c1) * alpha/256;
+        int r2 = qRed(c2) * alpha/256;
+        int g2 = qGreen(c2) * alpha/256;
+        int b2 = qBlue(c2) * alpha/256;
+        *pixel1 = qRgb(r1, g1, b1);
+        *pixel2 = qRgb(r2, g2, b2);
+*/
+        p1 -= dy;
+        p2 += dy;
+        y1--;
+        y2++;
+        pixel1 -= pixelstep;
+        pixel2 += pixelstep;
+     }
+   }
+
+   rect.setTop(0);
+   rect.setBottom(h-1);
+   return rect;
+}
+
+// Updates look-up table and other stuff necessary for the rendering.
+// Call this when the viewport size or slide dimension is changed.
+void PictureFlowPrivate::recalc(int ww, int wh)
+{
+  int w = (ww+1)/2;
+  int h = (wh+1)/2;
+  buffer = QImage(ww, wh, QImage::Format_RGB16);
+  buffer.fill(0);
+
+  rays.resize(w*2);
+
+  for(int i = 0; i < w; i++)
+  {
+    PFreal gg = (PFREAL_HALF + i * PFREAL_ONE) / (2*h);
+    rays[w-i-1] = -gg;
+    rays[w+i] = gg;
+  }
+
+  // pointer must move more than 1/15 of the window to enter drag mode
+  singlePressThreshold = ww / 15;
+//  qDebug() << "singlePressThreshold now set to " << singlePressThreshold;
+
+  pixelsToMovePerSlide = ww / 3;
+//  qDebug() << "pixelsToMovePerSlide now set to " << pixelsToMovePerSlide;
+
+  itilt = 80 * IANGLE_MAX / 360;  // approx. 80 degrees tilted
+
+  offsetY = slideWidth/2 * fsin(itilt);
+  offsetY += slideWidth * PFREAL_ONE / 4;
+
+//  offsetX = slideWidth/2 * (PFREAL_ONE-fcos(itilt));
+//  offsetX += slideWidth * PFREAL_ONE;
+
+  //         center slide             +         side slide
+  offsetX = slideWidth*PFREAL_ONE;
+//  offsetX = 150*PFREAL_ONE;//(slideWidth/2)*PFREAL_ONE + ( slideWidth*fcos(itilt) )/2;
+//  qDebug() << "center width = " << slideWidth;
+//  qDebug() << "side width = " << fixedToFloat(slideWidth/2 * (PFREAL_ONE-fcos(itilt)));
+//  qDebug() << "offsetX now " << fixedToFloat(offsetX);
+
+  spacing = slideWidth/5;
+
+  surfaceCache.clear();
+  blankSurface = QImage();
+}
+
+void PictureFlowPrivate::startAnimation()
+{
+  if(!animateTimer.isActive())
+  {
+    step = (target < centerSlide.slideIndex) ? -1 : 1;
+    animateTimer.start(30, widget);
+  }
+}
+
+// Updates the animation effect. Call this periodically from a timer.
+void PictureFlowPrivate::updateAnimation()
+{
+  if(!animateTimer.isActive())
+    return;
+  if(step == 0)
+    return;
+
+  int speed = 16384;
+
+  // deaccelerate when approaching the target
+  if(true)
+  {
+    const int max = 2 * 65536;
+
+    int fi = slideFrame;
+    fi -= (target << 16);
+    if(fi < 0)
+      fi = -fi;
+    fi = qMin(fi, max);
+
+    int ia = IANGLE_MAX * (fi-max/2) / (max*2);
+    speed = 512 + 16384 * (PFREAL_ONE+fsin(ia))/PFREAL_ONE;
+  }
+
+  slideFrame += speed*step;
+
+  int index = slideFrame >> 16;
+  int pos = slideFrame & 0xffff;
+  int neg = 65536 - pos;
+  int tick = (step < 0) ? neg : pos;
+  PFreal ftick = (tick * PFREAL_ONE) >> 16;
+
+  // the leftmost and rightmost slide must fade away
+  fade = pos / 256;
+
+  if(step < 0)
+    index++;
+  if(centerIndex != index)
+  {
+    centerIndex = index;
+    slideFrame = index << 16;
+    centerSlide.slideIndex = centerIndex;
+    for(int i = 0; i < leftSlides.count(); i++)
+      leftSlides[i].slideIndex = centerIndex-1-i;
+    for(int i = 0; i < rightSlides.count(); i++)
+      rightSlides[i].slideIndex = centerIndex+1+i;
+  }
+
+  centerSlide.angle = (step * tick * itilt) >> 16;
+  centerSlide.cx = -step * fmul(offsetX, ftick);
+  centerSlide.cy = fmul(offsetY, ftick);
+
+  if(centerIndex == target)
+  {
+    resetSlides();
+    animateTimer.stop();
+    triggerRender();
+    step = 0;
+    fade = 256;
+    return;
+  }
+
+  for(int i = 0; i < leftSlides.count(); i++)
+  {
+    SlideInfo& si = leftSlides[i];
+    si.angle = itilt;
+    si.cx = -(offsetX + spacing*i*PFREAL_ONE + step*spacing*ftick);
+    si.cy = offsetY;
+  }
+
+  for(int i = 0; i < rightSlides.count(); i++)
+  {
+    SlideInfo& si = rightSlides[i];
+    si.angle = -itilt;
+    si.cx = offsetX + spacing*i*PFREAL_ONE - step*spacing*ftick;
+    si.cy = offsetY;
+  }
+
+  if(step > 0)
+  {
+    PFreal ftick = (neg * PFREAL_ONE) >> 16;
+    rightSlides[0].angle = -(neg * itilt) >> 16;
+    rightSlides[0].cx = fmul(offsetX, ftick);
+    rightSlides[0].cy = fmul(offsetY, ftick);
+  }
+  else
+  {
+    PFreal ftick = (pos * PFREAL_ONE) >> 16;
+    leftSlides[0].angle = (pos * itilt) >> 16;
+    leftSlides[0].cx = -fmul(offsetX, ftick);
+    leftSlides[0].cy = fmul(offsetY, ftick);
+  }
+
+  // must change direction ?
+  if(target < index) if(step > 0)
+    step = -1;
+  if(target > index) if(step < 0)
+    step = 1;
+
+  triggerRender();
+}
+
+
+void PictureFlowPrivate::clearSurfaceCache()
+{
+  surfaceCache.clear();
+}
+
+// -----------------------------------------
+
+PictureFlow::PictureFlow(QWidget* parent): QWidget(parent)
+{
+  d = new PictureFlowPrivate(this);
+
+  setAttribute(Qt::WA_StaticContents, true);
+  setAttribute(Qt::WA_OpaquePaintEvent, true);
+  setAttribute(Qt::WA_NoSystemBackground, true);
+
+#ifdef Q_WS_QWS
+  if (QScreen::instance()->pixelFormat() != QImage::Format_Invalid)
+    setAttribute(Qt::WA_PaintOnScreen, true);
+#endif
+}
+
+PictureFlow::~PictureFlow()
+{
+  delete d;
+}
+
+int PictureFlow::slideCount() const
+{
+  return d->slideCount();
+}
+
+void PictureFlow::setSlideCount(int count)
+{
+  d->setSlideCount(count);
+}
+
+QSize PictureFlow::slideSize() const
+{
+  return d->slideSize();
+}
+
+void PictureFlow::setSlideSize(QSize size)
+{
+  d->setSlideSize(size);
+}
+
+int PictureFlow::zoomFactor() const
+{
+  return d->zoomFactor();
+}
+
+void PictureFlow::setZoomFactor(int z)
+{
+  d->setZoomFactor(z);
+}
+
+QImage PictureFlow::slide(int index) const
+{
+  return d->slide(index);
+}
+
+void PictureFlow::setSlide(int index, const QImage& image)
+{
+  d->setSlide(index, image);
+}
+
+void PictureFlow::setSlide(int index, const QPixmap& pixmap)
+{
+  d->setSlide(index, pixmap.toImage());
+}
+
+void PictureFlow::setSlideCaption(int index, QString caption)
+{
+  d->captions[index] = caption;
+}
+
+
+int PictureFlow::currentSlide() const
+{
+  return d->currentSlide();
+}
+
+void PictureFlow::setCurrentSlide(int index)
+{
+  d->setCurrentSlide(index);
+}
+
+void PictureFlow::clear()
+{
+  d->setSlideCount(0);
+}
+
+void PictureFlow::clearCaches()
+{
+  d->clearSurfaceCache();
+}
+
+void PictureFlow::render()
+{
+  d->render();
+  update();
+}
+
+void PictureFlow::showPrevious()
+{
+  d->showPrevious();
+}
+
+void PictureFlow::showNext()
+{
+  d->showNext();
+}
+
+void PictureFlow::showSlide(int index)
+{
+  d->showSlide(index);
+}
+
+void PictureFlow::keyPressEvent(QKeyEvent* event)
+{
+  if(event->key() == Qt::Key_Left)
+  {
+    if(event->modifiers() == Qt::ControlModifier)
+      showSlide(currentSlide()-10);
+    else
+      showPrevious();
+    event->accept();
+    return;
+  }
+
+  if(event->key() == Qt::Key_Right)
+  {
+    if(event->modifiers() == Qt::ControlModifier)
+      showSlide(currentSlide()+10);
+    else
+      showNext();
+    event->accept();
+    return;
+  }
+
+  if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Select) {
+    emit itemActivated(d->getTarget());
+    event->accept();
+    return;
+  }
+
+  event->ignore();
+}
+
+#define SPEED_LOWER_THRESHOLD 10
+#define SPEED_UPPER_LIMIT 40
+
+void PictureFlow::mouseMoveEvent(QMouseEvent* event)
+{
+  int distanceMovedSinceLastEvent = event->pos().x() - d->previousPos.x();
+
+  // Check to see if we need to switch from single press mode to a drag mode
+  if (d->singlePress)
+  {
+    // Increment the distance moved for this event
+    d->pixelDistanceMoved += distanceMovedSinceLastEvent;
+
+    // Check against threshold
+    if (qAbs(d->pixelDistanceMoved) > d->singlePressThreshold)
+    {
+      d->singlePress = false;
+//      qDebug() << "DRAG MODE ON";
+    }
+  }
+
+  if (!d->singlePress)
+  {
+    int speed;
+    // Calculate velocity in a 10th of a window width per second
+    if (d->previousPosTimestamp.elapsed() == 0)
+      speed = SPEED_LOWER_THRESHOLD;
+    else
+    {
+      speed = ((qAbs(event->pos().x()-d->previousPos.x())*1000) / d->previousPosTimestamp.elapsed())
+                    / (d->buffer.width() / 10);
+
+      if (speed < SPEED_LOWER_THRESHOLD)
+        speed = SPEED_LOWER_THRESHOLD;
+      else if (speed > SPEED_UPPER_LIMIT)
+        speed = SPEED_UPPER_LIMIT;
+      else {
+        speed = SPEED_LOWER_THRESHOLD + (speed / 3);
+//        qDebug() << "ACCELERATION ENABLED Speed = " << speed << ", Distance = " << distanceMovedSinceLastEvent;
+      }
+    }
+
+//    qDebug() << "Speed = " << speed;
+
+//    int incr = ((event->pos().x() - d->previousPos.x())/10) * speed;
+
+//    qDebug() << "Incremented by " << incr;
+
+    int incr = (distanceMovedSinceLastEvent * speed);
+
+    //qDebug() << "(distanceMovedSinceLastEvent * speed) = " << incr;
+
+    if (incr > d->pixelsToMovePerSlide*2) {
+      incr = d->pixelsToMovePerSlide*2;
+      //qDebug() << "Limiting incr to " << incr;
+    }
+
+
+    d->pixelDistanceMoved += (distanceMovedSinceLastEvent * speed);
+ //   qDebug() << "distance: " << d->pixelDistanceMoved;
+
+    int slideInc;
+
+    slideInc = d->pixelDistanceMoved / (d->pixelsToMovePerSlide * 10);
+
+    if (slideInc != 0) {
+      int targetSlide = d->getTarget() - slideInc;
+      showSlide(targetSlide);
+//      qDebug() << "TargetSlide = " << targetSlide;
+
+      //qDebug() << "Decrementing pixelDistanceMoved by " << (d->pixelsToMovePerSlide *10) * slideInc;
+
+      d->pixelDistanceMoved -= (d->pixelsToMovePerSlide *10) * slideInc;
+
+/*
+      if ( (targetSlide <= 0) || (targetSlide >= d->slideCount()-1) )
+        d->pixelDistanceMoved = 0;
+*/
+    }
+  }
+
+  d->previousPos = event->pos();
+  d->previousPosTimestamp.restart();
+
+  emit inputReceived();
+}
+
+void PictureFlow::mousePressEvent(QMouseEvent* event)
+{
+  d->firstPress = event->pos();
+  d->previousPos = event->pos();
+  d->previousPosTimestamp.start();
+  d->singlePress = true; // Initially assume a single press
+//  d->dragStartSlide = d->getTarget();
+  d->pixelDistanceMoved = 0;
+
+  emit inputReceived();
+}
+
+void PictureFlow::mouseReleaseEvent(QMouseEvent* event)
+{
+  int sideWidth = (d->buffer.width() - slideSize().width()) /2;
+
+  if (d->singlePress)
+  {
+    if (event->x() < sideWidth )
+    {
+      showPrevious();
+    } else if ( event->x() > sideWidth + slideSize().width() ) {
+      showNext();
+    } else {
+      emit itemActivated(d->getTarget());
+    }
+
+    event->accept();
+  }
+
+  emit inputReceived();
+}
+
+
+void PictureFlow::paintEvent(QPaintEvent* event)
+{
+  Q_UNUSED(event);
+  QPainter painter(this);
+  painter.setRenderHint(QPainter::Antialiasing, false);
+  painter.drawImage(QPoint(0,0), d->buffer);
+}
+
+void PictureFlow::resizeEvent(QResizeEvent* event)
+{
+  d->resize(width(), height());
+  QWidget::resizeEvent(event);
+}
+
+void PictureFlow::timerEvent(QTimerEvent* event)
+{
+  if(event->timerId() == d->animateTimer.timerId())
+  {
+//    QTime now = QTime::currentTime();
+    d->updateAnimation();
+//    d->animateTimer.start(qMax(0, 30-now.elapsed() ), this);
+  }
+  else
+    QWidget::timerEvent(event);
+}
Index: trunk/demos/embedded/fluidlauncher/pictureflow.h
===================================================================
--- trunk/demos/embedded/fluidlauncher/pictureflow.h	(revision 561)
+++ trunk/demos/embedded/fluidlauncher/pictureflow.h	(revision 561)
@@ -0,0 +1,217 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the ActiveQt framework of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+**     the names of its contributors may be used to endorse or promote
+**     products derived from this software without specific prior written
+**     permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+**
+****************************************************************************/
+
+/*
+  ORIGINAL COPYRIGHT HEADER
+  PictureFlow - animated image show widget
+  http://pictureflow.googlecode.com
+
+  Copyright (C) 2007 Ariya Hidayat (ariya@kde.org)
+
+  Permission is hereby granted, free of charge, to any person obtaining a copy
+  of this software and associated documentation files (the "Software"), to deal
+  in the Software without restriction, including without limitation the rights
+  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+  copies of the Software, and to permit persons to whom the Software is
+  furnished to do so, subject to the following conditions:
+
+  The above copyright notice and this permission notice shall be included in
+  all copies or substantial portions of the Software.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+  THE SOFTWARE.
+*/
+
+#ifndef PICTUREFLOW_H
+#define PICTUREFLOW_H
+
+#include <QWidget>
+
+class PictureFlowPrivate;
+
+/*!
+  Class PictureFlow implements an image show widget with animation effect
+  like Apple's CoverFlow (in iTunes and iPod). Images are arranged in form
+  of slides, one main slide is shown at the center with few slides on
+  the left and right sides of the center slide. When the next or previous
+  slide is brought to the front, the whole slides flow to the right or
+  the right with smooth animation effect; until the new slide is finally
+  placed at the center.
+
+ */
+class PictureFlow : public QWidget
+{
+Q_OBJECT
+
+  Q_PROPERTY(int slideCount READ slideCount WRITE setSlideCount)
+  Q_PROPERTY(int currentSlide READ currentSlide WRITE setCurrentSlide)
+  Q_PROPERTY(QSize slideSize READ slideSize WRITE setSlideSize)
+  Q_PROPERTY(int zoomFactor READ zoomFactor WRITE setZoomFactor)
+
+public:
+  /*!
+    Creates a new PictureFlow widget.
+  */
+  PictureFlow(QWidget* parent = 0);
+
+  /*!
+    Destroys the widget.
+  */
+  ~PictureFlow();
+
+  /*!
+    Returns the total number of slides.
+  */
+  int slideCount() const;
+
+  /*!
+    Sets the total number of slides.
+  */
+  void setSlideCount(int count);
+
+  /*!
+    Returns the dimension of each slide (in pixels).
+  */
+  QSize slideSize() const;
+
+  /*!
+    Sets the dimension of each slide (in pixels).
+  */
+  void setSlideSize(QSize size);
+
+  /*!
+    Sets the zoom factor (in percent).
+  */
+  void setZoomFactor(int zoom);
+
+  /*!
+    Returns the zoom factor (in percent).
+  */
+  int zoomFactor() const;
+
+  /*!
+    Clears any caches held to free up memory
+  */
+  void clearCaches();
+
+  /*!
+    Returns QImage of specified slide.
+    This function will be called only whenever necessary, e.g. the 100th slide
+    will not be retrived when only the first few slides are visible.
+  */
+  virtual QImage slide(int index) const;
+
+  /*!
+    Sets an image for specified slide. If the slide already exists,
+    it will be replaced.
+  */
+  virtual void setSlide(int index, const QImage& image);
+
+  virtual void setSlideCaption(int index, QString caption);
+
+  /*!
+    Sets a pixmap for specified slide. If the slide already exists,
+    it will be replaced.
+  */
+  virtual void setSlide(int index, const QPixmap& pixmap);
+
+  /*!
+    Returns the index of slide currently shown in the middle of the viewport.
+  */
+  int currentSlide() const;
+
+public slots:
+
+  /*!
+    Sets slide to be shown in the middle of the viewport. No animation
+    effect will be produced, unlike using showSlide.
+  */
+  void setCurrentSlide(int index);
+
+  /*!
+    Clears images of all slides.
+  */
+  void clear();
+
+  /*!
+    Rerender the widget. Normally this function will be automatically invoked
+    whenever necessary, e.g. during the transition animation.
+  */
+  void render();
+
+  /*!
+    Shows previous slide using animation effect.
+  */
+  void showPrevious();
+
+  /*!
+    Shows next slide using animation effect.
+  */
+  void showNext();
+
+  /*!
+    Go to specified slide using animation effect.
+  */
+  void showSlide(int index);
+
+signals:
+  void itemActivated(int index);
+  void inputReceived();
+
+protected:
+  void paintEvent(QPaintEvent *event);
+  void keyPressEvent(QKeyEvent* event);
+  void mouseMoveEvent(QMouseEvent* event);
+  void mousePressEvent(QMouseEvent* event);
+  void mouseReleaseEvent(QMouseEvent* event);
+  void resizeEvent(QResizeEvent* event);
+  void timerEvent(QTimerEvent* event);
+
+private:
+  PictureFlowPrivate* d;
+};
+
+#endif // PICTUREFLOW_H
Index: trunk/demos/embedded/fluidlauncher/slideshow.cpp
===================================================================
--- trunk/demos/embedded/fluidlauncher/slideshow.cpp	(revision 561)
+++ trunk/demos/embedded/fluidlauncher/slideshow.cpp	(revision 561)
@@ -0,0 +1,232 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QBasicTimer>
+#include <QList>
+#include <QImage>
+#include <QDir>
+#include <QPainter>
+#include <QPaintEvent>
+
+#include <QDebug>
+
+
+#include "slideshow.h"
+
+
+class SlideShowPrivate
+{
+public:
+    SlideShowPrivate();
+
+    int currentSlide;
+    int slideInterval;
+    QBasicTimer interSlideTimer;
+    QStringList imagePaths;
+
+    void showNextSlide();
+};
+
+
+
+SlideShowPrivate::SlideShowPrivate()
+{
+    currentSlide = 0;
+    slideInterval = 10000; // Default to 10 sec interval
+}
+
+
+void SlideShowPrivate::showNextSlide()
+{
+    currentSlide++;
+    if (currentSlide >= imagePaths.size())
+      currentSlide = 0;
+}
+
+
+
+SlideShow::SlideShow(QWidget* parent) :
+    QWidget(parent)
+{
+    d = new SlideShowPrivate;
+
+    setAttribute(Qt::WA_StaticContents, true);
+    setAttribute(Qt::WA_OpaquePaintEvent, true);
+    setAttribute(Qt::WA_NoSystemBackground, true);
+
+    setMouseTracking(true);
+}
+
+
+SlideShow::~SlideShow()
+{
+    delete d;
+}
+
+
+void SlideShow::addImageDir(QString dirName)
+{
+    QDir dir(dirName);
+
+    QStringList fileNames = dir.entryList(QDir::Files | QDir::Readable, QDir::Name);
+
+    for (int i=0; i<fileNames.count(); i++)
+        d->imagePaths << dir.absoluteFilePath(fileNames[i]);
+}
+
+void SlideShow::addImage(QString filename)
+{
+    d->imagePaths << filename;
+}
+
+
+void SlideShow::clearImages()
+{
+    d->imagePaths.clear();
+}
+
+
+void SlideShow::startShow()
+{
+    d->interSlideTimer.start(d->slideInterval, this);
+    d->showNextSlide();
+    update();
+}
+
+
+void SlideShow::stopShow()
+{
+    d->interSlideTimer.stop();
+}
+
+
+int SlideShow::slideInterval()
+{
+    return d->slideInterval;
+}
+
+void SlideShow::setSlideInterval(int val)
+{
+    d->slideInterval = val;
+}
+
+
+void SlideShow::timerEvent(QTimerEvent* event)
+{
+    Q_UNUSED(event);
+    d->showNextSlide();
+    update();
+}
+
+
+void SlideShow::paintEvent(QPaintEvent *event)
+{
+    QPainter painter(this);
+    painter.setRenderHint(QPainter::Antialiasing, false);
+
+    if (d->imagePaths.size() > 0) {
+        QPixmap slide = QPixmap(d->imagePaths[d->currentSlide]);
+        QSize slideSize = slide.size();
+        QSize scaledSize = QSize(qMin(slideSize.width(), size().width()),
+            qMin(slideSize.height(), size().height()));
+        if (slideSize != scaledSize)
+            slide = slide.scaled(scaledSize, Qt::KeepAspectRatio);
+
+        QRect pixmapRect(qMax( (size().width() - slide.width())/2, 0),
+                         qMax( (size().height() - slide.height())/2, 0),
+                         slide.width(),
+                         slide.height());
+
+        if (pixmapRect.top() > 0) {
+            // Fill in top & bottom rectangles:
+            painter.fillRect(0, 0, size().width(), pixmapRect.top(), Qt::black);
+            painter.fillRect(0, pixmapRect.bottom(), size().width(), size().height(), Qt::black);
+        }
+
+        if (pixmapRect.left() > 0) {
+            // Fill in left & right rectangles:
+            painter.fillRect(0, 0, pixmapRect.left(), size().height(), Qt::black);
+            painter.fillRect(pixmapRect.right(), 0, size().width(), size().height(), Qt::black);
+        }
+
+        painter.drawPixmap(pixmapRect, slide);
+
+    } else
+        painter.fillRect(event->rect(), Qt::black);
+}
+
+
+void SlideShow::keyPressEvent(QKeyEvent* event)
+{
+    Q_UNUSED(event);
+    emit inputReceived();
+}
+
+
+void SlideShow::mouseMoveEvent(QMouseEvent* event)
+{
+    Q_UNUSED(event);
+    emit inputReceived();
+}
+
+
+void SlideShow::mousePressEvent(QMouseEvent* event)
+{
+    Q_UNUSED(event);
+    emit inputReceived();
+}
+
+
+void SlideShow::mouseReleaseEvent(QMouseEvent* event)
+{
+    Q_UNUSED(event);
+    emit inputReceived();
+}
+
+
+void SlideShow::showEvent(QShowEvent * event )
+{
+    Q_UNUSED(event);
+#ifndef QT_NO_CURSOR
+    setCursor(Qt::BlankCursor);
+#endif
+}
+
Index: trunk/demos/embedded/fluidlauncher/slideshow.h
===================================================================
--- trunk/demos/embedded/fluidlauncher/slideshow.h	(revision 561)
+++ trunk/demos/embedded/fluidlauncher/slideshow.h	(revision 561)
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SLIDESHOW_H
+#define SLIDESHOW_H
+
+#include <QWidget>
+
+class SlideShowPrivate;
+
+class SlideShow : public QWidget
+{
+    Q_OBJECT
+
+    Q_PROPERTY(int slideInterval READ slideInterval WRITE setSlideInterval)
+
+public:
+    SlideShow(QWidget* parent = 0);
+    ~SlideShow();
+    void addImage(QString filename);
+    void addImageDir(QString dirName);
+    void clearImages();
+    void startShow();
+    void stopShow();
+
+
+    int slideInterval();
+    void setSlideInterval(int val);
+
+signals:
+    void inputReceived();
+
+protected:
+    void paintEvent(QPaintEvent *event);
+    void keyPressEvent(QKeyEvent* event);
+    void mouseMoveEvent(QMouseEvent* event);
+    void mousePressEvent(QMouseEvent* event);
+    void mouseReleaseEvent(QMouseEvent* event);
+    void timerEvent(QTimerEvent* event);
+    void showEvent(QShowEvent * event );
+
+
+private:
+    SlideShowPrivate* d;
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+#endif
Index: trunk/demos/embedded/lightmaps/lightmaps.cpp
===================================================================
--- trunk/demos/embedded/lightmaps/lightmaps.cpp	(revision 561)
+++ trunk/demos/embedded/lightmaps/lightmaps.cpp	(revision 561)
@@ -0,0 +1,579 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore>
+#include <QtGui>
+#include <QtNetwork>
+
+#if defined (Q_OS_SYMBIAN)
+#include "sym_iap_util.h"
+#endif
+
+#include <math.h>
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
+// how long (milliseconds) the user need to hold (after a tap on the screen)
+// before triggering the magnifying glass feature
+// 701, a prime number, is the sum of 229, 233, 239
+// (all three are also prime numbers, consecutive!)
+#define HOLD_TIME 701
+
+// maximum size of the magnifier
+// Hint: see above to find why I picked this one :)
+#define MAX_MAGNIFIER 229
+
+uint qHash(const QPoint& p)
+{
+    return p.x() * 17 ^ p.y();
+}
+
+// tile size in pixels
+const int tdim = 256;
+
+QPointF tileForCoordinate(qreal lat, qreal lng, int zoom)
+{
+    qreal zn = static_cast<qreal>(1 << zoom);
+    qreal tx = (lng + 180.0) / 360.0;
+    qreal ty = (1.0 - log(tan(lat * M_PI / 180.0) +
+                          1.0 / cos(lat * M_PI / 180.0)) / M_PI) / 2.0;
+    return QPointF(tx * zn, ty * zn);
+}
+
+qreal longitudeFromTile(qreal tx, int zoom)
+{
+    qreal zn = static_cast<qreal>(1 << zoom);
+    qreal lat = tx / zn * 360.0 - 180.0;
+    return lat;
+}
+
+qreal latitudeFromTile(qreal ty, int zoom)
+{
+    qreal zn = static_cast<qreal>(1 << zoom);
+    qreal n = M_PI - 2 * M_PI * ty / zn;
+    qreal lng = 180.0 / M_PI * atan(0.5 * (exp(n) - exp(-n)));
+    return lng;
+}
+
+class SlippyMap: public QObject
+{
+    Q_OBJECT
+
+public:
+    int width;
+    int height;
+    int zoom;
+    qreal latitude;
+    qreal longitude;
+
+    SlippyMap(QObject *parent = 0)
+            : QObject(parent)
+            , width(400)
+            , height(300)
+            , zoom(15)
+            , latitude(59.9138204)
+            , longitude(10.7387413) {
+        m_emptyTile = QPixmap(tdim, tdim);
+        m_emptyTile.fill(Qt::lightGray);
+
+        QNetworkDiskCache *cache = new QNetworkDiskCache;
+        cache->setCacheDirectory(QDesktopServices::storageLocation
+                                 (QDesktopServices::CacheLocation));
+        m_manager.setCache(cache);
+        connect(&m_manager, SIGNAL(finished(QNetworkReply*)),
+                this, SLOT(handleNetworkData(QNetworkReply*)));
+    }
+
+    void invalidate() {
+        if (width <= 0 || height <= 0)
+            return;
+
+        QPointF ct = tileForCoordinate(latitude, longitude, zoom);
+        qreal tx = ct.x();
+        qreal ty = ct.y();
+
+        // top-left corner of the center tile
+        int xp = width / 2 - (tx - floor(tx)) * tdim;
+        int yp = height / 2 - (ty - floor(ty)) * tdim;
+
+        // first tile vertical and horizontal
+        int xa = (xp + tdim - 1) / tdim;
+        int ya = (yp + tdim - 1) / tdim;
+        int xs = static_cast<int>(tx) - xa;
+        int ys = static_cast<int>(ty) - ya;
+
+        // offset for top-left tile
+        m_offset = QPoint(xp - xa * tdim, yp - ya * tdim);
+
+        // last tile vertical and horizontal
+        int xe = static_cast<int>(tx) + (width - xp - 1) / tdim;
+        int ye = static_cast<int>(ty) + (height - yp - 1) / tdim;
+
+        // build a rect
+        m_tilesRect = QRect(xs, ys, xe - xs + 1, ye - ys + 1);
+
+        if (m_url.isEmpty())
+            download();
+
+        emit updated(QRect(0, 0, width, height));
+    }
+
+    void render(QPainter *p, const QRect &rect) {
+        for (int x = 0; x <= m_tilesRect.width(); ++x)
+            for (int y = 0; y <= m_tilesRect.height(); ++y) {
+                QPoint tp(x + m_tilesRect.left(), y + m_tilesRect.top());
+                QRect box = tileRect(tp);
+                if (rect.intersects(box)) {
+                    if (m_tilePixmaps.contains(tp))
+                        p->drawPixmap(box, m_tilePixmaps.value(tp));
+                    else
+                        p->drawPixmap(box, m_emptyTile);
+                }
+            }
+    }
+
+    void pan(const QPoint &delta) {
+        QPointF dx = QPointF(delta) / qreal(tdim);
+        QPointF center = tileForCoordinate(latitude, longitude, zoom) - dx;
+        latitude = latitudeFromTile(center.y(), zoom);
+        longitude = longitudeFromTile(center.x(), zoom);
+        invalidate();
+    }
+
+private slots:
+
+    void handleNetworkData(QNetworkReply *reply) {
+        QImage img;
+        QPoint tp = reply->request().attribute(QNetworkRequest::User).toPoint();
+        QUrl url = reply->url();
+        if (!reply->error())
+            if (!img.load(reply, 0))
+                img = QImage();
+        reply->deleteLater();
+        m_tilePixmaps[tp] = QPixmap::fromImage(img);
+        if (img.isNull())
+            m_tilePixmaps[tp] = m_emptyTile;
+        emit updated(tileRect(tp));
+
+        // purge unused spaces
+        QRect bound = m_tilesRect.adjusted(-2, -2, 2, 2);
+        foreach(QPoint tp, m_tilePixmaps.keys())
+        if (!bound.contains(tp))
+            m_tilePixmaps.remove(tp);
+
+        download();
+    }
+
+    void download() {
+        QPoint grab(0, 0);
+        for (int x = 0; x <= m_tilesRect.width(); ++x)
+            for (int y = 0; y <= m_tilesRect.height(); ++y) {
+                QPoint tp = m_tilesRect.topLeft() + QPoint(x, y);
+                if (!m_tilePixmaps.contains(tp)) {
+                    grab = tp;
+                    break;
+                }
+            }
+        if (grab == QPoint(0, 0)) {
+            m_url = QUrl();
+            return;
+        }
+
+        QString path = "http://tile.openstreetmap.org/%1/%2/%3.png";
+        m_url = QUrl(path.arg(zoom).arg(grab.x()).arg(grab.y()));
+        QNetworkRequest request;
+        request.setUrl(m_url);
+        request.setRawHeader("User-Agent", "Nokia (Qt) Graphics Dojo 1.0");
+        request.setAttribute(QNetworkRequest::User, QVariant(grab));
+        m_manager.get(request);
+    }
+
+signals:
+    void updated(const QRect &rect);
+
+protected:
+    QRect tileRect(const QPoint &tp) {
+        QPoint t = tp - m_tilesRect.topLeft();
+        int x = t.x() * tdim + m_offset.x();
+        int y = t.y() * tdim + m_offset.y();
+        return QRect(x, y, tdim, tdim);
+    }
+
+private:
+    QPoint m_offset;
+    QRect m_tilesRect;
+    QPixmap m_emptyTile;
+    QHash<QPoint, QPixmap> m_tilePixmaps;
+    QNetworkAccessManager m_manager;
+    QUrl m_url;
+};
+
+class LightMaps: public QWidget
+{
+    Q_OBJECT
+
+public:
+    LightMaps(QWidget *parent = 0)
+            : QWidget(parent)
+            , pressed(false)
+            , snapped(false)
+            , zoomed(false)
+            , invert(false) {
+        m_normalMap = new SlippyMap(this);
+        m_largeMap = new SlippyMap(this);
+        connect(m_normalMap, SIGNAL(updated(QRect)), SLOT(updateMap(QRect)));
+        connect(m_largeMap, SIGNAL(updated(QRect)), SLOT(update()));
+    }
+
+    void setCenter(qreal lat, qreal lng) {
+        m_normalMap->latitude = lat;
+        m_normalMap->longitude = lng;
+        m_normalMap->invalidate();
+        m_largeMap->invalidate();
+    }
+
+public slots:
+    void toggleNightMode() {
+        invert = !invert;
+        update();
+    }
+
+private slots:
+    void updateMap(const QRect &r) {
+        update(r);
+    }
+
+protected:
+
+    void activateZoom() {
+        zoomed = true;
+        tapTimer.stop();
+        m_largeMap->zoom = m_normalMap->zoom + 1;
+        m_largeMap->width = m_normalMap->width * 2;
+        m_largeMap->height = m_normalMap->height * 2;
+        m_largeMap->latitude = m_normalMap->latitude;
+        m_largeMap->longitude = m_normalMap->longitude;
+        m_largeMap->invalidate();
+        update();
+    }
+
+    void resizeEvent(QResizeEvent *) {
+        m_normalMap->width = width();
+        m_normalMap->height = height();
+        m_normalMap->invalidate();
+        m_largeMap->width = m_normalMap->width * 2;
+        m_largeMap->height = m_normalMap->height * 2;
+        m_largeMap->invalidate();
+    }
+
+    void paintEvent(QPaintEvent *event) {
+        QPainter p;
+        p.begin(this);
+        m_normalMap->render(&p, event->rect());
+        p.setPen(Qt::black);
+#if defined(Q_OS_SYMBIAN)
+        QFont font = p.font();
+        font.setPixelSize(13);
+        p.setFont(font);
+#endif
+        p.drawText(rect(),  Qt::AlignBottom | Qt::TextWordWrap,
+                   "Map data CCBYSA 2009 OpenStreetMap.org contributors");
+        p.end();
+
+        if (zoomed) {
+            int dim = qMin(width(), height());
+            int magnifierSize = qMin(MAX_MAGNIFIER, dim * 2 / 3);
+            int radius = magnifierSize / 2;
+            int ring = radius - 15;
+            QSize box = QSize(magnifierSize, magnifierSize);
+
+            // reupdate our mask
+            if (maskPixmap.size() != box) {
+                maskPixmap = QPixmap(box);
+                maskPixmap.fill(Qt::transparent);
+
+                QRadialGradient g;
+                g.setCenter(radius, radius);
+                g.setFocalPoint(radius, radius);
+                g.setRadius(radius);
+                g.setColorAt(1.0, QColor(255, 255, 255, 0));
+                g.setColorAt(0.5, QColor(128, 128, 128, 255));
+
+                QPainter mask(&maskPixmap);
+                mask.setRenderHint(QPainter::Antialiasing);
+                mask.setCompositionMode(QPainter::CompositionMode_Source);
+                mask.setBrush(g);
+                mask.setPen(Qt::NoPen);
+                mask.drawRect(maskPixmap.rect());
+                mask.setBrush(QColor(Qt::transparent));
+                mask.drawEllipse(g.center(), ring, ring);
+                mask.end();
+            }
+
+            QPoint center = dragPos - QPoint(0, radius);
+            center = center + QPoint(0, radius / 2);
+            QPoint corner = center - QPoint(radius, radius);
+
+            QPoint xy = center * 2 - QPoint(radius, radius);
+
+            // only set the dimension to the magnified portion
+            if (zoomPixmap.size() != box) {
+                zoomPixmap = QPixmap(box);
+                zoomPixmap.fill(Qt::lightGray);
+            }
+            if (true) {
+                QPainter p(&zoomPixmap);
+                p.translate(-xy);
+                m_largeMap->render(&p, QRect(xy, box));
+                p.end();
+            }
+
+            QPainterPath clipPath;
+            clipPath.addEllipse(center, ring, ring);
+
+            QPainter p(this);
+            p.setRenderHint(QPainter::Antialiasing);
+            p.setClipPath(clipPath);
+            p.drawPixmap(corner, zoomPixmap);
+            p.setClipping(false);
+            p.drawPixmap(corner, maskPixmap);
+            p.setPen(Qt::gray);
+            p.drawPath(clipPath);
+        }
+        if (invert) {
+            QPainter p(this);
+            p.setCompositionMode(QPainter::CompositionMode_Difference);
+            p.fillRect(event->rect(), Qt::white);
+            p.end();
+        }
+    }
+
+    void timerEvent(QTimerEvent *) {
+        if (!zoomed)
+            activateZoom();
+        update();
+    }
+
+    void mousePressEvent(QMouseEvent *event) {
+        if (event->buttons() != Qt::LeftButton)
+            return;
+        pressed = snapped = true;
+        pressPos = dragPos = event->pos();
+        tapTimer.stop();
+        tapTimer.start(HOLD_TIME, this);
+    }
+
+    void mouseMoveEvent(QMouseEvent *event) {
+        if (!event->buttons())
+            return;
+        if (!zoomed) {
+            if (!pressed || !snapped) {
+                QPoint delta = event->pos() - pressPos;
+                pressPos = event->pos();
+                m_normalMap->pan(delta);
+                return;
+            } else {
+                const int threshold = 10;
+                QPoint delta = event->pos() - pressPos;
+                if (snapped) {
+                    snapped &= delta.x() < threshold;
+                    snapped &= delta.y() < threshold;
+                    snapped &= delta.x() > -threshold;
+                    snapped &= delta.y() > -threshold;
+                }
+                if (!snapped)
+                    tapTimer.stop();
+            }
+        } else {
+            dragPos = event->pos();
+            update();
+        }
+    }
+
+    void mouseReleaseEvent(QMouseEvent *) {
+        zoomed = false;
+        update();
+    }
+
+    void keyPressEvent(QKeyEvent *event) {
+        if (!zoomed) {
+            if (event->key() == Qt::Key_Left)
+                m_normalMap->pan(QPoint(20, 0));
+            if (event->key() == Qt::Key_Right)
+                m_normalMap->pan(QPoint(-20, 0));
+            if (event->key() == Qt::Key_Up)
+                m_normalMap->pan(QPoint(0, 20));
+            if (event->key() == Qt::Key_Down)
+                m_normalMap->pan(QPoint(0, -20));
+            if (event->key() == Qt::Key_Z || event->key() == Qt::Key_Select) {
+                dragPos = QPoint(width() / 2, height() / 2);
+                activateZoom();
+            }
+        } else {
+            if (event->key() == Qt::Key_Z || event->key() == Qt::Key_Select) {
+                zoomed = false;
+                update();
+            }
+            QPoint delta(0, 0);
+            if (event->key() == Qt::Key_Left)
+                delta = QPoint(-15, 0);
+            if (event->key() == Qt::Key_Right)
+                delta = QPoint(15, 0);
+            if (event->key() == Qt::Key_Up)
+                delta = QPoint(0, -15);
+            if (event->key() == Qt::Key_Down)
+                delta = QPoint(0, 15);
+            if (delta != QPoint(0, 0)) {
+                dragPos += delta;
+                update();
+            }
+        }
+    }
+
+private:
+    SlippyMap *m_normalMap;
+    SlippyMap *m_largeMap;
+    bool pressed;
+    bool snapped;
+    QPoint pressPos;
+    QPoint dragPos;
+    QBasicTimer tapTimer;
+    bool zoomed;
+    QPixmap zoomPixmap;
+    QPixmap maskPixmap;
+    bool invert;
+};
+
+class MapZoom : public QMainWindow
+{
+    Q_OBJECT
+
+private:
+    LightMaps *map;
+
+public:
+    MapZoom(): QMainWindow(0) {
+        map = new LightMaps(this);
+        setCentralWidget(map);
+        map->setFocus();
+
+        QAction *osloAction = new QAction("&Oslo", this);
+        QAction *berlinAction = new QAction("&Berlin", this);
+        QAction *jakartaAction = new QAction("&Jakarta", this);
+        QAction *nightModeAction = new QAction("Night Mode", this);
+        nightModeAction->setCheckable(true);
+        nightModeAction->setChecked(false);
+        QAction *osmAction = new QAction("About OpenStreetMap", this);
+        connect(osloAction, SIGNAL(triggered()), SLOT(chooseOslo()));
+        connect(berlinAction, SIGNAL(triggered()), SLOT(chooseBerlin()));
+        connect(jakartaAction, SIGNAL(triggered()), SLOT(chooseJakarta()));
+        connect(nightModeAction, SIGNAL(triggered()), map, SLOT(toggleNightMode()));
+        connect(osmAction, SIGNAL(triggered()), SLOT(aboutOsm()));
+
+#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM)
+        menuBar()->addAction(osloAction);
+        menuBar()->addAction(berlinAction);
+        menuBar()->addAction(jakartaAction);
+        menuBar()->addAction(nightModeAction);
+        menuBar()->addAction(osmAction);
+#else
+        QMenu *menu = menuBar()->addMenu("&Options");
+        menu->addAction(osloAction);
+        menu->addAction(berlinAction);
+        menu->addAction(jakartaAction);
+        menu->addSeparator();
+        menu->addAction(nightModeAction);
+        menu->addAction(osmAction);
+#endif
+
+        QTimer::singleShot(0, this, SLOT(delayedInit()));
+    }
+
+private slots:
+
+    void delayedInit() {
+#if defined(Q_OS_SYMBIAN)
+        qt_SetDefaultIap();
+#endif
+    }
+
+    void chooseOslo() {
+        map->setCenter(59.9138204, 10.7387413);
+    }
+
+    void chooseBerlin() {
+        map->setCenter(52.52958999943302, 13.383053541183472);
+    }
+
+    void chooseJakarta() {
+        map->setCenter(-6.211544, 106.845172);
+    }
+
+    void aboutOsm() {
+        QDesktopServices::openUrl(QUrl("http://www.openstreetmap.org"));
+    }
+};
+
+
+#include "lightmaps.moc"
+
+int main(int argc, char **argv)
+{
+#if defined(Q_WS_X11)
+    QApplication::setGraphicsSystem("raster");
+#endif
+
+    QApplication app(argc, argv);
+    app.setApplicationName("LightMaps");
+
+    MapZoom w;
+    w.setWindowTitle("OpenStreetMap");
+#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM)
+    w.showMaximized();
+#else
+    w.resize(600, 450);
+    w.show();
+#endif
+
+    return app.exec();
+}
Index: trunk/demos/embedded/lightmaps/lightmaps.pro
===================================================================
--- trunk/demos/embedded/lightmaps/lightmaps.pro	(revision 561)
+++ trunk/demos/embedded/lightmaps/lightmaps.pro	(revision 561)
@@ -0,0 +1,17 @@
+TEMPLATE = app
+SOURCES = lightmaps.cpp
+QT += network
+
+symbian {
+    TARGET.UID3 = 0xA000CF75
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+    HEADERS += $$QT_SOURCE_TREE/examples/network/qftp/sym_iap_util.h
+    LIBS += -lesock  -lconnmon -linsock
+    TARGET.CAPABILITY = NetworkServices
+    TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
+}
+
+target.path = $$[QT_INSTALL_DEMOS]/embedded/lightmaps
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro
+sources.path = $$[QT_INSTALL_DEMOS]/embedded/lightmaps
+INSTALLS += target sources
Index: trunk/demos/embedded/raycasting/raycasting.cpp
===================================================================
--- trunk/demos/embedded/raycasting/raycasting.cpp	(revision 561)
+++ trunk/demos/embedded/raycasting/raycasting.cpp	(revision 561)
@@ -0,0 +1,391 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore>
+#include <QtGui>
+
+#include <math.h>
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
+#define WORLD_SIZE 8
+int world_map[WORLD_SIZE][WORLD_SIZE] = {
+    { 1, 1, 1, 1, 6, 1, 1, 1 },
+    { 1, 0, 0, 1, 0, 0, 0, 7 },
+    { 1, 1, 0, 1, 0, 1, 1, 1 },
+    { 6, 0, 0, 0, 0, 0, 0, 3 },
+    { 1, 8, 8, 0, 8, 0, 8, 1 },
+    { 2, 2, 0, 0, 8, 8, 7, 1 },
+    { 3, 0, 0, 0, 0, 0, 0, 5 },
+    { 2, 2, 2, 2, 7, 4, 4, 4 },
+};
+
+#define TEXTURE_SIZE 64
+#define TEXTURE_BLOCK (TEXTURE_SIZE * TEXTURE_SIZE)
+
+class Raycasting: public QWidget
+{
+public:
+    Raycasting(QWidget *parent = 0)
+            : QWidget(parent)
+            , angle(0.5)
+            , playerPos(1.5, 1.5)
+            , angleDelta(0)
+            , moveDelta(0)
+            , touchDevice(false) {
+
+        // http://www.areyep.com/RIPandMCS-TextureLibrary.html
+        textureImg.load(":/textures.png");
+        textureImg = textureImg.convertToFormat(QImage::Format_ARGB32);
+        Q_ASSERT(textureImg.width() == TEXTURE_SIZE * 2);
+        Q_ASSERT(textureImg.bytesPerLine() == 4 * TEXTURE_SIZE * 2);
+        textureCount = textureImg.height() / TEXTURE_SIZE;
+
+        watch.start();
+        ticker.start(25, this);
+        setAttribute(Qt::WA_OpaquePaintEvent, true);
+        setMouseTracking(false);
+    }
+
+    void updatePlayer() {
+        int interval = qBound(20, watch.elapsed(), 250);
+        watch.start();
+        angle += angleDelta * interval / 1000;
+        qreal step = moveDelta * interval / 1000;
+        qreal dx = cos(angle) * step;
+        qreal dy = sin(angle) * step;
+        QPointF pos = playerPos + 3 * QPointF(dx, dy);
+        int xi = static_cast<int>(pos.x());
+        int yi = static_cast<int>(pos.y());
+        if (world_map[yi][xi] == 0)
+            playerPos = playerPos + QPointF(dx, dy);
+    }
+
+    void showFps() {
+        static QTime frameTick;
+        static int totalFrame = 0;
+        if (!(totalFrame & 31)) {
+            int elapsed = frameTick.elapsed();
+            frameTick.start();
+            int fps = 32 * 1000 / (1 + elapsed);
+            setWindowTitle(QString("Raycasting (%1 FPS)").arg(fps));
+        }
+        totalFrame++;
+    }
+
+    void render() {
+
+        // setup the screen surface
+        if (buffer.size() != bufferSize)
+            buffer = QImage(bufferSize, QImage::Format_ARGB32);
+        int bufw = buffer.width();
+        int bufh = buffer.height();
+        if (bufw <= 0 || bufh <= 0)
+            return;
+
+        // we intentionally cheat here, to avoid detach
+        const uchar *ptr = buffer.bits();
+        QRgb *start = (QRgb*)(ptr);
+        QRgb stride = buffer.bytesPerLine() / 4;
+        QRgb *finish = start + stride * bufh;
+
+        // prepare the texture pointer
+        const uchar *src = textureImg.bits();
+        const QRgb *texsrc = reinterpret_cast<const QRgb*>(src);
+
+        // cast all rays here
+        qreal sina = sin(angle);
+        qreal cosa = cos(angle);
+        qreal u = cosa - sina;
+        qreal v = sina + cosa;
+        qreal du = 2 * sina / bufw;
+        qreal dv = -2 * cosa / bufw;
+
+        for (int ray = 0; ray < bufw; ++ray, u += du, v += dv) {
+            // everytime this ray advances 'u' units in x direction,
+            // it also advanced 'v' units in y direction
+            qreal uu = (u < 0) ? -u : u;
+            qreal vv = (v < 0) ? -v : v;
+            qreal duu = 1 / uu;
+            qreal dvv = 1 / vv;
+            int stepx = (u < 0) ? -1 : 1;
+            int stepy = (v < 0) ? -1 : 1;
+
+            // the cell in the map that we need to check
+            qreal px = playerPos.x();
+            qreal py = playerPos.y();
+            int mapx = static_cast<int>(px);
+            int mapy = static_cast<int>(py);
+
+            // the position and texture for the hit
+            int texture = 0;
+            qreal hitdist = 0.1;
+            qreal texofs = 0;
+            bool dark = false;
+
+            // first hit at constant x and constant y lines
+            qreal distx = (u > 0) ? (mapx + 1 - px) * duu : (px - mapx) * duu;
+            qreal disty = (v > 0) ? (mapy + 1 - py) * dvv : (py - mapy) * dvv;
+
+            // loop until we hit something
+            while (texture <= 0) {
+                if (distx > disty) {
+                    // shorter distance to a hit in constant y line
+                    hitdist = disty;
+                    disty += dvv;
+                    mapy += stepy;
+                    texture = world_map[mapy][mapx];
+                    if (texture > 0) {
+                        dark = true;
+                        if (stepy > 0) {
+                            qreal ofs = px + u * (mapy - py) / v;
+                            texofs = ofs - floor(ofs);
+                        } else {
+                            qreal ofs = px + u * (mapy + 1 - py) / v;
+                            texofs = ofs - floor(ofs);
+                        }
+                    }
+                } else {
+                    // shorter distance to a hit in constant x line
+                    hitdist = distx;
+                    distx += duu;
+                    mapx += stepx;
+                    texture = world_map[mapy][mapx];
+                    if (texture > 0) {
+                        if (stepx > 0) {
+                            qreal ofs = py + v * (mapx - px) / u;
+                            texofs = ofs - floor(ofs);
+                        } else {
+                            qreal ofs = py + v * (mapx + 1 - px) / u;
+                            texofs = ceil(ofs) - ofs;
+                        }
+                    }
+                }
+            }
+
+            // get the texture, note that the texture image
+            // has two textures horizontally, "normal" vs "dark"
+            int col = static_cast<int>(texofs * TEXTURE_SIZE);
+            col = qBound(0, col, TEXTURE_SIZE - 1);
+            texture = (texture - 1) % textureCount;
+            const QRgb *tex = texsrc + TEXTURE_BLOCK * texture * 2 +
+                              (TEXTURE_SIZE * 2 * col);
+            if (dark)
+                tex += TEXTURE_SIZE;
+
+            // start from the texture center (horizontally)
+            int h = static_cast<int>(bufw / hitdist / 2);
+            int dy = (TEXTURE_SIZE << 12) / h;
+            int p1 = ((TEXTURE_SIZE / 2) << 12) - dy;
+            int p2 = p1 + dy;
+
+            // start from the screen center (vertically)
+            // y1 will go up (decrease), y2 will go down (increase)
+            int y1 = bufh / 2;
+            int y2 = y1 + 1;
+            QRgb *pixel1 = start + y1 * stride + ray;
+            QRgb *pixel2 = pixel1 + stride;
+
+            // map the texture to the sliver
+            while (y1 >= 0 && y2 < bufh && p1 >= 0) {
+                *pixel1 = tex[p1 >> 12];
+                *pixel2 = tex[p2 >> 12];
+                p1 -= dy;
+                p2 += dy;
+                --y1;
+                ++y2;
+                pixel1 -= stride;
+                pixel2 += stride;
+            }
+
+            // ceiling and floor
+            for (; pixel1 > start; pixel1 -= stride)
+                *pixel1 = qRgb(0, 0, 0);
+            for (; pixel2 < finish; pixel2 += stride)
+                *pixel2 = qRgb(96, 96, 96);
+        }
+
+        update(QRect(QPoint(0, 0), bufferSize));
+    }
+
+protected:
+
+    void resizeEvent(QResizeEvent*) {
+#if defined(Q_OS_WINCE_WM)
+        touchDevice = true;
+#elif defined(Q_OS_SYMBIAN)
+        // FIXME: use HAL
+        if (width() > 480 || height() > 480)
+            touchDevice = true;
+#else
+        touchDevice = false;
+#endif
+        if (touchDevice) {
+            if (width() < height()) {
+                trackPad = QRect(0, height() / 2, width(), height() / 2);
+                centerPad = QPoint(width() / 2, height() * 3 / 4);
+                bufferSize = QSize(width(), height() / 2);
+            } else {
+                trackPad = QRect(width() / 2, 0, width() / 2, height());
+                centerPad = QPoint(width() * 3 / 4, height() / 2);
+                bufferSize = QSize(width() / 2, height());
+            }
+        } else {
+            trackPad = QRect();
+            bufferSize = size();
+        }
+        update();
+   }
+
+    void timerEvent(QTimerEvent*) {
+        updatePlayer();
+        render();
+        showFps();
+    }
+
+    void paintEvent(QPaintEvent *event) {
+        QPainter p(this);
+        p.setCompositionMode(QPainter::CompositionMode_Source);
+
+        p.drawImage(event->rect(), buffer, event->rect());
+
+        if (touchDevice && event->rect().intersects(trackPad)) {
+            p.fillRect(trackPad, Qt::white);
+            p.setPen(QPen(QColor(224, 224, 224), 6));
+            int rad = qMin(trackPad.width(), trackPad.height()) * 0.3;
+            p.drawEllipse(centerPad, rad, rad);
+
+            p.setPen(Qt::NoPen);
+            p.setBrush(Qt::gray);
+
+            QPolygon poly;
+            poly << QPoint(-30, 0);
+            poly << QPoint(0, -40);
+            poly << QPoint(30, 0);
+
+            p.translate(centerPad);
+            for (int i = 0; i < 4; ++i) {
+                p.rotate(90);
+                p.translate(0, 20 - rad);
+                p.drawPolygon(poly);
+                p.translate(0, rad - 20);
+            }
+        }
+
+        p.end();
+    }
+
+    void keyPressEvent(QKeyEvent *event) {
+        event->accept();
+        if (event->key() == Qt::Key_Left)
+            angleDelta = 1.3 * M_PI;
+        if (event->key() == Qt::Key_Right)
+            angleDelta = -1.3 * M_PI;
+        if (event->key() == Qt::Key_Up)
+            moveDelta = 2.5;
+        if (event->key() == Qt::Key_Down)
+            moveDelta = -2.5;
+    }
+
+    void keyReleaseEvent(QKeyEvent *event) {
+        event->accept();
+        if (event->key() == Qt::Key_Left)
+            angleDelta = (angleDelta > 0) ? 0 : angleDelta;
+        if (event->key() == Qt::Key_Right)
+            angleDelta = (angleDelta < 0) ? 0 : angleDelta;
+        if (event->key() == Qt::Key_Up)
+            moveDelta = (moveDelta > 0) ? 0 : moveDelta;
+        if (event->key() == Qt::Key_Down)
+            moveDelta = (moveDelta < 0) ? 0 : moveDelta;
+    }
+
+    void mousePressEvent(QMouseEvent *event) {
+        qreal dx = centerPad.x() - event->pos().x();
+        qreal dy = centerPad.y() - event->pos().y();
+        angleDelta = dx * 2 * M_PI / width();
+        moveDelta = dy * 10 / height();
+    }
+
+    void mouseMoveEvent(QMouseEvent *event) {
+        qreal dx = centerPad.x() - event->pos().x();
+        qreal dy = centerPad.y() - event->pos().y();
+        angleDelta = dx * 2 * M_PI / width();
+        moveDelta = dy * 10 / height();
+    }
+
+    void mouseReleaseEvent(QMouseEvent*) {
+        angleDelta = 0;
+        moveDelta = 0;
+    }
+
+private:
+    QTime watch;
+    QBasicTimer ticker;
+    QImage buffer;
+    qreal angle;
+    QPointF playerPos;
+    qreal angleDelta;
+    qreal moveDelta;
+    QImage textureImg;
+    int textureCount;
+    bool touchDevice;
+    QRect trackPad;
+    QPoint centerPad;
+    QSize bufferSize;
+};
+
+int main(int argc, char **argv)
+{
+    QApplication app(argc, argv);
+
+    Raycasting w;
+    w.setWindowTitle("Raycasting");
+#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM)
+    w.showMaximized();
+#else
+    w.resize(640, 480);
+    w.show();
+#endif
+
+    return app.exec();
+}
Index: trunk/demos/embedded/raycasting/raycasting.pro
===================================================================
--- trunk/demos/embedded/raycasting/raycasting.pro	(revision 561)
+++ trunk/demos/embedded/raycasting/raycasting.pro	(revision 561)
@@ -0,0 +1,13 @@
+TEMPLATE = app
+SOURCES = raycasting.cpp
+RESOURCES += raycasting.qrc
+
+symbian {
+    TARGET.UID3 = 0xA000CF76
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+}
+
+target.path = $$[QT_INSTALL_DEMOS]/embedded/raycasting
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro
+sources.path = $$[QT_INSTALL_DEMOS]/embedded/raycasting
+INSTALLS += target sources
Index: trunk/demos/embedded/raycasting/raycasting.qrc
===================================================================
--- trunk/demos/embedded/raycasting/raycasting.qrc	(revision 561)
+++ trunk/demos/embedded/raycasting/raycasting.qrc	(revision 561)
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/" >
+        <file>textures.png</file>
+    </qresource>
+</RCC>
Index: trunk/demos/embedded/styledemo/files/application.qss
===================================================================
--- trunk/demos/embedded/styledemo/files/application.qss	(revision 561)
+++ trunk/demos/embedded/styledemo/files/application.qss	(revision 561)
@@ -0,0 +1,125 @@
+QWidget#StyleWidget
+{
+	background-color: none;
+	background-image: url(icons:nature_1.jpg);
+}
+
+QLabel, QAbstractButton 
+{
+	font: bold;
+	color: beige;
+}
+
+QAbstractButton 
+{
+	background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(173,216,230,60%), stop:1 rgba(0,0,139,60%) );
+	border-color: black;
+	border-style: solid;
+	border-width: 3px;
+	border-radius: 6px;
+}
+
+QAbstractButton:pressed, QAbstractButton:checked
+{
+	background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(0,0,139,60%), stop:1 rgba(173,216,230,60%) );
+}
+
+QSpinBox {
+	padding-left: 24px;
+	padding-right: 24px;
+	border-color: darkkhaki;
+	border-style: solid;
+	border-radius: 5;
+	border-width: 3;
+}
+
+QSpinBox::up-button 
+{
+	subcontrol-origin: padding;
+	subcontrol-position: right; /* position at the top right corner */
+	width: 24px;
+	height: 24px;
+	border-width: 3px;
+	
+}
+
+QSpinBox::up-arrow 
+{
+	image: url(icons:add.png);
+	width: 18px;
+	height: 18px;
+}
+
+
+QSpinBox::down-button 
+{
+	subcontrol-origin: border;
+	subcontrol-position: left;
+	width: 24px;
+	height: 24px;
+	border-width: 3px;
+}
+
+QSpinBox::down-arrow 
+{
+	image: url(icons:remove.png);
+	width: 18px;
+	height: 18px;
+}
+
+
+QScrollBar:horizontal 
+{
+	border: 1px solid black;
+	background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 rgba(0,0,139,60%), stop:1 rgba(173,216,230,60%) );
+	height: 15px;
+	margin: 0px 20px 0 20px;
+}
+
+QScrollBar::handle:horizontal 
+{
+	border: 1px solid black;
+	background: rgba(0,0,139,60%);
+	min-width: 20px;
+}
+
+QScrollBar::add-line:horizontal 
+{
+	border: 1px solid black;
+	background: rgba(0,0,139,60%);
+	width: 20px;
+	subcontrol-position: right;
+	subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:horizontal 
+{
+	border: 1px solid black;
+	background: rgba(0,0,139,60%);
+	width: 20px;
+	subcontrol-position: left;
+	subcontrol-origin: margin;
+}
+
+QScrollBar:left-arrow:horizontal, QScrollBar::right-arrow:horizontal 
+{
+	border: none;
+	width: 16px;
+	height: 16px;
+}
+
+QScrollBar:left-arrow:horizontal 
+{
+	image: url(icons:add.png)
+}
+
+QScrollBar::right-arrow:horizontal 
+{
+	image: url(icons:remove.png)
+}
+
+QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal 
+{
+	background: none;
+}
+
Index: trunk/demos/embedded/styledemo/files/blue.qss
===================================================================
--- trunk/demos/embedded/styledemo/files/blue.qss	(revision 561)
+++ trunk/demos/embedded/styledemo/files/blue.qss	(revision 561)
@@ -0,0 +1,38 @@
+*
+{
+	color: beige;
+}
+
+QLabel, QAbstractButton 
+{
+    font: bold;
+	color: yellow;
+}
+
+QFrame
+{
+    background-color: rgba(96,96,255,60%);
+    border-color: rgb(32,32,196);
+    border-width: 3px;
+    border-style: solid;
+    border-radius: 5;
+    padding: 3px;
+}
+
+QAbstractButton
+{
+    background: qlineargradient(x1:0, y1:0, x2:0, y2:1,
+                             stop:0 lightblue, stop:0.5 darkblue);
+    border-width: 3px;
+    border-color: darkblue;
+    border-style: solid;
+    border-radius: 5;
+    padding: 3px;
+}
+
+QAbstractButton:pressed
+{
+    background: qlineargradient(x1:0, y1:0, x2:0, y2:1,
+                             stop:0.5 darkblue, stop:1 lightblue);
+    border-color: beige;
+}
Index: trunk/demos/embedded/styledemo/files/khaki.qss
===================================================================
--- trunk/demos/embedded/styledemo/files/khaki.qss	(revision 561)
+++ trunk/demos/embedded/styledemo/files/khaki.qss	(revision 561)
@@ -0,0 +1,99 @@
+
+QWidget#StartScreen, QWidget#MainWidget {
+   border: none;
+}
+
+QWidget#StartScreen, .QFrame {
+   background-color: beige;
+}
+
+QPushButton, QToolButton {
+    background-color: palegoldenrod;
+    border-width: 2px;
+    border-color: darkkhaki;
+    border-style: solid;
+    border-radius: 5;
+    padding: 3px;
+    /* min-width: 96px; */
+    /* min-height: 48px; */
+}
+
+QPushButton:hover, QToolButton:hover {
+   background-color: khaki;
+}
+
+QPushButton:pressed, QToolButton:pressed {
+    padding-left: 5px;
+    padding-top: 5px;
+    background-color: #d0d67c;
+}
+
+QLabel, QAbstractButton {
+    font: italic "Times New Roman";
+}
+
+QFrame, QLabel#title {
+    border-width: 2px;
+    padding: 1px;
+    border-style: solid;
+    border-color: darkkhaki;
+    border-radius: 5px;
+}
+
+QFrame:focus {
+    border-width: 3px;
+    padding: 0px;
+}
+
+
+QLabel {
+    border: none;
+    padding: 0;
+    background: none;
+}
+
+QLabel#title {
+	font: 32px bold;
+}
+
+QSpinBox {
+     padding-left: 24px;
+     padding-right: 24px;
+	 border-color: darkkhaki;
+	 border-style: solid;
+	 border-radius: 5;
+     border-width: 3;
+}
+
+QSpinBox::up-button 
+{
+     subcontrol-origin: padding;
+     subcontrol-position: right; /* position at the top right corner */
+     width: 24px;
+     height: 24px;
+     border-width: 3px;
+	 border-image: url(:/files/spindownpng) 1;
+}
+
+QSpinBox::up-arrow {
+     image: url(:/files/add.png);
+     width: 12px;
+     height: 12px;
+ }
+
+
+QSpinBox::down-button 
+{
+     subcontrol-origin: border;
+     subcontrol-position: left;
+     width: 24px;
+     height: 24px;
+     border-width: 3px;
+	 border-image: url(:/files/spindownpng) 1;
+}
+
+QSpinBox::down-arrow {
+     image: url(:/files/remove.png);
+     width: 12px;
+     height: 12px;
+ }
Index: trunk/demos/embedded/styledemo/files/transparent.qss
===================================================================
--- trunk/demos/embedded/styledemo/files/transparent.qss	(revision 561)
+++ trunk/demos/embedded/styledemo/files/transparent.qss	(revision 561)
@@ -0,0 +1,139 @@
+QWidget#StyleWidget
+{
+	background-color: none;
+	background-image: url(:/files/nature_1.jpg);
+}
+
+QLabel, QAbstractButton 
+{
+	color: beige;
+}
+
+QFrame, QLabel#title {
+    border-width: 2px;
+    padding: 1px;
+    border-style: solid;
+    border-color: black;
+    border-radius: 5px;
+}
+
+QFrame:focus {
+    border-width: 3px;
+    padding: 0px;
+}
+
+
+
+QAbstractButton 
+{
+	background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(173,216,230,60%), stop:1 rgba(0,0,139,60%) );
+	border-color: black;
+	border-style: solid;
+	border-width: 3px;
+	border-radius: 6px;
+}
+
+QAbstractButton:pressed, QAbstractButton:checked
+{
+	background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(0,0,139,60%), stop:1 rgba(173,216,230,60%) );
+}
+
+QSpinBox {
+	padding-left: 24px;
+	padding-right: 24px;
+	border-color: darkkhaki;
+	border-style: solid;
+	border-radius: 5;
+	border-width: 3;
+}
+
+QSpinBox::up-button 
+{
+	subcontrol-origin: padding;
+	subcontrol-position: right; /* position at the top right corner */
+	width: 24px;
+	height: 24px;
+	border-width: 3px;
+	
+}
+
+QSpinBox::up-arrow 
+{
+	image: url(:/files/add.png);
+	width: 18px;
+	height: 18px;
+}
+
+
+QSpinBox::down-button 
+{
+	subcontrol-origin: border;
+	subcontrol-position: left;
+	width: 24px;
+	height: 24px;
+	border-width: 3px;
+}
+
+QSpinBox::down-arrow 
+{
+	image: url(:/files/remove.png);
+	width: 18px;
+	height: 18px;
+}
+
+
+QScrollBar:horizontal 
+{
+	border: 1px solid black;
+	background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 rgba(0,0,139,60%), stop:1 rgba(173,216,230,60%) );
+	height: 15px;
+	margin: 0px 20px 0 20px;
+}
+
+QScrollBar::handle:horizontal 
+{
+	border: 1px solid black;
+	background: rgba(0,0,139,60%);
+	min-width: 20px;
+}
+
+QScrollBar::add-line:horizontal 
+{
+	border: 1px solid black;
+	background: rgba(0,0,139,60%);
+	width: 20px;
+	subcontrol-position: right;
+	subcontrol-origin: margin;
+}
+
+QScrollBar::sub-line:horizontal 
+{
+	border: 1px solid black;
+	background: rgba(0,0,139,60%);
+	width: 20px;
+	subcontrol-position: left;
+	subcontrol-origin: margin;
+}
+
+QScrollBar:left-arrow:horizontal, QScrollBar::right-arrow:horizontal 
+{
+	border: none;
+	width: 16px;
+	height: 16px;
+}
+
+QScrollBar:left-arrow:horizontal 
+{
+	image: url(:/files/add.png)
+}
+
+QScrollBar::right-arrow:horizontal 
+{
+	image: url(:/files/remove.png)
+}
+
+QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal 
+{
+	background: none;
+}
+
Index: trunk/demos/embedded/styledemo/main.cpp
===================================================================
--- trunk/demos/embedded/styledemo/main.cpp	(revision 561)
+++ trunk/demos/embedded/styledemo/main.cpp	(revision 561)
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QApplication>
+
+#include "stylewidget.h"
+
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+    Q_INIT_RESOURCE(styledemo);
+
+    app.setApplicationName("style");
+    app.setOrganizationName("Nokia");
+    app.setOrganizationDomain("com.nokia.qt");
+
+    StyleWidget widget;
+    widget.showFullScreen();
+
+    return app.exec();
+}
+
Index: trunk/demos/embedded/styledemo/styledemo.pro
===================================================================
--- trunk/demos/embedded/styledemo/styledemo.pro	(revision 561)
+++ trunk/demos/embedded/styledemo/styledemo.pro	(revision 561)
@@ -0,0 +1,17 @@
+TEMPLATE = app
+
+# Input
+HEADERS += stylewidget.h
+FORMS += stylewidget.ui
+SOURCES += main.cpp stylewidget.cpp
+RESOURCES += styledemo.qrc
+
+target.path = $$[QT_INSTALL_DEMOS]/embedded/styledemo
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro *.html
+sources.path = $$[QT_INSTALL_DEMOS]/embedded/styledemo
+INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000A63F
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+}
Index: trunk/demos/embedded/styledemo/styledemo.qrc
===================================================================
--- trunk/demos/embedded/styledemo/styledemo.qrc	(revision 561)
+++ trunk/demos/embedded/styledemo/styledemo.qrc	(revision 561)
@@ -0,0 +1,13 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/">
+    <file>files/add.png</file>
+    <file>files/blue.qss</file>
+    <file>files/khaki.qss</file>
+    <file>files/nostyle.qss</file>
+    <file>files/transparent.qss</file>
+    <file>files/application.qss</file>
+    <file>files/nature_1.jpg</file>
+    <file>files/remove.png</file>
+</qresource>
+</RCC>
+
Index: trunk/demos/embedded/styledemo/stylewidget.cpp
===================================================================
--- trunk/demos/embedded/styledemo/stylewidget.cpp	(revision 561)
+++ trunk/demos/embedded/styledemo/stylewidget.cpp	(revision 561)
@@ -0,0 +1,112 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QApplication>
+#include <QString>
+#include <QFile>
+
+#include "stylewidget.h"
+
+
+
+StyleWidget::StyleWidget(QWidget *parent)
+ : QFrame(parent)
+{
+	m_ui.setupUi(this);
+}
+
+
+void StyleWidget::on_close_clicked()
+{
+    close();
+}
+
+void StyleWidget::on_blueStyle_clicked()
+{
+    QFile styleSheet(":/files/blue.qss");
+
+    if (!styleSheet.open(QIODevice::ReadOnly)) {
+        qWarning("Unable to open :/files/blue.qss");
+        return;
+    }
+
+    qApp->setStyleSheet(styleSheet.readAll());
+}
+
+void StyleWidget::on_khakiStyle_clicked()
+{
+    QFile styleSheet(":/files/khaki.qss");
+
+    if (!styleSheet.open(QIODevice::ReadOnly)) {
+        qWarning("Unable to open :/files/khaki.qss");
+        return;
+    }
+
+    qApp->setStyleSheet(styleSheet.readAll());
+}
+
+
+void StyleWidget::on_noStyle_clicked()
+{
+    QFile styleSheet(":/files/nostyle.qss");
+
+    if (!styleSheet.open(QIODevice::ReadOnly)) {
+        qWarning("Unable to open :/files/nostyle.qss");
+        return;
+    }
+
+    qApp->setStyleSheet(styleSheet.readAll());
+}
+
+
+void StyleWidget::on_transparentStyle_clicked()
+{
+    QFile styleSheet(":/files/transparent.qss");
+
+    if (!styleSheet.open(QIODevice::ReadOnly)) {
+        qWarning("Unable to open :/files/transparent.qss");
+        return;
+    }
+
+    qApp->setStyleSheet(styleSheet.readAll());
+}
+
+
+
Index: trunk/demos/embedded/styledemo/stylewidget.h
===================================================================
--- trunk/demos/embedded/styledemo/stylewidget.h	(revision 561)
+++ trunk/demos/embedded/styledemo/stylewidget.h	(revision 561)
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef STYLEWIDGET_H
+#define STYLEWIDGET_H
+
+#include <QFrame>
+
+#include "ui_stylewidget.h"
+
+class StyleWidget : public QFrame
+{
+    Q_OBJECT
+public:
+    StyleWidget(QWidget *parent = 0);
+
+private:
+    Ui_StyleWidget m_ui;
+
+private slots:
+    void on_close_clicked();
+    void on_blueStyle_clicked();
+    void on_khakiStyle_clicked();
+    void on_noStyle_clicked();
+    void on_transparentStyle_clicked();
+};
+
+#endif
Index: trunk/demos/embedded/styledemo/stylewidget.ui
===================================================================
--- trunk/demos/embedded/styledemo/stylewidget.ui	(revision 561)
+++ trunk/demos/embedded/styledemo/stylewidget.ui	(revision 561)
@@ -0,0 +1,417 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>StyleWidget</class>
+ <widget class="QWidget" name="StyleWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>184</width>
+    <height>245</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0" colspan="2">
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>Styles</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_2">
+      <property name="margin">
+       <number>4</number>
+      </property>
+      <property name="spacing">
+       <number>4</number>
+      </property>
+      <item row="0" column="0">
+       <widget class="QPushButton" name="transparentStyle">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="focusPolicy">
+         <enum>Qt::StrongFocus</enum>
+        </property>
+        <property name="text">
+         <string>Transp.</string>
+        </property>
+        <property name="checkable">
+         <bool>true</bool>
+        </property>
+        <property name="checked">
+         <bool>false</bool>
+        </property>
+        <property name="autoExclusive">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QPushButton" name="blueStyle">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="focusPolicy">
+         <enum>Qt::StrongFocus</enum>
+        </property>
+        <property name="text">
+         <string>Blue</string>
+        </property>
+        <property name="checkable">
+         <bool>true</bool>
+        </property>
+        <property name="checked">
+         <bool>false</bool>
+        </property>
+        <property name="autoExclusive">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QPushButton" name="khakiStyle">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="focusPolicy">
+         <enum>Qt::StrongFocus</enum>
+        </property>
+        <property name="text">
+         <string>Khaki</string>
+        </property>
+        <property name="checkable">
+         <bool>true</bool>
+        </property>
+        <property name="checked">
+         <bool>false</bool>
+        </property>
+        <property name="autoExclusive">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QPushButton" name="noStyle">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="focusPolicy">
+         <enum>Qt::StrongFocus</enum>
+        </property>
+        <property name="text">
+         <string>None</string>
+        </property>
+        <property name="checkable">
+         <bool>true</bool>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+        <property name="autoExclusive">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="1" column="0" colspan="2">
+    <spacer name="verticalSpacer_3">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>0</width>
+       <height>0</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <property name="margin">
+      <number>4</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text">
+        <string>Value:</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QSpinBox" name="spinBox">
+       <property name="focusPolicy">
+        <enum>Qt::WheelFocus</enum>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+       </property>
+       <property name="keyboardTracking">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="3" column="0">
+    <widget class="QScrollBar" name="horizontalScrollBar">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="minimumSize">
+      <size>
+       <width>0</width>
+       <height>24</height>
+      </size>
+     </property>
+     <property name="focusPolicy">
+      <enum>Qt::TabFocus</enum>
+     </property>
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1">
+    <widget class="QScrollBar" name="horizontalScrollBar_2">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="minimumSize">
+      <size>
+       <width>0</width>
+       <height>24</height>
+      </size>
+     </property>
+     <property name="focusPolicy">
+      <enum>Qt::TabFocus</enum>
+     </property>
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="0">
+    <widget class="QPushButton" name="pushButton_2">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="focusPolicy">
+      <enum>Qt::StrongFocus</enum>
+     </property>
+     <property name="text">
+      <string>Show</string>
+     </property>
+     <property name="checkable">
+      <bool>true</bool>
+     </property>
+     <property name="checked">
+      <bool>true</bool>
+     </property>
+     <property name="flat">
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="1">
+    <widget class="QPushButton" name="pushButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="focusPolicy">
+      <enum>Qt::StrongFocus</enum>
+     </property>
+     <property name="text">
+      <string>Enable</string>
+     </property>
+     <property name="checkable">
+      <bool>true</bool>
+     </property>
+     <property name="checked">
+      <bool>true</bool>
+     </property>
+     <property name="flat">
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="0" colspan="2">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType">
+      <enum>QSizePolicy::Expanding</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>0</width>
+       <height>0</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="6" column="0">
+    <spacer>
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>40</width>
+       <height>20</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="6" column="1">
+    <widget class="QPushButton" name="close">
+     <property name="focusPolicy">
+      <enum>Qt::StrongFocus</enum>
+     </property>
+     <property name="text">
+      <string>Close</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="StyleDemo.qrc"/>
+ </resources>
+ <connections>
+  <connection>
+   <sender>horizontalScrollBar</sender>
+   <signal>valueChanged(int)</signal>
+   <receiver>horizontalScrollBar_2</receiver>
+   <slot>setValue(int)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>84</x>
+     <y>147</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>166</x>
+     <y>147</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>horizontalScrollBar_2</sender>
+   <signal>valueChanged(int)</signal>
+   <receiver>horizontalScrollBar</receiver>
+   <slot>setValue(int)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>166</x>
+     <y>147</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>84</x>
+     <y>147</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>pushButton</sender>
+   <signal>clicked(bool)</signal>
+   <receiver>horizontalScrollBar_2</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>166</x>
+     <y>175</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>166</x>
+     <y>147</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>pushButton_2</sender>
+   <signal>clicked(bool)</signal>
+   <receiver>horizontalScrollBar</receiver>
+   <slot>setVisible(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>84</x>
+     <y>175</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>84</x>
+     <y>147</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>spinBox</sender>
+   <signal>valueChanged(int)</signal>
+   <receiver>horizontalScrollBar_2</receiver>
+   <slot>setValue(int)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>166</x>
+     <y>115</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>166</x>
+     <y>147</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>horizontalScrollBar_2</sender>
+   <signal>valueChanged(int)</signal>
+   <receiver>spinBox</receiver>
+   <slot>setValue(int)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>132</x>
+     <y>132</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>135</x>
+     <y>110</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
Index: trunk/demos/embedded/weatherinfo/icons/README.txt
===================================================================
--- trunk/demos/embedded/weatherinfo/icons/README.txt	(revision 561)
+++ trunk/demos/embedded/weatherinfo/icons/README.txt	(revision 561)
@@ -0,0 +1,5 @@
+The scalable icons are from:
+
+http://tango.freedesktop.org/Tango_Icon_Library
+http://darkobra.deviantart.com/art/Tango-Weather-Icon-Pack-98024429
+
Index: trunk/demos/embedded/weatherinfo/icons/weather-few-clouds.svg
===================================================================
--- trunk/demos/embedded/weatherinfo/icons/weather-few-clouds.svg	(revision 561)
+++ trunk/demos/embedded/weatherinfo/icons/weather-few-clouds.svg	(revision 561)
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48px" height="48px" id="svg1306">
+  <defs id="defs1308">
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient6724" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient6722" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient6720" gradientUnits="userSpaceOnUse" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient6718" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient6716" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient6714" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient6712" gradientUnits="userSpaceOnUse" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient6839" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+    <linearGradient id="linearGradient6549">
+      <stop offset="0" id="stop6551" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6553" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient6837" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient id="linearGradient6527">
+      <stop offset="0" id="stop6530" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6532" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient6835" gradientUnits="userSpaceOnUse" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient id="linearGradient6538">
+      <stop offset="0" id="stop6540" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6542" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient6833" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient id="linearGradient6513">
+      <stop offset="0" id="stop6515" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6517" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient6831" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient id="linearGradient6497">
+      <stop offset="0" id="stop6499" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6501" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient6829" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient id="linearGradient6470">
+      <stop offset="0" id="stop6472" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6474" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient6827" gradientUnits="userSpaceOnUse" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient id="linearGradient4083">
+      <stop id="stop4085" offset="0" stop-color="#ffffff" stop-opacity="0"/>
+      <stop offset="0.75" id="stop4089" stop-color="#ffffff" stop-opacity="0"/>
+      <stop id="stop4087" offset="1" stop-color="#ffffff" stop-opacity="1"/>
+    </linearGradient>
+    <linearGradient id="linearGradient4032">
+      <stop id="stop4034" offset="0" stop-color="#fff7c2" stop-opacity="0.63829786"/>
+      <stop offset="0.59394139" id="stop4036" stop-color="#fcaf3e" stop-opacity="0.18348624"/>
+      <stop id="stop4038" offset="0.83850551" stop-color="#fcaf3e" stop-opacity="0.50458717"/>
+      <stop id="stop4040" offset="1" stop-color="#fcaf3e" stop-opacity="1"/>
+    </linearGradient>
+    <linearGradient id="linearGradient4026">
+      <stop id="stop4028" offset="0" stop-color="#fff9c6" stop-opacity="1"/>
+      <stop offset="0.54166669" id="stop4042" stop-color="#fff28c" stop-opacity="1"/>
+      <stop id="stop4030" offset="1" stop-color="#ffea85" stop-opacity="1"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient4026" id="linearGradient3168" gradientUnits="userSpaceOnUse" x1="-28.968945" y1="-25.326815" x2="-37.19698" y2="-9.5590506"/>
+    <radialGradient xlink:href="#linearGradient4032" id="radialGradient4020" cx="-33.519073" cy="-22.113297" fx="-33.519073" fy="-22.113297" r="9.5" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.487739,1.292402,-1.10267,0.497242,-41.77393,32.41492)"/>
+    <radialGradient xlink:href="#linearGradient4083" id="radialGradient4081" cx="23.99999" cy="23.381506" fx="23.99999" fy="23.381506" r="19.141981" gradientTransform="matrix(1.006701,2.235326e-16,-2.23715e-16,1.007522,-0.160816,0.426981)" gradientUnits="userSpaceOnUse"/>
+  </defs>
+  
+  <metadata id="metadata1311">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+        <dc:title>weather-clear</dc:title>
+        <dc:date>January 2006</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Ryan Collier (pseudo)</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>http://www.tango-project.org</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:source>http://www.pseudocode.org</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>weather</rdf:li>
+            <rdf:li>applet</rdf:li>
+            <rdf:li>notification</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/>
+        <dc:contributor>
+          <cc:Agent>
+            <dc:title>Garrett LeSage</dc:title>
+          </cc:Agent>
+        </dc:contributor>
+      </cc:Work>
+      <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/">
+        <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/>
+        <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/>
+        <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/>
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g id="layer1">
+    <g transform="translate(-263.99,459.9855)">
+      <path d="M 280.50000,-445.50000 C 278.22917,-445.50000 276.39009,-443.94972 275.78125,-441.87500 C 275.08802,-442.23883 274.33674,-442.50000 273.50000,-442.50000 C 270.74000,-442.50000 268.49999,-440.26001 268.50000,-437.50000 C 268.50000,-436.92107 268.66252,-436.39230 268.84375,-435.87500 C 267.47028,-435.10426 266.50000,-433.68600 266.50000,-432.00000 C 266.50000,-429.51600 268.51600,-427.49999 271.00000,-427.50000 C 271.17713,-427.50000 289.82287,-427.50000 290.00000,-427.50000 C 292.48399,-427.50000 294.50000,-429.51600 294.50000,-432.00000 C 294.50000,-433.68600 293.52972,-435.10426 292.15625,-435.87500 C 292.33749,-436.39229 292.50000,-436.92108 292.50000,-437.50000 C 292.50000,-440.26000 290.26000,-442.49999 287.50000,-442.50000 C 286.66326,-442.50000 285.91198,-442.23883 285.21875,-441.87500 C 284.60991,-443.94972 282.77083,-445.50000 280.50000,-445.50000 z " fill="#c4c5c2" fill-opacity="1.0000000" stroke="#888a85" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 280.50000,-445.00000 C 278.31028,-445.00000 276.77640,-443.66423 276.10445,-441.15648 C 275.43599,-441.50010 274.55686,-441.98983 273.75000,-441.98983 C 271.03349,-441.98983 268.99486,-440.05101 268.99487,-437.44429 C 268.99487,-436.89752 269.26208,-436.11085 269.43683,-435.62228 C 268.11240,-434.89433 267.00000,-433.73178 267.00000,-432.24973 C 267.00000,-429.90368 268.54617,-427.99964 271.33928,-427.99964 C 271.51009,-427.99964 289.48992,-427.99964 289.66072,-427.99964 C 292.43173,-427.99964 294.00000,-429.90368 294.00000,-432.24973 C 294.00000,-433.84210 292.88760,-434.91642 291.56317,-435.64437 C 291.73793,-436.13293 292.02724,-436.89753 292.02724,-437.44429 C 292.02724,-440.05100 289.91143,-442.01192 287.25001,-442.01193 C 286.44314,-442.01193 285.60820,-441.52219 284.93974,-441.17857 C 284.29089,-443.60011 282.68973,-445.00000 280.50000,-445.00000 z " opacity="1.0000000" fill="url(#linearGradient6827)" fill-opacity="1.0000000" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <g>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-24.19818,21.86331)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-24.19818,21.86331)" opacity="1.0000000" fill="url(#linearGradient6829)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <rect y="-438.00000" x="271.00000" height="9.0000000" width="20.000000" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(0.905660,0.000000,0.000000,0.905660,9.830195,-35.68869)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <g>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-17.19811,24.86321)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-17.19818,24.86331)" opacity="1.0000000" fill="url(#linearGradient6831)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" opacity="1.0000000" fill="url(#linearGradient6833)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g transform="translate(-1.000000,0.000000)">
+        <path d="M 280.46875,-440.96875 C 276.88937,-440.96875 274.00000,-438.04812 274.00000,-434.46875 C 274.00000,-432.09807 275.34943,-430.13096 277.25000,-429.00000 L 283.71875,-429.00000 C 285.61932,-430.13096 286.96875,-432.12931 286.96875,-434.50000 C 286.96875,-438.07938 284.04812,-440.96875 280.46875,-440.96875 z " opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 280.50000,-441.00000 C 276.91200,-441.00000 274.00000,-438.08799 274.00000,-434.50000 C 274.00000,-432.12360 275.34485,-430.13368 277.25000,-429.00000 L 283.75000,-429.00000 C 285.65515,-430.13368 287.00000,-432.12360 287.00000,-434.50000 C 287.00000,-438.08800 284.08800,-440.99999 280.50000,-441.00000 z " opacity="1.0000000" fill="url(#linearGradient6835)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <path transform="matrix(0.905660,0.000000,0.000000,0.905660,9.830296,-35.68884)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient6837)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 292.95640,-437.33396 C 292.95487,-434.64940 289.68714,-433.62001 289.68714,-433.62001 C 289.68714,-433.62001 292.03588,-435.24596 292.02399,-437.32502 C 292.02399,-437.32502 292.95640,-437.33396 292.95640,-437.33396 z " fill="#888a85" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000000px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+      <g transform="matrix(1.142857,0.000000,0.000000,1.142857,-28.57139,67.00008)">
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" opacity="1.0000000" fill="url(#linearGradient6839)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+    </g>
+    <g>
+      <g opacity="0.7">
+        <path d="M 24 2.5 L 21.625 9.1875 C 22.399034 9.0641318 23.191406 9 24 9 C 24.808594 9 25.600966 9.0641317 26.375 9.1875 L 24 2.5 z M 8.8125 8.78125 L 11.84375 15.21875 C 12.779034 13.928569 13.928569 12.779034 15.21875 11.84375 L 8.8125 8.78125 z M 39.21875 8.78125 L 32.78125 11.84375 C 34.071431 12.779034 35.220966 13.928569 36.15625 15.21875 L 39.21875 8.78125 z M 9.1875 21.59375 L 2.5 23.96875 L 9.1875 26.34375 C 9.0673373 25.57952 9 24.797813 9 24 C 9 23.180625 9.0608858 22.377571 9.1875 21.59375 z M 38.8125 21.625 C 38.935868 22.399034 39 23.191406 39 24 C 39 24.808594 38.935868 25.600966 38.8125 26.375 L 45.5 24 L 38.8125 21.625 z M 11.84375 32.78125 L 8.8125 39.1875 L 15.21875 36.15625 C 13.928569 35.220966 12.779034 34.071431 11.84375 32.78125 z M 36.15625 32.78125 C 35.229789 34.05926 34.087617 35.194799 32.8125 36.125 L 39.21875 39.1875 L 36.15625 32.78125 z M 21.625 38.8125 L 24 45.5 L 26.375 38.8125 C 25.600966 38.935868 24.808594 39 24 39 C 23.191406 39 22.399034 38.935868 21.625 38.8125 z " fill="#fce94f" fill-opacity="1" stroke="#fcaf3e" stroke-width="0.73732895" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+        <path d="M 24 5.25 L 22.65625 9.0625 C 23.098888 9.0231486 23.547187 9 24 9 C 24.452813 9 24.901112 9.0231486 25.34375 9.0625 L 24 5.25 z M 10.78125 10.75 L 12.5 14.375 C 13.071538 13.694089 13.724004 13.038745 14.40625 12.46875 L 10.78125 10.75 z M 37.25 10.75 L 33.625 12.46875 C 34.304675 13.038189 34.961811 13.695325 35.53125 14.375 L 37.25 10.75 z M 9.0625 22.625 L 5.28125 23.96875 L 9.0625 25.3125 C 9.024981 24.880146 9 24.442031 9 24 C 9 23.536406 9.0212735 23.077908 9.0625 22.625 z M 38.9375 22.65625 C 38.976851 23.098888 39 23.547187 39 24 C 39 24.452813 38.976851 24.901112 38.9375 25.34375 L 42.71875 24 L 38.9375 22.65625 z M 35.53125 33.59375 C 34.958293 34.27954 34.309985 34.957363 33.625 35.53125 L 37.25 37.25 L 35.53125 33.59375 z M 12.5 33.625 L 10.78125 37.21875 L 14.375 35.5 C 13.702932 34.935884 13.064116 34.297068 12.5 33.625 z M 22.65625 38.9375 L 24 42.71875 L 25.34375 38.9375 C 24.901112 38.976851 24.452813 39 24 39 C 23.547187 39 23.098888 38.976851 22.65625 38.9375 z " fill="none" fill-opacity="1" stroke="url(#radialGradient4081)" stroke-width="0.84646249" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+      </g>
+      <g>
+        <g>
+          <path transform="matrix(0.778062,-1.061285,1.061287,0.778062,67.47952,3.641324)" d="M -22.5 -17.5 A 9.5 9.5 0 1 1  -41.5,-17.5 A 9.5 9.5 0 1 1  -22.5 -17.5 z" fill="#ffee54" fill-opacity="1" stroke="#fcaf3e" stroke-width="0.75991178" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+          <path transform="matrix(1.244257,-0.167707,0.216642,1.251844,67.61648,40.527)" d="M -22.5 -17.5 A 9.5 9.5 0 1 1  -41.5,-17.5 A 9.5 9.5 0 1 1  -22.5 -17.5 z" fill="url(#radialGradient4020)" fill-opacity="1" stroke="none" stroke-width="1.01737845" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+          <path transform="matrix(0.715791,-0.976349,0.97635,0.715792,64.00044,5.269544)" d="M -22.5 -17.5 A 9.5 9.5 0 1 1  -41.5,-17.5 A 9.5 9.5 0 1 1  -22.5 -17.5 z" fill="none" fill-opacity="1" stroke="url(#linearGradient3168)" stroke-width="0.82601947" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+        </g>
+      </g>
+    </g>
+    <g transform="translate(-248.99,467.9855)">
+      <path d="M 280.50000,-445.50000 C 278.22917,-445.50000 276.39009,-443.94972 275.78125,-441.87500 C 275.08802,-442.23883 274.33674,-442.50000 273.50000,-442.50000 C 270.74000,-442.50000 268.49999,-440.26001 268.50000,-437.50000 C 268.50000,-436.92107 268.66252,-436.39230 268.84375,-435.87500 C 267.47028,-435.10426 266.50000,-433.68600 266.50000,-432.00000 C 266.50000,-429.51600 268.51600,-427.49999 271.00000,-427.50000 C 271.17713,-427.50000 289.82287,-427.50000 290.00000,-427.50000 C 292.48399,-427.50000 294.50000,-429.51600 294.50000,-432.00000 C 294.50000,-433.68600 293.52972,-435.10426 292.15625,-435.87500 C 292.33749,-436.39229 292.50000,-436.92108 292.50000,-437.50000 C 292.50000,-440.26000 290.26000,-442.49999 287.50000,-442.50000 C 286.66326,-442.50000 285.91198,-442.23883 285.21875,-441.87500 C 284.60991,-443.94972 282.77083,-445.50000 280.50000,-445.50000 z " fill="#c4c5c2" fill-opacity="1.0000000" stroke="#888a85" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 280.50000,-445.00000 C 278.31028,-445.00000 276.77640,-443.66423 276.10445,-441.15648 C 275.43599,-441.50010 274.55686,-441.98983 273.75000,-441.98983 C 271.03349,-441.98983 268.99486,-440.05101 268.99487,-437.44429 C 268.99487,-436.89752 269.26208,-436.11085 269.43683,-435.62228 C 268.11240,-434.89433 267.00000,-433.73178 267.00000,-432.24973 C 267.00000,-429.90368 268.54617,-427.99964 271.33928,-427.99964 C 271.51009,-427.99964 289.48992,-427.99964 289.66072,-427.99964 C 292.43173,-427.99964 294.00000,-429.90368 294.00000,-432.24973 C 294.00000,-433.84210 292.88760,-434.91642 291.56317,-435.64437 C 291.73793,-436.13293 292.02724,-436.89753 292.02724,-437.44429 C 292.02724,-440.05100 289.91143,-442.01192 287.25001,-442.01193 C 286.44314,-442.01193 285.60820,-441.52219 284.93974,-441.17857 C 284.29089,-443.60011 282.68973,-445.00000 280.50000,-445.00000 z " opacity="1.0000000" fill="url(#linearGradient6712)" fill-opacity="1.0000000" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <g>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-24.19818,21.86331)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-24.19818,21.86331)" opacity="1.0000000" fill="url(#linearGradient6714)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <rect y="-438.00000" x="271.00000" height="9.0000000" width="20.000000" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(0.905660,0.000000,0.000000,0.905660,9.830195,-35.68869)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <g>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-17.19811,24.86321)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-17.19818,24.86331)" opacity="1.0000000" fill="url(#linearGradient6716)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" opacity="1.0000000" fill="url(#linearGradient6718)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g transform="translate(-1.000000,0.000000)">
+        <path d="M 280.46875,-440.96875 C 276.88937,-440.96875 274.00000,-438.04812 274.00000,-434.46875 C 274.00000,-432.09807 275.34943,-430.13096 277.25000,-429.00000 L 283.71875,-429.00000 C 285.61932,-430.13096 286.96875,-432.12931 286.96875,-434.50000 C 286.96875,-438.07938 284.04812,-440.96875 280.46875,-440.96875 z " opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 280.50000,-441.00000 C 276.91200,-441.00000 274.00000,-438.08799 274.00000,-434.50000 C 274.00000,-432.12360 275.34485,-430.13368 277.25000,-429.00000 L 283.75000,-429.00000 C 285.65515,-430.13368 287.00000,-432.12360 287.00000,-434.50000 C 287.00000,-438.08800 284.08800,-440.99999 280.50000,-441.00000 z " opacity="1.0000000" fill="url(#linearGradient6720)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <path transform="matrix(0.905660,0.000000,0.000000,0.905660,9.830296,-35.68884)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient6722)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 292.95640,-437.33396 C 292.95487,-434.64940 289.68714,-433.62001 289.68714,-433.62001 C 289.68714,-433.62001 292.03588,-435.24596 292.02399,-437.32502 C 292.02399,-437.32502 292.95640,-437.33396 292.95640,-437.33396 z " fill="#888a85" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000000px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+      <g transform="matrix(1.142857,0.000000,0.000000,1.142857,-28.57139,67.00008)">
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" opacity="1.0000000" fill="url(#linearGradient6724)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+    </g>
+  </g>
+</svg>
Index: trunk/demos/embedded/weatherinfo/icons/weather-fog.svg
===================================================================
--- trunk/demos/embedded/weatherinfo/icons/weather-fog.svg	(revision 561)
+++ trunk/demos/embedded/weatherinfo/icons/weather-fog.svg	(revision 561)
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" id="svg2670" version="1.0">
+  <defs id="defs2672">
+    <linearGradient id="linearGradient6549">
+      <stop offset="0" id="stop6551" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6553" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient6527">
+      <stop offset="0" id="stop6530" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6532" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient6538">
+      <stop offset="0" id="stop6540" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6542" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient6513">
+      <stop offset="0" id="stop6515" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6517" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient6497">
+      <stop offset="0" id="stop6499" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6501" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient6470">
+      <stop offset="0" id="stop6472" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6474" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient5689" gradientUnits="userSpaceOnUse" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient5691" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient5693" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient5695" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient5697" gradientUnits="userSpaceOnUse" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient5699" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient5701" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient5703" gradientUnits="userSpaceOnUse" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient5705" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient5707" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient5709" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient5711" gradientUnits="userSpaceOnUse" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient5713" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient5715" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+  </defs>
+  
+  <metadata id="metadata2675">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g id="layer1">
+    <g transform="translate(5e-6,-4)">
+      <g transform="translate(-248.99871,466.5)" opacity="0.45">
+        <path d="M 280.5,-445.5 C 278.22917,-445.5 276.39009,-443.94972 275.78125,-441.875 C 275.08802,-442.23883 274.33674,-442.5 273.5,-442.5 C 270.74,-442.5 268.49999,-440.26001 268.5,-437.5 C 268.5,-436.92107 268.66252,-436.3923 268.84375,-435.875 C 267.47028,-435.10426 266.5,-433.686 266.5,-432 C 266.5,-429.516 268.516,-427.49999 271,-427.5 C 271.17713,-427.5 289.82287,-427.5 290,-427.5 C 292.48399,-427.5 294.5,-429.516 294.5,-432 C 294.5,-433.686 293.52972,-435.10426 292.15625,-435.875 C 292.33749,-436.39229 292.5,-436.92108 292.5,-437.5 C 292.5,-440.26 290.26,-442.49999 287.5,-442.5 C 286.66326,-442.5 285.91198,-442.23883 285.21875,-441.875 C 284.60991,-443.94972 282.77083,-445.5 280.5,-445.5 z" fill="#c4c5c2" fill-opacity="1" stroke="#888a85" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 280.5,-445 C 278.31028,-445 276.7764,-443.66423 276.10445,-441.15648 C 275.43599,-441.5001 274.55686,-441.98983 273.75,-441.98983 C 271.03349,-441.98983 268.99486,-440.05101 268.99487,-437.44429 C 268.99487,-436.89752 269.26208,-436.11085 269.43683,-435.62228 C 268.1124,-434.89433 267,-433.73178 267,-432.24973 C 267,-429.90368 268.54617,-427.99964 271.33928,-427.99964 C 271.51009,-427.99964 289.48992,-427.99964 289.66072,-427.99964 C 292.43173,-427.99964 294,-429.90368 294,-432.24973 C 294,-433.8421 292.8876,-434.91642 291.56317,-435.64437 C 291.73793,-436.13293 292.02724,-436.89753 292.02724,-437.44429 C 292.02724,-440.051 289.91143,-442.01192 287.25001,-442.01193 C 286.44314,-442.01193 285.6082,-441.52219 284.93974,-441.17857 C 284.29089,-443.60011 282.68973,-445 280.5,-445 z" opacity="1" fill="url(#linearGradient5689)" fill-opacity="1" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <g>
+          <path transform="matrix(1.056604,0,0,1.056604,-24.19818,21.86331)" d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" opacity="1" fill="#c4c5c2" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path transform="matrix(1.056604,0,0,1.056604,-24.19818,21.86331)" d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" opacity="1" fill="url(#linearGradient5691)" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        </g>
+        <rect width="20" height="9" x="271" y="-438" opacity="1" fill="#c4c5c2" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" transform="matrix(0.90566,0,0,0.90566,9.830195,-35.68869)" opacity="1" fill="#c4c5c2" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <g>
+          <path transform="matrix(1.056604,0,0,1.056604,-17.19811,24.86321)" d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" opacity="1" fill="#c4c5c2" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path transform="matrix(1.056604,0,0,1.056604,-17.19818,24.86331)" d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" opacity="1" fill="url(#linearGradient5693)" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        </g>
+        <g>
+          <path transform="matrix(1.056604,0,0,1.056604,-31.19818,24.86331)" d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" opacity="1" fill="#c4c5c2" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path transform="matrix(1.056604,0,0,1.056604,-31.19818,24.86331)" d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" opacity="1" fill="url(#linearGradient5695)" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        </g>
+        <g transform="translate(-1,0)">
+          <path d="M 280.46875,-440.96875 C 276.88937,-440.96875 274,-438.04812 274,-434.46875 C 274,-432.09807 275.34943,-430.13096 277.25,-429 L 283.71875,-429 C 285.61932,-430.13096 286.96875,-432.12931 286.96875,-434.5 C 286.96875,-438.07938 284.04812,-440.96875 280.46875,-440.96875 z" opacity="1" fill="#c4c5c2" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path d="M 280.5,-441 C 276.912,-441 274,-438.08799 274,-434.5 C 274,-432.1236 275.34485,-430.13368 277.25,-429 L 283.75,-429 C 285.65515,-430.13368 287,-432.1236 287,-434.5 C 287,-438.088 284.088,-440.99999 280.5,-441 z" opacity="1" fill="url(#linearGradient5697)" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        </g>
+        <path d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" transform="matrix(0.90566,0,0,0.90566,9.830296,-35.68884)" opacity="1" fill="url(#linearGradient5699)" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 292.9564,-437.33396 C 292.95487,-434.6494 289.68714,-433.62001 289.68714,-433.62001 C 289.68714,-433.62001 292.03588,-435.24596 292.02399,-437.32502 C 292.02399,-437.32502 292.9564,-437.33396 292.9564,-437.33396 z" fill="#888a85" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
+        <g transform="matrix(1.142857,0,0,1.142857,-28.57139,67.00008)">
+          <path transform="matrix(1.056604,0,0,1.056604,-31.19818,24.86331)" d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" opacity="1" fill="#c4c5c2" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path transform="matrix(1.056604,0,0,1.056604,-31.19818,24.86331)" d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" opacity="1" fill="url(#linearGradient5701)" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        </g>
+      </g>
+      <path d="M 31.501294,21.49982 C 29.311574,21.49982 27.777694,22.83559 27.105744,25.34334 C 26.437284,24.99972 25.558154,24.50999 24.751294,24.50999 C 22.034784,24.50999 19.996154,26.44881 19.996164,29.05553 C 19.996164,29.6023 20.263374,30.38897 20.438124,30.87754 C 19.113694,31.60549 18.001294,32.76804 18.001294,34.25009 C 18.001294,36.59614 19.547464,38.50018 22.340574,38.50018 C 22.511384,38.50018 40.491214,38.50018 40.662014,38.50018 C 43.433024,38.50018 45.001294,36.59614 45.001294,34.25009 C 45.001294,32.65772 43.888894,31.5834 42.564464,30.85545 C 42.739224,30.36689 43.028534,29.60229 43.028534,29.05553 C 43.028534,26.44882 40.912724,24.4879 38.251304,24.48789 C 37.444434,24.48789 36.609494,24.97763 35.941034,25.32125 C 35.292184,22.89971 33.691024,21.49982 31.501294,21.49982 z" opacity="0.45" fill="#ffffff" fill-opacity="1" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      <g transform="translate(-264.0013,462.5)" opacity="0.45">
+        <path d="M 280.5,-445.5 C 278.22917,-445.5 276.39009,-443.94972 275.78125,-441.875 C 275.08802,-442.23883 274.33674,-442.5 273.5,-442.5 C 270.74,-442.5 268.49999,-440.26001 268.5,-437.5 C 268.5,-436.92107 268.66252,-436.3923 268.84375,-435.875 C 267.47028,-435.10426 266.5,-433.686 266.5,-432 C 266.5,-429.516 268.516,-427.49999 271,-427.5 C 271.17713,-427.5 289.82287,-427.5 290,-427.5 C 292.48399,-427.5 294.5,-429.516 294.5,-432 C 294.5,-433.686 293.52972,-435.10426 292.15625,-435.875 C 292.33749,-436.39229 292.5,-436.92108 292.5,-437.5 C 292.5,-440.26 290.26,-442.49999 287.5,-442.5 C 286.66326,-442.5 285.91198,-442.23883 285.21875,-441.875 C 284.60991,-443.94972 282.77083,-445.5 280.5,-445.5 z" fill="#c4c5c2" fill-opacity="1" stroke="#888a85" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 280.5,-445 C 278.31028,-445 276.7764,-443.66423 276.10445,-441.15648 C 275.43599,-441.5001 274.55686,-441.98983 273.75,-441.98983 C 271.03349,-441.98983 268.99486,-440.05101 268.99487,-437.44429 C 268.99487,-436.89752 269.26208,-436.11085 269.43683,-435.62228 C 268.1124,-434.89433 267,-433.73178 267,-432.24973 C 267,-429.90368 268.54617,-427.99964 271.33928,-427.99964 C 271.51009,-427.99964 289.48992,-427.99964 289.66072,-427.99964 C 292.43173,-427.99964 294,-429.90368 294,-432.24973 C 294,-433.8421 292.8876,-434.91642 291.56317,-435.64437 C 291.73793,-436.13293 292.02724,-436.89753 292.02724,-437.44429 C 292.02724,-440.051 289.91143,-442.01192 287.25001,-442.01193 C 286.44314,-442.01193 285.6082,-441.52219 284.93974,-441.17857 C 284.29089,-443.60011 282.68973,-445 280.5,-445 z" opacity="1" fill="url(#linearGradient5703)" fill-opacity="1" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <g>
+          <path transform="matrix(1.056604,0,0,1.056604,-24.19818,21.86331)" d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" opacity="1" fill="#c4c5c2" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path transform="matrix(1.056604,0,0,1.056604,-24.19818,21.86331)" d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" opacity="1" fill="url(#linearGradient5705)" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        </g>
+        <rect width="20" height="9" x="271" y="-438" opacity="1" fill="#c4c5c2" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" transform="matrix(0.90566,0,0,0.90566,9.830195,-35.68869)" opacity="1" fill="#c4c5c2" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <g>
+          <path transform="matrix(1.056604,0,0,1.056604,-17.19811,24.86321)" d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" opacity="1" fill="#c4c5c2" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path transform="matrix(1.056604,0,0,1.056604,-17.19818,24.86331)" d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" opacity="1" fill="url(#linearGradient5707)" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        </g>
+        <g>
+          <path transform="matrix(1.056604,0,0,1.056604,-31.19818,24.86331)" d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" opacity="1" fill="#c4c5c2" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path transform="matrix(1.056604,0,0,1.056604,-31.19818,24.86331)" d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" opacity="1" fill="url(#linearGradient5709)" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        </g>
+        <g transform="translate(-1,0)">
+          <path d="M 280.46875,-440.96875 C 276.88937,-440.96875 274,-438.04812 274,-434.46875 C 274,-432.09807 275.34943,-430.13096 277.25,-429 L 283.71875,-429 C 285.61932,-430.13096 286.96875,-432.12931 286.96875,-434.5 C 286.96875,-438.07938 284.04812,-440.96875 280.46875,-440.96875 z" opacity="1" fill="#c4c5c2" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path d="M 280.5,-441 C 276.912,-441 274,-438.08799 274,-434.5 C 274,-432.1236 275.34485,-430.13368 277.25,-429 L 283.75,-429 C 285.65515,-430.13368 287,-432.1236 287,-434.5 C 287,-438.088 284.088,-440.99999 280.5,-441 z" opacity="1" fill="url(#linearGradient5711)" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        </g>
+        <path d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" transform="matrix(0.90566,0,0,0.90566,9.830296,-35.68884)" opacity="1" fill="url(#linearGradient5713)" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 292.9564,-437.33396 C 292.95487,-434.6494 289.68714,-433.62001 289.68714,-433.62001 C 289.68714,-433.62001 292.03588,-435.24596 292.02399,-437.32502 C 292.02399,-437.32502 292.9564,-437.33396 292.9564,-437.33396 z" fill="#888a85" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
+        <g transform="matrix(1.142857,0,0,1.142857,-28.57139,67.00008)">
+          <path transform="matrix(1.056604,0,0,1.056604,-31.19818,24.86331)" d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" opacity="1" fill="#c4c5c2" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path transform="matrix(1.056604,0,0,1.056604,-31.19818,24.86331)" d="M 291.6875,-437.59375 A 3.3125,3.3125 0 1 1 285.0625,-437.59375 A 3.3125,3.3125 0 1 1 291.6875,-437.59375 z" opacity="1" fill="url(#linearGradient5715)" fill-opacity="1" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        </g>
+      </g>
+      <path d="M 16.498705,17.499819 C 14.308985,17.499819 12.775105,18.835589 12.103155,21.343339 C 11.434695,20.999719 10.555565,20.509989 9.748705,20.509989 C 7.032195,20.509989 4.993565,22.448809 4.993575,25.055529 C 4.993575,25.602299 5.260785,26.388969 5.435535,26.877539 C 4.111105,27.605489 2.998705,28.768039 2.998705,30.250089 C 2.998705,32.596139 4.544875,34.500179 7.337985,34.500179 C 7.508795,34.500179 25.488624,34.500179 25.659424,34.500179 C 28.430434,34.500179 29.998704,32.596139 29.998704,30.250089 C 29.998704,28.657719 28.886304,27.583399 27.561874,26.855449 C 27.736634,26.366889 28.025944,25.602289 28.025944,25.055529 C 28.025944,22.448819 25.910134,20.487899 23.248714,20.487889 C 22.441844,20.487889 21.606904,20.977629 20.938444,21.321249 C 20.289594,18.899709 18.688434,17.499819 16.498705,17.499819 z" opacity="0.45" fill="#ffffff" fill-opacity="1" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+    </g>
+  </g>
+</svg>
Index: trunk/demos/embedded/weatherinfo/icons/weather-haze.svg
===================================================================
--- trunk/demos/embedded/weatherinfo/icons/weather-haze.svg	(revision 561)
+++ trunk/demos/embedded/weatherinfo/icons/weather-haze.svg	(revision 561)
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" id="svg14353" version="1.0">
+  
+  <defs id="defs14355">
+    <linearGradient id="linearGradient8371">
+      <stop offset="0" id="stop8373" stop-color="#e8d277" stop-opacity="1"/>
+      <stop offset="1" id="stop8375" stop-color="#e8d277" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient9362">
+      <stop id="stop9364" offset="0" stop-color="#392100" stop-opacity="1"/>
+      <stop id="stop9366" offset="1" stop-color="#392100" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient7010">
+      <stop offset="0" id="stop7012" stop-color="#aec2d7" stop-opacity="1"/>
+      <stop id="stop9915" offset="1" stop-color="#81a0c1" stop-opacity="1"/>
+    </linearGradient>
+    <linearGradient id="linearGradient6825">
+      <stop offset="0" id="stop6827" stop-color="#3a2400" stop-opacity="1"/>
+      <stop id="stop6833" offset="0.28565985" stop-color="#8c5600" stop-opacity="1"/>
+      <stop offset="1" id="stop6829" stop-color="#a36400" stop-opacity="1"/>
+    </linearGradient>
+    <linearGradient id="linearGradient6772">
+      <stop offset="0" id="stop6774" stop-color="#888a85" stop-opacity="1"/>
+      <stop offset="1" id="stop6776" stop-color="#eeeeec" stop-opacity="1"/>
+    </linearGradient>
+    <linearGradient id="linearGradient6764">
+      <stop offset="0" id="stop6766" stop-color="#eeeeec" stop-opacity="1"/>
+      <stop offset="1" id="stop6768" stop-color="#eeeeec" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient6746">
+      <stop offset="0" id="stop6748" stop-color="#eeeeec" stop-opacity="1"/>
+      <stop offset="1" id="stop6750" stop-color="#eeeeec" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient6728">
+      <stop offset="0" id="stop6730" stop-color="#babdb6" stop-opacity="1"/>
+      <stop offset="1" id="stop6732" stop-color="#babdb6" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient6685">
+      <stop offset="0" id="stop6687" stop-color="#000000" stop-opacity="1"/>
+      <stop offset="1" id="stop6689" stop-color="#000000" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient6631">
+      <stop offset="0" id="stop6633" stop-color="#555753" stop-opacity="1"/>
+      <stop id="stop6639" offset="0.0343047" stop-color="#eeeeec" stop-opacity="0.49803922"/>
+      <stop offset="0.06714281" id="stop6641" stop-color="#555753" stop-opacity="1"/>
+      <stop id="stop6643" offset="0.08441304" stop-color="#eeeeec" stop-opacity="0.49803922"/>
+      <stop offset="0.13726114" id="stop6645" stop-color="#555753" stop-opacity="1"/>
+      <stop id="stop6647" offset="0.15779018" stop-color="#eeeeec" stop-opacity="0.49803922"/>
+      <stop offset="0.21104114" id="stop6649" stop-color="#555753" stop-opacity="1"/>
+      <stop id="stop6651" offset="0.23053712" stop-color="#eeeeec" stop-opacity="0.49803922"/>
+      <stop offset="0.27452311" id="stop6653" stop-color="#555753" stop-opacity="1"/>
+      <stop id="stop6655" offset="0.29490501" stop-color="#eeeeec" stop-opacity="0.49803922"/>
+      <stop offset="0.34954464" id="stop6657" stop-color="#555753" stop-opacity="1"/>
+      <stop id="stop6659" offset="0.36960241" stop-color="#eeeeec" stop-opacity="0.49803922"/>
+      <stop offset="0.4220143" id="stop6675" stop-color="#555753" stop-opacity="1"/>
+      <stop id="stop6677" offset="0.44345734" stop-color="#eeeeec" stop-opacity="0.49803922"/>
+      <stop offset="0.50078195" id="stop6679" stop-color="#555753" stop-opacity="1"/>
+      <stop id="stop6681" offset="0.52629334" stop-color="#eeeeec" stop-opacity="0.49803922"/>
+      <stop offset="0.57410157" id="stop6683" stop-color="#555753" stop-opacity="1"/>
+      <stop id="stop6693" offset="0.5898369" stop-color="#eeeeec" stop-opacity="0.49803922"/>
+      <stop offset="0.64333093" id="stop6695" stop-color="#555753" stop-opacity="1"/>
+      <stop id="stop6697" offset="0.66151941" stop-color="#eeeeec" stop-opacity="0.49803922"/>
+      <stop offset="0.70865703" id="stop6699" stop-color="#555753" stop-opacity="1"/>
+      <stop id="stop6701" offset="0.72415513" stop-color="#eeeeec" stop-opacity="0.49803922"/>
+      <stop offset="1" id="stop6661" stop-color="#555753" stop-opacity="1"/>
+    </linearGradient>
+    <radialGradient xlink:href="#linearGradient7010" id="radialGradient6968" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.2893727,-0.2474294,0.6139915,0.7180729,9.91225,5.2335615)" cx="17.055056" cy="3.5953908" fx="17.055056" fy="3.5953908" r="24"/>
+    <linearGradient xlink:href="#linearGradient6825" id="linearGradient7066" gradientUnits="userSpaceOnUse" x1="37.997959" y1="18.245197" x2="37.997959" y2="39.658928"/>
+    <linearGradient xlink:href="#linearGradient6772" id="linearGradient7068" gradientUnits="userSpaceOnUse" x1="7.8838124" y1="18.558826" x2="7.8838124" y2="34.97258"/>
+    <linearGradient xlink:href="#linearGradient6728" id="linearGradient7070" gradientUnits="userSpaceOnUse" x1="15.133464" y1="32.587334" x2="17.008692" y2="32.587334"/>
+    <linearGradient xlink:href="#linearGradient6631" id="linearGradient7072" gradientUnits="userSpaceOnUse" x1="-0.52151477" y1="29.500589" x2="18.516363" y2="14.809909"/>
+    <radialGradient xlink:href="#linearGradient6685" id="radialGradient7074" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.5944965,-3.8328271e-7,4.1781509e-7,-0.6480585,194.52841,528.49324)" cx="122" cy="401.95938" fx="122" fy="401.95938" r="6.7283827"/>
+    <linearGradient xlink:href="#linearGradient6728" id="linearGradient7076" gradientUnits="userSpaceOnUse" x1="15.072129" y1="21.263441" x2="17.008948" y2="21.263441"/>
+    <linearGradient xlink:href="#linearGradient6746" id="linearGradient7078" gradientUnits="userSpaceOnUse" x1="15.526249" y1="2.097311" x2="15.526249" y2="14.758003"/>
+    <linearGradient xlink:href="#linearGradient6764" id="linearGradient7080" gradientUnits="userSpaceOnUse" x1="11.884123" y1="10.724713" x2="6.123559" y2="29.316263"/>
+    <linearGradient xlink:href="#linearGradient9362" id="linearGradient7082" gradientUnits="userSpaceOnUse" x1="8.5806656" y1="20.995518" x2="8.5806656" y2="23.085056"/>
+    <linearGradient xlink:href="#linearGradient9362" id="linearGradient7084" gradientUnits="userSpaceOnUse" gradientTransform="translate(25.006402,2.9778958e-7)" x1="8.5806656" y1="20.995518" x2="8.5806656" y2="23.085056"/>
+    <linearGradient xlink:href="#linearGradient9362" id="linearGradient7086" gradientUnits="userSpaceOnUse" gradientTransform="translate(35.006405,2.9778958e-7)" x1="8.5806656" y1="20.995518" x2="8.5806656" y2="23.085056"/>
+    <linearGradient xlink:href="#linearGradient6825" id="linearGradient7132" gradientUnits="userSpaceOnUse" x1="37.997959" y1="18.245197" x2="37.997959" y2="39.658928"/>
+    <linearGradient xlink:href="#linearGradient6772" id="linearGradient7134" gradientUnits="userSpaceOnUse" x1="7.8838124" y1="18.558826" x2="7.8838124" y2="34.97258"/>
+    <linearGradient xlink:href="#linearGradient6728" id="linearGradient7136" gradientUnits="userSpaceOnUse" x1="15.133464" y1="32.587334" x2="17.008692" y2="32.587334"/>
+    <linearGradient xlink:href="#linearGradient6631" id="linearGradient7138" gradientUnits="userSpaceOnUse" x1="-0.52151477" y1="29.500589" x2="18.516363" y2="14.809909"/>
+    <radialGradient xlink:href="#linearGradient6685" id="radialGradient7140" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.5944965,-3.8328271e-7,4.1781509e-7,-0.6480585,194.52841,528.49324)" cx="122" cy="401.95938" fx="122" fy="401.95938" r="6.7283827"/>
+    <linearGradient xlink:href="#linearGradient6728" id="linearGradient7142" gradientUnits="userSpaceOnUse" x1="15.072129" y1="21.263441" x2="17.008948" y2="21.263441"/>
+    <linearGradient xlink:href="#linearGradient6746" id="linearGradient7144" gradientUnits="userSpaceOnUse" x1="15.526249" y1="2.097311" x2="15.526249" y2="14.758003"/>
+    <linearGradient xlink:href="#linearGradient6764" id="linearGradient7146" gradientUnits="userSpaceOnUse" x1="11.884123" y1="10.724713" x2="6.123559" y2="29.316263"/>
+    <linearGradient xlink:href="#linearGradient9362" id="linearGradient7148" gradientUnits="userSpaceOnUse" x1="8.5806656" y1="20.995518" x2="8.5806656" y2="23.085056"/>
+    <linearGradient xlink:href="#linearGradient9362" id="linearGradient7150" gradientUnits="userSpaceOnUse" gradientTransform="translate(25.006402,2.9778958e-7)" x1="8.5806656" y1="20.995518" x2="8.5806656" y2="23.085056"/>
+    <linearGradient xlink:href="#linearGradient9362" id="linearGradient7152" gradientUnits="userSpaceOnUse" gradientTransform="translate(35.006405,2.9778958e-7)" x1="8.5806656" y1="20.995518" x2="8.5806656" y2="23.085056"/>
+    <filter id="filter7663" x="-0.1147047" width="1.2294094" y="-0.12580788" height="1.2516158">
+      <feGaussianBlur stdDeviation="2.2006423" id="feGaussianBlur7665"/>
+    </filter>
+    <linearGradient xlink:href="#linearGradient8371" id="linearGradient8377" x1="24" y1="45.998173" x2="24" y2="2.0644991" gradientUnits="userSpaceOnUse"/>
+  </defs>
+  <metadata id="metadata14358">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g id="layer1">
+    <rect width="47" height="47" x="0.5" y="0.5" fill="url(#radialGradient6968)" fill-opacity="1" fill-rule="evenodd" stroke="#132c50" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+    <g transform="translate(-1.6037056e-2,3.090275e-2)">
+      <path d="M 1.5112736,46.463508 L 46.518528,46.463508 L 46.518528,20.097311 L 42.49936,11.994593 L 37.997439,20.097311 L 33.503201,11.994593 L 29.51269,20.097311 L 29.51269,40.518226 L 17.513556,40.518226 L 17.513556,15.979513 L 18.991385,15.979513 L 15.625234,5.482499 L 11.994559,15.979622 L 13.487574,15.979622 L 13.487574,22.494238 L 8.5736236,16.493825 L 1.5112736,16.493825 L 1.5112736,46.463508 z" fill="#888a85" fill-rule="evenodd" stroke="#888a85" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="round" stroke-opacity="1"/>
+      <path d="M 46.499202,19.996278 L 46.499164,39.496968 L 29.497928,39.514749 L 29.496716,20.073218 L 33.471729,13.30179 L 37.969149,19.742327 L 42.464705,13.30179 L 46.499202,19.996278 z" fill="url(#linearGradient7066)" fill-opacity="1" fill-rule="evenodd" stroke="#331f00" stroke-width="1px" stroke-linecap="round" stroke-linejoin="miter" stroke-opacity="1"/>
+      <path d="M 30.4991,19.359794 L 30.495194,38.512814 L 45.998784,38.497189" opacity="0.25" fill="none" fill-rule="evenodd" stroke="#eeeeec" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
+      <rect y="14.973112" x="13.484319" height="24.544136" width="4.027225" fill="#eeeeec" fill-opacity="1" fill-rule="evenodd" stroke="#2e3436" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      <rect y="25.958162" x="1.5003295" height="13.560402" width="14.000328" fill="url(#linearGradient7068)" fill-opacity="1" fill-rule="evenodd" stroke="#2e3436" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      <path d="M 16.000204,26.158288 L 17.008692,26.165076 L 17.006997,39.016383 L 16.000204,39.016383 L 16.000204,26.158288 z" fill="url(#linearGradient7070)" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      <path d="M 1.5018555,16.471187 L 1.5018555,26.192359 L 16.519497,26.192359 L 8.5470601,16.471187 L 1.5018555,16.471187 z" fill="#7f4f01" fill-opacity="1" fill-rule="evenodd" stroke="#392100" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="round" stroke-opacity="1"/>
+      <path d="M 46.494238,19.981528 L 42.46863,15.428034 L 37.978753,20.107557 L 33.495519,15.782001 L 28.445309,22.028089 L 33.475653,11.989135 L 37.973073,19.908885 L 42.468629,12.0045 L 46.494238,19.981528 z" fill="#d3d7cf" fill-rule="evenodd" stroke="#d3d7cf" stroke-width="1.10000002" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+      <path d="M 1.9983315,16.96932 L 1.9983315,25.690091 L 15.466816,25.690091 L 8.3170492,16.96932 L 1.9983315,16.96932 z" opacity="0.5" fill="url(#linearGradient7072)" fill-opacity="1" fill-rule="evenodd" stroke="url(#radialGradient7074)" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="round" stroke-opacity="1"/>
+      <path d="M 15.632485,5.4903604 L 12.001677,15.991016 L 19.003769,15.992368 L 15.632485,5.4903604 z" fill="#532323" fill-opacity="1" fill-rule="evenodd" stroke="#2a1111" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="round" stroke-opacity="1"/>
+      <path d="M 13.983416,22.32144 L 13.983416,16.492941 L 17.007669,16.492941 L 17.007669,21.219904 L 17.008948,26.033783 C 17.008949,26.039055 16.935124,25.911261 16.894583,25.856332 L 13.983416,22.32144 z" fill="url(#linearGradient7076)" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      <path d="M 15.595391,8.6350832 L 13.413573,14.980794 L 17.638924,14.980794 L 15.595391,8.6350832 z" opacity="0.5" fill="none" fill-rule="evenodd" stroke="url(#linearGradient7078)" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
+      <path d="M 1.9974392,25.190652 L 14.412292,25.190652 L 8.0819463,17.470171 L 2.0013455,17.470171" opacity="0.5" fill="none" fill-rule="evenodd" stroke="url(#linearGradient7080)" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
+      <g fill="#fce94f">
+        <rect width="2" height="2" x="30.999861" y="22.002562" fill="#fce94f" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <rect width="2" height="2" x="34.001801" y="22.000923" fill="#fce94f" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <rect width="2" height="2" x="40.997707" y="22.000923" fill="#fce94f" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <rect width="2" height="2" x="9.0004454" y="22.002562" fill="#fce94f" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <rect width="2" height="2" x="6.0018048" y="22.002562" fill="#fce94f" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      </g>
+      <g>
+        <path d="M 4.4711906,23.06274 L 5.7618436,21.495518 L 11.216391,21.495518 L 12.507043,23.06274" fill="url(#linearGradient7082)" fill-opacity="1" fill-rule="evenodd" stroke="#392100" stroke-width="1px" stroke-linecap="round" stroke-linejoin="miter" stroke-opacity="1"/>
+        <path d="M 29.477593,23.06274 L 30.768246,21.495518 L 36.222793,21.495518 L 37.513445,23.06274" fill="url(#linearGradient7084)" fill-opacity="1" fill-rule="evenodd" stroke="#392100" stroke-width="1px" stroke-linecap="round" stroke-linejoin="miter" stroke-opacity="1"/>
+        <path d="M 39.477596,23.06274 L 40.768249,21.495518 L 43.203584,21.495518 L 44.822027,23.06274" fill="url(#linearGradient7086)" fill-opacity="1" fill-rule="evenodd" stroke="#392100" stroke-width="1px" stroke-linecap="round" stroke-linejoin="miter" stroke-opacity="1"/>
+      </g>
+    </g>
+    <g transform="translate(-7.6824584e-3,3.0729835e-2)" filter="url(#filter7663)" opacity="0.6">
+      <path d="M 1.4995548,46.463508 L 46.518528,46.463508 L 46.518528,20.097311 L 42.49936,11.994593 L 37.997439,20.097311 L 33.503201,11.994593 L 29.51269,20.097311 L 29.51269,40.518226 L 17.513556,40.518226 L 17.513556,15.979513 L 18.991385,15.979513 L 15.625234,5.482499 L 11.994559,15.979622 L 13.487574,15.979622 L 13.487574,22.494238 L 8.5736236,16.493825 L 1.4995548,16.493825 L 1.4995548,46.463508 z" fill="#888a85" fill-rule="evenodd" stroke="#888a85" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="round" stroke-opacity="1"/>
+      <path d="M 46.499202,19.996278 L 46.499164,39.496968 L 29.497928,39.514749 L 29.496716,20.073218 L 33.471729,13.30179 L 37.969149,19.742327 L 42.464705,13.30179 L 46.499202,19.996278 z" fill="url(#linearGradient7132)" fill-opacity="1" fill-rule="evenodd" stroke="#331f00" stroke-width="1px" stroke-linecap="round" stroke-linejoin="miter" stroke-opacity="1"/>
+      <path d="M 30.4991,19.359794 L 30.495194,38.512814 L 45.998784,38.497189" opacity="0.25000000000000000" fill="none" fill-rule="evenodd" stroke="#eeeeec" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
+      <rect y="14.973112" x="13.484319" height="24.544136" width="4.027225" fill="#eeeeec" fill-opacity="1" fill-rule="evenodd" stroke="#2e3436" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      <rect y="25.958162" x="1.5003295" height="13.560402" width="14.000328" fill="url(#linearGradient7134)" fill-opacity="1" fill-rule="evenodd" stroke="#2e3436" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      <path d="M 16.000204,26.158288 L 17.008692,26.165076 L 17.006997,39.016383 L 16.000204,39.016383 L 16.000204,26.158288 z" fill="url(#linearGradient7136)" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      <path d="M 1.5018555,16.471187 L 1.5018555,26.192359 L 16.519497,26.192359 L 8.5470601,16.471187 L 1.5018555,16.471187 z" fill="#7f4f01" fill-opacity="1" fill-rule="evenodd" stroke="#392100" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="round" stroke-opacity="1"/>
+      <path d="M 46.494238,19.981528 L 42.46863,15.428034 L 37.978753,20.107557 L 33.495519,15.782001 L 28.445309,22.028089 L 33.475653,11.989135 L 37.973073,19.908885 L 42.468629,12.0045 L 46.494238,19.981528 z" fill="#d3d7cf" fill-rule="evenodd" stroke="#d3d7cf" stroke-width="1.10000002000000000" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+      <path d="M 1.9983315,16.96932 L 1.9983315,25.690091 L 15.466816,25.690091 L 8.3170492,16.96932 L 1.9983315,16.96932 z" opacity="0.50000000000000000" fill="url(#linearGradient7138)" fill-opacity="1" fill-rule="evenodd" stroke="url(#radialGradient7140)" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="round" stroke-opacity="1"/>
+      <path d="M 15.632485,5.4903604 L 12.001677,15.991016 L 19.003769,15.992368 L 15.632485,5.4903604 z" fill="#532323" fill-opacity="1" fill-rule="evenodd" stroke="#2a1111" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="round" stroke-opacity="1"/>
+      <path d="M 13.983416,22.32144 L 13.983416,16.492941 L 17.007669,16.492941 L 17.007669,21.219904 L 17.008948,26.033783 C 17.008949,26.039055 16.935124,25.911261 16.894583,25.856332 L 13.983416,22.32144 z" fill="url(#linearGradient7142)" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      <path d="M 15.595391,8.6350832 L 13.413573,14.980794 L 17.638924,14.980794 L 15.595391,8.6350832 z" opacity="0.50000000000000000" fill="none" fill-rule="evenodd" stroke="url(#linearGradient7144)" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
+      <path d="M 1.9974392,25.190652 L 14.412292,25.190652 L 8.0819463,17.470171 L 2.0013455,17.470171" opacity="0.50000000000000000" fill="none" fill-rule="evenodd" stroke="url(#linearGradient7146)" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
+      <g fill="#fce94f">
+        <rect width="2" height="2" x="30.999861" y="22.002562" fill="#fce94f" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <rect width="2" height="2" x="34.001801" y="22.000923" fill="#fce94f" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <rect width="2" height="2" x="40.997707" y="22.000923" fill="#fce94f" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <rect width="2" height="2" x="9.0004454" y="22.002562" fill="#fce94f" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <rect width="2" height="2" x="6.0018048" y="22.002562" fill="#fce94f" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      </g>
+      <g>
+        <path d="M 4.4711906,23.06274 L 5.7618436,21.495518 L 11.216391,21.495518 L 12.507043,23.06274" fill="url(#linearGradient7148)" fill-opacity="1" fill-rule="evenodd" stroke="#392100" stroke-width="1px" stroke-linecap="round" stroke-linejoin="miter" stroke-opacity="1"/>
+        <path d="M 29.477593,23.06274 L 30.768246,21.495518 L 36.222793,21.495518 L 37.513445,23.06274" fill="url(#linearGradient7150)" fill-opacity="1" fill-rule="evenodd" stroke="#392100" stroke-width="1px" stroke-linecap="round" stroke-linejoin="miter" stroke-opacity="1"/>
+        <path d="M 39.477596,23.06274 L 40.768249,21.495518 L 43.203584,21.495518 L 44.822027,23.06274" fill="url(#linearGradient7152)" fill-opacity="1" fill-rule="evenodd" stroke="#392100" stroke-width="1px" stroke-linecap="round" stroke-linejoin="miter" stroke-opacity="1"/>
+      </g>
+    </g>
+    <rect width="45" height="45" x="1.5" y="1.5" opacity="0.5" fill="none" fill-opacity="1" fill-rule="evenodd" stroke="#eeeeec" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+    <rect width="44" height="43.933674" x="2" y="2.0644991" opacity="0.5" fill="url(#linearGradient8377)" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+  </g>
+</svg>
Index: trunk/demos/embedded/weatherinfo/icons/weather-icy.svg
===================================================================
--- trunk/demos/embedded/weatherinfo/icons/weather-icy.svg	(revision 561)
+++ trunk/demos/embedded/weatherinfo/icons/weather-icy.svg	(revision 561)
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" id="svg6619" version="1.0">
+  <defs id="defs6621">
+    <linearGradient id="linearGradient7440">
+      <stop offset="0" id="stop7442" stop-color="#eeeeec" stop-opacity="1"/>
+      <stop offset="1" id="stop7444" stop-color="#eeeeec" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient7430">
+      <stop offset="0" id="stop7432" stop-color="#eeeeec" stop-opacity="1"/>
+      <stop offset="1" id="stop7434" stop-color="#eeeeec" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient7392">
+      <stop offset="0" id="stop7394" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop7396" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient7380">
+      <stop offset="0" id="stop7382" stop-color="#cedeef" stop-opacity="1"/>
+      <stop offset="1" id="stop7384" stop-color="#cedeef" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient7380" id="linearGradient7386" x1="18.165867" y1="9.2548895" x2="20.711481" y2="21.572344" gradientUnits="userSpaceOnUse"/>
+    <radialGradient xlink:href="#linearGradient7392" id="radialGradient7398" cx="17.700384" cy="13.797695" fx="17.700384" fy="13.797695" r="1.4135723" gradientTransform="matrix(1,0,0,1.0652174,6.1248392e-7,-0.8998502)" gradientUnits="userSpaceOnUse"/>
+    <radialGradient xlink:href="#linearGradient7392" id="radialGradient7402" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1,0,0,1.0652174,6.1248392e-7,-0.8998502)" cx="17.700384" cy="13.797695" fx="17.700384" fy="13.797695" r="1.4135723"/>
+    <radialGradient xlink:href="#linearGradient7430" id="radialGradient7438" cx="10.693982" cy="16.471191" fx="10.693982" fy="16.471191" r="0.553137" gradientTransform="matrix(2.1647007,0,0,0.8888889,-12.455288,1.8301322)" gradientUnits="userSpaceOnUse"/>
+    <radialGradient xlink:href="#linearGradient7440" id="radialGradient7448" cx="10.693982" cy="16.471191" fx="10.693982" fy="16.471191" r="0.553137" gradientTransform="matrix(2.2783611,0,0,0.8888889,-13.670771,1.8301322)" gradientUnits="userSpaceOnUse"/>
+  </defs>
+  
+  <metadata id="metadata6624">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g id="layer1">
+    <g>
+      <path d="M 24 10.375 C 11.701921 10.375 1.71875 12.767211 1.71875 15.71875 C 1.71875 17.498261 5.3609075 19.059125 10.9375 20.03125 L 14.3125 46.90625 L 17.9375 26.1875 L 21.3125 41.90625 L 25.5625 23.71875 L 28.03125 37.6875 L 32.3125 22.9375 L 34.84375 33.0625 L 38.375 19.8125 C 43.199321 18.83144 46.28125 17.354051 46.28125 15.71875 C 46.28125 12.767211 36.298079 10.375 24 10.375 z " fill="#729fcf" fill-rule="evenodd" stroke="#204a87" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="round" stroke-opacity="1"/>
+      <path d="M 24.013525,20.535861 C 29.915498,20.535861 35.256377,19.860148 39.169775,19.061611 C 41.126474,18.662343 42.702812,18.185066 43.857275,17.628422 C 45.011738,17.071777 45.794775,16.382816 45.794775,15.758562 C 45.794775,15.111496 45.011739,14.383887 43.857275,13.827243 C 42.702811,13.270598 41.126474,12.706404 39.169775,12.307136 C 35.256377,11.508599 29.915498,10.878502 24.013525,10.878502 C 18.111552,10.878502 12.739423,11.552057 8.826025,12.350594 C 6.8693258,12.749862 5.2929887,13.270598 4.138525,13.827243 C 2.9840613,14.383887 2.201025,14.939123 2.201025,15.758562 C 2.201025,16.578001 2.9840613,17.071777 4.138525,17.628422 C 5.2929887,18.185066 6.8693258,18.662343 8.826025,19.061611 M 8.826025,19.061611 C 12.739423,19.860148 18.111552,20.535861 24.013525,20.535861 M 24.013525,11.738416 C 29.832893,11.738416 35.083852,12.397075 38.857275,13.16705 C 40.743987,13.552037 42.268014,14.087721 43.263525,14.567724 C 44.259036,15.047727 44.669775,15.382119 44.669775,15.758562 C 44.669775,16.135005 44.259035,16.407937 43.263525,16.88794 C 42.268015,17.367943 40.743986,17.840596 38.857275,18.225584 C 35.083852,18.995559 29.832893,19.652061 24.013525,19.652061 C 18.194157,19.652061 12.911948,18.995559 9.138525,18.225584 C 7.2518134,17.840596 5.7277856,17.367943 4.732275,16.88794 C 3.7367644,16.407937 3.326025,16.135005 3.326025,15.758562 C 3.326025,15.382119 3.7367644,15.047727 4.732275,14.567724 C 5.7277856,14.087721 7.2518134,13.595495 9.138525,13.210508 C 12.911948,12.440533 18.194157,11.738416 24.013525,11.738416 z" opacity="0.5" fill="#eeeeec" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1.14379668" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      <path d="M 20.220231,11.00128 L 29.138835,20.368103 L 24.21511,20.523801 L 15.180538,11.370038 L 20.220231,11.00128 z" fill="#cedeef" fill-rule="evenodd" stroke="none" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1" fill-opacity="1"/>
+      <path d="M 11.915494,19.751601 L 14.481435,40.163892 L 16.883534,26.331262 C 17.063009,24.706837 18.883373,24.906404 18.990928,26.307141 L 21.349551,37.344431 L 24.506026,23.859196 C 24.638961,22.408831 26.471791,22.275606 26.60475,23.905247 L 28.263765,33.272727 L 31.29544,22.83487 C 31.632247,21.540581 33.13534,21.733731 33.309125,22.813719 L 34.878361,29.055058 L 37.413573,19.544174" fill="none" fill-rule="evenodd" stroke="#eeeeec" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1" stroke-miterlimit="7" stroke-dasharray="none" opacity="0.5"/>
+      <path d="M 24.796795,10.87836 L 33.030717,20.024802 L 31.057055,20.187957 L 22.768625,10.889409 L 24.796795,10.87836 z" fill="#cedeef" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
+      <path d="M 28.334973,10.980368 L 36.114053,19.582843 L 35.115621,19.734949 L 27.305235,10.925125 L 28.334973,10.980368 z" fill="#cedeef" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/>
+      <path d="M 24.276568,13.090909 C 16.315524,13.346336 6.9039601,14.217661 2.7042254,16.717029 C 1.2906531,14.934699 3.0729833,13.828425 9.2804097,12.230474 C 14.942786,11.172151 20.784867,10.869471 24.346019,10.869471 C 29.101893,10.979193 33.366216,11.259555 39.81653,12.450903 C 39.81653,12.450903 46.858243,14.197968 45.56759,16.287597 C 41.461334,13.814622 33.948682,12.944657 24.276568,13.090909 z" fill="url(#linearGradient7386)" fill-rule="evenodd" stroke="none" stroke-width="1px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1" fill-opacity="1"/>
+      <path transform="matrix(2.1222827,0,0,1.9923469,-21.167011,-16.108233)" d="M 19.113956,13.797695 A 1.4135723,1.5057619 0 1 1 16.286812,13.797695 A 1.4135723,1.5057619 0 1 1 19.113956,13.797695 z" opacity="1" fill="url(#radialGradient7398)" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" stroke-miterlimit="7" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      <path transform="matrix(1.8078704,0,0,1.0169271,-3.0298763,-5.1757356)" d="M 11.247119,16.471191 A 0.553137,0.49167734 0 1 1 10.140845,16.471191 A 0.553137,0.49167734 0 1 1 11.247119,16.471191 z" opacity="1" fill="#eeeeec" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" stroke-miterlimit="7" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      <path transform="matrix(4.4701088,0,0,4.6249999,-65.908816,-42.825863)" d="M 19.113956,13.797695 A 1.4135723,1.5057619 0 1 1 16.286812,13.797695 A 1.4135723,1.5057619 0 1 1 19.113956,13.797695 z" opacity="1" fill="url(#radialGradient7402)" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" stroke-miterlimit="7" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      <path transform="matrix(4.5196759,0,0,1.0169271,-35.029811,3.0059967)" d="M 11.247119,16.471191 A 0.553137,0.49167734 0 1 1 10.140845,16.471191 A 0.553137,0.49167734 0 1 1 11.247119,16.471191 z" opacity="1" fill="url(#radialGradient7438)" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" stroke-miterlimit="7" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      <path transform="matrix(0,4.5196759,-2.0338541,0,46.913063,-27.253478)" d="M 11.247119,16.471191 A 0.553137,0.49167734 0 1 1 10.140845,16.471191 A 0.553137,0.49167734 0 1 1 11.247119,16.471191 z" opacity="1" fill="url(#radialGradient7448)" fill-opacity="1" fill-rule="evenodd" stroke="none" stroke-width="1" stroke-linecap="square" stroke-linejoin="round" stroke-miterlimit="7" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+    </g>
+  </g>
+</svg>
Index: trunk/demos/embedded/weatherinfo/icons/weather-overcast.svg
===================================================================
--- trunk/demos/embedded/weatherinfo/icons/weather-overcast.svg	(revision 561)
+++ trunk/demos/embedded/weatherinfo/icons/weather-overcast.svg	(revision 561)
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48px" height="48px" id="svg1306">
+  <defs id="defs1308">
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient10670" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient10668" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient10666" gradientUnits="userSpaceOnUse" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient10664" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient10662" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient10660" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient10658" gradientUnits="userSpaceOnUse" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient10656" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+    <linearGradient id="linearGradient6549">
+      <stop offset="0" id="stop6551" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6553" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient10654" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient id="linearGradient6527">
+      <stop offset="0" id="stop6530" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6532" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient10652" gradientUnits="userSpaceOnUse" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient id="linearGradient6538">
+      <stop offset="0" id="stop6540" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6542" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient10650" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient id="linearGradient6513">
+      <stop offset="0" id="stop6515" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6517" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient10648" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient id="linearGradient6497">
+      <stop offset="0" id="stop6499" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6501" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient10646" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient id="linearGradient6470">
+      <stop offset="0" id="stop6472" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6474" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient10644" gradientUnits="userSpaceOnUse" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient id="linearGradient7834">
+      <stop offset="0" id="stop7836" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop7838" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient7834" id="linearGradient10642" gradientUnits="userSpaceOnUse" x1="-156.29044" y1="-100.53421" x2="-153.09810" y2="-96.544556"/>
+    <linearGradient id="linearGradient8397">
+      <stop offset="0" id="stop8400" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8402" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8397" id="linearGradient10640" gradientUnits="userSpaceOnUse" x1="238.00478" y1="-388.47476" x2="245.65462" y2="-382.64539"/>
+    <linearGradient id="linearGradient8315">
+      <stop offset="0" id="stop8317" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8319" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8315" id="linearGradient10638" gradientUnits="userSpaceOnUse" x1="230.87598" y1="-390.43951" x2="235.25652" y2="-386.95901"/>
+    <linearGradient id="linearGradient8381">
+      <stop offset="0" id="stop8383" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8385" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8381" id="linearGradient10636" gradientUnits="userSpaceOnUse" x1="246.74042" y1="-391.31381" x2="252.69785" y2="-385.35165"/>
+    <linearGradient id="linearGradient8331">
+      <stop offset="0" id="stop8333" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8335" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8331" id="linearGradient10634" gradientUnits="userSpaceOnUse" x1="240.07379" y1="-393.40720" x2="245.82706" y2="-388.55029"/>
+    <linearGradient id="linearGradient8302">
+      <stop offset="0" id="stop8304" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8306" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8302" id="linearGradient10632" gradientUnits="userSpaceOnUse" gradientTransform="translate(69.00259,102.0000)" x1="228.50261" y1="-392.30591" x2="278.91510" y2="-375.37952"/>
+  </defs>
+  
+  <metadata id="metadata1311">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+        <dc:title>weather-overcast</dc:title>
+        <dc:date>January 2006</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Ryan Collier (pseudo)</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>http://www.tango-project.org</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:source>http://www.pseudocode.org</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>weather</rdf:li>
+            <rdf:li>applet</rdf:li>
+            <rdf:li>notify</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/>
+      </cc:Work>
+      <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/">
+        <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/>
+        <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/>
+        <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/>
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g id="layer1">
+    <g transform="translate(-287.0000,298.0000)">
+      <path d="M 311.50259,-296.00000 C 308.73017,-296.00000 306.39436,-294.42629 305.09634,-292.18750 C 304.15198,-292.66254 303.13115,-293.00000 302.00259,-293.00000 C 298.13859,-293.00000 295.00259,-289.86400 295.00259,-286.00000 C 295.00259,-282.13600 298.13859,-279.00000 302.00259,-279.00000 C 304.42226,-279.00000 306.43268,-280.31932 307.69009,-282.18750 C 308.82429,-281.49788 310.07907,-281.00000 311.50259,-281.00000 C 312.41571,-281.00000 313.25554,-281.23202 314.06509,-281.53125 C 314.57503,-280.66352 315.24421,-279.95153 316.06509,-279.37500 C 316.05785,-279.24462 316.00259,-279.13218 316.00259,-279.00000 C 316.00259,-275.13600 319.13858,-272.00000 323.00259,-272.00000 C 326.86659,-272.00000 330.00259,-275.13600 330.00259,-279.00000 C 330.00259,-281.36969 328.74361,-283.35834 326.94009,-284.62500 C 326.94733,-284.75538 327.00259,-284.86782 327.00259,-285.00000 C 327.00259,-288.86400 323.86660,-292.00000 320.00259,-292.00000 C 319.37989,-292.00000 318.82740,-291.77781 318.25259,-291.62500 C 317.05806,-294.18384 314.51125,-296.00000 311.50259,-296.00000 z " opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 311.50259,-295.00000 C 308.72211,-295.00000 306.36808,-293.23815 305.44009,-290.78125 C 304.45467,-291.49069 303.30866,-292.00000 302.00259,-292.00000 C 298.69059,-292.00000 296.00259,-289.31200 296.00259,-286.00000 C 296.00259,-282.68800 298.69059,-280.00000 302.00259,-280.00000 C 304.43034,-280.00000 306.49583,-281.45558 307.44009,-283.53125 C 308.56085,-282.61369 309.94223,-282.00000 311.50259,-282.00000 C 312.57713,-282.00000 313.54687,-282.31896 314.44009,-282.78125 C 314.83849,-281.78149 315.54123,-280.99493 316.37759,-280.34375 C 316.19758,-279.74813 316.00259,-279.15410 316.00259,-278.50000 C 316.00259,-274.91200 318.91459,-272.00000 322.50259,-272.00000 C 326.09059,-272.00000 329.00259,-274.91200 329.00259,-278.50000 C 329.00259,-280.86079 327.66826,-282.83019 325.78384,-283.96875 C 325.84643,-284.31598 326.00259,-284.63483 326.00259,-285.00000 C 326.00259,-288.31200 323.31459,-291.00000 320.00259,-291.00000 C 319.14961,-291.00000 318.33129,-290.82132 317.59634,-290.50000 C 316.74257,-293.09388 314.38110,-294.99999 311.50259,-295.00000 z " opacity="1.0000000" fill="url(#linearGradient10632)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(0.964447,0.000000,0.000000,0.964447,89.29111,91.52621)" d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <g transform="translate(69.00259,102.0000)">
+        <path d="M 250.18322 -389.30136 A 6.2313786 6.2313786 0 1 1  237.72046,-389.30136 A 6.2313786 6.2313786 0 1 1  250.18322 -389.30136 z" transform="matrix(0.882630,0.000000,0.000000,0.882630,27.18078,-46.89094)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 250.18322 -389.30136 A 6.2313786 6.2313786 0 1 1  237.72046,-389.30136 A 6.2313786 6.2313786 0 1 1  250.18322 -389.30136 z" transform="matrix(0.882630,0.000000,0.000000,0.882630,27.18078,-46.89094)" opacity="1.0000000" fill="url(#linearGradient10634)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g transform="translate(69.00259,102.0000)">
+        <path d="M 257.25429 -385.78790 A 6.0325046 6.0325046 0 1 1  245.18928,-385.78790 A 6.0325046 6.0325046 0 1 1  257.25429 -385.78790 z" transform="matrix(0.911728,0.000000,0.000000,0.911728,21.45407,-34.76637)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 257.25429 -385.78790 A 6.0325046 6.0325046 0 1 1  245.18928,-385.78790 A 6.0325046 6.0325046 0 1 1  257.25429 -385.78790 z" transform="matrix(0.911728,0.000000,0.000000,0.911728,21.45407,-34.76637)" opacity="1.0000000" fill="url(#linearGradient10636)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g transform="translate(69.00259,102.0000)">
+        <path d="M 237.80885 -387.88715 A 4.3752232 4.3752232 0 1 1  229.05840,-387.88715 A 4.3752232 4.3752232 0 1 1  237.80885 -387.88715 z" transform="matrix(1.142799,0.000000,0.000000,1.142799,-33.76771,55.27704)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 237.80885 -387.88715 A 4.3752232 4.3752232 0 1 1  229.05840,-387.88715 A 4.3752232 4.3752232 0 1 1  237.80885 -387.88715 z" transform="matrix(1.142799,0.000000,0.000000,1.142799,-33.76771,55.27704)" opacity="1.0000000" fill="url(#linearGradient10638)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g transform="translate(69.00259,102.0000)">
+        <path d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" transform="matrix(1.038636,0.000000,0.000000,1.038636,-9.150940,14.48994)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" transform="matrix(1.038636,0.000000,0.000000,1.038636,-9.150933,14.48993)" opacity="1.0000000" fill="url(#linearGradient10640)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g transform="matrix(0.935028,0.000000,0.000000,0.935028,446.8280,-187.6162)" stroke="none">
+        <path d="M -151.93750 -96.937500 A 3.1250000 3.1250000 0 1 1  -158.18750,-96.937500 A 3.1250000 3.1250000 0 1 1  -151.93750 -96.937500 z" transform="matrix(1.737733,0.000000,0.000000,1.737733,110.8322,70.07649)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="0.33115697" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M -151.93750 -96.937500 A 3.1250000 3.1250000 0 1 1  -158.18750,-96.937500 A 3.1250000 3.1250000 0 1 1  -151.93750 -96.937500 z" transform="matrix(1.737733,0.000000,0.000000,1.737733,110.8948,70.01402)" opacity="1.0000000" fill="url(#linearGradient10642)" fill-opacity="1.0000000" stroke="none" stroke-width="0.45224530" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g transform="translate(38.00259,162.0000)">
+        <path d="M 280.50000,-445.50000 C 278.22917,-445.50000 276.39009,-443.94972 275.78125,-441.87500 C 275.08802,-442.23883 274.33674,-442.50000 273.50000,-442.50000 C 270.74000,-442.50000 268.49999,-440.26001 268.50000,-437.50000 C 268.50000,-436.92107 268.66252,-436.39230 268.84375,-435.87500 C 267.47028,-435.10426 266.50000,-433.68600 266.50000,-432.00000 C 266.50000,-429.51600 268.51600,-427.49999 271.00000,-427.50000 C 271.17713,-427.50000 289.82287,-427.50000 290.00000,-427.50000 C 292.48399,-427.50000 294.50000,-429.51600 294.50000,-432.00000 C 294.50000,-433.68600 293.52972,-435.10426 292.15625,-435.87500 C 292.33749,-436.39229 292.50000,-436.92108 292.50000,-437.50000 C 292.50000,-440.26000 290.26000,-442.49999 287.50000,-442.50000 C 286.66326,-442.50000 285.91198,-442.23883 285.21875,-441.87500 C 284.60991,-443.94972 282.77083,-445.50000 280.50000,-445.50000 z " fill="#c4c5c2" fill-opacity="1.0000000" stroke="#888a85" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 280.50000,-445.00000 C 278.31028,-445.00000 276.77640,-443.66423 276.10445,-441.15648 C 275.43599,-441.50010 274.55686,-441.98983 273.75000,-441.98983 C 271.03349,-441.98983 268.99486,-440.05101 268.99487,-437.44429 C 268.99487,-436.89752 269.26208,-436.11085 269.43683,-435.62228 C 268.11240,-434.89433 267.00000,-433.73178 267.00000,-432.24973 C 267.00000,-429.90368 268.54617,-427.99964 271.33928,-427.99964 C 271.51009,-427.99964 289.48992,-427.99964 289.66072,-427.99964 C 292.43173,-427.99964 294.00000,-429.90368 294.00000,-432.24973 C 294.00000,-433.84210 292.88760,-434.91642 291.56317,-435.64437 C 291.73793,-436.13293 292.02724,-436.89753 292.02724,-437.44429 C 292.02724,-440.05100 289.91143,-442.01192 287.25001,-442.01193 C 286.44314,-442.01193 285.60820,-441.52219 284.93974,-441.17857 C 284.29089,-443.60011 282.68973,-445.00000 280.50000,-445.00000 z " opacity="1.0000000" fill="url(#linearGradient10644)" fill-opacity="1.0000000" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <g>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-24.19818,21.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-24.19818,21.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient10646)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <rect width="20.000000" height="9.0000000" x="271.00000" y="-438.00000" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(0.905660,0.000000,0.000000,0.905660,9.830195,-35.68869)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <g>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-17.19811,24.86321)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-17.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient10648)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <g>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient10650)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <g transform="translate(-1.000000,0.000000)">
+          <path d="M 280.46875,-440.96875 C 276.88937,-440.96875 274.00000,-438.04812 274.00000,-434.46875 C 274.00000,-432.09807 275.34943,-430.13096 277.25000,-429.00000 L 283.71875,-429.00000 C 285.61932,-430.13096 286.96875,-432.12931 286.96875,-434.50000 C 286.96875,-438.07938 284.04812,-440.96875 280.46875,-440.96875 z " opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path d="M 280.50000,-441.00000 C 276.91200,-441.00000 274.00000,-438.08799 274.00000,-434.50000 C 274.00000,-432.12360 275.34485,-430.13368 277.25000,-429.00000 L 283.75000,-429.00000 C 285.65515,-430.13368 287.00000,-432.12360 287.00000,-434.50000 C 287.00000,-438.08800 284.08800,-440.99999 280.50000,-441.00000 z " opacity="1.0000000" fill="url(#linearGradient10652)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(0.905660,0.000000,0.000000,0.905660,9.830296,-35.68884)" opacity="1.0000000" fill="url(#linearGradient10654)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 292.95640,-437.33396 C 292.95487,-434.64940 289.68714,-433.62001 289.68714,-433.62001 C 289.68714,-433.62001 292.03588,-435.24596 292.02399,-437.32502 C 292.02399,-437.32502 292.95640,-437.33396 292.95640,-437.33396 z " fill="#888a85" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000000px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+        <g transform="matrix(1.142857,0.000000,0.000000,1.142857,-28.57139,67.00008)">
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient10656)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+      </g>
+      <g transform="translate(23.00000,158.0000)">
+        <path d="M 280.50000,-445.50000 C 278.22917,-445.50000 276.39009,-443.94972 275.78125,-441.87500 C 275.08802,-442.23883 274.33674,-442.50000 273.50000,-442.50000 C 270.74000,-442.50000 268.49999,-440.26001 268.50000,-437.50000 C 268.50000,-436.92107 268.66252,-436.39230 268.84375,-435.87500 C 267.47028,-435.10426 266.50000,-433.68600 266.50000,-432.00000 C 266.50000,-429.51600 268.51600,-427.49999 271.00000,-427.50000 C 271.17713,-427.50000 289.82287,-427.50000 290.00000,-427.50000 C 292.48399,-427.50000 294.50000,-429.51600 294.50000,-432.00000 C 294.50000,-433.68600 293.52972,-435.10426 292.15625,-435.87500 C 292.33749,-436.39229 292.50000,-436.92108 292.50000,-437.50000 C 292.50000,-440.26000 290.26000,-442.49999 287.50000,-442.50000 C 286.66326,-442.50000 285.91198,-442.23883 285.21875,-441.87500 C 284.60991,-443.94972 282.77083,-445.50000 280.50000,-445.50000 z " fill="#c4c5c2" fill-opacity="1.0000000" stroke="#888a85" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 280.50000,-445.00000 C 278.31028,-445.00000 276.77640,-443.66423 276.10445,-441.15648 C 275.43599,-441.50010 274.55686,-441.98983 273.75000,-441.98983 C 271.03349,-441.98983 268.99486,-440.05101 268.99487,-437.44429 C 268.99487,-436.89752 269.26208,-436.11085 269.43683,-435.62228 C 268.11240,-434.89433 267.00000,-433.73178 267.00000,-432.24973 C 267.00000,-429.90368 268.54617,-427.99964 271.33928,-427.99964 C 271.51009,-427.99964 289.48992,-427.99964 289.66072,-427.99964 C 292.43173,-427.99964 294.00000,-429.90368 294.00000,-432.24973 C 294.00000,-433.84210 292.88760,-434.91642 291.56317,-435.64437 C 291.73793,-436.13293 292.02724,-436.89753 292.02724,-437.44429 C 292.02724,-440.05100 289.91143,-442.01192 287.25001,-442.01193 C 286.44314,-442.01193 285.60820,-441.52219 284.93974,-441.17857 C 284.29089,-443.60011 282.68973,-445.00000 280.50000,-445.00000 z " opacity="1.0000000" fill="url(#linearGradient10658)" fill-opacity="1.0000000" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <g>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-24.19818,21.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-24.19818,21.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient10660)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <rect width="20.000000" height="9.0000000" x="271.00000" y="-438.00000" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(0.905660,0.000000,0.000000,0.905660,9.830195,-35.68869)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <g>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-17.19811,24.86321)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-17.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient10662)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <g>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient10664)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <g transform="translate(-1.000000,0.000000)">
+          <path d="M 280.46875,-440.96875 C 276.88937,-440.96875 274.00000,-438.04812 274.00000,-434.46875 C 274.00000,-432.09807 275.34943,-430.13096 277.25000,-429.00000 L 283.71875,-429.00000 C 285.61932,-430.13096 286.96875,-432.12931 286.96875,-434.50000 C 286.96875,-438.07938 284.04812,-440.96875 280.46875,-440.96875 z " opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path d="M 280.50000,-441.00000 C 276.91200,-441.00000 274.00000,-438.08799 274.00000,-434.50000 C 274.00000,-432.12360 275.34485,-430.13368 277.25000,-429.00000 L 283.75000,-429.00000 C 285.65515,-430.13368 287.00000,-432.12360 287.00000,-434.50000 C 287.00000,-438.08800 284.08800,-440.99999 280.50000,-441.00000 z " opacity="1.0000000" fill="url(#linearGradient10666)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(0.905660,0.000000,0.000000,0.905660,9.830296,-35.68884)" opacity="1.0000000" fill="url(#linearGradient10668)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 292.95640,-437.33396 C 292.95487,-434.64940 289.68714,-433.62001 289.68714,-433.62001 C 289.68714,-433.62001 292.03588,-435.24596 292.02399,-437.32502 C 292.02399,-437.32502 292.95640,-437.33396 292.95640,-437.33396 z " fill="#888a85" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000000px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+        <g transform="matrix(1.142857,0.000000,0.000000,1.142857,-28.57139,67.00008)">
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient10670)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
Index: trunk/demos/embedded/weatherinfo/icons/weather-showers.svg
===================================================================
--- trunk/demos/embedded/weatherinfo/icons/weather-showers.svg	(revision 561)
+++ trunk/demos/embedded/weatherinfo/icons/weather-showers.svg	(revision 561)
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48px" height="48px" id="svg1306">
+  <defs id="defs1308">
+    <linearGradient xlink:href="#linearGradient2254" id="linearGradient11348" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.070878,0.000000,-0.535439,0.674858,287.5142,77.50802)" x1="-137.49608" y1="-425.28664" x2="-130.60854" y2="-425.28665"/>
+    <linearGradient xlink:href="#linearGradient2254" id="linearGradient11346" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.070879,0.000000,-0.535439,0.674857,277.5140,77.50780)" x1="-137.49608" y1="-425.28664" x2="-130.60854" y2="-425.28665"/>
+    <linearGradient xlink:href="#linearGradient2254" id="linearGradient11344" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.088439,0.000000,-0.544220,0.674842,265.9811,77.50139)" x1="-137.49608" y1="-425.28664" x2="-130.60854" y2="-425.28665"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient13352" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient13350" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient13347" gradientUnits="userSpaceOnUse" gradientTransform="translate(-35.00007,207.0001)" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient13345" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient13343" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient13341" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient13339" gradientUnits="userSpaceOnUse" gradientTransform="translate(-34.00007,207.0001)" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient13337" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+    <linearGradient id="linearGradient6549">
+      <stop offset="0" id="stop6551" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6553" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient13335" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient id="linearGradient6527">
+      <stop offset="0" id="stop6530" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6532" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient13333" gradientUnits="userSpaceOnUse" gradientTransform="translate(-35.00007,207.0001)" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient id="linearGradient6538">
+      <stop offset="0" id="stop6540" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6542" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient13331" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient id="linearGradient6513">
+      <stop offset="0" id="stop6515" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6517" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient13329" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient id="linearGradient6497">
+      <stop offset="0" id="stop6499" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6501" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient13327" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient id="linearGradient6470">
+      <stop offset="0" id="stop6472" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6474" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient13325" gradientUnits="userSpaceOnUse" gradientTransform="translate(-34.00007,207.0001)" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient id="linearGradient8397">
+      <stop offset="0" id="stop8400" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8402" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8397" id="linearGradient13323" gradientUnits="userSpaceOnUse" x1="238.00478" y1="-388.47476" x2="245.65462" y2="-382.64539"/>
+    <linearGradient id="linearGradient8315">
+      <stop offset="0" id="stop8317" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8319" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8315" id="linearGradient13321" gradientUnits="userSpaceOnUse" x1="230.87598" y1="-390.43951" x2="235.25652" y2="-386.95901"/>
+    <linearGradient id="linearGradient8381">
+      <stop offset="0" id="stop8383" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8385" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8381" id="linearGradient13319" gradientUnits="userSpaceOnUse" x1="246.74042" y1="-391.31381" x2="252.69785" y2="-385.35165"/>
+    <linearGradient id="linearGradient8331">
+      <stop offset="0" id="stop8333" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8335" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8331" id="linearGradient13317" gradientUnits="userSpaceOnUse" x1="240.07379" y1="-393.40720" x2="245.82706" y2="-388.55029"/>
+    <linearGradient id="linearGradient8302">
+      <stop offset="0" id="stop8304" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8306" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8302" id="linearGradient13315" gradientUnits="userSpaceOnUse" gradientTransform="translate(69.00000,155.0000)" x1="228.50261" y1="-392.30591" x2="266.36395" y2="-379.26862"/>
+    <linearGradient id="linearGradient2254">
+      <stop offset="0" id="stop2256" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop2258" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+  </defs>
+  
+  <metadata id="metadata1311">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+        <dc:title>weather-showers</dc:title>
+        <dc:date>January 2006</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Ryan collier (pseudo)</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>http://www.tango-project.org</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:source>http://www.pseudocode.org</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>weather</rdf:li>
+            <rdf:li>appplet</rdf:li>
+            <rdf:li>notify</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/>
+      </cc:Work>
+      <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/">
+        <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/>
+        <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/>
+        <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/>
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g id="layer1">
+    <g transform="translate(-339.9823,245.0132)">
+      <rect transform="matrix(1.000000,0.000000,-0.600523,0.799607,0.000000,0.000000)" ry="1.5179254" rx="2.3596079" y="-270.75461" x="189.68199" height="17.509083" width="32.962067" opacity="1.0000000" fill="#729fcf" fill-opacity="1.0000000" stroke="#3465a4" stroke-width="1.0817814" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <g transform="matrix(1.000000,0.000000,0.000000,0.999611,0.000000,-7.862650e-2)" opacity="0.80000001">
+        <path d="M 352.47790,-216.00000 L 359.39580,-216.00000 C 360.69054,-216.00000 361.33008,-215.50056 360.82979,-214.88017 L 352.15249,-204.12015 C 351.65217,-203.49974 350.20707,-203.00030 348.91233,-203.00030 L 344.86943,-203.00030 C 343.57469,-203.00030 342.30979,-202.95120 343.43545,-204.12015 C 343.43545,-204.12015 352.47790,-216.00000 352.47790,-216.00000 z " fill="url(#linearGradient11344)" fill-opacity="1.0000000" stroke="none" stroke-width="1.1547011" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0.0000000" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 362.74641,-216.00000 L 369.42169,-216.00000 C 370.69552,-216.00000 371.32477,-215.50054 370.83253,-214.88014 L 362.29523,-204.11987 C 361.80299,-203.49946 360.38121,-203.00000 359.10738,-203.00000 L 353.00000,-203.00000 C 353.00000,-203.00000 362.74641,-216.00000 362.74641,-216.00000 z " fill="url(#linearGradient11346)" fill-opacity="1.0000000" stroke="none" stroke-width="1.1547011" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0.0000000" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 372.74640,-216.00000 L 379.42169,-216.00000 C 380.69553,-216.00000 381.32477,-215.50053 380.83253,-214.88014 L 372.29523,-204.11986 C 371.80299,-203.49945 370.38122,-203.00000 369.10738,-203.00000 L 363.00000,-203.00000 C 363.00000,-203.00000 372.74640,-216.00000 372.74640,-216.00000 z " fill="url(#linearGradient11348)" fill-opacity="1.0000000" stroke="none" stroke-width="1.1547011" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0.0000000" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+    </g>
+    <g transform="matrix(0.999675,0.000000,0.000000,1.000000,-286.8562,245.0000)">
+      <g>
+        <path d="M 311.50000,-242.99998 C 308.72758,-242.99998 306.39177,-241.42627 305.09375,-239.18748 C 304.14939,-239.66252 303.12856,-239.99998 302.00000,-239.99998 C 298.13600,-239.99998 295.00000,-236.86398 295.00000,-232.99998 C 295.00000,-229.13598 298.13600,-225.99998 302.00000,-225.99998 C 304.41967,-225.99998 306.43009,-227.31930 307.68750,-229.18748 C 308.82170,-228.49786 310.07648,-227.99998 311.50000,-227.99998 C 312.41312,-227.99998 313.25295,-228.23200 314.06250,-228.53123 C 314.57244,-227.66350 315.24162,-226.95151 316.06250,-226.37498 C 316.05526,-226.24460 316.00000,-226.13216 316.00000,-225.99998 C 316.00000,-222.13598 319.13599,-218.99998 323.00000,-218.99998 C 326.86400,-218.99998 330.00000,-222.13598 330.00000,-225.99998 C 330.00000,-228.36967 328.74102,-230.35832 326.93750,-231.62498 C 326.94474,-231.75536 327.00000,-231.86780 327.00000,-231.99998 C 327.00000,-235.86398 323.86401,-238.99998 320.00000,-238.99998 C 319.37730,-238.99998 318.82481,-238.77779 318.25000,-238.62498 C 317.05547,-241.18382 314.50866,-242.99998 311.50000,-242.99998 z " opacity="1.0000000" fill="#555753" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 311.50000,-241.99998 C 308.71952,-241.99998 306.36549,-240.23813 305.43750,-237.78123 C 304.45208,-238.49067 303.30607,-238.99998 302.00000,-238.99998 C 298.68800,-238.99998 296.00000,-236.31198 296.00000,-232.99998 C 296.00000,-229.68798 298.68800,-226.99998 302.00000,-226.99998 C 304.42775,-226.99998 306.49324,-228.45556 307.43750,-230.53123 C 308.55826,-229.61367 309.93964,-228.99998 311.50000,-228.99998 C 312.57454,-228.99998 313.54428,-229.31894 314.43750,-229.78123 C 314.83590,-228.78147 315.53864,-227.99491 316.37500,-227.34373 C 316.19499,-226.74811 316.00000,-226.15408 316.00000,-225.49998 C 316.00000,-221.91198 318.91200,-218.99998 322.50000,-218.99998 C 326.08800,-218.99998 329.00000,-221.91198 329.00000,-225.49998 C 329.00000,-227.86077 327.66567,-229.83017 325.78125,-230.96873 C 325.84384,-231.31596 326.00000,-231.63481 326.00000,-231.99998 C 326.00000,-235.31198 323.31200,-237.99998 320.00000,-237.99998 C 319.14702,-237.99998 318.32870,-237.82130 317.59375,-237.49998 C 316.73998,-240.09386 314.37851,-241.99997 311.50000,-241.99998 z " opacity="1.0000000" fill="url(#linearGradient13315)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" transform="matrix(0.964447,0.000000,0.000000,0.964447,89.28852,144.5262)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <g>
+          <path transform="matrix(0.882630,0.000000,0.000000,0.882630,96.18078,108.1091)" d="M 250.18322 -389.30136 A 6.2313786 6.2313786 0 1 1  237.72046,-389.30136 A 6.2313786 6.2313786 0 1 1  250.18322 -389.30136 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(0.882630,0.000000,0.000000,0.882630,96.18078,108.1091)" d="M 250.18322 -389.30136 A 6.2313786 6.2313786 0 1 1  237.72046,-389.30136 A 6.2313786 6.2313786 0 1 1  250.18322 -389.30136 z" opacity="0.49444440" fill="url(#linearGradient13317)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <g>
+          <path transform="matrix(0.911728,0.000000,0.000000,0.911728,90.45407,120.2336)" d="M 257.25429 -385.78790 A 6.0325046 6.0325046 0 1 1  245.18928,-385.78790 A 6.0325046 6.0325046 0 1 1  257.25429 -385.78790 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(0.911728,0.000000,0.000000,0.911728,90.45407,120.2336)" d="M 257.25429 -385.78790 A 6.0325046 6.0325046 0 1 1  245.18928,-385.78790 A 6.0325046 6.0325046 0 1 1  257.25429 -385.78790 z" opacity="0.49444440" fill="url(#linearGradient13319)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <g>
+          <path transform="matrix(1.142799,0.000000,0.000000,1.142799,35.23229,210.2770)" d="M 237.80885 -387.88715 A 4.3752232 4.3752232 0 1 1  229.05840,-387.88715 A 4.3752232 4.3752232 0 1 1  237.80885 -387.88715 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.142799,0.000000,0.000000,1.142799,35.23229,210.2770)" d="M 237.80885 -387.88715 A 4.3752232 4.3752232 0 1 1  229.05840,-387.88715 A 4.3752232 4.3752232 0 1 1  237.80885 -387.88715 z" opacity="0.49444440" fill="url(#linearGradient13321)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <g>
+          <path transform="matrix(1.038636,0.000000,0.000000,1.038636,59.84906,169.4899)" d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.038636,0.000000,0.000000,1.038636,59.84907,169.4899)" d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" opacity="0.49444440" fill="url(#linearGradient13323)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+      </g>
+      <g transform="translate(72.00007,7.999930)">
+        <path d="M 246.49993,-238.49993 C 244.22910,-238.49993 242.39002,-236.94965 241.78118,-234.87493 C 241.08795,-235.23876 240.33667,-235.49993 239.49993,-235.49993 C 236.73993,-235.49993 234.49992,-233.25994 234.49993,-230.49993 C 234.49993,-229.92100 234.66245,-229.39223 234.84368,-228.87493 C 233.47021,-228.10419 232.49993,-226.68593 232.49993,-224.99993 C 232.49993,-222.51593 234.51593,-220.49992 236.99993,-220.49993 C 237.17706,-220.49993 255.82280,-220.49993 255.99993,-220.49993 C 258.48392,-220.49993 260.49993,-222.51593 260.49993,-224.99993 C 260.49993,-226.68593 259.52965,-228.10419 258.15618,-228.87493 C 258.33742,-229.39222 258.49993,-229.92101 258.49993,-230.49993 C 258.49993,-233.25993 256.25993,-235.49992 253.49993,-235.49993 C 252.66319,-235.49993 251.91191,-235.23876 251.21868,-234.87493 C 250.60984,-236.94965 248.77076,-238.49993 246.49993,-238.49993 z " fill="#888a85" fill-opacity="1.0000000" stroke="#555753" stroke-width="1.0001625" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 246.49993,-237.99993 C 244.31021,-237.99993 242.77633,-236.66416 242.10438,-234.15641 C 241.43592,-234.50003 240.55679,-234.98976 239.74993,-234.98976 C 237.03342,-234.98976 234.99479,-233.05094 234.99480,-230.44422 C 234.99480,-229.89745 235.26201,-229.11078 235.43676,-228.62221 C 234.11233,-227.89426 232.99993,-226.73171 232.99993,-225.24966 C 232.99993,-222.90361 234.54610,-220.99957 237.33921,-220.99957 C 237.51002,-220.99957 255.48985,-220.99957 255.66065,-220.99957 C 258.43166,-220.99957 259.99993,-222.90361 259.99993,-225.24966 C 259.99993,-226.84203 258.88753,-227.91635 257.56310,-228.64430 C 257.73786,-229.13286 258.02717,-229.89746 258.02717,-230.44422 C 258.02717,-233.05093 255.91136,-235.01185 253.24994,-235.01186 C 252.44307,-235.01186 251.60813,-234.52212 250.93967,-234.17850 C 250.29082,-236.60004 248.68966,-237.99993 246.49993,-237.99993 z " opacity="1.0000000" fill="url(#linearGradient13325)" fill-opacity="1.0000000" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-58.19825,228.8634)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-58.19825,228.8634)" opacity="0.47777775" fill="url(#linearGradient13327)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <rect width="20.000000" height="9.0000000" x="236.99994" y="-230.99992" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(0.905660,0.000000,0.000000,0.905660,-24.16987,171.3114)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-51.19818,231.8633)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-51.19825,231.8634)" opacity="0.47777775" fill="url(#linearGradient13329)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-65.19825,231.8634)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-65.19825,231.8634)" opacity="0.47777775" fill="url(#linearGradient13331)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 245.46868,-233.96868 C 241.88930,-233.96868 238.99993,-231.04805 238.99993,-227.46868 C 238.99993,-225.09800 240.34936,-223.13089 242.24993,-221.99993 L 248.71868,-221.99993 C 250.61925,-223.13089 251.96868,-225.12924 251.96868,-227.49993 C 251.96868,-231.07931 249.04805,-233.96868 245.46868,-233.96868 z " opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 245.49993,-233.99993 C 241.91193,-233.99993 238.99993,-231.08792 238.99993,-227.49993 C 238.99993,-225.12353 240.34478,-223.13361 242.24993,-221.99993 L 248.74993,-221.99993 C 250.65508,-223.13361 251.99993,-225.12353 251.99993,-227.49993 C 251.99993,-231.08793 249.08793,-233.99992 245.49993,-233.99993 z " opacity="0.47777775" fill="url(#linearGradient13333)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(0.905660,0.000000,0.000000,0.905660,-24.16977,171.3113)" opacity="0.47777775" fill="url(#linearGradient13335)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 258.95633,-230.33389 C 258.95480,-227.64933 255.68707,-226.61994 255.68707,-226.61994 C 255.68707,-226.61994 258.03581,-228.24589 258.02392,-230.32495 C 258.02392,-230.32495 258.95633,-230.33389 258.95633,-230.33389 z " fill="#555753" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000000px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.207547,0.000000,0.000000,1.207547,-98.22652,302.4154)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.207547,0.000000,0.000000,1.207547,-98.22652,302.4154)" opacity="0.47777775" fill="url(#linearGradient13337)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g transform="translate(56.98577,3.983930)">
+        <path d="M 246.49993,-238.49993 C 244.22910,-238.49993 242.39002,-236.94965 241.78118,-234.87493 C 241.08795,-235.23876 240.33667,-235.49993 239.49993,-235.49993 C 236.73993,-235.49993 234.49992,-233.25994 234.49993,-230.49993 C 234.49993,-229.92100 234.66245,-229.39223 234.84368,-228.87493 C 233.47021,-228.10419 232.49993,-226.68593 232.49993,-224.99993 C 232.49993,-222.51593 234.51593,-220.49992 236.99993,-220.49993 C 237.17706,-220.49993 255.82280,-220.49993 255.99993,-220.49993 C 258.48392,-220.49993 260.49993,-222.51593 260.49993,-224.99993 C 260.49993,-226.68593 259.52965,-228.10419 258.15618,-228.87493 C 258.33742,-229.39222 258.49993,-229.92101 258.49993,-230.49993 C 258.49993,-233.25993 256.25993,-235.49992 253.49993,-235.49993 C 252.66319,-235.49993 251.91191,-235.23876 251.21868,-234.87493 C 250.60984,-236.94965 248.77076,-238.49993 246.49993,-238.49993 z " fill="#888a85" fill-opacity="1.0000000" stroke="#555753" stroke-width="1.0001625" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 246.49993,-237.99993 C 244.31021,-237.99993 242.77633,-236.66416 242.10438,-234.15641 C 241.43592,-234.50003 240.55679,-234.98976 239.74993,-234.98976 C 237.03342,-234.98976 234.99479,-233.05094 234.99480,-230.44422 C 234.99480,-229.89745 235.26201,-229.11078 235.43676,-228.62221 C 234.11233,-227.89426 232.99993,-226.73171 232.99993,-225.24966 C 232.99993,-222.90361 234.54610,-220.99957 237.33921,-220.99957 C 237.51002,-220.99957 255.48985,-220.99957 255.66065,-220.99957 C 258.43166,-220.99957 259.99993,-222.90361 259.99993,-225.24966 C 259.99993,-226.84203 258.88753,-227.91635 257.56310,-228.64430 C 257.73786,-229.13286 258.02717,-229.89746 258.02717,-230.44422 C 258.02717,-233.05093 255.91136,-235.01185 253.24994,-235.01186 C 252.44307,-235.01186 251.60813,-234.52212 250.93967,-234.17850 C 250.29082,-236.60004 248.68966,-237.99993 246.49993,-237.99993 z " opacity="1.0000000" fill="url(#linearGradient13339)" fill-opacity="1.0000000" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-58.19825,228.8634)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-58.19825,228.8634)" opacity="0.47777775" fill="url(#linearGradient13341)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <rect width="20.000000" height="9.0000000" x="236.99994" y="-230.99992" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(0.905660,0.000000,0.000000,0.905660,-24.16987,171.3114)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-51.19818,231.8633)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-51.19825,231.8634)" opacity="0.47777775" fill="url(#linearGradient13343)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-65.19825,231.8634)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-65.19825,231.8634)" opacity="0.47777775" fill="url(#linearGradient13345)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 245.46868,-233.96868 C 241.88930,-233.96868 238.99993,-231.04805 238.99993,-227.46868 C 238.99993,-225.09800 240.34936,-223.13089 242.24993,-221.99993 L 248.71868,-221.99993 C 250.61925,-223.13089 251.96868,-225.12924 251.96868,-227.49993 C 251.96868,-231.07931 249.04805,-233.96868 245.46868,-233.96868 z " opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 245.49993,-233.99993 C 241.91193,-233.99993 238.99993,-231.08792 238.99993,-227.49993 C 238.99993,-225.12353 240.34478,-223.13361 242.24993,-221.99993 L 248.74993,-221.99993 C 250.65508,-223.13361 251.99993,-225.12353 251.99993,-227.49993 C 251.99993,-231.08793 249.08793,-233.99992 245.49993,-233.99993 z " opacity="0.47777775" fill="url(#linearGradient13347)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(0.905660,0.000000,0.000000,0.905660,-24.16977,171.3113)" opacity="0.47777775" fill="url(#linearGradient13350)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 258.95633,-230.33389 C 258.95480,-227.64933 255.68707,-226.61994 255.68707,-226.61994 C 255.68707,-226.61994 258.03581,-228.24589 258.02392,-230.32495 C 258.02392,-230.32495 258.95633,-230.33389 258.95633,-230.33389 z " fill="#555753" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000000px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.207547,0.000000,0.000000,1.207547,-98.22652,302.4154)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.207547,0.000000,0.000000,1.207547,-98.22652,302.4154)" opacity="0.47777775" fill="url(#linearGradient13352)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+    </g>
+  </g>
+</svg>
Index: trunk/demos/embedded/weatherinfo/icons/weather-sleet.svg
===================================================================
--- trunk/demos/embedded/weatherinfo/icons/weather-sleet.svg	(revision 561)
+++ trunk/demos/embedded/weatherinfo/icons/weather-sleet.svg	(revision 561)
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48px" height="48px" id="svg1306">
+  <defs id="defs1308">
+    <linearGradient id="linearGradient5358">
+      <stop offset="0" id="stop5360" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop5362" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient5346">
+      <stop offset="0" id="stop5348" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop5350" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient13352" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient13350" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient13347" gradientUnits="userSpaceOnUse" gradientTransform="translate(-35.00007,207.0001)" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient13345" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient13343" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient13341" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient13339" gradientUnits="userSpaceOnUse" gradientTransform="translate(-34.00007,207.0001)" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient13337" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+    <linearGradient id="linearGradient6549">
+      <stop offset="0" id="stop6551" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6553" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient13335" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient id="linearGradient6527">
+      <stop offset="0" id="stop6530" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6532" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient13333" gradientUnits="userSpaceOnUse" gradientTransform="translate(-35.00007,207.0001)" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient id="linearGradient6538">
+      <stop offset="0" id="stop6540" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6542" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient13331" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient id="linearGradient6513">
+      <stop offset="0" id="stop6515" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6517" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient13329" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient id="linearGradient6497">
+      <stop offset="0" id="stop6499" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6501" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient13327" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient id="linearGradient6470">
+      <stop offset="0" id="stop6472" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6474" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient13325" gradientUnits="userSpaceOnUse" gradientTransform="translate(-34.00007,207.0001)" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient id="linearGradient8397">
+      <stop offset="0" id="stop8400" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8402" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8397" id="linearGradient13323" gradientUnits="userSpaceOnUse" x1="238.00478" y1="-388.47476" x2="245.65462" y2="-382.64539"/>
+    <linearGradient id="linearGradient8315">
+      <stop offset="0" id="stop8317" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8319" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8315" id="linearGradient13321" gradientUnits="userSpaceOnUse" x1="230.87598" y1="-390.43951" x2="235.25652" y2="-386.95901"/>
+    <linearGradient id="linearGradient8381">
+      <stop offset="0" id="stop8383" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8385" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8381" id="linearGradient13319" gradientUnits="userSpaceOnUse" x1="246.74042" y1="-391.31381" x2="252.69785" y2="-385.35165"/>
+    <linearGradient id="linearGradient8331">
+      <stop offset="0" id="stop8333" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8335" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8331" id="linearGradient13317" gradientUnits="userSpaceOnUse" x1="240.07379" y1="-393.40720" x2="245.82706" y2="-388.55029"/>
+    <linearGradient id="linearGradient8302">
+      <stop offset="0" id="stop8304" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8306" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8302" id="linearGradient13315" gradientUnits="userSpaceOnUse" gradientTransform="translate(69.00000,155.0000)" x1="228.50261" y1="-392.30591" x2="266.36395" y2="-379.26862"/>
+    <radialGradient xlink:href="#linearGradient5346" id="radialGradient8290" gradientUnits="userSpaceOnUse" gradientTransform="matrix(7.065158e-2,4.154803e-2,-6.201499e-2,0.109408,207.4757,-189.8182)" cx="21.920311" cy="-382.96454" fx="21.920311" fy="-382.96454" r="21.743534"/>
+    <linearGradient xlink:href="#linearGradient5358" id="linearGradient8292" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-5.358613e-2,0.102849,-9.281434e-2,-5.937964e-2,198.9051,-255.6893)" x1="6.8942904" y1="-359.82382" x2="27.400387" y2="-381.30222"/>
+    <radialGradient xlink:href="#linearGradient5346" id="radialGradient8294" gradientUnits="userSpaceOnUse" gradientTransform="matrix(7.065158e-2,4.154803e-2,-6.201499e-2,0.109408,207.4757,-189.8182)" cx="21.920311" cy="-382.96454" fx="21.920311" fy="-382.96454" r="21.743534"/>
+    <linearGradient xlink:href="#linearGradient5358" id="linearGradient8296" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-5.358613e-2,0.102849,-9.281434e-2,-5.937964e-2,198.9051,-255.6893)" x1="6.8942904" y1="-359.82382" x2="27.400387" y2="-381.30222"/>
+    <radialGradient xlink:href="#linearGradient5346" id="radialGradient8298" gradientUnits="userSpaceOnUse" gradientTransform="matrix(7.065158e-2,4.154803e-2,-6.201499e-2,0.109408,207.4757,-189.8182)" cx="21.920311" cy="-382.96454" fx="21.920311" fy="-382.96454" r="21.743534"/>
+    <linearGradient xlink:href="#linearGradient5358" id="linearGradient8300" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-5.358613e-2,0.102849,-9.281434e-2,-5.937964e-2,198.9051,-255.6893)" x1="6.8942904" y1="-359.82382" x2="27.400387" y2="-381.30222"/>
+    <radialGradient xlink:href="#linearGradient5346" id="radialGradient8302" gradientUnits="userSpaceOnUse" gradientTransform="matrix(7.065158e-2,4.154803e-2,-6.201499e-2,0.109408,207.4757,-189.8182)" cx="21.920311" cy="-382.96454" fx="21.920311" fy="-382.96454" r="21.743534"/>
+    <linearGradient xlink:href="#linearGradient5358" id="linearGradient8304" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-5.358613e-2,0.102849,-9.281434e-2,-5.937964e-2,198.9051,-255.6893)" x1="6.8942904" y1="-359.82382" x2="27.400387" y2="-381.30222"/>
+    <radialGradient xlink:href="#linearGradient5346" id="radialGradient8306" gradientUnits="userSpaceOnUse" gradientTransform="matrix(7.065158e-2,4.154803e-2,-6.201499e-2,0.109408,207.4757,-189.8182)" cx="21.920311" cy="-382.96454" fx="21.920311" fy="-382.96454" r="21.743534"/>
+    <linearGradient xlink:href="#linearGradient5358" id="linearGradient8308" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-5.358613e-2,0.102849,-9.281434e-2,-5.937964e-2,198.9051,-255.6893)" x1="6.8942904" y1="-359.82382" x2="27.400387" y2="-381.30222"/>
+    <radialGradient xlink:href="#linearGradient5346" id="radialGradient8310" gradientUnits="userSpaceOnUse" gradientTransform="matrix(7.065158e-2,4.154803e-2,-6.201499e-2,0.109408,207.4757,-189.8182)" cx="21.920311" cy="-382.96454" fx="21.920311" fy="-382.96454" r="21.743534"/>
+    <linearGradient xlink:href="#linearGradient5358" id="linearGradient8312" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-5.358613e-2,0.102849,-9.281434e-2,-5.937964e-2,198.9051,-255.6893)" x1="6.8942904" y1="-359.82382" x2="27.400387" y2="-381.30222"/>
+  </defs>
+  
+  <metadata id="metadata1311">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+        <dc:title>weather-showers</dc:title>
+        <dc:date>January 2006</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Ryan collier (pseudo)</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>http://www.tango-project.org</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:source>http://www.pseudocode.org</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>weather</rdf:li>
+            <rdf:li>appplet</rdf:li>
+            <rdf:li>notify</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/"/>
+      </cc:Work>
+      <cc:License rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
+        <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
+        <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/Notice"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/Attribution"/>
+        <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike"/>
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g id="layer1">
+    <g>
+      <g transform="matrix(0.999675,0.000000,0.000000,1.000000,-286.8562,245.0000)">
+        <g>
+          <path d="M 311.50000,-242.99998 C 308.72758,-242.99998 306.39177,-241.42627 305.09375,-239.18748 C 304.14939,-239.66252 303.12856,-239.99998 302.00000,-239.99998 C 298.13600,-239.99998 295.00000,-236.86398 295.00000,-232.99998 C 295.00000,-229.13598 298.13600,-225.99998 302.00000,-225.99998 C 304.41967,-225.99998 306.43009,-227.31930 307.68750,-229.18748 C 308.82170,-228.49786 310.07648,-227.99998 311.50000,-227.99998 C 312.41312,-227.99998 313.25295,-228.23200 314.06250,-228.53123 C 314.57244,-227.66350 315.24162,-226.95151 316.06250,-226.37498 C 316.05526,-226.24460 316.00000,-226.13216 316.00000,-225.99998 C 316.00000,-222.13598 319.13599,-218.99998 323.00000,-218.99998 C 326.86400,-218.99998 330.00000,-222.13598 330.00000,-225.99998 C 330.00000,-228.36967 328.74102,-230.35832 326.93750,-231.62498 C 326.94474,-231.75536 327.00000,-231.86780 327.00000,-231.99998 C 327.00000,-235.86398 323.86401,-238.99998 320.00000,-238.99998 C 319.37730,-238.99998 318.82481,-238.77779 318.25000,-238.62498 C 317.05547,-241.18382 314.50866,-242.99998 311.50000,-242.99998 z " opacity="1.0000000" fill="#555753" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path d="M 311.50000,-241.99998 C 308.71952,-241.99998 306.36549,-240.23813 305.43750,-237.78123 C 304.45208,-238.49067 303.30607,-238.99998 302.00000,-238.99998 C 298.68800,-238.99998 296.00000,-236.31198 296.00000,-232.99998 C 296.00000,-229.68798 298.68800,-226.99998 302.00000,-226.99998 C 304.42775,-226.99998 306.49324,-228.45556 307.43750,-230.53123 C 308.55826,-229.61367 309.93964,-228.99998 311.50000,-228.99998 C 312.57454,-228.99998 313.54428,-229.31894 314.43750,-229.78123 C 314.83590,-228.78147 315.53864,-227.99491 316.37500,-227.34373 C 316.19499,-226.74811 316.00000,-226.15408 316.00000,-225.49998 C 316.00000,-221.91198 318.91200,-218.99998 322.50000,-218.99998 C 326.08800,-218.99998 329.00000,-221.91198 329.00000,-225.49998 C 329.00000,-227.86077 327.66567,-229.83017 325.78125,-230.96873 C 325.84384,-231.31596 326.00000,-231.63481 326.00000,-231.99998 C 326.00000,-235.31198 323.31200,-237.99998 320.00000,-237.99998 C 319.14702,-237.99998 318.32870,-237.82130 317.59375,-237.49998 C 316.73998,-240.09386 314.37851,-241.99997 311.50000,-241.99998 z " opacity="1.0000000" fill="url(#linearGradient13315)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(0.964447,0.000000,0.000000,0.964447,89.28852,144.5262)" d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <g>
+            <path d="M 250.18322 -389.30136 A 6.2313786 6.2313786 0 1 1  237.72046,-389.30136 A 6.2313786 6.2313786 0 1 1  250.18322 -389.30136 z" transform="matrix(0.882630,0.000000,0.000000,0.882630,96.18078,108.1091)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+            <path d="M 250.18322 -389.30136 A 6.2313786 6.2313786 0 1 1  237.72046,-389.30136 A 6.2313786 6.2313786 0 1 1  250.18322 -389.30136 z" transform="matrix(0.882630,0.000000,0.000000,0.882630,96.18078,108.1091)" opacity="0.49444440" fill="url(#linearGradient13317)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          </g>
+          <g>
+            <path d="M 257.25429 -385.78790 A 6.0325046 6.0325046 0 1 1  245.18928,-385.78790 A 6.0325046 6.0325046 0 1 1  257.25429 -385.78790 z" transform="matrix(0.911728,0.000000,0.000000,0.911728,90.45407,120.2336)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+            <path d="M 257.25429 -385.78790 A 6.0325046 6.0325046 0 1 1  245.18928,-385.78790 A 6.0325046 6.0325046 0 1 1  257.25429 -385.78790 z" transform="matrix(0.911728,0.000000,0.000000,0.911728,90.45407,120.2336)" opacity="0.49444440" fill="url(#linearGradient13319)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          </g>
+          <g>
+            <path d="M 237.80885 -387.88715 A 4.3752232 4.3752232 0 1 1  229.05840,-387.88715 A 4.3752232 4.3752232 0 1 1  237.80885 -387.88715 z" transform="matrix(1.142799,0.000000,0.000000,1.142799,35.23229,210.2770)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+            <path d="M 237.80885 -387.88715 A 4.3752232 4.3752232 0 1 1  229.05840,-387.88715 A 4.3752232 4.3752232 0 1 1  237.80885 -387.88715 z" transform="matrix(1.142799,0.000000,0.000000,1.142799,35.23229,210.2770)" opacity="0.49444440" fill="url(#linearGradient13321)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          </g>
+          <g>
+            <path d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" transform="matrix(1.038636,0.000000,0.000000,1.038636,59.84906,169.4899)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+            <path d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" transform="matrix(1.038636,0.000000,0.000000,1.038636,59.84907,169.4899)" opacity="0.49444440" fill="url(#linearGradient13323)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          </g>
+        </g>
+        <g transform="translate(72.00007,7.999930)">
+          <path d="M 246.49993,-238.49993 C 244.22910,-238.49993 242.39002,-236.94965 241.78118,-234.87493 C 241.08795,-235.23876 240.33667,-235.49993 239.49993,-235.49993 C 236.73993,-235.49993 234.49992,-233.25994 234.49993,-230.49993 C 234.49993,-229.92100 234.66245,-229.39223 234.84368,-228.87493 C 233.47021,-228.10419 232.49993,-226.68593 232.49993,-224.99993 C 232.49993,-222.51593 234.51593,-220.49992 236.99993,-220.49993 C 237.17706,-220.49993 255.82280,-220.49993 255.99993,-220.49993 C 258.48392,-220.49993 260.49993,-222.51593 260.49993,-224.99993 C 260.49993,-226.68593 259.52965,-228.10419 258.15618,-228.87493 C 258.33742,-229.39222 258.49993,-229.92101 258.49993,-230.49993 C 258.49993,-233.25993 256.25993,-235.49992 253.49993,-235.49993 C 252.66319,-235.49993 251.91191,-235.23876 251.21868,-234.87493 C 250.60984,-236.94965 248.77076,-238.49993 246.49993,-238.49993 z " fill="#888a85" fill-opacity="1.0000000" stroke="#555753" stroke-width="1.0001625" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path d="M 246.49993,-237.99993 C 244.31021,-237.99993 242.77633,-236.66416 242.10438,-234.15641 C 241.43592,-234.50003 240.55679,-234.98976 239.74993,-234.98976 C 237.03342,-234.98976 234.99479,-233.05094 234.99480,-230.44422 C 234.99480,-229.89745 235.26201,-229.11078 235.43676,-228.62221 C 234.11233,-227.89426 232.99993,-226.73171 232.99993,-225.24966 C 232.99993,-222.90361 234.54610,-220.99957 237.33921,-220.99957 C 237.51002,-220.99957 255.48985,-220.99957 255.66065,-220.99957 C 258.43166,-220.99957 259.99993,-222.90361 259.99993,-225.24966 C 259.99993,-226.84203 258.88753,-227.91635 257.56310,-228.64430 C 257.73786,-229.13286 258.02717,-229.89746 258.02717,-230.44422 C 258.02717,-233.05093 255.91136,-235.01185 253.24994,-235.01186 C 252.44307,-235.01186 251.60813,-234.52212 250.93967,-234.17850 C 250.29082,-236.60004 248.68966,-237.99993 246.49993,-237.99993 z " opacity="1.0000000" fill="url(#linearGradient13325)" fill-opacity="1.0000000" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-58.19825,228.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-58.19825,228.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13327)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <rect y="-230.99992" x="236.99994" height="9.0000000" width="20.000000" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(0.905660,0.000000,0.000000,0.905660,-24.16987,171.3114)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-51.19818,231.8633)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-51.19825,231.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13329)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-65.19825,231.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-65.19825,231.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13331)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path d="M 245.46868,-233.96868 C 241.88930,-233.96868 238.99993,-231.04805 238.99993,-227.46868 C 238.99993,-225.09800 240.34936,-223.13089 242.24993,-221.99993 L 248.71868,-221.99993 C 250.61925,-223.13089 251.96868,-225.12924 251.96868,-227.49993 C 251.96868,-231.07931 249.04805,-233.96868 245.46868,-233.96868 z " opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path d="M 245.49993,-233.99993 C 241.91193,-233.99993 238.99993,-231.08792 238.99993,-227.49993 C 238.99993,-225.12353 240.34478,-223.13361 242.24993,-221.99993 L 248.74993,-221.99993 C 250.65508,-223.13361 251.99993,-225.12353 251.99993,-227.49993 C 251.99993,-231.08793 249.08793,-233.99992 245.49993,-233.99993 z " opacity="0.47777775" fill="url(#linearGradient13333)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(0.905660,0.000000,0.000000,0.905660,-24.16977,171.3113)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13335)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path d="M 258.95633,-230.33389 C 258.95480,-227.64933 255.68707,-226.61994 255.68707,-226.61994 C 255.68707,-226.61994 258.03581,-228.24589 258.02392,-230.32495 C 258.02392,-230.32495 258.95633,-230.33389 258.95633,-230.33389 z " fill="#555753" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000000px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.207547,0.000000,0.000000,1.207547,-98.22652,302.4154)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.207547,0.000000,0.000000,1.207547,-98.22652,302.4154)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13337)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <g transform="translate(56.98577,3.983930)">
+          <path d="M 246.49993,-238.49993 C 244.22910,-238.49993 242.39002,-236.94965 241.78118,-234.87493 C 241.08795,-235.23876 240.33667,-235.49993 239.49993,-235.49993 C 236.73993,-235.49993 234.49992,-233.25994 234.49993,-230.49993 C 234.49993,-229.92100 234.66245,-229.39223 234.84368,-228.87493 C 233.47021,-228.10419 232.49993,-226.68593 232.49993,-224.99993 C 232.49993,-222.51593 234.51593,-220.49992 236.99993,-220.49993 C 237.17706,-220.49993 255.82280,-220.49993 255.99993,-220.49993 C 258.48392,-220.49993 260.49993,-222.51593 260.49993,-224.99993 C 260.49993,-226.68593 259.52965,-228.10419 258.15618,-228.87493 C 258.33742,-229.39222 258.49993,-229.92101 258.49993,-230.49993 C 258.49993,-233.25993 256.25993,-235.49992 253.49993,-235.49993 C 252.66319,-235.49993 251.91191,-235.23876 251.21868,-234.87493 C 250.60984,-236.94965 248.77076,-238.49993 246.49993,-238.49993 z " fill="#888a85" fill-opacity="1.0000000" stroke="#555753" stroke-width="1.0001625" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path d="M 246.49993,-237.99993 C 244.31021,-237.99993 242.77633,-236.66416 242.10438,-234.15641 C 241.43592,-234.50003 240.55679,-234.98976 239.74993,-234.98976 C 237.03342,-234.98976 234.99479,-233.05094 234.99480,-230.44422 C 234.99480,-229.89745 235.26201,-229.11078 235.43676,-228.62221 C 234.11233,-227.89426 232.99993,-226.73171 232.99993,-225.24966 C 232.99993,-222.90361 234.54610,-220.99957 237.33921,-220.99957 C 237.51002,-220.99957 255.48985,-220.99957 255.66065,-220.99957 C 258.43166,-220.99957 259.99993,-222.90361 259.99993,-225.24966 C 259.99993,-226.84203 258.88753,-227.91635 257.56310,-228.64430 C 257.73786,-229.13286 258.02717,-229.89746 258.02717,-230.44422 C 258.02717,-233.05093 255.91136,-235.01185 253.24994,-235.01186 C 252.44307,-235.01186 251.60813,-234.52212 250.93967,-234.17850 C 250.29082,-236.60004 248.68966,-237.99993 246.49993,-237.99993 z " opacity="1.0000000" fill="url(#linearGradient13339)" fill-opacity="1.0000000" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-58.19825,228.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-58.19825,228.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13341)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <rect y="-230.99992" x="236.99994" height="9.0000000" width="20.000000" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(0.905660,0.000000,0.000000,0.905660,-24.16987,171.3114)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-51.19818,231.8633)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-51.19825,231.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13343)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-65.19825,231.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-65.19825,231.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13345)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path d="M 245.46868,-233.96868 C 241.88930,-233.96868 238.99993,-231.04805 238.99993,-227.46868 C 238.99993,-225.09800 240.34936,-223.13089 242.24993,-221.99993 L 248.71868,-221.99993 C 250.61925,-223.13089 251.96868,-225.12924 251.96868,-227.49993 C 251.96868,-231.07931 249.04805,-233.96868 245.46868,-233.96868 z " opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path d="M 245.49993,-233.99993 C 241.91193,-233.99993 238.99993,-231.08792 238.99993,-227.49993 C 238.99993,-225.12353 240.34478,-223.13361 242.24993,-221.99993 L 248.74993,-221.99993 C 250.65508,-223.13361 251.99993,-225.12353 251.99993,-227.49993 C 251.99993,-231.08793 249.08793,-233.99992 245.49993,-233.99993 z " opacity="0.47777775" fill="url(#linearGradient13347)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(0.905660,0.000000,0.000000,0.905660,-24.16977,171.3113)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13350)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path d="M 258.95633,-230.33389 C 258.95480,-227.64933 255.68707,-226.61994 255.68707,-226.61994 C 255.68707,-226.61994 258.03581,-228.24589 258.02392,-230.32495 C 258.02392,-230.32495 258.95633,-230.33389 258.95633,-230.33389 z " fill="#555753" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000000px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.207547,0.000000,0.000000,1.207547,-98.22652,302.4154)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.207547,0.000000,0.000000,1.207547,-98.22652,302.4154)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13352)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+      </g>
+      <g transform="translate(17.177973,-2)">
+        <g transform="translate(-219.67784,275.47179)">
+          <path d="M 231.62587,-228.77086 C 230.58662,-229.36665 230.23015,-230.68774 230.83016,-231.71967 C 232.16166,-233.80243 233.93524,-233.26584 234.84231,-235.46138 C 236.10323,-234.12777 235.63545,-227.21367 231.62587,-228.77086 z" fill="#729fcf" fill-opacity="1" stroke="#204a87" stroke-width="1.07456863" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path d="M 234.31017,-229.9035 C 233.82059,-229.03976 232.73502,-228.74348 231.88703,-229.24216 C 231.03903,-229.74084 230.74816,-230.84657 231.23774,-231.71031 C 231.72733,-232.57405 233.84374,-232.16235 234.58388,-234 C 235.43187,-233.50133 234.79976,-230.76724 234.31017,-229.9035 z" opacity="0.46111109" fill="url(#radialGradient8290)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path d="M 233.02237,-229 C 228.40776,-230.07384 233.25985,-233.71939 234,-232.92154 C 230.4176,-231.55118 233.02237,-229 233.02237,-229 z" opacity="1" fill="url(#linearGradient8292)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+        </g>
+        <g transform="translate(-239.67784,265.47959)">
+          <path d="M 231.62587,-228.77086 C 230.58662,-229.36665 230.23015,-230.68774 230.83016,-231.71967 C 232.16166,-233.80243 233.93524,-233.26584 234.84231,-235.46138 C 236.10323,-234.12777 235.63545,-227.21367 231.62587,-228.77086 z" fill="#729fcf" fill-opacity="1" stroke="#204a87" stroke-width="1.07456863" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path d="M 234.31017,-229.9035 C 233.82059,-229.03976 232.73502,-228.74348 231.88703,-229.24216 C 231.03903,-229.74084 230.74816,-230.84657 231.23774,-231.71031 C 231.72733,-232.57405 233.84374,-232.16235 234.58388,-234 C 235.43187,-233.50133 234.79976,-230.76724 234.31017,-229.9035 z" opacity="0.46111109" fill="url(#radialGradient8294)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path d="M 233.02237,-229 C 228.40776,-230.07384 233.25985,-233.71939 234,-232.92154 C 230.4176,-231.55118 233.02237,-229 233.02237,-229 z" opacity="1" fill="url(#linearGradient8296)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+        </g>
+        <g transform="translate(-210.67944,272.47179)">
+          <path d="M 231.62587,-228.77086 C 230.58662,-229.36665 230.23015,-230.68774 230.83016,-231.71967 C 232.16166,-233.80243 233.93524,-233.26584 234.84231,-235.46138 C 236.10323,-234.12777 235.63545,-227.21367 231.62587,-228.77086 z" fill="#729fcf" fill-opacity="1" stroke="#204a87" stroke-width="1.07456863" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path d="M 234.31017,-229.9035 C 233.82059,-229.03976 232.73502,-228.74348 231.88703,-229.24216 C 231.03903,-229.74084 230.74816,-230.84657 231.23774,-231.71031 C 231.72733,-232.57405 233.84374,-232.16235 234.58388,-234 C 235.43187,-233.50133 234.79976,-230.76724 234.31017,-229.9035 z" opacity="0.46111109" fill="url(#radialGradient8298)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path d="M 233.02237,-229 C 228.40776,-230.07384 233.25985,-233.71939 234,-232.92154 C 230.4176,-231.55118 233.02237,-229 233.02237,-229 z" opacity="1" fill="url(#linearGradient8300)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+        </g>
+        <g transform="translate(-241.67794,275.47309)">
+          <path d="M 231.62587,-228.77086 C 230.58662,-229.36665 230.23015,-230.68774 230.83016,-231.71967 C 232.16166,-233.80243 233.93524,-233.26584 234.84231,-235.46138 C 236.10323,-234.12777 235.63545,-227.21367 231.62587,-228.77086 z" fill="#729fcf" fill-opacity="1" stroke="#204a87" stroke-width="1.07456863" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path d="M 234.31017,-229.9035 C 233.82059,-229.03976 232.73502,-228.74348 231.88703,-229.24216 C 231.03903,-229.74084 230.74816,-230.84657 231.23774,-231.71031 C 231.72733,-232.57405 233.84374,-232.16235 234.58388,-234 C 235.43187,-233.50133 234.79976,-230.76724 234.31017,-229.9035 z" opacity="0.46111109" fill="url(#radialGradient8302)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path d="M 233.02237,-229 C 228.40776,-230.07384 233.25985,-233.71939 234,-232.92154 C 230.4176,-231.55118 233.02237,-229 233.02237,-229 z" opacity="1" fill="url(#linearGradient8304)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+        </g>
+        <g transform="translate(-231.67944,270.47179)">
+          <path d="M 231.62587,-228.77086 C 230.58662,-229.36665 230.23015,-230.68774 230.83016,-231.71967 C 232.16166,-233.80243 233.93524,-233.26584 234.84231,-235.46138 C 236.10323,-234.12777 235.63545,-227.21367 231.62587,-228.77086 z" fill="#729fcf" fill-opacity="1" stroke="#204a87" stroke-width="1.07456863" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path d="M 234.31017,-229.9035 C 233.82059,-229.03976 232.73502,-228.74348 231.88703,-229.24216 C 231.03903,-229.74084 230.74816,-230.84657 231.23774,-231.71031 C 231.72733,-232.57405 233.84374,-232.16235 234.58388,-234 C 235.43187,-233.50133 234.79976,-230.76724 234.31017,-229.9035 z" opacity="0.46111109" fill="url(#radialGradient8306)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path d="M 233.02237,-229 C 228.40776,-230.07384 233.25985,-233.71939 234,-232.92154 C 230.4176,-231.55118 233.02237,-229 233.02237,-229 z" opacity="1" fill="url(#linearGradient8308)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+        </g>
+        <g transform="translate(-217.67944,265.47959)">
+          <path d="M 231.62587,-228.77086 C 230.58662,-229.36665 230.23015,-230.68774 230.83016,-231.71967 C 232.16166,-233.80243 233.93524,-233.26584 234.84231,-235.46138 C 236.10323,-234.12777 235.63545,-227.21367 231.62587,-228.77086 z" fill="#729fcf" fill-opacity="1" stroke="#204a87" stroke-width="1.07456863" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path d="M 234.31017,-229.9035 C 233.82059,-229.03976 232.73502,-228.74348 231.88703,-229.24216 C 231.03903,-229.74084 230.74816,-230.84657 231.23774,-231.71031 C 231.72733,-232.57405 233.84374,-232.16235 234.58388,-234 C 235.43187,-233.50133 234.79976,-230.76724 234.31017,-229.9035 z" opacity="0.46111109" fill="url(#radialGradient8310)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+          <path d="M 233.02237,-229 C 228.40776,-230.07384 233.25985,-233.71939 234,-232.92154 C 230.4176,-231.55118 233.02237,-229 233.02237,-229 z" opacity="1" fill="url(#linearGradient8312)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+        </g>
+      </g>
+      <g transform="translate(-162.99643,221.88968)">
+        <path d="M 31.819805,-316.77872 A 2.2097087,2.2097087 0 1 1 27.400387,-316.77872 A 2.2097087,2.2097087 0 1 1 31.819805,-316.77872 z" transform="matrix(0.68552,0,0,0.68552,151.7017,27.15827)" opacity="1" fill="#ffffff" fill-opacity="1" stroke="#729fcf" stroke-width="1.45874679" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 31.819805,-316.77872 A 2.2097087,2.2097087 0 1 1 27.400387,-316.77872 A 2.2097087,2.2097087 0 1 1 31.819805,-316.77872 z" transform="matrix(0.915572,0,0,0.915587,152.4091,103.5577)" opacity="1" fill="#ffffff" fill-opacity="1" stroke="#729fcf" stroke-width="1.09220433" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 31.819805,-316.77872 A 2.2097087,2.2097087 0 1 1 27.400387,-316.77872 A 2.2097087,2.2097087 0 1 1 31.819805,-316.77872 z" transform="matrix(0.672406,0,0,0.683742,153.0708,34.62149)" opacity="1" fill="#ffffff" fill-opacity="1" stroke="#729fcf" stroke-width="1.47481608" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 31.819805,-316.77872 A 2.2097087,2.2097087 0 1 1 27.400387,-316.77872 A 2.2097087,2.2097087 0 1 1 31.819805,-316.77872 z" transform="matrix(0.6823,0,0,0.680269,181.797,30.49471)" opacity="1" fill="#ffffff" fill-opacity="1" stroke="#729fcf" stroke-width="1.4678179" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 31.819805,-316.77872 A 2.2097087,2.2097087 0 1 1 27.400387,-316.77872 A 2.2097087,2.2097087 0 1 1 31.819805,-316.77872 z" transform="matrix(1.107132,0,0,1.117168,157.2177,164.9217)" opacity="1" fill="#ffffff" fill-opacity="1" stroke="#729fcf" stroke-width="0.89916825" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 31.819805,-316.77872 A 2.2097087,2.2097087 0 1 1 27.400387,-316.77872 A 2.2097087,2.2097087 0 1 1 31.819805,-316.77872 z" transform="matrix(1.127592,0,0,1.05183,161.6119,151.3731)" opacity="1" fill="#ffffff" fill-opacity="1" stroke="#729fcf" stroke-width="0.91822928" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 31.819805,-316.77872 A 2.2097087,2.2097087 0 1 1 27.400387,-316.77872 A 2.2097087,2.2097087 0 1 1 31.819805,-316.77872 z" transform="matrix(0.685519,0,0,0.680487,164.6869,34.56369)" opacity="1" fill="#ffffff" fill-opacity="1" stroke="#729fcf" stroke-width="1.46413279" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+      </g>
+    </g>
+  </g>
+</svg>
Index: trunk/demos/embedded/weatherinfo/icons/weather-snow.svg
===================================================================
--- trunk/demos/embedded/weatherinfo/icons/weather-snow.svg	(revision 561)
+++ trunk/demos/embedded/weatherinfo/icons/weather-snow.svg	(revision 561)
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48px" height="48px" id="svg1306">
+  <defs id="defs1308">
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient10630" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient10628" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient10626" gradientUnits="userSpaceOnUse" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient10624" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient10622" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient10620" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient10618" gradientUnits="userSpaceOnUse" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient10616" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+    <linearGradient id="linearGradient6549">
+      <stop offset="0" id="stop6551" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6553" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient10614" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient id="linearGradient6527">
+      <stop offset="0" id="stop6530" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6532" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient10612" gradientUnits="userSpaceOnUse" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient id="linearGradient6538">
+      <stop offset="0" id="stop6540" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6542" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient10610" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient id="linearGradient6513">
+      <stop offset="0" id="stop6515" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6517" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient10608" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient id="linearGradient6497">
+      <stop offset="0" id="stop6499" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6501" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient10606" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient id="linearGradient6470">
+      <stop offset="0" id="stop6472" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6474" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient10604" gradientUnits="userSpaceOnUse" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient id="linearGradient7834">
+      <stop offset="0" id="stop7836" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop7838" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient7834" id="linearGradient10602" gradientUnits="userSpaceOnUse" x1="-156.29044" y1="-100.53421" x2="-153.09810" y2="-96.544556"/>
+    <linearGradient id="linearGradient8397">
+      <stop offset="0" id="stop8400" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8402" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8397" id="linearGradient10600" gradientUnits="userSpaceOnUse" x1="238.00478" y1="-388.47476" x2="245.65462" y2="-382.64539"/>
+    <linearGradient id="linearGradient8315">
+      <stop offset="0" id="stop8317" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8319" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8315" id="linearGradient10598" gradientUnits="userSpaceOnUse" x1="230.87598" y1="-390.43951" x2="235.25652" y2="-386.95901"/>
+    <linearGradient id="linearGradient8381">
+      <stop offset="0" id="stop8383" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8385" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8381" id="linearGradient10596" gradientUnits="userSpaceOnUse" x1="246.74042" y1="-391.31381" x2="252.69785" y2="-385.35165"/>
+    <linearGradient id="linearGradient8331">
+      <stop offset="0" id="stop8333" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8335" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8331" id="linearGradient10594" gradientUnits="userSpaceOnUse" x1="240.07379" y1="-393.40720" x2="245.82706" y2="-388.55029"/>
+    <linearGradient id="linearGradient8302">
+      <stop offset="0" id="stop8304" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8306" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8302" id="linearGradient10592" gradientUnits="userSpaceOnUse" gradientTransform="translate(122.0230,102.0000)" x1="228.50261" y1="-392.30591" x2="278.91510" y2="-375.37952"/>
+  </defs>
+  
+  <metadata id="metadata1311">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+        <dc:title>weather-snow</dc:title>
+        <dc:date>January 2006</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Ryan Collier (pseudo)</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>http://www.tango-project.org</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:source>http://www.pseudocode.org</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>weather</rdf:li>
+            <rdf:li>applet</rdf:li>
+            <rdf:li>notification</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/>
+      </cc:Work>
+      <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/">
+        <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/>
+        <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/>
+        <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/>
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g id="layer1">
+    <g transform="translate(-340.0455,298.0001)">
+      <path d="M 364.52300,-296.00000 C 361.75058,-296.00000 359.41477,-294.42629 358.11675,-292.18750 C 357.17239,-292.66254 356.15156,-293.00000 355.02300,-293.00000 C 351.15900,-293.00000 348.02300,-289.86400 348.02300,-286.00000 C 348.02300,-282.13600 351.15900,-279.00000 355.02300,-279.00000 C 357.44267,-279.00000 359.45309,-280.31932 360.71050,-282.18750 C 361.84470,-281.49788 363.09948,-281.00000 364.52300,-281.00000 C 365.43612,-281.00000 366.27595,-281.23202 367.08550,-281.53125 C 367.59544,-280.66352 368.26462,-279.95153 369.08550,-279.37500 C 369.07826,-279.24462 369.02300,-279.13218 369.02300,-279.00000 C 369.02300,-275.13600 372.15899,-272.00000 376.02300,-272.00000 C 379.88700,-272.00000 383.02300,-275.13600 383.02300,-279.00000 C 383.02300,-281.36969 381.76402,-283.35834 379.96050,-284.62500 C 379.96774,-284.75538 380.02300,-284.86782 380.02300,-285.00000 C 380.02300,-288.86400 376.88701,-292.00000 373.02300,-292.00000 C 372.40030,-292.00000 371.84781,-291.77781 371.27300,-291.62500 C 370.07847,-294.18384 367.53166,-296.00000 364.52300,-296.00000 z " opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 364.52300,-295.00000 C 361.74252,-295.00000 359.38849,-293.23815 358.46050,-290.78125 C 357.47508,-291.49069 356.32907,-292.00000 355.02300,-292.00000 C 351.71100,-292.00000 349.02300,-289.31200 349.02300,-286.00000 C 349.02300,-282.68800 351.71100,-280.00000 355.02300,-280.00000 C 357.45075,-280.00000 359.51624,-281.45558 360.46050,-283.53125 C 361.58126,-282.61369 362.96264,-282.00000 364.52300,-282.00000 C 365.59754,-282.00000 366.56728,-282.31896 367.46050,-282.78125 C 367.85890,-281.78149 368.56164,-280.99493 369.39800,-280.34375 C 369.21799,-279.74813 369.02300,-279.15410 369.02300,-278.50000 C 369.02300,-274.91200 371.93500,-272.00000 375.52300,-272.00000 C 379.11100,-272.00000 382.02300,-274.91200 382.02300,-278.50000 C 382.02300,-280.86079 380.68867,-282.83019 378.80425,-283.96875 C 378.86684,-284.31598 379.02300,-284.63483 379.02300,-285.00000 C 379.02300,-288.31200 376.33500,-291.00000 373.02300,-291.00000 C 372.17002,-291.00000 371.35170,-290.82132 370.61675,-290.50000 C 369.76298,-293.09388 367.40151,-294.99999 364.52300,-295.00000 z " opacity="1.0000000" fill="url(#linearGradient10592)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(0.964447,0.000000,0.000000,0.964447,142.3115,91.52621)" d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <g transform="translate(122.0230,102.0000)">
+        <path d="M 250.18322 -389.30136 A 6.2313786 6.2313786 0 1 1  237.72046,-389.30136 A 6.2313786 6.2313786 0 1 1  250.18322 -389.30136 z" transform="matrix(0.882630,0.000000,0.000000,0.882630,27.18078,-46.89094)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 250.18322 -389.30136 A 6.2313786 6.2313786 0 1 1  237.72046,-389.30136 A 6.2313786 6.2313786 0 1 1  250.18322 -389.30136 z" transform="matrix(0.882630,0.000000,0.000000,0.882630,27.18078,-46.89094)" opacity="1.0000000" fill="url(#linearGradient10594)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g transform="translate(122.0230,102.0000)">
+        <path d="M 257.25429 -385.78790 A 6.0325046 6.0325046 0 1 1  245.18928,-385.78790 A 6.0325046 6.0325046 0 1 1  257.25429 -385.78790 z" transform="matrix(0.911728,0.000000,0.000000,0.911728,21.45407,-34.76637)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 257.25429 -385.78790 A 6.0325046 6.0325046 0 1 1  245.18928,-385.78790 A 6.0325046 6.0325046 0 1 1  257.25429 -385.78790 z" transform="matrix(0.911728,0.000000,0.000000,0.911728,21.45407,-34.76637)" opacity="1.0000000" fill="url(#linearGradient10596)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g transform="translate(122.0230,102.0000)">
+        <path d="M 237.80885 -387.88715 A 4.3752232 4.3752232 0 1 1  229.05840,-387.88715 A 4.3752232 4.3752232 0 1 1  237.80885 -387.88715 z" transform="matrix(1.142799,0.000000,0.000000,1.142799,-33.76771,55.27704)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 237.80885 -387.88715 A 4.3752232 4.3752232 0 1 1  229.05840,-387.88715 A 4.3752232 4.3752232 0 1 1  237.80885 -387.88715 z" transform="matrix(1.142799,0.000000,0.000000,1.142799,-33.76771,55.27704)" opacity="1.0000000" fill="url(#linearGradient10598)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g transform="translate(122.0230,102.0000)">
+        <path d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" transform="matrix(1.038636,0.000000,0.000000,1.038636,-9.150940,14.48994)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" transform="matrix(1.038636,0.000000,0.000000,1.038636,-9.150933,14.48993)" opacity="1.0000000" fill="url(#linearGradient10600)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g transform="matrix(0.935028,0.000000,0.000000,0.935028,499.8484,-187.6162)" stroke="none">
+        <path d="M -151.93750 -96.937500 A 3.1250000 3.1250000 0 1 1  -158.18750,-96.937500 A 3.1250000 3.1250000 0 1 1  -151.93750 -96.937500 z" transform="matrix(1.737733,0.000000,0.000000,1.737733,110.8322,70.07649)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="0.33115697" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M -151.93750 -96.937500 A 3.1250000 3.1250000 0 1 1  -158.18750,-96.937500 A 3.1250000 3.1250000 0 1 1  -151.93750 -96.937500 z" transform="matrix(1.737733,0.000000,0.000000,1.737733,110.8948,70.01402)" opacity="1.0000000" fill="url(#linearGradient10602)" fill-opacity="1.0000000" stroke="none" stroke-width="0.45224530" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g transform="translate(91.02300,162.0000)">
+        <path d="M 280.50000,-445.50000 C 278.22917,-445.50000 276.39009,-443.94972 275.78125,-441.87500 C 275.08802,-442.23883 274.33674,-442.50000 273.50000,-442.50000 C 270.74000,-442.50000 268.49999,-440.26001 268.50000,-437.50000 C 268.50000,-436.92107 268.66252,-436.39230 268.84375,-435.87500 C 267.47028,-435.10426 266.50000,-433.68600 266.50000,-432.00000 C 266.50000,-429.51600 268.51600,-427.49999 271.00000,-427.50000 C 271.17713,-427.50000 289.82287,-427.50000 290.00000,-427.50000 C 292.48399,-427.50000 294.50000,-429.51600 294.50000,-432.00000 C 294.50000,-433.68600 293.52972,-435.10426 292.15625,-435.87500 C 292.33749,-436.39229 292.50000,-436.92108 292.50000,-437.50000 C 292.50000,-440.26000 290.26000,-442.49999 287.50000,-442.50000 C 286.66326,-442.50000 285.91198,-442.23883 285.21875,-441.87500 C 284.60991,-443.94972 282.77083,-445.50000 280.50000,-445.50000 z " fill="#c4c5c2" fill-opacity="1.0000000" stroke="#888a85" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 280.50000,-445.00000 C 278.31028,-445.00000 276.77640,-443.66423 276.10445,-441.15648 C 275.43599,-441.50010 274.55686,-441.98983 273.75000,-441.98983 C 271.03349,-441.98983 268.99486,-440.05101 268.99487,-437.44429 C 268.99487,-436.89752 269.26208,-436.11085 269.43683,-435.62228 C 268.11240,-434.89433 267.00000,-433.73178 267.00000,-432.24973 C 267.00000,-429.90368 268.54617,-427.99964 271.33928,-427.99964 C 271.51009,-427.99964 289.48992,-427.99964 289.66072,-427.99964 C 292.43173,-427.99964 294.00000,-429.90368 294.00000,-432.24973 C 294.00000,-433.84210 292.88760,-434.91642 291.56317,-435.64437 C 291.73793,-436.13293 292.02724,-436.89753 292.02724,-437.44429 C 292.02724,-440.05100 289.91143,-442.01192 287.25001,-442.01193 C 286.44314,-442.01193 285.60820,-441.52219 284.93974,-441.17857 C 284.29089,-443.60011 282.68973,-445.00000 280.50000,-445.00000 z " opacity="1.0000000" fill="url(#linearGradient10604)" fill-opacity="1.0000000" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <g>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-24.19818,21.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-24.19818,21.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient10606)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <rect width="20.000000" height="9.0000000" x="271.00000" y="-438.00000" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(0.905660,0.000000,0.000000,0.905660,9.830195,-35.68869)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <g>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-17.19811,24.86321)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-17.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient10608)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <g>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient10610)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <g transform="translate(-1.000000,0.000000)">
+          <path d="M 280.46875,-440.96875 C 276.88937,-440.96875 274.00000,-438.04812 274.00000,-434.46875 C 274.00000,-432.09807 275.34943,-430.13096 277.25000,-429.00000 L 283.71875,-429.00000 C 285.61932,-430.13096 286.96875,-432.12931 286.96875,-434.50000 C 286.96875,-438.07938 284.04812,-440.96875 280.46875,-440.96875 z " opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path d="M 280.50000,-441.00000 C 276.91200,-441.00000 274.00000,-438.08799 274.00000,-434.50000 C 274.00000,-432.12360 275.34485,-430.13368 277.25000,-429.00000 L 283.75000,-429.00000 C 285.65515,-430.13368 287.00000,-432.12360 287.00000,-434.50000 C 287.00000,-438.08800 284.08800,-440.99999 280.50000,-441.00000 z " opacity="1.0000000" fill="url(#linearGradient10612)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(0.905660,0.000000,0.000000,0.905660,9.830296,-35.68884)" opacity="1.0000000" fill="url(#linearGradient10614)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 292.95640,-437.33396 C 292.95487,-434.64940 289.68714,-433.62001 289.68714,-433.62001 C 289.68714,-433.62001 292.03588,-435.24596 292.02399,-437.32502 C 292.02399,-437.32502 292.95640,-437.33396 292.95640,-437.33396 z " fill="#888a85" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000000px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+        <g transform="matrix(1.142857,0.000000,0.000000,1.142857,-28.57139,67.00008)">
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient10616)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+      </g>
+      <g transform="translate(76.02041,158.0000)">
+        <path d="M 280.50000,-445.50000 C 278.22917,-445.50000 276.39009,-443.94972 275.78125,-441.87500 C 275.08802,-442.23883 274.33674,-442.50000 273.50000,-442.50000 C 270.74000,-442.50000 268.49999,-440.26001 268.50000,-437.50000 C 268.50000,-436.92107 268.66252,-436.39230 268.84375,-435.87500 C 267.47028,-435.10426 266.50000,-433.68600 266.50000,-432.00000 C 266.50000,-429.51600 268.51600,-427.49999 271.00000,-427.50000 C 271.17713,-427.50000 289.82287,-427.50000 290.00000,-427.50000 C 292.48399,-427.50000 294.50000,-429.51600 294.50000,-432.00000 C 294.50000,-433.68600 293.52972,-435.10426 292.15625,-435.87500 C 292.33749,-436.39229 292.50000,-436.92108 292.50000,-437.50000 C 292.50000,-440.26000 290.26000,-442.49999 287.50000,-442.50000 C 286.66326,-442.50000 285.91198,-442.23883 285.21875,-441.87500 C 284.60991,-443.94972 282.77083,-445.50000 280.50000,-445.50000 z " fill="#c4c5c2" fill-opacity="1.0000000" stroke="#888a85" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 280.50000,-445.00000 C 278.31028,-445.00000 276.77640,-443.66423 276.10445,-441.15648 C 275.43599,-441.50010 274.55686,-441.98983 273.75000,-441.98983 C 271.03349,-441.98983 268.99486,-440.05101 268.99487,-437.44429 C 268.99487,-436.89752 269.26208,-436.11085 269.43683,-435.62228 C 268.11240,-434.89433 267.00000,-433.73178 267.00000,-432.24973 C 267.00000,-429.90368 268.54617,-427.99964 271.33928,-427.99964 C 271.51009,-427.99964 289.48992,-427.99964 289.66072,-427.99964 C 292.43173,-427.99964 294.00000,-429.90368 294.00000,-432.24973 C 294.00000,-433.84210 292.88760,-434.91642 291.56317,-435.64437 C 291.73793,-436.13293 292.02724,-436.89753 292.02724,-437.44429 C 292.02724,-440.05100 289.91143,-442.01192 287.25001,-442.01193 C 286.44314,-442.01193 285.60820,-441.52219 284.93974,-441.17857 C 284.29089,-443.60011 282.68973,-445.00000 280.50000,-445.00000 z " opacity="1.0000000" fill="url(#linearGradient10618)" fill-opacity="1.0000000" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <g>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-24.19818,21.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-24.19818,21.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient10620)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <rect width="20.000000" height="9.0000000" x="271.00000" y="-438.00000" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(0.905660,0.000000,0.000000,0.905660,9.830195,-35.68869)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <g>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-17.19811,24.86321)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-17.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient10622)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <g>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient10624)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <g transform="translate(-1.000000,0.000000)">
+          <path d="M 280.46875,-440.96875 C 276.88937,-440.96875 274.00000,-438.04812 274.00000,-434.46875 C 274.00000,-432.09807 275.34943,-430.13096 277.25000,-429.00000 L 283.71875,-429.00000 C 285.61932,-430.13096 286.96875,-432.12931 286.96875,-434.50000 C 286.96875,-438.07938 284.04812,-440.96875 280.46875,-440.96875 z " opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path d="M 280.50000,-441.00000 C 276.91200,-441.00000 274.00000,-438.08799 274.00000,-434.50000 C 274.00000,-432.12360 275.34485,-430.13368 277.25000,-429.00000 L 283.75000,-429.00000 C 285.65515,-430.13368 287.00000,-432.12360 287.00000,-434.50000 C 287.00000,-438.08800 284.08800,-440.99999 280.50000,-441.00000 z " opacity="1.0000000" fill="url(#linearGradient10626)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(0.905660,0.000000,0.000000,0.905660,9.830296,-35.68884)" opacity="1.0000000" fill="url(#linearGradient10628)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 292.95640,-437.33396 C 292.95487,-434.64940 289.68714,-433.62001 289.68714,-433.62001 C 289.68714,-433.62001 292.03588,-435.24596 292.02399,-437.32502 C 292.02399,-437.32502 292.95640,-437.33396 292.95640,-437.33396 z " fill="#888a85" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000000px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+        <g transform="matrix(1.142857,0.000000,0.000000,1.142857,-28.57139,67.00008)">
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient10630)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+      </g>
+    </g>
+    <g transform="translate(-163.0077,222.0147)">
+      <path transform="matrix(0.685520,0.000000,0.000000,0.685520,151.7017,27.15827)" d="M 31.819805 -316.77872 A 2.2097087 2.2097087 0 1 1  27.400387,-316.77872 A 2.2097087 2.2097087 0 1 1  31.819805 -316.77872 z" opacity="1.0000000" fill="#ffffff" fill-opacity="1.0000000" stroke="#729fcf" stroke-width="1.4587468" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(0.915572,0.000000,0.000000,0.915587,152.4091,103.5577)" d="M 31.819805 -316.77872 A 2.2097087 2.2097087 0 1 1  27.400387,-316.77872 A 2.2097087 2.2097087 0 1 1  31.819805 -316.77872 z" opacity="1.0000000" fill="#ffffff" fill-opacity="1.0000000" stroke="#729fcf" stroke-width="1.0922043" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(0.672406,0.000000,0.000000,0.683742,153.0708,34.62149)" d="M 31.819805 -316.77872 A 2.2097087 2.2097087 0 1 1  27.400387,-316.77872 A 2.2097087 2.2097087 0 1 1  31.819805 -316.77872 z" opacity="1.0000000" fill="#ffffff" fill-opacity="1.0000000" stroke="#729fcf" stroke-width="1.4748161" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(0.682300,0.000000,0.000000,0.680269,181.7970,30.49471)" d="M 31.819805 -316.77872 A 2.2097087 2.2097087 0 1 1  27.400387,-316.77872 A 2.2097087 2.2097087 0 1 1  31.819805 -316.77872 z" opacity="1.0000000" fill="#ffffff" fill-opacity="1.0000000" stroke="#729fcf" stroke-width="1.4678179" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.107132,0.000000,0.000000,1.117168,157.2177,164.9217)" d="M 31.819805 -316.77872 A 2.2097087 2.2097087 0 1 1  27.400387,-316.77872 A 2.2097087 2.2097087 0 1 1  31.819805 -316.77872 z" opacity="1.0000000" fill="#ffffff" fill-opacity="1.0000000" stroke="#729fcf" stroke-width="0.89916825" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.127592,0.000000,0.000000,1.051830,161.6119,151.3731)" d="M 31.819805 -316.77872 A 2.2097087 2.2097087 0 1 1  27.400387,-316.77872 A 2.2097087 2.2097087 0 1 1  31.819805 -316.77872 z" opacity="1.0000000" fill="#ffffff" fill-opacity="1.0000000" stroke="#729fcf" stroke-width="0.91822928" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(0.685519,0.000000,0.000000,0.680487,164.6869,34.56369)" d="M 31.819805 -316.77872 A 2.2097087 2.2097087 0 1 1  27.400387,-316.77872 A 2.2097087 2.2097087 0 1 1  31.819805 -316.77872 z" opacity="1.0000000" fill="#ffffff" fill-opacity="1.0000000" stroke="#729fcf" stroke-width="1.4641328" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+    </g>
+  </g>
+</svg>
Index: trunk/demos/embedded/weatherinfo/icons/weather-storm.svg
===================================================================
--- trunk/demos/embedded/weatherinfo/icons/weather-storm.svg	(revision 561)
+++ trunk/demos/embedded/weatherinfo/icons/weather-storm.svg	(revision 561)
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48px" height="48px" id="svg1306">
+  <defs id="defs1308">
+    <linearGradient id="linearGradient8397">
+      <stop offset="0" id="stop8400" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8402" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8397" id="linearGradient13503" gradientUnits="userSpaceOnUse" x1="238.00478" y1="-388.47476" x2="245.65462" y2="-382.64539"/>
+    <linearGradient id="linearGradient8315">
+      <stop offset="0" id="stop8317" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8319" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8315" id="linearGradient13501" gradientUnits="userSpaceOnUse" x1="230.87598" y1="-390.43951" x2="235.25652" y2="-386.95901"/>
+    <linearGradient id="linearGradient8381">
+      <stop offset="0" id="stop8383" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8385" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8381" id="linearGradient13499" gradientUnits="userSpaceOnUse" x1="246.74042" y1="-391.31381" x2="252.69785" y2="-385.35165"/>
+    <linearGradient id="linearGradient8331">
+      <stop offset="0" id="stop8333" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8335" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8331" id="linearGradient13497" gradientUnits="userSpaceOnUse" x1="240.07379" y1="-393.40720" x2="245.82706" y2="-388.55029"/>
+    <linearGradient id="linearGradient8302">
+      <stop offset="0" id="stop8304" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8306" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8302" id="linearGradient13495" gradientUnits="userSpaceOnUse" gradientTransform="translate(69.00000,155.0000)" x1="228.50261" y1="-392.30591" x2="266.36395" y2="-379.26862"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient13143" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient13141" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient13139" gradientUnits="userSpaceOnUse" gradientTransform="translate(-35.00007,207.0001)" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient13137" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient13135" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient13133" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient13131" gradientUnits="userSpaceOnUse" gradientTransform="translate(-34.00007,207.0001)" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient xlink:href="#linearGradient8874" id="linearGradient11195" gradientUnits="userSpaceOnUse" gradientTransform="translate(14.15871,7.082841)" x1="-190.47688" y1="-332.51181" x2="-196.19046" y2="-328.53433"/>
+    <linearGradient xlink:href="#linearGradient8904" id="linearGradient11193" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.80516,2.840199)" x1="-191.28896" y1="-328.07861" x2="-192.41396" y2="-315.32861"/>
+    <linearGradient id="linearGradient8874">
+      <stop offset="0" id="stop8876" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8878" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8874" id="linearGradient11191" gradientUnits="userSpaceOnUse" gradientTransform="translate(14.15871,7.082841)" x1="-190.47688" y1="-332.51181" x2="-196.19046" y2="-328.53433"/>
+    <linearGradient id="linearGradient8904">
+      <stop offset="0" id="stop8906" stop-color="#fcaf3e" stop-opacity="1"/>
+      <stop offset="1" id="stop8908" stop-color="#fcaf3e" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8904" id="linearGradient11189" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.80516,2.840199)" x1="-191.28896" y1="-328.07861" x2="-192.41396" y2="-315.32861"/>
+    <radialGradient xlink:href="#linearGradient5123" id="radialGradient13211" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.930946,6.185702e-16,-2.842711e-16,0.448244,245.3644,184.9256)" cx="-229.75000" cy="-343.95554" fx="-229.75000" fy="-343.95554" r="14.501380"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient13157" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+    <linearGradient id="linearGradient6549">
+      <stop offset="0" id="stop6551" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6553" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient13155" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient id="linearGradient6527">
+      <stop offset="0" id="stop6530" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6532" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient13153" gradientUnits="userSpaceOnUse" gradientTransform="translate(-35.00007,207.0001)" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient id="linearGradient6538">
+      <stop offset="0" id="stop6540" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6542" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient13151" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient id="linearGradient6513">
+      <stop offset="0" id="stop6515" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6517" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient13149" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient id="linearGradient6497">
+      <stop offset="0" id="stop6499" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6501" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient13147" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient id="linearGradient6470">
+      <stop offset="0" id="stop6472" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6474" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient13145" gradientUnits="userSpaceOnUse" gradientTransform="translate(-34.00007,207.0001)" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient id="linearGradient5123">
+      <stop offset="0" id="stop5125" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop5127" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <radialGradient xlink:href="#linearGradient5123" id="radialGradient13068" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.930946,6.185702e-16,-2.842711e-16,0.448244,229.9269,180.9261)" cx="-229.75000" cy="-343.95554" fx="-229.75000" fy="-343.95554" r="14.501380"/>
+  </defs>
+  
+  <metadata id="metadata1311">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+        <dc:title>weather-storm</dc:title>
+        <dc:date>January 2006</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Ryan Collier</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>http://www.tango-project.org</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:source>http://www.pseudocode.org</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>weather</rdf:li>
+            <rdf:li>applet</rdf:li>
+            <rdf:li>notify</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/>
+      </cc:Work>
+      <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/">
+        <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/>
+        <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/>
+        <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/>
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g id="layer1">
+    <g transform="translate(-287.0204,244.9995)">
+      <path d="M 311.50000,-242.99998 C 308.72758,-242.99998 306.39177,-241.42627 305.09375,-239.18748 C 304.14939,-239.66252 303.12856,-239.99998 302.00000,-239.99998 C 298.13600,-239.99998 295.00000,-236.86398 295.00000,-232.99998 C 295.00000,-229.13598 298.13600,-225.99998 302.00000,-225.99998 C 304.41967,-225.99998 306.43009,-227.31930 307.68750,-229.18748 C 308.82170,-228.49786 310.07648,-227.99998 311.50000,-227.99998 C 312.41312,-227.99998 313.25295,-228.23200 314.06250,-228.53123 C 314.57244,-227.66350 315.24162,-226.95151 316.06250,-226.37498 C 316.05526,-226.24460 316.00000,-226.13216 316.00000,-225.99998 C 316.00000,-222.13598 319.13599,-218.99998 323.00000,-218.99998 C 326.86400,-218.99998 330.00000,-222.13598 330.00000,-225.99998 C 330.00000,-228.36967 328.74102,-230.35832 326.93750,-231.62498 C 326.94474,-231.75536 327.00000,-231.86780 327.00000,-231.99998 C 327.00000,-235.86398 323.86401,-238.99998 320.00000,-238.99998 C 319.37730,-238.99998 318.82481,-238.77779 318.25000,-238.62498 C 317.05547,-241.18382 314.50866,-242.99998 311.50000,-242.99998 z " opacity="1.0000000" fill="#555753" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 311.50000,-241.99998 C 308.71952,-241.99998 306.36549,-240.23813 305.43750,-237.78123 C 304.45208,-238.49067 303.30607,-238.99998 302.00000,-238.99998 C 298.68800,-238.99998 296.00000,-236.31198 296.00000,-232.99998 C 296.00000,-229.68798 298.68800,-226.99998 302.00000,-226.99998 C 304.42775,-226.99998 306.49324,-228.45556 307.43750,-230.53123 C 308.55826,-229.61367 309.93964,-228.99998 311.50000,-228.99998 C 312.57454,-228.99998 313.54428,-229.31894 314.43750,-229.78123 C 314.83590,-228.78147 315.53864,-227.99491 316.37500,-227.34373 C 316.19499,-226.74811 316.00000,-226.15408 316.00000,-225.49998 C 316.00000,-221.91198 318.91200,-218.99998 322.50000,-218.99998 C 326.08800,-218.99998 329.00000,-221.91198 329.00000,-225.49998 C 329.00000,-227.86077 327.66567,-229.83017 325.78125,-230.96873 C 325.84384,-231.31596 326.00000,-231.63481 326.00000,-231.99998 C 326.00000,-235.31198 323.31200,-237.99998 320.00000,-237.99998 C 319.14702,-237.99998 318.32870,-237.82130 317.59375,-237.49998 C 316.73998,-240.09386 314.37851,-241.99997 311.50000,-241.99998 z " opacity="1.0000000" fill="url(#linearGradient13495)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(0.964447,0.000000,0.000000,0.964447,89.28852,144.5262)" d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <g>
+        <path d="M 250.18322 -389.30136 A 6.2313786 6.2313786 0 1 1  237.72046,-389.30136 A 6.2313786 6.2313786 0 1 1  250.18322 -389.30136 z" transform="matrix(0.882630,0.000000,0.000000,0.882630,96.18078,108.1091)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 250.18322 -389.30136 A 6.2313786 6.2313786 0 1 1  237.72046,-389.30136 A 6.2313786 6.2313786 0 1 1  250.18322 -389.30136 z" transform="matrix(0.882630,0.000000,0.000000,0.882630,96.18078,108.1091)" opacity="0.49444440" fill="url(#linearGradient13497)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g>
+        <path d="M 257.25429 -385.78790 A 6.0325046 6.0325046 0 1 1  245.18928,-385.78790 A 6.0325046 6.0325046 0 1 1  257.25429 -385.78790 z" transform="matrix(0.911728,0.000000,0.000000,0.911728,90.45407,120.2336)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 257.25429 -385.78790 A 6.0325046 6.0325046 0 1 1  245.18928,-385.78790 A 6.0325046 6.0325046 0 1 1  257.25429 -385.78790 z" transform="matrix(0.911728,0.000000,0.000000,0.911728,90.45407,120.2336)" opacity="0.49444440" fill="url(#linearGradient13499)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g>
+        <path d="M 237.80885 -387.88715 A 4.3752232 4.3752232 0 1 1  229.05840,-387.88715 A 4.3752232 4.3752232 0 1 1  237.80885 -387.88715 z" transform="matrix(1.142799,0.000000,0.000000,1.142799,35.23229,210.2770)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 237.80885 -387.88715 A 4.3752232 4.3752232 0 1 1  229.05840,-387.88715 A 4.3752232 4.3752232 0 1 1  237.80885 -387.88715 z" transform="matrix(1.142799,0.000000,0.000000,1.142799,35.23229,210.2770)" opacity="0.49444440" fill="url(#linearGradient13501)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g>
+        <path d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" transform="matrix(1.038636,0.000000,0.000000,1.038636,59.84906,169.4899)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" transform="matrix(1.038636,0.000000,0.000000,1.038636,59.84907,169.4899)" opacity="0.49444440" fill="url(#linearGradient13503)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+    </g>
+    <g transform="translate(208.8564,357.8851)">
+      <path d="M -173.24571,-327.59122 L -176.37021,-323.31202 L -172.59078,-323.31202 C -172.59078,-323.31202 -175.29396,-318.78622 -180.16632,-310.38562 C -178.07014,-318.33294 -177.21353,-321.35581 -177.21353,-321.35581 L -182.37682,-321.35581 L -178.33401,-327.59122 L -173.24571,-327.59122 z " fill="#edd400" fill-opacity="1.0000000" fill-rule="evenodd" stroke="url(#linearGradient11189)" stroke-width="1.0000006px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+      <path d="M -173.75946,-327.84461 L -177.50268,-322.68152 L -173.54648,-322.85830 C -173.54648,-322.85830 -173.68639,-322.39837 -178.55875,-313.99777 C -176.46257,-321.94509 -176.48985,-321.96275 -176.48985,-321.96275 L -181.38797,-321.87436 L -177.69871,-327.57944 L -173.75946,-327.84461 z " opacity="1.0000000" fill="url(#linearGradient11191)" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000006px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+    </g>
+    <g transform="translate(-215.0060,252.9994)">
+      <path d="M 246.49993,-238.49993 C 244.22910,-238.49993 242.39002,-236.94965 241.78118,-234.87493 C 241.08795,-235.23876 240.33667,-235.49993 239.49993,-235.49993 C 236.73993,-235.49993 234.49992,-233.25994 234.49993,-230.49993 C 234.49993,-229.92100 234.66245,-229.39223 234.84368,-228.87493 C 233.47021,-228.10419 232.49993,-226.68593 232.49993,-224.99993 C 232.49993,-222.51593 234.51593,-220.49992 236.99993,-220.49993 C 237.17706,-220.49993 255.82280,-220.49993 255.99993,-220.49993 C 258.48392,-220.49993 260.49993,-222.51593 260.49993,-224.99993 C 260.49993,-226.68593 259.52965,-228.10419 258.15618,-228.87493 C 258.33742,-229.39222 258.49993,-229.92101 258.49993,-230.49993 C 258.49993,-233.25993 256.25993,-235.49992 253.49993,-235.49993 C 252.66319,-235.49993 251.91191,-235.23876 251.21868,-234.87493 C 250.60984,-236.94965 248.77076,-238.49993 246.49993,-238.49993 z " fill="#888a85" fill-opacity="1.0000000" stroke="#555753" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 246.49993,-237.99993 C 244.31021,-237.99993 242.77633,-236.66416 242.10438,-234.15641 C 241.43592,-234.50003 240.55679,-234.98976 239.74993,-234.98976 C 237.03342,-234.98976 234.99479,-233.05094 234.99480,-230.44422 C 234.99480,-229.89745 235.26201,-229.11078 235.43676,-228.62221 C 234.11233,-227.89426 232.99993,-226.73171 232.99993,-225.24966 C 232.99993,-222.90361 234.54610,-220.99957 237.33921,-220.99957 C 237.51002,-220.99957 255.48985,-220.99957 255.66065,-220.99957 C 258.43166,-220.99957 259.99993,-222.90361 259.99993,-225.24966 C 259.99993,-226.84203 258.88753,-227.91635 257.56310,-228.64430 C 257.73786,-229.13286 258.02717,-229.89746 258.02717,-230.44422 C 258.02717,-233.05093 255.91136,-235.01185 253.24994,-235.01186 C 252.44307,-235.01186 251.60813,-234.52212 250.93967,-234.17850 C 250.29082,-236.60004 248.68966,-237.99993 246.49993,-237.99993 z " opacity="1.0000000" fill="url(#linearGradient13131)" fill-opacity="1.0000000" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-58.19825,228.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-58.19825,228.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13133)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <rect y="-230.99992" x="236.99994" height="9.0000000" width="20.000000" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(0.905660,0.000000,0.000000,0.905660,-24.16987,171.3114)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-51.19818,231.8633)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-51.19825,231.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13135)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-65.19825,231.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-65.19825,231.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13137)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 245.46868,-233.96868 C 241.88930,-233.96868 238.99993,-231.04805 238.99993,-227.46868 C 238.99993,-225.09800 240.34936,-223.13089 242.24993,-221.99993 L 248.71868,-221.99993 C 250.61925,-223.13089 251.96868,-225.12924 251.96868,-227.49993 C 251.96868,-231.07931 249.04805,-233.96868 245.46868,-233.96868 z " opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 245.49993,-233.99993 C 241.91193,-233.99993 238.99993,-231.08792 238.99993,-227.49993 C 238.99993,-225.12353 240.34478,-223.13361 242.24993,-221.99993 L 248.74993,-221.99993 C 250.65508,-223.13361 251.99993,-225.12353 251.99993,-227.49993 C 251.99993,-231.08793 249.08793,-233.99992 245.49993,-233.99993 z " opacity="0.47777775" fill="url(#linearGradient13139)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(0.905660,0.000000,0.000000,0.905660,-24.16977,171.3113)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13141)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 258.95633,-230.33389 C 258.95480,-227.64933 255.68707,-226.61994 255.68707,-226.61994 C 255.68707,-226.61994 258.03581,-228.24589 258.02392,-230.32495 C 258.02392,-230.32495 258.95633,-230.33389 258.95633,-230.33389 z " fill="#555753" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000000px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.207547,0.000000,0.000000,1.207547,-98.22652,302.4154)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.207547,0.000000,0.000000,1.207547,-98.22652,302.4154)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13143)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+    </g>
+    <g transform="translate(192.8564,354.8851)">
+      <path d="M -173.24571,-327.59122 L -176.37021,-323.31202 L -172.59078,-323.31202 C -172.59078,-323.31202 -175.29396,-318.78622 -180.16632,-310.38562 C -178.07014,-318.33294 -177.21353,-321.35581 -177.21353,-321.35581 L -182.37682,-321.35581 L -178.33401,-327.59122 L -173.24571,-327.59122 z " fill="#edd400" fill-opacity="1.0000000" fill-rule="evenodd" stroke="url(#linearGradient11193)" stroke-width="1.0000006px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+      <path d="M -173.75946,-327.84461 L -177.50268,-322.68152 L -173.54648,-322.85830 C -173.54648,-322.85830 -173.68639,-322.39837 -178.55875,-313.99777 C -176.46257,-321.94509 -176.48985,-321.96275 -176.48985,-321.96275 L -181.38797,-321.87436 L -177.69871,-327.57944 L -173.75946,-327.84461 z " opacity="1.0000000" fill="url(#linearGradient11195)" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000006px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+    </g>
+    <path d="M 31.626355,14.999520 C 29.626255,14.999520 27.940775,16.079020 27.095785,17.614460 C 26.500875,17.392550 25.851145,17.261090 25.169835,17.261090 C 22.339625,17.261090 20.052305,19.379260 20.052305,21.978590 C 20.052305,22.432340 20.196835,22.835420 20.327445,23.250720 C 18.945125,24.115990 17.979615,25.504290 17.979615,27.155450 C 17.979615,29.808280 18.631235,32.148800 23.207195,31.961300 C 23.252315,31.959450 40.658675,32.058280 40.907605,31.943270 C 43.992815,32.169220 44.979615,29.497540 44.979615,27.243810 C 44.979615,25.543300 44.142675,24.193960 42.670345,23.366220 C 42.718305,23.107660 42.631785,22.815030 42.631785,22.543970 C 42.631785,19.944650 40.326135,17.826480 37.495915,17.826480 C 37.102425,17.826480 36.763515,17.961300 36.395375,18.038500 C 35.656915,16.270380 33.810365,14.999520 31.626355,14.999520 z " opacity="1.0000000" fill="url(#radialGradient13211)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000004" stroke-linejoin="round" stroke-miterlimit="4.0000000" stroke-dasharray="none" stroke-opacity="1.0000000"/>
+    <g transform="translate(-230.0203,248.9834)">
+      <path d="M 246.49993,-238.49993 C 244.22910,-238.49993 242.39002,-236.94965 241.78118,-234.87493 C 241.08795,-235.23876 240.33667,-235.49993 239.49993,-235.49993 C 236.73993,-235.49993 234.49992,-233.25994 234.49993,-230.49993 C 234.49993,-229.92100 234.66245,-229.39223 234.84368,-228.87493 C 233.47021,-228.10419 232.49993,-226.68593 232.49993,-224.99993 C 232.49993,-222.51593 234.51593,-220.49992 236.99993,-220.49993 C 237.17706,-220.49993 255.82280,-220.49993 255.99993,-220.49993 C 258.48392,-220.49993 260.49993,-222.51593 260.49993,-224.99993 C 260.49993,-226.68593 259.52965,-228.10419 258.15618,-228.87493 C 258.33742,-229.39222 258.49993,-229.92101 258.49993,-230.49993 C 258.49993,-233.25993 256.25993,-235.49992 253.49993,-235.49993 C 252.66319,-235.49993 251.91191,-235.23876 251.21868,-234.87493 C 250.60984,-236.94965 248.77076,-238.49993 246.49993,-238.49993 z " fill="#888a85" fill-opacity="1.0000000" stroke="#555753" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 246.49993,-237.99993 C 244.31021,-237.99993 242.77633,-236.66416 242.10438,-234.15641 C 241.43592,-234.50003 240.55679,-234.98976 239.74993,-234.98976 C 237.03342,-234.98976 234.99479,-233.05094 234.99480,-230.44422 C 234.99480,-229.89745 235.26201,-229.11078 235.43676,-228.62221 C 234.11233,-227.89426 232.99993,-226.73171 232.99993,-225.24966 C 232.99993,-222.90361 234.54610,-220.99957 237.33921,-220.99957 C 237.51002,-220.99957 255.48985,-220.99957 255.66065,-220.99957 C 258.43166,-220.99957 259.99993,-222.90361 259.99993,-225.24966 C 259.99993,-226.84203 258.88753,-227.91635 257.56310,-228.64430 C 257.73786,-229.13286 258.02717,-229.89746 258.02717,-230.44422 C 258.02717,-233.05093 255.91136,-235.01185 253.24994,-235.01186 C 252.44307,-235.01186 251.60813,-234.52212 250.93967,-234.17850 C 250.29082,-236.60004 248.68966,-237.99993 246.49993,-237.99993 z " opacity="1.0000000" fill="url(#linearGradient13145)" fill-opacity="1.0000000" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-58.19825,228.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-58.19825,228.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13147)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <rect y="-230.99992" x="236.99994" height="9.0000000" width="20.000000" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(0.905660,0.000000,0.000000,0.905660,-24.16987,171.3114)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-51.19818,231.8633)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-51.19825,231.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13149)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-65.19825,231.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.056604,0.000000,0.000000,1.056604,-65.19825,231.8634)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13151)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 245.46868,-233.96868 C 241.88930,-233.96868 238.99993,-231.04805 238.99993,-227.46868 C 238.99993,-225.09800 240.34936,-223.13089 242.24993,-221.99993 L 248.71868,-221.99993 C 250.61925,-223.13089 251.96868,-225.12924 251.96868,-227.49993 C 251.96868,-231.07931 249.04805,-233.96868 245.46868,-233.96868 z " opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 245.49993,-233.99993 C 241.91193,-233.99993 238.99993,-231.08792 238.99993,-227.49993 C 238.99993,-225.12353 240.34478,-223.13361 242.24993,-221.99993 L 248.74993,-221.99993 C 250.65508,-223.13361 251.99993,-225.12353 251.99993,-227.49993 C 251.99993,-231.08793 249.08793,-233.99992 245.49993,-233.99993 z " opacity="0.47777775" fill="url(#linearGradient13153)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(0.905660,0.000000,0.000000,0.905660,-24.16977,171.3113)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13155)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 258.95633,-230.33389 C 258.95480,-227.64933 255.68707,-226.61994 255.68707,-226.61994 C 255.68707,-226.61994 258.03581,-228.24589 258.02392,-230.32495 C 258.02392,-230.32495 258.95633,-230.33389 258.95633,-230.33389 z " fill="#555753" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000000px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.207547,0.000000,0.000000,1.207547,-98.22652,302.4154)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(1.207547,0.000000,0.000000,1.207547,-98.22652,302.4154)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="0.47777775" fill="url(#linearGradient13157)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+    </g>
+    <path d="M 16.188855,11.000000 C 14.188755,11.000000 12.503275,12.079500 11.658285,13.614940 C 11.063375,13.393030 10.413645,13.261570 9.7323346,13.261570 C 6.9021246,13.261570 4.6148046,15.379740 4.6148046,17.979070 C 4.6148046,18.432820 4.7593346,18.835900 4.8899446,19.251200 C 3.5076246,20.116470 2.5421146,21.504770 2.5421146,23.155930 C 2.5421146,25.808760 3.1937346,28.149280 7.7696946,27.961780 C 7.8148146,27.959930 25.221175,28.058760 25.470105,27.943750 C 28.555315,28.169700 29.542115,25.498020 29.542115,23.244290 C 29.542115,21.543780 28.705175,20.194440 27.232845,19.366700 C 27.280805,19.108140 27.194285,18.815510 27.194285,18.544450 C 27.194285,15.945130 24.888635,13.826960 22.058415,13.826960 C 21.664925,13.826960 21.326015,13.961780 20.957875,14.038980 C 20.219415,12.270860 18.372865,11.000000 16.188855,11.000000 z " opacity="1.0000000" fill="url(#radialGradient13068)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000004" stroke-linejoin="round" stroke-miterlimit="4.0000000" stroke-dasharray="none" stroke-opacity="1.0000000"/>
+  </g>
+</svg>
Index: trunk/demos/embedded/weatherinfo/icons/weather-sunny-very-few-clouds.svg
===================================================================
--- trunk/demos/embedded/weatherinfo/icons/weather-sunny-very-few-clouds.svg	(revision 561)
+++ trunk/demos/embedded/weatherinfo/icons/weather-sunny-very-few-clouds.svg	(revision 561)
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48px" height="48px" id="svg1306">
+  <defs id="defs1308">
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient6839" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+    <linearGradient id="linearGradient6549">
+      <stop offset="0" id="stop6551" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6553" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient6837" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient id="linearGradient6527">
+      <stop offset="0" id="stop6530" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6532" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient6835" gradientUnits="userSpaceOnUse" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient id="linearGradient6538">
+      <stop offset="0" id="stop6540" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6542" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient6833" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient id="linearGradient6513">
+      <stop offset="0" id="stop6515" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6517" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient6831" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient id="linearGradient6497">
+      <stop offset="0" id="stop6499" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6501" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient6829" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient id="linearGradient6470">
+      <stop offset="0" id="stop6472" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6474" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient6827" gradientUnits="userSpaceOnUse" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient id="linearGradient4083">
+      <stop id="stop4085" offset="0" stop-color="#ffffff" stop-opacity="0"/>
+      <stop offset="0.75" id="stop4089" stop-color="#ffffff" stop-opacity="0"/>
+      <stop id="stop4087" offset="1" stop-color="#ffffff" stop-opacity="1"/>
+    </linearGradient>
+    <linearGradient id="linearGradient4032">
+      <stop id="stop4034" offset="0" stop-color="#fff7c2" stop-opacity="0.63829786"/>
+      <stop offset="0.59394139" id="stop4036" stop-color="#fcaf3e" stop-opacity="0.18348624"/>
+      <stop id="stop4038" offset="0.83850551" stop-color="#fcaf3e" stop-opacity="0.50458717"/>
+      <stop id="stop4040" offset="1" stop-color="#fcaf3e" stop-opacity="1"/>
+    </linearGradient>
+    <linearGradient id="linearGradient4026">
+      <stop id="stop4028" offset="0" stop-color="#fff9c6" stop-opacity="1"/>
+      <stop offset="0.54166669" id="stop4042" stop-color="#fff28c" stop-opacity="1"/>
+      <stop id="stop4030" offset="1" stop-color="#ffea85" stop-opacity="1"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient4026" id="linearGradient3168" gradientUnits="userSpaceOnUse" x1="-28.968945" y1="-25.326815" x2="-37.19698" y2="-9.5590506"/>
+    <radialGradient xlink:href="#linearGradient4032" id="radialGradient4020" cx="-33.519073" cy="-22.113297" fx="-33.519073" fy="-22.113297" r="9.5" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.487739,1.292402,-1.10267,0.497242,-41.77393,32.41492)"/>
+    <radialGradient xlink:href="#linearGradient4083" id="radialGradient4081" cx="23.99999" cy="23.381506" fx="23.99999" fy="23.381506" r="19.141981" gradientTransform="matrix(1.006701,2.235326e-16,-2.23715e-16,1.007522,-0.160816,0.426981)" gradientUnits="userSpaceOnUse"/>
+  </defs>
+  
+  <metadata id="metadata1311">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+        <dc:title>weather-clear</dc:title>
+        <dc:date>January 2006</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Ryan Collier (pseudo)</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>http://www.tango-project.org</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:source>http://www.pseudocode.org</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>weather</rdf:li>
+            <rdf:li>applet</rdf:li>
+            <rdf:li>notification</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/"/>
+        <dc:contributor>
+          <cc:Agent>
+            <dc:title>Garrett LeSage</dc:title>
+          </cc:Agent>
+        </dc:contributor>
+      </cc:Work>
+      <cc:License rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
+        <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
+        <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/Notice"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/Attribution"/>
+        <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike"/>
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g id="layer1">
+    <g>
+      <g opacity="0.7">
+        <path d="M 24 2.5 L 21.625 9.1875 C 22.399034 9.0641318 23.191406 9 24 9 C 24.808594 9 25.600966 9.0641317 26.375 9.1875 L 24 2.5 z M 8.8125 8.78125 L 11.84375 15.21875 C 12.779034 13.928569 13.928569 12.779034 15.21875 11.84375 L 8.8125 8.78125 z M 39.21875 8.78125 L 32.78125 11.84375 C 34.071431 12.779034 35.220966 13.928569 36.15625 15.21875 L 39.21875 8.78125 z M 9.1875 21.59375 L 2.5 23.96875 L 9.1875 26.34375 C 9.0673373 25.57952 9 24.797813 9 24 C 9 23.180625 9.0608858 22.377571 9.1875 21.59375 z M 38.8125 21.625 C 38.935868 22.399034 39 23.191406 39 24 C 39 24.808594 38.935868 25.600966 38.8125 26.375 L 45.5 24 L 38.8125 21.625 z M 11.84375 32.78125 L 8.8125 39.1875 L 15.21875 36.15625 C 13.928569 35.220966 12.779034 34.071431 11.84375 32.78125 z M 36.15625 32.78125 C 35.229789 34.05926 34.087617 35.194799 32.8125 36.125 L 39.21875 39.1875 L 36.15625 32.78125 z M 21.625 38.8125 L 24 45.5 L 26.375 38.8125 C 25.600966 38.935868 24.808594 39 24 39 C 23.191406 39 22.399034 38.935868 21.625 38.8125 z " fill="#fce94f" fill-opacity="1" stroke="#fcaf3e" stroke-width="0.73732895" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+        <path d="M 24 5.25 L 22.65625 9.0625 C 23.098888 9.0231486 23.547187 9 24 9 C 24.452813 9 24.901112 9.0231486 25.34375 9.0625 L 24 5.25 z M 10.78125 10.75 L 12.5 14.375 C 13.071538 13.694089 13.724004 13.038745 14.40625 12.46875 L 10.78125 10.75 z M 37.25 10.75 L 33.625 12.46875 C 34.304675 13.038189 34.961811 13.695325 35.53125 14.375 L 37.25 10.75 z M 9.0625 22.625 L 5.28125 23.96875 L 9.0625 25.3125 C 9.024981 24.880146 9 24.442031 9 24 C 9 23.536406 9.0212735 23.077908 9.0625 22.625 z M 38.9375 22.65625 C 38.976851 23.098888 39 23.547187 39 24 C 39 24.452813 38.976851 24.901112 38.9375 25.34375 L 42.71875 24 L 38.9375 22.65625 z M 35.53125 33.59375 C 34.958293 34.27954 34.309985 34.957363 33.625 35.53125 L 37.25 37.25 L 35.53125 33.59375 z M 12.5 33.625 L 10.78125 37.21875 L 14.375 35.5 C 13.702932 34.935884 13.064116 34.297068 12.5 33.625 z M 22.65625 38.9375 L 24 42.71875 L 25.34375 38.9375 C 24.901112 38.976851 24.452813 39 24 39 C 23.547187 39 23.098888 38.976851 22.65625 38.9375 z " fill="none" fill-opacity="1" stroke="url(#radialGradient4081)" stroke-width="0.84646249" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+      </g>
+      <g>
+        <g>
+          <path transform="matrix(0.778062,-1.061285,1.061287,0.778062,67.47952,3.641324)" d="M -22.5 -17.5 A 9.5 9.5 0 1 1  -41.5,-17.5 A 9.5 9.5 0 1 1  -22.5 -17.5 z" fill="#ffee54" fill-opacity="1" stroke="#fcaf3e" stroke-width="0.75991178" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+          <path transform="matrix(1.244257,-0.167707,0.216642,1.251844,67.61648,40.527)" d="M -22.5 -17.5 A 9.5 9.5 0 1 1  -41.5,-17.5 A 9.5 9.5 0 1 1  -22.5 -17.5 z" fill="url(#radialGradient4020)" fill-opacity="1" stroke="none" stroke-width="1.01737845" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+          <path transform="matrix(0.715791,-0.976349,0.97635,0.715792,64.00044,5.269544)" d="M -22.5 -17.5 A 9.5 9.5 0 1 1  -41.5,-17.5 A 9.5 9.5 0 1 1  -22.5 -17.5 z" fill="none" fill-opacity="1" stroke="url(#linearGradient3168)" stroke-width="0.82601947" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+        </g>
+      </g>
+    </g>
+    <g transform="translate(-263.99,459.9855)">
+      <path d="M 280.50000,-445.50000 C 278.22917,-445.50000 276.39009,-443.94972 275.78125,-441.87500 C 275.08802,-442.23883 274.33674,-442.50000 273.50000,-442.50000 C 270.74000,-442.50000 268.49999,-440.26001 268.50000,-437.50000 C 268.50000,-436.92107 268.66252,-436.39230 268.84375,-435.87500 C 267.47028,-435.10426 266.50000,-433.68600 266.50000,-432.00000 C 266.50000,-429.51600 268.51600,-427.49999 271.00000,-427.50000 C 271.17713,-427.50000 289.82287,-427.50000 290.00000,-427.50000 C 292.48399,-427.50000 294.50000,-429.51600 294.50000,-432.00000 C 294.50000,-433.68600 293.52972,-435.10426 292.15625,-435.87500 C 292.33749,-436.39229 292.50000,-436.92108 292.50000,-437.50000 C 292.50000,-440.26000 290.26000,-442.49999 287.50000,-442.50000 C 286.66326,-442.50000 285.91198,-442.23883 285.21875,-441.87500 C 284.60991,-443.94972 282.77083,-445.50000 280.50000,-445.50000 z " fill="#c4c5c2" fill-opacity="1.0000000" stroke="#888a85" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 280.50000,-445.00000 C 278.31028,-445.00000 276.77640,-443.66423 276.10445,-441.15648 C 275.43599,-441.50010 274.55686,-441.98983 273.75000,-441.98983 C 271.03349,-441.98983 268.99486,-440.05101 268.99487,-437.44429 C 268.99487,-436.89752 269.26208,-436.11085 269.43683,-435.62228 C 268.11240,-434.89433 267.00000,-433.73178 267.00000,-432.24973 C 267.00000,-429.90368 268.54617,-427.99964 271.33928,-427.99964 C 271.51009,-427.99964 289.48992,-427.99964 289.66072,-427.99964 C 292.43173,-427.99964 294.00000,-429.90368 294.00000,-432.24973 C 294.00000,-433.84210 292.88760,-434.91642 291.56317,-435.64437 C 291.73793,-436.13293 292.02724,-436.89753 292.02724,-437.44429 C 292.02724,-440.05100 289.91143,-442.01192 287.25001,-442.01193 C 286.44314,-442.01193 285.60820,-441.52219 284.93974,-441.17857 C 284.29089,-443.60011 282.68973,-445.00000 280.50000,-445.00000 z " opacity="1.0000000" fill="url(#linearGradient6827)" fill-opacity="1.0000000" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <g>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-24.19818,21.86331)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-24.19818,21.86331)" opacity="1.0000000" fill="url(#linearGradient6829)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <rect y="-438.00000" x="271.00000" height="9.0000000" width="20.000000" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path transform="matrix(0.905660,0.000000,0.000000,0.905660,9.830195,-35.68869)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <g>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-17.19811,24.86321)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-17.19818,24.86331)" opacity="1.0000000" fill="url(#linearGradient6831)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" opacity="1.0000000" fill="url(#linearGradient6833)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g transform="translate(-1.000000,0.000000)">
+        <path d="M 280.46875,-440.96875 C 276.88937,-440.96875 274.00000,-438.04812 274.00000,-434.46875 C 274.00000,-432.09807 275.34943,-430.13096 277.25000,-429.00000 L 283.71875,-429.00000 C 285.61932,-430.13096 286.96875,-432.12931 286.96875,-434.50000 C 286.96875,-438.07938 284.04812,-440.96875 280.46875,-440.96875 z " opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 280.50000,-441.00000 C 276.91200,-441.00000 274.00000,-438.08799 274.00000,-434.50000 C 274.00000,-432.12360 275.34485,-430.13368 277.25000,-429.00000 L 283.75000,-429.00000 C 285.65515,-430.13368 287.00000,-432.12360 287.00000,-434.50000 C 287.00000,-438.08800 284.08800,-440.99999 280.50000,-441.00000 z " opacity="1.0000000" fill="url(#linearGradient6835)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <path transform="matrix(0.905660,0.000000,0.000000,0.905660,9.830296,-35.68884)" d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" opacity="1.0000000" fill="url(#linearGradient6837)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      <path d="M 292.95640,-437.33396 C 292.95487,-434.64940 289.68714,-433.62001 289.68714,-433.62001 C 289.68714,-433.62001 292.03588,-435.24596 292.02399,-437.32502 C 292.02399,-437.32502 292.95640,-437.33396 292.95640,-437.33396 z " fill="#888a85" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000000px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+      <g transform="matrix(1.142857,0.000000,0.000000,1.142857,-28.57139,67.00008)">
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" opacity="1.0000000" fill="#c4c5c2" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-31.19818,24.86331)" opacity="1.0000000" fill="url(#linearGradient6839)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+    </g>
+  </g>
+</svg>
Index: trunk/demos/embedded/weatherinfo/icons/weather-sunny.svg
===================================================================
--- trunk/demos/embedded/weatherinfo/icons/weather-sunny.svg	(revision 561)
+++ trunk/demos/embedded/weatherinfo/icons/weather-sunny.svg	(revision 561)
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48px" height="48px" id="svg1306">
+  <defs id="defs1308">
+    <linearGradient id="linearGradient4083">
+      <stop id="stop4085" offset="0" stop-color="#ffffff" stop-opacity="0"/>
+      <stop offset="0.75" id="stop4089" stop-color="#ffffff" stop-opacity="0"/>
+      <stop id="stop4087" offset="1" stop-color="#ffffff" stop-opacity="1"/>
+    </linearGradient>
+    <linearGradient id="linearGradient4032">
+      <stop id="stop4034" offset="0" stop-color="#fff7c2" stop-opacity="0.63829786"/>
+      <stop offset="0.59394139" id="stop4036" stop-color="#fcaf3e" stop-opacity="0.18348624"/>
+      <stop id="stop4038" offset="0.83850551" stop-color="#fcaf3e" stop-opacity="0.50458717"/>
+      <stop id="stop4040" offset="1" stop-color="#fcaf3e" stop-opacity="1"/>
+    </linearGradient>
+    <linearGradient id="linearGradient4026">
+      <stop id="stop4028" offset="0" stop-color="#fff9c6" stop-opacity="1"/>
+      <stop offset="0.54166669" id="stop4042" stop-color="#fff28c" stop-opacity="1"/>
+      <stop id="stop4030" offset="1" stop-color="#ffea85" stop-opacity="1"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient4026" id="linearGradient3168" gradientUnits="userSpaceOnUse" x1="-28.968945" y1="-25.326815" x2="-37.19698" y2="-9.5590506"/>
+    <radialGradient xlink:href="#linearGradient4032" id="radialGradient4020" cx="-33.519073" cy="-22.113297" fx="-33.519073" fy="-22.113297" r="9.5" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.487739,1.292402,-1.10267,0.497242,-41.77393,32.41492)"/>
+    <radialGradient xlink:href="#linearGradient4083" id="radialGradient4081" cx="23.99999" cy="23.381506" fx="23.99999" fy="23.381506" r="19.141981" gradientTransform="matrix(1.006701,2.235326e-16,-2.23715e-16,1.007522,-0.160816,0.426981)" gradientUnits="userSpaceOnUse"/>
+  </defs>
+  
+  <metadata id="metadata1311">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+        <dc:title>weather-clear</dc:title>
+        <dc:date>January 2006</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Ryan Collier (pseudo)</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>http://www.tango-project.org</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:source>http://www.pseudocode.org</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>weather</rdf:li>
+            <rdf:li>applet</rdf:li>
+            <rdf:li>notification</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/"/>
+        <dc:contributor>
+          <cc:Agent>
+            <dc:title>Garrett LeSage</dc:title>
+          </cc:Agent>
+        </dc:contributor>
+      </cc:Work>
+      <cc:License rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
+        <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
+        <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/Notice"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/Attribution"/>
+        <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike"/>
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g id="layer1">
+    <g>
+      <g opacity="0.7">
+        <path d="M 24 2.5 L 21.625 9.1875 C 22.399034 9.0641318 23.191406 9 24 9 C 24.808594 9 25.600966 9.0641317 26.375 9.1875 L 24 2.5 z M 8.8125 8.78125 L 11.84375 15.21875 C 12.779034 13.928569 13.928569 12.779034 15.21875 11.84375 L 8.8125 8.78125 z M 39.21875 8.78125 L 32.78125 11.84375 C 34.071431 12.779034 35.220966 13.928569 36.15625 15.21875 L 39.21875 8.78125 z M 9.1875 21.59375 L 2.5 23.96875 L 9.1875 26.34375 C 9.0673373 25.57952 9 24.797813 9 24 C 9 23.180625 9.0608858 22.377571 9.1875 21.59375 z M 38.8125 21.625 C 38.935868 22.399034 39 23.191406 39 24 C 39 24.808594 38.935868 25.600966 38.8125 26.375 L 45.5 24 L 38.8125 21.625 z M 11.84375 32.78125 L 8.8125 39.1875 L 15.21875 36.15625 C 13.928569 35.220966 12.779034 34.071431 11.84375 32.78125 z M 36.15625 32.78125 C 35.229789 34.05926 34.087617 35.194799 32.8125 36.125 L 39.21875 39.1875 L 36.15625 32.78125 z M 21.625 38.8125 L 24 45.5 L 26.375 38.8125 C 25.600966 38.935868 24.808594 39 24 39 C 23.191406 39 22.399034 38.935868 21.625 38.8125 z " fill="#fce94f" fill-opacity="1" stroke="#fcaf3e" stroke-width="0.73732895" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+        <path d="M 24 5.25 L 22.65625 9.0625 C 23.098888 9.0231486 23.547187 9 24 9 C 24.452813 9 24.901112 9.0231486 25.34375 9.0625 L 24 5.25 z M 10.78125 10.75 L 12.5 14.375 C 13.071538 13.694089 13.724004 13.038745 14.40625 12.46875 L 10.78125 10.75 z M 37.25 10.75 L 33.625 12.46875 C 34.304675 13.038189 34.961811 13.695325 35.53125 14.375 L 37.25 10.75 z M 9.0625 22.625 L 5.28125 23.96875 L 9.0625 25.3125 C 9.024981 24.880146 9 24.442031 9 24 C 9 23.536406 9.0212735 23.077908 9.0625 22.625 z M 38.9375 22.65625 C 38.976851 23.098888 39 23.547187 39 24 C 39 24.452813 38.976851 24.901112 38.9375 25.34375 L 42.71875 24 L 38.9375 22.65625 z M 35.53125 33.59375 C 34.958293 34.27954 34.309985 34.957363 33.625 35.53125 L 37.25 37.25 L 35.53125 33.59375 z M 12.5 33.625 L 10.78125 37.21875 L 14.375 35.5 C 13.702932 34.935884 13.064116 34.297068 12.5 33.625 z M 22.65625 38.9375 L 24 42.71875 L 25.34375 38.9375 C 24.901112 38.976851 24.452813 39 24 39 C 23.547187 39 23.098888 38.976851 22.65625 38.9375 z " fill="none" fill-opacity="1" stroke="url(#radialGradient4081)" stroke-width="0.84646249" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+      </g>
+      <g>
+        <g>
+          <path transform="matrix(0.778062,-1.061285,1.061287,0.778062,67.47952,3.641324)" d="M -22.5 -17.5 A 9.5 9.5 0 1 1  -41.5,-17.5 A 9.5 9.5 0 1 1  -22.5 -17.5 z" fill="#ffee54" fill-opacity="1" stroke="#fcaf3e" stroke-width="0.75991178" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+          <path transform="matrix(1.244257,-0.167707,0.216642,1.251844,67.61648,40.527)" d="M -22.5 -17.5 A 9.5 9.5 0 1 1  -41.5,-17.5 A 9.5 9.5 0 1 1  -22.5 -17.5 z" fill="url(#radialGradient4020)" fill-opacity="1" stroke="none" stroke-width="1.01737845" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+          <path transform="matrix(0.715791,-0.976349,0.97635,0.715792,64.00044,5.269544)" d="M -22.5 -17.5 A 9.5 9.5 0 1 1  -41.5,-17.5 A 9.5 9.5 0 1 1  -22.5 -17.5 z" fill="none" fill-opacity="1" stroke="url(#linearGradient3168)" stroke-width="0.82601947" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
Index: trunk/demos/embedded/weatherinfo/icons/weather-thundershower.svg
===================================================================
--- trunk/demos/embedded/weatherinfo/icons/weather-thundershower.svg	(revision 561)
+++ trunk/demos/embedded/weatherinfo/icons/weather-thundershower.svg	(revision 561)
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48px" height="48px" id="svg1306">
+  <defs id="defs1308">
+    <linearGradient id="linearGradient5358">
+      <stop offset="0" id="stop5360" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop5362" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient5346">
+      <stop offset="0" id="stop5348" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop5350" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient id="linearGradient8397">
+      <stop offset="0" id="stop8400" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8402" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8397" id="linearGradient13503" gradientUnits="userSpaceOnUse" x1="238.00478" y1="-388.47476" x2="245.65462" y2="-382.64539"/>
+    <linearGradient id="linearGradient8315">
+      <stop offset="0" id="stop8317" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8319" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8315" id="linearGradient13501" gradientUnits="userSpaceOnUse" x1="230.87598" y1="-390.43951" x2="235.25652" y2="-386.95901"/>
+    <linearGradient id="linearGradient8381">
+      <stop offset="0" id="stop8383" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8385" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8381" id="linearGradient13499" gradientUnits="userSpaceOnUse" x1="246.74042" y1="-391.31381" x2="252.69785" y2="-385.35165"/>
+    <linearGradient id="linearGradient8331">
+      <stop offset="0" id="stop8333" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8335" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8331" id="linearGradient13497" gradientUnits="userSpaceOnUse" x1="240.07379" y1="-393.40720" x2="245.82706" y2="-388.55029"/>
+    <linearGradient id="linearGradient8302">
+      <stop offset="0" id="stop8304" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8306" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8302" id="linearGradient13495" gradientUnits="userSpaceOnUse" gradientTransform="translate(69.00000,155.0000)" x1="228.50261" y1="-392.30591" x2="266.36395" y2="-379.26862"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient13143" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient13141" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient13139" gradientUnits="userSpaceOnUse" gradientTransform="translate(-35.00007,207.0001)" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient13137" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient13135" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient13133" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient13131" gradientUnits="userSpaceOnUse" gradientTransform="translate(-34.00007,207.0001)" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient xlink:href="#linearGradient8874" id="linearGradient11195" gradientUnits="userSpaceOnUse" gradientTransform="translate(14.15871,7.082841)" x1="-190.47688" y1="-332.51181" x2="-196.19046" y2="-328.53433"/>
+    <linearGradient xlink:href="#linearGradient8904" id="linearGradient11193" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.80516,2.840199)" x1="-191.28896" y1="-328.07861" x2="-192.41396" y2="-315.32861"/>
+    <linearGradient id="linearGradient8874">
+      <stop offset="0" id="stop8876" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop8878" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8874" id="linearGradient11191" gradientUnits="userSpaceOnUse" gradientTransform="translate(14.15871,7.082841)" x1="-190.47688" y1="-332.51181" x2="-196.19046" y2="-328.53433"/>
+    <linearGradient id="linearGradient8904">
+      <stop offset="0" id="stop8906" stop-color="#fcaf3e" stop-opacity="1"/>
+      <stop offset="1" id="stop8908" stop-color="#fcaf3e" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient8904" id="linearGradient11189" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.80516,2.840199)" x1="-191.28896" y1="-328.07861" x2="-192.41396" y2="-315.32861"/>
+    <radialGradient xlink:href="#linearGradient5123" id="radialGradient13211" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.930946,6.185702e-16,-2.842711e-16,0.448244,245.3644,184.9256)" cx="-229.75000" cy="-343.95554" fx="-229.75000" fy="-343.95554" r="14.501380"/>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient13157" gradientUnits="userSpaceOnUse" x1="284.80219" y1="-441.23294" x2="288.89954" y2="-436.83109"/>
+    <linearGradient id="linearGradient6549">
+      <stop offset="0" id="stop6551" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6553" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6549" id="linearGradient13155" gradientUnits="userSpaceOnUse" x1="286.66589" y1="-439.48358" x2="289.76562" y2="-436.70703"/>
+    <linearGradient id="linearGradient6527">
+      <stop offset="0" id="stop6530" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6532" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6527" id="linearGradient13153" gradientUnits="userSpaceOnUse" gradientTransform="translate(-35.00007,207.0001)" x1="275.94193" y1="-437.10501" x2="279.97546" y2="-431.91833"/>
+    <linearGradient id="linearGradient6538">
+      <stop offset="0" id="stop6540" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6542" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6538" id="linearGradient13151" gradientUnits="userSpaceOnUse" x1="285.94086" y1="-439.93900" x2="289.39124" y2="-436.44290"/>
+    <linearGradient id="linearGradient6513">
+      <stop offset="0" id="stop6515" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6517" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6513" id="linearGradient13149" gradientUnits="userSpaceOnUse" x1="286.51172" y1="-441.29074" x2="289.85379" y2="-436.14453"/>
+    <linearGradient id="linearGradient6497">
+      <stop offset="0" id="stop6499" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6501" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6497" id="linearGradient13147" gradientUnits="userSpaceOnUse" x1="287.51730" y1="-439.75281" x2="289.67633" y2="-436.32199"/>
+    <linearGradient id="linearGradient6470">
+      <stop offset="0" id="stop6472" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop6474" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <linearGradient xlink:href="#linearGradient6470" id="linearGradient13145" gradientUnits="userSpaceOnUse" gradientTransform="translate(-34.00007,207.0001)" x1="271.02170" y1="-441.05182" x2="285.02859" y2="-431.96991"/>
+    <linearGradient id="linearGradient5123">
+      <stop offset="0" id="stop5125" stop-color="#ffffff" stop-opacity="1"/>
+      <stop offset="1" id="stop5127" stop-color="#ffffff" stop-opacity="0"/>
+    </linearGradient>
+    <radialGradient xlink:href="#linearGradient5123" id="radialGradient13068" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.930946,6.185702e-16,-2.842711e-16,0.448244,229.9269,180.9261)" cx="-229.75000" cy="-343.95554" fx="-229.75000" fy="-343.95554" r="14.501380"/>
+    <radialGradient xlink:href="#linearGradient5346" id="radialGradient23739" gradientUnits="userSpaceOnUse" gradientTransform="matrix(7.065158e-2,4.154803e-2,-6.201499e-2,0.109408,207.4757,-189.8182)" cx="21.920311" cy="-382.96454" fx="21.920311" fy="-382.96454" r="21.743534"/>
+    <linearGradient xlink:href="#linearGradient5358" id="linearGradient23741" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-5.358613e-2,0.102849,-9.281434e-2,-5.937964e-2,198.9051,-255.6893)" x1="6.8942904" y1="-359.82382" x2="27.400387" y2="-381.30222"/>
+    <radialGradient xlink:href="#linearGradient5346" id="radialGradient23743" gradientUnits="userSpaceOnUse" gradientTransform="matrix(7.065158e-2,4.154803e-2,-6.201499e-2,0.109408,207.4757,-189.8182)" cx="21.920311" cy="-382.96454" fx="21.920311" fy="-382.96454" r="21.743534"/>
+    <linearGradient xlink:href="#linearGradient5358" id="linearGradient23745" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-5.358613e-2,0.102849,-9.281434e-2,-5.937964e-2,198.9051,-255.6893)" x1="6.8942904" y1="-359.82382" x2="27.400387" y2="-381.30222"/>
+    <radialGradient xlink:href="#linearGradient5346" id="radialGradient23747" gradientUnits="userSpaceOnUse" gradientTransform="matrix(7.065158e-2,4.154803e-2,-6.201499e-2,0.109408,207.4757,-189.8182)" cx="21.920311" cy="-382.96454" fx="21.920311" fy="-382.96454" r="21.743534"/>
+    <linearGradient xlink:href="#linearGradient5358" id="linearGradient23749" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-5.358613e-2,0.102849,-9.281434e-2,-5.937964e-2,198.9051,-255.6893)" x1="6.8942904" y1="-359.82382" x2="27.400387" y2="-381.30222"/>
+  </defs>
+  
+  <metadata id="metadata1311">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+        <dc:title>weather-storm</dc:title>
+        <dc:date>January 2006</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Ryan Collier</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>http://www.tango-project.org</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:source>http://www.pseudocode.org</dc:source>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>weather</rdf:li>
+            <rdf:li>applet</rdf:li>
+            <rdf:li>notify</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/"/>
+      </cc:Work>
+      <cc:License rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
+        <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
+        <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/Notice"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/Attribution"/>
+        <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
+        <cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike"/>
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g id="layer1">
+    <g>
+      <g transform="translate(-287.0204,244.9995)">
+        <path d="M 311.50000,-242.99998 C 308.72758,-242.99998 306.39177,-241.42627 305.09375,-239.18748 C 304.14939,-239.66252 303.12856,-239.99998 302.00000,-239.99998 C 298.13600,-239.99998 295.00000,-236.86398 295.00000,-232.99998 C 295.00000,-229.13598 298.13600,-225.99998 302.00000,-225.99998 C 304.41967,-225.99998 306.43009,-227.31930 307.68750,-229.18748 C 308.82170,-228.49786 310.07648,-227.99998 311.50000,-227.99998 C 312.41312,-227.99998 313.25295,-228.23200 314.06250,-228.53123 C 314.57244,-227.66350 315.24162,-226.95151 316.06250,-226.37498 C 316.05526,-226.24460 316.00000,-226.13216 316.00000,-225.99998 C 316.00000,-222.13598 319.13599,-218.99998 323.00000,-218.99998 C 326.86400,-218.99998 330.00000,-222.13598 330.00000,-225.99998 C 330.00000,-228.36967 328.74102,-230.35832 326.93750,-231.62498 C 326.94474,-231.75536 327.00000,-231.86780 327.00000,-231.99998 C 327.00000,-235.86398 323.86401,-238.99998 320.00000,-238.99998 C 319.37730,-238.99998 318.82481,-238.77779 318.25000,-238.62498 C 317.05547,-241.18382 314.50866,-242.99998 311.50000,-242.99998 z " opacity="1.0000000" fill="#555753" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 311.50000,-241.99998 C 308.71952,-241.99998 306.36549,-240.23813 305.43750,-237.78123 C 304.45208,-238.49067 303.30607,-238.99998 302.00000,-238.99998 C 298.68800,-238.99998 296.00000,-236.31198 296.00000,-232.99998 C 296.00000,-229.68798 298.68800,-226.99998 302.00000,-226.99998 C 304.42775,-226.99998 306.49324,-228.45556 307.43750,-230.53123 C 308.55826,-229.61367 309.93964,-228.99998 311.50000,-228.99998 C 312.57454,-228.99998 313.54428,-229.31894 314.43750,-229.78123 C 314.83590,-228.78147 315.53864,-227.99491 316.37500,-227.34373 C 316.19499,-226.74811 316.00000,-226.15408 316.00000,-225.49998 C 316.00000,-221.91198 318.91200,-218.99998 322.50000,-218.99998 C 326.08800,-218.99998 329.00000,-221.91198 329.00000,-225.49998 C 329.00000,-227.86077 327.66567,-229.83017 325.78125,-230.96873 C 325.84384,-231.31596 326.00000,-231.63481 326.00000,-231.99998 C 326.00000,-235.31198 323.31200,-237.99998 320.00000,-237.99998 C 319.14702,-237.99998 318.32870,-237.82130 317.59375,-237.49998 C 316.73998,-240.09386 314.37851,-241.99997 311.50000,-241.99998 z " opacity="1.0000000" fill="url(#linearGradient13495)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" transform="matrix(0.964447,0.000000,0.000000,0.964447,89.28852,144.5262)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <g>
+          <path transform="matrix(0.882630,0.000000,0.000000,0.882630,96.18078,108.1091)" d="M 250.18322 -389.30136 A 6.2313786 6.2313786 0 1 1  237.72046,-389.30136 A 6.2313786 6.2313786 0 1 1  250.18322 -389.30136 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(0.882630,0.000000,0.000000,0.882630,96.18078,108.1091)" d="M 250.18322 -389.30136 A 6.2313786 6.2313786 0 1 1  237.72046,-389.30136 A 6.2313786 6.2313786 0 1 1  250.18322 -389.30136 z" opacity="0.49444440" fill="url(#linearGradient13497)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <g>
+          <path transform="matrix(0.911728,0.000000,0.000000,0.911728,90.45407,120.2336)" d="M 257.25429 -385.78790 A 6.0325046 6.0325046 0 1 1  245.18928,-385.78790 A 6.0325046 6.0325046 0 1 1  257.25429 -385.78790 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(0.911728,0.000000,0.000000,0.911728,90.45407,120.2336)" d="M 257.25429 -385.78790 A 6.0325046 6.0325046 0 1 1  245.18928,-385.78790 A 6.0325046 6.0325046 0 1 1  257.25429 -385.78790 z" opacity="0.49444440" fill="url(#linearGradient13499)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <g>
+          <path transform="matrix(1.142799,0.000000,0.000000,1.142799,35.23229,210.2770)" d="M 237.80885 -387.88715 A 4.3752232 4.3752232 0 1 1  229.05840,-387.88715 A 4.3752232 4.3752232 0 1 1  237.80885 -387.88715 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.142799,0.000000,0.000000,1.142799,35.23229,210.2770)" d="M 237.80885 -387.88715 A 4.3752232 4.3752232 0 1 1  229.05840,-387.88715 A 4.3752232 4.3752232 0 1 1  237.80885 -387.88715 z" opacity="0.49444440" fill="url(#linearGradient13501)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+        <g>
+          <path transform="matrix(1.038636,0.000000,0.000000,1.038636,59.84906,169.4899)" d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+          <path transform="matrix(1.038636,0.000000,0.000000,1.038636,59.84907,169.4899)" d="M 248.54804 -383.66660 A 6.7396116 6.7396116 0 1 1  235.06881,-383.66660 A 6.7396116 6.7396116 0 1 1  248.54804 -383.66660 z" opacity="0.49444440" fill="url(#linearGradient13503)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        </g>
+      </g>
+      <g transform="translate(208.8564,357.8851)">
+        <path d="M -173.24571,-327.59122 L -176.37021,-323.31202 L -172.59078,-323.31202 C -172.59078,-323.31202 -175.29396,-318.78622 -180.16632,-310.38562 C -178.07014,-318.33294 -177.21353,-321.35581 -177.21353,-321.35581 L -182.37682,-321.35581 L -178.33401,-327.59122 L -173.24571,-327.59122 z " fill="#edd400" fill-opacity="1.0000000" fill-rule="evenodd" stroke="url(#linearGradient11189)" stroke-width="1.0000006px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+        <path d="M -173.75946,-327.84461 L -177.50268,-322.68152 L -173.54648,-322.85830 C -173.54648,-322.85830 -173.68639,-322.39837 -178.55875,-313.99777 C -176.46257,-321.94509 -176.48985,-321.96275 -176.48985,-321.96275 L -181.38797,-321.87436 L -177.69871,-327.57944 L -173.75946,-327.84461 z " opacity="1.0000000" fill="url(#linearGradient11191)" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000006px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+      </g>
+      <g transform="translate(-215.0060,252.9994)">
+        <path d="M 246.49993,-238.49993 C 244.22910,-238.49993 242.39002,-236.94965 241.78118,-234.87493 C 241.08795,-235.23876 240.33667,-235.49993 239.49993,-235.49993 C 236.73993,-235.49993 234.49992,-233.25994 234.49993,-230.49993 C 234.49993,-229.92100 234.66245,-229.39223 234.84368,-228.87493 C 233.47021,-228.10419 232.49993,-226.68593 232.49993,-224.99993 C 232.49993,-222.51593 234.51593,-220.49992 236.99993,-220.49993 C 237.17706,-220.49993 255.82280,-220.49993 255.99993,-220.49993 C 258.48392,-220.49993 260.49993,-222.51593 260.49993,-224.99993 C 260.49993,-226.68593 259.52965,-228.10419 258.15618,-228.87493 C 258.33742,-229.39222 258.49993,-229.92101 258.49993,-230.49993 C 258.49993,-233.25993 256.25993,-235.49992 253.49993,-235.49993 C 252.66319,-235.49993 251.91191,-235.23876 251.21868,-234.87493 C 250.60984,-236.94965 248.77076,-238.49993 246.49993,-238.49993 z " fill="#888a85" fill-opacity="1.0000000" stroke="#555753" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 246.49993,-237.99993 C 244.31021,-237.99993 242.77633,-236.66416 242.10438,-234.15641 C 241.43592,-234.50003 240.55679,-234.98976 239.74993,-234.98976 C 237.03342,-234.98976 234.99479,-233.05094 234.99480,-230.44422 C 234.99480,-229.89745 235.26201,-229.11078 235.43676,-228.62221 C 234.11233,-227.89426 232.99993,-226.73171 232.99993,-225.24966 C 232.99993,-222.90361 234.54610,-220.99957 237.33921,-220.99957 C 237.51002,-220.99957 255.48985,-220.99957 255.66065,-220.99957 C 258.43166,-220.99957 259.99993,-222.90361 259.99993,-225.24966 C 259.99993,-226.84203 258.88753,-227.91635 257.56310,-228.64430 C 257.73786,-229.13286 258.02717,-229.89746 258.02717,-230.44422 C 258.02717,-233.05093 255.91136,-235.01185 253.24994,-235.01186 C 252.44307,-235.01186 251.60813,-234.52212 250.93967,-234.17850 C 250.29082,-236.60004 248.68966,-237.99993 246.49993,-237.99993 z " opacity="1.0000000" fill="url(#linearGradient13131)" fill-opacity="1.0000000" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-58.19825,228.8634)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-58.19825,228.8634)" opacity="0.47777775" fill="url(#linearGradient13133)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <rect width="20.000000" height="9.0000000" x="236.99994" y="-230.99992" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(0.905660,0.000000,0.000000,0.905660,-24.16987,171.3114)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-51.19818,231.8633)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-51.19825,231.8634)" opacity="0.47777775" fill="url(#linearGradient13135)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-65.19825,231.8634)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-65.19825,231.8634)" opacity="0.47777775" fill="url(#linearGradient13137)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 245.46868,-233.96868 C 241.88930,-233.96868 238.99993,-231.04805 238.99993,-227.46868 C 238.99993,-225.09800 240.34936,-223.13089 242.24993,-221.99993 L 248.71868,-221.99993 C 250.61925,-223.13089 251.96868,-225.12924 251.96868,-227.49993 C 251.96868,-231.07931 249.04805,-233.96868 245.46868,-233.96868 z " opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 245.49993,-233.99993 C 241.91193,-233.99993 238.99993,-231.08792 238.99993,-227.49993 C 238.99993,-225.12353 240.34478,-223.13361 242.24993,-221.99993 L 248.74993,-221.99993 C 250.65508,-223.13361 251.99993,-225.12353 251.99993,-227.49993 C 251.99993,-231.08793 249.08793,-233.99992 245.49993,-233.99993 z " opacity="0.47777775" fill="url(#linearGradient13139)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(0.905660,0.000000,0.000000,0.905660,-24.16977,171.3113)" opacity="0.47777775" fill="url(#linearGradient13141)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 258.95633,-230.33389 C 258.95480,-227.64933 255.68707,-226.61994 255.68707,-226.61994 C 255.68707,-226.61994 258.03581,-228.24589 258.02392,-230.32495 C 258.02392,-230.32495 258.95633,-230.33389 258.95633,-230.33389 z " fill="#555753" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000000px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.207547,0.000000,0.000000,1.207547,-98.22652,302.4154)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.207547,0.000000,0.000000,1.207547,-98.22652,302.4154)" opacity="0.47777775" fill="url(#linearGradient13143)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <g transform="translate(192.8564,354.8851)">
+        <path d="M -173.24571,-327.59122 L -176.37021,-323.31202 L -172.59078,-323.31202 C -172.59078,-323.31202 -175.29396,-318.78622 -180.16632,-310.38562 C -178.07014,-318.33294 -177.21353,-321.35581 -177.21353,-321.35581 L -182.37682,-321.35581 L -178.33401,-327.59122 L -173.24571,-327.59122 z " fill="#edd400" fill-opacity="1.0000000" fill-rule="evenodd" stroke="url(#linearGradient11193)" stroke-width="1.0000006px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+        <path d="M -173.75946,-327.84461 L -177.50268,-322.68152 L -173.54648,-322.85830 C -173.54648,-322.85830 -173.68639,-322.39837 -178.55875,-313.99777 C -176.46257,-321.94509 -176.48985,-321.96275 -176.48985,-321.96275 L -181.38797,-321.87436 L -177.69871,-327.57944 L -173.75946,-327.84461 z " opacity="1.0000000" fill="url(#linearGradient11195)" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000006px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+      </g>
+      <path d="M 31.626355,14.999520 C 29.626255,14.999520 27.940775,16.079020 27.095785,17.614460 C 26.500875,17.392550 25.851145,17.261090 25.169835,17.261090 C 22.339625,17.261090 20.052305,19.379260 20.052305,21.978590 C 20.052305,22.432340 20.196835,22.835420 20.327445,23.250720 C 18.945125,24.115990 17.979615,25.504290 17.979615,27.155450 C 17.979615,29.808280 18.631235,32.148800 23.207195,31.961300 C 23.252315,31.959450 40.658675,32.058280 40.907605,31.943270 C 43.992815,32.169220 44.979615,29.497540 44.979615,27.243810 C 44.979615,25.543300 44.142675,24.193960 42.670345,23.366220 C 42.718305,23.107660 42.631785,22.815030 42.631785,22.543970 C 42.631785,19.944650 40.326135,17.826480 37.495915,17.826480 C 37.102425,17.826480 36.763515,17.961300 36.395375,18.038500 C 35.656915,16.270380 33.810365,14.999520 31.626355,14.999520 z " opacity="1.0000000" fill="url(#radialGradient13211)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000004" stroke-linejoin="round" stroke-miterlimit="4.0000000" stroke-dasharray="none" stroke-opacity="1.0000000"/>
+      <g transform="translate(-230.0203,248.9834)">
+        <path d="M 246.49993,-238.49993 C 244.22910,-238.49993 242.39002,-236.94965 241.78118,-234.87493 C 241.08795,-235.23876 240.33667,-235.49993 239.49993,-235.49993 C 236.73993,-235.49993 234.49992,-233.25994 234.49993,-230.49993 C 234.49993,-229.92100 234.66245,-229.39223 234.84368,-228.87493 C 233.47021,-228.10419 232.49993,-226.68593 232.49993,-224.99993 C 232.49993,-222.51593 234.51593,-220.49992 236.99993,-220.49993 C 237.17706,-220.49993 255.82280,-220.49993 255.99993,-220.49993 C 258.48392,-220.49993 260.49993,-222.51593 260.49993,-224.99993 C 260.49993,-226.68593 259.52965,-228.10419 258.15618,-228.87493 C 258.33742,-229.39222 258.49993,-229.92101 258.49993,-230.49993 C 258.49993,-233.25993 256.25993,-235.49992 253.49993,-235.49993 C 252.66319,-235.49993 251.91191,-235.23876 251.21868,-234.87493 C 250.60984,-236.94965 248.77076,-238.49993 246.49993,-238.49993 z " fill="#888a85" fill-opacity="1.0000000" stroke="#555753" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 246.49993,-237.99993 C 244.31021,-237.99993 242.77633,-236.66416 242.10438,-234.15641 C 241.43592,-234.50003 240.55679,-234.98976 239.74993,-234.98976 C 237.03342,-234.98976 234.99479,-233.05094 234.99480,-230.44422 C 234.99480,-229.89745 235.26201,-229.11078 235.43676,-228.62221 C 234.11233,-227.89426 232.99993,-226.73171 232.99993,-225.24966 C 232.99993,-222.90361 234.54610,-220.99957 237.33921,-220.99957 C 237.51002,-220.99957 255.48985,-220.99957 255.66065,-220.99957 C 258.43166,-220.99957 259.99993,-222.90361 259.99993,-225.24966 C 259.99993,-226.84203 258.88753,-227.91635 257.56310,-228.64430 C 257.73786,-229.13286 258.02717,-229.89746 258.02717,-230.44422 C 258.02717,-233.05093 255.91136,-235.01185 253.24994,-235.01186 C 252.44307,-235.01186 251.60813,-234.52212 250.93967,-234.17850 C 250.29082,-236.60004 248.68966,-237.99993 246.49993,-237.99993 z " opacity="1.0000000" fill="url(#linearGradient13145)" fill-opacity="1.0000000" stroke="none" stroke-width="0.99999958" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-58.19825,228.8634)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-58.19825,228.8634)" opacity="0.47777775" fill="url(#linearGradient13147)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <rect width="20.000000" height="9.0000000" x="236.99994" y="-230.99992" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(0.905660,0.000000,0.000000,0.905660,-24.16987,171.3114)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-51.19818,231.8633)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-51.19825,231.8634)" opacity="0.47777775" fill="url(#linearGradient13149)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-65.19825,231.8634)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.056604,0.000000,0.000000,1.056604,-65.19825,231.8634)" opacity="0.47777775" fill="url(#linearGradient13151)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 245.46868,-233.96868 C 241.88930,-233.96868 238.99993,-231.04805 238.99993,-227.46868 C 238.99993,-225.09800 240.34936,-223.13089 242.24993,-221.99993 L 248.71868,-221.99993 C 250.61925,-223.13089 251.96868,-225.12924 251.96868,-227.49993 C 251.96868,-231.07931 249.04805,-233.96868 245.46868,-233.96868 z " opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 245.49993,-233.99993 C 241.91193,-233.99993 238.99993,-231.08792 238.99993,-227.49993 C 238.99993,-225.12353 240.34478,-223.13361 242.24993,-221.99993 L 248.74993,-221.99993 C 250.65508,-223.13361 251.99993,-225.12353 251.99993,-227.49993 C 251.99993,-231.08793 249.08793,-233.99992 245.49993,-233.99993 z " opacity="0.47777775" fill="url(#linearGradient13153)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(0.905660,0.000000,0.000000,0.905660,-24.16977,171.3113)" opacity="0.47777775" fill="url(#linearGradient13155)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 258.95633,-230.33389 C 258.95480,-227.64933 255.68707,-226.61994 255.68707,-226.61994 C 255.68707,-226.61994 258.03581,-228.24589 258.02392,-230.32495 C 258.02392,-230.32495 258.95633,-230.33389 258.95633,-230.33389 z " fill="#555753" fill-opacity="1.0000000" fill-rule="evenodd" stroke="none" stroke-width="1.0000000px" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.207547,0.000000,0.000000,1.207547,-98.22652,302.4154)" opacity="1.0000000" fill="#888a85" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+        <path d="M 291.68750 -437.59375 A 3.3125000 3.3125000 0 1 1  285.06250,-437.59375 A 3.3125000 3.3125000 0 1 1  291.68750 -437.59375 z" transform="matrix(1.207547,0.000000,0.000000,1.207547,-98.22652,302.4154)" opacity="0.47777775" fill="url(#linearGradient13157)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000000" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2.0000000" stroke-dasharray="none" stroke-dashoffset="0.0000000" stroke-opacity="1.0000000"/>
+      </g>
+      <path d="M 16.188855,11.000000 C 14.188755,11.000000 12.503275,12.079500 11.658285,13.614940 C 11.063375,13.393030 10.413645,13.261570 9.7323346,13.261570 C 6.9021246,13.261570 4.6148046,15.379740 4.6148046,17.979070 C 4.6148046,18.432820 4.7593346,18.835900 4.8899446,19.251200 C 3.5076246,20.116470 2.5421146,21.504770 2.5421146,23.155930 C 2.5421146,25.808760 3.1937346,28.149280 7.7696946,27.961780 C 7.8148146,27.959930 25.221175,28.058760 25.470105,27.943750 C 28.555315,28.169700 29.542115,25.498020 29.542115,23.244290 C 29.542115,21.543780 28.705175,20.194440 27.232845,19.366700 C 27.280805,19.108140 27.194285,18.815510 27.194285,18.544450 C 27.194285,15.945130 24.888635,13.826960 22.058415,13.826960 C 21.664925,13.826960 21.326015,13.961780 20.957875,14.038980 C 20.219415,12.270860 18.372865,11.000000 16.188855,11.000000 z " opacity="1.0000000" fill="url(#radialGradient13068)" fill-opacity="1.0000000" stroke="none" stroke-width="1.0000004" stroke-linejoin="round" stroke-miterlimit="4.0000000" stroke-dasharray="none" stroke-opacity="1.0000000"/>
+      <g transform="translate(-212.91035,271.43)">
+        <path d="M 231.62587,-228.77086 C 230.58662,-229.36665 230.23015,-230.68774 230.83016,-231.71967 C 232.16166,-233.80243 233.93524,-233.26584 234.84231,-235.46138 C 236.10323,-234.12777 235.63545,-227.21367 231.62587,-228.77086 z" fill="#729fcf" fill-opacity="1" stroke="#204a87" stroke-width="1.07456863" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 234.31017,-229.9035 C 233.82059,-229.03976 232.73502,-228.74348 231.88703,-229.24216 C 231.03903,-229.74084 230.74816,-230.84657 231.23774,-231.71031 C 231.72733,-232.57405 233.84374,-232.16235 234.58388,-234 C 235.43187,-233.50133 234.79976,-230.76724 234.31017,-229.9035 z" opacity="0.46111109" fill="url(#radialGradient23739)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 233.02237,-229 C 228.40776,-230.07384 233.25985,-233.71939 234,-232.92154 C 230.4176,-231.55118 233.02237,-229 233.02237,-229 z" opacity="1" fill="url(#linearGradient23741)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+      </g>
+      <g transform="translate(-193.78094,269.3383)">
+        <path d="M 231.62587,-228.77086 C 230.58662,-229.36665 230.23015,-230.68774 230.83016,-231.71967 C 232.16166,-233.80243 233.93524,-233.26584 234.84231,-235.46138 C 236.10323,-234.12777 235.63545,-227.21367 231.62587,-228.77086 z" fill="#729fcf" fill-opacity="1" stroke="#204a87" stroke-width="1.07456863" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 234.31017,-229.9035 C 233.82059,-229.03976 232.73502,-228.74348 231.88703,-229.24216 C 231.03903,-229.74084 230.74816,-230.84657 231.23774,-231.71031 C 231.72733,-232.57405 233.84374,-232.16235 234.58388,-234 C 235.43187,-233.50133 234.79976,-230.76724 234.31017,-229.9035 z" opacity="0.46111109" fill="url(#radialGradient23743)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 233.02237,-229 C 228.40776,-230.07384 233.25985,-233.71939 234,-232.92154 C 230.4176,-231.55118 233.02237,-229 233.02237,-229 z" opacity="1" fill="url(#linearGradient23745)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+      </g>
+      <g transform="translate(-225.96722,264.58414)">
+        <path d="M 231.62587,-228.77086 C 230.58662,-229.36665 230.23015,-230.68774 230.83016,-231.71967 C 232.16166,-233.80243 233.93524,-233.26584 234.84231,-235.46138 C 236.10323,-234.12777 235.63545,-227.21367 231.62587,-228.77086 z" fill="#729fcf" fill-opacity="1" stroke="#204a87" stroke-width="1.07456863" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="2" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 234.31017,-229.9035 C 233.82059,-229.03976 232.73502,-228.74348 231.88703,-229.24216 C 231.03903,-229.74084 230.74816,-230.84657 231.23774,-231.71031 C 231.72733,-232.57405 233.84374,-232.16235 234.58388,-234 C 235.43187,-233.50133 234.79976,-230.76724 234.31017,-229.9035 z" opacity="0.46111109" fill="url(#radialGradient23747)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+        <path d="M 233.02237,-229 C 228.40776,-230.07384 233.25985,-233.71939 234,-232.92154 C 230.4176,-231.55118 233.02237,-229 233.02237,-229 z" opacity="1" fill="url(#linearGradient23749)" fill-opacity="1" stroke="none" stroke-width="1.07457018" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="0" stroke-dashoffset="0" stroke-opacity="1"/>
+      </g>
+    </g>
+  </g>
+</svg>
Index: trunk/demos/embedded/weatherinfo/weatherinfo.cpp
===================================================================
--- trunk/demos/embedded/weatherinfo/weatherinfo.cpp	(revision 561)
+++ trunk/demos/embedded/weatherinfo/weatherinfo.cpp	(revision 561)
@@ -0,0 +1,510 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore>
+#include <QtGui>
+#include <QtNetwork>
+#include <QtSvg>
+
+#if defined (Q_OS_SYMBIAN)
+#include "sym_iap_util.h"
+#endif
+
+class WeatherInfo: public QMainWindow
+{
+    Q_OBJECT
+
+private:
+
+    QGraphicsView *m_view;
+    QGraphicsScene m_scene;
+    QString city;
+    QGraphicsRectItem *m_statusItem;
+    QGraphicsTextItem *m_temperatureItem;
+    QGraphicsTextItem *m_conditionItem;
+    QGraphicsSvgItem *m_iconItem;
+    QList<QGraphicsRectItem*> m_forecastItems;
+    QList<QGraphicsTextItem*> m_dayItems;
+    QList<QGraphicsSvgItem*> m_conditionItems;
+    QList<QGraphicsTextItem*> m_rangeItems;
+    QTimeLine m_timeLine;
+    QHash<QString, QString> m_icons;
+
+public:
+    WeatherInfo(QWidget *parent = 0): QMainWindow(parent) {
+
+        m_view = new QGraphicsView(this);
+        setCentralWidget(m_view);
+
+        setupScene();
+        m_view->setScene(&m_scene);
+        m_view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+        m_view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+
+        m_view->setFrameShape(QFrame::NoFrame);
+        setWindowTitle("Weather Info");
+
+        QStringList cities;
+        cities << "Oslo";
+        cities << "Berlin";
+        cities << "Brisbane";
+        cities << "Helsinki";
+        cities << "San Diego";
+        for (int i = 0; i < cities.count(); ++i) {
+            QAction *action = new QAction(cities[i], this);
+            connect(action, SIGNAL(triggered()), SLOT(chooseCity()));
+            addAction(action);
+#if defined(Q_OS_SYMBIAN)
+            menuBar()->addAction(action);
+#endif
+        }
+        setContextMenuPolicy(Qt::ActionsContextMenu);
+
+        QTimer::singleShot(0, this, SLOT(delayedInit()));
+    }
+
+private slots:
+    void delayedInit() {
+#if defined(Q_OS_SYMBIAN)
+        qt_SetDefaultIap();
+#endif
+        request("Oslo");
+    }
+
+private slots:
+
+    void chooseCity() {
+        QAction *action = qobject_cast<QAction*>(sender());
+        if (action)
+            request(action->text());
+    }
+
+    void handleNetworkData(QNetworkReply *networkReply) {
+        QUrl url = networkReply->url();
+        if (!networkReply->error())
+            digest(QString::fromUtf8(networkReply->readAll()));
+        networkReply->deleteLater();
+        networkReply->manager()->deleteLater();
+    }
+
+    void animate(int frame) {
+        qreal progress = static_cast<qreal>(frame) / 100;
+#if QT_VERSION >= 0x040500
+        m_iconItem->setOpacity(progress);
+#endif
+        qreal hw = width() / 2.0;
+        m_statusItem->setPos(-hw + hw * progress, 0);
+        for (int i = 0; i < m_forecastItems.count(); ++i) {
+            qreal ofs = i * 0.5 / m_forecastItems.count();
+            qreal alpha = qBound(qreal(0), 2 * (progress - ofs), qreal(1));
+#if QT_VERSION >= 0x040500
+            m_conditionItems[i]->setOpacity(alpha);
+#endif
+            QPointF pos = m_forecastItems[i]->pos();
+            if (width() > height()) {
+                qreal fx = width() - width() * 0.4 * alpha;
+                m_forecastItems[i]->setPos(fx, pos.y());
+            } else {
+                qreal fx = height() - height() * 0.5 * alpha;
+                m_forecastItems[i]->setPos(pos.x(), fx);
+            }
+        }
+    }
+
+private:
+
+    void setupScene() {
+
+        QColor textColor = palette().color(QPalette::WindowText);
+        QFont textFont = font();
+        textFont.setBold(true);
+        textFont.setPointSize(textFont.pointSize() * 2);
+
+        m_temperatureItem = m_scene.addText(QString(), textFont);
+        m_temperatureItem->setDefaultTextColor(textColor);
+
+        m_conditionItem = m_scene.addText(QString(), textFont);
+        m_conditionItem->setDefaultTextColor(textColor);
+
+        m_iconItem = new QGraphicsSvgItem;
+        m_scene.addItem(m_iconItem);
+
+        m_statusItem = m_scene.addRect(0, 0, 10, 10);
+        m_statusItem->setPen(Qt::NoPen);
+        m_statusItem->setBrush(Qt::NoBrush);
+        m_temperatureItem->setParentItem(m_statusItem);
+        m_conditionItem->setParentItem(m_statusItem);
+        m_iconItem->setParentItem(m_statusItem);
+
+        connect(&m_timeLine, SIGNAL(frameChanged(int)), SLOT(animate(int)));
+        m_timeLine.setDuration(1100);
+        m_timeLine.setFrameRange(0, 100);
+        m_timeLine.setCurveShape(QTimeLine::EaseInCurve);
+    }
+
+    void request(const QString &location) {
+        QUrl url("http://www.google.com/ig/api");
+        url.addEncodedQueryItem("hl", "en");
+        url.addEncodedQueryItem("weather", QUrl::toPercentEncoding(location));
+
+        QNetworkAccessManager *manager = new QNetworkAccessManager(this);
+        connect(manager, SIGNAL(finished(QNetworkReply*)),
+                this, SLOT(handleNetworkData(QNetworkReply*)));
+        manager->get(QNetworkRequest(url));
+
+        city = QString();
+        setWindowTitle("Loading...");
+    }
+
+    QString extractIcon(const QString &data) {
+        if (m_icons.isEmpty()) {
+            m_icons["mostly_cloudy"]    = "weather-few-clouds";
+            m_icons["cloudy"]           = "weather-overcast";
+            m_icons["mostly_sunny"]     = "weather-sunny-very-few-clouds";
+            m_icons["partly_cloudy"]    = "weather-sunny-very-few-clouds";
+            m_icons["sunny"]            = "weather-sunny";
+            m_icons["flurries"]         = "weather-snow";
+            m_icons["fog"]              = "weather-fog";
+            m_icons["haze"]             = "weather-haze";
+            m_icons["icy"]              = "weather-icy";
+            m_icons["sleet"]            = "weather-sleet";
+            m_icons["chance_of_sleet"]  = "weather-sleet";
+            m_icons["snow"]             = "weather-snow";
+            m_icons["chance_of_snow"]   = "weather-snow";
+            m_icons["mist"]             = "weather-showers";
+            m_icons["rain"]             = "weather-showers";
+            m_icons["chance_of_rain"]   = "weather-showers";
+            m_icons["storm"]            = "weather-storm";
+            m_icons["chance_of_storm"]  = "weather-storm";
+            m_icons["thunderstorm"]     = "weather-thundershower";
+            m_icons["chance_of_tstorm"] = "weather-thundershower";
+        }
+        QRegExp regex("([\\w]+).gif$");
+        if (regex.indexIn(data) != -1) {
+            QString i = regex.cap();
+            i = i.left(i.length() - 4);
+            QString name = m_icons.value(i);
+            if (!name.isEmpty()) {
+                name.prepend(":/icons/");
+                name.append(".svg");
+                return name;
+            }
+        }
+        return QString();
+    }
+
+    static QString toCelcius(QString t, QString unit) {
+        bool ok = false;
+        int degree = t.toInt(&ok);
+        if (!ok)
+            return QString();
+        if (unit != "SI")
+            degree = ((degree - 32) * 5 + 8)/ 9;
+        return QString::number(degree) + QChar(176);
+    }
+
+
+#define GET_DATA_ATTR xml.attributes().value("data").toString()
+
+    void digest(const QString &data) {
+
+        QColor textColor = palette().color(QPalette::WindowText);
+        QString unitSystem;
+
+        delete m_iconItem;
+        m_iconItem = new QGraphicsSvgItem();
+        m_scene.addItem(m_iconItem);
+        m_iconItem->setParentItem(m_statusItem);
+        qDeleteAll(m_dayItems);
+        qDeleteAll(m_conditionItems);
+        qDeleteAll(m_rangeItems);
+        qDeleteAll(m_forecastItems);
+        m_dayItems.clear();
+        m_conditionItems.clear();
+        m_rangeItems.clear();
+        m_forecastItems.clear();
+
+        QXmlStreamReader xml(data);
+        while (!xml.atEnd()) {
+            xml.readNext();
+            if (xml.tokenType() == QXmlStreamReader::StartElement) {
+                if (xml.name() == "city") {
+                    city = GET_DATA_ATTR;
+                    setWindowTitle(city);
+                }
+                if (xml.name() == "unit_system")
+                    unitSystem = xml.attributes().value("data").toString();
+                // Parse current weather conditions
+                if (xml.name() == "current_conditions") {
+                    while (!xml.atEnd()) {
+                        xml.readNext();
+                        if (xml.name() == "current_conditions")
+                            break;
+                        if (xml.tokenType() == QXmlStreamReader::StartElement) {
+                            if (xml.name() == "condition") {
+                                m_conditionItem->setPlainText(GET_DATA_ATTR);
+                            }
+                            if (xml.name() == "icon") {
+                                QString name = extractIcon(GET_DATA_ATTR);
+                                if (!name.isEmpty()) {
+                                    delete m_iconItem;
+                                    m_iconItem = new QGraphicsSvgItem(name);
+                                    m_scene.addItem(m_iconItem);
+                                    m_iconItem->setParentItem(m_statusItem);
+                                }
+                            }
+                            if (xml.name() == "temp_c") {
+                                QString s = GET_DATA_ATTR + QChar(176);
+                                m_temperatureItem->setPlainText(s);
+                            }
+                        }
+                    }
+                }
+                // Parse and collect the forecast conditions
+                if (xml.name() == "forecast_conditions") {
+                    QGraphicsTextItem *dayItem  = 0;
+                    QGraphicsSvgItem *statusItem = 0;
+                    QString lowT, highT;
+                    while (!xml.atEnd()) {
+                        xml.readNext();
+                        if (xml.name() == "forecast_conditions") {
+                            if (dayItem && statusItem &&
+                                !lowT.isEmpty() && !highT.isEmpty()) {
+                                m_dayItems << dayItem;
+                                m_conditionItems << statusItem;
+                                QString txt = highT + '/' + lowT;
+                                QGraphicsTextItem* rangeItem;
+                                rangeItem = m_scene.addText(txt);
+                                rangeItem->setDefaultTextColor(textColor);
+                                m_rangeItems << rangeItem;
+                                QGraphicsRectItem *box;
+                                box = m_scene.addRect(0, 0, 10, 10);
+                                box->setPen(Qt::NoPen);
+                                box->setBrush(Qt::NoBrush);
+                                m_forecastItems << box;
+                                dayItem->setParentItem(box);
+                                statusItem->setParentItem(box);
+                                rangeItem->setParentItem(box);
+                            } else {
+                                delete dayItem;
+                                delete statusItem;
+                            }
+                            break;
+                        }
+                        if (xml.tokenType() == QXmlStreamReader::StartElement) {
+                            if (xml.name() == "day_of_week") {
+                                QString s = GET_DATA_ATTR;
+                                dayItem = m_scene.addText(s.left(3));
+                                dayItem->setDefaultTextColor(textColor);
+                            }
+                            if (xml.name() == "icon") {
+                                QString name = extractIcon(GET_DATA_ATTR);
+                                if (!name.isEmpty()) {
+                                    statusItem = new QGraphicsSvgItem(name);
+                                    m_scene.addItem(statusItem);
+                                }
+                            }
+                            if (xml.name() == "low")
+                                lowT = toCelcius(GET_DATA_ATTR, unitSystem);
+                            if (xml.name() == "high")
+                                highT = toCelcius(GET_DATA_ATTR, unitSystem);
+                        }
+                    }
+                }
+
+            }
+        }
+
+        m_timeLine.stop();
+        layoutItems();
+        animate(0);
+        m_timeLine.start();
+    }
+
+    void layoutItems() {
+        m_scene.setSceneRect(0, 0, width() - 1, height() - 1);
+        m_view->centerOn(width() / 2, height() / 2);
+        if (width() > height())
+            layoutItemsLandscape();
+        else
+            layoutItemsPortrait();
+    }
+
+    void layoutItemsLandscape() {
+        m_statusItem->setRect(0, 0, width() / 2 - 1, height() - 1);
+
+        if (!m_iconItem->boundingRect().isEmpty()) {
+            qreal dim = qMin(width() * 0.6, height() * 0.8);
+            qreal pad = (height()  - dim) / 2;
+            qreal sw = dim / m_iconItem->boundingRect().width();
+            qreal sh = dim / m_iconItem->boundingRect().height();
+            m_iconItem->setTransform(QTransform().scale(sw, sh));
+            m_iconItem->setPos(1, pad);
+        }
+
+        m_temperatureItem->setPos(2, 2);
+        qreal h = m_conditionItem->boundingRect().height();
+        m_conditionItem->setPos(10, height() - h);
+
+        if (m_dayItems.count()) {
+            qreal left = width() * 0.6;
+            qreal h = height() / m_dayItems.count();
+            QFont textFont = font();
+            textFont.setPixelSize(static_cast<int>(h * 0.3));
+            qreal statusWidth = 0;
+            qreal rangeWidth = 0;
+            for (int i = 0; i < m_dayItems.count(); ++i) {
+                m_dayItems[i]->setFont(textFont);
+                QRectF brect = m_dayItems[i]->boundingRect();
+                statusWidth = qMax(statusWidth, brect.width());
+                brect = m_rangeItems[i]->boundingRect();
+                rangeWidth = qMax(rangeWidth, brect.width());
+            }
+            qreal space = width() - left - statusWidth - rangeWidth;
+            qreal dim = qMin(h, space);
+            qreal pad = statusWidth + (space  - dim) / 2;
+            for (int i = 0; i < m_dayItems.count(); ++i) {
+                qreal base = h * i;
+                m_forecastItems[i]->setPos(left, base);
+                m_forecastItems[i]->setRect(0, 0, width() - left, h);
+                QRectF brect = m_dayItems[i]->boundingRect();
+                qreal ofs = (h - brect.height()) / 2;
+                m_dayItems[i]->setPos(0, ofs);
+                brect = m_rangeItems[i]->boundingRect();
+                ofs = (h - brect.height()) / 2;
+                m_rangeItems[i]->setPos(width() - rangeWidth - left, ofs);
+                brect = m_conditionItems[i]->boundingRect();
+                ofs = (h - dim) / 2;
+                m_conditionItems[i]->setPos(pad, ofs);
+                if (brect.isEmpty())
+                    continue;
+                qreal sw = dim / brect.width();
+                qreal sh = dim / brect.height();
+                m_conditionItems[i]->setTransform(QTransform().scale(sw, sh));
+            }
+        }
+    }
+
+    void layoutItemsPortrait() {
+
+        m_statusItem->setRect(0, 0, width() - 1, height() / 2 - 1);
+
+        if (!m_iconItem->boundingRect().isEmpty()) {
+            qreal dim = qMin(width() * 0.8, height() * 0.4);
+            qreal ofsy = (height() / 2  - dim) / 2;
+            qreal ofsx = (width() - dim) / 3;
+            qreal sw = dim / m_iconItem->boundingRect().width();
+            qreal sh = dim / m_iconItem->boundingRect().height();
+            m_iconItem->setTransform(QTransform().scale(sw, sh));
+            m_iconItem->setPos(ofsx, ofsy);
+        }
+
+        m_temperatureItem->setPos(2, 2);
+        qreal ch = m_conditionItem->boundingRect().height();
+        qreal cw = m_conditionItem->boundingRect().width();
+        m_conditionItem->setPos(width() - cw , height() / 2 - ch - 20);
+
+        if (m_dayItems.count()) {
+            qreal top = height() * 0.5;
+            qreal w = width() / m_dayItems.count();
+            qreal statusHeight = 0;
+            qreal rangeHeight = 0;
+            for (int i = 0; i < m_dayItems.count(); ++i) {
+                m_dayItems[i]->setFont(font());
+                QRectF brect = m_dayItems[i]->boundingRect();
+                statusHeight = qMax(statusHeight, brect.height());
+                brect = m_rangeItems[i]->boundingRect();
+                rangeHeight = qMax(rangeHeight, brect.height());
+            }
+            qreal space = height() - top - statusHeight - rangeHeight;
+            qreal dim = qMin(w, space);
+
+            qreal boxh = statusHeight + rangeHeight + dim;
+            qreal pad = (height() - top - boxh) / 2;
+
+            for (int i = 0; i < m_dayItems.count(); ++i) {
+                qreal base = w * i;
+                m_forecastItems[i]->setPos(base, top);
+                m_forecastItems[i]->setRect(0, 0, w, boxh);
+                QRectF brect = m_dayItems[i]->boundingRect();
+                qreal ofs = (w - brect.width()) / 2;
+                m_dayItems[i]->setPos(ofs, pad);
+
+                brect = m_rangeItems[i]->boundingRect();
+                ofs = (w - brect.width()) / 2;
+                m_rangeItems[i]->setPos(ofs, pad + statusHeight + dim);
+
+                brect = m_conditionItems[i]->boundingRect();
+                ofs = (w - dim) / 2;
+                m_conditionItems[i]->setPos(ofs, pad + statusHeight);
+                if (brect.isEmpty())
+                    continue;
+                qreal sw = dim / brect.width();
+                qreal sh = dim / brect.height();
+                m_conditionItems[i]->setTransform(QTransform().scale(sw, sh));
+            }
+        }
+    }
+
+
+    void resizeEvent(QResizeEvent *event) {
+        Q_UNUSED(event);
+        layoutItems();
+    }
+
+};
+
+#include "weatherinfo.moc"
+
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+
+    WeatherInfo w;
+#if defined(Q_OS_SYMBIAN)
+    w.showMaximized();
+#else
+    w.resize(520, 288);
+    w.show();
+#endif
+
+    return app.exec();
+}
Index: trunk/demos/embedded/weatherinfo/weatherinfo.pro
===================================================================
--- trunk/demos/embedded/weatherinfo/weatherinfo.pro	(revision 561)
+++ trunk/demos/embedded/weatherinfo/weatherinfo.pro	(revision 561)
@@ -0,0 +1,18 @@
+TEMPLATE = app
+TARGET = weatherinfo
+SOURCES = weatherinfo.cpp
+RESOURCES = weatherinfo.qrc
+QT += network svg
+
+symbian {
+    TARGET.UID3 = 0xA000CF77
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+    HEADERS += $$QT_SOURCE_TREE/examples/network/qftp/sym_iap_util.h
+    LIBS += -lesock -lconnmon -linsock
+    TARGET.CAPABILITY = NetworkServices
+}
+
+target.path = $$[QT_INSTALL_DEMOS]/embedded/weatherinfo
+sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro
+sources.path = $$[QT_INSTALL_DEMOS]/embedded/weatherinfo
+INSTALLS += target sources
Index: trunk/demos/embedded/weatherinfo/weatherinfo.qrc
===================================================================
--- trunk/demos/embedded/weatherinfo/weatherinfo.qrc	(revision 561)
+++ trunk/demos/embedded/weatherinfo/weatherinfo.qrc	(revision 561)
@@ -0,0 +1,16 @@
+<RCC>
+    <qresource prefix="/" >
+        <file>icons/weather-few-clouds.svg</file>
+        <file>icons/weather-fog.svg</file>
+        <file>icons/weather-haze.svg</file>
+        <file>icons/weather-icy.svg</file>
+        <file>icons/weather-overcast.svg</file>
+        <file>icons/weather-showers.svg</file>
+        <file>icons/weather-sleet.svg</file>
+        <file>icons/weather-snow.svg</file>
+        <file>icons/weather-storm.svg</file>
+        <file>icons/weather-sunny.svg</file>
+        <file>icons/weather-sunny-very-few-clouds.svg</file>
+        <file>icons/weather-thundershower.svg</file>
+    </qresource>
+</RCC>
Index: trunk/demos/embeddeddialogs/customproxy.cpp
===================================================================
--- trunk/demos/embeddeddialogs/customproxy.cpp	(revision 521)
+++ trunk/demos/embeddeddialogs/customproxy.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/embeddeddialogs/customproxy.h
===================================================================
--- trunk/demos/embeddeddialogs/customproxy.h	(revision 521)
+++ trunk/demos/embeddeddialogs/customproxy.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/embeddeddialogs/embeddeddialog.cpp
===================================================================
--- trunk/demos/embeddeddialogs/embeddeddialog.cpp	(revision 521)
+++ trunk/demos/embeddeddialogs/embeddeddialog.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -62,6 +62,6 @@
     connect(ui->spacing, SIGNAL(valueChanged(int)),
             this, SLOT(spacingChanged(int)));
-    connect(ui->fontComboBox, SIGNAL(currentFontChanged(const QFont &)),
-            this, SLOT(fontChanged(const QFont &)));
+    connect(ui->fontComboBox, SIGNAL(currentFontChanged(QFont)),
+            this, SLOT(fontChanged(QFont)));
     connect(ui->style, SIGNAL(activated(QString)),
             this, SLOT(styleChanged(QString)));
Index: trunk/demos/embeddeddialogs/embeddeddialog.h
===================================================================
--- trunk/demos/embeddeddialogs/embeddeddialog.h	(revision 521)
+++ trunk/demos/embeddeddialogs/embeddeddialog.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/embeddeddialogs/embeddeddialogs.pro
===================================================================
--- trunk/demos/embeddeddialogs/embeddeddialogs.pro	(revision 521)
+++ trunk/demos/embeddeddialogs/embeddeddialogs.pro	(revision 561)
@@ -16,2 +16,4 @@
 sources.path = $$[QT_INSTALL_DEMOS]/embeddeddialogs
 INSTALLS += target sources
+
+symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
Index: trunk/demos/embeddeddialogs/main.cpp
===================================================================
--- trunk/demos/embeddeddialogs/main.cpp	(revision 521)
+++ trunk/demos/embeddeddialogs/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -77,5 +77,4 @@
     view.setRenderHints(view.renderHints() | QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
     view.setBackgroundBrush(QPixmap(":/No-Ones-Laughing-3.jpg"));
-    view.setCacheMode(QGraphicsView::CacheBackground);
     view.setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
     view.show();
Index: trunk/demos/gradients/gradients.cpp
===================================================================
--- trunk/demos/gradients/gradients.cpp	(revision 521)
+++ trunk/demos/gradients/gradients.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -79,5 +79,5 @@
     setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
 
-    connect(m_hoverPoints, SIGNAL(pointsChanged(const QPolygonF &)), this, SIGNAL(colorsChanged()));
+    connect(m_hoverPoints, SIGNAL(pointsChanged(QPolygonF)), this, SIGNAL(colorsChanged()));
 }
 
@@ -356,6 +356,6 @@
     editorGroupLayout->addWidget(default4Button);
 
-    connect(m_editor, SIGNAL(gradientStopsChanged(const QGradientStops &)),
-            m_renderer, SLOT(setGradientStops(const QGradientStops &)));
+    connect(m_editor, SIGNAL(gradientStopsChanged(QGradientStops)),
+            m_renderer, SLOT(setGradientStops(QGradientStops)));
 
     connect(m_linearButton, SIGNAL(clicked()), m_renderer, SLOT(setLinearGradient()));
Index: trunk/demos/gradients/gradients.h
===================================================================
--- trunk/demos/gradients/gradients.h	(revision 521)
+++ trunk/demos/gradients/gradients.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/gradients/gradients.pro
===================================================================
--- trunk/demos/gradients/gradients.pro	(revision 521)
+++ trunk/demos/gradients/gradients.pro	(revision 561)
@@ -17,2 +17,4 @@
 sources.path = $$[QT_INSTALL_DEMOS]/gradients
 INSTALLS += target sources
+
+symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
Index: trunk/demos/gradients/main.cpp
===================================================================
--- trunk/demos/gradients/main.cpp	(revision 521)
+++ trunk/demos/gradients/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -54,6 +54,8 @@
     gradientWidget.setStyle(arthurStyle);
     QList<QWidget *> widgets = qFindChildren<QWidget *>(&gradientWidget);
-    foreach (QWidget *w, widgets)
+    foreach (QWidget *w, widgets) {
         w->setStyle(arthurStyle);
+        w->setAttribute(Qt::WA_AcceptTouchEvents);
+    }
     gradientWidget.show();
 
Index: trunk/demos/interview/interview.pro
===================================================================
--- trunk/demos/interview/interview.pro	(revision 521)
+++ trunk/demos/interview/interview.pro	(revision 561)
@@ -17,2 +17,3 @@
 INSTALLS += target sources
 
+symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
Index: trunk/demos/interview/main.cpp
===================================================================
--- trunk/demos/interview/main.cpp	(revision 521)
+++ trunk/demos/interview/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/interview/model.cpp
===================================================================
--- trunk/demos/interview/model.cpp	(revision 521)
+++ trunk/demos/interview/model.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/interview/model.h
===================================================================
--- trunk/demos/interview/model.h	(revision 521)
+++ trunk/demos/interview/model.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/macmainwindow/macmainwindow.h
===================================================================
--- trunk/demos/macmainwindow/macmainwindow.h	(revision 521)
+++ trunk/demos/macmainwindow/macmainwindow.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/macmainwindow/macmainwindow.mm
===================================================================
--- trunk/demos/macmainwindow/macmainwindow.mm	(revision 521)
+++ trunk/demos/macmainwindow/macmainwindow.mm	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/macmainwindow/macmainwindow.pro
===================================================================
--- trunk/demos/macmainwindow/macmainwindow.pro	(revision 521)
+++ trunk/demos/macmainwindow/macmainwindow.pro	(revision 561)
@@ -13,5 +13,5 @@
 }
 
-LIBS += -framework Cocoa
+LIBS += -framework Cocoa -framework Carbon
 
 # install
Index: trunk/demos/macmainwindow/main.cpp
===================================================================
--- trunk/demos/macmainwindow/main.cpp	(revision 521)
+++ trunk/demos/macmainwindow/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/mainwindow/colorswatch.cpp
===================================================================
--- trunk/demos/mainwindow/colorswatch.cpp	(revision 521)
+++ trunk/demos/mainwindow/colorswatch.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/mainwindow/colorswatch.h
===================================================================
--- trunk/demos/mainwindow/colorswatch.h	(revision 521)
+++ trunk/demos/mainwindow/colorswatch.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/mainwindow/main.cpp
===================================================================
--- trunk/demos/mainwindow/main.cpp	(revision 521)
+++ trunk/demos/mainwindow/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/mainwindow/mainwindow.cpp
===================================================================
--- trunk/demos/mainwindow/mainwindow.cpp	(revision 521)
+++ trunk/demos/mainwindow/mainwindow.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/mainwindow/mainwindow.h
===================================================================
--- trunk/demos/mainwindow/mainwindow.h	(revision 521)
+++ trunk/demos/mainwindow/mainwindow.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/mainwindow/mainwindow.pro
===================================================================
--- trunk/demos/mainwindow/mainwindow.pro	(revision 521)
+++ trunk/demos/mainwindow/mainwindow.pro	(revision 561)
@@ -15,2 +15,3 @@
 INSTALLS += target sources
 
+symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
Index: trunk/demos/mainwindow/toolbar.cpp
===================================================================
--- trunk/demos/mainwindow/toolbar.cpp	(revision 521)
+++ trunk/demos/mainwindow/toolbar.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/mainwindow/toolbar.h
===================================================================
--- trunk/demos/mainwindow/toolbar.h	(revision 521)
+++ trunk/demos/mainwindow/toolbar.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/pathstroke/main.cpp
===================================================================
--- trunk/demos/pathstroke/main.cpp	(revision 521)
+++ trunk/demos/pathstroke/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -58,6 +58,8 @@
     pathStrokeWidget.setStyle(arthurStyle);
     QList<QWidget *> widgets = qFindChildren<QWidget *>(&pathStrokeWidget);
-    foreach (QWidget *w, widgets)
+    foreach (QWidget *w, widgets) {
         w->setStyle(arthurStyle);
+        w->setAttribute(Qt::WA_AcceptTouchEvents);
+    }
 
     if (smallScreen)
@@ -66,4 +68,7 @@
         pathStrokeWidget.show();
 
+#ifdef QT_KEYPAD_NAVIGATION
+    QApplication::setNavigationMode(Qt::NavigationModeCursorAuto);
+#endif
     return app.exec();
 }
Index: trunk/demos/pathstroke/pathstroke.cpp
===================================================================
--- trunk/demos/pathstroke/pathstroke.cpp	(revision 521)
+++ trunk/demos/pathstroke/pathstroke.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -403,4 +403,5 @@
     m_wasAnimated = true;
     setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    setAttribute(Qt::WA_AcceptTouchEvents);
 }
 
@@ -511,8 +512,4 @@
     Q_ASSERT(m_points.size() == m_vectors.size());
     for (int i=0; i<m_points.size(); ++i) {
-
-        if (i == m_activePoint)
-            continue;
-
         QPointF pos = m_points.at(i);
         QPointF vec = m_vectors.at(i);
@@ -533,4 +530,6 @@
 void PathStrokeRenderer::mousePressEvent(QMouseEvent *e)
 {
+    if (!m_fingerPointMapping.isEmpty())
+        return;
     setDescriptionEnabled(false);
     m_activePoint = -1;
@@ -557,4 +556,6 @@
 void PathStrokeRenderer::mouseMoveEvent(QMouseEvent *e)
 {
+    if (!m_fingerPointMapping.isEmpty())
+        return;
     // If we've moved more then 25 pixels, assume user is dragging
     if (!m_mouseDrag && QPoint(m_mousePress - e->pos()).manhattanLength() > 25)
@@ -569,4 +570,6 @@
 void PathStrokeRenderer::mouseReleaseEvent(QMouseEvent *)
 {
+    if (!m_fingerPointMapping.isEmpty())
+        return;
     m_activePoint = -1;
     setAnimation(m_wasAnimated);
@@ -587,4 +590,88 @@
 }
 
+bool PathStrokeRenderer::event(QEvent *e)
+{
+    bool touchBegin = false;
+    switch (e->type()) {
+    case QEvent::TouchBegin:
+        touchBegin = true;
+    case QEvent::TouchUpdate:
+        {
+            const QTouchEvent *const event = static_cast<const QTouchEvent*>(e);
+            const QList<QTouchEvent::TouchPoint> points = event->touchPoints();
+            foreach (const QTouchEvent::TouchPoint &touchPoint, points) {
+                const int id = touchPoint.id();
+                switch (touchPoint.state()) {
+                case Qt::TouchPointPressed:
+                    {
+                        // find the point, move it
+                        QSet<int> activePoints = QSet<int>::fromList(m_fingerPointMapping.values());
+                        int activePoint = -1;
+                        qreal distance = -1;
+                        const int pointsCount = m_points.size();
+                        for (int i=0; i<pointsCount; ++i) {
+                            if (activePoints.contains(i))
+                                continue;
+
+                            qreal d = QLineF(touchPoint.pos(), m_points.at(i)).length();
+                            if ((distance < 0 && d < 12 * m_pointSize) || d < distance) {
+                                distance = d;
+                                activePoint = i;
+                            }
+                        }
+                        if (activePoint != -1) {
+                            m_fingerPointMapping.insert(touchPoint.id(), activePoint);
+                            m_points[activePoint] = touchPoint.pos();
+                        }
+                    }
+                    break;
+                case Qt::TouchPointReleased:
+                    {
+                        // move the point and release
+                        QHash<int,int>::iterator it = m_fingerPointMapping.find(id);
+                        m_points[it.value()] = touchPoint.pos();
+                        m_fingerPointMapping.erase(it);
+                    }
+                    break;
+                case Qt::TouchPointMoved:
+                    {
+                        // move the point
+                        const int pointIdx = m_fingerPointMapping.value(id, -1);
+                        if (pointIdx >= 0)
+                            m_points[pointIdx] = touchPoint.pos();
+                    }
+                    break;
+                default:
+                    break;
+                }
+            }
+            if (m_fingerPointMapping.isEmpty()) {
+                e->ignore();
+                return false;
+            } else {
+                if (touchBegin) {
+                    m_wasAnimated = m_timer.isActive();
+                    setAnimation(false);
+                }
+                update();
+                return true;
+            }
+        }
+        break;
+    case QEvent::TouchEnd:
+        if (m_fingerPointMapping.isEmpty()) {
+            e->ignore();
+            return false;
+        }
+        m_fingerPointMapping.clear();
+        setAnimation(m_wasAnimated);
+        return true;
+        break;
+    default:
+        break;
+    }
+    return QWidget::event(e);
+}
+
 void PathStrokeRenderer::setAnimation(bool animation)
 {
Index: trunk/demos/pathstroke/pathstroke.h
===================================================================
--- trunk/demos/pathstroke/pathstroke.h	(revision 521)
+++ trunk/demos/pathstroke/pathstroke.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -61,4 +61,5 @@
     void mouseReleaseEvent(QMouseEvent *e);
     void timerEvent(QTimerEvent *e);
+    bool event(QEvent *e);
 
     QSize sizeHint() const { return QSize(500, 500); }
@@ -119,4 +120,6 @@
     QPoint m_mousePress;
     bool m_mouseDrag;
+
+    QHash<int, int> m_fingerPointMapping;
 };
 
Index: trunk/demos/pathstroke/pathstroke.pro
===================================================================
--- trunk/demos/pathstroke/pathstroke.pro	(revision 521)
+++ trunk/demos/pathstroke/pathstroke.pro	(revision 561)
@@ -19,2 +19,6 @@
 INSTALLS += target sources
 
+symbian {
+    TARGET.UID3 = 0xA000A63E
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+}
Index: trunk/demos/qmediaplayer/main.cpp
===================================================================
--- trunk/demos/qmediaplayer/main.cpp	(revision 561)
+++ trunk/demos/qmediaplayer/main.cpp	(revision 561)
@@ -0,0 +1,89 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+***************************************************************************/
+
+#include <QtGui>
+#include "mediaplayer.h"
+
+int main (int argc, char *argv[])
+{
+    Q_INIT_RESOURCE(mediaplayer);
+    QApplication app(argc, argv);
+    app.setApplicationName("Media Player");
+    app.setOrganizationName("Qt");
+    app.setQuitOnLastWindowClosed(true);
+
+    bool hasSmallScreen =
+#ifdef Q_OS_SYMBIAN
+        /* On Symbian, we always want fullscreen. One reason is that it's not
+         * possible to launch any demos from the fluidlauncher due to a
+         * limitation in the emulator. */
+        true
+#else
+        false
+#endif
+    ;
+
+    QString fileString;
+    const QStringList args(app.arguments());
+    /* We have a minor problem here, we accept two arguments, both are
+     * optional:
+     * - A file name
+     * - the option "-small-screen", so let's try to cope with that.
+     */
+    for (int i = 0; i < args.count(); ++i) {
+        const QString &at = args.at(i);
+
+        if (at == QLatin1String("-small-screen"))
+            hasSmallScreen = true;
+        else if (i > 0) // We don't want the app name.
+            fileString = at;
+    }
+
+    MediaPlayer player(fileString, hasSmallScreen);
+
+    if (hasSmallScreen)
+        player.showMaximized();
+    else
+        player.show();
+
+    return app.exec();
+}
+
Index: trunk/demos/qmediaplayer/mediaplayer.cpp
===================================================================
--- trunk/demos/qmediaplayer/mediaplayer.cpp	(revision 561)
+++ trunk/demos/qmediaplayer/mediaplayer.cpp	(revision 561)
@@ -0,0 +1,939 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+***************************************************************************/
+
+#include <QtGui>
+
+#define SLIDER_RANGE 8
+
+#include "mediaplayer.h"
+#include "ui_settings.h"
+
+
+MediaVideoWidget::MediaVideoWidget(MediaPlayer *player, QWidget *parent) :
+    Phonon::VideoWidget(parent), m_player(player), m_action(this)
+{
+    m_action.setCheckable(true);
+    m_action.setChecked(false);
+    m_action.setShortcut(QKeySequence( Qt::AltModifier + Qt::Key_Return));
+    m_action.setShortcutContext(Qt::WindowShortcut);
+    connect(&m_action, SIGNAL(toggled(bool)), SLOT(setFullScreen(bool)));
+    addAction(&m_action);
+    setAcceptDrops(true);
+}
+
+void MediaVideoWidget::setFullScreen(bool enabled)
+{
+    Phonon::VideoWidget::setFullScreen(enabled);
+    emit fullScreenChanged(enabled);
+}
+
+void MediaVideoWidget::mouseDoubleClickEvent(QMouseEvent *e)
+{
+    Phonon::VideoWidget::mouseDoubleClickEvent(e);
+    setFullScreen(!isFullScreen());
+}
+
+void MediaVideoWidget::keyPressEvent(QKeyEvent *e)
+{
+    if(!e->modifiers()) {
+        // On non-QWERTY Symbian key-based devices, there is no space key.
+        // The zero key typically is marked with a space character.
+        if (e->key() == Qt::Key_Space || e->key() == Qt::Key_0) {
+            m_player->playPause();
+            e->accept();
+            return;
+        }
+
+        // On Symbian devices, there is no key which maps to Qt::Key_Escape
+        // On devices which lack a backspace key (i.e. non-QWERTY devices),
+        // the 'C' key maps to Qt::Key_Backspace
+        else if (e->key() == Qt::Key_Escape || e->key() == Qt::Key_Backspace) {
+            setFullScreen(false);
+            e->accept();
+            return;
+        }
+    }
+    Phonon::VideoWidget::keyPressEvent(e);
+}
+
+bool MediaVideoWidget::event(QEvent *e)
+{
+    switch(e->type())
+    {
+    case QEvent::Close:
+        //we just ignore the cose events on the video widget
+        //this prevents ALT+F4 from having an effect in fullscreen mode
+        e->ignore();
+        return true;
+    case QEvent::MouseMove:
+#ifndef QT_NO_CURSOR
+        unsetCursor();
+#endif
+        //fall through
+    case QEvent::WindowStateChange:
+        {
+            //we just update the state of the checkbox, in case it wasn't already
+            m_action.setChecked(windowState() & Qt::WindowFullScreen);
+            const Qt::WindowFlags flags = m_player->windowFlags();
+            if (windowState() & Qt::WindowFullScreen) {
+                m_timer.start(1000, this);
+            } else {
+                m_timer.stop();
+#ifndef QT_NO_CURSOR
+                unsetCursor();
+#endif
+            }
+        }
+        break;
+    default:
+        break;
+    }
+
+    return Phonon::VideoWidget::event(e);
+}
+
+void MediaVideoWidget::timerEvent(QTimerEvent *e)
+{
+    if (e->timerId() == m_timer.timerId()) {
+        //let's store the cursor shape
+#ifndef QT_NO_CURSOR
+        setCursor(Qt::BlankCursor);
+#endif
+    }
+    Phonon::VideoWidget::timerEvent(e);
+}
+
+void MediaVideoWidget::dropEvent(QDropEvent *e)
+{
+    m_player->handleDrop(e);
+}
+
+void MediaVideoWidget::dragEnterEvent(QDragEnterEvent *e) {
+    if (e->mimeData()->hasUrls())
+        e->acceptProposedAction();
+}
+
+
+MediaPlayer::MediaPlayer(const QString &filePath,
+                         const bool hasSmallScreen) :
+        playButton(0), nextEffect(0), settingsDialog(0), ui(0),
+            m_AudioOutput(Phonon::VideoCategory),
+            m_videoWidget(new MediaVideoWidget(this)),
+            m_hasSmallScreen(hasSmallScreen)
+{
+    setWindowTitle(tr("Media Player"));
+    setContextMenuPolicy(Qt::CustomContextMenu);
+    m_videoWidget->setContextMenuPolicy(Qt::CustomContextMenu);
+ 
+    QSize buttonSize(34, 28);
+
+    QPushButton *openButton = new QPushButton(this);
+
+    openButton->setIcon(style()->standardIcon(QStyle::SP_DialogOpenButton));
+    QPalette bpal;
+    QColor arrowcolor = bpal.buttonText().color();
+    if (arrowcolor == Qt::black)
+        arrowcolor = QColor(80, 80, 80);
+    bpal.setBrush(QPalette::ButtonText, arrowcolor);
+    openButton->setPalette(bpal);
+
+    rewindButton = new QPushButton(this);
+    rewindButton->setIcon(style()->standardIcon(QStyle::SP_MediaSkipBackward));
+
+    forwardButton = new QPushButton(this);
+    forwardButton->setIcon(style()->standardIcon(QStyle::SP_MediaSkipForward));
+    forwardButton->setEnabled(false);
+
+    playButton = new QPushButton(this);
+    playIcon = style()->standardIcon(QStyle::SP_MediaPlay);
+    pauseIcon = style()->standardIcon(QStyle::SP_MediaPause);
+    playButton->setIcon(playIcon);
+
+    slider = new Phonon::SeekSlider(this);
+    slider->setMediaObject(&m_MediaObject);
+    volume = new Phonon::VolumeSlider(&m_AudioOutput);
+ 
+    QVBoxLayout *vLayout = new QVBoxLayout(this);
+    vLayout->setContentsMargins(8, 8, 8, 8);    
+
+    QHBoxLayout *layout = new QHBoxLayout();
+
+    info = new QLabel(this);
+    info->setMinimumHeight(70);
+    info->setAcceptDrops(false);
+    info->setMargin(2);
+    info->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
+    info->setLineWidth(2);
+    info->setAutoFillBackground(true);
+
+    QPalette palette;
+    palette.setBrush(QPalette::WindowText, Qt::white);
+#ifndef Q_WS_MAC
+    openButton->setMinimumSize(54, buttonSize.height());
+    rewindButton->setMinimumSize(buttonSize);
+    forwardButton->setMinimumSize(buttonSize);
+    playButton->setMinimumSize(buttonSize);
+#endif
+    info->setStyleSheet("border-image:url(:/images/screen.png) ; border-width:3px");
+    info->setPalette(palette);
+    info->setText(tr("<center>No media</center>"));
+
+    volume->setFixedWidth(120);
+
+    layout->addWidget(openButton);
+    layout->addWidget(rewindButton);
+    layout->addWidget(playButton);
+    layout->addWidget(forwardButton);
+
+    layout->addStretch();
+    layout->addWidget(volume);
+
+    vLayout->addWidget(info);
+    initVideoWindow();
+    vLayout->addWidget(&m_videoWindow);
+    QVBoxLayout *buttonPanelLayout = new QVBoxLayout();
+    m_videoWindow.hide();
+    buttonPanelLayout->addLayout(layout);
+    
+    timeLabel = new QLabel(this);
+    progressLabel = new QLabel(this);
+    QWidget *sliderPanel = new QWidget(this);
+    QHBoxLayout *sliderLayout = new QHBoxLayout();
+    sliderLayout->addWidget(slider);
+    sliderLayout->addWidget(timeLabel);    
+    sliderLayout->addWidget(progressLabel);    
+    sliderLayout->setContentsMargins(0, 0, 0, 0);
+    sliderPanel->setLayout(sliderLayout);
+
+    buttonPanelLayout->addWidget(sliderPanel);
+    buttonPanelLayout->setContentsMargins(0, 0, 0, 0);
+#ifdef Q_OS_MAC
+    layout->setSpacing(4);
+    buttonPanelLayout->setSpacing(0);
+    info->setMinimumHeight(100);
+    info->setFont(QFont("verdana", 15));
+    // QStyle *flatButtonStyle = new QWindowsStyle;
+    openButton->setFocusPolicy(Qt::NoFocus);
+    // openButton->setStyle(flatButtonStyle);
+    // playButton->setStyle(flatButtonStyle);
+    // rewindButton->setStyle(flatButtonStyle);
+    // forwardButton->setStyle(flatButtonStyle);
+ #endif
+    QWidget *buttonPanelWidget = new QWidget(this);
+    buttonPanelWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); 
+    buttonPanelWidget->setLayout(buttonPanelLayout);    
+    vLayout->addWidget(buttonPanelWidget);
+ 
+    QHBoxLayout *labelLayout = new QHBoxLayout();
+
+    vLayout->addLayout(labelLayout);
+    setLayout(vLayout);
+
+    // Create menu bar:
+    fileMenu = new QMenu(this);
+    QAction *openFileAction = fileMenu->addAction(tr("Open &File..."));
+    QAction *openUrlAction = fileMenu->addAction(tr("Open &Location..."));
+    QAction *const openLinkAction = fileMenu->addAction(tr("Open &RAM File..."));
+
+    connect(openLinkAction, SIGNAL(triggered(bool)), this, SLOT(openRamFile()));
+
+    fileMenu->addSeparator();  
+    QMenu *aspectMenu = fileMenu->addMenu(tr("&Aspect ratio"));
+    QActionGroup *aspectGroup = new QActionGroup(aspectMenu);
+    connect(aspectGroup, SIGNAL(triggered(QAction*)), this, SLOT(aspectChanged(QAction*)));
+    aspectGroup->setExclusive(true);
+    QAction *aspectActionAuto = aspectMenu->addAction(tr("Auto"));
+    aspectActionAuto->setCheckable(true);
+    aspectActionAuto->setChecked(true);
+    aspectGroup->addAction(aspectActionAuto);
+    QAction *aspectActionScale = aspectMenu->addAction(tr("Scale"));
+    aspectActionScale->setCheckable(true);
+    aspectGroup->addAction(aspectActionScale);
+    QAction *aspectAction16_9 = aspectMenu->addAction(tr("16/9"));
+    aspectAction16_9->setCheckable(true);
+    aspectGroup->addAction(aspectAction16_9);
+    QAction *aspectAction4_3 = aspectMenu->addAction(tr("4/3"));
+    aspectAction4_3->setCheckable(true);
+    aspectGroup->addAction(aspectAction4_3);
+
+    QMenu *scaleMenu = fileMenu->addMenu(tr("&Scale mode"));
+    QActionGroup *scaleGroup = new QActionGroup(scaleMenu);
+    connect(scaleGroup, SIGNAL(triggered(QAction*)), this, SLOT(scaleChanged(QAction*)));
+    scaleGroup->setExclusive(true);
+    QAction *scaleActionFit = scaleMenu->addAction(tr("Fit in view"));
+    scaleActionFit->setCheckable(true);
+    scaleActionFit->setChecked(true);
+    scaleGroup->addAction(scaleActionFit);
+    QAction *scaleActionCrop = scaleMenu->addAction(tr("Scale and crop"));
+    scaleActionCrop->setCheckable(true);
+    scaleGroup->addAction(scaleActionCrop);
+
+    m_fullScreenAction = fileMenu->addAction(tr("Full screen video"));
+    m_fullScreenAction->setCheckable(true);
+    m_fullScreenAction->setEnabled(false); // enabled by hasVideoChanged
+    bool b = connect(m_fullScreenAction, SIGNAL(toggled(bool)), m_videoWidget, SLOT(setFullScreen(bool)));
+    Q_ASSERT(b);
+    b = connect(m_videoWidget, SIGNAL(fullScreenChanged(bool)), m_fullScreenAction, SLOT(setChecked(bool)));
+    Q_ASSERT(b);
+
+    fileMenu->addSeparator();
+    QAction *settingsAction = fileMenu->addAction(tr("&Settings..."));
+
+    // Setup signal connections:
+    connect(rewindButton, SIGNAL(clicked()), this, SLOT(rewind()));
+    //connect(openButton, SIGNAL(clicked()), this, SLOT(openFile()));
+    openButton->setMenu(fileMenu);
+
+    connect(playButton, SIGNAL(clicked()), this, SLOT(playPause()));
+    connect(forwardButton, SIGNAL(clicked()), this, SLOT(forward()));
+    //connect(openButton, SIGNAL(clicked()), this, SLOT(openFile()));
+    connect(settingsAction, SIGNAL(triggered(bool)), this, SLOT(showSettingsDialog()));
+    connect(openUrlAction, SIGNAL(triggered(bool)), this, SLOT(openUrl()));
+    connect(openFileAction, SIGNAL(triggered(bool)), this, SLOT(openFile()));
+
+    connect(m_videoWidget, SIGNAL(customContextMenuRequested(const QPoint &)), SLOT(showContextMenu(const QPoint &)));
+    connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), SLOT(showContextMenu(const QPoint &)));
+    connect(&m_MediaObject, SIGNAL(metaDataChanged()), this, SLOT(updateInfo()));
+    connect(&m_MediaObject, SIGNAL(totalTimeChanged(qint64)), this, SLOT(updateTime()));
+    connect(&m_MediaObject, SIGNAL(tick(qint64)), this, SLOT(updateTime()));
+    connect(&m_MediaObject, SIGNAL(finished()), this, SLOT(finished()));
+    connect(&m_MediaObject, SIGNAL(stateChanged(Phonon::State,Phonon::State)), this, SLOT(stateChanged(Phonon::State,Phonon::State)));
+    connect(&m_MediaObject, SIGNAL(bufferStatus(int)), this, SLOT(bufferStatus(int)));
+    connect(&m_MediaObject, SIGNAL(hasVideoChanged(bool)), this, SLOT(hasVideoChanged(bool)));
+
+    rewindButton->setEnabled(false);
+    playButton->setEnabled(false);
+    setAcceptDrops(true);
+
+    m_audioOutputPath = Phonon::createPath(&m_MediaObject, &m_AudioOutput);
+    Phonon::createPath(&m_MediaObject, m_videoWidget);
+
+    if (!filePath.isEmpty())
+        setFile(filePath);
+    resize(minimumSizeHint());
+}
+
+void MediaPlayer::stateChanged(Phonon::State newstate, Phonon::State oldstate)
+{
+    Q_UNUSED(oldstate);
+
+    if (oldstate == Phonon::LoadingState) {
+        QRect videoHintRect = QRect(QPoint(0, 0), m_videoWindow.sizeHint());
+        QRect newVideoRect = QApplication::desktop()->screenGeometry().intersected(videoHintRect);
+        if (!m_hasSmallScreen) {
+            if (m_MediaObject.hasVideo()) {
+                // Flush event que so that sizeHint takes the
+                // recently shown/hidden m_videoWindow into account:
+                qApp->processEvents();
+                resize(sizeHint());
+            } else
+                resize(minimumSize());
+        }
+    }
+
+    switch (newstate) {
+        case Phonon::ErrorState:
+            if (m_MediaObject.errorType() == Phonon::FatalError) {
+                playButton->setEnabled(false);
+                rewindButton->setEnabled(false);
+            } else {
+                m_MediaObject.pause();
+            }
+            QMessageBox::warning(this, "Phonon Mediaplayer", m_MediaObject.errorString(), QMessageBox::Close);
+            break;
+
+        case Phonon::StoppedState:
+            m_videoWidget->setFullScreen(false);
+            // Fall through
+        case Phonon::PausedState:
+            playButton->setIcon(playIcon);
+            if (m_MediaObject.currentSource().type() != Phonon::MediaSource::Invalid){
+                playButton->setEnabled(true);
+                rewindButton->setEnabled(true);
+            } else {
+                playButton->setEnabled(false);
+                rewindButton->setEnabled(false);
+            }
+            break;
+        case Phonon::PlayingState:
+            playButton->setEnabled(true);
+            playButton->setIcon(pauseIcon);
+            if (m_MediaObject.hasVideo())
+                m_videoWindow.show();
+            // Fall through
+        case Phonon::BufferingState:
+            rewindButton->setEnabled(true);
+            break;
+        case Phonon::LoadingState:
+            rewindButton->setEnabled(false);
+            break;
+    }
+
+}
+
+void MediaPlayer::initSettingsDialog()
+{
+    settingsDialog = new QDialog(this);
+    ui = new Ui_settings();
+    ui->setupUi(settingsDialog);
+
+    connect(ui->brightnessSlider, SIGNAL(valueChanged(int)), this, SLOT(setBrightness(int)));
+    connect(ui->hueSlider, SIGNAL(valueChanged(int)), this, SLOT(setHue(int)));
+    connect(ui->saturationSlider, SIGNAL(valueChanged(int)), this, SLOT(setSaturation(int)));
+    connect(ui->contrastSlider , SIGNAL(valueChanged(int)), this, SLOT(setContrast(int)));
+    connect(ui->aspectCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setAspect(int)));
+    connect(ui->scalemodeCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setScale(int)));
+
+    ui->brightnessSlider->setValue(int(m_videoWidget->brightness() * SLIDER_RANGE));
+    ui->hueSlider->setValue(int(m_videoWidget->hue() * SLIDER_RANGE));
+    ui->saturationSlider->setValue(int(m_videoWidget->saturation() * SLIDER_RANGE));
+    ui->contrastSlider->setValue(int(m_videoWidget->contrast() * SLIDER_RANGE));
+    ui->aspectCombo->setCurrentIndex(m_videoWidget->aspectRatio());
+    ui->scalemodeCombo->setCurrentIndex(m_videoWidget->scaleMode());
+    connect(ui->effectButton, SIGNAL(clicked()), this, SLOT(configureEffect()));
+
+#ifdef Q_WS_X11
+    //Cross fading is not currently implemented in the GStreamer backend
+    ui->crossFadeSlider->setVisible(false);
+    ui->crossFadeLabel->setVisible(false);
+    ui->crossFadeLabel1->setVisible(false);
+    ui->crossFadeLabel2->setVisible(false);
+    ui->crossFadeLabel3->setVisible(false);
+#endif
+    ui->crossFadeSlider->setValue((int)(2 * m_MediaObject.transitionTime() / 1000.0f));
+    
+    // Insert audio devices:
+    QList<Phonon::AudioOutputDevice> devices = Phonon::BackendCapabilities::availableAudioOutputDevices();
+    for (int i=0; i<devices.size(); i++){
+        QString itemText = devices[i].name();
+        if (!devices[i].description().isEmpty()) {
+            itemText += QString::fromLatin1(" (%1)").arg(devices[i].description());
+        }
+        ui->deviceCombo->addItem(itemText);
+        if (devices[i] == m_AudioOutput.outputDevice())
+            ui->deviceCombo->setCurrentIndex(i);
+    }
+
+    // Insert audio effects:
+    ui->audioEffectsCombo->addItem(tr("<no effect>"));
+    QList<Phonon::Effect *> currEffects = m_audioOutputPath.effects();
+    Phonon::Effect *currEffect = currEffects.size() ? currEffects[0] : 0;
+    QList<Phonon::EffectDescription> availableEffects = Phonon::BackendCapabilities::availableAudioEffects();
+    for (int i=0; i<availableEffects.size(); i++){
+        ui->audioEffectsCombo->addItem(availableEffects[i].name());
+        if (currEffect && availableEffects[i] == currEffect->description())
+            ui->audioEffectsCombo->setCurrentIndex(i+1);
+    }
+    connect(ui->audioEffectsCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(effectChanged()));
+
+}
+
+void MediaPlayer::effectChanged()
+{
+    int currentIndex = ui->audioEffectsCombo->currentIndex();
+    if (currentIndex) {
+        QList<Phonon::EffectDescription> availableEffects = Phonon::BackendCapabilities::availableAudioEffects();
+        Phonon::EffectDescription chosenEffect = availableEffects[currentIndex - 1];
+
+        QList<Phonon::Effect *> currEffects = m_audioOutputPath.effects();
+        Phonon::Effect *currentEffect = currEffects.size() ? currEffects[0] : 0;
+
+        // Deleting the running effect will stop playback, it is deleted when removed from path
+        if (nextEffect && !(currentEffect && (currentEffect->description().name() == nextEffect->description().name())))
+            delete nextEffect;
+
+        nextEffect = new Phonon::Effect(chosenEffect);
+    }
+    ui->effectButton->setEnabled(currentIndex);
+}
+
+void MediaPlayer::showSettingsDialog()
+{
+    const bool hasPausedForDialog = playPauseForDialog();
+
+    if (!settingsDialog)
+        initSettingsDialog();
+
+    float oldBrightness = m_videoWidget->brightness();
+    float oldHue = m_videoWidget->hue();
+    float oldSaturation = m_videoWidget->saturation();
+    float oldContrast = m_videoWidget->contrast();
+    Phonon::VideoWidget::AspectRatio oldAspect = m_videoWidget->aspectRatio();
+    Phonon::VideoWidget::ScaleMode oldScale = m_videoWidget->scaleMode();
+    int currentEffect = ui->audioEffectsCombo->currentIndex();
+    settingsDialog->exec();
+    
+    if (settingsDialog->result() == QDialog::Accepted){
+        m_MediaObject.setTransitionTime((int)(1000 * float(ui->crossFadeSlider->value()) / 2.0f));
+        QList<Phonon::AudioOutputDevice> devices = Phonon::BackendCapabilities::availableAudioOutputDevices();
+        m_AudioOutput.setOutputDevice(devices[ui->deviceCombo->currentIndex()]);
+        QList<Phonon::Effect *> currEffects = m_audioOutputPath.effects();
+        QList<Phonon::EffectDescription> availableEffects = Phonon::BackendCapabilities::availableAudioEffects();
+
+        if (ui->audioEffectsCombo->currentIndex() > 0){
+            Phonon::Effect *currentEffect = currEffects.size() ? currEffects[0] : 0;    
+            if (!currentEffect || currentEffect->description() != nextEffect->description()){
+                foreach(Phonon::Effect *effect, currEffects) {
+                    m_audioOutputPath.removeEffect(effect);
+                    delete effect;
+                }
+                m_audioOutputPath.insertEffect(nextEffect);
+            }
+        } else {
+            foreach(Phonon::Effect *effect, currEffects) {
+                m_audioOutputPath.removeEffect(effect);
+                delete effect;
+                nextEffect = 0;
+            }
+        }
+    } else {
+        // Restore previous settings
+        m_videoWidget->setBrightness(oldBrightness);
+        m_videoWidget->setSaturation(oldSaturation);
+        m_videoWidget->setHue(oldHue);
+        m_videoWidget->setContrast(oldContrast);
+        m_videoWidget->setAspectRatio(oldAspect);
+        m_videoWidget->setScaleMode(oldScale);
+        ui->audioEffectsCombo->setCurrentIndex(currentEffect);
+    }
+
+    if (hasPausedForDialog)
+        m_MediaObject.play();
+}
+
+void MediaPlayer::initVideoWindow()
+{
+    QVBoxLayout *videoLayout = new QVBoxLayout();
+    videoLayout->addWidget(m_videoWidget);
+    videoLayout->setContentsMargins(0, 0, 0, 0);
+    m_videoWindow.setLayout(videoLayout);
+    m_videoWindow.setMinimumSize(100, 100);
+}
+
+
+void MediaPlayer::configureEffect()
+{
+    if (!nextEffect)
+        return;
+
+
+    QList<Phonon::Effect *> currEffects = m_audioOutputPath.effects();
+    const QList<Phonon::EffectDescription> availableEffects = Phonon::BackendCapabilities::availableAudioEffects();
+    if (ui->audioEffectsCombo->currentIndex() > 0) {
+        Phonon::EffectDescription chosenEffect = availableEffects[ui->audioEffectsCombo->currentIndex() - 1];
+
+        QDialog effectDialog;
+        effectDialog.setWindowTitle(tr("Configure effect"));
+        QVBoxLayout *topLayout = new QVBoxLayout(&effectDialog);
+
+        QLabel *description = new QLabel("<b>Description:</b><br>" + chosenEffect.description(), &effectDialog);
+        description->setWordWrap(true); 
+        topLayout->addWidget(description);
+
+        QScrollArea *scrollArea = new QScrollArea(&effectDialog);
+        topLayout->addWidget(scrollArea);
+
+        QVariantList savedParamValues;
+        foreach(Phonon::EffectParameter param, nextEffect->parameters()) {
+            savedParamValues << nextEffect->parameterValue(param);
+        }
+
+        QWidget *scrollWidget = new Phonon::EffectWidget(nextEffect);
+        scrollWidget->setMinimumWidth(320);
+        scrollWidget->setContentsMargins(10, 10, 10,10);
+        scrollArea->setWidget(scrollWidget);
+
+        QDialogButtonBox *bbox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &effectDialog);
+        connect(bbox->button(QDialogButtonBox::Ok), SIGNAL(clicked()), &effectDialog, SLOT(accept()));
+        connect(bbox->button(QDialogButtonBox::Cancel), SIGNAL(clicked()), &effectDialog, SLOT(reject()));
+        topLayout->addWidget(bbox);
+
+        effectDialog.exec();
+
+        if (effectDialog.result() != QDialog::Accepted) {
+            //we need to restore the paramaters values
+            int currentIndex = 0;
+            foreach(Phonon::EffectParameter param, nextEffect->parameters()) {
+                nextEffect->setParameterValue(param, savedParamValues.at(currentIndex++));
+            }
+
+        }
+    }
+}
+
+void MediaPlayer::handleDrop(QDropEvent *e)
+{
+    QList<QUrl> urls = e->mimeData()->urls();
+    if (e->proposedAction() == Qt::MoveAction){
+        // Just add to the queue:
+        for (int i=0; i<urls.size(); i++)
+            m_MediaObject.enqueue(Phonon::MediaSource(urls[i].toLocalFile()));
+    } else {
+        // Create new queue:
+        m_MediaObject.clearQueue();
+        if (urls.size() > 0) {
+            QString fileName = urls[0].toLocalFile();
+            QDir dir(fileName);
+            if (dir.exists()) {
+                dir.setFilter(QDir::Files);            
+                QStringList entries = dir.entryList();
+                if (entries.size() > 0) {
+                    setFile(fileName + QDir::separator() +  entries[0]);
+                    for (int i=1; i< entries.size(); ++i)
+                        m_MediaObject.enqueue(fileName + QDir::separator() + entries[i]);
+                }
+            } else {
+                setFile(fileName);
+                for (int i=1; i<urls.size(); i++)
+                    m_MediaObject.enqueue(Phonon::MediaSource(urls[i].toLocalFile()));
+            }        
+        }
+    }
+    forwardButton->setEnabled(m_MediaObject.queue().size() > 0);
+    m_MediaObject.play();
+}
+
+void MediaPlayer::dropEvent(QDropEvent *e)
+{
+    if (e->mimeData()->hasUrls() && e->proposedAction() != Qt::LinkAction) {
+        e->acceptProposedAction();
+        handleDrop(e);
+    } else {
+        e->ignore(); 
+    }
+}
+
+void MediaPlayer::dragEnterEvent(QDragEnterEvent *e)
+{
+    dragMoveEvent(e);
+}
+
+void MediaPlayer::dragMoveEvent(QDragMoveEvent *e)
+{
+    if (e->mimeData()->hasUrls()) {
+        if (e->proposedAction() == Qt::CopyAction || e->proposedAction() == Qt::MoveAction){
+            e->acceptProposedAction();
+        }
+    }
+}
+
+void MediaPlayer::playPause()
+{
+    if (m_MediaObject.state() == Phonon::PlayingState)
+        m_MediaObject.pause();
+    else {
+        if (m_MediaObject.currentTime() == m_MediaObject.totalTime())
+            m_MediaObject.seek(0);
+        m_MediaObject.play();
+    }
+}
+
+void MediaPlayer::setFile(const QString &fileName)
+{
+    setWindowTitle(fileName.right(fileName.length() - fileName.lastIndexOf('/') - 1));
+    m_MediaObject.setCurrentSource(Phonon::MediaSource(fileName));
+    m_MediaObject.play();
+}
+
+bool MediaPlayer::playPauseForDialog()
+{
+    // If we're running on a small screen, we want to pause the video when
+    // popping up dialogs. We neither want to tamper with the state if the
+    // user has paused.
+    if (m_hasSmallScreen && m_MediaObject.hasVideo()) {
+        if (Phonon::PlayingState == m_MediaObject.state()) {
+            m_MediaObject.pause();
+            return true;
+        }
+    }
+    return false;
+}
+
+void MediaPlayer::openFile()
+{
+    const bool hasPausedForDialog = playPauseForDialog();
+
+    QStringList fileNames = QFileDialog::getOpenFileNames(this, QString(),
+                                                          QDesktopServices::storageLocation(QDesktopServices::MusicLocation));
+
+    if (hasPausedForDialog)
+        m_MediaObject.play();
+
+    m_MediaObject.clearQueue();
+    if (fileNames.size() > 0) {
+        QString fileName = fileNames[0];
+        setFile(fileName);
+        for (int i=1; i<fileNames.size(); i++)
+            m_MediaObject.enqueue(Phonon::MediaSource(fileNames[i]));
+    }
+    forwardButton->setEnabled(m_MediaObject.queue().size() > 0);
+}
+
+void MediaPlayer::bufferStatus(int percent)
+{
+    if (percent == 0 || percent == 100)
+        progressLabel->setText(QString());
+    else {
+        QString str = QString::fromLatin1("(%1%)").arg(percent);
+        progressLabel->setText(str);
+    }
+}
+
+void MediaPlayer::setSaturation(int val)
+{
+    m_videoWidget->setSaturation(val / qreal(SLIDER_RANGE));
+}
+
+void MediaPlayer::setHue(int val)
+{
+    m_videoWidget->setHue(val / qreal(SLIDER_RANGE));
+}
+
+void MediaPlayer::setAspect(int val)
+{
+    m_videoWidget->setAspectRatio(Phonon::VideoWidget::AspectRatio(val));
+}
+
+void MediaPlayer::setScale(int val)
+{
+    m_videoWidget->setScaleMode(Phonon::VideoWidget::ScaleMode(val));
+}
+
+void MediaPlayer::setBrightness(int val)
+{
+    m_videoWidget->setBrightness(val / qreal(SLIDER_RANGE));
+}
+
+void MediaPlayer::setContrast(int val)
+{
+    m_videoWidget->setContrast(val / qreal(SLIDER_RANGE));
+}
+
+void MediaPlayer::updateInfo()
+{
+    int maxLength = 30;
+    QString font = "<font color=#ffeeaa>";
+    QString fontmono = "<font family=\"monospace,courier new\" color=#ffeeaa>";
+
+    QMap <QString, QString> metaData = m_MediaObject.metaData();
+    QString trackArtist = metaData.value("ARTIST");
+    if (trackArtist.length() > maxLength)
+        trackArtist = trackArtist.left(maxLength) + "...";
+    
+    QString trackTitle = metaData.value("TITLE");
+    int trackBitrate = metaData.value("BITRATE").toInt();
+
+    QString fileName;
+    if (m_MediaObject.currentSource().type() == Phonon::MediaSource::Url) {
+        fileName = m_MediaObject.currentSource().url().toString();
+    } else {
+        fileName = m_MediaObject.currentSource().fileName();
+        fileName = fileName.right(fileName.length() - fileName.lastIndexOf('/') - 1);
+        if (fileName.length() > maxLength)
+            fileName = fileName.left(maxLength) + "...";
+    }
+    
+    QString title;    
+    if (!trackTitle.isEmpty()) {
+        if (trackTitle.length() > maxLength)
+            trackTitle = trackTitle.left(maxLength) + "...";
+        title = "Title: " + font + trackTitle + "<br></font>";
+    } else if (!fileName.isEmpty()) {
+        if (fileName.length() > maxLength)
+            fileName = fileName.left(maxLength) + "...";
+        title = font + fileName + "</font>";
+        if (m_MediaObject.currentSource().type() == Phonon::MediaSource::Url) {
+            title.prepend("Url: ");
+        } else {
+            title.prepend("File: ");
+        }
+    }
+        
+    QString artist;
+    if (!trackArtist.isEmpty())
+        artist = "Artist:  " + font + trackArtist + "</font>";
+
+    QString bitrate;
+    if (trackBitrate != 0)
+        bitrate = "<br>Bitrate:  " + font + QString::number(trackBitrate/1000) + "kbit</font>";
+
+    info->setText(title + artist + bitrate);
+}
+
+void MediaPlayer::updateTime()
+{
+    long len = m_MediaObject.totalTime();
+    long pos = m_MediaObject.currentTime();
+    QString timeString;    
+    if (pos || len)
+    {
+        int sec = pos/1000;
+        int min = sec/60;
+        int hour = min/60;
+        int msec = pos;
+
+        QTime playTime(hour%60, min%60, sec%60, msec%1000);
+        sec = len / 1000;
+        min = sec / 60;
+        hour = min / 60;
+        msec = len;
+
+        QTime stopTime(hour%60, min%60, sec%60, msec%1000);
+        QString timeFormat = "m:ss";
+        if (hour > 0)
+            timeFormat = "h:mm:ss";        
+        timeString = playTime.toString(timeFormat);
+        if (len)
+            timeString += " / " + stopTime.toString(timeFormat);
+    }
+    timeLabel->setText(timeString);
+}
+
+void MediaPlayer::rewind()
+{
+    m_MediaObject.seek(0);
+}
+
+void MediaPlayer::forward()
+{
+    QList<Phonon::MediaSource> queue = m_MediaObject.queue();
+    if (queue.size() > 0) {
+        m_MediaObject.setCurrentSource(queue[0]);
+        forwardButton->setEnabled(queue.size() > 1);
+        m_MediaObject.play();
+    }
+}
+
+void MediaPlayer::openUrl()
+{
+    QSettings settings;
+    settings.beginGroup(QLatin1String("BrowserMainWindow"));
+    QString sourceURL = settings.value("location").toString();
+    bool ok = false;
+    sourceURL = QInputDialog::getText(this, tr("Open Location"), tr("Please enter a valid address here:"), QLineEdit::Normal, sourceURL, &ok);
+    if (ok && !sourceURL.isEmpty()) {
+        setWindowTitle(sourceURL.right(sourceURL.length() - sourceURL.lastIndexOf('/') - 1));
+        m_MediaObject.setCurrentSource(Phonon::MediaSource(QUrl::fromEncoded(sourceURL.toUtf8())));
+        m_MediaObject.play();
+        settings.setValue("location", sourceURL);
+    }
+}
+
+/*!
+ \since 4.6
+ */
+void MediaPlayer::openRamFile()
+{
+    QSettings settings;
+    settings.beginGroup(QLatin1String("BrowserMainWindow"));
+
+    const QStringList fileNameList(QFileDialog::getOpenFileNames(this,
+                                                                  QString(),
+                                                                  settings.value("openRamFile").toString(),
+                                                                  QLatin1String("RAM files (*.ram)")));
+
+    if (fileNameList.isEmpty())
+        return;
+
+    QFile linkFile;
+    QList<QUrl> list;
+    QByteArray sourceURL;
+    for (int i = 0; i < fileNameList.count(); i++ ) {
+        linkFile.setFileName(fileNameList[i]);
+        if (linkFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+            while (!linkFile.atEnd()) {
+                sourceURL = linkFile.readLine().trimmed();
+                if (!sourceURL.isEmpty()) {
+                    const QUrl url(QUrl::fromEncoded(sourceURL));
+                    if (url.isValid())
+                        list.append(url);
+                }
+            }
+            linkFile.close();
+        }
+    }
+
+    if (!list.isEmpty()) {
+        m_MediaObject.setCurrentSource(Phonon::MediaSource(list[0]));
+        m_MediaObject.play();
+        for (int i = 1; i < list.count(); i++)
+            m_MediaObject.enqueue(Phonon::MediaSource(list[i]));
+    }
+
+    forwardButton->setEnabled(!m_MediaObject.queue().isEmpty());
+    settings.setValue("openRamFile", fileNameList[0]);
+}
+
+void MediaPlayer::finished()
+{
+}
+
+void MediaPlayer::showContextMenu(const QPoint &p)
+{
+    fileMenu->popup(m_videoWidget->isFullScreen() ? p : mapToGlobal(p));
+}
+
+void MediaPlayer::scaleChanged(QAction *act)
+{
+    if (act->text() == tr("Scale and crop"))
+        m_videoWidget->setScaleMode(Phonon::VideoWidget::ScaleAndCrop);
+    else 
+        m_videoWidget->setScaleMode(Phonon::VideoWidget::FitInView);    
+}
+
+void MediaPlayer::aspectChanged(QAction *act)
+{
+    if (act->text() == tr("16/9"))
+        m_videoWidget->setAspectRatio(Phonon::VideoWidget::AspectRatio16_9);
+    else if (act->text() == tr("Scale"))
+        m_videoWidget->setAspectRatio(Phonon::VideoWidget::AspectRatioWidget);
+    else if (act->text() == tr("4/3"))
+        m_videoWidget->setAspectRatio(Phonon::VideoWidget::AspectRatio4_3);
+    else
+        m_videoWidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto);    
+}
+
+void MediaPlayer::hasVideoChanged(bool bHasVideo)
+{
+    info->setVisible(!bHasVideo);
+    m_videoWindow.setVisible(bHasVideo);
+    m_fullScreenAction->setEnabled(bHasVideo);
+}
Index: trunk/demos/qmediaplayer/mediaplayer.h
===================================================================
--- trunk/demos/qmediaplayer/mediaplayer.h	(revision 561)
+++ trunk/demos/qmediaplayer/mediaplayer.h	(revision 561)
@@ -0,0 +1,176 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the demonstration applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+***************************************************************************/
+
+#ifndef MEDIALAYER_H
+#define MEDIAPLAYER_H
+
+#include <QtGui/QWidget>
+#include <QtGui/QApplication>
+#include <QtCore/QTimerEvent>
+#include <QtGui/QShowEvent>
+#include <QtGui/QIcon>
+#include <QtCore/QBasicTimer>
+#include <QtGui/QAction>
+
+#include <phonon/audiooutput.h>
+#include <phonon/backendcapabilities.h>
+#include <phonon/effect.h>
+#include <phonon/effectparameter.h>
+#include <phonon/effectwidget.h>
+#include <phonon/mediaobject.h>
+#include <phonon/seekslider.h>
+#include <phonon/videowidget.h>
+#include <phonon/volumeslider.h>
+
+QT_BEGIN_NAMESPACE
+class QPushButton;
+class QLabel;
+class QSlider;
+class QTextEdit;
+class QMenu;
+class Ui_settings;
+QT_END_NAMESPACE
+
+class MediaPlayer;
+
+class MediaVideoWidget : public Phonon::VideoWidget
+{
+    Q_OBJECT
+
+public:
+    MediaVideoWidget(MediaPlayer *player, QWidget *parent = 0);
+
+public slots:
+    // Over-riding non-virtual Phonon::VideoWidget slot
+    void setFullScreen(bool);
+
+signals:
+    void fullScreenChanged(bool);
+
+protected:
+    void mouseDoubleClickEvent(QMouseEvent *e);
+    void keyPressEvent(QKeyEvent *e);
+    bool event(QEvent *e);
+    void timerEvent(QTimerEvent *e);
+    void dropEvent(QDropEvent *e);
+    void dragEnterEvent(QDragEnterEvent *e);
+
+private:
+    MediaPlayer *m_player;
+    QBasicTimer m_timer;
+    QAction m_action;
+};
+
+class MediaPlayer :
+            public QWidget
+{
+    Q_OBJECT
+public:
+    MediaPlayer(const QString &,
+                const bool hasSmallScreen);
+
+    void dragEnterEvent(QDragEnterEvent *e);
+    void dragMoveEvent(QDragMoveEvent *e);
+    void dropEvent(QDropEvent *e);
+    void handleDrop(QDropEvent *e);
+    void setFile(const QString &text);
+    void initVideoWindow();
+    void initSettingsDialog();
+
+public slots:
+    void openFile();
+    void rewind();
+    void forward();
+    void updateInfo();
+    void updateTime();
+    void finished();
+    void playPause();
+    void scaleChanged(QAction *);
+    void aspectChanged(QAction *);
+
+private slots:
+    void setAspect(int);
+    void setScale(int);
+    void setSaturation(int);
+    void setContrast(int);
+    void setHue(int);
+    void setBrightness(int);
+    void stateChanged(Phonon::State newstate, Phonon::State oldstate);
+    void effectChanged();
+    void showSettingsDialog();
+    void showContextMenu(const QPoint& point);
+    void bufferStatus(int percent);
+    void openUrl();
+    void openRamFile();
+    void configureEffect();
+    void hasVideoChanged(bool);
+
+private:
+    bool playPauseForDialog();
+
+    QIcon playIcon;
+    QIcon pauseIcon;
+    QMenu *fileMenu;
+    QPushButton *playButton;
+    QPushButton *rewindButton;
+    QPushButton *forwardButton;
+    Phonon::SeekSlider *slider;
+    QLabel *timeLabel;
+    QLabel *progressLabel;
+    Phonon::VolumeSlider *volume;
+    QSlider *m_hueSlider;
+    QSlider *m_satSlider;
+    QSlider *m_contSlider;
+    QLabel *info;
+    Phonon::Effect *nextEffect;
+    QDialog *settingsDialog;
+    Ui_settings *ui;
+    QAction *m_fullScreenAction;
+
+    QWidget m_videoWindow;
+    Phonon::MediaObject m_MediaObject;
+    Phonon::AudioOutput m_AudioOutput;
+    MediaVideoWidget *m_videoWidget;
+    Phonon::Path m_audioOutputPath;
+    const bool m_hasSmallScreen;
+};
+
+#endif //MEDIAPLAYER_H
Index: trunk/demos/qmediaplayer/mediaplayer.qrc
===================================================================
--- trunk/demos/qmediaplayer/mediaplayer.qrc	(revision 561)
+++ trunk/demos/qmediaplayer/mediaplayer.qrc	(revision 561)
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>images/screen.png</file>
+</qresource>
+</RCC>
Index: trunk/demos/qmediaplayer/qmediaplayer.pro
===================================================================
--- trunk/demos/qmediaplayer/qmediaplayer.pro	(revision 561)
+++ trunk/demos/qmediaplayer/qmediaplayer.pro	(revision 561)
@@ -0,0 +1,37 @@
+######################################################################
+# Automatically generated by qmake (2.01a) Thu Aug 23 18:02:14 2007
+######################################################################
+
+TEMPLATE = app
+DEPENDPATH += . build src ui
+
+QT += phonon
+
+FORMS += settings.ui
+RESOURCES += mediaplayer.qrc
+
+!win32:CONFIG += CONSOLE
+
+SOURCES += main.cpp mediaplayer.cpp
+HEADERS += mediaplayer.h
+
+target.path = $$[QT_INSTALL_DEMOS]/qmediaplayer
+sources.files = $$SOURCES $$HEADERS $$FORMS $$RESOURCES *.pro *.html *.doc images
+sources.path = $$[QT_INSTALL_DEMOS]/qmediaplayer
+INSTALLS += target sources
+
+wince*{
+DEPLOYMENT_PLUGIN += phonon_ds9 phonon_waveout
+}
+
+symbian {
+    TARGET.UID3 = 0xA000C613
+
+     addFiles.sources = ../embedded/desktopservices/data/sax.mp3
+     addFiles.path = /data/sounds/
+     DEPLOYMENT += addFiles
+
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+
+    TARGET.CAPABILITY="NetworkServices"
+}
Index: trunk/demos/qmediaplayer/settings.ui
===================================================================
--- trunk/demos/qmediaplayer/settings.ui	(revision 561)
+++ trunk/demos/qmediaplayer/settings.ui	(revision 561)
@@ -0,0 +1,495 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>settings</class>
+ <widget class="QDialog" name="settings">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>175</width>
+    <height>397</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Settings</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
+   <item>
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>Video options:</string>
+     </property>
+     <property name="flat">
+      <bool>true</bool>
+     </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="5" column="2">
+       <widget class="QComboBox" name="scalemodeCombo">
+        <property name="sizeAdjustPolicy">
+         <enum>QComboBox::AdjustToContentsOnFirstShow</enum>
+        </property>
+        <item>
+         <property name="text">
+          <string>Fit in view</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>Scale and crop</string>
+         </property>
+        </item>
+       </widget>
+      </item>
+      <item row="0" column="0">
+       <widget class="QLabel" name="label_9">
+        <property name="text">
+         <string>Contrast:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1" colspan="2">
+       <widget class="QSlider" name="contrastSlider">
+        <property name="minimumSize">
+         <size>
+          <width>0</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="minimum">
+         <number>-8</number>
+        </property>
+        <property name="maximum">
+         <number>8</number>
+        </property>
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="tickPosition">
+         <enum>QSlider::TicksBelow</enum>
+        </property>
+        <property name="tickInterval">
+         <number>4</number>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_8">
+        <property name="text">
+         <string>Brightness:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1" colspan="2">
+       <widget class="QSlider" name="brightnessSlider">
+        <property name="minimum">
+         <number>-8</number>
+        </property>
+        <property name="maximum">
+         <number>8</number>
+        </property>
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="tickPosition">
+         <enum>QSlider::TicksBelow</enum>
+        </property>
+        <property name="tickInterval">
+         <number>4</number>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="label_7">
+        <property name="text">
+         <string>Saturation:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1" colspan="2">
+       <widget class="QSlider" name="saturationSlider">
+        <property name="minimum">
+         <number>-8</number>
+        </property>
+        <property name="maximum">
+         <number>8</number>
+        </property>
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="tickPosition">
+         <enum>QSlider::TicksBelow</enum>
+        </property>
+        <property name="tickInterval">
+         <number>4</number>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QLabel" name="label_2">
+        <property name="text">
+         <string>Hue:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="1" colspan="2">
+       <widget class="QSlider" name="hueSlider">
+        <property name="minimum">
+         <number>-8</number>
+        </property>
+        <property name="maximum">
+         <number>8</number>
+        </property>
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="tickPosition">
+         <enum>QSlider::TicksBelow</enum>
+        </property>
+        <property name="tickInterval">
+         <number>4</number>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="0" colspan="2">
+       <widget class="QLabel" name="label_10">
+        <property name="text">
+         <string>Aspect ratio:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="2">
+       <widget class="QComboBox" name="aspectCombo">
+        <property name="sizeAdjustPolicy">
+         <enum>QComboBox::AdjustToContentsOnFirstShow</enum>
+        </property>
+        <item>
+         <property name="text">
+          <string>Auto</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>Stretch</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>4/3</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>16/9</string>
+         </property>
+        </item>
+       </widget>
+      </item>
+      <item row="5" column="0" colspan="2">
+       <widget class="QLabel" name="label_11">
+        <property name="text">
+         <string>Scale Mode:</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+     <zorder>scalemodeCombo</zorder>
+     <zorder>label_9</zorder>
+     <zorder>contrastSlider</zorder>
+     <zorder>label_8</zorder>
+     <zorder>brightnessSlider</zorder>
+     <zorder>label_7</zorder>
+     <zorder>saturationSlider</zorder>
+     <zorder>label_2</zorder>
+     <zorder>hueSlider</zorder>
+     <zorder>label_10</zorder>
+     <zorder>aspectCombo</zorder>
+     <zorder>label_11</zorder>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_2">
+     <property name="title">
+      <string>Audio options:</string>
+     </property>
+     <property name="flat">
+      <bool>true</bool>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout">
+      <item>
+       <layout class="QHBoxLayout">
+        <item>
+         <widget class="QLabel" name="label">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>10</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Audio device:</string>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QComboBox" name="deviceCombo">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>10</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="sizeAdjustPolicy">
+           <enum>QComboBox::AdjustToMinimumContentsLength</enum>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout">
+        <item>
+         <widget class="QLabel" name="label_6">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>10</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Audio effect:</string>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QComboBox" name="audioEffectsCombo">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>10</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="sizeAdjustPolicy">
+           <enum>QComboBox::AdjustToMinimumContentsLength</enum>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QToolButton" name="effectButton">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="text">
+           <string>Setup</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <layout class="QHBoxLayout">
+        <item>
+         <widget class="QLabel" name="crossFadeLabel">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>10</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>Cross fade:</string>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <layout class="QVBoxLayout">
+          <item>
+           <widget class="QSlider" name="crossFadeSlider">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="minimum">
+             <number>-20</number>
+            </property>
+            <property name="maximum">
+             <number>20</number>
+            </property>
+            <property name="singleStep">
+             <number>1</number>
+            </property>
+            <property name="pageStep">
+             <number>2</number>
+            </property>
+            <property name="value">
+             <number>0</number>
+            </property>
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
+            </property>
+            <property name="tickPosition">
+             <enum>QSlider::TicksBelow</enum>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <layout class="QHBoxLayout">
+            <item>
+             <widget class="QLabel" name="crossFadeLabel1">
+              <property name="font">
+               <font>
+                <pointsize>9</pointsize>
+               </font>
+              </property>
+              <property name="text">
+               <string>-10 Sec</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <spacer>
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>0</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+            <item>
+             <widget class="QLabel" name="crossFadeLabel2">
+              <property name="font">
+               <font>
+                <pointsize>9</pointsize>
+               </font>
+              </property>
+              <property name="text">
+               <string>0</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <spacer>
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>0</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+            <item>
+             <widget class="QLabel" name="crossFadeLabel3">
+              <property name="font">
+               <font>
+                <pointsize>9</pointsize>
+               </font>
+              </property>
+              <property name="text">
+               <string>10 Sec </string>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>settings</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>settings</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
Index: trunk/demos/qtdemo/colors.cpp
===================================================================
--- trunk/demos/qtdemo/colors.cpp	(revision 521)
+++ trunk/demos/qtdemo/colors.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -73,8 +73,6 @@
 // Properties:
 bool Colors::openGlRendering = false;
-bool Colors::direct3dRendering = false;
 bool Colors::softwareRendering = false;
-bool Colors::openGlAwailable = true;
-bool Colors::direct3dAwailable = true;
+bool Colors::openGlAvailable = true;
 bool Colors::xRenderPresent = true;
 
@@ -98,5 +96,5 @@
 bool Colors::verbose = false;
 bool Colors::pause = true;
-int Colors::fps = 100;
+int Colors::fps = 60;
 int Colors::menuCount = 18;
 float Colors::animSpeed = 1.0;
@@ -207,6 +205,4 @@
         if (s == "-opengl")
             Colors::openGlRendering = true;
-        else if (s == "-direct3d")
-            Colors::direct3dRendering = true;
         else if (s == "-software")
             Colors::softwareRendering = true;
@@ -271,5 +267,5 @@
         else if (s.startsWith("-h") || s.startsWith("-help")){
             QMessageBox::warning(0, "Arguments",
-                                 QString("Usage: qtdemo [-verbose] [-no-adapt] [-opengl] [-direct3d] [-software] [-fullscreen] [-ticker[0|1]] ")
+                                 QString("Usage: qtdemo [-verbose] [-no-adapt] [-opengl] [-software] [-fullscreen] [-ticker[0|1]] ")
                                  + "[-animations[0|1]] [-no-blending] [-no-sync] [-use-timer-update[0|1]] [-pause[0|1]]  "
                                  + "[-use-window-mask] [-no-rescale] "
@@ -279,4 +275,6 @@
                                  + "[-ticker-morph-speed<float>] [-ticker-text<string>]");
             exit(0);
+        } else if (s == "-verbose") {
+            // this option was already handled above
         } else{
             QMessageBox::warning(0, "QtDemo", QString("Unrecognized argument:\n") + s);
@@ -291,5 +289,4 @@
 {
     Colors::openGlRendering = false;
-    Colors::direct3dRendering = false;
     Colors::softwareRendering = true;
     Colors::noTicker = true;
@@ -326,17 +323,13 @@
 #endif
     {
-        Colors::openGlAwailable = false;
+        Colors::openGlAvailable = false;
         if (Colors::verbose)
             qDebug("- OpenGL not recommended on this system");
     }
-
-#if defined(Q_WS_WIN)
-    Colors::direct3dAwailable = false; // for now.
-#endif
 
 #if defined(Q_WS_X11)
     // check if X render is present:
     QPixmap tmp(1, 1);
-    if (!tmp.x11PictureHandle()){
+    if (!tmp.x11PictureHandle() && tmp.paintEngine()->type() == QPaintEngine::X11){
         Colors::xRenderPresent = false;
         if (Colors::verbose)
@@ -370,19 +363,7 @@
     }
 
-#if !defined(Q_WS_WIN)
-    if (Colors::direct3dRendering){
-        Colors::direct3dRendering = false;
-            qDebug() << "- WARNING: Direct3D specified, but not supported on this platform";
-    }
-#endif
-
-    if (!Colors::openGlRendering && !Colors::direct3dRendering && !Colors::softwareRendering){
+    if (!Colors::openGlRendering && !Colors::softwareRendering){
         // The user has not decided rendering system. So we do it instead:
-#if defined(Q_WS_WIN)
-        if (Colors::direct3dAwailable)
-            Colors::direct3dRendering = true;
-        else
-#endif
-        if (Colors::openGlAwailable)
+        if (Colors::openGlAvailable)
             Colors::openGlRendering = true;
         else
Index: trunk/demos/qtdemo/colors.h
===================================================================
--- trunk/demos/qtdemo/colors.h	(revision 521)
+++ trunk/demos/qtdemo/colors.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -82,9 +82,7 @@
 
     // properties:
+    static bool openGlAvailable;
     static bool openGlRendering;
-    static bool direct3dRendering;
     static bool softwareRendering;
-    static bool openGlAwailable;
-    static bool direct3dAwailable;
     static bool xRenderPresent;
     static bool noAdapt;
Index: trunk/demos/qtdemo/demoitem.cpp
===================================================================
--- trunk/demos/qtdemo/demoitem.cpp	(revision 521)
+++ trunk/demos/qtdemo/demoitem.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/demoitem.h
===================================================================
--- trunk/demos/qtdemo/demoitem.h	(revision 521)
+++ trunk/demos/qtdemo/demoitem.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/demoitemanimation.cpp
===================================================================
--- trunk/demos/qtdemo/demoitemanimation.cpp	(revision 521)
+++ trunk/demos/qtdemo/demoitemanimation.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/demoitemanimation.h
===================================================================
--- trunk/demos/qtdemo/demoitemanimation.h	(revision 521)
+++ trunk/demos/qtdemo/demoitemanimation.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/demoscene.cpp
===================================================================
--- trunk/demos/qtdemo/demoscene.cpp	(revision 521)
+++ trunk/demos/qtdemo/demoscene.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/demoscene.h
===================================================================
--- trunk/demos/qtdemo/demoscene.h	(revision 521)
+++ trunk/demos/qtdemo/demoscene.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/demotextitem.cpp
===================================================================
--- trunk/demos/qtdemo/demotextitem.cpp	(revision 521)
+++ trunk/demos/qtdemo/demotextitem.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/demotextitem.h
===================================================================
--- trunk/demos/qtdemo/demotextitem.h	(revision 521)
+++ trunk/demos/qtdemo/demotextitem.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/dockitem.cpp
===================================================================
--- trunk/demos/qtdemo/dockitem.cpp	(revision 521)
+++ trunk/demos/qtdemo/dockitem.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/dockitem.h
===================================================================
--- trunk/demos/qtdemo/dockitem.h	(revision 521)
+++ trunk/demos/qtdemo/dockitem.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/examplecontent.cpp
===================================================================
--- trunk/demos/qtdemo/examplecontent.cpp	(revision 521)
+++ trunk/demos/qtdemo/examplecontent.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/examplecontent.h
===================================================================
--- trunk/demos/qtdemo/examplecontent.h	(revision 521)
+++ trunk/demos/qtdemo/examplecontent.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/guide.cpp
===================================================================
--- trunk/demos/qtdemo/guide.cpp	(revision 521)
+++ trunk/demos/qtdemo/guide.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/guide.h
===================================================================
--- trunk/demos/qtdemo/guide.h	(revision 521)
+++ trunk/demos/qtdemo/guide.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/guidecircle.cpp
===================================================================
--- trunk/demos/qtdemo/guidecircle.cpp	(revision 521)
+++ trunk/demos/qtdemo/guidecircle.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/guidecircle.h
===================================================================
--- trunk/demos/qtdemo/guidecircle.h	(revision 521)
+++ trunk/demos/qtdemo/guidecircle.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/guideline.cpp
===================================================================
--- trunk/demos/qtdemo/guideline.cpp	(revision 521)
+++ trunk/demos/qtdemo/guideline.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/guideline.h
===================================================================
--- trunk/demos/qtdemo/guideline.h	(revision 521)
+++ trunk/demos/qtdemo/guideline.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/headingitem.cpp
===================================================================
--- trunk/demos/qtdemo/headingitem.cpp	(revision 521)
+++ trunk/demos/qtdemo/headingitem.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/headingitem.h
===================================================================
--- trunk/demos/qtdemo/headingitem.h	(revision 521)
+++ trunk/demos/qtdemo/headingitem.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/imageitem.cpp
===================================================================
--- trunk/demos/qtdemo/imageitem.cpp	(revision 521)
+++ trunk/demos/qtdemo/imageitem.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/imageitem.h
===================================================================
--- trunk/demos/qtdemo/imageitem.h	(revision 521)
+++ trunk/demos/qtdemo/imageitem.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/itemcircleanimation.cpp
===================================================================
--- trunk/demos/qtdemo/itemcircleanimation.cpp	(revision 521)
+++ trunk/demos/qtdemo/itemcircleanimation.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -303,4 +303,5 @@
 
     this->qtGuide1 = new GuideCircle(QRectF(x, y, 260, 260), -36, 342);
+    this->currGuide = 0;
     new GuideLine(QPointF(x + 240, y + 268), this->qtGuide1);
     new GuideLine(QPointF(x + 265, y + 246), this->qtGuide1);
Index: trunk/demos/qtdemo/itemcircleanimation.h
===================================================================
--- trunk/demos/qtdemo/itemcircleanimation.h	(revision 521)
+++ trunk/demos/qtdemo/itemcircleanimation.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/letteritem.cpp
===================================================================
--- trunk/demos/qtdemo/letteritem.cpp	(revision 521)
+++ trunk/demos/qtdemo/letteritem.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/letteritem.h
===================================================================
--- trunk/demos/qtdemo/letteritem.h	(revision 521)
+++ trunk/demos/qtdemo/letteritem.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/main.cpp
===================================================================
--- trunk/demos/qtdemo/main.cpp	(revision 521)
+++ trunk/demos/qtdemo/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/mainwindow.cpp
===================================================================
--- trunk/demos/qtdemo/mainwindow.cpp	(revision 521)
+++ trunk/demos/qtdemo/mainwindow.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -64,5 +64,5 @@
     this->useTimer = false;
     this->updateTimer.setSingleShot(true);
-    this->trolltechLogo = 0;
+    this->companyLogo = 0;
     this->qtLogo = 0;
     this->setupWidget();
@@ -74,5 +74,5 @@
 MainWindow::~MainWindow()
 {
-    delete this->trolltechLogo;
+    delete this->companyLogo;
     delete this->qtLogo;
 }
@@ -101,12 +101,6 @@
     QWidget *viewport = 0;
 
-    if (Colors::direct3dRendering){
-        viewport->setAttribute(Qt::WA_MSWindowsUseDirect3D);
-        setCacheMode(QGraphicsView::CacheNone);
-        if (Colors::verbose)
-            qDebug() << "- using Direct3D";
-    }
 #ifndef QT_NO_OPENGL
-    else if (Colors::openGlRendering){
+    if (Colors::openGlRendering) {
         QGLWidget *glw = new QGLWidget(QGLFormat(QGL::SampleBuffers));
         if (Colors::noScreenSync)
@@ -117,7 +111,8 @@
         if (Colors::verbose)
             qDebug() << "- using OpenGL";
-    }
+    } else // software rendering
 #endif
-    else{ // software rendering
+    {
+        // software rendering
         viewport = new QWidget;
         setCacheMode(QGraphicsView::CacheBackground);
@@ -264,7 +259,4 @@
 
     this->viewport()->update();
-    if (Colors::softwareRendering)
-        QApplication::syncX();
-
     if (this->useTimer)
         this->updateTimer.start(int(1000 / Colors::fps));
@@ -279,7 +271,7 @@
     }
 
-    this->trolltechLogo = new ImageItem(QImage(":/images/trolltech-logo.png"), 1000, 1000, this->scene, 0, true, 0.5f);
+    this->companyLogo = new ImageItem(QImage(":/images/trolltech-logo.png"), 1000, 1000, this->scene, 0, true, 0.5f);
     this->qtLogo = new ImageItem(QImage(":/images/qtlogo_small.png"), 1000, 1000, this->scene, 0, true, 0.5f);
-    this->trolltechLogo->setZValue(100);
+    this->companyLogo->setZValue(100);
     this->qtLogo->setZValue(100);
     this->pausedLabel = new DemoTextItem(QString("PAUSED"), Colors::buttonFont(), Qt::white, -1, this->scene, 0);
@@ -390,6 +382,4 @@
             if (Colors::openGlRendering)
                 s += "OpenGL";
-            else if (Colors::direct3dRendering)
-                s += "Direct3D";
             else
                 s += "software";
@@ -467,8 +457,8 @@
     DemoItem::setMatrix(this->matrix());
 
-    if (this->trolltechLogo){
+    if (this->companyLogo){
         const QRectF r = this->scene->sceneRect();
-        QRectF ttb = this->trolltechLogo->boundingRect();
-        this->trolltechLogo->setPos(int((r.width() - ttb.width()) / 2), 595 - ttb.height());
+        QRectF ttb = this->companyLogo->boundingRect();
+        this->companyLogo->setPos(int((r.width() - ttb.width()) / 2), 595 - ttb.height());
         QRectF qtb = this->qtLogo->boundingRect();
         this->qtLogo->setPos(802 - qtb.width(), 0);
Index: trunk/demos/qtdemo/mainwindow.h
===================================================================
--- trunk/demos/qtdemo/mainwindow.h	(revision 521)
+++ trunk/demos/qtdemo/mainwindow.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -99,5 +99,5 @@
     QTime fpsTime;
     QPixmap background;
-    ImageItem *trolltechLogo;
+    ImageItem *companyLogo;
     ImageItem *qtLogo;
     bool doneAdapt;
Index: trunk/demos/qtdemo/menucontent.cpp
===================================================================
--- trunk/demos/qtdemo/menucontent.cpp	(revision 521)
+++ trunk/demos/qtdemo/menucontent.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/menucontent.h
===================================================================
--- trunk/demos/qtdemo/menucontent.h	(revision 521)
+++ trunk/demos/qtdemo/menucontent.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/menumanager.cpp
===================================================================
--- trunk/demos/qtdemo/menumanager.cpp	(revision 521)
+++ trunk/demos/qtdemo/menumanager.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -325,7 +325,8 @@
 #ifdef Q_OS_WIN
     //make sure it finds the dlls on windows
-    QString curpath = QString::fromLocal8Bit(qgetenv("PATH").constData());
-    QString newpath = QString("PATH=%1;%2").arg(QLibraryInfo::location(QLibraryInfo::BinariesPath), curpath);
-    process->setEnvironment(QStringList(newpath));
+    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
+    env.insert(QLatin1String("PATH"), QLibraryInfo::location(QLibraryInfo::BinariesPath) 
+               + QLatin1Char(';') + env.value(QLatin1String("Path")));
+    process->setProcessEnvironment(env);
 #endif
 
Index: trunk/demos/qtdemo/menumanager.h
===================================================================
--- trunk/demos/qtdemo/menumanager.h	(revision 521)
+++ trunk/demos/qtdemo/menumanager.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/qtdemo.pro
===================================================================
--- trunk/demos/qtdemo/qtdemo.pro	(revision 521)
+++ trunk/demos/qtdemo/qtdemo.pro	(revision 561)
@@ -1,6 +1,10 @@
 CONFIG += assistant help x11inc
 TARGET = qtdemo
-DESTDIR = $$QT_BUILD_TREE/bin
+DEMO_DESTDIR = $$QT_BUILD_TREE
+isEmpty(DEMO_DESTDIR):DEMO_DESTDIR=../..
+DESTDIR = $$DEMO_DESTDIR/bin
 INSTALLS += target sources
+
+
 QT += xml network
 
@@ -64,4 +68,6 @@
 }
 
+symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+
 # install
 target.path = $$[QT_INSTALL_BINS]
Index: trunk/demos/qtdemo/qtdemo.rc
===================================================================
--- trunk/demos/qtdemo/qtdemo.rc	(revision 521)
+++ trunk/demos/qtdemo/qtdemo.rc	(revision 561)
@@ -1,2 +1,32 @@
+#include "winver.h"
+
 IDI_ICON1               ICON    DISCARDABLE     "qtdemo.ico"
 
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,0
+ PRODUCTVERSION 1,0,0,0
+ FILEFLAGS 0x0L
+ FILEFLAGSMASK 0x3fL
+ FILEOS 0x00040004L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "000004b0"
+        BEGIN
+            VALUE "CompanyName", "Nokia Corporation and/or its subsidiary(-ies)"
+            VALUE "FileDescription", "Qt Examples and Demos"
+            VALUE "FileVersion", "1.0.0.0"
+            VALUE "LegalCopyright", "Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)."
+            VALUE "InternalName", "qtdemo"
+            VALUE "OriginalFilename", "qtdemo.exe"
+            VALUE "ProductName", "Qt Examples and Demos"
+            VALUE "ProductVersion", "1.0.0.0"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x0, 1200
+    END
+END
Index: trunk/demos/qtdemo/scanitem.cpp
===================================================================
--- trunk/demos/qtdemo/scanitem.cpp	(revision 521)
+++ trunk/demos/qtdemo/scanitem.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/scanitem.h
===================================================================
--- trunk/demos/qtdemo/scanitem.h	(revision 521)
+++ trunk/demos/qtdemo/scanitem.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/score.cpp
===================================================================
--- trunk/demos/qtdemo/score.cpp	(revision 521)
+++ trunk/demos/qtdemo/score.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/score.h
===================================================================
--- trunk/demos/qtdemo/score.h	(revision 521)
+++ trunk/demos/qtdemo/score.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/textbutton.cpp
===================================================================
--- trunk/demos/qtdemo/textbutton.cpp	(revision 521)
+++ trunk/demos/qtdemo/textbutton.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/textbutton.h
===================================================================
--- trunk/demos/qtdemo/textbutton.h	(revision 521)
+++ trunk/demos/qtdemo/textbutton.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/qtdemo/xml/examples.xml
===================================================================
--- trunk/demos/qtdemo/xml/examples.xml	(revision 521)
+++ trunk/demos/qtdemo/xml/examples.xml	(revision 561)
@@ -17,7 +17,16 @@
     <example filename="interview" name="Interview" />
     <example filename="browser" name="Browser" />
-    <example filename="mediaplayer" name="Media Player" />
+    <example filename="qmediaplayer" name="Media Player" />
     <example filename="boxes" name="Boxes" />
+    <example filename="sub-attaq" name="Sub-attaq" />
   </demos>
+  <category dirname="animation" name="Animation Framework">
+    <example filename="animatedtiles" name="Animated Tiles" />
+    <example filename="appchooser" name="Appchooser" />
+    <example filename="easing" name="Easing Curves" />
+    <example filename="moveblocks" name="Moving Blocks" />
+    <example filename="states" name="States" />
+    <example filename="stickman" name="Stickman" />
+  </category>
   <category dirname="qtconcurrent" name="Concurrent Programming">
     <example filename="map" name="Map" executable="false" />
@@ -79,4 +88,5 @@
     <example filename="dirview" name="Directory View" />
     <example filename="fetchmore" name="Fetch More" />
+    <example filename="frozencolumn" name="Frozen Column" />
     <example filename="pixelator" name="Pixelator" />
     <example filename="puzzle" name="Puzzle " image="itemviewspuzzle-example.png"/>
@@ -113,5 +123,5 @@
     <example filename="fortuneclient" name="Fortune Client" />
     <example filename="fortuneserver" name="Fortune Server" />
-    <example filename="ftp" changedirectory="false" name="FTP Client" />
+    <example filename="qftp" changedirectory="false" name="FTP Client" />
     <example filename="http" changedirectory="false" name="HTTP Client" />
     <example filename="loopback" name="Loopback" />
@@ -119,4 +129,5 @@
     <example filename="torrent" name="Torrent Client" />
     <example filename="securesocketclient" name="Secure Socket Client" />
+    <example filename="googlesuggest" name="Google Suggest" />
   </category>
   <category dirname="opengl" name="OpenGL">
@@ -143,5 +154,10 @@
   </category>
   <category dirname="phonon" name="Phonon">
-    <example filename="musicplayer" name="Music Player" />
+    <example filename="qmusicplayer" name="Music Player" />
+  </category>
+  <category dirname="multimedia" name="Multimedia">
+    <example filename="audiodevices" name="Audio Devices" />
+    <example filename="audiooutput" name="Audio Output" />
+    <example filename="audioinput" name="Audio Input" />
   </category>
   <category dirname="richtext" name="Rich Text">
@@ -167,4 +183,10 @@
     <example filename="sqlwidgetmapper" name="SQL Widget Mapper" />
   </category>
+  <category dirname="statemachine" name="State Machine">
+    <example filename="eventtransitions" name="Event Transitions" />
+    <example filename="rogue" name="Rogue" />
+    <example filename="trafficlight" name="Traffic Light" />
+    <example filename="twowaybutton" name="Two-way Button" />
+  </category>
   <category dirname="threads" name="Threading">
     <example filename="mandelbrot" name="Mandelbrot" />
@@ -175,4 +197,5 @@
     <example filename="customcompleter" name="Custom Completer" />
     <example filename="i18n" name="Internationalization" />
+    <example filename="inputpanel" name="Input Panel" />
     <example filename="plugandpaint" name="Plug and Paint" />
     <example filename="regexp" name="Regular Expressions" />
@@ -214,4 +237,10 @@
     <example filename="windowflags" name="Window Flags" />
   </category>
+  <category dirname="webkit" name="WebKit">
+    <example filename="formextractor" name="Form Extractor" />
+    <example filename="previewer" name="HTML Previewer" />
+    <example filename="fancybrowser" name="Fancy Browser" />
+    <example filename="googlechat" name="Google Chat" />
+  </category>
   <category dirname="xml" name="XML">
     <example filename="saxbookmarks" name="SAX Bookmarks" />
@@ -225,4 +254,5 @@
     <example filename="filetree" name="File Tree" />
     <example filename="trafficinfo" name="Traffic Info" />
+    <example filename="schema" name="XML Schema Validation" />
   </category>  
 </categories>
Index: trunk/demos/shared/arthurstyle.cpp
===================================================================
--- trunk/demos/shared/arthurstyle.cpp	(revision 521)
+++ trunk/demos/shared/arthurstyle.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/shared/arthurstyle.h
===================================================================
--- trunk/demos/shared/arthurstyle.h	(revision 521)
+++ trunk/demos/shared/arthurstyle.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/shared/arthurwidgets.cpp
===================================================================
--- trunk/demos/shared/arthurwidgets.cpp	(revision 521)
+++ trunk/demos/shared/arthurwidgets.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/shared/arthurwidgets.h
===================================================================
--- trunk/demos/shared/arthurwidgets.h	(revision 521)
+++ trunk/demos/shared/arthurwidgets.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -50,11 +50,30 @@
 #if defined(QT_OPENGL_SUPPORT)
 #include <QGLWidget>
+#include <QEvent>
 class GLWidget : public QGLWidget
 {
 public:
     GLWidget(QWidget *parent)
-        : QGLWidget(QGLFormat(QGL::SampleBuffers), parent) {}
+        : QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
+    {
+        setAttribute(Qt::WA_AcceptTouchEvents);
+    }
     void disableAutoBufferSwap() { setAutoBufferSwap(false); }
     void paintEvent(QPaintEvent *) { parentWidget()->update(); }
+protected:
+    bool event(QEvent *event)
+    {
+        switch (event->type()) {
+        case QEvent::TouchBegin:
+        case QEvent::TouchUpdate:
+        case QEvent::TouchEnd:
+            event->ignore();
+            return false;
+            break;
+        default:
+            break;
+        }
+        return QGLWidget::event(event);
+    }
 };
 #endif
Index: trunk/demos/shared/hoverpoints.cpp
===================================================================
--- trunk/demos/shared/hoverpoints.cpp	(revision 521)
+++ trunk/demos/shared/hoverpoints.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -54,4 +54,5 @@
     m_widget = widget;
     widget->installEventFilter(this);
+    widget->setAttribute(Qt::WA_AcceptTouchEvents);
 
     m_connectionType = CurveConnection;
@@ -66,5 +67,5 @@
     m_enabled = true;
 
-    connect(this, SIGNAL(pointsChanged(const QPolygonF &)),
+    connect(this, SIGNAL(pointsChanged(QPolygonF)),
             m_widget, SLOT(update()));
 }
@@ -87,4 +88,6 @@
         case QEvent::MouseButtonPress:
         {
+            if (!m_fingerPointMapping.isEmpty())
+                return true;
             QMouseEvent *me = (QMouseEvent *) event;
 
@@ -148,10 +151,87 @@
 
         case QEvent::MouseButtonRelease:
+            if (!m_fingerPointMapping.isEmpty())
+                return true;
             m_currentIndex = -1;
             break;
 
         case QEvent::MouseMove:
+            if (!m_fingerPointMapping.isEmpty())
+                return true;
             if (m_currentIndex >= 0)
                 movePoint(m_currentIndex, ((QMouseEvent *)event)->pos());
+            break;
+        case QEvent::TouchBegin:
+        case QEvent::TouchUpdate:
+            {
+                const QTouchEvent *const touchEvent = static_cast<const QTouchEvent*>(event);
+                const QList<QTouchEvent::TouchPoint> points = touchEvent->touchPoints();
+                const qreal pointSize = qMax(m_pointSize.width(), m_pointSize.height());
+                foreach (const QTouchEvent::TouchPoint &touchPoint, points) {
+                    const int id = touchPoint.id();
+                    switch (touchPoint.state()) {
+                    case Qt::TouchPointPressed:
+                        {
+                            // find the point, move it
+                            QSet<int> activePoints = QSet<int>::fromList(m_fingerPointMapping.values());
+                            int activePoint = -1;
+                            qreal distance = -1;
+                            const int pointsCount = m_points.size();
+                            const int activePointCount = activePoints.size();
+                            if (pointsCount == 2 && activePointCount == 1) { // only two points
+                                activePoint = activePoints.contains(0) ? 1 : 0;
+                            } else {
+                                for (int i=0; i<pointsCount; ++i) {
+                                    if (activePoints.contains(i))
+                                        continue;
+
+                                    qreal d = QLineF(touchPoint.pos(), m_points.at(i)).length();
+                                    if ((distance < 0 && d < 12 * pointSize) || d < distance) {
+                                        distance = d;
+                                        activePoint = i;
+                                    }
+
+                                }
+                            }
+                            if (activePoint != -1) {
+                                m_fingerPointMapping.insert(touchPoint.id(), activePoint);
+                                movePoint(activePoint, touchPoint.pos());
+                            }
+                        }
+                        break;
+                    case Qt::TouchPointReleased:
+                        {
+                            // move the point and release
+                            QHash<int,int>::iterator it = m_fingerPointMapping.find(id);
+                            movePoint(it.value(), touchPoint.pos());
+                            m_fingerPointMapping.erase(it);
+                        }
+                        break;
+                    case Qt::TouchPointMoved:
+                        {
+                            // move the point
+                            const int pointIdx = m_fingerPointMapping.value(id, -1);
+                            if (pointIdx >= 0) // do we track this point?
+                                movePoint(pointIdx, touchPoint.pos());
+                        }
+                        break;
+                    default:
+                        break;
+                    }
+                }
+                if (m_fingerPointMapping.isEmpty()) {
+                    event->ignore();
+                    return false;
+                } else {
+                    return true;
+                }
+            }
+            break;
+        case QEvent::TouchEnd:
+            if (m_fingerPointMapping.isEmpty()) {
+                event->ignore();
+                return false;
+            }
+            return true;
             break;
 
@@ -263,4 +343,6 @@
 void HoverPoints::setPoints(const QPolygonF &points)
 {
+    if (points.size() != m_points.size())
+        m_fingerPointMapping.clear();
     m_points.clear();
     for (int i=0; i<points.size(); ++i)
Index: trunk/demos/shared/hoverpoints.h
===================================================================
--- trunk/demos/shared/hoverpoints.h	(revision 521)
+++ trunk/demos/shared/hoverpoints.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -134,4 +134,6 @@
     bool m_enabled;
 
+    QHash<int, int> m_fingerPointMapping;
+
     QPen m_pointPen;
     QBrush m_pointBrush;
Index: trunk/demos/shared/shared.pri
===================================================================
--- trunk/demos/shared/shared.pri	(revision 521)
+++ trunk/demos/shared/shared.pri	(revision 561)
@@ -17,4 +17,5 @@
 hpux-acc*:LIBS += $$SHARED_FOLDER/libdemo_shared.a
 hpuxi-acc*:LIBS += $$SHARED_FOLDER/libdemo_shared.a
-!hpuxi-acc*:!hpux-acc*:LIBS += -ldemo_shared
+symbian:LIBS += -ldemo_shared.lib
+!hpuxi-acc*:!hpux-acc*:!symbian:LIBS += -ldemo_shared
 
Index: trunk/demos/shared/shared.pro
===================================================================
--- trunk/demos/shared/shared.pro	(revision 521)
+++ trunk/demos/shared/shared.pro	(revision 561)
@@ -30,4 +30,9 @@
 sources.path = $$[QT_INSTALL_DEMOS]/shared
 INSTALLS += sources
+
 !cross_compile:INSTALLS += target
 
+symbian {
+    TARGET.UID3 = 0xA000A63C
+    include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+}
Index: trunk/demos/spreadsheet/main.cpp
===================================================================
--- trunk/demos/spreadsheet/main.cpp	(revision 521)
+++ trunk/demos/spreadsheet/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/spreadsheet/printview.cpp
===================================================================
--- trunk/demos/spreadsheet/printview.cpp	(revision 521)
+++ trunk/demos/spreadsheet/printview.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/spreadsheet/printview.h
===================================================================
--- trunk/demos/spreadsheet/printview.h	(revision 521)
+++ trunk/demos/spreadsheet/printview.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/spreadsheet/spreadsheet.cpp
===================================================================
--- trunk/demos/spreadsheet/spreadsheet.cpp	(revision 521)
+++ trunk/demos/spreadsheet/spreadsheet.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -74,7 +74,7 @@
 
     statusBar();
-    connect(table, SIGNAL(currentItemChanged(QTableWidgetItem*, QTableWidgetItem*)),
+    connect(table, SIGNAL(currentItemChanged(QTableWidgetItem*,QTableWidgetItem*)),
             this, SLOT(updateStatus(QTableWidgetItem*)));
-    connect(table, SIGNAL(currentItemChanged(QTableWidgetItem*, QTableWidgetItem*)),
+    connect(table, SIGNAL(currentItemChanged(QTableWidgetItem*,QTableWidgetItem*)),
             this, SLOT(updateColor(QTableWidgetItem*)));
     connect(table, SIGNAL(currentItemChanged(QTableWidgetItem*,QTableWidgetItem*)),
@@ -421,5 +421,5 @@
         int row, col;
         decode_pos(out, &row, &col);
-        table->item(row, col)->setText(tr("%1, %2, %3").arg(op, cell1, cell2));
+        table->item(row, col)->setText(tr("%1 %2 %3").arg(op, cell1, cell2));
     }
 }
@@ -482,5 +482,5 @@
     table->setItem(4, 0, new SpreadSheetItem("Flight (LA)"));
     table->setItem(5, 0, new SpreadSheetItem("Taxi"));
-    table->setItem(6, 0, new SpreadSheetItem("Diinner"));
+    table->setItem(6, 0, new SpreadSheetItem("Dinner"));
     table->setItem(7, 0, new SpreadSheetItem("Hotel"));
     table->setItem(8, 0, new SpreadSheetItem("Flight (Oslo)"));
@@ -524,4 +524,5 @@
 
     table->setItem(9, 2, new SpreadSheetItem());
+    table->item(9, 2)->setBackgroundColor(Qt::lightGray);
 
     // column 3
@@ -624,6 +625,6 @@
     PrintView view;
     view.setModel(table->model());
-    connect(&dlg, SIGNAL(paintRequested(QPrinter *)),
-            &view, SLOT(print(QPrinter *)));
+    connect(&dlg, SIGNAL(paintRequested(QPrinter*)),
+            &view, SLOT(print(QPrinter*)));
     dlg.exec();
 #endif
Index: trunk/demos/spreadsheet/spreadsheet.h
===================================================================
--- trunk/demos/spreadsheet/spreadsheet.h	(revision 521)
+++ trunk/demos/spreadsheet/spreadsheet.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/spreadsheet/spreadsheet.pro
===================================================================
--- trunk/demos/spreadsheet/spreadsheet.pro	(revision 521)
+++ trunk/demos/spreadsheet/spreadsheet.pro	(revision 561)
@@ -28,6 +28,7 @@
 # install
 target.path = $$[QT_INSTALL_DEMOS]/spreadsheet
-sources.files = $$SOURCES $$RESOURCES *.pro images
+sources.files = $$SOURCES $$RESOURCES *.pro images $$HEADERS
 sources.path = $$[QT_INSTALL_DEMOS]/spreadsheet
 INSTALLS += target sources
 
+symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
Index: trunk/demos/spreadsheet/spreadsheetdelegate.cpp
===================================================================
--- trunk/demos/spreadsheet/spreadsheetdelegate.cpp	(revision 521)
+++ trunk/demos/spreadsheet/spreadsheetdelegate.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -52,5 +52,5 @@
     if (index.column() == 1) {
         QDateTimeEdit *editor = new QDateTimeEdit(parent);
-        editor->setDisplayFormat("dd/M/yyy");
+        editor->setDisplayFormat("dd/M/yyyy");
         editor->setCalendarPopup(true);
         return editor;
@@ -94,5 +94,5 @@
             dateEditor->setDate(QDate::fromString(
             index.model()->data(index, Qt::EditRole).toString(),
-            "d/M/yy"));
+            "d/M/yyyy"));
         }
     }
@@ -108,5 +108,5 @@
         QDateTimeEdit *dateEditor = qobject_cast<QDateTimeEdit *>(editor);
         if (dateEditor) {
-            model->setData(index, dateEditor->date().toString("dd/M/yyy"));
+            model->setData(index, dateEditor->date().toString("dd/M/yyyy"));
         }
     }
Index: trunk/demos/spreadsheet/spreadsheetdelegate.h
===================================================================
--- trunk/demos/spreadsheet/spreadsheetdelegate.h	(revision 521)
+++ trunk/demos/spreadsheet/spreadsheetdelegate.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/spreadsheet/spreadsheetitem.cpp
===================================================================
--- trunk/demos/spreadsheet/spreadsheetitem.cpp	(revision 521)
+++ trunk/demos/spreadsheet/spreadsheetitem.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/spreadsheet/spreadsheetitem.h
===================================================================
--- trunk/demos/spreadsheet/spreadsheetitem.h	(revision 521)
+++ trunk/demos/spreadsheet/spreadsheetitem.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/sqlbrowser/browser.cpp
===================================================================
--- trunk/demos/sqlbrowser/browser.cpp	(revision 521)
+++ trunk/demos/sqlbrowser/browser.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/sqlbrowser/browser.h
===================================================================
--- trunk/demos/sqlbrowser/browser.h	(revision 521)
+++ trunk/demos/sqlbrowser/browser.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/sqlbrowser/connectionwidget.cpp
===================================================================
--- trunk/demos/sqlbrowser/connectionwidget.cpp	(revision 521)
+++ trunk/demos/sqlbrowser/connectionwidget.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/sqlbrowser/connectionwidget.h
===================================================================
--- trunk/demos/sqlbrowser/connectionwidget.h	(revision 521)
+++ trunk/demos/sqlbrowser/connectionwidget.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/sqlbrowser/main.cpp
===================================================================
--- trunk/demos/sqlbrowser/main.cpp	(revision 521)
+++ trunk/demos/sqlbrowser/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/sqlbrowser/qsqlconnectiondialog.cpp
===================================================================
--- trunk/demos/sqlbrowser/qsqlconnectiondialog.cpp	(revision 521)
+++ trunk/demos/sqlbrowser/qsqlconnectiondialog.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/sqlbrowser/qsqlconnectiondialog.h
===================================================================
--- trunk/demos/sqlbrowser/qsqlconnectiondialog.h	(revision 521)
+++ trunk/demos/sqlbrowser/qsqlconnectiondialog.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/sqlbrowser/sqlbrowser.pro
===================================================================
--- trunk/demos/sqlbrowser/sqlbrowser.pro	(revision 521)
+++ trunk/demos/sqlbrowser/sqlbrowser.pro	(revision 561)
@@ -22,4 +22,6 @@
 INSTALLS += target sources
 
+symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+
 wince*: {
     DEPLOYMENT_PLUGIN += qsqlite
Index: trunk/demos/sub-attaq/animationmanager.cpp
===================================================================
--- trunk/demos/sub-attaq/animationmanager.cpp	(revision 561)
+++ trunk/demos/sub-attaq/animationmanager.cpp	(revision 561)
@@ -0,0 +1,98 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//Own
+#include "animationmanager.h"
+
+//Qt
+#include <QtCore/QAbstractAnimation>
+#include <QtCore/QDebug>
+
+// the universe's only animation manager
+AnimationManager *AnimationManager::instance = 0;
+
+AnimationManager::AnimationManager()
+{
+}
+
+AnimationManager *AnimationManager::self()
+{
+    if (!instance)
+        instance = new AnimationManager;
+    return instance;
+}
+
+void AnimationManager::registerAnimation(QAbstractAnimation *anim)
+{
+    QObject::connect(anim, SIGNAL(destroyed(QObject*)), this, SLOT(unregisterAnimation_helper(QObject*)));
+    animations.append(anim);
+}
+
+void AnimationManager::unregisterAnimation_helper(QObject *obj)
+{
+    unregisterAnimation(static_cast<QAbstractAnimation*>(obj));
+}
+
+void AnimationManager::unregisterAnimation(QAbstractAnimation *anim)
+{
+    QObject::disconnect(anim, SIGNAL(destroyed(QObject*)), this, SLOT(unregisterAnimation_helper(QObject*)));
+    animations.removeAll(anim);
+}
+
+void AnimationManager::unregisterAllAnimations()
+{
+    animations.clear();
+}
+
+void AnimationManager::pauseAll()
+{
+    foreach (QAbstractAnimation* animation, animations) {
+        if (animation->state() == QAbstractAnimation::Running)
+            animation->pause();
+    }
+}
+void AnimationManager::resumeAll()
+{
+    foreach (QAbstractAnimation* animation, animations) {
+        if (animation->state() == QAbstractAnimation::Paused)
+            animation->resume();
+    }
+}
Index: trunk/demos/sub-attaq/animationmanager.h
===================================================================
--- trunk/demos/sub-attaq/animationmanager.h	(revision 561)
+++ trunk/demos/sub-attaq/animationmanager.h	(revision 561)
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ANIMATIONMANAGER_H
+#define ANIMATIONMANAGER_H
+
+#include <QtCore/QObject>
+
+QT_BEGIN_NAMESPACE
+class QAbstractAnimation;
+QT_END_NAMESPACE
+
+class AnimationManager : public QObject
+{
+Q_OBJECT
+public:
+    AnimationManager();
+    void registerAnimation(QAbstractAnimation *anim);
+    void unregisterAnimation(QAbstractAnimation *anim);
+    void unregisterAllAnimations();
+    static AnimationManager *self();
+
+public slots:
+    void pauseAll();
+    void resumeAll();
+
+private slots:
+    void unregisterAnimation_helper(QObject *obj);
+
+private:
+    static AnimationManager *instance;
+    QList<QAbstractAnimation *> animations;
+};
+
+#endif // ANIMATIONMANAGER_H
Index: trunk/demos/sub-attaq/boat.cpp
===================================================================
--- trunk/demos/sub-attaq/boat.cpp	(revision 561)
+++ trunk/demos/sub-attaq/boat.cpp	(revision 561)
@@ -0,0 +1,272 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//Own
+#include "boat.h"
+#include "boat_p.h"
+#include "bomb.h"
+#include "pixmapitem.h"
+#include "graphicsscene.h"
+#include "animationmanager.h"
+#include "qanimationstate.h"
+
+//Qt
+#include <QtCore/QPropertyAnimation>
+#include <QtCore/QStateMachine>
+#include <QtCore/QHistoryState>
+#include <QtCore/QFinalState>
+#include <QtCore/QState>
+#include <QtCore/QSequentialAnimationGroup>
+
+static QAbstractAnimation *setupDestroyAnimation(Boat *boat)
+{
+    QSequentialAnimationGroup *group = new QSequentialAnimationGroup(boat);
+    for (int i = 1; i <= 4; i++) {
+        PixmapItem *step = new PixmapItem(QString("explosion/boat/step%1").arg(i),GraphicsScene::Big, boat);
+        step->setZValue(6);
+        step->setOpacity(0);
+
+        //fade-in
+        QPropertyAnimation *anim = new QPropertyAnimation(step, "opacity");
+        anim->setEndValue(1);
+        anim->setDuration(100);
+        group->insertAnimation(i-1, anim);
+
+        //and then fade-out
+        QPropertyAnimation *anim2 = new QPropertyAnimation(step, "opacity");
+        anim2->setEndValue(0);
+        anim2->setDuration(100);
+        group->addAnimation(anim2);
+    }
+
+    AnimationManager::self()->registerAnimation(group);
+    return group;
+}
+
+
+
+Boat::Boat() : PixmapItem(QString("boat"), GraphicsScene::Big),
+    speed(0), bombsAlreadyLaunched(0), direction(Boat::None), movementAnimation(0)
+{
+    setZValue(4);
+    setFlags(QGraphicsItem::ItemIsFocusable);
+
+    //The movement animation used to animate the boat
+    movementAnimation = new QPropertyAnimation(this, "pos");
+
+    //The destroy animation used to explode the boat
+    destroyAnimation = setupDestroyAnimation(this);
+
+    //We setup the state machine of the boat
+    machine = new QStateMachine(this);
+    QState *moving = new QState(machine);
+    StopState *stopState = new StopState(this, moving);
+    machine->setInitialState(moving);
+    moving->setInitialState(stopState);
+    MoveStateRight *moveStateRight = new MoveStateRight(this, moving);
+    MoveStateLeft *moveStateLeft = new MoveStateLeft(this, moving);
+    LaunchStateRight *launchStateRight = new LaunchStateRight(this, machine);
+    LaunchStateLeft *launchStateLeft = new LaunchStateLeft(this, machine);
+
+    //then setup the transitions for the rightMove state
+    KeyStopTransition *leftStopRight = new KeyStopTransition(this, QEvent::KeyPress, Qt::Key_Left);
+    leftStopRight->setTargetState(stopState);
+    KeyMoveTransition *leftMoveRight = new KeyMoveTransition(this, QEvent::KeyPress, Qt::Key_Left);
+    leftMoveRight->setTargetState(moveStateRight);
+    KeyMoveTransition *rightMoveRight = new KeyMoveTransition(this, QEvent::KeyPress, Qt::Key_Right);
+    rightMoveRight->setTargetState(moveStateRight);
+    KeyMoveTransition *rightMoveStop = new KeyMoveTransition(this, QEvent::KeyPress, Qt::Key_Right);
+    rightMoveStop->setTargetState(moveStateRight);
+
+    //then setup the transitions for the leftMove state
+    KeyStopTransition *rightStopLeft = new KeyStopTransition(this, QEvent::KeyPress, Qt::Key_Right);
+    rightStopLeft->setTargetState(stopState);
+    KeyMoveTransition *rightMoveLeft = new KeyMoveTransition(this, QEvent::KeyPress, Qt::Key_Right);
+    rightMoveLeft->setTargetState(moveStateLeft);
+    KeyMoveTransition *leftMoveLeft = new KeyMoveTransition(this, QEvent::KeyPress,Qt::Key_Left);
+    leftMoveLeft->setTargetState(moveStateLeft);
+    KeyMoveTransition *leftMoveStop = new KeyMoveTransition(this, QEvent::KeyPress,Qt::Key_Left);
+    leftMoveStop->setTargetState(moveStateLeft);
+
+    //We set up the right move state
+    moveStateRight->addTransition(leftStopRight);
+    moveStateRight->addTransition(leftMoveRight);
+    moveStateRight->addTransition(rightMoveRight);
+    stopState->addTransition(rightMoveStop);
+
+    //We set up the left move state
+    moveStateLeft->addTransition(rightStopLeft);
+    moveStateLeft->addTransition(leftMoveLeft);
+    moveStateLeft->addTransition(rightMoveLeft);
+    stopState->addTransition(leftMoveStop);
+
+    //The animation is finished, it means we reached the border of the screen, the boat is stopped so we move to the stop state
+    moveStateLeft->addTransition(movementAnimation, SIGNAL(finished()), stopState);
+    moveStateRight->addTransition(movementAnimation, SIGNAL(finished()), stopState);
+
+    //We set up the keys for dropping bombs
+    KeyLaunchTransition *upFireLeft = new KeyLaunchTransition(this, QEvent::KeyPress, Qt::Key_Up);
+    upFireLeft->setTargetState(launchStateRight);
+    KeyLaunchTransition *upFireRight = new KeyLaunchTransition(this, QEvent::KeyPress, Qt::Key_Up);
+    upFireRight->setTargetState(launchStateRight);
+    KeyLaunchTransition *upFireStop = new KeyLaunchTransition(this, QEvent::KeyPress, Qt::Key_Up);
+    upFireStop->setTargetState(launchStateRight);
+    KeyLaunchTransition *downFireLeft = new KeyLaunchTransition(this, QEvent::KeyPress, Qt::Key_Down);
+    downFireLeft->setTargetState(launchStateLeft);
+    KeyLaunchTransition *downFireRight = new KeyLaunchTransition(this, QEvent::KeyPress, Qt::Key_Down);
+    downFireRight->setTargetState(launchStateLeft);
+    KeyLaunchTransition *downFireMove = new KeyLaunchTransition(this, QEvent::KeyPress, Qt::Key_Down);
+    downFireMove->setTargetState(launchStateLeft);
+
+    //We set up transitions for fire up
+    moveStateRight->addTransition(upFireRight);
+    moveStateLeft->addTransition(upFireLeft);
+    stopState->addTransition(upFireStop);
+
+    //We set up transitions for fire down
+    moveStateRight->addTransition(downFireRight);
+    moveStateLeft->addTransition(downFireLeft);
+    stopState->addTransition(downFireMove);
+
+    //Finally the launch state should come back to its original state
+    QHistoryState *historyState = new QHistoryState(moving);
+    launchStateLeft->addTransition(historyState);
+    launchStateRight->addTransition(historyState);
+
+    QFinalState *final = new QFinalState(machine);
+
+    //This state play the destroyed animation
+    QAnimationState *destroyedState = new QAnimationState(machine);
+    destroyedState->setAnimation(destroyAnimation);
+
+    //Play a nice animation when the boat is destroyed
+    moving->addTransition(this, SIGNAL(boatDestroyed()), destroyedState);
+
+    //Transition to final state when the destroyed animation is finished
+    destroyedState->addTransition(destroyedState, SIGNAL(animationFinished()), final);
+
+    //The machine has finished to be executed, then the boat is dead
+    connect(machine,SIGNAL(finished()), this, SIGNAL(boatExecutionFinished()));
+
+}
+
+void Boat::run()
+{
+    //We register animations
+    AnimationManager::self()->registerAnimation(movementAnimation);
+    AnimationManager::self()->registerAnimation(destroyAnimation);
+    machine->start();
+}
+
+void Boat::stop()
+{
+    movementAnimation->stop();
+    machine->stop();
+}
+
+void Boat::updateBoatMovement()
+{
+    if (speed == 0 || direction == Boat::None) {
+        movementAnimation->stop();
+        return;
+    }
+
+    movementAnimation->stop();
+
+    if (direction == Boat::Left) {
+        movementAnimation->setEndValue(QPointF(0,y()));
+        movementAnimation->setDuration(x()/speed*15);
+    }
+    else /*if (direction == Boat::Right)*/ {
+        movementAnimation->setEndValue(QPointF(scene()->width()-size().width(),y()));
+        movementAnimation->setDuration((scene()->width()-size().width()-x())/speed*15);
+    }
+    movementAnimation->start();
+}
+
+void Boat::destroy()
+{
+    movementAnimation->stop();
+    emit boatDestroyed();
+}
+
+int Boat::bombsLaunched() const
+{
+    return bombsAlreadyLaunched;
+}
+
+void Boat::setBombsLaunched(int number)
+{
+    if (number > MAX_BOMB) {
+        qWarning("Boat::setBombsLaunched : It impossible to launch that number of bombs");
+        return;
+    }
+    bombsAlreadyLaunched = number;
+}
+
+int Boat::currentSpeed() const
+{
+    return speed;
+}
+
+void Boat::setCurrentSpeed(int speed)
+{
+    if (speed > 3 || speed < 0) {
+        qWarning("Boat::setCurrentSpeed: The boat can't run on that speed");
+        return;
+    }
+    this->speed = speed;
+}
+
+enum Boat::Movement Boat::currentDirection() const
+{
+    return direction;
+}
+
+void Boat::setCurrentDirection(Movement direction)
+{
+    this->direction = direction;
+}
+
+int Boat::type() const
+{
+    return Type;
+}
Index: trunk/demos/sub-attaq/boat.h
===================================================================
--- trunk/demos/sub-attaq/boat.h	(revision 561)
+++ trunk/demos/sub-attaq/boat.h	(revision 561)
@@ -0,0 +1,95 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __BOAT__H__
+#define __BOAT__H__
+
+#include "pixmapitem.h"
+
+class Bomb;
+QT_BEGIN_NAMESPACE
+class QVariantAnimation;
+class QAbstractAnimation;
+class QStateMachine;
+QT_END_NAMESPACE
+
+class Boat : public PixmapItem
+{
+Q_OBJECT
+public:
+    enum Movement {
+       None = 0,
+       Left,
+       Right
+    };
+    enum { Type = UserType + 2 };
+    Boat();
+    void destroy();
+    void run();
+    void stop();
+
+    int bombsLaunched() const;
+    void setBombsLaunched(int number);
+
+    int currentSpeed() const;
+    void setCurrentSpeed(int speed);
+
+    enum Movement currentDirection() const;
+    void setCurrentDirection(Movement direction);
+
+    void updateBoatMovement();
+
+    virtual int type() const;
+
+signals:
+    void boatDestroyed();
+    void boatExecutionFinished();
+
+private:
+    int speed;
+    int bombsAlreadyLaunched;
+    Movement direction;
+    QVariantAnimation *movementAnimation;
+    QAbstractAnimation *destroyAnimation;
+    QStateMachine *machine;
+};
+
+#endif //__BOAT__H__
Index: trunk/demos/sub-attaq/boat_p.h
===================================================================
--- trunk/demos/sub-attaq/boat_p.h	(revision 561)
+++ trunk/demos/sub-attaq/boat_p.h	(revision 561)
@@ -0,0 +1,232 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef BOAT_P_H
+#define BOAT_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists purely as an
+// implementation detail.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+//Own
+#include "bomb.h"
+#include "graphicsscene.h"
+
+// Qt
+#include <QtGui/QKeyEventTransition>
+
+static const int MAX_BOMB = 5;
+
+
+//These transtion test if we have to stop the boat (i.e current speed is 1)
+class KeyStopTransition : public QKeyEventTransition
+{
+public:
+    KeyStopTransition(Boat *b, QEvent::Type t, int k)
+    : QKeyEventTransition(b, t, k), boat(b), key(k)
+    {
+    }
+protected:
+    virtual bool eventTest(QEvent *event)
+    {
+        if (!QKeyEventTransition::eventTest(event))
+            return false;
+        return (boat->currentSpeed() == 1);
+    }
+private:
+    Boat * boat;
+    int key;
+};
+
+//These transtion test if we have to move the boat (i.e current speed was 0 or another value)
+ class KeyMoveTransition : public QKeyEventTransition
+{
+public:
+    KeyMoveTransition(Boat *b, QEvent::Type t, int k)
+    : QKeyEventTransition(b, t, k), boat(b), key(k)
+    {
+    }
+protected:
+    virtual bool eventTest(QEvent *event)
+    {
+        if (!QKeyEventTransition::eventTest(event))
+            return false;
+        return (boat->currentSpeed() >= 0);
+    }
+    void onTransition(QEvent *)
+    {
+        //We decrease the speed if needed
+        if (key == Qt::Key_Left && boat->currentDirection() == Boat::Right)
+            boat->setCurrentSpeed(boat->currentSpeed() - 1);
+        else if (key == Qt::Key_Right && boat->currentDirection() == Boat::Left)
+            boat->setCurrentSpeed(boat->currentSpeed() - 1);
+        else if (boat->currentSpeed() < 3)
+            boat->setCurrentSpeed(boat->currentSpeed() + 1);
+        boat->updateBoatMovement();
+    }
+private:
+    Boat * boat;
+    int key;
+};
+
+//This transition trigger the bombs launch
+ class KeyLaunchTransition : public QKeyEventTransition
+{
+public:
+    KeyLaunchTransition(Boat *boat, QEvent::Type type, int key)
+    : QKeyEventTransition(boat, type, key), boat(boat), key(key)
+    {
+    }
+protected:
+    virtual bool eventTest(QEvent *event)
+    {
+        if (!QKeyEventTransition::eventTest(event))
+            return false;
+        //We have enough bomb?
+        return (boat->bombsLaunched() < MAX_BOMB);
+    }
+private:
+    Boat * boat;
+    int key;
+};
+
+//This state is describing when the boat is moving right
+class MoveStateRight : public QState
+{
+public:
+    MoveStateRight(Boat *boat,QState *parent = 0) : QState(parent), boat(boat)
+    {
+    }
+protected:
+    void onEntry(QEvent *)
+    {
+        boat->setCurrentDirection(Boat::Right);
+        boat->updateBoatMovement();
+    }
+private:
+    Boat * boat;
+};
+
+ //This state is describing when the boat is moving left
+class MoveStateLeft : public QState
+{
+public:
+    MoveStateLeft(Boat *boat,QState *parent = 0) : QState(parent), boat(boat)
+    {
+    }
+protected:
+    void onEntry(QEvent *)
+    {
+        boat->setCurrentDirection(Boat::Left);
+        boat->updateBoatMovement();
+    }
+private:
+    Boat * boat;
+};
+
+//This state is describing when the boat is in a stand by position
+class StopState : public QState
+{
+public:
+    StopState(Boat *boat,QState *parent = 0) : QState(parent), boat(boat)
+    {
+    }
+protected:
+    void onEntry(QEvent *)
+    {
+        boat->setCurrentSpeed(0);
+        boat->setCurrentDirection(Boat::None);
+        boat->updateBoatMovement();
+    }
+private:
+    Boat * boat;
+};
+
+//This state is describing the launch of the torpedo on the right
+class LaunchStateRight : public QState
+{
+public:
+    LaunchStateRight(Boat *boat,QState *parent = 0) : QState(parent), boat(boat)
+    {
+    }
+protected:
+    void onEntry(QEvent *)
+    {
+        Bomb *b = new Bomb();
+        b->setPos(boat->x()+boat->size().width(),boat->y());
+        GraphicsScene *scene = static_cast<GraphicsScene *>(boat->scene());
+        scene->addItem(b);
+        b->launch(Bomb::Right);
+        boat->setBombsLaunched(boat->bombsLaunched() + 1);
+    }
+private:
+    Boat * boat;
+};
+
+//This state is describing the launch of the torpedo on the left
+class LaunchStateLeft : public QState
+{
+public:
+    LaunchStateLeft(Boat *boat,QState *parent = 0) : QState(parent), boat(boat)
+    {
+    }
+protected:
+    void onEntry(QEvent *)
+    {
+        Bomb *b = new Bomb();
+        b->setPos(boat->x() - b->size().width(), boat->y());
+        GraphicsScene *scene = static_cast<GraphicsScene *>(boat->scene());
+        scene->addItem(b);
+        b->launch(Bomb::Left);
+        boat->setBombsLaunched(boat->bombsLaunched() + 1);
+    }
+private:
+    Boat * boat;
+};
+
+#endif // BOAT_P_H
Index: trunk/demos/sub-attaq/bomb.cpp
===================================================================
--- trunk/demos/sub-attaq/bomb.cpp	(revision 561)
+++ trunk/demos/sub-attaq/bomb.cpp	(revision 561)
@@ -0,0 +1,118 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//Own
+#include "bomb.h"
+#include "submarine.h"
+#include "pixmapitem.h"
+#include "animationmanager.h"
+#include "qanimationstate.h"
+
+//Qt
+#include <QtCore/QSequentialAnimationGroup>
+#include <QtCore/QPropertyAnimation>
+#include <QtCore/QStateMachine>
+#include <QtCore/QFinalState>
+
+Bomb::Bomb() : PixmapItem(QString("bomb"), GraphicsScene::Big)
+{
+    setZValue(2);
+}
+
+void Bomb::launch(Bomb::Direction direction)
+{
+    QSequentialAnimationGroup *launchAnimation = new QSequentialAnimationGroup;
+    AnimationManager::self()->registerAnimation(launchAnimation);
+    qreal delta = direction == Right ? 20 : - 20;
+    QPropertyAnimation *anim = new QPropertyAnimation(this, "pos");
+    anim->setEndValue(QPointF(x() + delta,y() - 20));
+    anim->setDuration(150);
+    launchAnimation->addAnimation(anim);
+    anim = new QPropertyAnimation(this, "pos");
+    anim->setEndValue(QPointF(x() + delta*2, y() ));
+    anim->setDuration(150);
+    launchAnimation->addAnimation(anim);
+    anim = new QPropertyAnimation(this, "pos");
+    anim->setEndValue(QPointF(x() + delta*2,scene()->height()));
+    anim->setDuration(y()/2*60);
+    launchAnimation->addAnimation(anim);
+    connect(anim,SIGNAL(valueChanged(QVariant)),this,SLOT(onAnimationLaunchValueChanged(QVariant)));
+    connect(this, SIGNAL(bombExploded()), launchAnimation, SLOT(stop()));
+    //We setup the state machine of the bomb
+    QStateMachine *machine = new QStateMachine(this);
+
+    //This state is when the launch animation is playing
+    QAnimationState *launched = new QAnimationState(machine);
+    launched->setAnimation(launchAnimation);
+
+    //End
+    QFinalState *final = new QFinalState(machine);
+
+    machine->setInitialState(launched);
+
+    //### Add a nice animation when the bomb is destroyed
+    launched->addTransition(this, SIGNAL(bombExploded()),final);
+
+    //If the animation is finished, then we move to the final state
+    launched->addTransition(launched, SIGNAL(animationFinished()), final);
+
+    //The machine has finished to be executed, then the boat is dead
+    connect(machine,SIGNAL(finished()),this, SIGNAL(bombExecutionFinished()));
+
+    machine->start();
+
+}
+
+void Bomb::onAnimationLaunchValueChanged(const QVariant &)
+{
+    foreach (QGraphicsItem * item , collidingItems(Qt::IntersectsItemBoundingRect)) {
+        if (item->type() == SubMarine::Type) {
+            SubMarine *s = static_cast<SubMarine *>(item);
+            destroy();
+            s->destroy();
+        }
+    }
+}
+
+void Bomb::destroy()
+{
+    emit bombExploded();
+}
Index: trunk/demos/sub-attaq/bomb.h
===================================================================
--- trunk/demos/sub-attaq/bomb.h	(revision 561)
+++ trunk/demos/sub-attaq/bomb.h	(revision 561)
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __BOMB__H__
+#define __BOMB__H__
+
+#include "pixmapitem.h"
+
+class Bomb : public PixmapItem
+{
+Q_OBJECT
+public:
+    enum Direction {
+        Left =  0,
+        Right
+    };
+    Bomb();
+    void launch(Direction direction);
+    void destroy();
+
+signals:
+    void bombExploded();
+    void bombExecutionFinished();
+
+private slots:
+    void onAnimationLaunchValueChanged(const QVariant &);
+};
+
+#endif //__BOMB__H__
Index: trunk/demos/sub-attaq/data.xml
===================================================================
--- trunk/demos/sub-attaq/data.xml	(revision 561)
+++ trunk/demos/sub-attaq/data.xml	(revision 561)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<subattaq>
+    <submarines>
+        <submarine type="0" points="10" name="Q1" />
+        <submarine type="1" points="20" name="Q2" />
+    </submarines>
+    <levels>
+        <level id="0" name="Seaman recruit">
+            <subinstance type="0" nb="1"/>
+        </level>
+        <level id="1" name="Seaman apprentice">
+            <subinstance type="0" nb="2"/>
+        </level>
+	<level id="2" name="Seaman">
+            <subinstance type="0" nb="4"/>
+        </level>
+	<level id="3" name="Petty Officer Third Class">
+            <subinstance type="0" nb="6"/>
+        </level>
+	<level id="4" name="Petty Officer Second Class">
+            <subinstance type="0" nb="6"/>
+        </level>
+	<level id="5" name="Petty Officer First Class">
+            <subinstance type="0" nb="8"/>
+        </level>
+	<level id="6" name="Lieutenant">
+            <subinstance type="0" nb="10"/>
+        </level>
+	<level id="7" name="Commander">
+            <subinstance type="0" nb="15"/>
+        </level>
+	<level id="8" name="Captain">
+            <subinstance type="0" nb="12"/>
+        </level>
+	<level id="9" name="Admiral">
+            <subinstance type="0" nb="12"/>
+        </level>
+    </levels>
+</subattaq>
Index: trunk/demos/sub-attaq/graphicsscene.cpp
===================================================================
--- trunk/demos/sub-attaq/graphicsscene.cpp	(revision 561)
+++ trunk/demos/sub-attaq/graphicsscene.cpp	(revision 561)
@@ -0,0 +1,282 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//Own
+#include "graphicsscene.h"
+#include "states.h"
+#include "boat.h"
+#include "submarine.h"
+#include "torpedo.h"
+#include "bomb.h"
+#include "pixmapitem.h"
+#include "animationmanager.h"
+#include "qanimationstate.h"
+#include "progressitem.h"
+#include "textinformationitem.h"
+
+//Qt
+#include <QtCore/QPropertyAnimation>
+#include <QtCore/QSequentialAnimationGroup>
+#include <QtCore/QParallelAnimationGroup>
+#include <QtCore/QStateMachine>
+#include <QtCore/QFinalState>
+#include <QtCore/QPauseAnimation>
+#include <QtGui/QAction>
+#include <QtCore/QDir>
+#include <QtGui/QApplication>
+#include <QtGui/QMessageBox>
+#include <QtGui/QGraphicsView>
+#include <QtGui/QGraphicsSceneMouseEvent>
+#include <QtCore/QXmlStreamReader>
+
+GraphicsScene::GraphicsScene(int x, int y, int width, int height, Mode mode)
+    : QGraphicsScene(x , y, width, height), mode(mode), boat(new Boat)
+{
+    PixmapItem *backgroundItem = new PixmapItem(QString("background"),mode);
+    backgroundItem->setZValue(1);
+    backgroundItem->setPos(0,0);
+    addItem(backgroundItem);
+
+    PixmapItem *surfaceItem = new PixmapItem(QString("surface"),mode);
+    surfaceItem->setZValue(3);
+    surfaceItem->setPos(0,sealLevel() - surfaceItem->boundingRect().height()/2);
+    addItem(surfaceItem);
+
+    //The item that display score and level
+    progressItem = new ProgressItem(backgroundItem);
+
+    textInformationItem = new TextInformationItem(backgroundItem);
+    textInformationItem->hide();
+    //We create the boat
+    addItem(boat);
+    boat->setPos(this->width()/2, sealLevel() - boat->size().height());
+    boat->hide();
+
+    //parse the xml that contain all data of the game
+    QXmlStreamReader reader;
+    QFile file(":data.xml");
+    file.open(QIODevice::ReadOnly);
+    reader.setDevice(&file);
+    LevelDescription currentLevel;
+    while (!reader.atEnd()) {
+         reader.readNext();
+         if (reader.tokenType() == QXmlStreamReader::StartElement) {
+             if (reader.name() == "submarine") {
+                 SubmarineDescription desc;
+                 desc.name = reader.attributes().value("name").toString();
+                 desc.points = reader.attributes().value("points").toString().toInt();
+                 desc.type = reader.attributes().value("type").toString().toInt();
+                 submarinesData.append(desc);
+             } else if (reader.name() == "level") {
+                 currentLevel.id = reader.attributes().value("id").toString().toInt();
+                 currentLevel.name = reader.attributes().value("name").toString();
+             } else if (reader.name() == "subinstance") {
+                 currentLevel.submarines.append(qMakePair(reader.attributes().value("type").toString().toInt(), reader.attributes().value("nb").toString().toInt()));
+             }
+         } else if (reader.tokenType() == QXmlStreamReader::EndElement) {
+            if (reader.name() == "level") {
+                levelsData.insert(currentLevel.id, currentLevel);
+                currentLevel.submarines.clear();
+            }
+         }
+   }
+}
+
+qreal GraphicsScene::sealLevel() const
+{
+    return (mode == Big) ? 220 : 160;
+}
+
+void GraphicsScene::setupScene(QAction *newAction, QAction *quitAction)
+{
+    static const int nLetters = 10;
+    static struct {
+        char const *pix;
+        qreal initX, initY;
+        qreal destX, destY;
+    } logoData[nLetters] = {
+        {"s",   -1000, -1000, 300, 150 },
+        {"u",    -800, -1000, 350, 150 },
+        {"b",    -600, -1000, 400, 120 },
+        {"dash", -400, -1000, 460, 150 },
+        {"a",    1000,  2000, 350, 250 },
+        {"t",     800,  2000, 400, 250 },
+        {"t2",    600,  2000, 430, 250 },
+        {"a2",    400,  2000, 465, 250 },
+        {"q",     200,  2000, 510, 250 },
+        {"excl",    0,  2000, 570, 220 } };
+
+    QSequentialAnimationGroup * lettersGroupMoving = new QSequentialAnimationGroup(this);
+    QParallelAnimationGroup * lettersGroupFading = new QParallelAnimationGroup(this);
+
+    for (int i = 0; i < nLetters; ++i) {
+        PixmapItem *logo = new PixmapItem(QLatin1String(":/logo-") + logoData[i].pix, this);
+        logo->setPos(logoData[i].initX, logoData[i].initY);
+        logo->setZValue(i + 3);
+        //creation of the animations for moving letters
+        QPropertyAnimation *moveAnim = new QPropertyAnimation(logo, "pos", lettersGroupMoving);
+        moveAnim->setEndValue(QPointF(logoData[i].destX, logoData[i].destY));
+        moveAnim->setDuration(200);
+        moveAnim->setEasingCurve(QEasingCurve::OutElastic);
+        lettersGroupMoving->addPause(50);
+        //creation of the animations for fading out the letters
+        QPropertyAnimation *fadeAnim = new QPropertyAnimation(logo, "opacity", lettersGroupFading);
+        fadeAnim->setDuration(800);
+        fadeAnim->setEndValue(0);
+        fadeAnim->setEasingCurve(QEasingCurve::OutQuad);
+    }
+
+    QStateMachine *machine = new QStateMachine(this);
+
+    //This state is when the player is playing
+    PlayState *gameState = new PlayState(this, machine);
+
+    //Final state
+    QFinalState *final = new QFinalState(machine);
+
+    //Animation when the player enter in the game
+    QAnimationState *lettersMovingState = new QAnimationState(machine);
+    lettersMovingState->setAnimation(lettersGroupMoving);
+
+    //Animation when the welcome screen disappear
+    QAnimationState *lettersFadingState = new QAnimationState(machine);
+    lettersFadingState->setAnimation(lettersGroupFading);
+
+    //if new game then we fade out the welcome screen and start playing
+    lettersMovingState->addTransition(newAction, SIGNAL(triggered()), lettersFadingState);
+    lettersFadingState->addTransition(lettersFadingState, SIGNAL(animationFinished()), gameState);
+
+    //New Game is triggered then player start playing
+    gameState->addTransition(newAction, SIGNAL(triggered()), gameState);
+
+    //Wanna quit, then connect to CTRL+Q
+    gameState->addTransition(quitAction, SIGNAL(triggered()), final);
+    lettersMovingState->addTransition(quitAction, SIGNAL(triggered()), final);
+
+    //Welcome screen is the initial state
+    machine->setInitialState(lettersMovingState);
+
+    machine->start();
+
+    //We reach the final state, then we quit
+    connect(machine, SIGNAL(finished()), qApp, SLOT(quit()));
+}
+
+void GraphicsScene::addItem(Bomb *bomb)
+{
+    bombs.insert(bomb);
+    connect(bomb,SIGNAL(bombExecutionFinished()),this, SLOT(onBombExecutionFinished()));
+    QGraphicsScene::addItem(bomb);
+}
+
+void GraphicsScene::addItem(Torpedo *torpedo)
+{
+    torpedos.insert(torpedo);
+    connect(torpedo,SIGNAL(torpedoExecutionFinished()),this, SLOT(onTorpedoExecutionFinished()));
+    QGraphicsScene::addItem(torpedo);
+}
+
+void GraphicsScene::addItem(SubMarine *submarine)
+{
+    submarines.insert(submarine);
+    connect(submarine,SIGNAL(subMarineExecutionFinished()),this, SLOT(onSubMarineExecutionFinished()));
+    QGraphicsScene::addItem(submarine);
+}
+
+void GraphicsScene::addItem(QGraphicsItem *item)
+{
+    QGraphicsScene::addItem(item);
+}
+
+void GraphicsScene::onBombExecutionFinished()
+{
+    Bomb *bomb = qobject_cast<Bomb *>(sender());
+    bombs.remove(bomb);
+    bomb->deleteLater();
+    if (boat)
+        boat->setBombsLaunched(boat->bombsLaunched() - 1);
+}
+
+void GraphicsScene::onTorpedoExecutionFinished()
+{
+    Torpedo *torpedo = qobject_cast<Torpedo *>(sender());
+    torpedos.remove(torpedo);
+    torpedo->deleteLater();
+}
+
+void GraphicsScene::onSubMarineExecutionFinished()
+{
+    SubMarine *submarine = qobject_cast<SubMarine *>(sender());
+    submarines.remove(submarine);
+    if (submarines.count() == 0)
+        emit allSubMarineDestroyed(submarine->points());
+    else
+        emit subMarineDestroyed(submarine->points());
+    submarine->deleteLater();
+}
+
+void GraphicsScene::clearScene()
+{
+    foreach (SubMarine *sub, submarines) {
+        sub->destroy();
+        sub->deleteLater();
+    }
+
+    foreach (Torpedo *torpedo, torpedos) {
+        torpedo->destroy();
+        torpedo->deleteLater();
+    }
+
+    foreach (Bomb *bomb, bombs) {
+        bomb->destroy();
+        bomb->deleteLater();
+    }
+
+    submarines.clear();
+    bombs.clear();
+    torpedos.clear();
+
+    AnimationManager::self()->unregisterAllAnimations();
+
+    boat->stop();
+    boat->hide();
+    boat->setEnabled(true);
+}
Index: trunk/demos/sub-attaq/graphicsscene.h
===================================================================
--- trunk/demos/sub-attaq/graphicsscene.h	(revision 561)
+++ trunk/demos/sub-attaq/graphicsscene.h	(revision 561)
@@ -0,0 +1,122 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __GRAPHICSSCENE__H__
+#define __GRAPHICSSCENE__H__
+
+//Qt
+#include <QtGui/QGraphicsScene>
+#include <QtCore/QSet>
+#include <QtCore/QState>
+
+
+class Boat;
+class SubMarine;
+class Torpedo;
+class Bomb;
+class PixmapItem;
+class ProgressItem;
+class TextInformationItem;
+QT_BEGIN_NAMESPACE
+class QAction;
+QT_END_NAMESPACE
+
+class GraphicsScene : public QGraphicsScene
+{
+Q_OBJECT
+public:
+    enum Mode {
+        Big = 0,
+        Small
+    };
+
+    struct SubmarineDescription {
+        int type;
+        int points;
+        QString name;
+    };
+
+    struct LevelDescription {
+        int id;
+        QString name;
+        QList<QPair<int,int> > submarines;
+    };
+
+    GraphicsScene(int x, int y, int width, int height, Mode mode = Big);
+    qreal sealLevel() const;
+    void setupScene(QAction *newAction, QAction *quitAction);
+    void addItem(Bomb *bomb);
+    void addItem(Torpedo *torpedo);
+    void addItem(SubMarine *submarine);
+    void addItem(QGraphicsItem *item);
+    void clearScene();
+
+signals:
+    void subMarineDestroyed(int);
+    void allSubMarineDestroyed(int);
+
+private slots:
+    void onBombExecutionFinished();
+    void onTorpedoExecutionFinished();
+    void onSubMarineExecutionFinished();
+
+private:
+    Mode mode;
+    ProgressItem *progressItem;
+    TextInformationItem *textInformationItem;
+    Boat *boat;
+    QSet<SubMarine *> submarines;
+    QSet<Bomb *> bombs;
+    QSet<Torpedo *> torpedos;
+    QVector<SubmarineDescription> submarinesData;
+    QHash<int, LevelDescription> levelsData;
+
+    friend class PauseState;
+    friend class PlayState;
+    friend class LevelState;
+    friend class LostState;
+    friend class WinState;
+    friend class WinTransition;
+    friend class UpdateScoreTransition;
+};
+
+#endif //__GRAPHICSSCENE__H__
+
Index: trunk/demos/sub-attaq/main.cpp
===================================================================
--- trunk/demos/sub-attaq/main.cpp	(revision 561)
+++ trunk/demos/sub-attaq/main.cpp	(revision 561)
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+
+#include "mainwindow.h"
+
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+    Q_INIT_RESOURCE(subattaq);
+
+    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
+
+    MainWindow w;
+    w.show();
+
+    return app.exec();
+}
Index: trunk/demos/sub-attaq/mainwindow.cpp
===================================================================
--- trunk/demos/sub-attaq/mainwindow.cpp	(revision 561)
+++ trunk/demos/sub-attaq/mainwindow.cpp	(revision 561)
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//Own
+#include "mainwindow.h"
+#include "graphicsscene.h"
+
+//Qt
+#include <QGraphicsView>
+
+#ifdef QT_NO_OPENGL
+    #include <QtGui/QMenuBar>
+    #include <QtGui/QLayout>
+    #include <QtGui/QApplication>
+#else
+    #include <QtOpenGL/QtOpenGL>
+#endif
+
+MainWindow::MainWindow() : QMainWindow(0)
+{
+    QMenu *file = menuBar()->addMenu(tr("&File"));
+
+    QAction *newAction = file->addAction(tr("New Game"));
+    newAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_N));
+    QAction *quitAction = file->addAction(tr("Quit"));
+    quitAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_Q));
+
+    if (QApplication::arguments().contains("-fullscreen")) {
+        scene = new GraphicsScene(0, 0, 750, 400, GraphicsScene::Small);
+        setWindowState(Qt::WindowFullScreen);
+    } else {
+        scene = new GraphicsScene(0, 0, 880, 630);
+        layout()->setSizeConstraint(QLayout::SetFixedSize);
+    }
+
+    view = new QGraphicsView(scene, this);
+    view->setAlignment(Qt::AlignLeft | Qt::AlignTop);
+    scene->setupScene(newAction, quitAction);
+#ifndef QT_NO_OPENGL
+    view->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
+#endif
+
+    setCentralWidget(view);
+}
Index: trunk/demos/sub-attaq/mainwindow.h
===================================================================
--- trunk/demos/sub-attaq/mainwindow.h	(revision 561)
+++ trunk/demos/sub-attaq/mainwindow.h	(revision 561)
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __MAINWINDOW__H__
+#define __MAINWINDOW__H__
+
+//Qt
+#include <QtGui/QMainWindow>
+class GraphicsScene;
+QT_BEGIN_NAMESPACE
+class QGraphicsView;
+QT_END_NAMESPACE
+
+class MainWindow : public QMainWindow
+{
+Q_OBJECT
+public:
+    MainWindow();
+
+private:
+    GraphicsScene *scene;
+    QGraphicsView *view;
+};
+
+#endif //__MAINWINDOW__H__
Index: trunk/demos/sub-attaq/pics/scalable/background-n810.svg
===================================================================
--- trunk/demos/sub-attaq/pics/scalable/background-n810.svg	(revision 561)
+++ trunk/demos/sub-attaq/pics/scalable/background-n810.svg	(revision 561)
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="744.09448"
+   height="1052.3622"
+   id="svg2588"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   sodipodi:docname="background-n810.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <metadata
+     id="metadata28">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     inkscape:window-height="1141"
+     inkscape:window-width="1920"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     showgrid="false"
+     inkscape:zoom="1.2399902"
+     inkscape:cx="375"
+     inkscape:cy="461.074"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs2590">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective30" />
+    <linearGradient
+       id="linearGradient3746">
+      <stop
+         id="stop3748"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3750"
+         style="stop-color:#0074b7;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       cx="82.966125"
+       cy="-178.42453"
+       r="526.79456"
+       fx="82.966125"
+       fy="-178.42453"
+       id="radialGradient3880"
+       xlink:href="#linearGradient3746"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.4952094,0.2388475,-0.1040669,0.3734391,-208.61982,418.216)" />
+    <linearGradient
+       id="linearGradient3624">
+      <stop
+         id="stop3626"
+         style="stop-color:#3a8daf;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3636"
+         style="stop-color:#252525;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="552.98486"
+       y1="390.56842"
+       x2="549.39465"
+       y2="702.3479"
+       id="linearGradient3630"
+       xlink:href="#linearGradient3624"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.3373776,0,0,1.186038,-986.88716,67.776416)" />
+    <linearGradient
+       id="linearGradient3816">
+      <stop
+         id="stop3818"
+         style="stop-color:#ad8b00;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3820"
+         style="stop-color:#ad8b00;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="573"
+       y1="755.46222"
+       x2="573"
+       y2="700.13464"
+       id="linearGradient3826"
+       xlink:href="#linearGradient3816"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.2561681,-151.5,-34.518664)" />
+    <linearGradient
+       id="linearGradient5097">
+      <stop
+         id="stop5099"
+         style="stop-color:#19a2db;stop-opacity:0"
+         offset="0" />
+      <stop
+         id="stop5109"
+         style="stop-color:#1379a7;stop-opacity:0.49803922"
+         offset="0.30000001" />
+      <stop
+         id="stop5101"
+         style="stop-color:#0e5173;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="590.84674"
+       y1="274.57559"
+       x2="590.84674"
+       y2="334.01376"
+       id="linearGradient5103"
+       xlink:href="#linearGradient5097"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-151.5,156.75229)"
+       spreadMethod="pad" />
+  </defs>
+  <g
+     id="layer1">
+    <rect
+       width="1053.5891"
+       height="206.64989"
+       x="-151.79456"
+       y="330.16019"
+       id="rect3638"
+       style="opacity:1;fill:url(#radialGradient3880);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.1880002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <rect
+       width="1054.4708"
+       height="364.81519"
+       x="-152.23541"
+       y="533.48895"
+       id="rect3622"
+       style="opacity:1;fill:url(#linearGradient3630);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.13464069;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       d="M -152.5,877.11847 C 120.5,865.81296 -202.86309,769.3663 109.5,871.29717 C 172.96247,892.00636 243.5,872.55334 297.5,871.29717 C 351.5,870.041 311.5,859.80335 358.5,876.13354 C 405.5,892.46372 553.5,861.09903 598.5,854.8182 C 643.5,848.53736 756.5,841.79698 795.5,853.10249 C 834.5,864.408 904.5,866.2725 904.5,866.2725 L 901.5,903.95754 L -154.5,902.70137 L -152.5,877.11847 z"
+       id="path3814"
+       style="fill:url(#linearGradient3826);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       d="M 902.20121,894.16261 C 632.01828,889.43035 756.73005,860.2801 614.20403,894.1311 C 596.58819,898.315 408.23621,883.21212 400.43291,894.1311 C 376.86263,927.11261 75.265447,868.1243 34.250926,886.79082 C 31.281885,888.14209 12.514878,884.22134 -12.264082,889.72008 C -48.555335,897.77353 -64.717178,885.62471 -103.31472,890.35697 C -141.91229,895.08922 -145.87102,891.93439 -145.87102,891.93439 L -152.79879,903.10131 L 892.3044,902.5755 L 902.20121,894.16261 z"
+       id="path3828"
+       style="fill:#ad8b00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+</svg>
Index: trunk/demos/sub-attaq/pics/scalable/background.svg
===================================================================
--- trunk/demos/sub-attaq/pics/scalable/background.svg	(revision 561)
+++ trunk/demos/sub-attaq/pics/scalable/background.svg	(revision 561)
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="744.09448"
+   height="1052.3622"
+   id="svg2588"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   sodipodi:docname="background.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <metadata
+     id="metadata28">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     inkscape:window-height="1141"
+     inkscape:window-width="1920"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     showgrid="false"
+     inkscape:zoom="0.93884027"
+     inkscape:cx="473.72605"
+     inkscape:cy="538.63678"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs2590">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective30" />
+    <linearGradient
+       id="linearGradient3746">
+      <stop
+         id="stop3748"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3750"
+         style="stop-color:#0074b7;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       cx="82.966125"
+       cy="-178.42453"
+       r="526.79456"
+       fx="82.966125"
+       fy="-178.42453"
+       id="radialGradient3880"
+       xlink:href="#linearGradient3746"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.4952094,0.3367191,-0.1040669,0.5264617,-208.61982,282.52272)" />
+    <linearGradient
+       id="linearGradient3624">
+      <stop
+         id="stop3626"
+         style="stop-color:#3a8daf;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3636"
+         style="stop-color:#252525;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="552.98486"
+       y1="390.56842"
+       x2="549.39465"
+       y2="702.3479"
+       id="linearGradient3630"
+       xlink:href="#linearGradient3624"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.3373776,0,0,1.5004634,-986.88716,-154.07447)" />
+    <linearGradient
+       id="linearGradient3816">
+      <stop
+         id="stop3818"
+         style="stop-color:#ad8b00;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3820"
+         style="stop-color:#ad8b00;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="573"
+       y1="755.46222"
+       x2="573"
+       y2="700.13464"
+       id="linearGradient3826"
+       xlink:href="#linearGradient3816"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.6033628,-151.5,-294.0167)" />
+    <linearGradient
+       id="linearGradient5097">
+      <stop
+         id="stop5099"
+         style="stop-color:#19a2db;stop-opacity:0"
+         offset="0" />
+      <stop
+         id="stop5109"
+         style="stop-color:#1379a7;stop-opacity:0.49803922"
+         offset="0.30000001" />
+      <stop
+         id="stop5101"
+         style="stop-color:#0e5173;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="590.84674"
+       y1="274.57559"
+       x2="590.84674"
+       y2="334.01376"
+       id="linearGradient5103"
+       xlink:href="#linearGradient5097"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-151.5,156.75229)"
+       spreadMethod="pad" />
+  </defs>
+  <g
+     id="layer1">
+    <rect
+       width="1053.5891"
+       height="291.32797"
+       x="-151.79456"
+       y="158.38464"
+       id="rect3638"
+       style="opacity:1;fill:url(#radialGradient3880);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.1880002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <rect
+       width="1054.4708"
+       height="461.52972"
+       x="-152.23541"
+       y="435.10107"
+       id="rect3622"
+       style="opacity:1;fill:url(#linearGradient3630);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.13464069;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       d="M -152.5,869.5896 C 120.5,855.15934 -202.86309,732.0556 109.5,862.15934 C 172.96247,888.59238 243.5,863.7627 297.5,862.15934 C 351.5,860.55598 311.5,847.48872 358.5,868.33244 C 405.5,889.17615 553.5,849.14252 598.5,841.12571 C 643.5,833.1089 756.5,824.50553 795.5,838.9358 C 834.5,853.36606 904.5,855.74589 904.5,855.74589 L 901.5,903.84677 L -154.5,902.24341 L -152.5,869.5896 z"
+       id="path3814"
+       style="fill:url(#linearGradient3826);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       d="M 902.20121,891.3446 C 632.01828,885.30439 756.73005,848.09724 614.20403,891.30439 C 596.58819,896.64468 408.23621,877.36748 400.43291,891.30439 C 376.86263,933.40172 75.265447,858.10952 34.250926,881.93531 C 31.281885,883.66006 12.514878,878.65564 -12.264082,885.67419 C -48.555335,895.95355 -64.717178,880.4469 -103.31472,886.48711 C -141.91229,892.52732 -145.87102,888.50052 -145.87102,888.50052 L -152.79879,902.75389 L 892.3044,902.08275 L 902.20121,891.3446 z"
+       id="path3828"
+       style="fill:#ad8b00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+</svg>
Index: trunk/demos/sub-attaq/pics/scalable/boat.svg
===================================================================
--- trunk/demos/sub-attaq/pics/scalable/boat.svg	(revision 561)
+++ trunk/demos/sub-attaq/pics/scalable/boat.svg	(revision 561)
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.0"
+   width="744.09448"
+   height="1052.3622"
+   id="svg2584">
+  <defs
+     id="defs2666">
+    <linearGradient
+       x1="542.5"
+       y1="222.59448"
+       x2="559"
+       y2="222.59448"
+       id="linearGradient3387"
+       xlink:href="#linearGradient3746"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-110.6791,190.19124)" />
+    <linearGradient
+       id="linearGradient3167">
+      <stop
+         id="stop3169"
+         style="stop-color:#464646;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3345"
+         style="stop-color:#848788;stop-opacity:1"
+         offset="0.44021741" />
+      <stop
+         id="stop3347"
+         style="stop-color:#9ca0a2;stop-opacity:1"
+         offset="0.56799388" />
+      <stop
+         id="stop3171"
+         style="stop-color:#b5babd;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="474.23065"
+       y1="229.92336"
+       x2="474.1944"
+       y2="218.27365"
+       id="linearGradient3416"
+       xlink:href="#linearGradient3167"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-125.98032,185.95625)" />
+    <linearGradient
+       id="linearGradient3692">
+      <stop
+         id="stop3694"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3696"
+         style="stop-color:#b6b6b6;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="573.5"
+       y1="244.2056"
+       x2="578.25"
+       y2="216.9556"
+       id="linearGradient3972"
+       xlink:href="#linearGradient3692"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-126.5541,188.56624)" />
+    <linearGradient
+       id="linearGradient3438">
+      <stop
+         id="stop3440"
+         style="stop-color:#939393;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3444"
+         style="stop-color:#d6d6d6;stop-opacity:1"
+         offset="0.12354442" />
+      <stop
+         id="stop3446"
+         style="stop-color:#dadada;stop-opacity:1"
+         offset="0.74055624" />
+      <stop
+         id="stop3442"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="660.29303"
+       y1="256.53284"
+       x2="444.79303"
+       y2="255.62085"
+       id="linearGradient3948"
+       xlink:href="#linearGradient3438"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-126.5541,185.56624)" />
+    <linearGradient
+       x1="542.5"
+       y1="222.59448"
+       x2="559"
+       y2="222.59448"
+       id="linearGradient3990"
+       xlink:href="#linearGradient3746"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-132.8041,190.19124)" />
+    <linearGradient
+       id="linearGradient3746">
+      <stop
+         id="stop3748"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3750"
+         style="stop-color:#0074b7;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="542.5"
+       y1="222.59448"
+       x2="559"
+       y2="222.59448"
+       id="linearGradient3994"
+       xlink:href="#linearGradient3746"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-88.054101,190.19124)" />
+    <linearGradient
+       id="linearGradient3428">
+      <stop
+         id="stop3430"
+         style="stop-color:#464646;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3432"
+         style="stop-color:#848788;stop-opacity:1"
+         offset="0.18306103" />
+      <stop
+         id="stop3434"
+         style="stop-color:#9ca0a2;stop-opacity:1"
+         offset="0.66368055" />
+      <stop
+         id="stop3436"
+         style="stop-color:#b5babd;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="592.92798"
+       y1="199.43727"
+       x2="557.05743"
+       y2="196.5448"
+       id="linearGradient3426"
+       xlink:href="#linearGradient3428"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-102.5217,149.09845)" />
+  </defs>
+  <g
+     id="layer1">
+    <g
+       id="boat">
+      <path
+         d="M 296.669,434.15623 C 376.12538,436.50959 448.282,436.46711 542.42304,434.15623 C 542.42304,434.15623 544.22253,425.03531 542.42304,422.57953 C 432.90655,403.86953 296.669,418.12547 296.669,422.57953 L 296.669,434.15623 z"
+         id="path3469"
+         style="fill:#a9a9a9;fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:3.4975698;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
+      <rect
+         width="3.4280596"
+         height="29.611124"
+         x="647.59613"
+         y="173.91156"
+         transform="matrix(0.9327494,0.3605254,-0.3633626,0.9316478,0,0)"
+         id="rect3408"
+         style="opacity:1;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         width="48.499989"
+         height="8.5"
+         x="318.48221"
+         y="405.82172"
+         transform="matrix(0.9999952,3.0887777e-3,-3.0887777e-3,0.9999952,0,0)"
+         id="rect3376"
+         style="opacity:1;fill:url(#linearGradient3416);fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:2.99999928;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         d="M 382.4459,430.66072 C 382.4459,430.66072 420.85999,388.74829 397.4459,385.66072 L 488.4459,397.66072 L 488.4459,432.66072 L 382.4459,430.66072 z"
+         id="path3952"
+         style="fill:url(#linearGradient3972);fill-opacity:1;fill-rule:evenodd;stroke:#323232;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         d="M 301.4459,429.66072 C 301.4459,429.66072 330.46329,468.66072 343.4459,468.66072 C 355.42851,471.91072 507.57644,473.70653 525.4459,465.91072 C 534.58031,461.59104 537.90602,455.58662 539.4459,429.66072 C 473.70193,439.43306 371.2651,439.78219 301.4459,429.66072 z"
+         id="path3938"
+         style="fill:url(#linearGradient3948);fill-opacity:1;fill-rule:evenodd;stroke:#545454;stroke-width:3.0999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         d="M 339.44863,416.12222 L 357.69854,416.17859 L 368.1622,427.96097 L 339.41234,427.87217 L 339.44863,416.12222 z"
+         id="rect3378"
+         style="fill:#dedede;fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
+      <rect
+         width="13.5"
+         height="17"
+         x="411.19589"
+         y="404.28574"
+         id="rect3974"
+         style="opacity:1;fill:url(#linearGradient3990);fill-opacity:1;fill-rule:nonzero;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         width="13.5"
+         height="17"
+         x="455.94589"
+         y="404.28574"
+         id="rect3992"
+         style="opacity:1;fill:url(#linearGradient3994);fill-opacity:1;fill-rule:nonzero;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         d="M 295.6959,421.91072 C 360.77923,430.41072 446.61257,432.91072 541.9459,421.91072 C 541.9459,421.91072 543.74902,428.6076 541.9459,430.41072 C 432.20839,444.14823 295.6959,433.68104 295.6959,430.41072 L 295.6959,421.91072 z"
+         id="rect2558"
+         style="fill:#dedede;fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
+      <rect
+         width="94.427879"
+         height="7.236649"
+         x="437.10614"
+         y="342.2645"
+         transform="matrix(0.9947793,0.1020501,-0.1079723,0.9941539,0,0)"
+         id="rect2569"
+         style="opacity:1;fill:#c1c1c1;fill-opacity:1;fill-rule:nonzero;stroke:#404040;stroke-width:3.0365274;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         width="13.5"
+         height="17"
+         x="433.32089"
+         y="404.28574"
+         id="rect3385"
+         style="opacity:1;fill:url(#linearGradient3387);fill-opacity:1;fill-rule:nonzero;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         d="M 402.86916,380.21847 L 489.80407,388.85485 L 491.52271,394.54919 L 397.58781,384.91281 L 402.86916,380.21847 z"
+         id="rect3466"
+         style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#404040;stroke-width:3.03650045;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
+      <rect
+         width="34.5"
+         height="14.5"
+         x="456.4783"
+         y="336.94293"
+         transform="matrix(0.997157,7.5351915e-2,-7.5351915e-2,0.997157,0,0)"
+         id="rect3418"
+         style="opacity:1;fill:url(#linearGradient3426);fill-opacity:1;fill-rule:nonzero;stroke:#494949;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <g
+         transform="matrix(0.9246214,0.3808874,-0.3808874,0.9246214,-13.252851,-40.129692)"
+         id="flag">
+        <rect
+           width="19.75"
+           height="27.75"
+           x="193.34448"
+           y="-709"
+           transform="matrix(0,1,-1,0,0,0)"
+           id="rect3389"
+           style="opacity:1;fill:#b20000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+        <rect
+           width="27.25"
+           height="5.75"
+           x="681.5"
+           y="200.59448"
+           id="rect3393"
+           style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+        <rect
+           width="5.75"
+           height="19.5"
+           x="691.25"
+           y="193.59448"
+           id="rect3395"
+           style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+        <rect
+           width="27.75"
+           height="2.5"
+           x="681.5"
+           y="202.34448"
+           id="rect3397"
+           style="opacity:1;fill:#000080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+        <rect
+           width="3"
+           height="19.25"
+           x="692.5"
+           y="193.59448"
+           id="rect3399"
+           style="opacity:1;fill:#000080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      </g>
+    </g>
+  </g>
+</svg>
Index: trunk/demos/sub-attaq/pics/scalable/bomb.svg
===================================================================
--- trunk/demos/sub-attaq/pics/scalable/bomb.svg	(revision 561)
+++ trunk/demos/sub-attaq/pics/scalable/bomb.svg	(revision 561)
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.0"
+   width="744.09448"
+   height="1052.3622"
+   id="svg3121">
+  <defs
+     id="defs3123">
+    <radialGradient
+       cx="-135.625"
+       cy="148.71948"
+       r="7.625"
+       fx="-135.625"
+       fy="148.71948"
+       id="radialGradient3439"
+       xlink:href="#linearGradient3366"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="-132.85063"
+       y1="173.6969"
+       x2="-145.3662"
+       y2="177.59828"
+       id="linearGradient3418"
+       xlink:href="#linearGradient3366"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.2134297,-0.5943658,0.6658882,-0.2391126,-274.53441,123.00067)" />
+    <linearGradient
+       x1="-141.85466"
+       y1="181.49153"
+       x2="-144.95044"
+       y2="175.90179"
+       id="linearGradient3414"
+       xlink:href="#linearGradient3366"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2134297,-0.5943658,-0.6658882,-0.2391126,-15.893355,122.67824)" />
+    <linearGradient
+       x1="-149.5"
+       y1="177.59448"
+       x2="-145.7928"
+       y2="180.05936"
+       id="linearGradient3410"
+       xlink:href="#linearGradient3366"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.6315243,0,0,0.7075182,-227.03781,54.321514)" />
+    <linearGradient
+       x1="-140.46242"
+       y1="177.40488"
+       x2="-147.04802"
+       y2="172.66473"
+       id="linearGradient3406"
+       xlink:href="#linearGradient3366"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.6315243,0,0,-0.7075182,-226.40365,274.91611)" />
+    <linearGradient
+       x1="-147.2406"
+       y1="180.95567"
+       x2="-140.01878"
+       y2="175.57777"
+       id="linearGradient3402"
+       xlink:href="#linearGradient3366"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6315243,0,0,-0.7075182,-64.045217,275.07466)" />
+    <linearGradient
+       x1="-146.98956"
+       y1="174.00922"
+       x2="-142.60332"
+       y2="179.38712"
+       id="linearGradient3398"
+       xlink:href="#linearGradient3366"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6315243,0,0,0.7075182,-62.683611,54.187362)" />
+    <linearGradient
+       id="linearGradient3366">
+      <stop
+         id="stop3368"
+         style="stop-color:#bcbcbc;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3370"
+         style="stop-color:#191b1c;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       cx="-208.95004"
+       cy="173.10576"
+       r="31.667252"
+       fx="-208.95004"
+       fy="173.10576"
+       id="radialGradient3364"
+       xlink:href="#linearGradient3366"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <g
+     id="layer1">
+    <g
+       transform="translate(419.4996,488.13454)"
+       id="mine">
+      <path
+         d="M -167.5843,186.54079 A 31.466251,31.466251 0 1 1 -230.5168,186.54079 A 31.466251,31.466251 0 1 1 -167.5843,186.54079 z"
+         transform="matrix(0.6341613,0,0,0.6341613,-18.521242,45.718192)"
+         id="path2586"
+         style="opacity:1;fill:url(#radialGradient3364);fill-opacity:1;stroke:#131313;stroke-width:3.54799318;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         d="M -155.20193,175.4167 C -157.60085,176.6451 -156.78074,184.26068 -156.78074,184.26068 C -156.78074,184.26068 -148.33787,181.58301 -148.57092,178.60053 C -148.74283,176.40051 -153.23774,174.41092 -155.20193,175.4167 z"
+         id="path3382"
+         style="fill:url(#linearGradient3398);fill-opacity:1;fill-rule:evenodd;stroke:#131313;stroke-width:2.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         d="M -156.56354,153.84532 C -158.96246,152.61693 -158.14235,145.00135 -158.14235,145.00135 C -158.14235,145.00135 -149.69948,147.67902 -149.93253,150.66149 C -150.10444,152.86151 -154.59935,154.85111 -156.56354,153.84532 z"
+         id="path3400"
+         style="fill:url(#linearGradient3402);fill-opacity:1;fill-rule:evenodd;stroke:#131313;stroke-width:2.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         d="M -133.88532,153.68678 C -131.48641,152.45838 -132.30652,144.8428 -132.30652,144.8428 C -132.30652,144.8428 -140.74938,147.52047 -140.51633,150.50295 C -140.34442,152.70297 -135.84951,154.69256 -133.88532,153.68678 z"
+         id="path3404"
+         style="fill:url(#linearGradient3406);fill-opacity:1;fill-rule:evenodd;stroke:#131313;stroke-width:2.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         d="M -134.51948,175.55085 C -132.12057,176.77925 -132.94068,184.39483 -132.94068,184.39483 C -132.94068,184.39483 -141.38355,181.71716 -141.15049,178.73469 C -140.97858,176.53467 -136.48367,174.54507 -134.51948,175.55085 z"
+         id="path3408"
+         style="fill:url(#linearGradient3410);fill-opacity:1;fill-rule:evenodd;stroke:#131313;stroke-width:2.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         d="M -161.25709,168.78221 C -163.22395,170.62484 -170.11427,165.85236 -170.11427,165.85236 C -170.11427,165.85236 -164.7408,160.23808 -162.01257,161.46538 C -160.00011,162.37068 -159.64667,167.27352 -161.25709,168.78221 z"
+         id="path3412"
+         style="fill:url(#linearGradient3414);fill-opacity:1;fill-rule:evenodd;stroke:#131313;stroke-width:2.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         d="M -129.17068,169.10464 C -127.20382,170.94727 -120.3135,166.17478 -120.3135,166.17478 C -120.3135,166.17478 -125.68697,160.5605 -128.41519,161.7878 C -130.42766,162.69311 -130.7811,167.59595 -129.17068,169.10464 z"
+         id="path3416"
+         style="fill:url(#linearGradient3418);fill-opacity:1;fill-rule:evenodd;stroke:#131313;stroke-width:2.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         d="M -126,151.21948 A 6.625,6.625 0 1 1 -139.25,151.21948 A 6.625,6.625 0 1 1 -126,151.21948 z"
+         transform="matrix(0.6341613,0,0,0.6341613,-61.039517,68.324922)"
+         id="path3426"
+         style="opacity:1;fill:url(#radialGradient3439);fill-opacity:1;stroke:#131313;stroke-width:3.54799318;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+  </g>
+</svg>
Index: trunk/demos/sub-attaq/pics/scalable/sand.svg
===================================================================
--- trunk/demos/sub-attaq/pics/scalable/sand.svg	(revision 561)
+++ trunk/demos/sub-attaq/pics/scalable/sand.svg	(revision 561)
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.0"
+   width="744.09448"
+   height="1052.3622"
+   id="svg2596">
+  <defs
+     id="defs2598">
+    <linearGradient
+       id="linearGradient3708">
+      <stop
+         id="stop3710"
+         style="stop-color:#202020;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3712"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="518.26996"
+       y1="497.31476"
+       x2="533.02924"
+       y2="497.31476"
+       id="linearGradient3794"
+       xlink:href="#linearGradient3708"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3718">
+      <stop
+         id="stop3720"
+         style="stop-color:#bcbcbc;stop-opacity:0.28169015"
+         offset="0" />
+      <stop
+         id="stop3722"
+         style="stop-color:#bcbcbc;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="516.89508"
+       y1="503.50137"
+       x2="516.89508"
+       y2="543.80646"
+       id="linearGradient3792"
+       xlink:href="#linearGradient3718"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9947644,0,0,1.3346457,2.7877039,-166.60153)" />
+    <linearGradient
+       id="linearGradient3692">
+      <stop
+         id="stop3694"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3696"
+         style="stop-color:#b6b6b6;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="506.95975"
+       y1="469.73706"
+       x2="525.41608"
+       y2="469.73706"
+       id="linearGradient3790"
+       xlink:href="#linearGradient3692"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3816">
+      <stop
+         id="stop3818"
+         style="stop-color:#ad8b00;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3820"
+         style="stop-color:#ad8b00;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="573"
+       y1="755.46222"
+       x2="573"
+       y2="700.13464"
+       id="linearGradient3826"
+       xlink:href="#linearGradient3816"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.6033628,-150.63569,-350.3846)" />
+  </defs>
+  <g
+     id="layer1">
+    <path
+       d="M -151.63569,813.2217 C 121.3643,798.79144 -201.99878,675.6877 110.3643,805.79144 C 173.82677,832.22448 244.3643,807.3948 298.3643,805.79144 C 352.3643,804.18808 312.3643,791.12082 359.3643,811.96454 C 406.3643,832.80825 554.3643,792.77462 599.3643,784.75781 C 644.3643,776.741 757.36426,768.13763 796.36426,782.5679 C 835.36426,796.99816 905.36426,799.37799 905.36426,799.37799 L 902.36426,847.47887 L -153.63569,845.87551 L -151.63569,813.2217 z"
+       id="path3814"
+       style="fill:url(#linearGradient3826);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       d="M 908.86426,836.95812 C 635.8643,830.91791 761.87636,793.71076 617.8643,836.91791 C 600.0648,842.2582 409.74894,822.981 401.8643,836.91791 C 378.04825,879.01524 73.306465,803.72304 31.864305,827.54883 C 28.864305,829.27358 9.9016246,824.26916 -15.135695,831.28771 C -51.805335,841.56707 -68.135695,826.06042 -107.1357,832.10063 C -146.1357,838.14084 -150.13569,834.11404 -150.13569,834.11404 L -157.13569,848.36741 L 898.86426,847.69627 L 908.86426,836.95812 z"
+       id="path3828"
+       style="fill:#ad8b00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+</svg>
Index: trunk/demos/sub-attaq/pics/scalable/see.svg
===================================================================
--- trunk/demos/sub-attaq/pics/scalable/see.svg	(revision 561)
+++ trunk/demos/sub-attaq/pics/scalable/see.svg	(revision 561)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.0"
+   width="744.09448"
+   height="1052.3622"
+   id="svg2650">
+  <defs
+     id="defs2652">
+    <linearGradient
+       id="linearGradient3624">
+      <stop
+         id="stop3626"
+         style="stop-color:#3a8daf;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3636"
+         style="stop-color:#252525;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="552.98486"
+       y1="390.56842"
+       x2="549.39465"
+       y2="702.3479"
+       id="linearGradient3630"
+       xlink:href="#linearGradient3624"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.3373776,0,0,1.5004634,-996.17287,-279.00679)" />
+  </defs>
+  <g
+     id="layer1">
+    <rect
+       width="1054.4708"
+       height="461.52972"
+       x="-161.52115"
+       y="310.16876"
+       id="rect3622"
+       style="opacity:1;fill:url(#linearGradient3630);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.13464069;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  </g>
+</svg>
Index: trunk/demos/sub-attaq/pics/scalable/sky.svg
===================================================================
--- trunk/demos/sub-attaq/pics/scalable/sky.svg	(revision 561)
+++ trunk/demos/sub-attaq/pics/scalable/sky.svg	(revision 561)
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.0"
+   width="744.09448"
+   height="1052.3622"
+   id="svg2721">
+  <defs
+     id="defs2723">
+    <linearGradient
+       id="linearGradient3746">
+      <stop
+         id="stop3748"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3750"
+         style="stop-color:#0074b7;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       cx="82.966125"
+       cy="-178.42453"
+       r="526.79456"
+       fx="82.966125"
+       fy="-178.42453"
+       id="radialGradient3880"
+       xlink:href="#linearGradient3746"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.4952094,0.3367191,-0.1040669,0.5264617,-235.04839,425.12197)" />
+  </defs>
+  <g
+     id="layer1">
+    <rect
+       width="1053.5891"
+       height="291.32797"
+       x="-178.22313"
+       y="300.98392"
+       id="rect3638"
+       style="opacity:1;fill:url(#radialGradient3880);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.1880002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  </g>
+</svg>
Index: trunk/demos/sub-attaq/pics/scalable/sub-attaq.svg
===================================================================
--- trunk/demos/sub-attaq/pics/scalable/sub-attaq.svg	(revision 561)
+++ trunk/demos/sub-attaq/pics/scalable/sub-attaq.svg	(revision 561)
@@ -0,0 +1,1473 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="1052.3622"
+   height="744.09448"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="sub-attaq.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3366"
+       id="radialGradient3439"
+       cx="-135.625"
+       cy="148.71948"
+       fx="-135.625"
+       fy="148.71948"
+       r="7.625"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3366"
+       id="linearGradient3418"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.2134297,-0.5943658,0.6658882,-0.2391126,-274.53441,123.00067)"
+       x1="-132.85063"
+       y1="173.6969"
+       x2="-145.3662"
+       y2="177.59828" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3366"
+       id="linearGradient3414"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2134297,-0.5943658,-0.6658882,-0.2391126,-15.893355,122.67824)"
+       x1="-141.85466"
+       y1="181.49153"
+       x2="-144.95044"
+       y2="175.90179" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3366"
+       id="linearGradient3410"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.6315243,0,0,0.7075182,-227.03781,54.321514)"
+       x1="-149.5"
+       y1="177.59448"
+       x2="-145.7928"
+       y2="180.05936" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3366"
+       id="linearGradient3406"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.6315243,0,0,-0.7075182,-226.40365,274.91611)"
+       x1="-140.46242"
+       y1="177.40488"
+       x2="-147.04802"
+       y2="172.66473" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3366"
+       id="linearGradient3402"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6315243,0,0,-0.7075182,-64.045217,275.07466)"
+       x1="-147.2406"
+       y1="180.95567"
+       x2="-140.01878"
+       y2="175.57777" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3366"
+       id="linearGradient3398"
+       x1="-146.98956"
+       y1="174.00922"
+       x2="-142.60332"
+       y2="179.38712"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6315243,0,0,0.7075182,-62.683611,54.187362)" />
+    <linearGradient
+       id="linearGradient3366">
+      <stop
+         id="stop3368"
+         offset="0"
+         style="stop-color:#bcbcbc;stop-opacity:1;" />
+      <stop
+         id="stop3370"
+         offset="1"
+         style="stop-color:#191b1c;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3366"
+       id="radialGradient3364"
+       cx="-208.95004"
+       cy="173.10576"
+       fx="-208.95004"
+       fy="173.10576"
+       r="31.667252"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient5097">
+      <stop
+         style="stop-color:#19a2db;stop-opacity:0;"
+         offset="0"
+         id="stop5099" />
+      <stop
+         id="stop5109"
+         offset="0.30000001"
+         style="stop-color:#1379a7;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#0e5173;stop-opacity:1;"
+         offset="1"
+         id="stop5101" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3523"
+       inkscape:collect="always">
+      <stop
+         id="stop3525"
+         offset="0"
+         style="stop-color:#b9b9b9;stop-opacity:1" />
+      <stop
+         id="stop3527"
+         offset="1"
+         style="stop-color:#444444;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3438">
+      <stop
+         style="stop-color:#939393;stop-opacity:1;"
+         offset="0"
+         id="stop3440" />
+      <stop
+         id="stop3444"
+         offset="0.12354442"
+         style="stop-color:#d6d6d6;stop-opacity:1;" />
+      <stop
+         style="stop-color:#dadada;stop-opacity:1;"
+         offset="0.74055624"
+         id="stop3446" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop3442" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3428">
+      <stop
+         id="stop3430"
+         offset="0"
+         style="stop-color:#464646;stop-opacity:1;" />
+      <stop
+         style="stop-color:#848788;stop-opacity:1;"
+         offset="0.18306103"
+         id="stop3432" />
+      <stop
+         id="stop3434"
+         offset="0.66368055"
+         style="stop-color:#9ca0a2;stop-opacity:1;" />
+      <stop
+         id="stop3436"
+         offset="1"
+         style="stop-color:#b5babd;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4034">
+      <stop
+         id="stop4036"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.49803922;"
+         offset="0.5"
+         id="stop4038" />
+      <stop
+         id="stop4040"
+         offset="0.63705367"
+         style="stop-color:#ffffff;stop-opacity:0.24705882;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.12156863;"
+         offset="0.79425853"
+         id="stop4042" />
+      <stop
+         id="stop4044"
+         offset="1"
+         style="stop-color:#a0a0a0;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4016">
+      <stop
+         style="stop-color:#283e6a;stop-opacity:1;"
+         offset="0"
+         id="stop4018" />
+      <stop
+         style="stop-color:#283e6a;stop-opacity:0;"
+         offset="1"
+         id="stop4020" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4004">
+      <stop
+         style="stop-color:#dbdbdb;stop-opacity:1;"
+         offset="0"
+         id="stop4010" />
+      <stop
+         style="stop-color:#c4c9cb;stop-opacity:1;"
+         offset="1"
+         id="stop4012" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3998">
+      <stop
+         id="stop4000"
+         offset="0"
+         style="stop-color:#adadad;stop-opacity:1;" />
+      <stop
+         id="stop4002"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3864">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3866" />
+      <stop
+         id="stop4028"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:0.49803922;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.24705882;"
+         offset="0.75"
+         id="stop4030" />
+      <stop
+         id="stop4032"
+         offset="0.875"
+         style="stop-color:#ffffff;stop-opacity:0.12156863;" />
+      <stop
+         style="stop-color:#a0a0a0;stop-opacity:1;"
+         offset="1"
+         id="stop3868" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3816">
+      <stop
+         style="stop-color:#ad8b00;stop-opacity:1;"
+         offset="0"
+         id="stop3818" />
+      <stop
+         style="stop-color:#ad8b00;stop-opacity:0;"
+         offset="1"
+         id="stop3820" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3746">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3748" />
+      <stop
+         style="stop-color:#0074b7;stop-opacity:1;"
+         offset="1"
+         id="stop3750" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3718">
+      <stop
+         style="stop-color:#bcbcbc;stop-opacity:0.28169015;"
+         offset="0"
+         id="stop3720" />
+      <stop
+         style="stop-color:#bcbcbc;stop-opacity:0;"
+         offset="1"
+         id="stop3722" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3708">
+      <stop
+         style="stop-color:#202020;stop-opacity:1;"
+         offset="0"
+         id="stop3710" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop3712" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3692">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3694" />
+      <stop
+         style="stop-color:#b6b6b6;stop-opacity:1;"
+         offset="1"
+         id="stop3696" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3656">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3658" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3660" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3624">
+      <stop
+         style="stop-color:#3a8daf;stop-opacity:1;"
+         offset="0"
+         id="stop3626" />
+      <stop
+         id="stop3636"
+         offset="1"
+         style="stop-color:#252525;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3532">
+      <stop
+         id="stop3534"
+         offset="0"
+         style="stop-color:#545454;stop-opacity:1;" />
+      <stop
+         style="stop-color:#848788;stop-opacity:1;"
+         offset="0.44021741"
+         id="stop3536" />
+      <stop
+         id="stop3538"
+         offset="0.56799388"
+         style="stop-color:#9ca0a2;stop-opacity:1;" />
+      <stop
+         id="stop3540"
+         offset="1"
+         style="stop-color:#565d60;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3345">
+      <stop
+         id="stop3348"
+         offset="0"
+         style="stop-color:#898989;stop-opacity:1;" />
+      <stop
+         style="stop-color:#9ea1a2;stop-opacity:1;"
+         offset="0.44021741"
+         id="stop3350" />
+      <stop
+         id="stop3352"
+         offset="0.56799388"
+         style="stop-color:#bbbdbf;stop-opacity:1;" />
+      <stop
+         id="stop3354"
+         offset="1"
+         style="stop-color:#f0f1f2;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3227">
+      <stop
+         style="stop-color:#444444;stop-opacity:1;"
+         offset="0"
+         id="stop3229" />
+      <stop
+         style="stop-color:#b0b0b0;stop-opacity:1;"
+         offset="1"
+         id="stop3232" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3435">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3437" />
+      <stop
+         style="stop-color:#c0c0c0;stop-opacity:0;"
+         offset="1"
+         id="stop3439" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3421">
+      <stop
+         style="stop-color:#444444;stop-opacity:1;"
+         offset="0"
+         id="stop3423" />
+      <stop
+         style="stop-color:#444444;stop-opacity:0;"
+         offset="1"
+         id="stop3425" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3293">
+      <stop
+         style="stop-color:#c4b434;stop-opacity:1;"
+         offset="0"
+         id="stop3295" />
+      <stop
+         style="stop-color:#9b5500;stop-opacity:1;"
+         offset="1"
+         id="stop3297" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3229">
+      <stop
+         style="stop-color:#125a7a;stop-opacity:1;"
+         offset="0"
+         id="stop3231" />
+      <stop
+         style="stop-color:#308fc0;stop-opacity:1;"
+         offset="1"
+         id="stop3233" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3219">
+      <stop
+         id="stop3221"
+         offset="0"
+         style="stop-color:#a55b00;stop-opacity:1;" />
+      <stop
+         id="stop3223"
+         offset="1"
+         style="stop-color:#f4e45e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3189">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3191" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop3193" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3167">
+      <stop
+         style="stop-color:#464646;stop-opacity:1;"
+         offset="0"
+         id="stop3169" />
+      <stop
+         id="stop3345"
+         offset="0.44021741"
+         style="stop-color:#848788;stop-opacity:1;" />
+      <stop
+         style="stop-color:#9ca0a2;stop-opacity:1;"
+         offset="0.56799388"
+         id="stop3347" />
+      <stop
+         style="stop-color:#b5babd;stop-opacity:1;"
+         offset="1"
+         id="stop3171" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3167"
+       id="linearGradient3175"
+       x1="443.95602"
+       y1="315.31854"
+       x2="443.95602"
+       y2="247.85609"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4908502,0,0,0.4579593,350.98557,542.12189)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3219"
+       id="linearGradient3253"
+       gradientUnits="userSpaceOnUse"
+       x1="325.57214"
+       y1="280.13632"
+       x2="312.84424"
+       y2="257.60013" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3229"
+       id="linearGradient3255"
+       gradientUnits="userSpaceOnUse"
+       x1="310.01578"
+       y1="255.47881"
+       x2="325.92572"
+       y2="280.13632" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3219"
+       id="linearGradient3321"
+       gradientUnits="userSpaceOnUse"
+       x1="325.57214"
+       y1="280.13632"
+       x2="312.84424"
+       y2="257.60013" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3229"
+       id="linearGradient3323"
+       gradientUnits="userSpaceOnUse"
+       x1="310.01578"
+       y1="255.47881"
+       x2="325.92572"
+       y2="280.13632" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3219"
+       id="linearGradient3331"
+       gradientUnits="userSpaceOnUse"
+       x1="325.57214"
+       y1="280.13632"
+       x2="312.84424"
+       y2="257.60013" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3229"
+       id="linearGradient3333"
+       gradientUnits="userSpaceOnUse"
+       x1="310.01578"
+       y1="255.47881"
+       x2="325.92572"
+       y2="280.13632" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3293"
+       id="linearGradient3343"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3292883,0,0,1.10796,1.5038593,-24.232315)"
+       x1="359.5589"
+       y1="258.84247"
+       x2="370.88239"
+       y2="258.84247" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3219"
+       id="linearGradient3365"
+       gradientUnits="userSpaceOnUse"
+       x1="325.57214"
+       y1="280.13632"
+       x2="312.84424"
+       y2="257.60013" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3229"
+       id="linearGradient3367"
+       gradientUnits="userSpaceOnUse"
+       x1="310.01578"
+       y1="255.47881"
+       x2="325.92572"
+       y2="280.13632" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3219"
+       id="linearGradient3369"
+       gradientUnits="userSpaceOnUse"
+       x1="325.57214"
+       y1="280.13632"
+       x2="312.84424"
+       y2="257.60013" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3229"
+       id="linearGradient3371"
+       gradientUnits="userSpaceOnUse"
+       x1="310.01578"
+       y1="255.47881"
+       x2="325.92572"
+       y2="280.13632" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3219"
+       id="linearGradient3379"
+       gradientUnits="userSpaceOnUse"
+       x1="325.57214"
+       y1="280.13632"
+       x2="312.84424"
+       y2="257.60013" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3229"
+       id="linearGradient3381"
+       gradientUnits="userSpaceOnUse"
+       x1="310.01578"
+       y1="255.47881"
+       x2="325.92572"
+       y2="280.13632" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3293"
+       id="linearGradient3385"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3267302,0,0,1.1332782,-1.5786343,-29.194748)"
+       x1="371.79858"
+       y1="258.84247"
+       x2="364.49646"
+       y2="258.84247" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3293"
+       id="linearGradient3401"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9807835,0,0,1.1280701,-361.45126,-28.553769)"
+       x1="371.79858"
+       y1="258.84247"
+       x2="364.49646"
+       y2="258.84247" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3421"
+       id="radialGradient3431"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1862613,0,0,0.3638703,-186.86143,179.02055)"
+       cx="432.3343"
+       cy="233.80295"
+       fx="432.3343"
+       fy="233.80295"
+       r="59.056834" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3435"
+       id="radialGradient3441"
+       cx="290.5"
+       cy="244.34448"
+       fx="290.5"
+       fy="244.34448"
+       r="37.5"
+       gradientTransform="matrix(0.8202102,0.8202102,-0.7960458,0.7960458,246.73838,-189.686)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3345"
+       id="linearGradient3311"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.466978,0,0,0.4500435,352.00841,540.25044)"
+       x1="510.99884"
+       y1="161.99408"
+       x2="396.48914"
+       y2="161.99408" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3421"
+       id="radialGradient3339"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4181493,0,0,0.1282619,386.09461,620.15777)"
+       cx="432.3343"
+       cy="233.80295"
+       fx="432.3343"
+       fy="233.80295"
+       r="59.056834" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3219"
+       id="linearGradient3434"
+       gradientUnits="userSpaceOnUse"
+       x1="325.57214"
+       y1="280.13632"
+       x2="312.84424"
+       y2="257.60013" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3229"
+       id="linearGradient3436"
+       gradientUnits="userSpaceOnUse"
+       x1="310.01578"
+       y1="255.47881"
+       x2="325.92572"
+       y2="280.13632" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3532"
+       id="linearGradient3520"
+       x1="525"
+       y1="371.09448"
+       x2="525"
+       y2="395.09448"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5865192,0,0,0.2518015,339.73218,572.99479)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3624"
+       id="linearGradient3630"
+       x1="552.98486"
+       y1="390.56842"
+       x2="549.39465"
+       y2="702.3479"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.3373776,0,0,1.5004634,-835.38716,-310.82676)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3656"
+       id="radialGradient3662"
+       cx="656.19507"
+       cy="534.45917"
+       fx="656.19507"
+       fy="534.45917"
+       r="13.227922"
+       gradientTransform="matrix(1,0,0,1.2672781,0,-144.63884)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3656"
+       id="radialGradient3668"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.2672781,0,-144.63884)"
+       cx="656.19507"
+       cy="534.45917"
+       fx="656.19507"
+       fy="534.45917"
+       r="13.227922" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3656"
+       id="radialGradient3672"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.2672781,0,-144.63884)"
+       cx="656.19507"
+       cy="534.45917"
+       fx="656.19507"
+       fy="534.45917"
+       r="13.227922" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3656"
+       id="radialGradient3676"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.2672781,0,-144.63884)"
+       cx="656.19507"
+       cy="534.45917"
+       fx="656.19507"
+       fy="534.45917"
+       r="13.227922" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3692"
+       id="linearGradient3772"
+       gradientUnits="userSpaceOnUse"
+       x1="506.95975"
+       y1="469.73706"
+       x2="525.41608"
+       y2="469.73706" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3718"
+       id="linearGradient3774"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9947644,0,0,1.3346457,2.7877039,-166.60153)"
+       x1="516.89508"
+       y1="503.50137"
+       x2="516.89508"
+       y2="543.80646" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3708"
+       id="linearGradient3776"
+       gradientUnits="userSpaceOnUse"
+       x1="518.26993"
+       y1="497.31477"
+       x2="533.02923"
+       y2="497.31477" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3692"
+       id="linearGradient3790"
+       gradientUnits="userSpaceOnUse"
+       x1="506.95975"
+       y1="469.73706"
+       x2="525.41608"
+       y2="469.73706" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3718"
+       id="linearGradient3792"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9947644,0,0,1.3346457,2.7877039,-166.60153)"
+       x1="516.89508"
+       y1="503.50137"
+       x2="516.89508"
+       y2="543.80646" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3708"
+       id="linearGradient3794"
+       gradientUnits="userSpaceOnUse"
+       x1="518.26993"
+       y1="497.31477"
+       x2="533.02923"
+       y2="497.31477" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3656"
+       id="radialGradient3804"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.2672781,0,-144.63884)"
+       cx="656.19507"
+       cy="534.45917"
+       fx="656.19507"
+       fy="534.45917"
+       r="13.227922" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3656"
+       id="radialGradient3808"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.2672781,0,-144.63884)"
+       cx="656.19507"
+       cy="534.45917"
+       fx="656.19507"
+       fy="534.45917"
+       r="13.227922" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3227"
+       id="linearGradient3812"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1223608,0,0,0.3849769,-17.516054,565.40983)"
+       x1="543.5"
+       y1="205.19257"
+       x2="587.52001"
+       y2="205.19257" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3816"
+       id="linearGradient3826"
+       x1="573"
+       y1="755.46222"
+       x2="573"
+       y2="700.13464"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.6033628,0,-450.76899)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3864"
+       id="radialGradient3874"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.9674693,0.8647541,-0.8726553,1.0212484,-15.308759,-74.232772)"
+       cx="94.273849"
+       cy="89.893486"
+       fx="94.273849"
+       fy="89.893486"
+       r="74.397521" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3746"
+       id="radialGradient3880"
+       cx="82.966125"
+       cy="-178.42453"
+       fx="82.966125"
+       fy="-178.42453"
+       r="526.79456"
+       gradientTransform="matrix(1.4952094,0.3367191,-0.1040669,0.5264617,-57.119818,125.77043)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3438"
+       id="linearGradient3948"
+       x1="660.29303"
+       y1="256.53284"
+       x2="444.79303"
+       y2="255.62085"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,32.526912)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3692"
+       id="linearGradient3972"
+       x1="573.5"
+       y1="244.2056"
+       x2="578.25"
+       y2="216.9556"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,35.526912)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3746"
+       id="linearGradient3990"
+       x1="542.5"
+       y1="222.59448"
+       x2="559"
+       y2="222.59448"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-6.25,37.151912)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3746"
+       id="linearGradient3994"
+       gradientUnits="userSpaceOnUse"
+       x1="542.5"
+       y1="222.59448"
+       x2="559"
+       y2="222.59448"
+       gradientTransform="translate(38.5,37.151912)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4016"
+       id="linearGradient4022"
+       x1="639"
+       y1="262.09448"
+       x2="667"
+       y2="262.09448"
+       gradientUnits="userSpaceOnUse" />
+    <inkscape:perspective
+       id="perspective2578"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3746"
+       id="linearGradient3387"
+       gradientUnits="userSpaceOnUse"
+       x1="542.5"
+       y1="222.59448"
+       x2="559"
+       y2="222.59448"
+       gradientTransform="translate(15.875,37.151912)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3167"
+       id="linearGradient3416"
+       x1="474.23065"
+       y1="229.92336"
+       x2="474.1944"
+       y2="218.27365"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.1004684,32.526757)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3428"
+       id="linearGradient3426"
+       x1="592.92798"
+       y1="199.43727"
+       x2="557.05743"
+       y2="196.5448"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(12.140805,-13.041887)" />
+    <filter
+       inkscape:collect="always"
+       id="filter3507">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="3.0523171"
+         id="feGaussianBlur3509" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3523"
+       id="linearGradient3521"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,-0.7291751,0,521.83983)"
+       x1="562.55634"
+       y1="285.89896"
+       x2="562.55634"
+       y2="244.09448" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5097"
+       id="linearGradient5103"
+       x1="590.84674"
+       y1="274.57559"
+       x2="590.84674"
+       y2="334.01376"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="pad" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3864"
+       id="radialGradient5107"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.9674693,0.8647541,-0.8726553,1.0212484,-15.308759,-74.232772)"
+       cx="94.273849"
+       cy="89.893486"
+       fx="94.273849"
+       fy="89.893486"
+       r="74.397521" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.70710678"
+     inkscape:cx="532.91407"
+     inkscape:cy="457.84365"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1674"
+     inkscape:window-height="1000"
+     inkscape:window-x="2"
+     inkscape:window-y="14"
+     showguides="false" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <rect
+       style="opacity:1;fill:url(#radialGradient3880);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.1880002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect3638"
+       width="1053.5891"
+       height="291.32797"
+       x="-0.29455566"
+       y="1.6323624" />
+    <path
+       style="fill:url(#radialGradient3874);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3507)"
+       d="M 158.37853,75.817898 C 130.95894,49.483192 82.14552,74.615971 85.85382,95.15981 C 49.691853,94.8009 50.214842,139.36083 83.29101,132.16343 C 144.66465,163.16454 159.26268,129.80212 164.6863,136.51386 C 225.60448,157.97672 246.34362,130.65438 265.24417,127.0714 C 294.43981,137.91859 337.16986,121.78798 297.03636,102.77604 C 331.73096,64.597047 277.96882,60.229366 253.07028,70.400868 C 191.09597,33.610112 168.89234,63.292037 158.37853,75.817898 z"
+       id="path3872"
+       sodipodi:nodetypes="cccccccc"
+       transform="matrix(1.5062893,0,0,1.1720951,618.04001,132.36768)" />
+    <rect
+       style="opacity:1;fill:url(#linearGradient3630);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.13464069;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect3622"
+       width="1054.4708"
+       height="461.52972"
+       x="-0.7354126"
+       y="278.34879" />
+    <path
+       style="fill:url(#linearGradient3826);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M -0.99999999,712.83731 C 272,698.40705 -51.363087,575.30331 261,705.40705 C 324.46247,731.84009 395,707.01041 449,705.40705 C 503,703.80369 463,690.73643 510,711.58015 C 557,732.42386 705,692.39023 750,684.37342 C 795,676.35661 908,667.75324 947,682.18351 C 986,696.61377 1056,698.9936 1056,698.9936 L 1053,747.09448 L -3,745.49112 L -0.99999999,712.83731 z"
+       id="path3814"
+       sodipodi:nodetypes="cssssscccc" />
+    <rect
+       style="opacity:1;fill:url(#linearGradient3520);fill-opacity:1;fill-rule:nonzero;stroke:#1b1e1f;stroke-width:0.56879884;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect3512"
+       width="10.557344"
+       height="6.0432386"
+       x="642.3761"
+       y="666.43695" />
+    <use
+       x="0"
+       y="0"
+       xlink:href="#path2455"
+       id="use3258"
+       transform="matrix(0.869168,0,0,-0.869168,81.98751,1246.5374)"
+       width="1052.3622"
+       height="744.09448" />
+    <path
+       style="fill:url(#linearGradient3812);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.77744257;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 593.04822,651.68104 C 593.04822,651.68104 653.65569,615.49321 639.065,637.05192 C 624.47431,658.61061 624.47431,658.61061 624.47431,658.61061 L 593.04822,651.68104 z"
+       id="path2455" />
+    <path
+       style="fill:url(#linearGradient3175);fill-opacity:1;fill-rule:evenodd;stroke:#393939;stroke-width:1.90693891;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 485.26939,643.71814 C 443.15507,651.66437 458.5319,680.53556 502.21486,686.27814 C 551.68229,692.78115 568.45042,691.0115 605.34827,686.27814 C 657.60843,679.57406 657.68143,651.78445 605.34827,643.25553 C 553.98131,634.88408 516.10913,637.89923 485.26939,643.71814 z"
+       id="path2385"
+       sodipodi:nodetypes="cssss" />
+    <path
+       style="fill:url(#radialGradient3339);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 542.18031,648.1112 C 548.56327,665.42741 608.42397,656.72745 586.93551,642.57104 C 586.93551,642.57104 543.33293,648.61096 542.18031,648.1112 z"
+       id="path3403"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:url(#linearGradient3311);fill-opacity:1;fill-rule:evenodd;stroke:#2d2d2d;stroke-width:2.07042313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 537.39402,641.90906 C 537.39402,656.7605 583.62247,656.30589 583.62247,641.45445 L 583.62247,636.06071 C 583.62247,621.21003 537.39402,613.87461 537.39402,628.72529 L 537.39402,641.90906 z"
+       id="path3291"
+       sodipodi:nodetypes="cssss" />
+    <g
+       id="g3235"
+       transform="matrix(1.4016868,0,0,1.1319742,112.22001,-99.678822)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#radialGradient3441);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.227;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3433"
+       sodipodi:cx="303.5"
+       sodipodi:cy="263.09448"
+       sodipodi:rx="37.5"
+       sodipodi:ry="40"
+       d="M 341,263.09448 A 37.5,40 0 1 1 266,263.09448 A 37.5,40 0 1 1 341,263.09448 z"
+       transform="matrix(0.692163,0,1.4106583e-2,0.289185,275.31394,582.37251)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#444444;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.06500006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3458"
+       sodipodi:cx="369.5"
+       sodipodi:cy="316.09448"
+       sodipodi:rx="27.5"
+       sodipodi:ry="7"
+       d="M 397,316.09448 A 27.5,7 0 1 1 342,316.09448 A 27.5,7 0 1 1 397,316.09448 z"
+       transform="matrix(0.5642633,0,0,0.5642633,348.03095,450.47113)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#444444;fill-opacity:1;fill-rule:nonzero;stroke:#1b1e1f;stroke-width:4.23126984;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3510"
+       sodipodi:cx="369.5"
+       sodipodi:cy="316.09448"
+       sodipodi:rx="27.5"
+       sodipodi:ry="7"
+       d="M 397,316.09448 A 27.5,7 0 1 1 342,316.09448 A 27.5,7 0 1 1 397,316.09448 z"
+       transform="matrix(0,0.30778,-0.5642633,0,828.66499,563.5944)" />
+    <use
+       x="0"
+       y="0"
+       xlink:href="#path3510"
+       id="use3544"
+       transform="translate(0.5000005,-17.23511)"
+       width="1052.3622"
+       height="744.09448" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:#787878;fill-opacity:1;fill-rule:nonzero;stroke:#1b1e1f;stroke-width:2.38492584;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3584"
+       sodipodi:cx="237.5"
+       sodipodi:cy="366.09448"
+       sodipodi:rx="8.5"
+       sodipodi:ry="8"
+       d="M 246,366.09448 A 8.5,8 0 1 1 229,366.09448 A 8.5,8 0 1 1 246,366.09448 z"
+       transform="matrix(1.7798114,-4.2997512e-2,1.3318941e-2,0.5513151,196.65666,476.1443)" />
+    <path
+       style="fill:#a9a9a9;fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:3.49756980000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 423.2231,281.1169 C 502.67948,283.47026 574.8361,283.42778 668.97714,281.1169 C 668.97714,281.1169 670.77663,271.99598 668.97714,269.5402 C 559.46065,250.8302 423.2231,265.08614 423.2231,269.5402 L 423.2231,281.1169 z"
+       id="path3469"
+       sodipodi:nodetypes="cccsc" />
+    <rect
+       style="opacity:1;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect3408"
+       width="3.4280596"
+       height="29.611124"
+       x="709.89148"
+       y="-14.462622"
+       transform="matrix(0.9327494,0.3605254,-0.3633626,0.9316478,0,0)" />
+    <rect
+       style="opacity:1;fill:url(#linearGradient3416);fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:2.99999928;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect3376"
+       width="48.499989"
+       height="8.5"
+       x="444.56302"
+       y="252.39224"
+       transform="matrix(0.9999952,3.0887776e-3,-3.0887776e-3,0.9999952,0,0)" />
+    <path
+       style="fill:url(#linearGradient3972);fill-opacity:1;fill-rule:evenodd;stroke:#323232;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 509,277.62139 C 509,277.62139 547.41409,235.70896 524,232.62139 L 615,244.62139 L 615,279.62139 L 509,277.62139 z"
+       id="path3952"
+       sodipodi:nodetypes="csccc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#radialGradient3662);fill-opacity:1;fill-rule:nonzero;stroke:#41526b;stroke-width:2.9000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3654"
+       sodipodi:cx="656.19507"
+       sodipodi:cy="541.15485"
+       sodipodi:rx="12.727922"
+       sodipodi:ry="16.263456"
+       d="M 668.92299,541.15485 A 12.727922,16.263456 0 1 1 643.46715,541.15485 A 12.727922,16.263456 0 1 1 668.92299,541.15485 z"
+       transform="matrix(0.5187874,0,0,0.3968421,374.8524,387.30025)" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#radialGradient3668);fill-opacity:1;fill-rule:nonzero;stroke:#41526b;stroke-width:2.9000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3666"
+       sodipodi:cx="656.19507"
+       sodipodi:cy="541.15485"
+       sodipodi:rx="12.727922"
+       sodipodi:ry="16.263456"
+       d="M 668.92299,541.15485 A 12.727922,16.263456 0 1 1 643.46715,541.15485 A 12.727922,16.263456 0 1 1 668.92299,541.15485 z"
+       transform="matrix(0.5734968,0,0,0.4386917,316.52295,315.62837)" />
+    <path
+       transform="matrix(0.8598866,0,0,0.5637407,192.52282,220.77351)"
+       d="M 668.92299,541.15485 A 12.727922,16.263456 0 1 1 643.46715,541.15485 A 12.727922,16.263456 0 1 1 668.92299,541.15485 z"
+       sodipodi:ry="16.263456"
+       sodipodi:rx="12.727922"
+       sodipodi:cy="541.15485"
+       sodipodi:cx="656.19507"
+       id="path3670"
+       style="opacity:1;fill:url(#radialGradient3672);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.90000010000000020;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#radialGradient3676);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.90000010000000020;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3674"
+       sodipodi:cx="656.19507"
+       sodipodi:cy="541.15485"
+       sodipodi:rx="12.727922"
+       sodipodi:ry="16.263456"
+       d="M 668.92299,541.15485 A 12.727922,16.263456 0 1 1 643.46715,541.15485 A 12.727922,16.263456 0 1 1 668.92299,541.15485 z"
+       transform="matrix(0.7435991,0,0,0.6264519,225.8301,127.83701)" />
+    <g
+       id="g3759"
+       transform="matrix(0.8830571,0,0,0.8830571,104.83144,103.2985)">
+      <path
+         d="M 523.9661,469.73706 A 7.7781744,34.648232 0 1 1 508.40975,469.73706 A 7.7781744,34.648232 0 1 1 523.9661,469.73706 z"
+         sodipodi:ry="34.648232"
+         sodipodi:rx="7.7781744"
+         sodipodi:cy="469.73706"
+         sodipodi:cx="516.18793"
+         id="path3682"
+         style="opacity:1;fill:url(#linearGradient3772);fill-opacity:1;fill-rule:nonzero;stroke:#272727;stroke-width:2.9000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="arc" />
+      <g
+         id="g3754">
+        <rect
+           style="opacity:1;fill:url(#linearGradient3774);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="rect3716"
+           width="33.58757"
+           height="59.927299"
+           x="498.86386"
+           y="497.84454" />
+        <path
+           style="fill:url(#linearGradient3776);fill-opacity:1;fill-rule:evenodd;stroke:#1f1f1f;stroke-width:1.99788344;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 523.35045,482.89424 C 523.35045,482.89424 532.31256,488.20203 532.02344,500.14638 C 531.73431,512.09072 531.73431,511.73417 531.73431,511.73417 C 531.73431,511.73417 520.70627,493.83104 519.26887,499.77636 L 523.35045,482.89424 z"
+           id="path3704"
+           sodipodi:nodetypes="cscsc" />
+        <path
+           sodipodi:nodetypes="cscsc"
+           id="path3706"
+           d="M 508.50327,482.89424 C 508.50327,482.89424 499.54116,488.20203 499.83028,500.14638 C 500.11941,512.09072 500.11941,511.73417 500.11941,511.73417 C 500.11941,511.73417 511.14745,493.83104 512.58485,499.77636 L 508.50327,482.89424 z"
+           style="fill:#bcbcbc;fill-opacity:1;fill-rule:evenodd;stroke:#1f1f1f;stroke-width:1.99788344;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      </g>
+    </g>
+    <g
+       transform="matrix(0.8830571,0,0,0.8830571,192.45885,-66.370546)"
+       id="g3778">
+      <path
+         sodipodi:type="arc"
+         style="opacity:1;fill:url(#linearGradient3790);fill-opacity:1;fill-rule:nonzero;stroke:#272727;stroke-width:2.9000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="path3780"
+         sodipodi:cx="516.18793"
+         sodipodi:cy="469.73706"
+         sodipodi:rx="7.7781744"
+         sodipodi:ry="34.648232"
+         d="M 523.9661,469.73706 A 7.7781744,34.648232 0 1 1 508.40975,469.73706 A 7.7781744,34.648232 0 1 1 523.9661,469.73706 z" />
+      <g
+         id="g3782">
+        <rect
+           y="497.84454"
+           x="498.86386"
+           height="59.927299"
+           width="33.58757"
+           id="rect3784"
+           style="opacity:1;fill:url(#linearGradient3792);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+        <path
+           sodipodi:nodetypes="cscsc"
+           id="path3786"
+           d="M 523.35045,482.89424 C 523.35045,482.89424 532.31256,488.20203 532.02344,500.14638 C 531.73431,512.09072 531.73431,511.73417 531.73431,511.73417 C 531.73431,511.73417 520.70627,493.83104 519.26887,499.77636 L 523.35045,482.89424 z"
+           style="fill:url(#linearGradient3794);fill-opacity:1;fill-rule:evenodd;stroke:#1f1f1f;stroke-width:1.99788344;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+        <path
+           style="fill:#bcbcbc;fill-opacity:1;fill-rule:evenodd;stroke:#1f1f1f;stroke-width:1.99788344;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 508.50327,482.89424 C 508.50327,482.89424 499.54116,488.20203 499.83028,500.14638 C 500.11941,512.09072 500.11941,511.73417 500.11941,511.73417 C 500.11941,511.73417 511.14745,493.83104 512.58485,499.77636 L 508.50327,482.89424 z"
+           id="path3788"
+           sodipodi:nodetypes="cscsc" />
+      </g>
+    </g>
+    <path
+       transform="matrix(0.4292897,0,0,0.3283816,384.32775,481.20689)"
+       d="M 668.92299,541.15485 A 12.727922,16.263456 0 1 1 643.46715,541.15485 A 12.727922,16.263456 0 1 1 668.92299,541.15485 z"
+       sodipodi:ry="16.263456"
+       sodipodi:rx="12.727922"
+       sodipodi:cy="541.15485"
+       sodipodi:cx="656.19507"
+       id="path3802"
+       style="opacity:1;fill:url(#radialGradient3804);fill-opacity:1;fill-rule:nonzero;stroke:#41526b;stroke-width:2.9000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       sodipodi:type="arc"
+       style="opacity:1;fill:url(#radialGradient3808);fill-opacity:1;fill-rule:nonzero;stroke:#41526b;stroke-width:2.9000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3806"
+       sodipodi:cx="656.19507"
+       sodipodi:cy="541.15485"
+       sodipodi:rx="12.727922"
+       sodipodi:ry="16.263456"
+       d="M 668.92299,541.15485 A 12.727922,16.263456 0 1 1 643.46715,541.15485 A 12.727922,16.263456 0 1 1 668.92299,541.15485 z"
+       transform="matrix(0.5842998,0,0,0.4469553,299.7804,369.91514)" />
+    <path
+       style="fill:#ad8b00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 1059.5,736.57373 C 786.5,730.53352 912.51207,693.32637 768.5,736.53352 C 750.7005,741.87381 560.38464,722.59661 552.5,736.53352 C 528.68395,778.63085 223.94216,703.33865 182.5,727.16444 C 179.5,728.88919 160.53732,723.88477 135.5,730.90332 C 98.830356,741.18268 82.5,725.67603 43.5,731.71624 C 4.5,737.75645 0.5,733.72965 0.5,733.72965 L -6.5,747.98302 L 1049.5,747.31188 L 1059.5,736.57373 z"
+       id="path3828"
+       sodipodi:nodetypes="cssssscccc" />
+    <rect
+       style="opacity:1;fill:url(#linearGradient5103);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect3448"
+       width="1053.5891"
+       height="67.882248"
+       x="-0.29455566"
+       y="274.57559" />
+    <path
+       sodipodi:nodetypes="ccccc"
+       id="path3519"
+       d="M 428,343.85222 C 428,343.85222 457.01739,315.41439 470,315.41439 C 481.98261,313.04457 634.13054,311.73511 652,317.41962 C 661.13441,320.56943 664.46012,324.9477 666,343.85222 C 600.25603,336.72647 497.8192,336.4719 428,343.85222 z"
+       style="opacity:0.43933058;fill:url(#linearGradient3521);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       style="fill:url(#linearGradient3948);fill-opacity:1;fill-rule:evenodd;stroke:#545454;stroke-width:3.0999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 428,276.62139 C 428,276.62139 457.01739,315.62139 470,315.62139 C 481.98261,318.87139 634.13054,320.6672 652,312.87139 C 661.13441,308.55171 664.46012,302.54729 666,276.62139 C 600.25603,286.39373 497.8192,286.74286 428,276.62139 z"
+       id="path3938"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="fill:#dedede;fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 466.00273,263.08289 L 484.25264,263.13926 L 494.7163,274.92164 L 465.96644,274.83284 L 466.00273,263.08289 z"
+       id="rect3378"
+       sodipodi:nodetypes="ccccc" />
+    <rect
+       style="opacity:1;fill:url(#linearGradient3990);fill-opacity:1;fill-rule:nonzero;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect3974"
+       width="13.5"
+       height="17"
+       x="537.75"
+       y="251.2464"
+       inkscape:transform-center-x="30" />
+    <rect
+       inkscape:transform-center-x="30"
+       y="251.2464"
+       x="582.5"
+       height="17"
+       width="13.5"
+       id="rect3992"
+       style="opacity:1;fill:url(#linearGradient3994);fill-opacity:1;fill-rule:nonzero;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       style="fill:#dedede;fill-opacity:1;fill-rule:nonzero;stroke:#484848;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 422.25,268.87139 C 487.33333,277.37139 573.16667,279.87139 668.5,268.87139 C 668.5,268.87139 670.30312,275.56827 668.5,277.37139 C 558.76249,291.1089 422.25,280.64171 422.25,277.37139 L 422.25,268.87139 z"
+       id="rect2558"
+       sodipodi:nodetypes="cccsc" />
+    <rect
+       style="opacity:1;fill:#c1c1c1;fill-opacity:1;fill-rule:nonzero;stroke:#404040;stroke-width:3.0365274;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2569"
+       width="94.427879"
+       height="7.236649"
+       x="546.39832"
+       y="177.10637"
+       transform="matrix(0.9947793,0.1020501,-0.1079723,0.9941539,0,0)" />
+    <rect
+       inkscape:transform-center-x="30"
+       y="251.2464"
+       x="559.875"
+       height="17"
+       width="13.5"
+       id="rect3385"
+       style="opacity:1;fill:url(#linearGradient3387);fill-opacity:1;fill-rule:nonzero;stroke:#323232;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       id="g3401"
+       transform="matrix(0.9246214,0.3808874,-0.3808874,0.9246214,113.30125,-193.16902)"
+       inkscape:transform-center-x="17.590385"
+       inkscape:transform-center-y="-15.415449">
+      <rect
+         inkscape:transform-center-y="-43.888889"
+         transform="matrix(0,1,-1,0,0,0)"
+         style="opacity:1;fill:#b20000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect3389"
+         width="19.75"
+         height="27.75"
+         x="193.34448"
+         y="-709" />
+      <rect
+         y="200.59448"
+         x="681.5"
+         height="5.75"
+         width="27.25"
+         id="rect3393"
+         style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         y="193.59448"
+         x="691.25"
+         height="19.5"
+         width="5.75"
+         id="rect3395"
+         style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         y="202.34448"
+         x="681.5"
+         height="2.5"
+         width="27.75"
+         id="rect3397"
+         style="opacity:1;fill:#000080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         y="193.59448"
+         x="692.5"
+         height="19.25"
+         width="3"
+         id="rect3399"
+         style="opacity:1;fill:#000080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <path
+       style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#404040;stroke-width:3.03650045;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 529.42326,227.17914 L 616.35817,235.81552 L 618.07681,241.50986 L 524.14191,231.87348 L 529.42326,227.17914 z"
+       id="rect3466"
+       sodipodi:nodetypes="ccccc" />
+    <rect
+       style="opacity:1;fill:url(#linearGradient3426);fill-opacity:1;fill-rule:nonzero;stroke:#494949;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect3418"
+       width="34.5"
+       height="14.5"
+       x="571.14081"
+       y="174.8026"
+       transform="matrix(0.997157,7.5351915e-2,-7.5351915e-2,0.997157,0,0)"
+       inkscape:transform-center-x="-8"
+       inkscape:transform-center-y="2" />
+    <g
+       id="mine"
+       transform="translate(971.11461,237.62715)"
+       inkscape:label="#g3441">
+      <path
+         transform="matrix(0.6341613,0,0,0.6341613,-18.521242,45.718192)"
+         d="M -167.5843,186.54079 A 31.466251,31.466251 0 1 1 -230.5168,186.54079 A 31.466251,31.466251 0 1 1 -167.5843,186.54079 z"
+         sodipodi:ry="31.466251"
+         sodipodi:rx="31.466251"
+         sodipodi:cy="186.54079"
+         sodipodi:cx="-199.05055"
+         id="path2586"
+         style="opacity:1;fill:url(#radialGradient3364);fill-opacity:1;stroke:#131313;stroke-width:3.54799318;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:nodetypes="ccss"
+         id="path3382"
+         d="M -155.20193,175.4167 C -157.60085,176.6451 -156.78074,184.26068 -156.78074,184.26068 C -156.78074,184.26068 -148.33787,181.58301 -148.57092,178.60053 C -148.74283,176.40051 -153.23774,174.41092 -155.20193,175.4167 z"
+         style="fill:url(#linearGradient3398);fill-opacity:1;fill-rule:evenodd;stroke:#131313;stroke-width:2.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccss"
+         id="path3400"
+         d="M -156.56354,153.84532 C -158.96246,152.61693 -158.14235,145.00135 -158.14235,145.00135 C -158.14235,145.00135 -149.69948,147.67902 -149.93253,150.66149 C -150.10444,152.86151 -154.59935,154.85111 -156.56354,153.84532 z"
+         style="fill:url(#linearGradient3402);fill-opacity:1;fill-rule:evenodd;stroke:#131313;stroke-width:2.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccss"
+         id="path3404"
+         d="M -133.88532,153.68678 C -131.48641,152.45838 -132.30652,144.8428 -132.30652,144.8428 C -132.30652,144.8428 -140.74938,147.52047 -140.51633,150.50295 C -140.34442,152.70297 -135.84951,154.69256 -133.88532,153.68678 z"
+         style="fill:url(#linearGradient3406);fill-opacity:1;fill-rule:evenodd;stroke:#131313;stroke-width:2.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccss"
+         id="path3408"
+         d="M -134.51948,175.55085 C -132.12057,176.77925 -132.94068,184.39483 -132.94068,184.39483 C -132.94068,184.39483 -141.38355,181.71716 -141.15049,178.73469 C -140.97858,176.53467 -136.48367,174.54507 -134.51948,175.55085 z"
+         style="fill:url(#linearGradient3410);fill-opacity:1;fill-rule:evenodd;stroke:#131313;stroke-width:2.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccss"
+         id="path3412"
+         d="M -161.25709,168.78221 C -163.22395,170.62484 -170.11427,165.85236 -170.11427,165.85236 C -170.11427,165.85236 -164.7408,160.23808 -162.01257,161.46538 C -160.00011,162.37068 -159.64667,167.27352 -161.25709,168.78221 z"
+         style="fill:url(#linearGradient3414);fill-opacity:1;fill-rule:evenodd;stroke:#131313;stroke-width:2.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccss"
+         id="path3416"
+         d="M -129.17068,169.10464 C -127.20382,170.94727 -120.3135,166.17478 -120.3135,166.17478 C -120.3135,166.17478 -125.68697,160.5605 -128.41519,161.7878 C -130.42766,162.69311 -130.7811,167.59595 -129.17068,169.10464 z"
+         style="fill:url(#linearGradient3418);fill-opacity:1;fill-rule:evenodd;stroke:#131313;stroke-width:2.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         transform="matrix(0.6341613,0,0,0.6341613,-61.039517,68.324922)"
+         d="M -126,151.21948 A 6.625,6.625 0 1 1 -139.25,151.21948 A 6.625,6.625 0 1 1 -126,151.21948 z"
+         sodipodi:ry="6.625"
+         sodipodi:rx="6.625"
+         sodipodi:cy="151.21948"
+         sodipodi:cx="-132.625"
+         id="path3426"
+         style="opacity:1;fill:url(#radialGradient3439);fill-opacity:1;stroke:#131313;stroke-width:3.54799318;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="arc" />
+    </g>
+  </g>
+</svg>
Index: trunk/demos/sub-attaq/pics/scalable/submarine.svg
===================================================================
--- trunk/demos/sub-attaq/pics/scalable/submarine.svg	(revision 561)
+++ trunk/demos/sub-attaq/pics/scalable/submarine.svg	(revision 561)
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.0"
+   width="744.09448"
+   height="1052.3622"
+   id="svg2594">
+  <defs
+     id="defs2596">
+    <linearGradient
+       id="linearGradient3345">
+      <stop
+         id="stop3348"
+         style="stop-color:#898989;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3350"
+         style="stop-color:#9ea1a2;stop-opacity:1"
+         offset="0.44021741" />
+      <stop
+         id="stop3352"
+         style="stop-color:#bbbdbf;stop-opacity:1"
+         offset="0.56799388" />
+      <stop
+         id="stop3354"
+         style="stop-color:#f0f1f2;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="510.99884"
+       y1="161.99408"
+       x2="396.48914"
+       y2="161.99408"
+       id="linearGradient3311"
+       xlink:href="#linearGradient3345"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.466978,0,0,0.4500435,231.58508,159.95135)" />
+    <linearGradient
+       id="linearGradient3532">
+      <stop
+         id="stop3534"
+         style="stop-color:#545454;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3536"
+         style="stop-color:#848788;stop-opacity:1"
+         offset="0.44021741" />
+      <stop
+         id="stop3538"
+         style="stop-color:#9ca0a2;stop-opacity:1"
+         offset="0.56799388" />
+      <stop
+         id="stop3540"
+         style="stop-color:#565d60;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="525"
+       y1="371.09448"
+       x2="525"
+       y2="395.09448"
+       id="linearGradient3520"
+       xlink:href="#linearGradient3532"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5865192,0,0,0.2518015,219.30885,192.6957)" />
+    <linearGradient
+       id="linearGradient3227">
+      <stop
+         id="stop3229"
+         style="stop-color:#444444;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3232"
+         style="stop-color:#b0b0b0;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="543.5"
+       y1="205.19257"
+       x2="587.52002"
+       y2="205.19257"
+       id="linearGradient3812"
+       xlink:href="#linearGradient3227"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1223608,0,0,0.3849769,-137.93938,185.11074)" />
+    <linearGradient
+       id="linearGradient3167">
+      <stop
+         id="stop3169"
+         style="stop-color:#464646;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3345"
+         style="stop-color:#848788;stop-opacity:1"
+         offset="0.44021741" />
+      <stop
+         id="stop3347"
+         style="stop-color:#9ca0a2;stop-opacity:1"
+         offset="0.56799388" />
+      <stop
+         id="stop3171"
+         style="stop-color:#b5babd;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="443.95602"
+       y1="315.31854"
+       x2="443.95602"
+       y2="247.85609"
+       id="linearGradient3175"
+       xlink:href="#linearGradient3167"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4908502,0,0,0.4579593,230.56224,161.8228)" />
+    <linearGradient
+       id="linearGradient3421">
+      <stop
+         id="stop3423"
+         style="stop-color:#444444;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3425"
+         style="stop-color:#444444;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       cx="432.33429"
+       cy="233.80295"
+       r="59.056835"
+       fx="432.33429"
+       fy="233.80295"
+       id="radialGradient3339"
+       xlink:href="#linearGradient3421"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4181493,0,0,0.1282619,265.67128,239.85868)" />
+    <linearGradient
+       id="linearGradient3435">
+      <stop
+         id="stop3437"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3439"
+         style="stop-color:#c0c0c0;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       cx="290.5"
+       cy="244.34448"
+       r="37.5"
+       fx="290.5"
+       fy="244.34448"
+       id="radialGradient3441"
+       xlink:href="#linearGradient3435"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8202102,0.8202102,-0.7960458,0.7960458,246.73838,-189.686)" />
+  </defs>
+  <g
+     id="submarine">
+    <rect
+       width="10.557344"
+       height="6.0432386"
+       x="521.95276"
+       y="286.13785"
+       id="rect3512"
+       style="opacity:1;fill:url(#linearGradient3520);fill-opacity:1;fill-rule:nonzero;stroke:#1b1e1f;stroke-width:0.56879884;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       d="M 472.62489,271.38195 C 472.62489,271.38195 533.23236,235.19412 518.64167,256.75283 C 504.05098,278.31152 504.05098,278.31152 504.05098,278.31152 L 472.62489,271.38195 z"
+       id="path2455"
+       style="fill:url(#linearGradient3812);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.77744257;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       d="M 364.84606,263.41905 C 322.73174,271.36528 338.10857,300.23647 381.79153,305.97905 C 431.25896,312.48206 448.02709,310.71241 484.92494,305.97905 C 537.1851,299.27497 537.2581,271.48536 484.92494,262.95644 C 433.55798,254.58499 395.6858,257.60014 364.84606,263.41905 z"
+       id="path2385"
+       style="fill:url(#linearGradient3175);fill-opacity:1;fill-rule:evenodd;stroke:#393939;stroke-width:1.90693891;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       d="M 421.75698,267.81211 C 428.13994,285.12832 488.00064,276.42836 466.51218,262.27195 C 466.51218,262.27195 422.9096,268.31187 421.75698,267.81211 z"
+       id="path3403"
+       style="fill:url(#radialGradient3339);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       d="M 416.97069,261.60997 C 416.97069,276.46141 463.19914,276.0068 463.19914,261.15536 L 463.19914,255.76162 C 463.19914,240.91094 416.97069,233.57552 416.97069,248.4262 L 416.97069,261.60997 z"
+       id="path3291"
+       style="fill:url(#linearGradient3311);fill-opacity:1;fill-rule:evenodd;stroke:#2d2d2d;stroke-width:2.07042313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       d="M 341,263.09448 A 37.5,40 0 1 1 266,263.09448 A 37.5,40 0 1 1 341,263.09448 z"
+       transform="matrix(0.692163,0,1.4106583e-2,0.289185,154.89061,202.07342)"
+       id="path3433"
+       style="opacity:1;fill:url(#radialGradient3441);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.227;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       d="M 397,316.09448 A 27.5,7 0 1 1 342,316.09448 A 27.5,7 0 1 1 397,316.09448 z"
+       transform="matrix(0.5642633,0,0,0.5642633,227.60762,70.172035)"
+       id="path3458"
+       style="opacity:1;fill:#444444;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.06500006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       d="M 397,316.09448 A 27.5,7 0 1 1 342,316.09448 A 27.5,7 0 1 1 397,316.09448 z"
+       transform="matrix(0,0.30778,-0.5642633,0,708.24166,183.29531)"
+       id="path3510"
+       style="opacity:1;fill:#444444;fill-opacity:1;fill-rule:nonzero;stroke:#1b1e1f;stroke-width:4.23126984;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <use
+       transform="translate(0.5000044,-17.235115)"
+       id="use3544"
+       x="0"
+       y="0"
+       width="1052.3622"
+       height="744.09448"
+       xlink:href="#path3510" />
+    <path
+       d="M 246,366.09448 A 8.5,8 0 1 1 229,366.09448 A 8.5,8 0 1 1 246,366.09448 z"
+       transform="matrix(1.7798114,-4.2997512e-2,1.3318941e-2,0.5513151,76.233334,95.845205)"
+       id="path3584"
+       style="opacity:1;fill:#787878;fill-opacity:1;fill-rule:nonzero;stroke:#1b1e1f;stroke-width:2.38492584;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  </g>
+</svg>
Index: trunk/demos/sub-attaq/pics/scalable/surface.svg
===================================================================
--- trunk/demos/sub-attaq/pics/scalable/surface.svg	(revision 561)
+++ trunk/demos/sub-attaq/pics/scalable/surface.svg	(revision 561)
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.0"
+   width="744.09448"
+   height="1052.3622"
+   id="svg2685">
+  <defs
+     id="defs2687">
+    <linearGradient
+       id="linearGradient5097">
+      <stop
+         id="stop5099"
+         style="stop-color:#19a2db;stop-opacity:0"
+         offset="0" />
+      <stop
+         id="stop5109"
+         style="stop-color:#1379a7;stop-opacity:0.49803922"
+         offset="0.30000001" />
+      <stop
+         id="stop5101"
+         style="stop-color:#0e5173;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="590.84674"
+       y1="274.57559"
+       x2="590.84674"
+       y2="334.01376"
+       id="linearGradient5103"
+       xlink:href="#linearGradient5097"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-172.21428,209.55976)"
+       spreadMethod="pad" />
+  </defs>
+  <g
+     id="layer1">
+    <rect
+       width="1053.5891"
+       height="67.882248"
+       x="-172.50883"
+       y="484.13535"
+       id="rect3448"
+       style="opacity:1;fill:url(#linearGradient5103);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  </g>
+</svg>
Index: trunk/demos/sub-attaq/pics/scalable/torpedo.svg
===================================================================
--- trunk/demos/sub-attaq/pics/scalable/torpedo.svg	(revision 561)
+++ trunk/demos/sub-attaq/pics/scalable/torpedo.svg	(revision 561)
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.0"
+   width="744.09448"
+   height="1052.3622"
+   id="svg2584">
+  <defs
+     id="defs2586">
+    <linearGradient
+       id="linearGradient3708">
+      <stop
+         id="stop3710"
+         style="stop-color:#202020;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3712"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="518.26996"
+       y1="497.31476"
+       x2="533.02924"
+       y2="497.31476"
+       id="linearGradient3776"
+       xlink:href="#linearGradient3708"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3718">
+      <stop
+         id="stop3720"
+         style="stop-color:#bcbcbc;stop-opacity:0.28169015"
+         offset="0" />
+      <stop
+         id="stop3722"
+         style="stop-color:#bcbcbc;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="516.89508"
+       y1="503.50137"
+       x2="516.89508"
+       y2="543.80646"
+       id="linearGradient3774"
+       xlink:href="#linearGradient3718"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9947644,0,0,1.3346457,2.7877039,-166.60153)" />
+    <linearGradient
+       id="linearGradient3692">
+      <stop
+         id="stop3694"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3696"
+         style="stop-color:#b6b6b6;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="506.95975"
+       y1="469.73706"
+       x2="525.41608"
+       y2="469.73706"
+       id="linearGradient3772"
+       xlink:href="#linearGradient3692"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="506.95975"
+       y1="469.73706"
+       x2="525.41608"
+       y2="469.73706"
+       id="linearGradient2403"
+       xlink:href="#linearGradient3692"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="516.89508"
+       y1="503.50137"
+       x2="516.89508"
+       y2="543.80646"
+       id="linearGradient2405"
+       xlink:href="#linearGradient3718"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9947644,0,0,1.3346457,2.7877039,-166.60153)" />
+    <linearGradient
+       x1="518.26996"
+       y1="497.31476"
+       x2="533.02924"
+       y2="497.31476"
+       id="linearGradient2407"
+       xlink:href="#linearGradient3708"
+       gradientUnits="userSpaceOnUse" />
+  </defs>
+  <g
+     transform="translate(-128.69958,6.6568748)"
+     id="torpedo">
+    <g
+       transform="matrix(0.8830571,0,0,0.8830571,-119.78327,177.67947)"
+       id="g3525">
+      <path
+         d="M 523.9661,469.73706 A 7.7781744,34.648232 0 1 1 508.40975,469.73706 A 7.7781744,34.648232 0 1 1 523.9661,469.73706 z"
+         id="path3682"
+         style="opacity:1;fill:url(#linearGradient2403);fill-opacity:1;fill-rule:nonzero;stroke:#272727;stroke-width:2.9000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <g
+         id="g3754">
+        <rect
+           width="33.58757"
+           height="59.927299"
+           x="498.86386"
+           y="497.84454"
+           id="rect3716"
+           style="opacity:1;fill:url(#linearGradient2405);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+        <path
+           d="M 523.35045,482.89424 C 523.35045,482.89424 532.31256,488.20203 532.02344,500.14638 C 531.73431,512.09072 531.73431,511.73417 531.73431,511.73417 C 531.73431,511.73417 520.70627,493.83104 519.26887,499.77636 L 523.35045,482.89424 z"
+           id="path3704"
+           style="fill:url(#linearGradient2407);fill-opacity:1;fill-rule:evenodd;stroke:#1f1f1f;stroke-width:1.99788344;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+        <path
+           d="M 508.50327,482.89424 C 508.50327,482.89424 499.54116,488.20203 499.83028,500.14638 C 500.11941,512.09072 500.11941,511.73417 500.11941,511.73417 C 500.11941,511.73417 511.14745,493.83104 512.58485,499.77636 L 508.50327,482.89424 z"
+           id="path3706"
+           style="fill:#bcbcbc;fill-opacity:1;fill-rule:evenodd;stroke:#1f1f1f;stroke-width:1.99788344;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      </g>
+    </g>
+  </g>
+</svg>
Index: trunk/demos/sub-attaq/pixmapitem.cpp
===================================================================
--- trunk/demos/sub-attaq/pixmapitem.cpp	(revision 561)
+++ trunk/demos/sub-attaq/pixmapitem.cpp	(revision 561)
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//Own
+#include "pixmapitem.h"
+
+//Qt
+#include <QPainter>
+
+PixmapItem::PixmapItem(const QString &fileName,GraphicsScene::Mode mode, QGraphicsItem * parent) : QGraphicsObject(parent)
+{
+    if (mode == GraphicsScene::Big)
+        pix  = ":/big/" + fileName;
+    else
+        pix = ":/small/" + fileName;
+}
+
+PixmapItem::PixmapItem(const QString &fileName, QGraphicsScene *scene) : QGraphicsObject(), pix(fileName)
+{
+    scene->addItem(this);
+}
+
+QSizeF PixmapItem::size() const
+{
+    return pix.size();
+}
+
+QRectF PixmapItem::boundingRect() const
+{
+    return QRectF(QPointF(0, 0), pix.size());
+}
+
+void PixmapItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
+{
+    painter->drawPixmap(0, 0, pix);
+}
+
+
Index: trunk/demos/sub-attaq/pixmapitem.h
===================================================================
--- trunk/demos/sub-attaq/pixmapitem.h	(revision 561)
+++ trunk/demos/sub-attaq/pixmapitem.h	(revision 561)
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __PIXMAPITEM__H__
+#define __PIXMAPITEM__H__
+
+//Own
+#include "graphicsscene.h"
+
+//Qt
+#include <QtGui/QGraphicsObject>
+
+class PixmapItem : public QGraphicsObject
+{
+public:
+    PixmapItem(const QString &fileName, GraphicsScene::Mode mode, QGraphicsItem * parent = 0);
+    PixmapItem(const QString &fileName, QGraphicsScene *scene);
+    QSizeF size() const;
+    QRectF boundingRect() const;
+    void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
+private:
+    QPixmap pix;
+};
+
+#endif //__PIXMAPITEM__H__
Index: trunk/demos/sub-attaq/progressitem.cpp
===================================================================
--- trunk/demos/sub-attaq/progressitem.cpp	(revision 561)
+++ trunk/demos/sub-attaq/progressitem.cpp	(revision 561)
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "progressitem.h"
+#include "pixmapitem.h"
+
+ProgressItem::ProgressItem (QGraphicsItem * parent)
+    : QGraphicsTextItem(parent), currentLevel(1), currentScore(0)
+{
+    setFont(QFont("Comic Sans MS"));
+    setPos(parentItem()->boundingRect().topRight() - QPointF(180, -5));
+}
+
+void ProgressItem::setLevel(int level)
+{
+    currentLevel = level;
+    updateProgress();
+}
+
+void ProgressItem::setScore(int score)
+{
+    currentScore = score;
+    updateProgress();
+}
+
+void ProgressItem::updateProgress()
+{
+    setHtml(QString("Level : %1 Score : %2").arg(currentLevel).arg(currentScore));
+}
Index: trunk/demos/sub-attaq/progressitem.h
===================================================================
--- trunk/demos/sub-attaq/progressitem.h	(revision 561)
+++ trunk/demos/sub-attaq/progressitem.h	(revision 561)
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef PROGRESSITEM_H
+#define PROGRESSITEM_H
+
+//Qt
+#include <QtGui/QGraphicsTextItem>
+
+class ProgressItem : public QGraphicsTextItem
+{
+public:
+    ProgressItem(QGraphicsItem * parent = 0);
+    void setLevel(int level);
+    void setScore(int score);
+
+private:
+    void updateProgress();
+    int currentLevel;
+    int currentScore;
+};
+
+#endif // PROGRESSITEM_H
Index: trunk/demos/sub-attaq/qanimationstate.cpp
===================================================================
--- trunk/demos/sub-attaq/qanimationstate.cpp	(revision 561)
+++ trunk/demos/sub-attaq/qanimationstate.cpp	(revision 561)
@@ -0,0 +1,150 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qanimationstate.h"
+
+#include <QtCore/qstate.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+\class QAnimationState
+
+\brief The QAnimationState class provides state that handle an animation and emit
+a signal when this animation is finished.
+
+\ingroup statemachine
+
+QAnimationState provides a state that handle an animation. It will start this animation
+when the state is entered and stop it when it is leaved. When the animation has finished the
+state emit animationFinished signal.
+QAnimationState is part of \l{The State Machine Framework}.
+
+\code
+QStateMachine machine;
+QAnimationState *s = new QAnimationState(machine->rootState());
+QPropertyAnimation *animation = new QPropertyAnimation(obj, "pos");
+s->setAnimation(animation);
+QState *s2 = new QState(machine->rootState());
+s->addTransition(s, SIGNAL(animationFinished()), s2);
+machine.start();
+\endcode
+
+\sa QState, {The Animation Framework}
+*/
+
+
+#ifndef QT_NO_ANIMATION
+
+/*!
+  Constructs a new state with the given \a parent state.
+*/
+QAnimationState::QAnimationState(QState *parent)
+    : QState(parent), m_animation(0)
+{
+}
+
+/*!
+  Destroys the animation state.
+*/
+QAnimationState::~QAnimationState()
+{
+}
+
+/*!
+  Set an \a animation for this QAnimationState. If an animation was previously handle by this
+  state then it won't emit animationFinished for the old animation. The QAnimationState doesn't
+  take the ownership of the animation.
+*/
+void QAnimationState::setAnimation(QAbstractAnimation *animation)
+{
+    if (animation == m_animation)
+        return;
+
+    //Disconnect from the previous animation if exist
+    if(m_animation)
+        disconnect(m_animation, SIGNAL(finished()), this, SIGNAL(animationFinished()));
+
+    m_animation = animation;
+
+    if (m_animation) {
+        //connect the new animation
+        connect(m_animation, SIGNAL(finished()), this, SIGNAL(animationFinished()));
+    }
+}
+
+/*!
+  Returns the animation handle by this animation state, or 0 if there is no animation.
+*/
+QAbstractAnimation* QAnimationState::animation() const
+{
+    return m_animation;
+}
+
+/*!
+  \reimp
+*/
+void QAnimationState::onEntry(QEvent *)
+{
+    if (m_animation)
+        m_animation->start();
+}
+
+/*!
+  \reimp
+*/
+void QAnimationState::onExit(QEvent *)
+{
+    if (m_animation)
+        m_animation->stop();
+}
+
+/*!
+  \reimp
+*/
+bool QAnimationState::event(QEvent *e)
+{
+    return QState::event(e);
+}
+
+QT_END_NAMESPACE
+
+#endif
Index: trunk/demos/sub-attaq/qanimationstate.h
===================================================================
--- trunk/demos/sub-attaq/qanimationstate.h	(revision 561)
+++ trunk/demos/sub-attaq/qanimationstate.h	(revision 561)
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QANIMATIONSTATE_H
+#define QANIMATIONSTATE_H
+
+#ifndef QT_STATEMACHINE_SOLUTION
+#  include <QtCore/qstate.h>
+#  include <QtCore/qabstractanimation.h>
+#else
+#  include "qstate.h"
+#  include "qabstractanimation.h"
+#endif
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+#ifndef QT_NO_ANIMATION
+
+class QAbstractAnimation;
+
+class QAnimationState : public QState
+{
+    Q_OBJECT
+public:
+    QAnimationState(QState *parent = 0);
+    ~QAnimationState();
+
+    void setAnimation(QAbstractAnimation *animation);
+    QAbstractAnimation* animation() const;
+
+signals:
+    void animationFinished();
+
+protected:
+    void onEntry(QEvent *);
+    void onExit(QEvent *);
+    bool event(QEvent *e);
+
+private:
+    Q_DISABLE_COPY(QAnimationState)
+    QAbstractAnimation *m_animation;
+};
+
+#endif
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QANIMATIONSTATE_H
Index: trunk/demos/sub-attaq/states.cpp
===================================================================
--- trunk/demos/sub-attaq/states.cpp	(revision 561)
+++ trunk/demos/sub-attaq/states.cpp	(revision 561)
@@ -0,0 +1,330 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//Own
+#include "states.h"
+#include "graphicsscene.h"
+#include "boat.h"
+#include "submarine.h"
+#include "torpedo.h"
+#include "animationmanager.h"
+#include "progressitem.h"
+#include "textinformationitem.h"
+
+//Qt
+#include <QtGui/QMessageBox>
+#include <QtGui/QGraphicsView>
+#include <QtCore/QStateMachine>
+#include <QtGui/QKeyEventTransition>
+#include <QtCore/QFinalState>
+
+PlayState::PlayState(GraphicsScene *scene, QState *parent)
+    : QState(parent),
+    scene(scene),
+    machine(0),
+    currentLevel(0),
+    score(0)
+{
+}
+
+PlayState::~PlayState()
+{
+    delete machine;
+}
+
+void PlayState::onEntry(QEvent *)
+{
+    //We are now playing?
+    if (machine) {
+        machine->stop();
+        //we hide the information
+        scene->textInformationItem->hide();
+        scene->clearScene();
+        currentLevel = 0;
+        score = 0;
+        delete machine;
+    }
+
+    machine = new QStateMachine;
+
+    //This state is when player is playing
+    LevelState *levelState = new LevelState(scene, this, machine);
+
+    //This state is when the player is actually playing but the game is not paused
+    QState *playingState = new QState(levelState);
+    levelState->setInitialState(playingState);
+
+    //This state is when the game is paused
+    PauseState *pauseState = new PauseState(scene, levelState);
+
+    //We have one view, it receive the key press event
+    QKeyEventTransition *pressPplay = new QKeyEventTransition(scene->views().at(0), QEvent::KeyPress, Qt::Key_P);
+    pressPplay->setTargetState(pauseState);
+    QKeyEventTransition *pressPpause = new QKeyEventTransition(scene->views().at(0), QEvent::KeyPress, Qt::Key_P);
+    pressPpause->setTargetState(playingState);
+
+    //Pause "P" is triggered, the player pause the game
+    playingState->addTransition(pressPplay);
+
+    //To get back playing when the game has been paused
+    pauseState->addTransition(pressPpause);
+
+    //This state is when player have lost
+    LostState *lostState = new LostState(scene, this, machine);
+
+    //This state is when player have won
+    WinState *winState = new WinState(scene, this, machine);
+
+    //The boat has been destroyed then the game is finished
+    levelState->addTransition(scene->boat, SIGNAL(boatExecutionFinished()),lostState);
+
+    //This transition check if we won or not
+    WinTransition *winTransition = new WinTransition(scene, this, winState);
+
+    //The boat has been destroyed then the game is finished
+    levelState->addTransition(winTransition);
+
+    //This state is an animation when the score changed
+    UpdateScoreState *scoreState = new UpdateScoreState(this, levelState);
+
+    //This transition update the score when a submarine die
+    UpdateScoreTransition *scoreTransition = new UpdateScoreTransition(scene, this, levelState);
+    scoreTransition->setTargetState(scoreState);
+
+    //The boat has been destroyed then the game is finished
+    playingState->addTransition(scoreTransition);
+
+    //We go back to play state
+    scoreState->addTransition(playingState);
+
+    //We start playing!!!
+    machine->setInitialState(levelState);
+
+    //Final state
+    QFinalState *final = new QFinalState(machine);
+
+    //This transition is triggered when the player press space after completing a level
+    CustomSpaceTransition *spaceTransition = new CustomSpaceTransition(scene->views().at(0), this, QEvent::KeyPress, Qt::Key_Space);
+    spaceTransition->setTargetState(levelState);
+    winState->addTransition(spaceTransition);
+
+    //We lost we should reach the final state
+    lostState->addTransition(lostState, SIGNAL(finished()), final);
+
+    machine->start();
+}
+
+LevelState::LevelState(GraphicsScene *scene, PlayState *game, QState *parent) : QState(parent), scene(scene), game(game)
+{
+}
+void LevelState::onEntry(QEvent *)
+{
+    initializeLevel();
+}
+
+void LevelState::initializeLevel()
+{
+    //we re-init the boat
+    scene->boat->setPos(scene->width()/2, scene->sealLevel() - scene->boat->size().height());
+    scene->boat->setCurrentSpeed(0);
+    scene->boat->setCurrentDirection(Boat::None);
+    scene->boat->setBombsLaunched(0);
+    scene->boat->show();
+    scene->setFocusItem(scene->boat, Qt::OtherFocusReason);
+    scene->boat->run();
+
+    scene->progressItem->setScore(game->score);
+    scene->progressItem->setLevel(game->currentLevel + 1);
+
+    GraphicsScene::LevelDescription currentLevelDescription = scene->levelsData.value(game->currentLevel);
+
+    for (int i = 0; i < currentLevelDescription.submarines.size(); ++i ) {
+
+        QPair<int,int> subContent = currentLevelDescription.submarines.at(i);
+        GraphicsScene::SubmarineDescription submarineDesc = scene->submarinesData.at(subContent.first);
+
+        for (int j = 0; j < subContent.second; ++j ) {
+            SubMarine *sub = new SubMarine(submarineDesc.type, submarineDesc.name, submarineDesc.points);
+            scene->addItem(sub);
+            int random = (qrand() % 15 + 1);
+            qreal x = random == 13 || random == 5 ? 0 : scene->width() - sub->size().width();
+            qreal y = scene->height() -(qrand() % 150 + 1) - sub->size().height();
+            sub->setPos(x,y);
+            sub->setCurrentDirection(x == 0 ? SubMarine::Right : SubMarine::Left);
+            sub->setCurrentSpeed(qrand() % 3 + 1);
+        }
+    }
+}
+
+/** Pause State */
+PauseState::PauseState(GraphicsScene *scene, QState *parent) : QState(parent),scene(scene)
+{
+}
+void PauseState::onEntry(QEvent *)
+{
+    AnimationManager::self()->pauseAll();
+    scene->boat->setEnabled(false);
+}
+void PauseState::onExit(QEvent *)
+{
+    AnimationManager::self()->resumeAll();
+    scene->boat->setEnabled(true);
+    scene->boat->setFocus();
+}
+
+/** Lost State */
+LostState::LostState(GraphicsScene *scene, PlayState *game, QState *parent) : QState(parent), scene(scene), game(game)
+{
+}
+
+void LostState::onEntry(QEvent *)
+{
+    //The message to display
+    QString message = QString("You lose on level %1. Your score is %2.").arg(game->currentLevel+1).arg(game->score);
+
+    //We set the level back to 0
+    game->currentLevel = 0;
+
+    //We set the score back to 0
+    game->score = 0;
+
+    //We clear the scene
+    scene->clearScene();
+
+    //We inform the player
+    scene->textInformationItem->setMessage(message);
+    scene->textInformationItem->show();
+}
+
+void LostState::onExit(QEvent *)
+{
+    //we hide the information
+    scene->textInformationItem->hide();
+}
+
+/** Win State */
+WinState::WinState(GraphicsScene *scene, PlayState *game, QState *parent) : QState(parent), scene(scene), game(game)
+{
+}
+
+void WinState::onEntry(QEvent *)
+{
+    //We clear the scene
+    scene->clearScene();
+
+    QString message;
+    if (scene->levelsData.size() - 1 != game->currentLevel) {
+        message = QString("You win the level %1. Your score is %2.\nPress Space to continue.").arg(game->currentLevel+1).arg(game->score);
+        //We increment the level number
+        game->currentLevel++;
+    } else {
+        message = QString("You finish the game on level %1. Your score is %2.").arg(game->currentLevel+1).arg(game->score);
+        //We set the level back to 0
+        game->currentLevel = 0;
+        //We set the score back to 0
+        game->score = 0;
+    }
+
+    //We inform the player
+    scene->textInformationItem->setMessage(message);
+    scene->textInformationItem->show();
+}
+
+void WinState::onExit(QEvent *)
+{
+    //we hide the information
+    scene->textInformationItem->hide();
+}
+
+/** UpdateScore State */
+UpdateScoreState::UpdateScoreState(PlayState *g, QState *parent) : QState(parent), game(g)
+{
+}
+
+/** Win transition */
+UpdateScoreTransition::UpdateScoreTransition(GraphicsScene *scene, PlayState *game, QAbstractState *target)
+    : QSignalTransition(scene,SIGNAL(subMarineDestroyed(int))),
+    game(game), scene(scene)
+{
+    setTargetState(target);
+}
+
+bool UpdateScoreTransition::eventTest(QEvent *event)
+{
+    if (!QSignalTransition::eventTest(event))
+        return false;
+    QStateMachine::SignalEvent *se = static_cast<QStateMachine::SignalEvent*>(event);
+    game->score += se->arguments().at(0).toInt();
+    scene->progressItem->setScore(game->score);
+    return true;
+}
+
+/** Win transition */
+WinTransition::WinTransition(GraphicsScene *scene, PlayState *game, QAbstractState *target)
+    : QSignalTransition(scene,SIGNAL(allSubMarineDestroyed(int))),
+    game(game), scene(scene)
+{
+    setTargetState(target);
+}
+
+bool WinTransition::eventTest(QEvent *event)
+{
+    if (!QSignalTransition::eventTest(event))
+        return false;
+    QStateMachine::SignalEvent *se = static_cast<QStateMachine::SignalEvent*>(event);
+    game->score += se->arguments().at(0).toInt();
+    scene->progressItem->setScore(game->score);
+    return true;
+}
+
+/** Space transition */
+CustomSpaceTransition::CustomSpaceTransition(QWidget *widget, PlayState *game, QEvent::Type type, int key)
+    :   QKeyEventTransition(widget, type, key),
+        game(game)
+{
+}
+
+bool CustomSpaceTransition::eventTest(QEvent *event)
+{
+    if (!QKeyEventTransition::eventTest(event))
+        return false;
+    return (game->currentLevel != 0);
+}
Index: trunk/demos/sub-attaq/states.h
===================================================================
--- trunk/demos/sub-attaq/states.h	(revision 561)
+++ trunk/demos/sub-attaq/states.h	(revision 561)
@@ -0,0 +1,180 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef STATES_H
+#define STATES_H
+
+//Qt
+#include <QtCore/QState>
+#include <QtCore/QSignalTransition>
+#include <QtCore/QPropertyAnimation>
+#include <QtGui/QKeyEventTransition>
+#include <QtCore/QSet>
+
+class GraphicsScene;
+class Boat;
+class SubMarine;
+QT_BEGIN_NAMESPACE
+class QStateMachine;
+QT_END_NAMESPACE
+
+class PlayState : public QState
+{
+public:
+    PlayState(GraphicsScene *scene, QState *parent = 0);
+    ~PlayState();
+
+ protected:
+    void onEntry(QEvent *);
+
+private :
+    GraphicsScene *scene;
+    QStateMachine *machine;
+    int currentLevel;
+    int score;
+    QState *parallelChild;
+
+    friend class UpdateScoreState;
+    friend class UpdateScoreTransition;
+    friend class WinTransition;
+    friend class CustomSpaceTransition;
+    friend class WinState;
+    friend class LostState;
+    friend class LevelState;
+};
+
+class LevelState : public QState
+{
+public:
+    LevelState(GraphicsScene *scene, PlayState *game, QState *parent = 0);
+protected:
+    void onEntry(QEvent *);
+private :
+    void initializeLevel();
+    GraphicsScene *scene;
+    PlayState *game;
+};
+
+class PauseState : public QState
+{
+public:
+    PauseState(GraphicsScene *scene, QState *parent = 0);
+
+protected:
+    void onEntry(QEvent *);
+    void onExit(QEvent *);
+private :
+    GraphicsScene *scene;
+    Boat *boat;
+};
+
+class LostState : public QState
+{
+public:
+    LostState(GraphicsScene *scene, PlayState *game, QState *parent = 0);
+
+protected:
+    void onEntry(QEvent *);
+    void onExit(QEvent *);
+private :
+    GraphicsScene *scene;
+    PlayState *game;
+};
+
+class WinState : public QState
+{
+public:
+    WinState(GraphicsScene *scene, PlayState *game, QState *parent = 0);
+
+protected:
+    void onEntry(QEvent *);
+    void onExit(QEvent *);
+private :
+    GraphicsScene *scene;
+    PlayState *game;
+};
+
+class UpdateScoreState : public QState
+{
+public:
+    UpdateScoreState(PlayState *game, QState *parent);
+private:
+    QPropertyAnimation *scoreAnimation;
+    PlayState *game;
+};
+
+//These transtion is used to update the score
+class UpdateScoreTransition : public QSignalTransition
+{
+public:
+    UpdateScoreTransition(GraphicsScene *scene, PlayState *game, QAbstractState *target);
+protected:
+    virtual bool eventTest(QEvent *event);
+private:
+    PlayState * game;
+    GraphicsScene *scene;
+};
+
+//These transtion test if we have won the game
+class WinTransition : public QSignalTransition
+{
+public:
+    WinTransition(GraphicsScene *scene, PlayState *game, QAbstractState *target);
+protected:
+    virtual bool eventTest(QEvent *event);
+private:
+    PlayState * game;
+    GraphicsScene *scene;
+};
+
+//These transtion is true if one level has been completed and the player want to continue
+ class CustomSpaceTransition : public QKeyEventTransition
+{
+public:
+    CustomSpaceTransition(QWidget *widget, PlayState *game, QEvent::Type type, int key);
+protected:
+    virtual bool eventTest(QEvent *event);
+private:
+    PlayState *game;
+    int key;
+};
+
+#endif // STATES_H
Index: trunk/demos/sub-attaq/sub-attaq.pro
===================================================================
--- trunk/demos/sub-attaq/sub-attaq.pro	(revision 561)
+++ trunk/demos/sub-attaq/sub-attaq.pro	(revision 561)
@@ -0,0 +1,41 @@
+contains(QT_CONFIG, opengl):QT += opengl
+HEADERS += boat.h \
+    bomb.h \
+    mainwindow.h \
+    submarine.h \
+    torpedo.h \
+    pixmapitem.h \
+    graphicsscene.h \
+    animationmanager.h \
+    states.h \
+    boat_p.h \
+    submarine_p.h \
+    qanimationstate.h \
+    progressitem.h \
+    textinformationitem.h
+SOURCES += boat.cpp \
+    bomb.cpp \
+    main.cpp \
+    mainwindow.cpp \
+    submarine.cpp \
+    torpedo.cpp \
+    pixmapitem.cpp \
+    graphicsscene.cpp \
+    animationmanager.cpp \
+    states.cpp \
+    qanimationstate.cpp \
+    progressitem.cpp \
+    textinformationitem.cpp
+RESOURCES += subattaq.qrc
+
+# install
+target.path = $$[QT_INSTALL_DEMOS]/sub-attaq
+sources.files = $$SOURCES \
+    $$HEADERS \
+    $$RESOURCES \
+    $$FORMS \
+    sub-attaq.pro \
+    pics
+sources.path = $$[QT_INSTALL_DEMOS]/sub-attaq
+INSTALLS += target \
+    sources
Index: trunk/demos/sub-attaq/subattaq.qrc
===================================================================
--- trunk/demos/sub-attaq/subattaq.qrc	(revision 561)
+++ trunk/demos/sub-attaq/subattaq.qrc	(revision 561)
@@ -0,0 +1,39 @@
+<RCC>
+    <qresource prefix="/" >
+        <file alias="all" >pics/scalable/sub-attaq.svg</file>
+        <file alias="submarine" >pics/scalable/submarine.svg</file>
+        <file alias="boat" >pics/scalable/boat.svg</file>
+        <file alias="torpedo" >pics/scalable/torpedo.svg</file>
+        <file alias="logo-s" >pics/welcome/logo-s.png</file>
+        <file alias="logo-u" >pics/welcome/logo-u.png</file>
+        <file alias="logo-b" >pics/welcome/logo-b.png</file>
+        <file alias="logo-dash" >pics/welcome/logo-dash.png</file>
+        <file alias="logo-a" >pics/welcome/logo-a.png</file>
+        <file alias="logo-t" >pics/welcome/logo-t.png</file>
+        <file alias="logo-t2" >pics/welcome/logo-t2.png</file>
+        <file alias="logo-a2" >pics/welcome/logo-a2.png</file>
+        <file alias="logo-q" >pics/welcome/logo-q.png</file>
+        <file alias="logo-excl" >pics/welcome/logo-excl.png</file>
+        <file alias="big/background" >pics/big/background.png</file>
+        <file alias="big/boat" >pics/big/boat.png</file>
+        <file alias="big/bomb" >pics/big/bomb.png</file>
+        <file alias="big/submarine" >pics/big/submarine.png</file>
+        <file alias="big/surface" >pics/big/surface.png</file>
+        <file alias="big/torpedo" >pics/big/torpedo.png</file>
+        <file alias="small/background" >pics/small/background.png</file>
+        <file alias="small/boat" >pics/small/boat.png</file>
+        <file alias="small/bomb" >pics/small/bomb.png</file>
+        <file alias="small/submarine" >pics/small/submarine.png</file>
+        <file alias="small/surface" >pics/small/surface.png</file>
+        <file alias="small/torpedo" >pics/small/torpedo.png</file>
+        <file alias="big/explosion/boat/step1" >pics/big/explosion/boat/step1.png</file>
+        <file alias="big/explosion/boat/step2" >pics/big/explosion/boat/step2.png</file>
+        <file alias="big/explosion/boat/step3" >pics/big/explosion/boat/step3.png</file>
+        <file alias="big/explosion/boat/step4" >pics/big/explosion/boat/step4.png</file>
+        <file alias="big/explosion/submarine/step1" >pics/big/explosion/submarine/step1.png</file>
+        <file alias="big/explosion/submarine/step2" >pics/big/explosion/submarine/step2.png</file>
+        <file alias="big/explosion/submarine/step3" >pics/big/explosion/submarine/step3.png</file>
+        <file alias="big/explosion/submarine/step4" >pics/big/explosion/submarine/step4.png</file>
+        <file>data.xml</file>
+    </qresource>
+</RCC>
Index: trunk/demos/sub-attaq/submarine.cpp
===================================================================
--- trunk/demos/sub-attaq/submarine.cpp	(revision 561)
+++ trunk/demos/sub-attaq/submarine.cpp	(revision 561)
@@ -0,0 +1,182 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//Own
+#include "submarine.h"
+#include "submarine_p.h"
+#include "torpedo.h"
+#include "pixmapitem.h"
+#include "graphicsscene.h"
+#include "animationmanager.h"
+#include "qanimationstate.h"
+
+#include <QtCore/QPropertyAnimation>
+#include <QtCore/QStateMachine>
+#include <QtCore/QFinalState>
+#include <QtCore/QSequentialAnimationGroup>
+
+static QAbstractAnimation *setupDestroyAnimation(SubMarine *sub)
+{
+    QSequentialAnimationGroup *group = new QSequentialAnimationGroup(sub);
+    for (int i = 1; i <= 4; ++i) {
+        PixmapItem *step = new PixmapItem(QString::fromLatin1("explosion/submarine/step%1").arg(i), GraphicsScene::Big, sub);
+        step->setZValue(6);
+        step->setOpacity(0);
+        QPropertyAnimation *anim = new QPropertyAnimation(step, "opacity", group);
+        anim->setDuration(100);
+        anim->setEndValue(1);
+    }
+    AnimationManager::self()->registerAnimation(group);
+    return group;
+}
+
+
+SubMarine::SubMarine(int type, const QString &name, int points) : PixmapItem(QString("submarine"), GraphicsScene::Big),
+    subType(type), subName(name), subPoints(points), speed(0), direction(SubMarine::None)
+{
+    setZValue(5);
+    setTransformOriginPoint(boundingRect().center());
+
+    graphicsRotation = new QGraphicsRotation(this);
+    graphicsRotation->setAxis(Qt::YAxis);
+    graphicsRotation->setOrigin(QVector3D(size().width()/2, size().height()/2, 0));
+    QList<QGraphicsTransform *> r;
+    r.append(graphicsRotation);
+    setTransformations(r);
+
+    //We setup the state machine of the submarine
+    QStateMachine *machine = new QStateMachine(this);
+
+    //This state is when the boat is moving/rotating
+    QState *moving = new QState(machine);
+
+    //This state is when the boat is moving from left to right
+    MovementState *movement = new MovementState(this, moving);
+
+    //This state is when the boat is moving from left to right
+    ReturnState *rotation = new ReturnState(this, moving);
+
+    //This is the initial state of the moving root state
+    moving->setInitialState(movement);
+
+    movement->addTransition(this, SIGNAL(subMarineStateChanged()), moving);
+
+    //This is the initial state of the machine
+    machine->setInitialState(moving);
+
+    //End
+    QFinalState *final = new QFinalState(machine);
+
+    //If the moving animation is finished we move to the return state
+    movement->addTransition(movement, SIGNAL(animationFinished()), rotation);
+
+    //If the return animation is finished we move to the moving state
+    rotation->addTransition(rotation, SIGNAL(animationFinished()), movement);
+
+    //This state play the destroyed animation
+    QAnimationState *destroyedState = new QAnimationState(machine);
+    destroyedState->setAnimation(setupDestroyAnimation(this));
+
+    //Play a nice animation when the submarine is destroyed
+    moving->addTransition(this, SIGNAL(subMarineDestroyed()), destroyedState);
+
+    //Transition to final state when the destroyed animation is finished
+    destroyedState->addTransition(destroyedState, SIGNAL(animationFinished()), final);
+
+    //The machine has finished to be executed, then the submarine is dead
+    connect(machine,SIGNAL(finished()),this, SIGNAL(subMarineExecutionFinished()));
+
+    machine->start();
+}
+
+int SubMarine::points() const
+{
+    return subPoints;
+}
+
+void SubMarine::setCurrentDirection(SubMarine::Movement direction)
+{
+    if (this->direction == direction)
+        return;
+    if (direction == SubMarine::Right && this->direction == SubMarine::None) {
+          graphicsRotation->setAngle(180);
+    }
+    this->direction = direction;
+}
+
+enum SubMarine::Movement SubMarine::currentDirection() const
+{
+    return direction;
+}
+
+void SubMarine::setCurrentSpeed(int speed)
+{
+    if (speed < 0 || speed > 3) {
+        qWarning("SubMarine::setCurrentSpeed : The speed is invalid");
+    }
+    this->speed = speed;
+    emit subMarineStateChanged();
+}
+
+int SubMarine::currentSpeed() const
+{
+    return speed;
+}
+
+void SubMarine::launchTorpedo(int speed)
+{
+    Torpedo * torp = new Torpedo();
+    GraphicsScene *scene = static_cast<GraphicsScene *>(this->scene());
+    scene->addItem(torp);
+    torp->setPos(pos());
+    torp->setCurrentSpeed(speed);
+    torp->launch();
+}
+
+void SubMarine::destroy()
+{
+    emit subMarineDestroyed();
+}
+
+int SubMarine::type() const
+{
+    return Type;
+}
Index: trunk/demos/sub-attaq/submarine.h
===================================================================
--- trunk/demos/sub-attaq/submarine.h	(revision 561)
+++ trunk/demos/sub-attaq/submarine.h	(revision 561)
@@ -0,0 +1,93 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __SUBMARINE__H__
+#define __SUBMARINE__H__
+
+//Qt
+#include <QtGui/QGraphicsTransform>
+
+#include "pixmapitem.h"
+
+class Torpedo;
+
+class SubMarine : public PixmapItem
+{
+Q_OBJECT
+public:
+    enum Movement {
+       None = 0,
+       Left,
+       Right
+    };
+    enum { Type = UserType + 1 };
+    SubMarine(int type, const QString &name, int points);
+
+    int points() const;
+
+    void setCurrentDirection(Movement direction);
+    enum Movement currentDirection() const;
+
+    void setCurrentSpeed(int speed);
+    int currentSpeed() const;
+
+    void launchTorpedo(int speed);
+    void destroy();
+
+    virtual int type() const;
+
+    QGraphicsRotation *rotation() const { return graphicsRotation; }
+
+signals:
+    void subMarineDestroyed();
+    void subMarineExecutionFinished();
+    void subMarineStateChanged();
+
+private:
+    int subType;
+    QString subName;
+    int subPoints;
+    int speed;
+    Movement direction;
+    QGraphicsRotation *graphicsRotation;
+};
+
+#endif //__SUBMARINE__H__
Index: trunk/demos/sub-attaq/submarine_p.h
===================================================================
--- trunk/demos/sub-attaq/submarine_p.h	(revision 561)
+++ trunk/demos/sub-attaq/submarine_p.h	(revision 561)
@@ -0,0 +1,137 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef SUBMARINE_P_H
+#define SUBMARINE_P_H
+
+//
+//  W A R N I N G
+//  -------------
+//
+// This file is not part of the Qt API.  It exists purely as an
+// implementation detail.  This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+//Own
+#include "animationmanager.h"
+#include "submarine.h"
+#include "qanimationstate.h"
+
+//Qt
+#include <QtCore/QPropertyAnimation>
+#include <QtGui/QGraphicsScene>
+
+//This state is describing when the boat is moving right
+class MovementState : public QAnimationState
+{
+Q_OBJECT
+public:
+    MovementState(SubMarine *submarine, QState *parent = 0) : QAnimationState(parent)
+    {
+        movementAnimation = new QPropertyAnimation(submarine, "pos");
+        connect(movementAnimation,SIGNAL(valueChanged(const QVariant &)),this,SLOT(onAnimationMovementValueChanged(const QVariant &)));
+        setAnimation(movementAnimation);
+        AnimationManager::self()->registerAnimation(movementAnimation);
+        this->submarine = submarine;
+    }
+
+protected slots:
+    void onAnimationMovementValueChanged(const QVariant &)
+    {
+        if (qrand() % 200 + 1 == 3)
+            submarine->launchTorpedo(qrand() % 3 + 1);
+    }
+
+protected:
+    void onEntry(QEvent *e)
+    {
+        if (submarine->currentDirection() == SubMarine::Left) {
+            movementAnimation->setEndValue(QPointF(0,submarine->y()));
+            movementAnimation->setDuration(submarine->x()/submarine->currentSpeed()*12);
+        }
+        else /*if (submarine->currentDirection() == SubMarine::Right)*/ {
+            movementAnimation->setEndValue(QPointF(submarine->scene()->width()-submarine->size().width(),submarine->y()));
+            movementAnimation->setDuration((submarine->scene()->width()-submarine->size().width()-submarine->x())/submarine->currentSpeed()*12);
+        }
+        QAnimationState::onEntry(e);
+    }
+
+private:
+    SubMarine *submarine;
+    QPropertyAnimation *movementAnimation;
+};
+
+//This state is describing when the boat is moving right
+class ReturnState : public QAnimationState
+{
+public:
+    ReturnState(SubMarine *submarine, QState *parent = 0) : QAnimationState(parent)
+    {
+        returnAnimation = new QPropertyAnimation(submarine->rotation(), "angle");
+        returnAnimation->setDuration(500);
+        AnimationManager::self()->registerAnimation(returnAnimation);
+        setAnimation(returnAnimation);
+        this->submarine = submarine;
+    }
+
+protected:
+    void onEntry(QEvent *e)
+    {
+        returnAnimation->stop();
+        returnAnimation->setEndValue(submarine->currentDirection() == SubMarine::Right ? 360. : 180.);
+        QAnimationState::onEntry(e);
+    }
+
+    void onExit(QEvent *e)
+    {
+        submarine->currentDirection() == SubMarine::Right ? submarine->setCurrentDirection(SubMarine::Left) : submarine->setCurrentDirection(SubMarine::Right);
+        QAnimationState::onExit(e);
+    }
+
+private:
+    SubMarine *submarine;
+    QPropertyAnimation *returnAnimation;
+};
+
+#endif // SUBMARINE_P_H
Index: trunk/demos/sub-attaq/textinformationitem.cpp
===================================================================
--- trunk/demos/sub-attaq/textinformationitem.cpp	(revision 561)
+++ trunk/demos/sub-attaq/textinformationitem.cpp	(revision 561)
@@ -0,0 +1,54 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "textinformationitem.h"
+#include "pixmapitem.h"
+
+TextInformationItem::TextInformationItem (QGraphicsItem * parent)
+    : QGraphicsTextItem(parent)
+{
+    setFont(QFont("Comic Sans MS", 15));
+}
+#include <QDebug>
+void TextInformationItem::setMessage(const QString& text)
+{
+    setHtml(text);
+    setPos(parentItem()->boundingRect().center().x() - boundingRect().size().width()/2 , parentItem()->boundingRect().center().y());
+}
Index: trunk/demos/sub-attaq/textinformationitem.h
===================================================================
--- trunk/demos/sub-attaq/textinformationitem.h	(revision 561)
+++ trunk/demos/sub-attaq/textinformationitem.h	(revision 561)
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef TEXTINFORMATIONITEM_H
+#define TEXTINFORMATIONITEM_H
+
+//Qt
+#include <QtGui/QGraphicsTextItem>
+
+class TextInformationItem : public QGraphicsTextItem
+{
+public:
+    TextInformationItem(QGraphicsItem * parent = 0);
+    void setMessage(const QString& text);
+};
+
+#endif // TEXTINFORMATIONITEM_H
Index: trunk/demos/sub-attaq/torpedo.cpp
===================================================================
--- trunk/demos/sub-attaq/torpedo.cpp	(revision 561)
+++ trunk/demos/sub-attaq/torpedo.cpp	(revision 561)
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//Own
+#include "torpedo.h"
+#include "pixmapitem.h"
+#include "boat.h"
+#include "graphicsscene.h"
+#include "animationmanager.h"
+#include "qanimationstate.h"
+
+#include <QtCore/QPropertyAnimation>
+#include <QtCore/QStateMachine>
+#include <QtCore/QFinalState>
+
+Torpedo::Torpedo() : PixmapItem(QString::fromLatin1("torpedo"),GraphicsScene::Big),
+    currentSpeed(0)
+{
+    setZValue(2);
+}
+
+void Torpedo::launch()
+{
+    QPropertyAnimation *launchAnimation = new QPropertyAnimation(this, "pos");
+    AnimationManager::self()->registerAnimation(launchAnimation);
+    launchAnimation->setEndValue(QPointF(x(),qobject_cast<GraphicsScene *>(scene())->sealLevel() - 15));
+    launchAnimation->setEasingCurve(QEasingCurve::InQuad);
+    launchAnimation->setDuration(y()/currentSpeed*10);
+    connect(launchAnimation,SIGNAL(valueChanged(QVariant)),this,SLOT(onAnimationLaunchValueChanged(QVariant)));
+    connect(this,SIGNAL(torpedoExploded()), launchAnimation, SLOT(stop()));
+
+    //We setup the state machine of the torpedo
+    QStateMachine *machine = new QStateMachine(this);
+
+    //This state is when the launch animation is playing
+    QAnimationState *launched = new QAnimationState(machine);
+    launched->setAnimation(launchAnimation);
+
+    //End
+    QFinalState *final = new QFinalState(machine);
+
+    machine->setInitialState(launched);
+
+    //### Add a nice animation when the torpedo is destroyed
+    launched->addTransition(this, SIGNAL(torpedoExploded()),final);
+
+    //If the animation is finished, then we move to the final state
+    launched->addTransition(launched, SIGNAL(animationFinished()), final);
+
+    //The machine has finished to be executed, then the boat is dead
+    connect(machine,SIGNAL(finished()),this, SIGNAL(torpedoExecutionFinished()));
+
+    machine->start();
+}
+
+void Torpedo::setCurrentSpeed(int speed)
+{
+    if (speed < 0) {
+        qWarning("Torpedo::setCurrentSpeed : The speed is invalid");
+        return;
+    }
+    currentSpeed = speed;
+}
+
+void Torpedo::onAnimationLaunchValueChanged(const QVariant &)
+{
+    foreach (QGraphicsItem *item , collidingItems(Qt::IntersectsItemBoundingRect)) {
+        if (Boat *b = qgraphicsitem_cast<Boat*>(item))
+            b->destroy();
+    }
+}
+
+void Torpedo::destroy()
+{
+    emit torpedoExploded();
+}
Index: trunk/demos/sub-attaq/torpedo.h
===================================================================
--- trunk/demos/sub-attaq/torpedo.h	(revision 561)
+++ trunk/demos/sub-attaq/torpedo.h	(revision 561)
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef __TORPEDO__H__
+#define __TORPEDO__H__
+
+#include "pixmapitem.h"
+
+class Torpedo : public PixmapItem
+{
+Q_OBJECT
+public:
+    Torpedo();
+    void launch();
+    void setCurrentSpeed(int speed);
+    void destroy();
+
+signals:
+    void torpedoExploded();
+    void torpedoExecutionFinished();
+
+private slots:
+    void onAnimationLaunchValueChanged(const QVariant &);
+
+private:
+    int currentSpeed;
+};
+
+#endif //__TORPEDO__H__
Index: trunk/demos/symbianpkgrules.pri
===================================================================
--- trunk/demos/symbianpkgrules.pri	(revision 561)
+++ trunk/demos/symbianpkgrules.pri	(revision 561)
@@ -0,0 +1,15 @@
+!symbian: error(Only include this file for Symbian platforms)
+
+RSS_RULES ="group_name=\"QtDemos\";"
+
+vendorinfo = \
+    "; Localised Vendor name" \
+    "%{\"Nokia, Qt\"}" \
+    " " \
+    "; Unique Vendor name" \
+    ":\"Nokia, Qt\"" \
+    " "
+
+default_deployment.pkg_prerules += vendorinfo
+
+isEmpty(ICON):ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
Index: trunk/demos/textedit/example.html
===================================================================
--- trunk/demos/textedit/example.html	(revision 521)
+++ trunk/demos/textedit/example.html	(revision 561)
@@ -27,5 +27,5 @@
 <p style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-size:16pt; font-weight:600;">Images</span></p>
 <p style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:16pt; font-weight:600;"><span style=" font-size:11pt; font-weight:400;">Inline images are treated like ordinary ranges of characters in the text editor, so they flow with the surrounding text. Images can also be selected in the same way as text, making it easy to cut, copy, and paste them. </span></p>
-<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><img src=":/images/logo32.png" /><span style=" font-style:italic;"> Try to select this image by clicking and dragging over it with the mouse, or use the text cursor to select it by holding down Shift and using the arrow keys. You can then cut or copy it, and pasting it into different parts of this document.</span></p>
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><img src=":/images/logo32.png" /><span style=" font-style:italic;"> Try to select this image by clicking and dragging over it with the mouse, or use the text cursor to select it by holding down Shift and using the arrow keys. You can then cut or copy it, and paste it into different parts of this document.</span></p>
 <p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-size:16pt; font-weight:600;">Tables</span></p>
 <p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:16pt; font-weight:600;"><span style=" font-size:11pt; font-weight:400;">QTextEdit can arrange and format tables, supporting features such as row and column spans, text formatting within cells, and size constraints for columns. </span></p>
Index: trunk/demos/textedit/main.cpp
===================================================================
--- trunk/demos/textedit/main.cpp	(revision 521)
+++ trunk/demos/textedit/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/textedit/textedit.cpp
===================================================================
--- trunk/demos/textedit/textedit.cpp	(revision 521)
+++ trunk/demos/textedit/textedit.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
@@ -76,4 +76,5 @@
     : QMainWindow(parent)
 {
+    setToolButtonStyle(Qt::ToolButtonFollowStyle);
     setupFileActions();
     setupEditActions();
@@ -88,6 +89,6 @@
 
     textEdit = new QTextEdit(this);
-    connect(textEdit, SIGNAL(currentCharFormatChanged(const QTextCharFormat &)),
-            this, SLOT(currentCharFormatChanged(const QTextCharFormat &)));
+    connect(textEdit, SIGNAL(currentCharFormatChanged(QTextCharFormat)),
+            this, SLOT(currentCharFormatChanged(QTextCharFormat)));
     connect(textEdit, SIGNAL(cursorPositionChanged()),
             this, SLOT(cursorPositionChanged()));
@@ -128,5 +129,7 @@
     connect(textEdit, SIGNAL(copyAvailable(bool)), actionCopy, SLOT(setEnabled(bool)));
 
+#ifndef QT_NO_CLIPBOARD
     connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(clipboardDataChanged()));
+#endif
 
     QString initialFile = ":/example.html";
@@ -158,5 +161,7 @@
     QAction *a;
 
-    a = new QAction(QIcon(rsrcPath + "/filenew.png"), tr("&New"), this);
+    QIcon newIcon = QIcon::fromTheme("document-new", QIcon(rsrcPath + "/filenew.png"));
+    a = new QAction( newIcon, tr("&New"), this);
+    a->setPriority(QAction::LowPriority);
     a->setShortcut(QKeySequence::New);
     connect(a, SIGNAL(triggered()), this, SLOT(fileNew()));
@@ -164,5 +169,6 @@
     menu->addAction(a);
 
-    a = new QAction(QIcon(rsrcPath + "/fileopen.png"), tr("&Open..."), this);
+    a = new QAction(QIcon::fromTheme("document-open", QIcon(rsrcPath + "/fileopen.png")),
+                    tr("&Open..."), this);
     a->setShortcut(QKeySequence::Open);
     connect(a, SIGNAL(triggered()), this, SLOT(fileOpen()));
@@ -172,5 +178,6 @@
     menu->addSeparator();
 
-    actionSave = a = new QAction(QIcon(rsrcPath + "/filesave.png"), tr("&Save"), this);
+    actionSave = a = new QAction(QIcon::fromTheme("document-save", QIcon(rsrcPath + "/filesave.png")),
+                                 tr("&Save"), this);
     a->setShortcut(QKeySequence::Save);
     connect(a, SIGNAL(triggered()), this, SLOT(fileSave()));
@@ -180,4 +187,5 @@
 
     a = new QAction(tr("Save &As..."), this);
+    a->setPriority(QAction::LowPriority);
     connect(a, SIGNAL(triggered()), this, SLOT(fileSaveAs()));
     menu->addAction(a);
@@ -185,5 +193,7 @@
 
 #ifndef QT_NO_PRINTER
-    a = new QAction(QIcon(rsrcPath + "/fileprint.png"), tr("&Print..."), this);
+    a = new QAction(QIcon::fromTheme("document-print", QIcon(rsrcPath + "/fileprint.png")),
+                    tr("&Print..."), this);
+    a->setPriority(QAction::LowPriority);    
     a->setShortcut(QKeySequence::Print);
     connect(a, SIGNAL(triggered()), this, SLOT(filePrint()));
@@ -191,9 +201,12 @@
     menu->addAction(a);
 
-    a = new QAction(QIcon(rsrcPath + "/fileprint.png"), tr("Print Preview..."), this);
+    a = new QAction(QIcon::fromTheme("fileprint", QIcon(rsrcPath + "/fileprint.png")),
+                    tr("Print Preview..."), this);
     connect(a, SIGNAL(triggered()), this, SLOT(filePrintPreview()));
     menu->addAction(a);
 
-    a = new QAction(QIcon(rsrcPath + "/exportpdf.png"), tr("&Export PDF..."), this);
+    a = new QAction(QIcon::fromTheme("exportpdf", QIcon(rsrcPath + "/exportpdf.png")),
+    tr("&Export PDF..."), this);
+    a->setPriority(QAction::LowPriority);
     a->setShortcut(Qt::CTRL + Qt::Key_D);
     connect(a, SIGNAL(triggered()), this, SLOT(filePrintPdf()));
@@ -215,31 +228,41 @@
     tb->setWindowTitle(tr("Edit Actions"));
     addToolBar(tb);
-
     QMenu *menu = new QMenu(tr("&Edit"), this);
     menuBar()->addMenu(menu);
 
     QAction *a;
-    a = actionUndo = new QAction(QIcon(rsrcPath + "/editundo.png"), tr("&Undo"), this);
+    a = actionUndo = new QAction(QIcon::fromTheme("edit-undo", QIcon(rsrcPath + "/editundo.png")),
+                                              tr("&Undo"), this);
     a->setShortcut(QKeySequence::Undo);
     tb->addAction(a);
     menu->addAction(a);
-    a = actionRedo = new QAction(QIcon(rsrcPath + "/editredo.png"), tr("&Redo"), this);
+    a = actionRedo = new QAction(QIcon::fromTheme("edit-redo", QIcon(rsrcPath + "/editredo.png")),
+                                              tr("&Redo"), this);
+    a->setPriority(QAction::LowPriority);
     a->setShortcut(QKeySequence::Redo);
     tb->addAction(a);
     menu->addAction(a);
     menu->addSeparator();
-    a = actionCut = new QAction(QIcon(rsrcPath + "/editcut.png"), tr("Cu&t"), this);
+    a = actionCut = new QAction(QIcon::fromTheme("edit-cut", QIcon(rsrcPath + "/editcut.png")),
+                                             tr("Cu&t"), this);
+    a->setPriority(QAction::LowPriority);
     a->setShortcut(QKeySequence::Cut);
     tb->addAction(a);
     menu->addAction(a);
-    a = actionCopy = new QAction(QIcon(rsrcPath + "/editcopy.png"), tr("&Copy"), this);
+    a = actionCopy = new QAction(QIcon::fromTheme("edit-copy", QIcon(rsrcPath + "/editcopy.png")),
+                                 tr("&Copy"), this);
+    a->setPriority(QAction::LowPriority);
     a->setShortcut(QKeySequence::Copy);
     tb->addAction(a);
     menu->addAction(a);
-    a = actionPaste = new QAction(QIcon(rsrcPath + "/editpaste.png"), tr("&Paste"), this);
+    a = actionPaste = new QAction(QIcon::fromTheme("edit-paste", QIcon(rsrcPath + "/editpaste.png")),
+                                  tr("&Paste"), this);
+    a->setPriority(QAction::LowPriority);
     a->setShortcut(QKeySequence::Paste);
     tb->addAction(a);
     menu->addAction(a);
+#ifndef QT_NO_CLIPBOARD
     actionPaste->setEnabled(!QApplication::clipboard()->text().isEmpty());
+#endif
 }
 
@@ -253,7 +276,9 @@
     menuBar()->addMenu(menu);
 
-    actionTextBold = new QAction(QIcon(rsrcPath + "/textbold.png"), tr("&Bold"), this);
+    actionTextBold = new QAction(QIcon::fromTheme("format-text-bold", QIcon(rsrcPath + "/textbold.png")),
+                                 tr("&Bold"), this);
     actionTextBold->setShortcut(Qt::CTRL + Qt::Key_B);
-    QFont bold;
+    actionTextBold->setPriority(QAction::LowPriority);
+	QFont bold;
     bold.setBold(true);
     actionTextBold->setFont(bold);
@@ -263,5 +288,7 @@
     actionTextBold->setCheckable(true);
 
-    actionTextItalic = new QAction(QIcon(rsrcPath + "/textitalic.png"), tr("&Italic"), this);
+    actionTextItalic = new QAction(QIcon::fromTheme("format-text-italic", QIcon(rsrcPath + "/textitalic.png")),
+                                   tr("&Italic"), this);
+    actionTextItalic->setPriority(QAction::LowPriority);
     actionTextItalic->setShortcut(Qt::CTRL + Qt::Key_I);
     QFont italic;
@@ -273,6 +300,8 @@
     actionTextItalic->setCheckable(true);
 
-    actionTextUnderline = new QAction(QIcon(rsrcPath + "/textunder.png"), tr("&Underline"), this);
+    actionTextUnderline = new QAction(QIcon::fromTheme("format-text-underline", QIcon(rsrcPath + "/textunder.png")),
+                                      tr("&Underline"), this);
     actionTextUnderline->setShortcut(Qt::CTRL + Qt::Key_U);
+    actionTextUnderline->setPriority(QAction::LowPriority);
     QFont underline;
     underline.setUnderline(true);
@@ -286,26 +315,31 @@
 
     QActionGroup *grp = new QActionGroup(this);
-    connect(grp, SIGNAL(triggered(QAction *)), this, SLOT(textAlign(QAction *)));
+    connect(grp, SIGNAL(triggered(QAction*)), this, SLOT(textAlign(QAction*)));
 
     // Make sure the alignLeft  is always left of the alignRight
     if (QApplication::isLeftToRight()) {
-        actionAlignLeft = new QAction(QIcon(rsrcPath + "/textleft.png"), tr("&Left"), grp);
-        actionAlignCenter = new QAction(QIcon(rsrcPath + "/textcenter.png"), tr("C&enter"), grp);
-        actionAlignRight = new QAction(QIcon(rsrcPath + "/textright.png"), tr("&Right"), grp);
+        actionAlignLeft = new QAction(QIcon::fromTheme("format-justify-left", QIcon(rsrcPath + "/textleft.png")),
+                                      tr("&Left"), grp);
+        actionAlignCenter = new QAction(QIcon::fromTheme("format-justify-center", QIcon(rsrcPath + "/textcenter.png")), tr("C&enter"), grp);
+        actionAlignRight = new QAction(QIcon::fromTheme("format-justify-right", QIcon(rsrcPath + "/textright.png")), tr("&Right"), grp);
     } else {
-        actionAlignRight = new QAction(QIcon(rsrcPath + "/textright.png"), tr("&Right"), grp);
-        actionAlignCenter = new QAction(QIcon(rsrcPath + "/textcenter.png"), tr("C&enter"), grp);
-        actionAlignLeft = new QAction(QIcon(rsrcPath + "/textleft.png"), tr("&Left"), grp);
-    }
-    actionAlignJustify = new QAction(QIcon(rsrcPath + "/textjustify.png"), tr("&Justify"), grp);
+        actionAlignRight = new QAction(QIcon::fromTheme("format-justify-right", QIcon(rsrcPath + "/textright.png")), tr("&Right"), grp);
+        actionAlignCenter = new QAction(QIcon::fromTheme("format-justify-center", QIcon(rsrcPath + "/textcenter.png")), tr("C&enter"), grp);
+        actionAlignLeft = new QAction(QIcon::fromTheme("format-justify-left", QIcon(rsrcPath + "/textleft.png")), tr("&Left"), grp);
+    }
+    actionAlignJustify = new QAction(QIcon::fromTheme("format-justify-fill", QIcon(rsrcPath + "/textjustify.png")), tr("&Justify"), grp);
 
     actionAlignLeft->setShortcut(Qt::CTRL + Qt::Key_L);
     actionAlignLeft->setCheckable(true);
+    actionAlignLeft->setPriority(QAction::LowPriority);
     actionAlignCenter->setShortcut(Qt::CTRL + Qt::Key_E);
     actionAlignCenter->setCheckable(true);
+    actionAlignCenter->setPriority(QAction::LowPriority);
     actionAlignRight->setShortcut(Qt::CTRL + Qt::Key_R);
     actionAlignRight->setCheckable(true);
+    actionAlignRight->setPriority(QAction::LowPriority);
     actionAlignJustify->setShortcut(Qt::CTRL + Qt::Key_J);
     actionAlignJustify->setCheckable(true);
+    actionAlignJustify->setPriority(QAction::LowPriority);
 
     tb->addActions(grp->actions());
@@ -337,4 +371,6 @@
     comboStyle->addItem("Ordered List (Alpha lower)");
     comboStyle->addItem("Ordered List (Alpha upper)");
+    comboStyle->addItem("Ordered List (Roman lower)");
+    comboStyle->addItem("Ordered List (Roman upper)");
     connect(comboStyle, SIGNAL(activated(int)),
             this, SLOT(textStyle(int)));
@@ -342,6 +378,6 @@
     comboFont = new QFontComboBox(tb);
     tb->addWidget(comboFont);
-    connect(comboFont, SIGNAL(activated(const QString &)),
-            this, SLOT(textFamily(const QString &)));
+    connect(comboFont, SIGNAL(activated(QString)),
+            this, SLOT(textFamily(QString)));
 
     comboSize = new QComboBox(tb);
@@ -354,6 +390,6 @@
         comboSize->addItem(QString::number(size));
 
-    connect(comboSize, SIGNAL(activated(const QString &)),
-            this, SLOT(textSize(const QString &)));
+    connect(comboSize, SIGNAL(activated(QString)),
+            this, SLOT(textSize(QString)));
     comboSize->setCurrentIndex(comboSize->findText(QString::number(QApplication::font()
                                                                    .pointSize())));
@@ -476,5 +512,5 @@
     QPrinter printer(QPrinter::HighResolution);
     QPrintPreviewDialog preview(&printer, this);
-    connect(&preview, SIGNAL(paintRequested(QPrinter *)), SLOT(printPreview(QPrinter *)));
+    connect(&preview, SIGNAL(paintRequested(QPrinter*)), SLOT(printPreview(QPrinter*)));
     preview.exec();
 #endif
@@ -574,4 +610,10 @@
                 style = QTextListFormat::ListUpperAlpha;
                 break;
+            case 7:
+                style = QTextListFormat::ListLowerRoman;
+                break;
+            case 8:
+                style = QTextListFormat::ListUpperRoman;
+                break;
         }
 
@@ -639,5 +681,7 @@
 void TextEdit::clipboardDataChanged()
 {
+#ifndef QT_NO_CLIPBOARD
     actionPaste->setEnabled(!QApplication::clipboard()->text().isEmpty());
+#endif
 }
 
Index: trunk/demos/textedit/textedit.h
===================================================================
--- trunk/demos/textedit/textedit.h	(revision 521)
+++ trunk/demos/textedit/textedit.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/textedit/textedit.pro
===================================================================
--- trunk/demos/textedit/textedit.pro	(revision 521)
+++ trunk/demos/textedit/textedit.pro	(revision 561)
@@ -20,2 +20,3 @@
 INSTALLS += target sources
 
+symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
Index: trunk/demos/textedit/textedit.qdoc
===================================================================
--- trunk/demos/textedit/textedit.qdoc	(revision 561)
+++ trunk/demos/textedit/textedit.qdoc	(revision 561)
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!   \page textedit-example.html
+
+  \ingroup examples
+  \title Text Edit Example
+
+  This example displays a text editor with the user interface written
+  in pure C++. 
+  
+  A similar example which uses \link designer-manual.book Qt
+  Designer\endlink to produce the user interface is in the \link
+  designer-manual.book Qt Designer manual\endlink.
+
+
+  See \c{$QTDIR/examples/textedit} for the source code.
+
+*/
+
+
Index: trunk/demos/undo/commands.cpp
===================================================================
--- trunk/demos/undo/commands.cpp	(revision 521)
+++ trunk/demos/undo/commands.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/undo/commands.h
===================================================================
--- trunk/demos/undo/commands.h	(revision 521)
+++ trunk/demos/undo/commands.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/undo/document.cpp
===================================================================
--- trunk/demos/undo/document.cpp	(revision 521)
+++ trunk/demos/undo/document.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/undo/document.h
===================================================================
--- trunk/demos/undo/document.h	(revision 521)
+++ trunk/demos/undo/document.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/undo/main.cpp
===================================================================
--- trunk/demos/undo/main.cpp	(revision 521)
+++ trunk/demos/undo/main.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/undo/mainwindow.cpp
===================================================================
--- trunk/demos/undo/mainwindow.cpp	(revision 521)
+++ trunk/demos/undo/mainwindow.cpp	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/undo/mainwindow.h
===================================================================
--- trunk/demos/undo/mainwindow.h	(revision 521)
+++ trunk/demos/undo/mainwindow.h	(revision 561)
@@ -2,5 +2,6 @@
 **
 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Qt Software Information (qt-info@nokia.com)
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
 **
 ** This file is part of the demonstration applications of the Qt Toolkit.
@@ -21,8 +22,7 @@
 ** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
+** 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.
 **
 ** GNU General Public License Usage
@@ -34,6 +34,6 @@
 ** met: http://www.gnu.org/copyleft/gpl.html.
 **
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at qt-sales@nokia.com.
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
 ** $QT_END_LICENSE$
 **
Index: trunk/demos/undo/undo.pro
===================================================================
--- trunk/demos/undo/undo.pro	(revision 521)
+++ trunk/demos/undo/undo.pro	(revision 561)
@@ -16,2 +16,3 @@
 INSTALLS += target sources
 
+symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
