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) { QtQuickApp app; QFileInfo projectPath; if (!reader.attributes().hasAttribute(attrib_projectPath)) { qDebug() << "Project without path found"; continue; } projectPath = qtDir + reader.attributes().value(attrib_projectPath).toString(); app.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('/') + qmlFileOrigin.baseName() + QLatin1String("/qml"))); #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 app.setMainQmlFile(qmlTargetPath.absoluteFilePath() + QLatin1Char('/') + qmlFileOrigin.fileName()); } app.setProjectName(reader.attributes().hasAttribute(attrib_projectName) ? reader.attributes().value(attrib_projectName).toString() : QFileInfo(app.mainQmlFile()).baseName()); if (reader.attributes().hasAttribute(attrib_screenOrientation)) { const QStringRef orientation = reader.attributes().value(attrib_screenOrientation); app.setOrientation(orientation == value_screenOrientationLockLandscape ? AbstractMobileApp::ScreenOrientationLockLandscape : orientation == value_screenOrientationLockPortrait ? AbstractMobileApp::ScreenOrientationLockPortrait : AbstractMobileApp::ScreenOrientationAuto); } if (reader.attributes().hasAttribute(attrib_networkAccess)) app.setNetworkEnabled( reader.attributes().value(attrib_networkAccess).toString() == QLatin1String("true")); if (!app.generateFiles(0)) qDebug() << "Unable to generate the files for" << app.projectName(); } break; default: break; } } return true; }
int main(int argc, char *argv[]) { Q_UNUSED(argc) Q_UNUSED(argv) QString errorMessage; const QString projectPath = QLatin1String("testprojects"); { QtQuickApp sAppNew; sAppNew.setProjectPath(projectPath); sAppNew.setProjectName(QLatin1String("new_qml_app")); if (!sAppNew.generateFiles(&errorMessage)) return 1; } { QtQuickApp sAppNew; sAppNew.setProjectPath(projectPath); sAppNew.setComponentSet(QtQuickApp::QtQuick20Components); sAppNew.setProjectName(QLatin1String("new_qtquick2_app")); if (!sAppNew.generateFiles(&errorMessage)) return 1; } { QtQuickApp sAppImport01; sAppImport01.setProjectPath(projectPath); sAppImport01.setProjectName(QLatin1String("qml_imported_scenario_01")); sAppImport01.setMainQml(QtQuickApp::ModeImport, QLatin1String("../appwizards/qmlimportscenario_01/myqmlapp.qml")); if (!sAppImport01.generateFiles(&errorMessage)) return 1; } { Html5App sAppNew; sAppNew.setProjectPath(projectPath); sAppNew.setProjectName(QLatin1String("new_html5_app")); qDebug() << sAppNew.path(Html5App::MainHtml); if (!sAppNew.generateFiles(&errorMessage)) return 1; } { Html5App sAppNew; sAppNew.setProjectPath(projectPath); sAppNew.setProjectName(QLatin1String("html5_imported_scenario_01")); sAppNew.setMainHtml(Html5App::ModeImport, QLatin1String("../appwizards/htmlimportscenario_01/themainhtml.html")); sAppNew.setTouchOptimizedNavigationEnabled(true); qDebug() << sAppNew.path(Html5App::MainHtml); if (!sAppNew.generateFiles(&errorMessage)) return 1; } { Html5App sAppNew; sAppNew.setProjectPath(projectPath); sAppNew.setProjectName(QLatin1String("html5_url")); sAppNew.setMainHtml(Html5App::ModeUrl, QLatin1String("http://www.jqtouch.com/preview/demos/main/")); qDebug() << sAppNew.path(Html5App::MainHtml); if (!sAppNew.generateFiles(&errorMessage)) return 1; } return 0; }