From 2964f7a9fa247110a8ad90c5cd7970199d106fda Mon Sep 17 00:00:00 2001 From: Feetu Nyrhinen Date: Fri, 10 Jun 2011 15:40:57 +0300 Subject: [PATCH] Qt Quick Components Wizard Selection of Qt Quick component set and use of specific QML template files (Qt Quick 1.0 and com.nokia.symbian 1.0) based on the user selections. Change-Id: I93cfa8735dcf285c76ff04a6186a4eca1f90a361 Reviewed-on: http://codereview.qt.nokia.com/567 Reviewed-by: Qt Sanity Bot Reviewed-by: Alessandro Portale --- share/qtcreator/templates/qtquickapp/app.pro | 4 + .../qtquickapp/qml/app/{ => qtquick10}/main.qml | 0 .../qtquickapp/qml/app/symbian10/MainPage.qml | 12 ++ .../qtquickapp/qml/app/symbian10/main.qml | 33 ++++++ .../qt4projectmanager/qt4projectmanager.pro | 3 +- .../wizards/abstractmobileapp.cpp | 3 + .../qt4projectmanager/wizards/abstractmobileapp.h | 3 +- .../wizards/abstractmobileappwizard.cpp | 43 +++++-- .../wizards/abstractmobileappwizard.h | 10 +- .../qt4projectmanager/wizards/html5appwizard.cpp | 1 + .../qt4projectmanager/wizards/mobileappwizard.cpp | 1 + .../qt4projectmanager/wizards/qtquickapp.cpp | 50 +++++++- src/plugins/qt4projectmanager/wizards/qtquickapp.h | 15 ++- .../qt4projectmanager/wizards/qtquickappwizard.cpp | 37 +++++- .../wizards/qtquickappwizardpages.cpp | 47 ++++++++ .../wizards/qtquickappwizardpages.h | 19 ++++ .../wizards/qtquickcomponentsetoptionspage.ui | 126 +++++++++++++++++++++ 17 files changed, 387 insertions(+), 20 deletions(-) rename share/qtcreator/templates/qtquickapp/qml/app/{ => qtquick10}/main.qml (100%) create mode 100644 share/qtcreator/templates/qtquickapp/qml/app/symbian10/MainPage.qml create mode 100644 share/qtcreator/templates/qtquickapp/qml/app/symbian10/main.qml create mode 100644 src/plugins/qt4projectmanager/wizards/qtquickcomponentsetoptionspage.ui diff --git a/share/qtcreator/templates/qtquickapp/app.pro b/share/qtcreator/templates/qtquickapp/app.pro index f197b4305b..e8d197665a 100644 --- a/share/qtcreator/templates/qtquickapp/app.pro +++ b/share/qtcreator/templates/qtquickapp/app.pro @@ -28,6 +28,10 @@ symbian:TARGET.CAPABILITY += NetworkServices # CONFIG += mobility # MOBILITY += +# Add dependency to symbian components +# QTQUICKCOMPONENTS # +# CONFIG += qtquickcomponents + # The .cpp file which was generated for your project. Feel free to hack it. SOURCES += main.cpp diff --git a/share/qtcreator/templates/qtquickapp/qml/app/main.qml b/share/qtcreator/templates/qtquickapp/qml/app/qtquick10/main.qml similarity index 100% rename from share/qtcreator/templates/qtquickapp/qml/app/main.qml rename to share/qtcreator/templates/qtquickapp/qml/app/qtquick10/main.qml diff --git a/share/qtcreator/templates/qtquickapp/qml/app/symbian10/MainPage.qml b/share/qtcreator/templates/qtquickapp/qml/app/symbian10/MainPage.qml new file mode 100644 index 0000000000..76273b89ff --- /dev/null +++ b/share/qtcreator/templates/qtquickapp/qml/app/symbian10/MainPage.qml @@ -0,0 +1,12 @@ +import QtQuick 1.0 +import com.nokia.symbian 1.0 + +Page { + id: mainPage + Text { + anchors.centerIn: parent + text: qsTr("Hello world!") + color: platformStyle.colorNormalLight + font.pixelSize: 20 + } +} diff --git a/share/qtcreator/templates/qtquickapp/qml/app/symbian10/main.qml b/share/qtcreator/templates/qtquickapp/qml/app/symbian10/main.qml new file mode 100644 index 0000000000..339b042a12 --- /dev/null +++ b/share/qtcreator/templates/qtquickapp/qml/app/symbian10/main.qml @@ -0,0 +1,33 @@ +import QtQuick 1.0 +import com.nokia.symbian 1.0 + +Window { + id: window + + StatusBar { + id: statusBar + anchors.top: window.top + } + + PageStack { + id: pageStack + anchors { left: parent.left; right: parent.right; top: statusBar.bottom; bottom: toolBar.top } + } + + ToolBar { + id: toolBar + anchors.bottom: window.bottom + tools: ToolBarLayout { + id: toolBarLayout + ToolButton { + flat: true + iconSource: "toolbar-back" + onClicked: pageStack.depth <= 1 ? Qt.quit() : pageStack.pop() + } + } + } + + Component.onCompleted: { + pageStack.push(Qt.resolvedUrl("MainPage.qml")) + } +} diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro index 7ddf9058c7..083fa2996e 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.pro +++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro @@ -142,7 +142,8 @@ FORMS += makestep.ui \ wizards/mobilelibrarywizardoptionpage.ui \ wizards/mobileappwizardgenericoptionspage.ui \ wizards/mobileappwizardsymbianoptionspage.ui \ - wizards/mobileappwizardmaemooptionspage.ui + wizards/mobileappwizardmaemooptionspage.ui \ + wizards/qtquickcomponentsetoptionspage.ui RESOURCES += qt4projectmanager.qrc \ wizards/wizards.qrc diff --git a/src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp b/src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp index 003565a663..acac67cacb 100644 --- a/src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp +++ b/src/plugins/qt4projectmanager/wizards/abstractmobileapp.cpp @@ -238,6 +238,9 @@ QByteArray AbstractMobileApp::generateMainCpp(QString *errorMessage) const case ScreenOrientationAuto: orientationString = "ScreenOrientationAuto"; break; + case ScreenOrientationImplicit: + default: + continue; // omit line } insertParameter(line, mainWindowClassName() + QLatin1String("::") + QLatin1String(orientationString)); diff --git a/src/plugins/qt4projectmanager/wizards/abstractmobileapp.h b/src/plugins/qt4projectmanager/wizards/abstractmobileapp.h index 5fbed9ce5b..f4bea31e2b 100644 --- a/src/plugins/qt4projectmanager/wizards/abstractmobileapp.h +++ b/src/plugins/qt4projectmanager/wizards/abstractmobileapp.h @@ -89,7 +89,8 @@ public: enum ScreenOrientation { ScreenOrientationLockLandscape, ScreenOrientationLockPortrait, - ScreenOrientationAuto + ScreenOrientationAuto, + ScreenOrientationImplicit // Don't set in application at all (used by Symbian components) }; enum FileType { diff --git a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp index 6e9476d2f3..8a1cf7c9d1 100644 --- a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp @@ -51,22 +51,39 @@ namespace Qt4ProjectManager { AbstractMobileAppWizardDialog::AbstractMobileAppWizardDialog(QWidget *parent, const QtSupport::QtVersionNumber &minimumQtVersionNumber) : ProjectExplorer::BaseProjectWizardDialog(parent) + , m_genericOptionsPageId(-1) + , m_symbianOptionsPageId(-1) + , m_maemoOptionsPageId(-1) + , m_harmattanOptionsPageId(-1) + , m_targetsPageId(-1) + , m_ignoreGeneralOptions(false) + , m_targetItem(0) + , m_genericItem(0) + , m_symbianItem(0) + , m_maemoItem(0) + , m_harmattanItem(0) { m_targetsPage = new TargetSetupPage; m_targetsPage->setPreferMobile(true); m_targetsPage->setMinimumQtVersion(minimumQtVersionNumber); resize(900, 450); - m_targetsPageId = addPageWithTitle(m_targetsPage, tr("Qt Versions")); + m_genericOptionsPage = new Internal::MobileAppWizardGenericOptionsPage; + m_symbianOptionsPage = new Internal::MobileAppWizardSymbianOptionsPage; + m_maemoOptionsPage = new Internal::MobileAppWizardMaemoOptionsPage(64); + m_harmattanOptionsPage = new Internal::MobileAppWizardMaemoOptionsPage(80); +} + +void AbstractMobileAppWizardDialog::addMobilePages() +{ + m_targetsPageId = addPageWithTitle(m_targetsPage, tr("Qt Versions")); + m_genericOptionsPageId = addPageWithTitle(m_genericOptionsPage, tr("Mobile Options")); - m_symbianOptionsPage = new Internal::MobileAppWizardSymbianOptionsPage; m_symbianOptionsPageId = addPageWithTitle(m_symbianOptionsPage, QLatin1String(" ") + tr("Symbian Specific")); - m_maemoOptionsPage = new Internal::MobileAppWizardMaemoOptionsPage(64); m_maemoOptionsPageId = addPageWithTitle(m_maemoOptionsPage, QLatin1String(" ") + tr("Maemo5 And Meego Specific")); - m_harmattanOptionsPage = new Internal::MobileAppWizardMaemoOptionsPage(80); m_harmattanOptionsPageId = addPageWithTitle(m_harmattanOptionsPage, QLatin1String(" ") + tr("Harmattan Specific")); @@ -76,7 +93,6 @@ AbstractMobileAppWizardDialog::AbstractMobileAppWizardDialog(QWidget *parent, co m_maemoItem = wizardProgress()->item(m_maemoOptionsPageId); m_harmattanItem = wizardProgress()->item(m_harmattanOptionsPageId); - m_targetItem->setNextShownItem(0); m_genericItem->setNextShownItem(0); m_symbianItem->setNextShownItem(0); } @@ -96,8 +112,11 @@ int AbstractMobileAppWizardDialog::addPageWithTitle(QWizardPage *page, const QSt int AbstractMobileAppWizardDialog::nextId() const { if (currentPage() == m_targetsPage) { - if (isSymbianTargetSelected() || isFremantleTargetSelected()) + if (isSymbianTargetSelected() && !m_ignoreGeneralOptions || isFremantleTargetSelected()) return m_genericOptionsPageId; + // If Symbian target and Qt Quick components for Symbian, skip the mobile options page. + else if (isSymbianTargetSelected() && m_ignoreGeneralOptions) + return m_symbianOptionsPageId; else if (isMeegoTargetSelected()) return m_maemoOptionsPageId; else if (isHarmattanTargetSelected()) @@ -163,6 +182,16 @@ void AbstractMobileAppWizardDialog::cleanupPage(int id) BaseProjectWizardDialog::cleanupPage(id); } +void AbstractMobileAppWizardDialog::setIgnoreGenericOptionsPage(bool ignore) +{ + m_ignoreGeneralOptions = ignore; +} + +Utils::WizardProgressItem *AbstractMobileAppWizardDialog::targetsPageItem() const +{ + return m_targetItem; +} + int AbstractMobileAppWizardDialog::idOfNextGenericPage() const { return pageIds().at(pageIds().indexOf(m_harmattanOptionsPageId) + 1); @@ -222,7 +251,6 @@ QWizard *AbstractMobileAppWizard::createWizardDialog(QWidget *parent, Core::GeneratedFiles AbstractMobileAppWizard::generateFiles(const QWizard *wizard, QString *errorMessage) const { - prepareGenerateFiles(wizard, errorMessage); const AbstractMobileAppWizardDialog *wdlg = qobject_cast(wizard); app()->setOrientation(wdlg->m_genericOptionsPage->orientation()); @@ -231,6 +259,7 @@ Core::GeneratedFiles AbstractMobileAppWizard::generateFiles(const QWizard *wizar app()->setNetworkEnabled(wdlg->m_symbianOptionsPage->networkEnabled()); app()->setMaemoPngIcon64(wdlg->m_maemoOptionsPage->pngIcon()); app()->setMaemoPngIcon80(wdlg->m_harmattanOptionsPage->pngIcon()); + prepareGenerateFiles(wizard, errorMessage); return app()->generateFiles(errorMessage); } diff --git a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.h b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.h index eac70224ff..42245c9718 100644 --- a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.h +++ b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.h @@ -37,6 +37,7 @@ #include #include #include +#include namespace Qt4ProjectManager { @@ -56,6 +57,7 @@ class QT4PROJECTMANAGER_EXPORT AbstractMobileAppWizardDialog : public ProjectExp protected: explicit AbstractMobileAppWizardDialog(QWidget *parent, const QtSupport::QtVersionNumber &minimumQtVersionNumber); + void addMobilePages(); public: TargetSetupPage *targetsPage() const; @@ -64,11 +66,12 @@ protected: int addPageWithTitle(QWizardPage *page, const QString &title); virtual void initializePage(int id); virtual void cleanupPage(int id); - -private: - + virtual void setIgnoreGenericOptionsPage(bool); virtual int nextId() const; + Utils::WizardProgressItem *targetsPageItem() const; + +private: int idOfNextGenericPage() const; Utils::WizardProgressItem *itemOfNextGenericPage() const; bool isSymbianTargetSelected() const; @@ -87,6 +90,7 @@ private: int m_maemoOptionsPageId; int m_harmattanOptionsPageId; int m_targetsPageId; + bool m_ignoreGeneralOptions; // If true, do not show generic mobile options page. Utils::WizardProgressItem *m_targetItem; Utils::WizardProgressItem *m_genericItem; Utils::WizardProgressItem *m_symbianItem; diff --git a/src/plugins/qt4projectmanager/wizards/html5appwizard.cpp b/src/plugins/qt4projectmanager/wizards/html5appwizard.cpp index 837f94c5f2..ba231ff2e4 100644 --- a/src/plugins/qt4projectmanager/wizards/html5appwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/html5appwizard.cpp @@ -66,6 +66,7 @@ Html5AppWizardDialog::Html5AppWizardDialog(QWidget *parent) m_htmlOptionsPage = new Html5AppWizardOptionsPage; addPageWithTitle(m_htmlOptionsPage, tr("HTML Options")); + addMobilePages(); } diff --git a/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp b/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp index 0f2bd9f870..53330761c7 100644 --- a/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp @@ -64,6 +64,7 @@ public: { setWindowTitle(DisplayName); setIntroDescription(Description); + addMobilePages(); } }; diff --git a/src/plugins/qt4projectmanager/wizards/qtquickapp.cpp b/src/plugins/qt4projectmanager/wizards/qtquickapp.cpp index 47786470c6..548205fcd6 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickapp.cpp +++ b/src/plugins/qt4projectmanager/wizards/qtquickapp.cpp @@ -100,6 +100,7 @@ QmlCppPlugin::QmlCppPlugin(const QString &name, const QFileInfo &path, QtQuickApp::QtQuickApp() : AbstractMobileApp() , m_mainQmlMode(ModeGenerate) + , m_componentSet(QtQuick10Components) { } @@ -108,6 +109,16 @@ QtQuickApp::~QtQuickApp() clearModulesAndPlugins(); } +void QtQuickApp::setComponentSet(ComponentSet componentSet) +{ + m_componentSet = componentSet; +} + +QtQuickApp::ComponentSet QtQuickApp::componentSet() const +{ + return m_componentSet; +} + void QtQuickApp::setMainQml(Mode mode, const QString &file) { Q_ASSERT(mode != ModeGenerate || file.isEmpty()); @@ -169,16 +180,24 @@ QString QtQuickApp::pathExtended(int fileType) const + (importQmlFile ? m_mainQmlFile.dir().dirName() : cleanProjectName) + QLatin1Char('/'); const QString appViewerTargetSubDir = appViewerOriginsSubDir; - const QString mainQml = QLatin1String("main.qml"); + + const QString mainQmlFile = QLatin1String("main.qml"); + const QString mainPageQmlFile = QLatin1String("MainPage.qml"); + + const QString qmlOriginDir = originsRoot() + QLatin1String("qml/app/") + + componentSetDir(componentSet()) + QLatin1Char('/'); + const QString pathBase = outputPathBase(); const QDir appProFilePath(pathBase); switch (fileType) { - case MainQml: return importQmlFile ? m_mainQmlFile.canonicalFilePath() - : pathBase + qmlSubDir + mainQml; + case MainQml: + return importQmlFile ? m_mainQmlFile.canonicalFilePath() : pathBase + qmlSubDir + mainQmlFile; case MainQmlDeployed: return importQmlFile ? qmlSubDir + m_mainQmlFile.fileName() - : QString(qmlSubDir + mainQml); - case MainQmlOrigin: return originsRoot() + QLatin1String("qml/app/") + mainQml; + : QString(qmlSubDir + mainQmlFile); + case MainQmlOrigin: return qmlOriginDir + mainQmlFile; + case MainPageQml: return pathBase + qmlSubDir + mainPageQmlFile; + case MainPageQmlOrigin: return qmlOriginDir + mainPageQmlFile; case AppViewerPri: return pathBase + appViewerTargetSubDir + appViewerPriFileName; case AppViewerPriOrigin: return originsRoot() + appViewerOriginsSubDir + appViewerPriFileName; case AppViewerCpp: return pathBase + appViewerTargetSubDir + appViewerCppFileName; @@ -239,6 +258,11 @@ void QtQuickApp::handleCurrentProFileTemplateLine(const QString &line, } proFile << endl; + } else if (line.contains(QLatin1String("# QTQUICKCOMPONENTS"))) { + QString nextLine = proFileTemplate.readLine(); // eats '# CONFIG += qtquickcomponents' + if (componentSet() == Symbian10Components) + nextLine.remove(0, 2); // remove comment + proFile << nextLine << endl; } } @@ -325,6 +349,8 @@ Core::GeneratedFiles QtQuickApp::generateFiles(QString *errorMessage) const Core::GeneratedFiles files = AbstractMobileApp::generateFiles(errorMessage); if (!useExistingMainQml()) { files.append(file(generateFile(QtQuickAppGeneratedFileInfo::MainQmlFile, errorMessage), path(MainQml))); + if (componentSet() == QtQuickApp::Symbian10Components) + files.append(file(generateFile(QtQuickAppGeneratedFileInfo::MainPageQmlFile, errorMessage), path(MainPageQml))); files.last().setAttributes(Core::GeneratedFile::OpenEditorAttribute); } @@ -354,6 +380,9 @@ QByteArray QtQuickApp::generateFileExtended(int fileType, case QtQuickAppGeneratedFileInfo::MainQmlFile: data = readBlob(path(MainQmlOrigin), errorMessage); break; + case QtQuickAppGeneratedFileInfo::MainPageQmlFile: + data = readBlob(path(MainPageQmlOrigin), errorMessage); + break; case QtQuickAppGeneratedFileInfo::AppViewerPriFile: data = readBlob(path(AppViewerPriOrigin), errorMessage); data.append(readBlob(path(DeploymentPriOrigin), errorMessage)); @@ -417,6 +446,17 @@ QList QtQuickApp::deploymentFolders() const return result; } +QString QtQuickApp::componentSetDir(ComponentSet componentSet) const +{ + switch (componentSet) { + case Symbian10Components: + return QLatin1String("symbian10"); + case QtQuick10Components: + default: + return QLatin1String("qtquick10"); + } +} + const int QtQuickApp::StubVersion = 12; } // namespace Internal diff --git a/src/plugins/qt4projectmanager/wizards/qtquickapp.h b/src/plugins/qt4projectmanager/wizards/qtquickapp.h index d284ea46a1..34b854272c 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickapp.h +++ b/src/plugins/qt4projectmanager/wizards/qtquickapp.h @@ -81,6 +81,7 @@ struct QtQuickAppGeneratedFileInfo : public AbstractGeneratedFileInfo { enum ExtendedFileType { MainQmlFile = ExtendedFile, + MainPageQmlFile, AppViewerPriFile, AppViewerCppFile, AppViewerHFile @@ -104,7 +105,9 @@ public: AppViewerHOrigin, QmlDir, QmlDirProFileRelative, - ModulesDir + ModulesDir, + MainPageQml, + MainPageQmlOrigin }; enum Mode { @@ -112,9 +115,17 @@ public: ModeImport }; + enum ComponentSet { + QtQuick10Components, + Symbian10Components + }; + QtQuickApp(); virtual ~QtQuickApp(); + void setComponentSet(ComponentSet componentSet); + ComponentSet componentSet() const; + void setMainQml(Mode mode, const QString &file = QString()); Mode mainQmlMode() const; bool setExternalModules(const QStringList &uris, const QStringList &importPaths); @@ -148,12 +159,14 @@ private: bool addCppPlugins(QmlModule *module); bool addCppPlugin(const QString &qmldirLine, QmlModule *module); void clearModulesAndPlugins(); + QString componentSetDir(ComponentSet componentSet) const; QFileInfo m_mainQmlFile; Mode m_mainQmlMode; QStringList m_importPaths; QList m_modules; QList m_cppPlugins; + ComponentSet m_componentSet; }; } // namespace Internal diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp index b6a54fa12a..c75975c3b0 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/qtquickappwizard.cpp @@ -53,22 +53,49 @@ class QtQuickAppWizardDialog : public AbstractMobileAppWizardDialog public: explicit QtQuickAppWizardDialog(QWidget *parent = 0); +protected: + bool validateCurrentPage(); + private: class QtQuickAppWizardSourcesPage *m_qmlSourcesPage; + class QtQuickComponentSetOptionsPage *m_componentOptionsPage; + int m_componentOptionsPageId; + + Utils::WizardProgressItem *m_componentItem; + friend class QtQuickAppWizard; }; QtQuickAppWizardDialog::QtQuickAppWizardDialog(QWidget *parent) - : AbstractMobileAppWizardDialog(parent, QtSupport::QtVersionNumber(4, 7, 0)) + : AbstractMobileAppWizardDialog(parent, QtSupport::QtVersionNumber(4, 7, 1)) , m_qmlSourcesPage(0) { setWindowTitle(tr("New Qt Quick Application")); setIntroDescription(tr("This wizard generates a Qt Quick application project.")); + m_componentOptionsPage = new Internal::QtQuickComponentSetOptionsPage; + m_componentOptionsPageId = addPageWithTitle(m_componentOptionsPage, tr("Component Set")); + m_componentItem = wizardProgress()->item(m_componentOptionsPageId); + + AbstractMobileAppWizardDialog::addMobilePages(); + + m_componentItem->setNextItems(QList() + << targetsPageItem()); + m_qmlSourcesPage = new QtQuickAppWizardSourcesPage; addPageWithTitle(m_qmlSourcesPage, tr("QML Sources")); } +bool QtQuickAppWizardDialog::validateCurrentPage() +{ + if (currentPage() == m_componentOptionsPage) { + if (m_componentOptionsPage->componentSet() == QtQuickApp::Symbian10Components) { + setIgnoreGenericOptionsPage(true); + targetsPage()->setMinimumQtVersion(QtSupport::QtVersionNumber(4, 7, 3)); + } + } + return AbstractMobileAppWizardDialog::validateCurrentPage(); +} class QtQuickAppWizardPrivate { @@ -102,7 +129,9 @@ Core::BaseFileWizardParameters QtQuickAppWizard::parameters() "You can build the application and deploy it on desktop and " "mobile target platforms. For example, you can create signed " "Symbian Installation System (SIS) packages for this type of " - "projects.")); + "projects. Moreover, you can select to use a set of premade " + "UI components in your Qt Quick application. " + "To utilize the components, Qt 4.7.3 or newer is required.")); parameters.setCategory(QLatin1String(QtSupport::Constants::QML_WIZARD_CATEGORY)); parameters.setDisplayCategory(QCoreApplication::translate(QtSupport::Constants::QML_WIZARD_TR_SCOPE, QtSupport::Constants::QML_WIZARD_TR_CATEGORY)); @@ -112,6 +141,7 @@ Core::BaseFileWizardParameters QtQuickAppWizard::parameters() AbstractMobileAppWizardDialog *QtQuickAppWizard::createWizardDialogInternal(QWidget *parent) const { m_d->wizardDialog = new QtQuickAppWizardDialog(parent); + m_d->wizardDialog->m_componentOptionsPage->setComponentSet(m_d->app->componentSet()); return m_d->wizardDialog; } @@ -131,6 +161,9 @@ void QtQuickAppWizard::prepareGenerateFiles(const QWizard *w, const QString mainQmlFile = wizard->m_qmlSourcesPage->mainQmlFile(); m_d->app->setMainQml(QtQuickApp::ModeImport, mainQmlFile); } + m_d->app->setComponentSet(wizard->m_componentOptionsPage->componentSet()); + if (m_d->app->componentSet() == QtQuickApp::Symbian10Components) + m_d->app->setOrientation(AbstractMobileApp::ScreenOrientationImplicit); } QString QtQuickAppWizard::fileToOpenPostGeneration() const diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.cpp b/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.cpp index bb7ef03d37..9a0884f94b 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.cpp +++ b/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.cpp @@ -31,6 +31,7 @@ **************************************************************************/ #include "qtquickappwizardpages.h" +#include "ui_qtquickcomponentsetoptionspage.h" #include "ui_qtquickappwizardsourcespage.h" #include @@ -42,12 +43,58 @@ namespace Qt4ProjectManager { namespace Internal { + +class QtQuickComponentSetOptionsPagePrivate +{ + Ui::QtQuickComponentSetOptionsPage ui; + friend class QtQuickComponentSetOptionsPage; +}; + class QtQuickAppWizardSourcesPagePrivate { Ui::QtQuickAppWizardSourcesPage ui; friend class QtQuickAppWizardSourcesPage; }; + +QtQuickComponentSetOptionsPage::QtQuickComponentSetOptionsPage(QWidget *parent) + : QWizardPage(parent) + , m_d(new QtQuickComponentSetOptionsPagePrivate) +{ + m_d->ui.setupUi(this); + m_d->ui.buttonGroup->setId(m_d->ui.qtquick10RadioButton, 0); + m_d->ui.buttonGroup->setId(m_d->ui.symbian10RadioButton, 1); + connect(m_d->ui.buttonGroup, SIGNAL(buttonClicked(int)), this, SLOT(radioButtonChecked(int))); +} + +QtQuickComponentSetOptionsPage::~QtQuickComponentSetOptionsPage() +{ + delete m_d; +} + +QtQuickApp::ComponentSet QtQuickComponentSetOptionsPage::componentSet() const +{ + switch (m_d->ui.buttonGroup->checkedId()) { + case 1: return QtQuickApp::Symbian10Components; + case 0: + default: return QtQuickApp::QtQuick10Components; + } +} + +void QtQuickComponentSetOptionsPage::setComponentSet(QtQuickApp::ComponentSet componentSet) +{ + switch (componentSet) { + case QtQuickApp::Symbian10Components: m_d->ui.symbian10RadioButton->click(); break; + case QtQuickApp::QtQuick10Components: + default: m_d->ui.qtquick10RadioButton->click(); break; + } +} + +void QtQuickComponentSetOptionsPage::radioButtonChecked(int index) +{ + m_d->ui.descriptionStackedWidget->setCurrentIndex(index); +} + QtQuickAppWizardSourcesPage::QtQuickAppWizardSourcesPage(QWidget *parent) : QWizardPage(parent) , m_d(new QtQuickAppWizardSourcesPagePrivate) diff --git a/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.h b/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.h index 41d84ca08b..303074c9f3 100644 --- a/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.h +++ b/src/plugins/qt4projectmanager/wizards/qtquickappwizardpages.h @@ -39,6 +39,25 @@ namespace Qt4ProjectManager { namespace Internal { +class QtQuickComponentSetOptionsPage : public QWizardPage +{ + Q_OBJECT + Q_DISABLE_COPY(QtQuickComponentSetOptionsPage) + +public: + explicit QtQuickComponentSetOptionsPage(QWidget *parent = 0); + virtual ~QtQuickComponentSetOptionsPage(); + + QtQuickApp::ComponentSet componentSet() const; + void setComponentSet(QtQuickApp::ComponentSet componentSet); + +private slots: + void radioButtonChecked(int index); + +private: + class QtQuickComponentSetOptionsPagePrivate *m_d; +}; + class QtQuickAppWizardSourcesPage : public QWizardPage { Q_OBJECT diff --git a/src/plugins/qt4projectmanager/wizards/qtquickcomponentsetoptionspage.ui b/src/plugins/qt4projectmanager/wizards/qtquickcomponentsetoptionspage.ui new file mode 100644 index 0000000000..c9c5eb2c08 --- /dev/null +++ b/src/plugins/qt4projectmanager/wizards/qtquickcomponentsetoptionspage.ui @@ -0,0 +1,126 @@ + + + QtQuickComponentSetOptionsPage + + + + 0 + 0 + 400 + 300 + + + + + + + + + + + + + Select Qt Quick component set to be used: + + + false + + + false + + + + + + QtQuick 1.0 + + + true + + + buttonGroup + + + + + + + com.nokia.symbian 1.0 + + + buttonGroup + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 40 + + + + + + + + 1 + + + + + + + The QtQuick 1.0 namespace contains basic elements which allow you to write cross-platform applications with a custom look and feel. + +Requires Qt 4.7.1 or newer. + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + + + + + + The Qt Quick components for Symbian are a set of ready-made elements that are designed with specific native appearance for the target platform. + +Requires Qt 4.7.3 or newer, and the component set installed for your Qt version / Symbian device. + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + + + + + + + + + + + + + -- 2.11.0