diff --git a/src/plugins/qt4projectmanager/wizards/consoleappwizarddialog.cpp b/src/plugins/qt4projectmanager/wizards/consoleappwizarddialog.cpp index 1ed287c44ddf1bd73b0e8fa6fa10a417e6925100..9a67aa42e2e9c1214ee525ee0c9e925188204429 100644 --- a/src/plugins/qt4projectmanager/wizards/consoleappwizarddialog.cpp +++ b/src/plugins/qt4projectmanager/wizards/consoleappwizarddialog.cpp @@ -68,8 +68,8 @@ QtProjectParameters ConsoleAppWizardDialog::parameters() const rc.fileName = projectName(); rc.path = path(); - rc.selectedModules = selectedModules(); - rc.deselectedModules = deselectedModules(); + rc.selectedModules = selectedModulesList(); + rc.deselectedModules = deselectedModulesList(); return rc; } diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp b/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp index ab065de3af7a0ade0ccbd8a8435e625e5d163512..b13f4cbca68569cdf1757a9235ceff6f431440c0 100644 --- a/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp +++ b/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp @@ -98,10 +98,11 @@ QtProjectParameters GuiAppWizardDialog::projectParameters() const { QtProjectParameters rc; rc.type = QtProjectParameters::GuiApp; + rc.flags |= QtProjectParameters::WidgetsRequiredFlag; rc.fileName = projectName(); rc.path = path(); - rc.selectedModules = selectedModules(); - rc.deselectedModules = deselectedModules(); + rc.selectedModules = selectedModulesList(); + rc.deselectedModules = deselectedModulesList(); return rc; } diff --git a/src/plugins/qt4projectmanager/wizards/librarywizarddialog.cpp b/src/plugins/qt4projectmanager/wizards/librarywizarddialog.cpp index 96e892aa2541488e76e3fa895faa73886da12cd8..49ec4e9673fef710c1bd6bd43868ac29390573ff 100644 --- a/src/plugins/qt4projectmanager/wizards/librarywizarddialog.cpp +++ b/src/plugins/qt4projectmanager/wizards/librarywizarddialog.cpp @@ -85,9 +85,9 @@ static const PluginBaseClasses *findPluginBaseClass(const QString &name) // return dependencies of a plugin as a line ready for the 'QT=' line in a pro // file -static QString pluginDependencies(const PluginBaseClasses *plb) +static QStringList pluginDependencies(const PluginBaseClasses *plb) { - QString dependencies; + QStringList dependencies; const QChar blank = QLatin1Char(' '); // Find the module names and convert to ids QStringList pluginModules= plb->dependentModules ? @@ -95,9 +95,7 @@ static QString pluginDependencies(const PluginBaseClasses *plb) QStringList(); pluginModules.push_back(QLatin1String(plb->module)); foreach (const QString &module, pluginModules) { - if (!dependencies.isEmpty()) - dependencies += blank; - dependencies += ModulesPage::idOfModule(module); + dependencies.append(ModulesPage::idOfModule(module)); } return dependencies; } @@ -303,8 +301,8 @@ QtProjectParameters LibraryWizardDialog::parameters() const } } else { // Modules from modules page - rc.selectedModules = selectedModules(); - rc.deselectedModules = deselectedModules(); + rc.selectedModules = selectedModulesList(); + rc.deselectedModules = deselectedModulesList(); } return rc; } diff --git a/src/plugins/qt4projectmanager/wizards/modulespage.cpp b/src/plugins/qt4projectmanager/wizards/modulespage.cpp index 94dc88193aded65042a130d27fd20c77ee3cbbc3..ffb8a7d3c551f8dfa3bbc37ce5165fdd21d08eeb 100644 --- a/src/plugins/qt4projectmanager/wizards/modulespage.cpp +++ b/src/plugins/qt4projectmanager/wizards/modulespage.cpp @@ -91,12 +91,12 @@ QString ModulesPage::idOfModule(const QString &module) return QString(); } -QString ModulesPage::selectedModules() const +QStringList ModulesPage::selectedModulesList() const { return modules(true); } -QString ModulesPage::deselectedModules() const +QStringList ModulesPage::deselectedModulesList() const { return modules(false); } @@ -115,7 +115,7 @@ void ModulesPage::setModuleEnabled(const QString &module, bool enabled) const checkBox->setEnabled(enabled); } -QString ModulesPage::modules(bool selected) const +QStringList ModulesPage::modules(bool selected) const { QStringList modules; foreach (const QString &module, QtModulesInfo::modules()) { @@ -123,5 +123,5 @@ QString ModulesPage::modules(bool selected) const && selected == field(module).toBool()) modules << module; } - return modules.join(QString(QLatin1Char(' '))); + return modules; } diff --git a/src/plugins/qt4projectmanager/wizards/modulespage.h b/src/plugins/qt4projectmanager/wizards/modulespage.h index e6e922baee0cd4e1093c8367874baa4626a57ac0..3654ae638221aa51a672ea40b34e258427ccdb1a 100644 --- a/src/plugins/qt4projectmanager/wizards/modulespage.h +++ b/src/plugins/qt4projectmanager/wizards/modulespage.h @@ -34,6 +34,7 @@ #define MODULESPAGE_H #include <QtCore/QMap> +#include <QtCore/QStringList> #include <QtGui/QWizard> QT_BEGIN_NAMESPACE @@ -49,8 +50,10 @@ class ModulesPage : public QWizardPage public: explicit ModulesPage(QWidget* parent = 0); - QString selectedModules() const; - QString deselectedModules() const; + + QStringList selectedModulesList() const; + QStringList deselectedModulesList() const; + void setModuleSelected(const QString &module, bool selected = true) const; void setModuleEnabled(const QString &module, bool enabled = true) const; @@ -59,7 +62,7 @@ public: private: QMap<QString, QCheckBox*> m_moduleCheckBoxMap; - QString modules(bool selected = true) const; + QStringList modules(bool selected = true) const; }; } // namespace Internal diff --git a/src/plugins/qt4projectmanager/wizards/qtprojectparameters.cpp b/src/plugins/qt4projectmanager/wizards/qtprojectparameters.cpp index db6e8e24d83c813ec1b218866bac799db3cb4890..d96b870840755cc71171a0fb685a357ed382d520 100644 --- a/src/plugins/qt4projectmanager/wizards/qtprojectparameters.cpp +++ b/src/plugins/qt4projectmanager/wizards/qtprojectparameters.cpp @@ -44,7 +44,7 @@ namespace Internal { // ----------- QtProjectParameters QtProjectParameters::QtProjectParameters() - : type(ConsoleApp) + : type(ConsoleApp), flags(WidgetsRequiredFlag), qtVersionSupport(SupportQt4And5) { } @@ -57,12 +57,37 @@ QString QtProjectParameters::projectPath() const return rc; } +// Write out a QT module line. +static inline void writeQtModulesList(QTextStream &str, + const QStringList &modules, + char op ='+') +{ + if (const int size = modules.size()) { + str << "QT " << op << "= "; + for (int i =0; i < size; ++i) { + if (i) + str << ' '; + str << modules.at(i); + } + str << "\n\n"; + } +} + void QtProjectParameters::writeProFile(QTextStream &str) const { - if (!selectedModules.isEmpty()) - str << "QT += " << selectedModules << "\n\n"; - if (!deselectedModules.isEmpty()) - str << "QT -= " << deselectedModules << "\n\n"; + QStringList allSelectedModules = selectedModules; + // Handling of widgets module. + const bool addWidgetsModule = + (flags & WidgetsRequiredFlag) && qtVersionSupport != SupportQt4Only + && !allSelectedModules.contains(QLatin1String("widgets")); + + if (addWidgetsModule && qtVersionSupport == SupportQt5Only) + allSelectedModules.append(QLatin1String("widgets")); + writeQtModulesList(str, allSelectedModules, '+'); + writeQtModulesList(str, deselectedModules, '-'); + if (addWidgetsModule && qtVersionSupport == SupportQt4And5) + str << "greaterThan(QT_MAJOR_VERSION, 4): QT += widgets\n\n"; + const QString &effectiveTarget = target.isEmpty() ? fileName : target; if (!effectiveTarget.isEmpty()) str << "TARGET = " << effectiveTarget << '\n'; diff --git a/src/plugins/qt4projectmanager/wizards/qtprojectparameters.h b/src/plugins/qt4projectmanager/wizards/qtprojectparameters.h index 8fa528620dd41407b48511cf1813528bbf6cc8f1..b1ff3295b98539c52aba214c8b7abae4146207cf 100644 --- a/src/plugins/qt4projectmanager/wizards/qtprojectparameters.h +++ b/src/plugins/qt4projectmanager/wizards/qtprojectparameters.h @@ -51,6 +51,8 @@ QString createMacro(const QString &name, const QString &suffix); struct QtProjectParameters { enum Type { ConsoleApp, GuiApp, StaticLibrary, SharedLibrary, Qt4Plugin, EmptyProject }; + enum QtVersionSupport { SupportQt4And5, SupportQt4Only, SupportQt5Only }; + enum Flags { WidgetsRequiredFlag = 0x1 }; QtProjectParameters(); // Return project path as "path/name" @@ -64,11 +66,13 @@ struct QtProjectParameters { static QString libraryMacro(const QString &projectName); Type type; + unsigned flags; + QtVersionSupport qtVersionSupport; QString fileName; QString target; QString path; - QString selectedModules; - QString deselectedModules; + QStringList selectedModules; + QStringList deselectedModules; QString targetDirectory; }; diff --git a/src/plugins/qt4projectmanager/wizards/qtwizard.cpp b/src/plugins/qt4projectmanager/wizards/qtwizard.cpp index 8229f440cca7deb9a2888623c2e3f8118037383e..26e8580ea46420e1d2b438b221e6ad4ac69c3772 100644 --- a/src/plugins/qt4projectmanager/wizards/qtwizard.cpp +++ b/src/plugins/qt4projectmanager/wizards/qtwizard.cpp @@ -260,35 +260,37 @@ int BaseQt4ProjectWizardDialog::addTargetSetupPage(QSet<QString> targets, bool m return id; } -QString BaseQt4ProjectWizardDialog::selectedModules() const +QStringList BaseQt4ProjectWizardDialog::selectedModulesList() const { - return m_modulesPage ? m_modulesPage->selectedModules() : m_selectedModules; + return m_modulesPage ? m_modulesPage->selectedModulesList() : m_selectedModules; } void BaseQt4ProjectWizardDialog::setSelectedModules(const QString &modules, bool lock) { + const QStringList modulesList = modules.split(QLatin1Char(' ')); if (m_modulesPage) { - foreach(const QString &module, modules.split(QLatin1Char(' '))) { + foreach (const QString &module, modulesList) { m_modulesPage->setModuleSelected(module, true); m_modulesPage->setModuleEnabled(module, !lock); } } else { - m_selectedModules = modules; + m_selectedModules = modulesList; } } -QString BaseQt4ProjectWizardDialog::deselectedModules() const +QStringList BaseQt4ProjectWizardDialog::deselectedModulesList() const { - return m_modulesPage ? m_modulesPage->deselectedModules() : m_deselectedModules; + return m_modulesPage ? m_modulesPage->deselectedModulesList() : m_deselectedModules; } void BaseQt4ProjectWizardDialog::setDeselectedModules(const QString &modules) { + const QStringList modulesList = modules.split(QLatin1Char(' ')); if (m_modulesPage) { - foreach(const QString &module, modules.split(QLatin1Char(' '))) + foreach (const QString &module, modulesList) m_modulesPage->setModuleSelected(module, false); } else { - m_deselectedModules = modules; + m_deselectedModules = modulesList; } } diff --git a/src/plugins/qt4projectmanager/wizards/qtwizard.h b/src/plugins/qt4projectmanager/wizards/qtwizard.h index edc7f9b7b7a0ff0e4d02b7f03b1781a0502960e9..c37249c58e150127678fe244f320ee05ec7bca64 100644 --- a/src/plugins/qt4projectmanager/wizards/qtwizard.h +++ b/src/plugins/qt4projectmanager/wizards/qtwizard.h @@ -134,10 +134,10 @@ public: static QSet<QString> desktopTarget(); - QString selectedModules() const; + QStringList selectedModulesList() const; void setSelectedModules(const QString &, bool lock = false); - QString deselectedModules() const; + QStringList deselectedModulesList() const; void setDeselectedModules(const QString &); bool writeUserFile(const QString &proFileName) const; @@ -152,8 +152,8 @@ private: ModulesPage *m_modulesPage; TargetSetupPage *m_targetSetupPage; - QString m_selectedModules; - QString m_deselectedModules; + QStringList m_selectedModules; + QStringList m_deselectedModules; QSet<QString> m_targets; }; diff --git a/src/plugins/qt4projectmanager/wizards/testwizarddialog.cpp b/src/plugins/qt4projectmanager/wizards/testwizarddialog.cpp index b3e7d76cdc9c7cbdc577411667adf230f2b8f3f5..f758f164988a1bbd8f3937f9d938b9c6b96367d3 100644 --- a/src/plugins/qt4projectmanager/wizards/testwizarddialog.cpp +++ b/src/plugins/qt4projectmanager/wizards/testwizarddialog.cpp @@ -91,8 +91,8 @@ QtProjectParameters TestWizardDialog::projectParameters() const rc.path = path(); // Name binary "tst_xx" after the main source rc.target = QFileInfo(m_testPage->sourcefileName()).baseName(); - rc.selectedModules = selectedModules(); - rc.deselectedModules = deselectedModules(); + rc.selectedModules = selectedModulesList(); + rc.deselectedModules = deselectedModulesList(); return rc; }