summaryrefslogtreecommitdiffstats
path: root/demos
diff options
context:
space:
mode:
authorAlan Alpert <alan.alpert@nokia.com>2010-05-24 19:02:51 (GMT)
committerAlan Alpert <alan.alpert@nokia.com>2010-05-24 19:26:34 (GMT)
commit3af5a362a034fe7f9085a202adfdf13252de1715 (patch)
treede73840eb45305dbc20f7185549eb163d1e900b9 /demos
parent3003f1d885e732e7cc19f73f9733aa8102b70717 (diff)
downloadQt-3af5a362a034fe7f9085a202adfdf13252de1715.zip
Qt-3af5a362a034fe7f9085a202adfdf13252de1715.tar.gz
Qt-3af5a362a034fe7f9085a202adfdf13252de1715.tar.bz2
Integrate some QML examples and demos into qtdemo
Includes minor changes and additions to the existing doc and examples, so that they follow Qt conventions better. Note that while blurring the background was part of the plan for the embedded QML viewer I could not get it to perform well enough. In the future, when blur is fast enough (or someone else can get it to perform better than I) -use-blur should become the default, and -no-blur the option. Task-number: QTBUG-10582
Diffstat (limited to 'demos')
-rw-r--r--demos/qtdemo/MagicAnim.qml19
-rw-r--r--demos/qtdemo/colors.cpp4
-rw-r--r--demos/qtdemo/colors.h1
-rw-r--r--demos/qtdemo/mainwindow.cpp23
-rw-r--r--demos/qtdemo/mainwindow.h3
-rw-r--r--demos/qtdemo/menumanager.cpp110
-rw-r--r--demos/qtdemo/menumanager.h9
-rw-r--r--demos/qtdemo/qmlShell.qml117
-rw-r--r--demos/qtdemo/qtdemo.pro5
-rw-r--r--demos/qtdemo/qtdemo.qrc18
-rw-r--r--demos/qtdemo/xml/examples.xml36
11 files changed, 316 insertions, 29 deletions
diff --git a/demos/qtdemo/MagicAnim.qml b/demos/qtdemo/MagicAnim.qml
new file mode 100644
index 0000000..f2ee806
--- /dev/null
+++ b/demos/qtdemo/MagicAnim.qml
@@ -0,0 +1,19 @@
+import Qt 4.7
+
+//Emulates the in animation of the menu elements
+SequentialAnimation{
+ id: main;
+ property Item target
+ property int from: 0
+ property int to: 100
+ property int duration: 1000
+ property string properties: "y"
+ PauseAnimation { duration: main.duration*0.20 }
+ NumberAnimation { target: main.target; properties: main.properties; from: main.from; to: main.to + 40; duration: main.duration*0.30 }
+ NumberAnimation { target: main.target; properties: main.properties; from: main.to + 40; to: main.to; duration: main.duration*0.10 }
+ NumberAnimation { target: main.target; properties: main.properties; from: main.to; to: main.to + 20; duration: main.duration*0.10 }
+ NumberAnimation { target: main.target; properties: main.properties; from: main.to + 20; to: main.to; duration: main.duration*0.10 }
+ NumberAnimation { target: main.target; properties: main.properties; from: main.to; to: main.to + 8; duration: main.duration*0.10 }
+ NumberAnimation { target: main.target; properties: main.properties; from: main.to + 8; to: main.to; duration: main.duration*0.10 }
+}
+
diff --git a/demos/qtdemo/colors.cpp b/demos/qtdemo/colors.cpp
index 802d77d..07cf162 100644
--- a/demos/qtdemo/colors.cpp
+++ b/demos/qtdemo/colors.cpp
@@ -81,6 +81,7 @@ bool Colors::noRescale = false;
bool Colors::noAnimations = false;
bool Colors::noBlending = false;
bool Colors::noScreenSync = false;
+bool Colors::noBlur = true;
bool Colors::fullscreen = false;
bool Colors::usePixmaps = false;
bool Colors::useLoop = false;
@@ -232,6 +233,8 @@ void Colors::parseArgs(int argc, char *argv[])
Colors::showFps = true;
else if (s == "-no-blending")
Colors::noBlending = true;
+ else if (s == "-use-blur")
+ Colors::noBlur = false;
else if (s == "-no-sync")
Colors::noScreenSync = true;
else if (s.startsWith("-menu"))
@@ -295,6 +298,7 @@ void Colors::setLowSettings()
Colors::usePixmaps = true;
Colors::noAnimations = true;
Colors::noBlending = true;
+ Colors::noBlur = true;
}
void Colors::detectSystemResources()
diff --git a/demos/qtdemo/colors.h b/demos/qtdemo/colors.h
index 1e0b795..2d58058 100644
--- a/demos/qtdemo/colors.h
+++ b/demos/qtdemo/colors.h
@@ -91,6 +91,7 @@ public:
static bool noAnimations;
static bool noBlending;
static bool noScreenSync;
+ static bool noBlur;
static bool useLoop;
static bool noWindowMask;
static bool usePixmaps;
diff --git a/demos/qtdemo/mainwindow.cpp b/demos/qtdemo/mainwindow.cpp
index a679c4f..45ec9a6 100644
--- a/demos/qtdemo/mainwindow.cpp
+++ b/demos/qtdemo/mainwindow.cpp
@@ -270,8 +270,10 @@ void MainWindow::setupSceneItems()
this->fpsLabel->setPos(Colors::stageStartX, 600 - QFontMetricsF(Colors::buttonFont()).height() - 5);
}
- 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->mainSceneRoot = new QGraphicsWidget();
+ this->scene->addItem(mainSceneRoot);
+ this->companyLogo = new ImageItem(QImage(":/images/trolltech-logo.png"), 1000, 1000, this->scene, mainSceneRoot, true, 0.5f);
+ this->qtLogo = new ImageItem(QImage(":/images/qtlogo_small.png"), 1000, 1000, this->scene, mainSceneRoot, true, 0.5f);
this->companyLogo->setZValue(100);
this->qtLogo->setZValue(100);
this->pausedLabel = new DemoTextItem(QString("PAUSED"), Colors::buttonFont(), Qt::white, -1, this->scene, 0);
@@ -308,6 +310,20 @@ void MainWindow::checkAdapt()
qDebug() << "- benchmark adaption: removed ticker (fps < 30)";
}
+ //Note: Because we don't adapt later in the program, if blur makes FPS plummet then we won't catch it
+ if (!Colors::noBlur && MenuManager::instance()->mainSceneBlur && this->mainSceneRoot){
+ Colors::noBlur = true;
+ this->mainSceneRoot->setGraphicsEffect(0);
+ MenuManager::instance()->mainSceneBlur = 0;
+ if(MenuManager::instance()->qmlRoot){
+ MenuManager::instance()->qmlRoot->setGraphicsEffect(0);
+ MenuManager::instance()->declarativeEngine->rootContext()->setContextProperty("realBlur", 0);
+ }
+ MenuManager::instance()->qmlShadow = 0;
+ if (Colors::verbose)
+ qDebug() << "- benchmark adaption: removed blur (fps < 30)";
+ }
+
if (this->fpsMedian < 20){
Colors::noAnimations = true;
if (Colors::verbose)
@@ -376,7 +392,7 @@ void MainWindow::keyPressEvent(QKeyEvent *event)
this->loop = false;
QApplication::quit();
}
- else if (event->key() == Qt::Key_1){
+ else if (event->key() == Qt::Key_F1){
QString s("");
s += "Rendering system: ";
if (Colors::openGlRendering)
@@ -415,6 +431,7 @@ void MainWindow::keyPressEvent(QKeyEvent *event)
s += Colors::noScreenSync ? "no" : "yes";
QMessageBox::information(0, QString("Current configuration"), s);
}
+ QGraphicsView::keyPressEvent(event);
}
void MainWindow::focusInEvent(QFocusEvent *)
diff --git a/demos/qtdemo/mainwindow.h b/demos/qtdemo/mainwindow.h
index edcc146..e613268 100644
--- a/demos/qtdemo/mainwindow.h
+++ b/demos/qtdemo/mainwindow.h
@@ -43,6 +43,7 @@
#define MAIN_WINDOW_H
#include <QtGui>
+#include <QtDeclarative>
#include <QPixmap>
class DemoTextItem;
@@ -62,6 +63,8 @@ public:
void start();
QGraphicsScene *scene;
+ QGraphicsWidget* mainSceneRoot;
+
bool loop;
// FPS stuff:
diff --git a/demos/qtdemo/menumanager.cpp b/demos/qtdemo/menumanager.cpp
index 40af30f..9eb5664 100644
--- a/demos/qtdemo/menumanager.cpp
+++ b/demos/qtdemo/menumanager.cpp
@@ -59,6 +59,8 @@ MenuManager::MenuManager()
this->tickerInAnim = 0;
this->upButton = 0;
this->downButton = 0;
+ this->mainSceneBlur = 0;
+ this->qmlShadow = 0;
this->helpEngine = 0;
this->score = new Score();
this->currentMenu = QLatin1String("[no menu visible]");
@@ -152,6 +154,9 @@ void MenuManager::itemSelected(int userCode, const QString &menuName)
case LAUNCH:
this->launchExample(this->currentInfo);
break;
+ case LAUNCH_QML:
+ this->launchQmlExample(this->currentInfo);
+ break;
case DOCUMENTATION:
this->showDocInAssistant(this->currentInfo);
break;
@@ -169,6 +174,8 @@ void MenuManager::itemSelected(int userCode, const QString &menuName)
this->score->queueMovie(this->currentInfo + " -out");
this->score->queueMovie(this->currentInfo + " -buttons -out", Score::NEW_ANIMATION_ONLY);
this->score->queueMovie("back -out", Score::ONLY_IF_VISIBLE);
+ if(qmlRoot)
+ qmlRoot->setProperty("show", QVariant(false));
// book-keeping:
this->currentMenuCode = ROOT;
this->currentMenu = menuName + " -menu1";
@@ -191,6 +198,8 @@ void MenuManager::itemSelected(int userCode, const QString &menuName)
this->score->queueMovie(this->currentMenu + " -out", Score::FROM_START, Score::LOCK_ITEMS);
this->score->queueMovie(this->currentMenuButtons + " -out", Score::FROM_START, Score::LOCK_ITEMS);
this->score->queueMovie(this->currentInfo + " -out");
+ if(qmlRoot)
+ qmlRoot->setProperty("show", QVariant(false));
// book-keeping:
this->currentMenuCode = MENU1;
this->currentCategory = menuName;
@@ -208,6 +217,8 @@ void MenuManager::itemSelected(int userCode, const QString &menuName)
// out:
this->score->queueMovie(this->currentInfo + " -out", Score::NEW_ANIMATION_ONLY);
this->score->queueMovie(this->currentInfo + " -buttons -out", Score::NEW_ANIMATION_ONLY);
+ if(qmlRoot)
+ qmlRoot->setProperty("show", QVariant(false));
// book-keeping:
this->currentMenuCode = MENU2;
this->currentInfo = menuName;
@@ -242,6 +253,8 @@ void MenuManager::itemSelected(int userCode, const QString &menuName)
// out:
this->score->queueMovie(this->currentInfo + " -out", Score::NEW_ANIMATION_ONLY);
this->score->queueMovie(this->currentInfo + " -buttons -out", Score::NEW_ANIMATION_ONLY);
+ if(qmlRoot)
+ qmlRoot->setProperty("show", QVariant(false));
// book-keeping:
this->currentMenuCode = MENU1;
this->currentMenuButtons = this->currentCategory + " -buttons";
@@ -343,6 +356,35 @@ void MenuManager::launchExample(const QString &name)
#endif
}
+void MenuManager::launchQmlExample(const QString &name)
+{
+ if(!qmlRoot){
+ exampleError(QProcess::UnknownError);
+ return;
+ }
+ //resolveQmlFilename - refactor to separate fn?
+ QString dirName = this->info[name]["dirname"];
+ QString category = this->info[name]["category"];
+ QString fileName = this->info[name]["filename"];
+ QDir dir;
+ if (category == "demos")
+ dir = QDir(QLibraryInfo::location(QLibraryInfo::DemosPath));
+ else
+ dir = QDir(QLibraryInfo::location(QLibraryInfo::ExamplesPath));
+ QFile file(dir.path() + "/" + dirName + "/" + fileName + "/" + fileName.split('/').last() + ".qml");
+ if(!file.exists()){
+ //try main.qml as well
+ file.setFileName(dir.path() + "/" + dirName + "/" + fileName + "/" + "main.qml");
+ if(!file.exists()){
+ exampleError(QProcess::UnknownError);
+ return;
+ }
+ }
+
+ qmlRoot->setProperty("show", QVariant(true));
+ qmlRoot->setProperty("source", file.fileName());
+}
+
void MenuManager::exampleFinished()
{
}
@@ -359,6 +401,15 @@ void MenuManager::init(MainWindow *window)
{
this->window = window;
+ //Create blur for later use
+ // Note that blur is DISABLED by default because it's too slow, even on Desktop machines
+ if(!Colors::noBlur){
+ this->mainSceneBlur = new QGraphicsBlurEffect(this);
+ this->mainSceneBlur->setEnabled(false);
+ this->mainSceneBlur->setBlurRadius(0);
+ this->window->mainSceneRoot->setGraphicsEffect(mainSceneBlur);
+ }
+
// Create div:
this->createTicker();
this->createUpnDownButtons();
@@ -385,6 +436,37 @@ void MenuManager::init(MainWindow *window)
level2MenuNode = level2MenuNode.nextSibling();
}
+
+ // Create QML Loader
+ qmlRegisterType<QGraphicsBlurEffect>("Effects", 1, 0, "Blur");
+ declarativeEngine = new QDeclarativeEngine(this);
+ MenuManager::instance()->declarativeEngine->rootContext()->setContextProperty("realBlur", this->mainSceneBlur);
+ QDeclarativeComponent component(declarativeEngine, QUrl("qrc:qml/qmlShell.qml"), this);
+ qmlRoot = 0;
+ if(component.isReady())
+ qmlRoot = qobject_cast<QDeclarativeItem*>(component.create());
+ else
+ qDebug() << component.status() << component.errorString();
+ if(qmlRoot){
+ qmlRoot->setHeight(this->window->scene->sceneRect().height());
+ qmlRoot->setWidth(this->window->scene->sceneRect().width());
+ qmlRoot->setZValue(1000);//Above other items
+ qmlRoot->setCursor(Qt::ArrowCursor);
+ window->scene->addItem(qmlRoot);
+ if(!Colors::noBlur){
+ qmlShadow = new QGraphicsDropShadowEffect(this);
+ qmlShadow->setOffset(4);
+ qmlRoot->setGraphicsEffect(qmlShadow);
+ }
+
+ //Note that QML adds key handling to the app.
+ window->viewport()->setFocusPolicy(Qt::NoFocus);//Correct keyboard focus handling
+ window->setFocusPolicy(Qt::StrongFocus);
+ window->scene->setStickyFocus(true);
+ window->setFocus();
+ }else{
+ qDebug() << "Error intializing QML subsystem, Declarative examples will not work";
+ }
}
void MenuManager::readInfoAboutExample(const QDomElement &example)
@@ -392,13 +474,14 @@ void MenuManager::readInfoAboutExample(const QDomElement &example)
QString name = example.attribute("name");
if (this->info.contains(name))
qWarning() << "__WARNING: MenuManager::readInfoAboutExample: Demo/example with name"
- << name << "appears twize in the xml-file!__";
+ << name << "appears twice in the xml-file!__";
this->info[name]["filename"] = example.attribute("filename");
this->info[name]["category"] = example.parentNode().toElement().tagName();
this->info[name]["dirname"] = example.parentNode().toElement().attribute("dirname");
this->info[name]["changedirectory"] = example.attribute("changedirectory");
this->info[name]["image"] = example.attribute("image");
+ this->info[name]["qml"] = example.attribute("qml");
}
QString MenuManager::resolveDataDir(const QString &name)
@@ -454,7 +537,7 @@ QString MenuManager::resolveDocUrl(const QString &name)
QString fileName = this->info[name]["filename"];
if (category == "demos")
- return this->helpRootUrl + "demos-" + fileName + ".html";
+ return this->helpRootUrl + "demos-" + fileName.replace("/", "-") + ".html";
else
return this->helpRootUrl + dirName.replace("/", "-") + "-" + fileName + ".html";
}
@@ -474,6 +557,9 @@ QByteArray MenuManager::getImage(const QString &name)
QString imageName = this->info[name]["image"];
QString category = this->info[name]["category"];
QString fileName = this->info[name]["filename"];
+ bool qml = (this->info[name]["qml"] == QLatin1String("true"));
+ if(qml)
+ fileName = QLatin1String("qml-") + fileName.split('/').last();
if (imageName.isEmpty()){
if (category == "demos")
@@ -493,7 +579,7 @@ void MenuManager::createRootMenu(const QDomElement &el)
{
QString name = el.attribute("name");
createMenu(el, MENU1);
- createInfo(new MenuContentItem(el, this->window->scene, 0), name + " -info");
+ createInfo(new MenuContentItem(el, this->window->scene, this->window->mainSceneRoot), name + " -info");
Movie *menuButtonsIn = this->score->insertMovie(name + " -buttons");
Movie *menuButtonsOut = this->score->insertMovie(name + " -buttons -out");
@@ -505,19 +591,21 @@ void MenuManager::createSubMenu(const QDomElement &el)
{
QString name = el.attribute("name");
createMenu(el, MENU2);
- createInfo(new MenuContentItem(el, this->window->scene, 0), name + " -info");
+ createInfo(new MenuContentItem(el, this->window->scene, this->window->mainSceneRoot), name + " -info");
}
void MenuManager::createLeafMenu(const QDomElement &el)
{
QString name = el.attribute("name");
- createInfo(new ExampleContent(name, this->window->scene, 0), name);
+ createInfo(new ExampleContent(name, this->window->scene, this->window->mainSceneRoot), name);
Movie *infoButtonsIn = this->score->insertMovie(name + " -buttons");
Movie *infoButtonsOut = this->score->insertMovie(name + " -buttons -out");
createLowRightLeafButton("Documentation", 600, DOCUMENTATION, infoButtonsIn, infoButtonsOut, 0);
if (el.attribute("executable") != "false")
createLowRightLeafButton("Launch", 405, LAUNCH, infoButtonsIn, infoButtonsOut, 0);
+ else if(el.attribute("qml") == "true")
+ createLowRightLeafButton("Display", 405, LAUNCH_QML, infoButtonsIn, infoButtonsOut, 0);
}
void MenuManager::createMenu(const QDomElement &category, BUTTON_TYPE type)
@@ -546,7 +634,7 @@ void MenuManager::createMenu(const QDomElement &category, BUTTON_TYPE type)
// create normal menu button
QString label = currentNode.toElement().attribute("name");
- item = new TextButton(label, TextButton::LEFT, type, this->window->scene, 0);
+ item = new TextButton(label, TextButton::LEFT, type, this->window->scene, this->window->mainSceneRoot);
currentNode = currentNode.nextSibling();
#ifndef QT_OPENGL_SUPPORT
@@ -646,7 +734,7 @@ void MenuManager::createMenu(const QDomElement &category, BUTTON_TYPE type)
void MenuManager::createLowLeftButton(const QString &label, BUTTON_TYPE type,
Movie *movieIn, Movie *movieOut, Movie *movieShake, const QString &menuString)
{
- TextButton *button = new TextButton(label, TextButton::RIGHT, type, this->window->scene, 0, TextButton::PANEL);
+ TextButton *button = new TextButton(label, TextButton::RIGHT, type, this->window->scene, this->window->mainSceneRoot, TextButton::PANEL);
if (!menuString.isNull())
button->setMenuString(menuString);
button->setRecursiveVisible(false);
@@ -688,7 +776,7 @@ void MenuManager::createLowLeftButton(const QString &label, BUTTON_TYPE type,
void MenuManager::createLowRightButton(const QString &label, BUTTON_TYPE type, Movie *movieIn, Movie *movieOut, Movie * /*movieShake*/)
{
- TextButton *item = new TextButton(label, TextButton::RIGHT, type, this->window->scene, 0, TextButton::PANEL);
+ TextButton *item = new TextButton(label, TextButton::RIGHT, type, this->window->scene, this->window->mainSceneRoot, TextButton::PANEL);
item->setRecursiveVisible(false);
item->setZValue(10);
@@ -715,7 +803,7 @@ void MenuManager::createLowRightButton(const QString &label, BUTTON_TYPE type, M
void MenuManager::createLowRightLeafButton(const QString &label, int xOffset, BUTTON_TYPE type, Movie *movieIn, Movie *movieOut, Movie * /*movieShake*/)
{
- TextButton *item = new TextButton(label, TextButton::RIGHT, type, this->window->scene, 0, TextButton::PANEL);
+ TextButton *item = new TextButton(label, TextButton::RIGHT, type, this->window->scene, this->window->mainSceneRoot, TextButton::PANEL);
item->setRecursiveVisible(false);
item->setZValue(10);
@@ -831,12 +919,12 @@ void MenuManager::createUpnDownButtons()
float xOffset = 15.0f;
float yOffset = 450.0f;
- this->upButton = new TextButton("", TextButton::LEFT, MenuManager::UP, this->window->scene, 0, TextButton::UP);
+ this->upButton = new TextButton("", TextButton::LEFT, MenuManager::UP, this->window->scene, this->window->mainSceneRoot, TextButton::UP);
this->upButton->prepare();
this->upButton->setPos(xOffset, yOffset);
this->upButton->setState(TextButton::DISABLED);
- this->downButton = new TextButton("", TextButton::LEFT, MenuManager::DOWN, this->window->scene, 0, TextButton::DOWN);
+ this->downButton = new TextButton("", TextButton::LEFT, MenuManager::DOWN, this->window->scene, this->window->mainSceneRoot, TextButton::DOWN);
this->downButton->prepare();
this->downButton->setPos(xOffset + 10 + this->downButton->sceneBoundingRect().width(), yOffset);
diff --git a/demos/qtdemo/menumanager.h b/demos/qtdemo/menumanager.h
index ff98341..3524081 100644
--- a/demos/qtdemo/menumanager.h
+++ b/demos/qtdemo/menumanager.h
@@ -61,7 +61,7 @@ class MenuManager : public QObject
Q_OBJECT
public:
- enum BUTTON_TYPE {ROOT, MENU1, MENU2, LAUNCH, DOCUMENTATION, QUIT, FULLSCREEN, UP, DOWN, BACK};
+ enum BUTTON_TYPE {ROOT, MENU1, MENU2, LAUNCH, DOCUMENTATION, QUIT, FULLSCREEN, UP, DOWN, BACK, LAUNCH_QML};
// singleton pattern:
static MenuManager *instance();
@@ -83,6 +83,11 @@ public:
Score *score;
int currentMenuCode;
+ QDeclarativeEngine* declarativeEngine;
+ QDeclarativeItem *qmlRoot;
+ QGraphicsBlurEffect *mainSceneBlur;
+ QGraphicsDropShadowEffect *qmlShadow;
+
private slots:
void exampleFinished();
void exampleError(QProcess::ProcessError error);
@@ -100,6 +105,7 @@ private:
void readInfoAboutExample(const QDomElement &example);
void showDocInAssistant(const QString &docFile);
void launchExample(const QString &uniqueName);
+ void launchQmlExample(const QString &uniqueName);
void createMenu(const QDomElement &category, BUTTON_TYPE type);
void createLowLeftButton(const QString &label, BUTTON_TYPE type,
@@ -128,6 +134,7 @@ private:
TextButton *upButton;
TextButton *downButton;
+
};
#endif // MENU_MANAGER_H
diff --git a/demos/qtdemo/qmlShell.qml b/demos/qtdemo/qmlShell.qml
new file mode 100644
index 0000000..8c20cf4
--- /dev/null
+++ b/demos/qtdemo/qmlShell.qml
@@ -0,0 +1,117 @@
+import Qt 4.7
+import Effects 1.0
+
+Item {
+ id: main
+ property alias source: loader.source
+ property bool show: false
+ x: 0
+ y: -500 //height and width set by program
+ opacity: 0
+ property QtObject blurEffect: realBlur == null ? dummyBlur : realBlur //Is there a better way to lose those error messages?
+ Loader{//Automatic FocusScope
+ focus: true
+ clip: true
+ id: loader //source set by program
+ anchors.centerIn: parent
+ onStatusChanged: if(status == Loader.Ready) {
+ if(loader.item.width > 640)
+ loader.item.width = 640;
+ if(loader.item.height > 480)
+ loader.item.height = 480;
+ }
+
+ }
+ Rectangle{
+ z: -1
+ anchors.fill: loader.status == Loader.Ready ? loader : errorTxt
+ anchors.margins: -10
+ radius: 12
+ smooth: true
+ gradient: Gradient{
+ GradientStop{ position: 0.0; color: "#14FFFFFF" }
+ GradientStop{ position: 1.0; color: "#5AFFFFFF" }
+ }
+ MouseArea{
+ anchors.fill: parent
+ onClicked: loader.focus=true;/* and don't propogate to the 'exit' area*/
+ }
+
+ }
+
+ MouseArea{
+ z: -2
+ hoverEnabled: true //To steal from the buttons
+ anchors.fill: parent
+ onClicked: main.show=false;
+ }
+
+ Text{
+ id: errorTxt
+ anchors.centerIn: parent
+ color: 'white'
+ smooth: true
+ visible: loader.status == Loader.Error
+ textFormat: Text.RichText //includes link for bugreport
+ //Note that if loader is Error, it is because the file was found but there was an error creating the component
+ //This means either we have a bug in our demos, or the required modules (which ship with Qt) did not deploy correctly
+ text: 'The example has failed to load. This is a bug!<br />'
+ +'Report it at <a href="http://bugreports.qt.nokia.com">http://bugreports.qt.nokia.com</a>';
+ onLinkActivated: Qt.openUrlExternally(link);
+ }
+
+
+ states: [
+ State {
+ name: "show"
+ when: show == true
+ PropertyChanges {
+ target: main
+ opacity: 1
+ y: 0
+ }
+ PropertyChanges {
+ target: blurEffect
+ enabled: true
+ blurRadius: 8
+ blurHints: Blur.AnimationHint | Blur.PerformanceHint
+ }
+ }
+ ]
+ MagicAnim{ id: magicAnim; target: main; from: -500; to: 0 }
+ transitions: [
+ Transition { from: ""; to: "show"
+ SequentialAnimation{
+ ScriptAction{ script: magicAnim.start() }
+ NumberAnimation{ properties: "opacity,blurRadius"; easing.type: Easing.OutCubic; duration: 1000}
+ PropertyAnimation{ target: main; property: "y"}
+ }
+
+ },
+ Transition { from: "show"; to: "" //Addtionally, unload the item
+ SequentialAnimation{
+ NumberAnimation{ properties: "y,opacity,blurRadius";duration: 500 }
+ ScriptAction{ script: loader.source = ''; }
+ }
+ /*Attempt to copy the exeunt animation. Looks bad
+ SequentialAnimation{
+ ParallelAnimation{
+ NumberAnimation{ properties: "opacity,blurRadius"; easing.type: Easing.InCubic; duration: 1000 }
+ SequentialAnimation{
+ NumberAnimation{ target: main; property: 'y'; to: 3.2*height/5; duration: 500}
+ ParallelAnimation{
+ NumberAnimation{ target: main; property: 'y'; to: 3.0*height/5; duration: 100}
+ NumberAnimation{ target: main; property: 'x'; to: 3.0*width/5; duration: 100}
+ }
+ NumberAnimation{ target: main; property: 'x'; to: 700; duration: 400}
+ }
+ }
+ ScriptAction{ script: loader.source = ''; }
+ PropertyAction{ properties: "x,y";}
+ }
+ */
+ }
+ ]
+ Item{ Blur{id: dummyBlur } }
+
+}
diff --git a/demos/qtdemo/qtdemo.pro b/demos/qtdemo/qtdemo.pro
index 2a776ac..5e64e1c 100644
--- a/demos/qtdemo/qtdemo.pro
+++ b/demos/qtdemo/qtdemo.pro
@@ -6,7 +6,7 @@ DESTDIR = $$DEMO_DESTDIR/bin
INSTALLS += target sources
-QT += xml network
+QT += xml network declarative
contains(QT_CONFIG, opengl) {
DEFINES += QT_OPENGL_SUPPORT
@@ -74,3 +74,6 @@ target.path = $$[QT_INSTALL_BINS]
sources.files = $$SOURCES $$HEADERS $$FORMS $$RESOURCES qtdemo.pro images xml *.ico *.icns *.rc *.plist
sources.path = $$[QT_INSTALL_DEMOS]/qtdemo
+OTHER_FILES += \
+ qmlShell.qml \
+ MagicAnim.qml
diff --git a/demos/qtdemo/qtdemo.qrc b/demos/qtdemo/qtdemo.qrc
index b30dd58..7682ab5 100644
--- a/demos/qtdemo/qtdemo.qrc
+++ b/demos/qtdemo/qtdemo.qrc
@@ -1,8 +1,12 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource prefix="/">
- <file>xml/examples.xml</file>
- <file>images/qtlogo_small.png</file>
- <file>images/trolltech-logo.png</file>
- <file>images/demobg.png</file>
-</qresource>
+<RCC>
+ <qresource prefix="/">
+ <file>xml/examples.xml</file>
+ <file>images/qtlogo_small.png</file>
+ <file>images/trolltech-logo.png</file>
+ <file>images/demobg.png</file>
+ </qresource>
+ <qresource prefix="/qml" lang="qml">
+ <file>qmlShell.qml</file>
+ <file>MagicAnim.qml</file>
+ </qresource>
</RCC>
diff --git a/demos/qtdemo/xml/examples.xml b/demos/qtdemo/xml/examples.xml
index 9121861..0ab048e 100644
--- a/demos/qtdemo/xml/examples.xml
+++ b/demos/qtdemo/xml/examples.xml
@@ -1,25 +1,32 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<categories name="Qt Examples and Demos">
<demos dirname="." docname="demos" name="Demonstrations">
+ <example filename="declarative/samegame" name="SameGame" executable="false" qml="true"/>
+ <example filename="declarative/flickr" name="Flickr Client" executable="false" qml="true"/>
<example filename="affine" name="Affine Transformations" />
- <example filename="arthurplugin" name="Arthur Plugin" executable="false" />
<example filename="composition" name="Composition Modes" />
<example filename="gradients" name="Gradients" />
<example filename="pathstroke" name="Path Stroking" />
- <example filename="deform" name="Vector Deformation" />
- <example filename="books" name="Books" />
- <example filename="mainwindow" name="Main Window" />
- <example filename="spreadsheet" name="Spreadsheet" />
- <example filename="sqlbrowser" name="SQL Browser" />
<example filename="textedit" name="Text Edit" />
<example filename="chip" name="40000 Chips" />
<example filename="embeddeddialogs" name="Embedded Dialogs" />
<example filename="interview" name="Interview" />
+ <example filename="declarative/rssnews" name="Rss Client" executable="false" qml="true"/>
+ <example filename="declarative/twitter" name="Twitter Client" executable="false" qml="true"/>
<example filename="browser" name="Browser" />
<example filename="qmediaplayer" name="Media Player" />
<example filename="boxes" name="Boxes" />
<example filename="sub-attaq" name="Sub-attaq" />
<example filename="spectrum" name="Spectrum Analyzer" />
+ <example filename="declarative/minehunt" name="Minehunt" executable="false" qml="true"/>
+ <example filename="declarative/snake" name="Snake" executable="false" qml="true"/>
+ <example filename="deform" name="Vector Deformation" />
+ <example filename="books" name="Books" />
+ <example filename="mainwindow" name="Main Window" />
+ <example filename="spreadsheet" name="Spreadsheet" />
+ <example filename="sqlbrowser" name="SQL Browser" />
+ <example filename="arthurplugin" name="Arthur Plugin" executable="false" />
+
</demos>
<category dirname="animation" name="Animation Framework">
<example filename="animatedtiles" name="Animated Tiles" />
@@ -35,6 +42,13 @@
<example filename="runfunction" name="Run Function" executable="false"/>
<example filename="wordcount" name="Word Count" executable="false" />
</category>
+ <category dirname="declarative/toys" name="Qt Declarative Examples">
+ <example filename="dynamicscene" name="Dynamic Scene" executable="false" qml="true" />
+ <example filename="tic-tac-toe" name="Tic Tac Toe" executable="false" qml="true" />
+ <example filename="clocks" name="Clocks" executable="false" qml="true" />
+ <example filename="corkboards" name="Corkboards" executable="false" qml="true" />
+ <example filename="tvtennis" name="TV Tennis" executable="false" qml="true" />
+ </category>
<category dirname="designer" name="Qt Designer">
<example filename="calculatorbuilder" name="Calculator Builder" />
<example filename="calculatorform" name="Calculator Form" />
@@ -116,6 +130,16 @@
<example filename="menus" name="Menus" />
<example filename="recentfiles" name="Recent Files" />
</category>
+ <category dirname="declarative/ui-components" name="QML UI Components">
+ <example filename="dialcontrol" name="Dial" executable="false" qml="true" />
+ <example filename="flipable" name="Flipable" executable="false" qml="true" />
+ <example filename="progressbar" name="Progress bar" executable="false" qml="true" />
+ <example filename="scrollbar" name="Scroll bar" executable="false" qml="true" />
+ <example filename="searchbox" name="Search box" executable="false" qml="true" />
+ <example filename="slideswitch" name="Slide switch" executable="false" qml="true" />
+ <example filename="spinner" name="Spinner" executable="false" qml="true" />
+ <example filename="tabwidget" name="Tab widget" executable="false" qml="true" />
+ </category>
<category dirname="network" name="Networking">
<example filename="blockingfortuneclient" name="Blocking Fortune Client" />
<example filename="broadcastreceiver" name="Broadcast Receiver" />