demos/qtdemo/menumanager.cpp
changeset 37 758a864f9613
parent 33 3e2da88830cd
--- a/demos/qtdemo/menumanager.cpp	Fri Sep 17 08:34:18 2010 +0300
+++ b/demos/qtdemo/menumanager.cpp	Mon Oct 04 01:19:32 2010 +0300
@@ -313,7 +313,7 @@
     // Send command through remote control even if the process
     // was started to activate assistant and bring it to front:
     QTextStream str(&this->assistantProcess);
-    str << "SetSource " << url << QLatin1Char('\0') << endl;
+    str << "SetSource " << url << QLatin1Char('\n') << endl;
 }
 
 void MenuManager::launchExample(const QString &name)
@@ -356,6 +356,7 @@
 
 void MenuManager::launchQmlExample(const QString &name)
 {
+#ifndef QT_NO_DECLARATIVE
     if(!qmlRoot){
         exampleError(QProcess::UnknownError);
         return;
@@ -382,6 +383,15 @@
     qmlRoot->setProperty("qmlFile", QVariant(""));//unload component
     qmlRoot->setProperty("show", QVariant(true));
     qmlRoot->setProperty("qmlFile", QUrl::fromLocalFile(file.fileName()));
+#else
+    exampleError(QProcess::UnknownError);
+#endif
+}
+
+void MenuManager::quitQML()
+{
+    if(qmlRoot)
+        qmlRoot->setProperty("show", QVariant(false));
 }
 
 void MenuManager::exampleFinished()
@@ -427,21 +437,28 @@
         level2MenuNode = level2MenuNode.nextSibling();
     }
 
+    qmlRoot = 0;
+#ifndef QT_NO_DECLARATIVE
     // Create QML Loader
     declarativeEngine = new QDeclarativeEngine(this);
+    connect(declarativeEngine, SIGNAL(quit()),
+            this, SLOT(quitQML()));
 
     QDeclarativeComponent component(declarativeEngine, QUrl("qrc:qml/qmlShell.qml"), this);
-    qmlRoot = 0;
-    if(component.isReady())
-        qmlRoot = qobject_cast<QDeclarativeItem*>(component.create());
-    else
+    QDeclarativeItem* qmlRootItem = 0;
+    if(component.isReady()){
+        qmlRoot = component.create();
+        qmlRootItem = qobject_cast<QDeclarativeItem*>(qmlRoot);
+    }else{
         qDebug() << component.status() << component.errorString();
-    if(qmlRoot){
-        qmlRoot->setHeight(this->window->scene->sceneRect().height());
-        qmlRoot->setWidth(this->window->scene->sceneRect().width());
-        qmlRoot->setZValue(101);//Above other items
-        qmlRoot->setCursor(Qt::ArrowCursor);
-        window->scene->addItem(qmlRoot);
+    }
+
+    if(qmlRootItem){
+        qmlRootItem->setHeight(this->window->scene->sceneRect().height());
+        qmlRootItem->setWidth(this->window->scene->sceneRect().width());
+        qmlRootItem->setZValue(101);//Above other items
+        qmlRootItem->setCursor(Qt::ArrowCursor);
+        window->scene->addItem(qmlRootItem);
 
         //Note that QML adds key handling to the app.
         window->viewport()->setFocusPolicy(Qt::NoFocus);//Correct keyboard focus handling
@@ -449,8 +466,9 @@
         window->scene->setStickyFocus(true);
         window->setFocus();
     }else{
-        qDebug() << "Error intializing QML subsystem, Declarative examples will not work";
+        qDebug() << "Error initializing QML subsystem, Declarative examples will not work";
     }
+#endif
 }
 
 void MenuManager::readInfoAboutExample(const QDomElement &example)