summaryrefslogtreecommitdiff
path: root/tests/tools/qtquickappblaster/main.cpp
diff options
context:
space:
mode:
authorAlessandro Portale <alessandro.portale@nokia.com>2010-11-15 22:15:34 +0100
committerAlessandro Portale <alessandro.portale@nokia.com>2010-11-15 22:15:48 +0100
commit1b15ba8614f92686be8059e99a75e1283b6037d0 (patch)
treed4f405cba67c5157409feadc215239e2e2ba51f9 /tests/tools/qtquickappblaster/main.cpp
parent606aba3659a7930d4c6bf02c5f878bd773cf6221 (diff)
downloadqt-creator-1b15ba8614f92686be8059e99a75e1283b6037d0.tar.gz
Mass Qt Quick App generator.
First usage: convert QML examples into c++ projects.
Diffstat (limited to 'tests/tools/qtquickappblaster/main.cpp')
-rw-r--r--tests/tools/qtquickappblaster/main.cpp101
1 files changed, 101 insertions, 0 deletions
diff --git a/tests/tools/qtquickappblaster/main.cpp b/tests/tools/qtquickappblaster/main.cpp
new file mode 100644
index 0000000000..470aca4c54
--- /dev/null
+++ b/tests/tools/qtquickappblaster/main.cpp
@@ -0,0 +1,101 @@
+#include "qmlstandaloneapp.h"
+#include <QtCore>
+
+using namespace Qt4ProjectManager::Internal;
+
+bool processXmlFile(const QString &xmlFile)
+{
+ QFile file(xmlFile);
+ if (!file.open(QIODevice::ReadOnly))
+ return false;
+
+ const QLatin1String tag_app("app");
+ const QLatin1String attrib_mainQmlFile("mainqmlfile");
+ const QLatin1String attrib_projectPath("projectpath");
+ const QLatin1String attrib_projectName("projectname");
+ const QLatin1String attrib_screenOrientation("screenorientation");
+ const QLatin1String value_screenOrientationLockLandscape("LockLandscape");
+ const QLatin1String value_screenOrientationLockPortrait("LockPortrait");
+ const QLatin1String attrib_networkAccess("networkAccess");
+
+ static const QString qtDir =
+ QLibraryInfo::location(QLibraryInfo::PrefixPath) + QLatin1Char('/');
+
+ QXmlStreamReader reader(&file);
+ while (!reader.atEnd()) {
+ const QXmlStreamReader::TokenType token = reader.readNext();
+ switch (token) {
+ case QXmlStreamReader::StartElement:
+ if (reader.name() == tag_app) {
+ QmlStandaloneApp qmlApp;
+ if (!reader.attributes().hasAttribute(attrib_projectName)) {
+ qDebug() << "Error: Project without name";
+ continue;
+ }
+ qmlApp.setProjectName(reader.attributes().value(attrib_projectName).toString());
+ QFileInfo projectPath;
+ if (reader.attributes().hasAttribute(attrib_projectPath))
+ projectPath = qtDir + reader.attributes().value(attrib_projectPath).toString();
+ qmlApp.setProjectPath(projectPath.absoluteFilePath());
+ if (reader.attributes().hasAttribute(attrib_mainQmlFile)) {
+ const QFileInfo qmlFileOrigin(
+ qtDir + reader.attributes().value(attrib_mainQmlFile).toString());
+ if (!qmlFileOrigin.exists()) {
+ qDebug() << "Cannot find" <<
+ QDir::toNativeSeparators(qmlFileOrigin.absoluteFilePath());
+ continue;
+ }
+ const QFileInfo qmlTargetPath(QString(projectPath.absoluteFilePath()
+ + QLatin1Char('/') + qmlApp.projectName()
+ + QLatin1String("/qml/") + qmlApp.projectName()));
+#ifdef Q_OS_WIN
+ const QString sourcePath =
+ QDir::toNativeSeparators(qmlFileOrigin.canonicalPath() + QLatin1String("/*"));
+ const QString targetPath =
+ QDir::toNativeSeparators(qmlTargetPath.absoluteFilePath() + QLatin1Char('/'));
+ QProcess xcopy;
+ QStringList parameters;
+ parameters << QLatin1String("/E") << sourcePath << targetPath;
+ xcopy.start(QLatin1String("xcopy.exe"), parameters);
+ if (!xcopy.waitForStarted() || !xcopy.waitForFinished()) {
+ qDebug() << "Could not copy" <<
+ QDir::toNativeSeparators(sourcePath);
+ continue;
+ }
+#else // Q_OS_WIN
+ // Implement me!
+#endif // Q_OS_WIN
+ qmlApp.setMainQmlFile(qmlTargetPath.absoluteFilePath()
+ + QLatin1Char('/') + qmlFileOrigin.fileName());
+ }
+ if (reader.attributes().hasAttribute(attrib_screenOrientation)) {
+ const QStringRef orientation = reader.attributes().value(attrib_screenOrientation);
+ qmlApp.setOrientation(orientation == value_screenOrientationLockLandscape ?
+ AbstractMobileApp::ScreenOrientationLockLandscape
+ : orientation == value_screenOrientationLockPortrait ?
+ AbstractMobileApp::ScreenOrientationLockPortrait
+ : AbstractMobileApp::ScreenOrientationAuto);
+ }
+ if (reader.attributes().hasAttribute(attrib_networkAccess))
+ qmlApp.setNetworkEnabled(
+ reader.attributes().value(attrib_networkAccess) == QLatin1String("true"));
+ if (!qmlApp.generateFiles(0))
+ qDebug() << "Unable to generate the files for" << qmlApp.projectName();
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ return true;
+}
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication a(argc, argv);
+
+ if (!processXmlFile(QLatin1String(":/qtquickapps.xml")))
+ return 1;
+
+ return 0;
+}