#include "qmlstandaloneapp.h" #include 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; }