From d7d27fccbc4962fd2b4eaacafa1cd281a5efa037 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 29 Oct 2013 16:19:24 +0100 Subject: Rename plugins/qt4projectmanager to qmakeprojectmanager This finally renames the plugin itself. Change-Id: Ibdf4f4b4e9776c2fdc809e0127f3e1310de44bd1 Reviewed-by: Tobias Hunger --- .../wizards/qtquickappwizard.cpp | 275 +++++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 src/plugins/qmakeprojectmanager/wizards/qtquickappwizard.cpp (limited to 'src/plugins/qmakeprojectmanager/wizards/qtquickappwizard.cpp') diff --git a/src/plugins/qmakeprojectmanager/wizards/qtquickappwizard.cpp b/src/plugins/qmakeprojectmanager/wizards/qtquickappwizard.cpp new file mode 100644 index 0000000000..1a3ab05c44 --- /dev/null +++ b/src/plugins/qmakeprojectmanager/wizards/qtquickappwizard.cpp @@ -0,0 +1,275 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include "qtquickappwizard.h" + +#include "qtquickapp.h" +#include "qtquickappwizardpages.h" +#include "../qmakeprojectmanagerconstants.h" + +#include +#include +#include +#include + +#include +#include + +namespace QmakeProjectManager { +namespace Internal { + +class QtQuickAppWizardDialog : public AbstractMobileAppWizardDialog +{ + Q_OBJECT + +public: + explicit QtQuickAppWizardDialog(QWidget *parent, const Core::WizardDialogParameters ¶meters, + QtQuickAppWizard::Kind kind); + +protected: + bool validateCurrentPage(); + +private: + QtQuickComponentSetOptionsPage *m_componentOptionsPage; + int m_componentOptionsPageId; + + Utils::WizardProgressItem *m_componentItem; + + friend class QtQuickAppWizard; +}; + +QtQuickAppWizardDialog::QtQuickAppWizardDialog(QWidget *parent, + const Core::WizardDialogParameters ¶meters, + QtQuickAppWizard::Kind kind) + : AbstractMobileAppWizardDialog(parent, + QtSupport::QtVersionNumber(4, 7, 0), + QtSupport::QtVersionNumber(5, INT_MAX, INT_MAX), parameters) +{ + setWindowTitle(tr("New Qt Quick Application")); + setIntroDescription(tr("This wizard generates a Qt Quick application project.")); + + if (kind == QtQuickAppWizard::ImportQml || kind == QtQuickAppWizard::ImportQml2) { //Choose existing qml file + m_componentOptionsPage = new Internal::QtQuickComponentSetOptionsPage; + m_componentOptionsPageId = addPageWithTitle(m_componentOptionsPage, tr("Select existing QML file")); + m_componentItem = wizardProgress()->item(m_componentOptionsPageId); + } + + AbstractMobileAppWizardDialog::addMobilePages(); + + if (kind == QtQuickAppWizard::ImportQml || kind == QtQuickAppWizard::ImportQml2) { + if (targetsPageItem()) + m_componentItem->setNextItems(QList() + << targetsPageItem()); + } +} + +bool QtQuickAppWizardDialog::validateCurrentPage() +{ + if (currentPage() == m_componentOptionsPage) + setIgnoreGenericOptionsPage(false); + return AbstractMobileAppWizardDialog::validateCurrentPage(); +} + +class QtQuickAppWizardPrivate +{ + class QtQuickApp *app; + class QtQuickAppWizardDialog *wizardDialog; + QtQuickAppWizard::Kind kind; + friend class QtQuickAppWizard; +}; + +QtQuickAppWizard::QtQuickAppWizard() + : d(new QtQuickAppWizardPrivate) +{ + setWizardKind(ProjectWizard); + setIcon(QIcon(QLatin1String(QmakeProjectManager::Constants::ICON_QTQUICK_APP))); + setId(QLatin1String("D.QMLA Application")); + setCategory(QLatin1String(ProjectExplorer::Constants::QT_APPLICATION_WIZARD_CATEGORY)); + setDisplayCategory(QLatin1String(ProjectExplorer::Constants::QT_APPLICATION_WIZARD_CATEGORY_DISPLAY)); + + d->app = new QtQuickApp; + d->wizardDialog = 0; +} + +QtQuickAppWizard::~QtQuickAppWizard() +{ + delete d->app; + delete d; +} + +void QtQuickAppWizard::createInstances(ExtensionSystem::IPlugin *plugin) +{ + const QString basicDescription = tr("Creates a Qt Quick 1 application project that can contain " + "both QML and C++ code and includes a QDeclarativeView.\n\n"); + const QString basicDescription2 = tr("Creates a Qt Quick 2 application project that can contain " + "both QML and C++ code and includes a QQuickView.\n\n"); + + Core::FeatureSet basicFeatures = Core::Feature(QtSupport::Constants::FEATURE_QT_QUICK_1); + + QtQuickAppWizard *wizard = new QtQuickAppWizard; + wizard->setQtQuickKind(QtQuick1_1); + wizard->setDisplayName(tr("Qt Quick 1 Application (Built-in Types)")); + wizard->setDescription(basicDescription + tr("The built-in QML types in the QtQuick 1 namespace allow " + "you to write cross-platform applications with " + "a custom look and feel.\n\nRequires Qt 4.8.0 or newer.")); + wizard->setRequiredFeatures(basicFeatures); + plugin->addAutoReleasedObject(wizard); + + + wizard = new QtQuickAppWizard; + wizard->setQtQuickKind(QtQuick2_0); + wizard->setDisplayName(tr("Qt Quick 2 Application (Built-in Types)")); + wizard->setDescription(basicDescription2 + tr("The built-in QML types in the QtQuick 2 namespace allow " + "you to write cross-platform applications with " + "a custom look and feel.\n\nRequires Qt 5.0 or newer.")); + wizard->setRequiredFeatures(Core::Feature(QtSupport::Constants::FEATURE_QT_QUICK_2)); + plugin->addAutoReleasedObject(wizard); + + + wizard = new QtQuickAppWizard; + wizard->setQtQuickKind(ImportQml); + wizard->setDisplayName(tr("Qt Quick 1 Application (from Existing QML File)")); + wizard->setDescription(basicDescription + tr("Creates a deployable Qt Quick application from " + "existing QML files. All files and directories that " + "reside in the same directory as the main .qml file " + "are deployed. You can modify the contents of the " + "directory any time before deploying.\n\nRequires Qt 4.8.0 or newer.")); + wizard->setRequiredFeatures(basicFeatures); + plugin->addAutoReleasedObject(wizard); + + + wizard = new QtQuickAppWizard; + wizard->setQtQuickKind(ImportQml2); + wizard->setDisplayName(tr("Qt Quick 2 Application (from Existing QML File)")); + wizard->setDescription(basicDescription2 + tr("Creates a deployable Qt Quick application from " + "existing QML files. All files and directories that " + "reside in the same directory as the main .qml file " + "are deployed. You can modify the contents of the " + "directory any time before deploying.\n\nRequires Qt 5.0 or newer.")); + + wizard->setRequiredFeatures(Core::Feature(QtSupport::Constants::FEATURE_QT_QUICK_2)); + plugin->addAutoReleasedObject(wizard); + + wizard = new QtQuickAppWizard; + wizard->setQtQuickKind(QtQuick_Controls_1_0); + + wizard->setDisplayName(tr("Qt Quick 2 Application (Qt Quick Controls)")); + wizard->setDescription(basicDescription + tr("Creates a deployable Qt Quick application using " + "Qt Quick Controls. All files and directories that " + "reside in the same directory as the main .qml file " + "are deployed. You can modify the contents of the " + "directory any time before deploying.\n\nRequires Qt 5.1.0 or newer.")); + wizard->setRequiredFeatures(Core::Feature(QtSupport::Constants::FEATURE_QT_QUICK_2) + | Core::Feature(QtSupport::Constants::FEATURE_QT_QUICK_CONTROLS)); + plugin->addAutoReleasedObject(wizard); +} + +AbstractMobileAppWizardDialog *QtQuickAppWizard::createWizardDialogInternal(QWidget *parent, + const Core::WizardDialogParameters ¶meters) const +{ + d->wizardDialog = new QtQuickAppWizardDialog(parent, parameters, qtQuickKind()); + + switch (qtQuickKind()) { + case QtQuick1_1: + d->app->setComponentSet(QtQuickApp::QtQuick10Components); + d->app->setMainQml(QtQuickApp::ModeGenerate); + break; + case ImportQml: + d->app->setComponentSet(QtQuickApp::QtQuick10Components); + d->app->setMainQml(QtQuickApp::ModeImport); + break; + case ImportQml2: + d->app->setComponentSet(QtQuickApp::QtQuick20Components); + d->app->setMainQml(QtQuickApp::ModeImport); + break; + case QtQuick2_0: + d->app->setComponentSet(QtQuickApp::QtQuick20Components); + d->app->setMainQml(QtQuickApp::ModeGenerate); + break; + case QtQuick_Controls_1_0: + d->app->setComponentSet(QtQuickApp::QtQuickControls10); + d->app->setMainQml(QtQuickApp::ModeGenerate); + break; + default: + qWarning() << "QtQuickAppWizard illegal subOption:" << qtQuickKind(); + break; + } + + return d->wizardDialog; +} + +void QtQuickAppWizard::projectPathChanged(const QString &path) const +{ + if (d->wizardDialog->targetsPage()) + d->wizardDialog->targetsPage()->setProjectPath(path); +} + +void QtQuickAppWizard::prepareGenerateFiles(const QWizard *w, + QString *errorMessage) const +{ + Q_UNUSED(errorMessage) + const QtQuickAppWizardDialog *wizard = qobject_cast(w); + + if (d->app->mainQmlMode() == QtQuickApp::ModeGenerate) { + d->app->setMainQml(QtQuickApp::ModeGenerate); + } else { + const QString mainQmlFile = wizard->m_componentOptionsPage->mainQmlFile(); + d->app->setMainQml(QtQuickApp::ModeImport, mainQmlFile); + } +} + +void QtQuickAppWizard::setQtQuickKind(QtQuickAppWizard::Kind kind) +{ + d->kind = kind; +} + +QtQuickAppWizard::Kind QtQuickAppWizard::qtQuickKind() const +{ + return d->kind; +} + +QString QtQuickAppWizard::fileToOpenPostGeneration() const +{ + return d->app->path(QtQuickApp::MainQml); +} + +AbstractMobileApp *QtQuickAppWizard::app() const +{ + return d->app; +} + +AbstractMobileAppWizardDialog *QtQuickAppWizard::wizardDialog() const +{ + return d->wizardDialog; +} + +} // namespace Internal +} // namespace QmakeProjectManager + +#include "qtquickappwizard.moc" -- cgit v1.2.1