Cync
[mardrone] / mardrone / main.cpp
index ce57cd7..6412934 100644 (file)
@@ -36,7 +36,7 @@
 #include "qdeclarativetoucharea.h"
 #include <QList>
 
-QString selectQmlMain(QStringList inportPaths,QString cmdParam,QString activeUI,uiListModel &uiList);
+QString selectQmlMain(QStringList inportPaths,QString cmdParam,QString activeUI,uiListModel &uiList,QStringList &uiNames,QStringList &uiFiles);
 
 // MacOSX sdl hack so that SDL won't hijack main
 #undef main
@@ -61,12 +61,7 @@ int main(int argc, char *argv[])
     QUrl *url;
     uiListModel uiList;
     bool setDefault=false;
-
-/*    uiList.addUI(new uiListElement("MeeGo","ardrone_harmattan.qml"));
-    uiList.addUI(new uiListElement("Symbian","ardrone_symbian.qml"));
-    uiList.addUI(new uiListElement("Desktop","ardrone_desktop.qml"));
-    uiList.addUI(new uiListElement("PlainQml","ardrone_plainqml.qml"));
-*/
+    QStringList uiNames,uiFiles;
 
     QSettings *mardroneSettings=new QSettings("katix.org","mardrone");
 #ifdef QT_IOS
@@ -88,6 +83,7 @@ int main(int argc, char *argv[])
     // Check available UI's
     window.engine()->addImportPath("qrc:/gauges/");
     window.engine()->addImportPath("qrc:");
+    window.engine()->addImportPath(":");
     window.engine()->addImportPath("gauges");
     window.engine()->addImportPath(".");
 #ifdef Q_OS_ANDROID
@@ -97,7 +93,9 @@ int main(int argc, char *argv[])
     qDebug() << "ImportPathList" << window.engine()->importPathList() ;
     QStringList importPath=window.engine()->importPathList();
     window.rootContext()->setContextProperty("uiList",&uiList);
-    QString qmlFile=selectQmlMain(importPath,qmlmainfile,activeUi,uiList);
+    window.rootContext()->setContextProperty("uiNames",uiNames);
+    window.rootContext()->setContextProperty("uiFiles",uiFiles);
+    QString qmlFile=selectQmlMain(importPath,qmlmainfile,activeUi,uiList,uiNames,uiFiles);
     if(setDefault) mardroneSettings->setValue("activeUI",qmlFile);
 #ifndef QT_IOS
     qmlFile=QString("qrc:/")+qmlFile;
@@ -119,7 +117,7 @@ int main(int argc, char *argv[])
     return app.exec();
 }
 
-QString selectQmlMain(QStringList importPaths,QString cmdParam,QString activeUI,uiListModel &uiList)
+QString selectQmlMain(QStringList importPaths,QString cmdParam,QString activeUI,uiListModel &uiList,QStringList &uiNames,QStringList &uiFiles)
 {
   bool haveHarmattan=FALSE;
   bool haveSymbian=FALSE;
@@ -128,39 +126,49 @@ QString selectQmlMain(QStringList importPaths,QString cmdParam,QString activeUI,
   QString uiName;
   appQmlFilesFilter << "ardrone*.qml";
   QStringList appQmlFiles;
-          qDebug() << "selectQmlMain importPath=" << importPaths << " ActiveUi=" << activeUI;
+  qDebug() << "selectQmlMain importPath=" << importPaths << " ActiveUi=" << activeUI;
+  if(cmdParam.contains(".qml")) return cmdParam;
+  if(cmdParam=="plain") activeUI="ardrone_plainqml.qml";
+  if(cmdParam=="harmattan") activeUI="ardrone_harmattan.qml";
+  if(cmdParam=="symbian") activeUI="ardrone_symbian.qml";
+  if(cmdParam=="desktop") activeUI="ardrone_desktop.qml";
+  // Scan supported components
   for(int i=0;i<importPaths.size();i++) {
     QString importPath=importPaths[i];
     haveHarmattan|=QFile(importPath+"/com/nokia/meego").exists();
-    haveHarmattan|=QFile(importPath+"/MeeGo/Components").exists();
     haveSymbian|=QFile(importPath+"/com/nokia/symbian.1.1").exists();
     haveDesktop|=QFile(importPath+"/QtDesktop").exists();
     qDebug() << importPath << haveHarmattan << haveSymbian << haveDesktop;
+  }
+  // Scan UI .qml files
+  for(int i=0;i<importPaths.size();i++) {
+    QString importPath=importPaths[i];
     QDir searchDir(importPath);
     QStringList qmlFiles=searchDir.entryList(appQmlFilesFilter);
     qDebug() << qmlFiles;
     appQmlFiles+=qmlFiles;
     for(int j=0;j<qmlFiles.size();j++) {
-
-        QFile qmlFile(importPath+"/"+qmlFiles[j]);
-        if(qmlFile.open(QFile::ReadOnly))
+        if((qmlFiles[j].contains("harmattan") && haveHarmattan)||
+           (qmlFiles[j].contains("symbian") && haveSymbian) ||
+           (qmlFiles[j].contains("desktop") && haveDesktop) ||
+           (qmlFiles[j].contains("plainqml")))
         {
-            QString firstLine=QString(qmlFile.readLine(100));
-            if(firstLine.contains("// uiName:")) { uiName=firstLine.remove(0,10); }
-            else uiName=qmlFiles[j];
-            if(uiName.endsWith("\n")) uiName.chop(1);
-        }
-        qDebug() << importPath+"/"+qmlFiles[j] << uiName;
-        uiList.addUI(new uiListElement(uiName,qmlFiles[j]));
+            QFile qmlFile(importPath+"/"+qmlFiles[j]);
+            if(qmlFile.open(QFile::ReadOnly))
+            {
+                QString firstLine=QString(qmlFile.readLine(100));
+                if(firstLine.contains("// uiName:")) { uiName=firstLine.remove(0,10); }
+                else uiName=qmlFiles[j];
+                if(uiName.endsWith("\n")) uiName.chop(1);
+                qDebug() << importPath+"/"+qmlFiles[j] << uiName;
+                uiList.addUI(new uiListElement(uiName,qmlFiles[j]));
+            }
         }
+      }
     }
-
-  if(cmdParam.contains(".qml")) return cmdParam;
-  if(cmdParam=="plain") return QString("ardrone_plainqml.qml");
-  if(cmdParam.isEmpty() && !activeUI.isEmpty()) return activeUI;
-  if(cmdParam=="harmattan" || cmdParam=="" ) return QString("ardrone_harmattan.qml");
-  if(cmdParam=="symbian" || cmdParam=="" ) return QString("ardrone_symbian.qml");
-  if(cmdParam=="desktop" || cmdParam=="" ) return QString("ardrone_desktop.qml");
-
+    // Check validity of activeUi
+    bool validUi=false;
+    for(int j=0;j<uiList.count();j++) validUi|=(((uiListElement*)uiList.get(j))->file())==activeUI;
+    if(!validUi) activeUI=((uiListElement*)uiList.get(0))->file();
   return(activeUI);
 }