diff --git a/tests/tools/qtquickappblaster/main.cpp b/tests/tools/qtquickappblaster/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..470aca4c5452e4c21d67307201d5bd1251d96772 --- /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; +} diff --git a/tests/tools/qtquickappblaster/qtquickappblaster.pro b/tests/tools/qtquickappblaster/qtquickappblaster.pro new file mode 100644 index 0000000000000000000000000000000000000000..1d2628fa8f722b09823a5c1a1355a71dfa905bcd --- /dev/null +++ b/tests/tools/qtquickappblaster/qtquickappblaster.pro @@ -0,0 +1,17 @@ +CREATORSOURCEDIR = ../../../ + +DEFINES += \ + CREATORLESSTEST +APPSOURCEDIR = $$CREATORSOURCEDIR/src/plugins/qt4projectmanager/wizards +HEADERS += \ + $$APPSOURCEDIR/qmlstandaloneapp.h \ + $$APPSOURCEDIR/abstractmobileapp.h +SOURCES += \ + $$APPSOURCEDIR/qmlstandaloneapp.cpp \ + $$APPSOURCEDIR/abstractmobileapp.cpp \ + main.cpp \ + $$CREATORSOURCEDIR/tests/manual/qmlstandalone/helpers.cpp +INCLUDEPATH += $$APPSOURCEDIR +OTHER_FILES = qtquickapps.xml +RESOURCES += \ + qtquickappblaster.qrc diff --git a/tests/tools/qtquickappblaster/qtquickappblaster.qrc b/tests/tools/qtquickappblaster/qtquickappblaster.qrc new file mode 100644 index 0000000000000000000000000000000000000000..108222b9529f4840ac46ed27f9f529e3a790a849 --- /dev/null +++ b/tests/tools/qtquickappblaster/qtquickappblaster.qrc @@ -0,0 +1,5 @@ +<RCC> + <qresource prefix="/"> + <file>qtquickapps.xml</file> + </qresource> +</RCC> diff --git a/tests/tools/qtquickappblaster/qtquickapps.xml b/tests/tools/qtquickappblaster/qtquickapps.xml new file mode 100644 index 0000000000000000000000000000000000000000..a5791b7659b171649b303e1715490c933e404381 --- /dev/null +++ b/tests/tools/qtquickappblaster/qtquickapps.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<qmlapps> + <app + mainqmlfile="examples/declarative/animation/basics/property-animation.qml" + projectpath="qtquickexamples/animation/basics" + projectname="propertyanimation" + > + <app + mainqmlfile="examples/declarative/animation/basics/color-animation.qml" + projectpath="qtquickexamples/animation/basics" + projectname="coloranimation" + > + <app + mainqmlfile="examples/declarative/toys/clocks/clocks.qml" + projectpath="qtquickexamples/toys" + projectname="clocks" + screenorientation="LockLandscape" + > + <app + mainqmlfile="demos/declarative/flickr/flickr.qml" + projectpath="qtquickexamples" + projectname="flickr" + screenorientation="LockPortrait" + networkaccess="true" + > +</qmlapps>