diff --git a/src/plugins/qt4projectmanager/wizards/qtquickapp.cpp b/src/plugins/qt4projectmanager/wizards/qtquickapp.cpp index 1c6653142d1..acd18db5c0d 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickapp.cpp +++ b/src/plugins/qt4projectmanager/wizards/qtquickapp.cpp @@ -98,7 +98,9 @@ QmlCppPlugin::QmlCppPlugin(const QString &name, const QFileInfo &path, { } -QtQuickApp::QtQuickApp() : AbstractMobileApp() +QtQuickApp::QtQuickApp() + : AbstractMobileApp() + , m_mainQmlMode(ModeGenerate) { } @@ -107,18 +109,20 @@ QtQuickApp::~QtQuickApp() clearModulesAndPlugins(); } -void QtQuickApp::setMainQmlFile(const QString &qmlFile) +void QtQuickApp::setMainQml(Mode mode, const QString &file) { - m_mainQmlFile.setFile(qmlFile); + Q_ASSERT(mode != ModeGenerate || file.isEmpty()); + m_mainQmlMode = mode; + m_mainQmlFile.setFile(file); } -QString QtQuickApp::mainQmlFile() const +QtQuickApp::Mode QtQuickApp::mainQmlMode() const { - return path(MainQml); + return m_mainQmlMode; } bool QtQuickApp::setExternalModules(const QStringList &uris, - const QStringList &importPaths) + const QStringList &importPaths) { clearModulesAndPlugins(); m_importPaths.clear(); @@ -161,19 +165,20 @@ bool QtQuickApp::setExternalModules(const QStringList &uris, QString QtQuickApp::pathExtended(int fileType) const { QString cleanProjectName = projectName().replace(QLatin1Char('-'), QString()); + const bool importQmlFile = m_mainQmlMode == ModeImport; const QString qmlSubDir = QLatin1String("qml/") - + (useExistingMainQml() ? m_mainQmlFile.dir().dirName() : cleanProjectName) - + QLatin1Char('/'); + + (importQmlFile ? m_mainQmlFile.dir().dirName() : cleanProjectName) + + QLatin1Char('/'); const QString appViewerTargetSubDir = appViewerOriginsSubDir; const QString mainQml = QLatin1String("main.qml"); const QString pathBase = outputPathBase(); const QDir appProFilePath(pathBase); switch (fileType) { - case MainQml: return useExistingMainQml() ? m_mainQmlFile.canonicalFilePath() - : pathBase + qmlSubDir + mainQml; - case MainQmlDeployed: return useExistingMainQml() ? qmlSubDir + m_mainQmlFile.fileName() - : QString(qmlSubDir + mainQml); + case MainQml: return importQmlFile ? m_mainQmlFile.canonicalFilePath() + : pathBase + qmlSubDir + mainQml; + case MainQmlDeployed: return importQmlFile ? qmlSubDir + m_mainQmlFile.fileName() + : QString(qmlSubDir + mainQml); case MainQmlOrigin: return originsRoot() + QLatin1String("qml/app/") + mainQml; case AppViewerPri: return pathBase + appViewerTargetSubDir + appViewerPriFileName; case AppViewerPriOrigin: return originsRoot() + appViewerOriginsSubDir + appViewerPriFileName; @@ -182,8 +187,8 @@ QString QtQuickApp::pathExtended(int fileType) const case AppViewerH: return pathBase + appViewerTargetSubDir + appViewerHFileName; case AppViewerHOrigin: return originsRoot() + appViewerOriginsSubDir + appViewerHFileName; case QmlDir: return pathBase + qmlSubDir; - case QmlDirProFileRelative: return useExistingMainQml() ? appProFilePath.relativeFilePath(m_mainQmlFile.canonicalPath()) - : QString(qmlSubDir).remove(qmlSubDir.length() - 1, 1); + case QmlDirProFileRelative: return importQmlFile ? appProFilePath.relativeFilePath(m_mainQmlFile.canonicalPath()) + : QString(qmlSubDir).remove(qmlSubDir.length() - 1, 1); case ModulesDir: return QLatin1String("modules"); default: qFatal("QtQuickApp::pathExtended() needs more work"); } diff --git a/src/plugins/qt4projectmanager/wizards/qtquickapp.h b/src/plugins/qt4projectmanager/wizards/qtquickapp.h index 88a2f11d2ae..d4117dcae89 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickapp.h +++ b/src/plugins/qt4projectmanager/wizards/qtquickapp.h @@ -107,11 +107,16 @@ public: ModulesDir }; + enum Mode { + ModeGenerate, + ModeImport + }; + QtQuickApp(); virtual ~QtQuickApp(); - void setMainQmlFile(const QString &qmlFile); - QString mainQmlFile() const; + void setMainQml(Mode mode, const QString &file = QString()); + Mode mainQmlMode() const; bool setExternalModules(const QStringList &uris, const QStringList &importPaths); #ifndef CREATORLESSTEST @@ -145,6 +150,7 @@ private: void clearModulesAndPlugins(); QFileInfo m_mainQmlFile; + Mode m_mainQmlMode; QStringList m_importPaths; QList m_modules; QList m_cppPlugins; diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp index 52c146fd142..2c216bdaa81 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp @@ -144,18 +144,22 @@ void QtQuickAppWizard::prepareGenerateFiles(const QWizard *w, { Q_UNUSED(errorMessage) const QtQuickAppWizardDialog *wizard = qobject_cast(w); - const QString mainQmlFile = wizard->m_qmlSourcesPage->mainQmlFile(); - m_d->app->setMainQmlFile(mainQmlFile); + if (wizard->m_qmlSourcesPage->mainQmlMode() == QtQuickApp::ModeGenerate) { + m_d->app->setMainQml(QtQuickApp::ModeGenerate); + } else { + const QString mainQmlFile = wizard->m_qmlSourcesPage->mainQmlFile(); + m_d->app->setMainQml(QtQuickApp::ModeImport, mainQmlFile); + } } bool QtQuickAppWizard::postGenerateFilesInternal(const Core::GeneratedFiles &l, QString *errorMessage) { const bool success = ProjectExplorer::CustomProjectWizard::postGenerateOpen(l, errorMessage); - if (success && !m_d->app->mainQmlFile().isEmpty()) { - ProjectExplorer::ProjectExplorerPlugin::instance()->setCurrentFile(0, m_d->app->mainQmlFile()); - Core::EditorManager::instance()->openEditor(m_d->app->mainQmlFile(), - QString(), Core::EditorManager::ModeSwitch); + const QString mainQmlFile = m_d->app->path(QtQuickApp::MainQml); + if (success && !mainQmlFile.isEmpty()) { + ProjectExplorer::ProjectExplorerPlugin::instance()->setCurrentFile(0, mainQmlFile); + Core::EditorManager::instance()->openEditor(mainQmlFile, QString(), Core::EditorManager::ModeSwitch); } return success; } diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.cpp b/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.cpp index 7769100ccaf..7bfaeb97099 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.cpp +++ b/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.cpp @@ -54,15 +54,15 @@ QtQuickAppWizardSourcesPage::QtQuickAppWizardSourcesPage(QWidget *parent) , m_d(new QtQuickAppWizardSourcesPagePrivate) { m_d->ui.setupUi(this); - m_d->ui.mainQmlFileLineEdit->setExpectedKind(Utils::PathChooser::File); - m_d->ui.mainQmlFileLineEdit->setPromptDialogFilter(QLatin1String("*.qml")); - m_d->ui.mainQmlFileLineEdit->setPromptDialogTitle(tr("Select QML File")); - connect(m_d->ui.mainQmlFileLineEdit, SIGNAL(changed(QString)), SIGNAL(completeChanged())); - connect(m_d->ui.importExistingQmlRadioButton, + m_d->ui.importLineEdit->setExpectedKind(Utils::PathChooser::File); + m_d->ui.importLineEdit->setPromptDialogFilter(QLatin1String("*.qml")); + m_d->ui.importLineEdit->setPromptDialogTitle(tr("Select QML File")); + connect(m_d->ui.importLineEdit, SIGNAL(changed(QString)), SIGNAL(completeChanged())); + connect(m_d->ui.importRadioButton, SIGNAL(toggled(bool)), SIGNAL(completeChanged())); - connect(m_d->ui.newQmlRadioButton, SIGNAL(toggled(bool)), - m_d->ui.mainQmlFileLineEdit, SLOT(setDisabled(bool))); - m_d->ui.newQmlRadioButton->setChecked(true); + connect(m_d->ui.generateRadioButton, SIGNAL(toggled(bool)), + m_d->ui.importLineEdit, SLOT(setDisabled(bool))); + m_d->ui.generateRadioButton->setChecked(true); } QtQuickAppWizardSourcesPage::~QtQuickAppWizardSourcesPage() @@ -70,16 +70,22 @@ QtQuickAppWizardSourcesPage::~QtQuickAppWizardSourcesPage() delete m_d; } +QtQuickApp::Mode QtQuickAppWizardSourcesPage::mainQmlMode() const +{ + return m_d->ui.generateRadioButton->isChecked() ? QtQuickApp::ModeGenerate + : QtQuickApp::ModeImport; +} + QString QtQuickAppWizardSourcesPage::mainQmlFile() const { - return m_d->ui.importExistingQmlRadioButton->isChecked() ? - m_d->ui.mainQmlFileLineEdit->path() : QString(); + return mainQmlMode() == QtQuickApp::ModeImport ? + m_d->ui.importLineEdit->path() : QString(); } bool QtQuickAppWizardSourcesPage::isComplete() const { - return !m_d->ui.importExistingQmlRadioButton->isChecked() - || m_d->ui.mainQmlFileLineEdit->isValid(); + return mainQmlMode() != QtQuickApp::ModeImport + || m_d->ui.importLineEdit->isValid(); } } // namespace Internal diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.h b/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.h index 1d7a2976d4a..51b2a39adfb 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.h +++ b/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.h @@ -35,6 +35,7 @@ #define QTQUICKAPPWIZARDPAGES_H #include +#include "qtquickapp.h" namespace Qt4ProjectManager { namespace Internal { @@ -48,6 +49,7 @@ public: explicit QtQuickAppWizardSourcesPage(QWidget *parent = 0); virtual ~QtQuickAppWizardSourcesPage(); + QtQuickApp::Mode mainQmlMode() const; QString mainQmlFile() const; virtual bool isComplete() const; diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizardsourcespage.ui b/src/plugins/qt4projectmanager/wizards/qtquickappwizardsourcespage.ui index 5e916c556f6..e451920b635 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickappwizardsourcespage.ui +++ b/src/plugins/qt4projectmanager/wizards/qtquickappwizardsourcespage.ui @@ -21,21 +21,21 @@ - + Generate a main.qml file - + Import an existing .qml file - + diff --git a/tests/manual/appwizards/helpers.cpp b/tests/manual/appwizards/helpers.cpp index 06b9b5d399d..75d4f588b82 100644 --- a/tests/manual/appwizards/helpers.cpp +++ b/tests/manual/appwizards/helpers.cpp @@ -18,7 +18,7 @@ bool QtQuickApp::generateFiles(QString *errorMessage) const { return writeFile(generateFile(QtQuickAppGeneratedFileInfo::MainCppFile, errorMessage), path(MainCpp)) && writeFile(generateFile(QtQuickAppGeneratedFileInfo::AppProFile, errorMessage), path(AppPro)) - && (useExistingMainQml() ? true : writeFile(generateFile(QtQuickAppGeneratedFileInfo::MainQmlFile, errorMessage), path(MainQml))) + && (m_mainQmlMode != ModeImport ? true : writeFile(generateFile(QtQuickAppGeneratedFileInfo::MainQmlFile, errorMessage), path(MainQml))) && writeFile(generateFile(QtQuickAppGeneratedFileInfo::AppViewerPriFile, errorMessage), path(AppViewerPri)) && writeFile(generateFile(QtQuickAppGeneratedFileInfo::AppViewerCppFile, errorMessage), path(AppViewerCpp)) && writeFile(generateFile(QtQuickAppGeneratedFileInfo::AppViewerHFile, errorMessage), path(AppViewerH)) diff --git a/tests/manual/appwizards/main.cpp b/tests/manual/appwizards/main.cpp index 421c89b7e75..9f97d094be3 100644 --- a/tests/manual/appwizards/main.cpp +++ b/tests/manual/appwizards/main.cpp @@ -55,7 +55,7 @@ int main(int argc, char *argv[]) QtQuickApp sAppImport01; sAppImport01.setProjectPath(projectPath); sAppImport01.setProjectName(QLatin1String("qml_imported_scenario_01")); - sAppImport01.setMainQmlFile(QLatin1String("../appwizards/qmlimportscenario_01/myqmlapp.qml")); + sAppImport01.setMainQml(QtQuickApp::ModeImport, QLatin1String("../appwizards/qmlimportscenario_01/myqmlapp.qml")); if (!sAppImport01.generateFiles(&errorMessage)) return 1; } @@ -65,7 +65,7 @@ int main(int argc, char *argv[]) QtQuickApp sAppImport02; sAppImport02.setProjectPath(projectPath); sAppImport02.setProjectName(QLatin1String("qml_imported_scenario_02")); - sAppImport02.setMainQmlFile(rootPath + QLatin1String("subfolder1/myqmlapp.qml")); + sAppImport02.setMainQml(QtQuickApp::ModeImport, rootPath + QLatin1String("subfolder1/myqmlapp.qml")); QStringList moduleNames; moduleNames.append(QLatin1String("no.trolltech.QmlModule01")); moduleNames.append(QLatin1String("com.nokia.QmlModule02")); diff --git a/tests/manual/appwizards/qmlimportscenario_01/myqmlapp.qml b/tests/manual/appwizards/qmlimportscenario_01/myqmlapp.qml index cfc9b5d0181..a01ab8c41f1 100644 --- a/tests/manual/appwizards/qmlimportscenario_01/myqmlapp.qml +++ b/tests/manual/appwizards/qmlimportscenario_01/myqmlapp.qml @@ -1,29 +1,16 @@ -import Qt 4.7 -import "qmlproject01" -import "qmlproject02" +import QtQuick 1.0 Rectangle { - width: 200 - height: 200 - color: "#ddddff" - + width: 360 + height: 360 Text { - id: title - text: "main" + text: "Hello World" + anchors.centerIn: parent } - - Column { + MouseArea { anchors.fill: parent - anchors.margins: title.height + 2 - - QmlProject01 { - height: parent.height / 2 - width: parent.width - } - - QmlProject02 { - height: parent.height / 2 - width: parent.width + onClicked: { + Qt.quit(); } } } diff --git a/tests/manual/appwizards/qmlimportscenario_02/subfolder1/myqmlapp.qml b/tests/manual/appwizards/qmlimportscenario_02/subfolder1/myqmlapp.qml index 0b950b9459f..a01ab8c41f1 100644 --- a/tests/manual/appwizards/qmlimportscenario_02/subfolder1/myqmlapp.qml +++ b/tests/manual/appwizards/qmlimportscenario_02/subfolder1/myqmlapp.qml @@ -1,29 +1,16 @@ -import Qt 4.7 -import no.trolltech.QmlModule01 1.0 -import com.nokia.QmlModule02 1.0 +import QtQuick 1.0 Rectangle { - width: 200 - height: 200 - color: "#ddddff" - + width: 360 + height: 360 Text { - id: title - text: "main" + text: "Hello World" + anchors.centerIn: parent } - - Column { + MouseArea { anchors.fill: parent - anchors.margins: title.height + 2 - - QmlComponent01 { - height: parent.height / 2 - width: parent.width - } - - QmlComponent02 { - height: parent.height / 2 - width: parent.width + onClicked: { + Qt.quit(); } } }