Ui selection code improved
[mardrone] / mardrone / main.cpp
index 0e28721..ce57cd7 100644 (file)
@@ -36,7 +36,7 @@
 #include "qdeclarativetoucharea.h"
 #include <QList>
 
-QString selectQmlMain(QStringList inportPaths,QString cmdParam,QString activeUI);
+QString selectQmlMain(QStringList inportPaths,QString cmdParam,QString activeUI,uiListModel &uiList);
 
 // MacOSX sdl hack so that SDL won't hijack main
 #undef main
@@ -62,18 +62,18 @@ int main(int argc, char *argv[])
     uiListModel uiList;
     bool setDefault=false;
 
-    uiList.addUI(new uiListElement("MeeGo","ardrone_harmattan.qml"));
+/*    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"));
-
+*/
 
     QSettings *mardroneSettings=new QSettings("katix.org","mardrone");
 #ifdef QT_IOS
     QString activeUi=mardroneSettings->value("activeUI","ardrone_plainqml.qml").toString();
 #else
- //   QString activeUi=mardroneSettings->value("activeUI","ardrone_harmattan.qml").toString();
-    QString activeUi=mardroneSettings->value("activeUI","ardrone_desktop.qml").toString();
+    QString activeUi=mardroneSettings->value("activeUI","ardrone_harmattan.qml").toString();
+//    QString activeUi=mardroneSettings->value("activeUI","ardrone_desktop.qml").toString();
 #endif
     qDebug() << "activeUI=" << activeUi;
     QString qmlmainfile=app.arguments().size()>=2 ? app.arguments()[1]:"";
@@ -90,10 +90,14 @@ int main(int argc, char *argv[])
     window.engine()->addImportPath("qrc:");
     window.engine()->addImportPath("gauges");
     window.engine()->addImportPath(".");
+#ifdef Q_OS_ANDROID
+    window.engine()->addImportPath("/imports/");
+    window.engine()->addPluginPath(QDir::homePath()+"/../lib");
+#endif
     qDebug() << "ImportPathList" << window.engine()->importPathList() ;
     QStringList importPath=window.engine()->importPathList();
     window.rootContext()->setContextProperty("uiList",&uiList);
-    QString qmlFile=selectQmlMain(importPath,qmlmainfile,activeUi);
+    QString qmlFile=selectQmlMain(importPath,qmlmainfile,activeUi,uiList);
     if(setDefault) mardroneSettings->setValue("activeUI",qmlFile);
 #ifndef QT_IOS
     qmlFile=QString("qrc:/")+qmlFile;
@@ -115,14 +119,48 @@ int main(int argc, char *argv[])
     return app.exec();
 }
 
-QString selectQmlMain(QStringList importPaths,QString cmdParam,QString activeUI)
+QString selectQmlMain(QStringList importPaths,QString cmdParam,QString activeUI,uiListModel &uiList)
 {
-  QString importPath=importPaths.last();
+  bool haveHarmattan=FALSE;
+  bool haveSymbian=FALSE;
+  bool haveDesktop=FALSE;
+  QStringList appQmlFilesFilter;
+  QString uiName;
+  appQmlFilesFilter << "ardrone*.qml";
+  QStringList appQmlFiles;
+          qDebug() << "selectQmlMain importPath=" << importPaths << " ActiveUi=" << activeUI;
+  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;
+    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))
+        {
+            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=="" && QFile(importPath+"/com/nokia/meego").exists())) return QString("ardrone_harmattan.qml");
-  if(cmdParam=="symbian" || (cmdParam=="" && QFile(importPath+"/MeeGo/Components").exists())) return QString("ardrone_symbian.qml");
-  if(cmdParam=="desktop" || (cmdParam=="" && QFile(importPath+"/QtDesktop").exists())) return QString("ardrone_desktop.qml");
-   if(cmdParam=="plain") return QString("ardrone_plainqml.qml");
+  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");
+
   return(activeUI);
 }