forked from qt-creator/qt-creator
Wizards: changes the structure of Wizards
This patch introduces platforms as a top level topic when choosing a wizard. Also I changed the categories and priorities. Details: 1. I did change the way the dialog/view is structured in newdialog.cpp 2. I added platformName() and supportsPlatform() to BaseQtVersion. I needed two functions because the Simulator does not provide a platform and therefore has no platformName but supports two platforms. I still have to turn the platform names into proper constants. 3. I changed the categories and priorities to get the layout that was discussed. (I had to touch quite alot of files but this is mostly trivial) 4. I added a combobox that allows filtering for platforms. 5. I added flags() to IWizard to indicate that a wizard is platform independent. Change-Id: I86c7ad628a431ad06505c76580885c6e6c3ddc23 Reviewed-by: Alessandro Portale <alessandro.portale@nokia.com>
This commit is contained in:
committed by
Alessandro Portale
parent
ea23486847
commit
95a028e835
@@ -37,7 +37,7 @@ the project file goes last.
|
||||
The "class" and "firstpage" attributes specify that it is a Qt 4 wizard and
|
||||
leave room for the Qt 4 target page.
|
||||
-->
|
||||
<wizard version="1" kind="project" firstpage="10" id="S.Plain C (CMake)" category="I.Projects" featuresRequired="QtSupport.Wizards.FeatureGenericCppEntryPoint">
|
||||
<wizard version="1" kind="project" firstpage="10" id="S.Plain C (CMake)" category="I.Projects" featuresRequired="QtSupport.Wizards.FeatureGenericCppEntryPoint" platformIndependent="true">
|
||||
<icon>console.png</icon>
|
||||
<description>Creates a plain C project using CMake, not using the Qt library.</description>
|
||||
<displayname>Plain C Project (CMake Build)</displayname>;
|
||||
|
||||
@@ -39,12 +39,12 @@ leave room for the Qt 4 target page.
|
||||
-->
|
||||
<wizard version="1" kind="project"
|
||||
class="qt4project" firstpage="10"
|
||||
id="R.Plain C" category="I.Projects"
|
||||
id="R.Plain C" category="H.QtProjects"
|
||||
featuresRequired="QtSupport.Wizards.FeatureGenericCppEntryPoint">
|
||||
<icon>console.png</icon>
|
||||
<description>Creates a plain C project using qmake, not using the Qt library.</description>
|
||||
<displayname>Plain C Project</displayname>;
|
||||
<displaycategory>Non-Qt Project</displaycategory>
|
||||
<displaycategory>Other Projects</displaycategory>
|
||||
<files>
|
||||
<file source="main.c" openeditor="true"/>
|
||||
<file source="project.pro" target="%ProjectName%.pro" openproject="true"/>
|
||||
|
||||
@@ -37,7 +37,7 @@ the project file goes last.
|
||||
The "class" and "firstpage" attributes specify that it is a Qt 4 wizard and
|
||||
leave room for the Qt 4 target page.
|
||||
-->
|
||||
<wizard version="1" kind="project" firstpage="10" id="S.Plain C++ (CMake)" category="I.Projects" featuresRequired="QtSupport.Wizards.FeatureGenericCppEntryPoint">
|
||||
<wizard version="1" kind="project" firstpage="10" id="S.Plain C++ (CMake)" category="I.Projects" featuresRequired="QtSupport.Wizards.FeatureGenericCppEntryPoint" platformIndependent="true">
|
||||
<icon>console.png</icon>
|
||||
<description>Creates a plain C++ project using CMake, not using the Qt library.</description>
|
||||
<displayname>Plain C++ Project (CMake Build)</displayname>;
|
||||
|
||||
@@ -39,12 +39,12 @@ leave room for the Qt 4 target page.
|
||||
-->
|
||||
<wizard version="1" kind="project"
|
||||
class="qt4project" firstpage="10"
|
||||
id="R.Plain C++" category="I.Projects"
|
||||
id="R.Plain C++" category="H.QtProjects"
|
||||
featuresRequired="QtSupport.Wizards.FeatureGenericCppEntryPoint">
|
||||
<icon>console.png</icon>
|
||||
<description>Creates a plain C++ project using qmake, not using the Qt library.</description>
|
||||
<displayname>Plain C++ Project</displayname>;
|
||||
<displaycategory>Non-Qt Project</displaycategory>
|
||||
<displaycategory>Other Projects</displaycategory>
|
||||
<files>
|
||||
<file source="main.cpp" openeditor="true"/>
|
||||
<file source="project.pro" target="%ProjectName%.pro" openproject="true"/>
|
||||
|
||||
@@ -39,12 +39,12 @@ leave room for the Qt 4 target page.
|
||||
-->
|
||||
<wizard version="1" kind="project"
|
||||
class="qt4project" firstpage="10"
|
||||
id="QmlExtensionPlugin" category="C.Projects"
|
||||
id="QmlExtensionPlugin" category="G.Libraries"
|
||||
featuresRequired="QtSupport.Wizards.FeatureQtQuick,QtSupport.Wizards.FeatureQtQuick.1">
|
||||
<icon>lib.png</icon>
|
||||
<description>Creates a C++ plugin that makes it possible to offer extensions that can be loaded dynamically into applications using the QDeclarativeEngine class.</description>
|
||||
<displayname>Custom QML Extension Plugin</displayname>
|
||||
<displaycategory>QML Extension Plugin</displaycategory>
|
||||
<displaycategory>Libraries</displaycategory>
|
||||
<files>
|
||||
<file source="qmldir" target="qmldir"/>
|
||||
<file source="plugin.h" target="%ProjectName:l%_plugin.%CppHeaderSuffix%"/>
|
||||
|
||||
@@ -39,12 +39,12 @@ leave room for the Qt 4 target page.
|
||||
-->
|
||||
<wizard version="1" kind="project"
|
||||
class="qt4project" firstpage="10"
|
||||
id="R.QtCreatorPlugin" category="F.QtProjects"
|
||||
featuresRequired="QtSupport.Wizards.FeatureGenericCppEntryPoint,QtSupport.Wizards.FeatureQt">
|
||||
id="R.QtCreatorPlugin" category="G.Libraries"
|
||||
featuresRequired="QtSupport.Wizards.FeatureGenericCppEntryPoint,QtSupport.Wizards.FeatureQt,QtSupport.Wizards.FeatureDesktop">
|
||||
<icon>qtcreator_logo_24.png</icon>
|
||||
<description>Creates a custom Qt Creator plugin.</description>
|
||||
<displayname>Qt Creator Plugin</displayname>;
|
||||
<displaycategory>Other Qt Project</displaycategory>
|
||||
<displaycategory>Libraries</displaycategory>
|
||||
<files>
|
||||
<file source="myplugin.pro" target="%PluginName:l%.pro" openproject="true"/>
|
||||
<file source="MyPlugin.pluginspec.in" target="%PluginName%.pluginspec.in" openeditor="true"/>
|
||||
|
||||
@@ -87,6 +87,7 @@ public:
|
||||
QString category;
|
||||
QString displayCategory;
|
||||
Core::FeatureSet requiredFeatures;
|
||||
Core::IWizard::WizardFlags flags;
|
||||
};
|
||||
|
||||
BaseFileWizardParameterData::BaseFileWizardParameterData(IWizard::WizardKind k) :
|
||||
@@ -232,6 +233,15 @@ void BaseFileWizardParameters::setDisplayCategory(const QString &v)
|
||||
m_d->displayCategory = v;
|
||||
}
|
||||
|
||||
Core::IWizard::WizardFlags BaseFileWizardParameters::flags() const
|
||||
{
|
||||
return m_d->flags;
|
||||
}
|
||||
|
||||
void BaseFileWizardParameters::setFlags(Core::IWizard::WizardFlags flags)
|
||||
{
|
||||
m_d->flags = flags;
|
||||
}
|
||||
/*!
|
||||
\class Core::Internal::WizardEventLoop
|
||||
\brief Special event loop that runs a QWizard and terminates if the page changes.
|
||||
@@ -407,7 +417,7 @@ QString BaseFileWizard::displayCategory() const
|
||||
return d->m_parameters.displayCategory();
|
||||
}
|
||||
|
||||
void BaseFileWizard::runWizard(const QString &path, QWidget *parent)
|
||||
void BaseFileWizard::runWizard(const QString &path, QWidget *parent, const QString &platform)
|
||||
{
|
||||
QTC_ASSERT(!path.isEmpty(), return);
|
||||
|
||||
@@ -437,11 +447,10 @@ void BaseFileWizard::runWizard(const QString &path, QWidget *parent)
|
||||
// Create dialog and run it. Ensure that the dialog is deleted when
|
||||
// leaving the func, but not before the IFileWizardExtension::process
|
||||
// has been called
|
||||
const QScopedPointer<QWizard> wizard(createWizardDialog(parent,
|
||||
WizardDialogParameters(path,
|
||||
allExtensionPages,
|
||||
QString(),
|
||||
requiredFeatures())));
|
||||
const QScopedPointer<QWizard> wizard(createWizardDialog(parent, WizardDialogParameters(path,
|
||||
allExtensionPages,
|
||||
platform,
|
||||
requiredFeatures())));
|
||||
QTC_ASSERT(!wizard.isNull(), return);
|
||||
|
||||
GeneratedFiles files;
|
||||
@@ -525,6 +534,11 @@ Core::FeatureSet BaseFileWizard::requiredFeatures() const
|
||||
return d->m_parameters.requiredFeatures();
|
||||
}
|
||||
|
||||
Core::IWizard::WizardFlags BaseFileWizard::flags() const
|
||||
{
|
||||
return d->m_parameters.flags();
|
||||
}
|
||||
|
||||
/*!
|
||||
\fn virtual QWizard *Core::BaseFileWizard::createWizardDialog(QWidget *parent,
|
||||
const QString &defaultPath,
|
||||
|
||||
@@ -94,6 +94,8 @@ public:
|
||||
Core::FeatureSet requiredFeatures() const;
|
||||
void setRequiredFeatures(Core::FeatureSet features);
|
||||
|
||||
Core::IWizard::WizardFlags flags() const;
|
||||
void setFlags(Core::IWizard::WizardFlags flags);
|
||||
private:
|
||||
QSharedDataPointer<BaseFileWizardParameterData> m_d;
|
||||
};
|
||||
@@ -148,8 +150,9 @@ public:
|
||||
virtual QString category() const;
|
||||
virtual QString displayCategory() const;
|
||||
|
||||
virtual void runWizard(const QString &path, QWidget *parent);
|
||||
virtual void runWizard(const QString &path, QWidget *parent, const QString &platform);
|
||||
virtual Core::FeatureSet requiredFeatures() const;
|
||||
virtual WizardFlags flags() const;
|
||||
|
||||
static QString buildFileName(const QString &path, const QString &baseName, const QString &extension);
|
||||
static void setupWizard(QWizard *);
|
||||
|
||||
@@ -178,14 +178,52 @@ QList<IWizard*> IWizard::wizardsOfKind(WizardKind kind)
|
||||
return findWizards(WizardKindPredicate(kind));
|
||||
}
|
||||
|
||||
bool IWizard::isAvailable() const
|
||||
bool IWizard::isAvailable(const QString &platformName) const
|
||||
{
|
||||
FeatureSet availableFeatures;
|
||||
|
||||
const QList<Core::IFeatureProvider*> featureManagers = ExtensionSystem::PluginManager::instance()->getObjects<Core::IFeatureProvider>();
|
||||
|
||||
foreach (const Core::IFeatureProvider *featureManager, featureManagers)
|
||||
availableFeatures |= featureManager->availableFeatures();
|
||||
availableFeatures |= featureManager->availableFeatures(platformName);
|
||||
|
||||
return availableFeatures.contains(requiredFeatures());
|
||||
}
|
||||
|
||||
QStringList IWizard::supportedPlatforms() const
|
||||
{
|
||||
QStringList stringList;
|
||||
|
||||
foreach (const QString &platform, allAvailablePlatforms()) {
|
||||
if (isAvailable(platform))
|
||||
stringList.append(platform);
|
||||
}
|
||||
|
||||
return stringList;
|
||||
}
|
||||
|
||||
QStringList IWizard::allAvailablePlatforms()
|
||||
{
|
||||
QStringList platforms;
|
||||
|
||||
const QList<Core::IFeatureProvider*> featureManagers =
|
||||
ExtensionSystem::PluginManager::instance()->getObjects<Core::IFeatureProvider>();
|
||||
|
||||
foreach (const Core::IFeatureProvider *featureManager, featureManagers)
|
||||
platforms.append(featureManager->availablePlatforms());
|
||||
|
||||
return platforms;
|
||||
}
|
||||
|
||||
QString IWizard::displayNameForPlatform(const QString &string)
|
||||
{
|
||||
const QList<Core::IFeatureProvider*> featureManagers =
|
||||
ExtensionSystem::PluginManager::instance()->getObjects<Core::IFeatureProvider>();
|
||||
|
||||
foreach (const Core::IFeatureProvider *featureManager, featureManagers) {
|
||||
QString displayName = featureManager->displayNameForPlatform(string);
|
||||
if (!displayName.isEmpty())
|
||||
return displayName;
|
||||
}
|
||||
return QString();
|
||||
}
|
||||
|
||||
@@ -55,6 +55,10 @@ public:
|
||||
ProjectWizard = 0x04
|
||||
};
|
||||
Q_DECLARE_FLAGS(WizardKinds, WizardKind)
|
||||
enum WizardFlag {
|
||||
PlatformIndependent = 0x01
|
||||
};
|
||||
Q_DECLARE_FLAGS(WizardFlags, WizardFlag)
|
||||
|
||||
IWizard(QObject *parent = 0) : QObject(parent) {}
|
||||
virtual ~IWizard() {}
|
||||
@@ -69,19 +73,24 @@ public:
|
||||
virtual QString displayCategory() const = 0;
|
||||
|
||||
virtual FeatureSet requiredFeatures() const = 0;
|
||||
virtual WizardFlags flags() const = 0;
|
||||
|
||||
virtual void runWizard(const QString &path, QWidget *parent) = 0;
|
||||
virtual void runWizard(const QString &path, QWidget *parent, const QString &platform) = 0;
|
||||
|
||||
bool isAvailable() const;
|
||||
bool isAvailable(const QString &platformName) const;
|
||||
QStringList supportedPlatforms() const;
|
||||
|
||||
// Utility to find all registered wizards
|
||||
static QList<IWizard*> allWizards();
|
||||
// Utility to find all registered wizards of a certain kind
|
||||
static QList<IWizard*> wizardsOfKind(WizardKind kind);
|
||||
static QStringList allAvailablePlatforms();
|
||||
static QString displayNameForPlatform(const QString &string);
|
||||
};
|
||||
|
||||
} // namespace Core
|
||||
|
||||
Q_DECLARE_OPERATORS_FOR_FLAGS(Core::IWizard::WizardKinds)
|
||||
Q_DECLARE_OPERATORS_FOR_FLAGS(Core::IWizard::WizardFlags)
|
||||
|
||||
#endif // IWIZARD_H
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#include <coreplugin/featureprovider.h>
|
||||
|
||||
#include <QtGui/QAbstractProxyModel>
|
||||
#include <QtGui/QSortFilterProxyModel>
|
||||
#include <QtGui/QItemSelectionModel>
|
||||
#include <QtGui/QHeaderView>
|
||||
#include <QtGui/QPushButton>
|
||||
@@ -55,6 +56,49 @@ namespace {
|
||||
|
||||
const int ICON_SIZE = 22;
|
||||
|
||||
struct WizardContainer
|
||||
{
|
||||
WizardContainer() : wizard(0), wizardOption(0) {}
|
||||
WizardContainer(Core::IWizard *w, int i): wizard(w), wizardOption(i) {}
|
||||
Core::IWizard *wizard;
|
||||
int wizardOption;
|
||||
};
|
||||
|
||||
inline Core::IWizard *wizardOfItem(const QStandardItem *item = 0)
|
||||
{
|
||||
if (!item)
|
||||
return 0;
|
||||
return item->data(Qt::UserRole).value<WizardContainer>().wizard;
|
||||
}
|
||||
|
||||
class PlatformFilterProxyModel : public QSortFilterProxyModel
|
||||
{
|
||||
// Q_OBJECT
|
||||
public:
|
||||
PlatformFilterProxyModel(QObject *parent = 0): QSortFilterProxyModel(parent) {}
|
||||
|
||||
void setPlatform(const QString& platform)
|
||||
{
|
||||
m_platform = platform;
|
||||
invalidateFilter();
|
||||
}
|
||||
|
||||
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
|
||||
{
|
||||
if (!sourceParent.isValid())
|
||||
return true;
|
||||
|
||||
QModelIndex sourceIndex = sourceModel()->index(sourceRow, 0, sourceParent);
|
||||
Core::IWizard *wizard = wizardOfItem(qobject_cast<QStandardItemModel*>(sourceModel())->itemFromIndex(sourceIndex));
|
||||
if (wizard)
|
||||
return wizard->isAvailable(m_platform);
|
||||
|
||||
return true;
|
||||
}
|
||||
private:
|
||||
QString m_platform;
|
||||
};
|
||||
|
||||
class TwoLevelProxyModel : public QAbstractProxyModel
|
||||
{
|
||||
// Q_OBJECT
|
||||
@@ -139,15 +183,9 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
inline Core::IWizard *wizardOfItem(const QStandardItem *item = 0)
|
||||
{
|
||||
if (!item)
|
||||
return 0;
|
||||
return item->data(Qt::UserRole).value<Core::IWizard*>();
|
||||
}
|
||||
|
||||
}
|
||||
Q_DECLARE_METATYPE(WizardContainer)
|
||||
|
||||
using namespace Core;
|
||||
using namespace Core::Internal;
|
||||
@@ -166,9 +204,12 @@ NewDialog::NewDialog(QWidget *parent) :
|
||||
m_okButton->setText(tr("&Choose..."));
|
||||
|
||||
m_model = new QStandardItemModel(this);
|
||||
m_proxyModel = new TwoLevelProxyModel(this);
|
||||
m_proxyModel->setSourceModel(m_model);
|
||||
m_ui->templateCategoryView->setModel(m_proxyModel);
|
||||
m_twoLevelProxyModel = new TwoLevelProxyModel(this);
|
||||
m_twoLevelProxyModel->setSourceModel(m_model);
|
||||
m_filterProxyModel = new PlatformFilterProxyModel(this);
|
||||
m_filterProxyModel->setSourceModel(m_model);
|
||||
|
||||
m_ui->templateCategoryView->setModel(m_twoLevelProxyModel);
|
||||
m_ui->templateCategoryView->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
m_ui->templateCategoryView->setItemDelegate(new FancyTopLevelDelegate);
|
||||
|
||||
@@ -188,6 +229,8 @@ NewDialog::NewDialog(QWidget *parent) :
|
||||
|
||||
connect(m_okButton, SIGNAL(clicked()), this, SLOT(okButtonClicked()));
|
||||
connect(m_ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
|
||||
|
||||
connect(m_ui->comboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(setSelectedPlatform(QString)));
|
||||
}
|
||||
|
||||
// Sort by category. id
|
||||
@@ -204,32 +247,44 @@ void NewDialog::setWizards(QList<IWizard*> wizards)
|
||||
|
||||
qStableSort(wizards.begin(), wizards.end(), wizardLessThan);
|
||||
|
||||
|
||||
CategoryItemMap categories;
|
||||
CategoryItemMap platformMap;
|
||||
|
||||
m_model->clear();
|
||||
QStandardItem *parentItem = m_model->invisibleRootItem();
|
||||
|
||||
QStandardItem *projectKindItem = new QStandardItem(tr("Projects"));
|
||||
projectKindItem->setData(IWizard::ProjectWizard, Qt::UserRole);
|
||||
projectKindItem->setFlags(0); // disable item to prevent focus
|
||||
QStandardItem *filesClassesKindItem = new QStandardItem(tr("Files and Classes"));
|
||||
filesClassesKindItem->setData(IWizard::FileWizard, Qt::UserRole);
|
||||
filesClassesKindItem->setFlags(0); // disable item to prevent focus
|
||||
QStandardItem *parentItem = m_model->invisibleRootItem();
|
||||
|
||||
parentItem->appendRow(projectKindItem);
|
||||
parentItem->appendRow(filesClassesKindItem);
|
||||
|
||||
if (m_dummyIcon.isNull()) {
|
||||
m_dummyIcon = QPixmap(ICON_SIZE, ICON_SIZE);
|
||||
m_dummyIcon.fill(Qt::transparent);
|
||||
m_dummyIcon = QIcon(QLatin1String(Core::Constants::ICON_NEWFILE));
|
||||
}
|
||||
|
||||
QStringList availablePlatforms = IWizard::allAvailablePlatforms();
|
||||
|
||||
if (availablePlatforms.count() > 1) {
|
||||
m_ui->comboBox->addItem(tr("All templates"), QString());
|
||||
foreach (const QString &platform, availablePlatforms) {
|
||||
m_ui->comboBox->addItem(tr("%1 templates").arg(platform), platform);
|
||||
}
|
||||
} else {
|
||||
if (availablePlatforms.isEmpty()) {
|
||||
m_ui->comboBox->addItem(tr("All templates"), QString());
|
||||
} else {
|
||||
const QString platform = availablePlatforms.first();
|
||||
m_ui->comboBox->addItem(tr("%1 templates").arg(platform), platform);
|
||||
}
|
||||
m_ui->comboBox->setDisabled(true);
|
||||
}
|
||||
|
||||
foreach (IWizard *wizard, wizards) {
|
||||
// ensure category root
|
||||
const QString categoryName = wizard->category();
|
||||
|
||||
CategoryItemMap::iterator cit = categories.find(categoryName);
|
||||
if (cit == categories.end()) {
|
||||
QStandardItem *categoryItem = new QStandardItem();
|
||||
if (wizard->isAvailable(selectedPlatform())) {
|
||||
QStandardItem *kindItem;
|
||||
switch (wizard->kind()) {
|
||||
case IWizard::ProjectWizard:
|
||||
@@ -241,39 +296,8 @@ void NewDialog::setWizards(QList<IWizard*> wizards)
|
||||
kindItem = filesClassesKindItem;
|
||||
break;
|
||||
}
|
||||
kindItem->appendRow(categoryItem);
|
||||
m_categoryItems.append(categoryItem);
|
||||
categoryItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
||||
categoryItem->setText(wizard->displayCategory());
|
||||
categoryItem->setData(wizard->category(), Qt::UserRole);
|
||||
cit = categories.insert(categoryName, categoryItem);
|
||||
addItem(kindItem, wizard);
|
||||
}
|
||||
// add item
|
||||
if (wizard->isAvailable()) {
|
||||
QStandardItem *wizardItem = new QStandardItem(wizard->displayName());
|
||||
QIcon wizardIcon;
|
||||
|
||||
// spacing hack. Add proper icons instead
|
||||
if (wizard->icon().isNull()) {
|
||||
wizardIcon = m_dummyIcon;
|
||||
} else {
|
||||
wizardIcon = wizard->icon();
|
||||
}
|
||||
wizardItem->setIcon(wizardIcon);
|
||||
wizardItem->setData(QVariant::fromValue(wizard), Qt::UserRole);
|
||||
wizardItem->setFlags(Qt::ItemIsEnabled|Qt::ItemIsSelectable);
|
||||
cit.value()->appendRow(wizardItem);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!projectKindItem->hasChildren()) {
|
||||
QModelIndex idx = projectKindItem->index();
|
||||
m_model->removeRow(idx.row());
|
||||
}
|
||||
if (!filesClassesKindItem->hasChildren()) {
|
||||
QModelIndex idx = filesClassesKindItem->index();
|
||||
m_model->removeRow(idx.row());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -285,19 +309,19 @@ Core::IWizard *NewDialog::showDialog()
|
||||
if (!lastCategory.isEmpty())
|
||||
foreach(QStandardItem* item, m_categoryItems) {
|
||||
if (item->data(Qt::UserRole) == lastCategory) {
|
||||
idx = m_proxyModel->mapToSource(m_model->indexFromItem(item));
|
||||
idx = m_twoLevelProxyModel->mapToSource(m_model->indexFromItem(item));
|
||||
}
|
||||
}
|
||||
if (!idx.isValid())
|
||||
idx = m_proxyModel->index(0,0, m_proxyModel->index(0,0));
|
||||
idx = m_twoLevelProxyModel->index(0,0, m_twoLevelProxyModel->index(0,0));
|
||||
|
||||
m_ui->templateCategoryView->setCurrentIndex(idx);
|
||||
|
||||
// We need to set ensure that the category has default focus
|
||||
m_ui->templateCategoryView->setFocus(Qt::NoFocusReason);
|
||||
|
||||
for (int row = 0; row < m_proxyModel->rowCount(); ++row)
|
||||
m_ui->templateCategoryView->setExpanded(m_proxyModel->index(row, 0), true);
|
||||
for (int row = 0; row < m_twoLevelProxyModel->rowCount(); ++row)
|
||||
m_ui->templateCategoryView->setExpanded(m_twoLevelProxyModel->index(row, 0), true);
|
||||
|
||||
// Ensure that item description is visible on first show
|
||||
currentItemChanged(m_ui->templatesView->rootIndex().child(0,0));
|
||||
@@ -307,7 +331,7 @@ Core::IWizard *NewDialog::showDialog()
|
||||
const int retVal = exec();
|
||||
|
||||
idx = m_ui->templateCategoryView->currentIndex();
|
||||
lastCategory = m_model->itemFromIndex(m_proxyModel->mapToSource(idx))->data(Qt::UserRole).toString();
|
||||
lastCategory = m_model->itemFromIndex(m_twoLevelProxyModel->mapToSource(idx))->data(Qt::UserRole).toString();
|
||||
|
||||
if (retVal != Accepted)
|
||||
return 0;
|
||||
@@ -315,6 +339,19 @@ Core::IWizard *NewDialog::showDialog()
|
||||
return currentWizard();
|
||||
}
|
||||
|
||||
QString NewDialog::selectedPlatform() const
|
||||
{
|
||||
int index = m_ui->comboBox->currentIndex();
|
||||
|
||||
return m_ui->comboBox->itemData(index).toString();
|
||||
}
|
||||
|
||||
int NewDialog::selectedWizardOption() const
|
||||
{
|
||||
QStandardItem *item = m_model->itemFromIndex(m_ui->templatesView->currentIndex());
|
||||
return item->data(Qt::UserRole).value<WizardContainer>().wizardOption;
|
||||
}
|
||||
|
||||
NewDialog::~NewDialog()
|
||||
{
|
||||
delete m_ui;
|
||||
@@ -322,15 +359,50 @@ NewDialog::~NewDialog()
|
||||
|
||||
IWizard *NewDialog::currentWizard() const
|
||||
{
|
||||
return wizardOfItem(m_model->itemFromIndex(m_ui->templatesView->currentIndex()));
|
||||
QModelIndex index = m_filterProxyModel->mapToSource(m_ui->templatesView->currentIndex());
|
||||
return wizardOfItem(m_model->itemFromIndex(index));
|
||||
}
|
||||
|
||||
void NewDialog::addItem(QStandardItem *topLEvelCategoryItem, IWizard *wizard)
|
||||
{
|
||||
const QString categoryName = wizard->category();
|
||||
QStandardItem *categoryItem = 0;
|
||||
for (int i = 0; i < topLEvelCategoryItem->rowCount(); i++) {
|
||||
if (topLEvelCategoryItem->child(i, 0)->data(Qt::UserRole) == categoryName)
|
||||
categoryItem = topLEvelCategoryItem->child(i, 0);
|
||||
}
|
||||
if (!categoryItem) {
|
||||
categoryItem = new QStandardItem();
|
||||
topLEvelCategoryItem->appendRow(categoryItem);
|
||||
m_categoryItems.append(categoryItem);
|
||||
categoryItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
||||
categoryItem->setText(QLatin1String(" ") + wizard->displayCategory());
|
||||
categoryItem->setData(wizard->category(), Qt::UserRole);
|
||||
}
|
||||
|
||||
QStandardItem *wizardItem = new QStandardItem(wizard->displayName());
|
||||
QIcon wizardIcon;
|
||||
|
||||
// spacing hack. Add proper icons instead
|
||||
if (wizard->icon().isNull()) {
|
||||
wizardIcon = m_dummyIcon;
|
||||
} else {
|
||||
wizardIcon = wizard->icon();
|
||||
}
|
||||
wizardItem->setIcon(wizardIcon);
|
||||
wizardItem->setData(QVariant::fromValue(WizardContainer(wizard, 0)), Qt::UserRole);
|
||||
wizardItem->setFlags(Qt::ItemIsEnabled|Qt::ItemIsSelectable);
|
||||
categoryItem->appendRow(wizardItem);
|
||||
|
||||
}
|
||||
|
||||
void NewDialog::currentCategoryChanged(const QModelIndex &index)
|
||||
{
|
||||
if (index.parent() != m_model->invisibleRootItem()->index()) {
|
||||
m_ui->templatesView->setModel(m_model);
|
||||
m_ui->templatesView->setRootIndex(m_proxyModel->mapToSource(index));
|
||||
|
||||
m_ui->templatesView->setModel(m_filterProxyModel);
|
||||
QModelIndex sourceIndex = m_twoLevelProxyModel->mapToSource(index);
|
||||
sourceIndex = m_filterProxyModel->mapFromSource(sourceIndex);
|
||||
m_ui->templatesView->setRootIndex(sourceIndex);
|
||||
// Focus the first item by default
|
||||
m_ui->templatesView->setCurrentIndex(m_ui->templatesView->rootIndex().child(0,0));
|
||||
|
||||
@@ -342,11 +414,26 @@ void NewDialog::currentCategoryChanged(const QModelIndex &index)
|
||||
|
||||
void NewDialog::currentItemChanged(const QModelIndex &index)
|
||||
{
|
||||
QStandardItem* cat = m_model->itemFromIndex(index);
|
||||
if (const IWizard *wizard = wizardOfItem(cat))
|
||||
m_ui->templateDescription->setText(wizard->description());
|
||||
else
|
||||
QModelIndex sourceIndex = m_filterProxyModel->mapToSource(index);
|
||||
QStandardItem* cat = (m_model->itemFromIndex(sourceIndex));
|
||||
if (const IWizard *wizard = wizardOfItem(cat)) {
|
||||
QString desciption = wizard->description();
|
||||
if (!Qt::mightBeRichText(desciption))
|
||||
desciption.replace(QLatin1Char('\n'), QLatin1String("<br>"));
|
||||
desciption += QLatin1String("<br><br><b>");
|
||||
if (wizard->flags().testFlag(IWizard::PlatformIndependent))
|
||||
desciption += tr("Platform independent") + QLatin1String("</b>");
|
||||
else
|
||||
desciption += tr("Supported Platforms")
|
||||
+ QLatin1String("</b>: <tt>")
|
||||
+ wizard->supportedPlatforms().join(QLatin1String(" "))
|
||||
+ QLatin1String("</tt>");
|
||||
|
||||
m_ui->templateDescription->setHtml(desciption);
|
||||
|
||||
} else {
|
||||
m_ui->templateDescription->setText(QString());
|
||||
}
|
||||
updateOkButton();
|
||||
}
|
||||
|
||||
@@ -360,3 +447,9 @@ void NewDialog::updateOkButton()
|
||||
{
|
||||
m_okButton->setEnabled(currentWizard() != 0);
|
||||
}
|
||||
|
||||
void NewDialog::setSelectedPlatform(const QString & /*platform*/)
|
||||
{
|
||||
//The static cast allows us to keep PlatformFilterProxyModel anonymous
|
||||
static_cast<PlatformFilterProxyModel*>(m_filterProxyModel)->setPlatform(selectedPlatform());
|
||||
}
|
||||
|
||||
@@ -36,11 +36,13 @@
|
||||
#include "iwizard.h"
|
||||
|
||||
#include <QtGui/QDialog>
|
||||
#include <QtGui/QIcon>
|
||||
#include <QtCore/QList>
|
||||
#include <QtCore/QModelIndex>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QAbstractProxyModel;
|
||||
class QSortFilterProxyModel;
|
||||
class QPushButton;
|
||||
class QStandardItem;
|
||||
class QStandardItemModel;
|
||||
@@ -66,20 +68,26 @@ public:
|
||||
void setWizards(QList<IWizard*> wizards);
|
||||
|
||||
Core::IWizard *showDialog();
|
||||
QString selectedPlatform() const;
|
||||
int selectedWizardOption() const;
|
||||
|
||||
private slots:
|
||||
void currentCategoryChanged(const QModelIndex &);
|
||||
void currentItemChanged(const QModelIndex &);
|
||||
void okButtonClicked();
|
||||
void updateOkButton();
|
||||
void setSelectedPlatform(const QString &platform);
|
||||
|
||||
private:
|
||||
Core::IWizard *currentWizard() const;
|
||||
void addItem(QStandardItem *topLEvelCategoryItem, IWizard *wizard);
|
||||
|
||||
Ui::NewDialog *m_ui;
|
||||
QStandardItemModel *m_model;
|
||||
QAbstractProxyModel *m_proxyModel;
|
||||
QAbstractProxyModel *m_twoLevelProxyModel;
|
||||
QSortFilterProxyModel *m_filterProxyModel;
|
||||
QPushButton *m_okButton;
|
||||
QPixmap m_dummyIcon;
|
||||
QIcon m_dummyIcon;
|
||||
QList<QStandardItem*> m_categoryItems;
|
||||
};
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>554</width>
|
||||
<height>412</height>
|
||||
<width>880</width>
|
||||
<height>520</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
@@ -26,9 +26,6 @@
|
||||
<string>New Project</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetDefaultConstraint</enum>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
@@ -36,7 +33,43 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" rowspan="3">
|
||||
<item row="1" column="2">
|
||||
<widget class="QTextBrowser" name="templateDescription">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::MinimumExpanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboBox"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QTreeView" name="templateCategoryView">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
|
||||
@@ -46,10 +79,47 @@
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>225</width>
|
||||
<width>1000</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="palette">
|
||||
<palette>
|
||||
<active>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>97</red>
|
||||
<green>97</green>
|
||||
<blue>97</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</active>
|
||||
<inactive>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>97</red>
|
||||
<green>97</green>
|
||||
<blue>97</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</inactive>
|
||||
<disabled>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>120</red>
|
||||
<green>120</green>
|
||||
<blue>120</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</disabled>
|
||||
</palette>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::StrongFocus</enum>
|
||||
</property>
|
||||
@@ -75,7 +145,7 @@
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" rowspan="2">
|
||||
<item row="1" column="1">
|
||||
<widget class="QListView" name="templatesView">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
|
||||
@@ -100,20 +170,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QTextBrowser" name="templateDescription">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0" colspan="2">
|
||||
<item row="2" column="1" colspan="2">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
@@ -125,11 +182,6 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>templateCategoryView</tabstop>
|
||||
<tabstop>templatesView</tabstop>
|
||||
<tabstop>buttonBox</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
||||
@@ -57,7 +57,9 @@ class CORE_EXPORT IFeatureProvider : public QObject
|
||||
public:
|
||||
IFeatureProvider() {}
|
||||
virtual ~IFeatureProvider() {}
|
||||
virtual FeatureSet availableFeatures() const = 0;
|
||||
virtual FeatureSet availableFeatures(const QString &platform) const = 0;
|
||||
virtual QStringList availablePlatforms() const = 0;
|
||||
virtual QString displayNameForPlatform(const QString &string) const = 0;
|
||||
};
|
||||
|
||||
class CORE_EXPORT Feature : public Id
|
||||
|
||||
@@ -942,6 +942,7 @@ void MainWindow::showNewItemDialog(const QString &title,
|
||||
// Scan for wizards matching the filter and pick one. Don't show
|
||||
// dialog if there is only one.
|
||||
IWizard *wizard = 0;
|
||||
QString selectedPlatform;
|
||||
switch (wizards.size()) {
|
||||
case 0:
|
||||
break;
|
||||
@@ -953,6 +954,7 @@ void MainWindow::showNewItemDialog(const QString &title,
|
||||
dlg.setWizards(wizards);
|
||||
dlg.setWindowTitle(title);
|
||||
wizard = dlg.showDialog();
|
||||
selectedPlatform = dlg.selectedPlatform();
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -976,7 +978,7 @@ void MainWindow::showNewItemDialog(const QString &title,
|
||||
break;
|
||||
}
|
||||
}
|
||||
wizard->runWizard(path, this);
|
||||
wizard->runWizard(path, this, selectedPlatform);
|
||||
}
|
||||
|
||||
bool MainWindow::showOptionsDialog(const QString &category,
|
||||
|
||||
@@ -138,6 +138,7 @@ Core::BaseFileWizardParameters GenericProjectWizard::parameters()
|
||||
"This allows you to use Qt Creator as a code editor."));
|
||||
parameters.setCategory(QLatin1String(ProjectExplorer::Constants::IMPORT_WIZARD_CATEGORY));
|
||||
parameters.setDisplayCategory(QLatin1String(ProjectExplorer::Constants::IMPORT_WIZARD_CATEGORY_DISPLAY));
|
||||
parameters.setFlags(Core::IWizard::PlatformIndependent);
|
||||
return parameters;
|
||||
}
|
||||
|
||||
|
||||
@@ -68,6 +68,11 @@ Core::FeatureSet GLSLFileWizard::requiredFeatures() const
|
||||
return Core::FeatureSet();
|
||||
}
|
||||
|
||||
Core::IWizard::WizardFlags GLSLFileWizard::flags() const
|
||||
{
|
||||
return Core::IWizard::PlatformIndependent;
|
||||
}
|
||||
|
||||
Core::GeneratedFiles GLSLFileWizard::generateFiles(const QWizard *w,
|
||||
QString * /*errorMessage*/) const
|
||||
{
|
||||
|
||||
@@ -56,6 +56,7 @@ public:
|
||||
ShaderType shaderType, QObject *parent = 0);
|
||||
|
||||
virtual Core::FeatureSet requiredFeatures() const;
|
||||
virtual WizardFlags flags() const;
|
||||
|
||||
protected:
|
||||
QString fileContents(const QString &baseName, ShaderType shaderType) const;
|
||||
|
||||
@@ -190,9 +190,19 @@ Core::FeatureSet MaemoQtVersion::availableFeatures() const
|
||||
Core::FeatureSet features = QtSupport::BaseQtVersion::availableFeatures();
|
||||
if (qtVersion() >= QtSupport::QtVersionNumber(4, 7, 4)) //no reliable test for components, yet.
|
||||
features |= Core::FeatureSet(QtSupport::Constants::FEATURE_QTQUICK_COMPONENTS_MEEGO);
|
||||
features |= Core::FeatureSet(QtSupport::Constants::FEATURE_MOBILE);
|
||||
return features;
|
||||
}
|
||||
|
||||
QString MaemoQtVersion::platformName() const
|
||||
{
|
||||
return QLatin1String(QtSupport::Constants::MEEGO_HARMATTAN_PLATFORM);
|
||||
}
|
||||
|
||||
QString MaemoQtVersion::platformDisplayName() const
|
||||
{
|
||||
return QLatin1String(QtSupport::Constants::MEEGO_HARMATTAN_PLATFORM_TR);
|
||||
}
|
||||
|
||||
void MaemoQtVersion::addToEnvironment(Utils::Environment &env) const
|
||||
{
|
||||
|
||||
@@ -61,6 +61,8 @@ public:
|
||||
bool supportsShadowBuilds() const;
|
||||
QString osType() const;
|
||||
Core::FeatureSet availableFeatures() const;
|
||||
QString platformName() const;
|
||||
QString platformDisplayName() const;
|
||||
|
||||
private:
|
||||
mutable QString m_systemRoot;
|
||||
|
||||
@@ -56,6 +56,8 @@ struct BaseProjectWizardDialogPrivate {
|
||||
const int desiredIntroPageId;
|
||||
Utils::ProjectIntroPage *introPage;
|
||||
int introPageId;
|
||||
QString selectedPlatform;
|
||||
Core::FeatureSet requiredFeatureSet;
|
||||
};
|
||||
|
||||
BaseProjectWizardDialogPrivate::BaseProjectWizardDialogPrivate(Utils::ProjectIntroPage *page, int id) :
|
||||
@@ -66,20 +68,24 @@ BaseProjectWizardDialogPrivate::BaseProjectWizardDialogPrivate(Utils::ProjectInt
|
||||
}
|
||||
|
||||
BaseProjectWizardDialog::BaseProjectWizardDialog(QWidget *parent,
|
||||
const Core::WizardDialogParameters & /*parameters*/) :
|
||||
const Core::WizardDialogParameters ¶meters) :
|
||||
Utils::Wizard(parent),
|
||||
d(new BaseProjectWizardDialogPrivate(new Utils::ProjectIntroPage))
|
||||
{
|
||||
setSelectedPlatform(parameters.selectedPlatform());
|
||||
setRequiredFeatures(parameters.requiredFeatures());
|
||||
init();
|
||||
}
|
||||
|
||||
BaseProjectWizardDialog::BaseProjectWizardDialog(Utils::ProjectIntroPage *introPage,
|
||||
int introId,
|
||||
QWidget *parent,
|
||||
const Core::WizardDialogParameters & /*parameters*/) :
|
||||
const Core::WizardDialogParameters ¶meters) :
|
||||
Utils::Wizard(parent),
|
||||
d(new BaseProjectWizardDialogPrivate(introPage, introId))
|
||||
{
|
||||
setSelectedPlatform(parameters.selectedPlatform());
|
||||
setRequiredFeatures(parameters.requiredFeatures());
|
||||
init();
|
||||
}
|
||||
|
||||
@@ -164,4 +170,25 @@ QString BaseProjectWizardDialog::uniqueProjectName(const QString &path)
|
||||
}
|
||||
return prefix;
|
||||
}
|
||||
|
||||
QString BaseProjectWizardDialog::selectedPlatform() const
|
||||
{
|
||||
return d->selectedPlatform;
|
||||
}
|
||||
|
||||
void BaseProjectWizardDialog::setSelectedPlatform(const QString &platform)
|
||||
{
|
||||
d->selectedPlatform = platform;
|
||||
}
|
||||
|
||||
Core::FeatureSet BaseProjectWizardDialog::requiredFeatures() const
|
||||
{
|
||||
return d->requiredFeatureSet;
|
||||
}
|
||||
|
||||
void BaseProjectWizardDialog::setRequiredFeatures(const Core::FeatureSet &featureSet)
|
||||
{
|
||||
d->requiredFeatureSet = featureSet;
|
||||
}
|
||||
|
||||
} // namespace ProjectExplorer
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#define BASEPROJECTWIZARDDIALOG_H
|
||||
|
||||
#include "projectexplorer_export.h"
|
||||
#include <coreplugin/featureprovider.h>
|
||||
#include <coreplugin/basefilewizard.h>
|
||||
#include <utils/wizard.h>
|
||||
|
||||
@@ -78,6 +79,11 @@ signals:
|
||||
|
||||
protected:
|
||||
Utils::ProjectIntroPage *introPage() const;
|
||||
QString selectedPlatform() const;
|
||||
void setSelectedPlatform(const QString &platform);
|
||||
|
||||
Core::FeatureSet requiredFeatures() const;
|
||||
void setRequiredFeatures(const Core::FeatureSet &featureSet);
|
||||
|
||||
private slots:
|
||||
void slotAccepted();
|
||||
|
||||
@@ -68,6 +68,7 @@ static const char langAttributeC[] = "xml:lang";
|
||||
static const char categoryAttributeC[] = "category";
|
||||
static const char displayCategoryElementC[] = "displaycategory";
|
||||
static const char featuresRequiredC[] = "featuresRequired";
|
||||
static const char platformIndependentC[] = "platformIndependent";
|
||||
static const char fieldPageTitleElementC[] = "fieldpagetitle";
|
||||
static const char fieldsElementC[] = "fields";
|
||||
static const char fieldElementC[] = "field";
|
||||
@@ -500,6 +501,17 @@ static inline Core::FeatureSet requiredFeatures(const QXmlStreamReader &reader)
|
||||
return features;
|
||||
}
|
||||
|
||||
static inline Core::IWizard::WizardFlags wizardFlags(const QXmlStreamReader &reader)
|
||||
{
|
||||
Core::IWizard::WizardFlags flags;
|
||||
QString value = reader.attributes().value(QLatin1String(platformIndependentC)).toString();
|
||||
|
||||
if (!value.isEmpty() && value == QLatin1String("true"))
|
||||
flags |= Core::IWizard::PlatformIndependent;
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
static inline QString msgError(const QXmlStreamReader &reader,
|
||||
const QString &fileName,
|
||||
const QString &what)
|
||||
@@ -606,6 +618,7 @@ CustomWizardParameters::ParseResult
|
||||
bp->setCategory(attributeValue(reader, categoryAttributeC));
|
||||
bp->setKind(kindAttribute(reader));
|
||||
bp->setRequiredFeatures(requiredFeatures(reader));
|
||||
bp->setFlags(wizardFlags(reader));
|
||||
klass = attributeValue(reader, klassAttributeC);
|
||||
firstPageId = integerAttributeValue(reader, firstPageAttributeC, -1);
|
||||
break;
|
||||
|
||||
@@ -190,13 +190,19 @@ const char TASK_CATEGORY_COMPILE[] = "Task.Category.Compile";
|
||||
const char TASK_CATEGORY_BUILDSYSTEM[] = "Task.Category.Buildsystem";
|
||||
|
||||
// Wizard categories
|
||||
const char QT_PROJECT_WIZARD_CATEGORY[] = "F.QtProjects";
|
||||
const char QT_PROJECT_WIZARD_CATEGORY_DISPLAY[] = QT_TRANSLATE_NOOP("ProjectExplorer", "Other Qt Project");
|
||||
const char QT_PROJECT_WIZARD_CATEGORY[] = "H.QtProjects";
|
||||
const char QT_PROJECT_WIZARD_CATEGORY_DISPLAY[] = QT_TRANSLATE_NOOP("ProjectExplorer", "Other Project");
|
||||
|
||||
const char QT_APPLICATION_WIZARD_CATEGORY[] = "F.QtApplications";
|
||||
const char QT_APPLICATION_WIZARD_CATEGORY_DISPLAY[] = QT_TRANSLATE_NOOP("ProjectExplorer", "Applications");
|
||||
|
||||
const char LIBRARIES_WIZARD_CATEGORY[] = "G.Libraries";
|
||||
const char LIBRARIES_WIZARD_CATEGORY_DISPLAY[] = QT_TRANSLATE_NOOP("ProjectExplorer", "Libraries");
|
||||
|
||||
const char PROJECT_WIZARD_CATEGORY[] = "I.Projects"; // (after Qt)
|
||||
const char PROJECT_WIZARD_CATEGORY_DISPLAY[] = QT_TRANSLATE_NOOP("ProjectExplorer", "Non-Qt Project");
|
||||
|
||||
const char IMPORT_WIZARD_CATEGORY[] = "J.Import";
|
||||
const char IMPORT_WIZARD_CATEGORY[] = "T.Import";
|
||||
const char IMPORT_WIZARD_CATEGORY_DISPLAY[] = QT_TRANSLATE_NOOP("ProjectExplorer", "Import Project");
|
||||
|
||||
// Build step lists ids:
|
||||
|
||||
@@ -61,9 +61,6 @@ const char SHOW_QT_QUICK_HELPER[] = "QmlJSEditor.ShowQtQuickHelper";
|
||||
const char TASK_CATEGORY_QML[] = "Task.Category.Qml";
|
||||
const char TASK_CATEGORY_QML_ANALYSIS[] = "Task.Category.QmlAnalysis";
|
||||
|
||||
const char WIZARD_CATEGORY_QML[] = "S.Qml";
|
||||
const char WIZARD_TR_CATEGORY_QML[] = QT_TRANSLATE_NOOP("QmlJsEditor", "QML");
|
||||
|
||||
const char QML_SNIPPETS_GROUP_ID[] = "QML";
|
||||
|
||||
} // namespace Constants
|
||||
|
||||
@@ -155,16 +155,16 @@ bool QmlJSEditorPlugin::initialize(const QStringList & /*arguments*/, QString *e
|
||||
|
||||
QObject *core = Core::ICore::instance();
|
||||
Core::BaseFileWizardParameters qmlWizardParameters(Core::IWizard::FileWizard);
|
||||
qmlWizardParameters.setCategory(QLatin1String(Constants::WIZARD_CATEGORY_QML));
|
||||
qmlWizardParameters.setDisplayCategory(QCoreApplication::translate("QmlJsEditor", Constants::WIZARD_TR_CATEGORY_QML));
|
||||
qmlWizardParameters.setCategory(QLatin1String(Core::Constants::WIZARD_CATEGORY_QT));
|
||||
qmlWizardParameters.setDisplayCategory(QCoreApplication::translate("QmlJsEditor", Core::Constants::WIZARD_TR_CATEGORY_QT));
|
||||
qmlWizardParameters.setDescription(tr("Creates a QML file."));
|
||||
qmlWizardParameters.setDisplayName(tr("QML File"));
|
||||
qmlWizardParameters.setId(QLatin1String("Q.Qml"));
|
||||
addAutoReleasedObject(new QmlFileWizard(qmlWizardParameters, core));
|
||||
|
||||
Core::BaseFileWizardParameters jsWizardParameters(Core::IWizard::FileWizard);
|
||||
jsWizardParameters.setCategory(QLatin1String(Constants::WIZARD_CATEGORY_QML));
|
||||
jsWizardParameters.setDisplayCategory(QCoreApplication::translate("QmlJsEditor", Constants::WIZARD_TR_CATEGORY_QML));
|
||||
jsWizardParameters.setCategory(QLatin1String(Core::Constants::WIZARD_CATEGORY_QT));
|
||||
jsWizardParameters.setDisplayCategory(QCoreApplication::translate("QmlJsEditor", Core::Constants::WIZARD_TR_CATEGORY_QT));
|
||||
jsWizardParameters.setDescription(tr("Creates a JavaScript file."));
|
||||
jsWizardParameters.setDisplayName(tr("JS File"));
|
||||
jsWizardParameters.setId(QLatin1String("Z.Js"));
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
|
||||
#include <app/app_version.h>
|
||||
#include <projectexplorer/customwizard/customwizard.h>
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
#include <qtsupport/qtsupportconstants.h>
|
||||
|
||||
#include <QtGui/QIcon>
|
||||
@@ -82,9 +83,8 @@ Core::BaseFileWizardParameters QmlProjectApplicationWizard::parameters()
|
||||
"You can review Qt Quick UI projects in the QML Viewer and you need not build them. "
|
||||
"You do not need to have the development environment installed "
|
||||
"on your computer to create and run this type of projects."));
|
||||
parameters.setCategory(QLatin1String(QtSupport::Constants::QML_WIZARD_CATEGORY));
|
||||
parameters.setDisplayCategory(QCoreApplication::translate(QtSupport::Constants::QML_WIZARD_TR_SCOPE,
|
||||
QtSupport::Constants::QML_WIZARD_TR_CATEGORY));
|
||||
parameters.setCategory(QLatin1String(ProjectExplorer::Constants::QT_APPLICATION_WIZARD_CATEGORY));
|
||||
parameters.setDisplayCategory(QT_TRANSLATE_NOOP("ProjectExplorer", "Qt Application"));
|
||||
return parameters;
|
||||
}
|
||||
|
||||
|
||||
@@ -74,6 +74,7 @@ struct QT4PROJECTMANAGER_EXPORT BuildConfigurationInfo {
|
||||
static QList<BuildConfigurationInfo> checkForBuild(const QString &directory, const QString &proFilePath);
|
||||
static QList<BuildConfigurationInfo> filterBuildConfigurationInfos(const QList<BuildConfigurationInfo> &infos, const QString &id);
|
||||
static QList<BuildConfigurationInfo> filterBuildConfigurationInfos(const QList<BuildConfigurationInfo> &infos, Core::FeatureSet features);
|
||||
static QList<BuildConfigurationInfo> filterBuildConfigurationInfosByPlatform(const QList<BuildConfigurationInfo> &infos, const QString &platform);
|
||||
};
|
||||
|
||||
} // namespace Qt4ProjectManager
|
||||
|
||||
@@ -106,5 +106,16 @@ Core::FeatureSet DesktopQtVersion::availableFeatures() const
|
||||
if (qtVersion() >= QtSupport::QtVersionNumber(4, 7, 4)) //no reliable test for components, yet.
|
||||
features |= Core::FeatureSet(QtSupport::Constants::FEATURE_QTQUICK_COMPONENTS_MEEGO)
|
||||
| Core::FeatureSet(QtSupport::Constants::FEATURE_QTQUICK_COMPONENTS_SYMBIAN);
|
||||
features |= Core::FeatureSet(QtSupport::Constants::FEATURE_DESKTOP);
|
||||
return features;
|
||||
}
|
||||
|
||||
QString DesktopQtVersion::platformName() const
|
||||
{
|
||||
return QLatin1String(QtSupport::Constants::DESKTOP_PLATFORM);
|
||||
}
|
||||
|
||||
QString DesktopQtVersion::platformDisplayName() const
|
||||
{
|
||||
return QLatin1String(QtSupport::Constants::DESKTOP_PLATFORM_TR);
|
||||
}
|
||||
|
||||
@@ -59,6 +59,8 @@ public:
|
||||
QString description() const;
|
||||
|
||||
Core::FeatureSet availableFeatures() const;
|
||||
QString platformName() const;
|
||||
QString platformDisplayName() const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -128,10 +128,15 @@ ProjectExplorer::Target *Qt4DesktopTargetFactory::restore(ProjectExplorer::Proj
|
||||
Qt4TargetSetupWidget *Qt4DesktopTargetFactory::createTargetSetupWidget(const QString &id, const QString &proFilePath,
|
||||
const QtSupport::QtVersionNumber &minimumQtVersion,
|
||||
const QtSupport::QtVersionNumber &maximumQtVersion,
|
||||
const Core::FeatureSet &requiredFeatures,
|
||||
const QString &selectedPlatform,
|
||||
bool importEnabled, QList<BuildConfigurationInfo> importInfos)
|
||||
{
|
||||
|
||||
QList<BuildConfigurationInfo> infos = this->availableBuildConfigurations(id, proFilePath, minimumQtVersion, maximumQtVersion);
|
||||
QList<BuildConfigurationInfo> infos = this->availableBuildConfigurations(id, proFilePath,
|
||||
minimumQtVersion,
|
||||
maximumQtVersion,
|
||||
requiredFeatures);
|
||||
if (infos.isEmpty())
|
||||
return 0;
|
||||
Qt4DefaultTargetSetupWidget *widget = new Qt4DefaultTargetSetupWidget(this, id, proFilePath, infos,
|
||||
|
||||
@@ -57,6 +57,8 @@ public:
|
||||
Qt4TargetSetupWidget *createTargetSetupWidget(const QString &id, const QString &proFilePath,
|
||||
const QtSupport::QtVersionNumber &minimumQtVersion,
|
||||
const QtSupport::QtVersionNumber &maximumQtVersion,
|
||||
const Core::FeatureSet &requiredFeatures,
|
||||
const QString &selectedPlatform,
|
||||
bool importEnabled, QList<BuildConfigurationInfo> importInfos);
|
||||
QString buildNameForId(const QString &id) const;
|
||||
QSet<QString> targetFeatures(const QString &id) const;
|
||||
|
||||
@@ -99,3 +99,10 @@ QString SimulatorQtVersion::description() const
|
||||
{
|
||||
return QCoreApplication::translate("QtVersion", "Qt Simulator", "Qt Version is meant for Qt Simulator");
|
||||
}
|
||||
|
||||
bool SimulatorQtVersion::supportsPlatform(const QString &platformName) const
|
||||
{
|
||||
return (platformName == QtSupport::Constants::SYMBIAN_PLATFORM
|
||||
|| platformName == QtSupport::Constants::MEEGO_HARMATTAN_PLATFORM
|
||||
|| platformName.isEmpty());
|
||||
}
|
||||
|
||||
@@ -57,6 +57,8 @@ public:
|
||||
QSet<QString> supportedTargetIds() const;
|
||||
|
||||
QString description() const;
|
||||
|
||||
bool supportsPlatform(const QString &platformName) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -168,10 +168,11 @@ QList<ProjectExplorer::Task> Qt4SymbianTargetFactory::reportIssues(const QString
|
||||
|
||||
QList<BuildConfigurationInfo> Qt4SymbianTargetFactory::availableBuildConfigurations(const QString &id, const QString &proFilePath,
|
||||
const QtSupport::QtVersionNumber &minimumQtVersion,
|
||||
const QtSupport::QtVersionNumber &maximumQtVersion)
|
||||
const QtSupport::QtVersionNumber &maximumQtVersion,
|
||||
const Core::FeatureSet &requiredFeatures)
|
||||
{
|
||||
QList<BuildConfigurationInfo> infos
|
||||
= Qt4BaseTargetFactory::availableBuildConfigurations(id, proFilePath, minimumQtVersion, maximumQtVersion);
|
||||
= Qt4BaseTargetFactory::availableBuildConfigurations(id, proFilePath, minimumQtVersion, maximumQtVersion, requiredFeatures);
|
||||
if (id != QLatin1String(Constants::S60_EMULATOR_TARGET_ID))
|
||||
return infos;
|
||||
// For emulator filter out all non debug builds
|
||||
|
||||
@@ -61,7 +61,8 @@ public:
|
||||
QList<ProjectExplorer::Task> reportIssues(const QString &proFile);
|
||||
QList<BuildConfigurationInfo> availableBuildConfigurations(const QString &id, const QString &proFilePath,
|
||||
const QtSupport::QtVersionNumber &minimumQtVersion,
|
||||
const QtSupport::QtVersionNumber &maximumQtVersion);
|
||||
const QtSupport::QtVersionNumber &maximumQtVersion,
|
||||
const Core::FeatureSet &requiredFeatures);
|
||||
|
||||
bool selectByDefault(const QString &id) const;
|
||||
QSet<QString> targetFeatures(const QString &id) const;
|
||||
|
||||
@@ -370,10 +370,21 @@ Core::FeatureSet SymbianQtVersion::availableFeatures() const
|
||||
if (qtVersion() >= QtSupport::QtVersionNumber(4, 7, 4)) //no reliable test for components, yet.
|
||||
features |= Core::FeatureSet(QtSupport::Constants::FEATURE_QTQUICK_COMPONENTS_SYMBIAN);
|
||||
features.remove(Core::Feature(QtSupport::Constants::FEATURE_QT_CONSOLE));
|
||||
features |= Core::FeatureSet(QtSupport::Constants::FEATURE_MOBILE);
|
||||
|
||||
return features;
|
||||
}
|
||||
|
||||
QString SymbianQtVersion::platformName() const
|
||||
{
|
||||
return QLatin1String(QtSupport::Constants::SYMBIAN_PLATFORM);
|
||||
}
|
||||
|
||||
QString SymbianQtVersion::platformDisplayName() const
|
||||
{
|
||||
return QLatin1String(QtSupport::Constants::SYMBIAN_PLATFORM_TR);
|
||||
}
|
||||
|
||||
QString SymbianQtVersion::systemRoot() const
|
||||
{
|
||||
return m_systemRoot;
|
||||
|
||||
@@ -84,6 +84,8 @@ public:
|
||||
QtSupport::QtConfigWidget *createConfigurationWidget() const;
|
||||
|
||||
Core::FeatureSet availableFeatures() const;
|
||||
QString platformName() const;
|
||||
QString platformDisplayName() const;
|
||||
|
||||
protected:
|
||||
QList<ProjectExplorer::Task> reportIssuesImpl(const QString &proFile, const QString &buildDir);
|
||||
|
||||
@@ -40,6 +40,10 @@
|
||||
|
||||
#include <QtCore/QList>
|
||||
|
||||
namespace Core {
|
||||
class FeatureSet;
|
||||
}
|
||||
|
||||
namespace QtSupport {
|
||||
class QtVersionNumber;
|
||||
}
|
||||
@@ -59,6 +63,7 @@ public:
|
||||
const QString &proFilePath,
|
||||
const QtSupport::QtVersionNumber &minimumQtVersion,
|
||||
const QtSupport::QtVersionNumber &maximumQtVersion,
|
||||
const Core::FeatureSet &requiredFeatures,
|
||||
bool importEnabled,
|
||||
QList<BuildConfigurationInfo> importInfos);
|
||||
|
||||
@@ -72,7 +77,8 @@ public:
|
||||
/// by default creates one debug + one release buildconfiguration per qtversion
|
||||
virtual QList<BuildConfigurationInfo> availableBuildConfigurations(const QString &id, const QString &proFilePath,
|
||||
const QtSupport::QtVersionNumber &minimumQtVersion,
|
||||
const QtSupport::QtVersionNumber &maximumQtVersion);
|
||||
const QtSupport::QtVersionNumber &maximumQtVersion,
|
||||
const Core::FeatureSet &requiredFeatures);
|
||||
|
||||
virtual QList<ProjectExplorer::Task> reportIssues(const QString &proFile);
|
||||
/// only used in the TargetSetupPage
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
#include "qt4buildconfiguration.h"
|
||||
|
||||
#include <coreplugin/icore.h>
|
||||
#include <coreplugin/featureprovider.h>
|
||||
#include <extensionsystem/pluginmanager.h>
|
||||
#include <projectexplorer/buildsteplist.h>
|
||||
#include <projectexplorer/runconfiguration.h>
|
||||
@@ -92,10 +93,15 @@ Qt4TargetSetupWidget *Qt4BaseTargetFactory::createTargetSetupWidget(const QStrin
|
||||
const QString &proFilePath,
|
||||
const QtSupport::QtVersionNumber &minimumQtVersion,
|
||||
const QtSupport::QtVersionNumber &maximumQtVersion,
|
||||
const Core::FeatureSet &requiredFeatures,
|
||||
bool importEnabled,
|
||||
QList<BuildConfigurationInfo> importInfos)
|
||||
{
|
||||
QList<BuildConfigurationInfo> infos = this->availableBuildConfigurations(id, proFilePath, minimumQtVersion, maximumQtVersion);
|
||||
QList<BuildConfigurationInfo> infos = this->availableBuildConfigurations(id,
|
||||
proFilePath,
|
||||
minimumQtVersion,
|
||||
maximumQtVersion,
|
||||
requiredFeatures);
|
||||
if (infos.isEmpty())
|
||||
return 0;
|
||||
const bool supportsShadowBuilds
|
||||
@@ -121,7 +127,8 @@ ProjectExplorer::Target *Qt4BaseTargetFactory::create(ProjectExplorer::Project *
|
||||
|
||||
QList<BuildConfigurationInfo> Qt4BaseTargetFactory::availableBuildConfigurations(const QString &id, const QString &proFilePath,
|
||||
const QtSupport::QtVersionNumber &minimumQtVersion,
|
||||
const QtSupport::QtVersionNumber &maximumQtVersion)
|
||||
const QtSupport::QtVersionNumber &maximumQtVersion,
|
||||
const Core::FeatureSet &requiredFeatures)
|
||||
{
|
||||
QList<BuildConfigurationInfo> infoList;
|
||||
QList<QtSupport::BaseQtVersion *> knownVersions
|
||||
@@ -139,6 +146,9 @@ QList<BuildConfigurationInfo> Qt4BaseTargetFactory::availableBuildConfigurations
|
||||
info.directory = shadowBuildDirectory(proFilePath, id, msgBuildConfigurationName(info));
|
||||
infoList.append(info);
|
||||
}
|
||||
|
||||
infoList = BuildConfigurationInfo::filterBuildConfigurationInfos(infoList, requiredFeatures);
|
||||
|
||||
return infoList;
|
||||
}
|
||||
|
||||
@@ -692,7 +702,12 @@ void Qt4DefaultTargetSetupWidget::setProFilePath(const QString &proFilePath)
|
||||
{
|
||||
m_proFilePath = proFilePath;
|
||||
m_detailsWidget->setAdditionalSummaryText(issuesListToString(m_factory->reportIssues(m_proFilePath)));
|
||||
setBuildConfigurationInfos(m_factory->availableBuildConfigurations(m_id, proFilePath, m_minimumQtVersion, m_maximumQtVersion), false);
|
||||
setBuildConfigurationInfos(m_factory->availableBuildConfigurations(m_id,
|
||||
proFilePath,
|
||||
m_minimumQtVersion,
|
||||
m_maximumQtVersion,
|
||||
Core::FeatureSet()),
|
||||
false);
|
||||
}
|
||||
|
||||
void Qt4DefaultTargetSetupWidget::setBuildConfiguraionComboBoxVisible(bool b)
|
||||
@@ -1176,6 +1191,18 @@ QList<BuildConfigurationInfo> BuildConfigurationInfo::filterBuildConfigurationIn
|
||||
return result;
|
||||
}
|
||||
|
||||
QList<BuildConfigurationInfo> BuildConfigurationInfo::filterBuildConfigurationInfosByPlatform(const QList<BuildConfigurationInfo> &infos,
|
||||
const QString &platform)
|
||||
{
|
||||
if (platform.isEmpty()) // empty target == target independent
|
||||
return infos;
|
||||
QList<BuildConfigurationInfo> result;
|
||||
foreach (const BuildConfigurationInfo &info, infos)
|
||||
if (info.version->supportsPlatform(platform))
|
||||
result.append(info);
|
||||
return result;
|
||||
}
|
||||
|
||||
QList<BuildConfigurationInfo> BuildConfigurationInfo::filterBuildConfigurationInfos(const QList<BuildConfigurationInfo> &infos, Core::FeatureSet features)
|
||||
{
|
||||
QList<BuildConfigurationInfo> result;
|
||||
|
||||
@@ -114,6 +114,16 @@ void WinCeQtVersion::fromMap(const QVariantMap &map)
|
||||
}
|
||||
}
|
||||
|
||||
QString WinCeQtVersion::platformName() const
|
||||
{
|
||||
return QLatin1String(QtSupport::Constants::WINDOWS_CE_PLATFORM);
|
||||
}
|
||||
|
||||
QString WinCeQtVersion::platformDisplayName() const
|
||||
{
|
||||
return QLatin1String(QtSupport::Constants::WINDOWS_CE_PLATFORM_TR);
|
||||
}
|
||||
|
||||
QVariantMap WinCeQtVersion::toMap() const
|
||||
{
|
||||
return BaseQtVersion::toMap();
|
||||
|
||||
@@ -59,6 +59,9 @@ public:
|
||||
virtual QVariantMap toMap() const;
|
||||
virtual void fromMap(const QVariantMap &data);
|
||||
|
||||
virtual QString platformName() const;
|
||||
QString platformDisplayName() const;
|
||||
|
||||
private:
|
||||
ProjectExplorer::Abi::Architecture m_archType;
|
||||
};
|
||||
|
||||
@@ -70,6 +70,8 @@ AbstractMobileAppWizardDialog::AbstractMobileAppWizardDialog(QWidget *parent,
|
||||
m_targetsPage->setPreferredFeatures(QSet<QString>() << QLatin1String(Constants::MOBILE_TARGETFEATURE_ID));
|
||||
m_targetsPage->setMinimumQtVersion(minimumQtVersionNumber);
|
||||
m_targetsPage->setMaximumQtVersion(maximumQtVersionNumber);
|
||||
m_targetsPage->setSelectedPlatform(selectedPlatform());
|
||||
m_targetsPage->setRequiredQtFeatures(requiredFeatures());
|
||||
resize(900, 450);
|
||||
|
||||
m_genericOptionsPage = new Internal::MobileAppWizardGenericOptionsPage;
|
||||
|
||||
@@ -58,8 +58,8 @@ namespace Internal {
|
||||
|
||||
ConsoleAppWizard::ConsoleAppWizard()
|
||||
: QtWizard(QLatin1String("E.Qt4Core"),
|
||||
QLatin1String(ProjectExplorer::Constants::QT_PROJECT_WIZARD_CATEGORY),
|
||||
QLatin1String(ProjectExplorer::Constants::QT_PROJECT_WIZARD_CATEGORY_DISPLAY),
|
||||
QLatin1String(ProjectExplorer::Constants::QT_APPLICATION_WIZARD_CATEGORY),
|
||||
QLatin1String(ProjectExplorer::Constants::QT_APPLICATION_WIZARD_CATEGORY_DISPLAY),
|
||||
tr("Qt Console Application"),
|
||||
tr("Creates a project containing a single main.cpp file with a stub implementation.\n\n"
|
||||
"Preselects a desktop Qt for building the application if available."),
|
||||
|
||||
@@ -85,8 +85,8 @@ namespace Internal {
|
||||
|
||||
GuiAppWizard::GuiAppWizard()
|
||||
: QtWizard(QLatin1String("C.Qt4Gui"),
|
||||
QLatin1String(ProjectExplorer::Constants::QT_PROJECT_WIZARD_CATEGORY),
|
||||
QLatin1String(ProjectExplorer::Constants::QT_PROJECT_WIZARD_CATEGORY_DISPLAY),
|
||||
QLatin1String(ProjectExplorer::Constants::QT_APPLICATION_WIZARD_CATEGORY),
|
||||
QLatin1String(ProjectExplorer::Constants::QT_APPLICATION_WIZARD_CATEGORY_DISPLAY),
|
||||
tr("Qt Gui Application"),
|
||||
tr("Creates a Qt application for the desktop. "
|
||||
"Includes a Qt Designer-based main window.\n\n"
|
||||
|
||||
@@ -113,8 +113,8 @@ Core::BaseFileWizardParameters Html5AppWizard::parameters()
|
||||
"mobile target platforms. For example, you can create signed "
|
||||
"Symbian Installation System (SIS) packages for this type of "
|
||||
"projects."));
|
||||
parameters.setCategory(QLatin1String(ProjectExplorer::Constants::PROJECT_WIZARD_CATEGORY));
|
||||
parameters.setDisplayCategory(QLatin1String(ProjectExplorer::Constants::PROJECT_WIZARD_CATEGORY_DISPLAY));
|
||||
parameters.setCategory(QLatin1String(ProjectExplorer::Constants::QT_APPLICATION_WIZARD_CATEGORY));
|
||||
parameters.setDisplayCategory(QLatin1String(ProjectExplorer::Constants::QT_APPLICATION_WIZARD_CATEGORY_DISPLAY));
|
||||
return parameters;
|
||||
}
|
||||
|
||||
|
||||
@@ -53,8 +53,8 @@ namespace Internal {
|
||||
|
||||
LibraryWizard::LibraryWizard()
|
||||
: QtWizard(QLatin1String("H.Qt4Library"),
|
||||
QLatin1String(ProjectExplorer::Constants::PROJECT_WIZARD_CATEGORY),
|
||||
QLatin1String(ProjectExplorer::Constants::PROJECT_WIZARD_CATEGORY_DISPLAY),
|
||||
QLatin1String(ProjectExplorer::Constants::LIBRARIES_WIZARD_CATEGORY),
|
||||
QLatin1String(ProjectExplorer::Constants::LIBRARIES_WIZARD_CATEGORY_DISPLAY),
|
||||
tr("C++ Library"),
|
||||
tr("Creates a C++ library based on qmake. This can be used to create:<ul>"
|
||||
"<li>a shared C++ library for use with <tt>QPluginLoader</tt> and runtime (Plugins)</li>"
|
||||
|
||||
@@ -96,6 +96,7 @@ MobileAppWizard::~MobileAppWizard()
|
||||
Core::FeatureSet MobileAppWizard::requiredFeatures() const
|
||||
{
|
||||
return Core::Feature(QtSupport::Constants::FEATURE_GENERIC_CPP_ENTRY_POINT)
|
||||
| Core::FeatureSet(QtSupport::Constants::FEATURE_MOBILE)
|
||||
| Core::Feature(QtSupport::Constants::FEATURE_QWIDGETS);
|
||||
}
|
||||
|
||||
@@ -106,8 +107,8 @@ Core::BaseFileWizardParameters MobileAppWizard::parameters()
|
||||
parameters.setDisplayName(DisplayName);
|
||||
parameters.setId(QLatin1String("C.Qt4GuiMobile"));
|
||||
parameters.setDescription(Description);
|
||||
parameters.setCategory(QLatin1String(ProjectExplorer::Constants::QT_PROJECT_WIZARD_CATEGORY));
|
||||
parameters.setDisplayCategory(QLatin1String(ProjectExplorer::Constants::QT_PROJECT_WIZARD_CATEGORY_DISPLAY));
|
||||
parameters.setCategory(QLatin1String(ProjectExplorer::Constants::QT_APPLICATION_WIZARD_CATEGORY));
|
||||
parameters.setDisplayCategory(QLatin1String(ProjectExplorer::Constants::QT_APPLICATION_WIZARD_CATEGORY_DISPLAY));
|
||||
return parameters;
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
#include "qt4projectmanagerconstants.h"
|
||||
|
||||
#include <qtsupport/qtsupportconstants.h>
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
#include <coreplugin/dialogs/iwizard.h>
|
||||
|
||||
#include <QtCore/QCoreApplication>
|
||||
@@ -144,9 +145,8 @@ Core::BaseFileWizardParameters QtQuickAppWizard::parameters()
|
||||
"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.4 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));
|
||||
parameters.setCategory(QLatin1String(ProjectExplorer::Constants::QT_APPLICATION_WIZARD_CATEGORY));
|
||||
parameters.setDisplayCategory(ProjectExplorer::Constants::QT_APPLICATION_WIZARD_CATEGORY_DISPLAY);
|
||||
return parameters;
|
||||
}
|
||||
|
||||
|
||||
@@ -240,6 +240,8 @@ int BaseQt4ProjectWizardDialog::addModulesPage(int id)
|
||||
int BaseQt4ProjectWizardDialog::addTargetSetupPage(QSet<QString> targets, bool mobile, int id)
|
||||
{
|
||||
m_targetSetupPage = new TargetSetupPage;
|
||||
m_targetSetupPage->setSelectedPlatform(selectedPlatform());
|
||||
m_targetSetupPage->setRequiredQtFeatures(requiredFeatures());
|
||||
m_targets = targets;
|
||||
resize(900, 450);
|
||||
|
||||
|
||||
@@ -44,8 +44,8 @@ namespace Internal {
|
||||
|
||||
SubdirsProjectWizard::SubdirsProjectWizard()
|
||||
: QtWizard(QLatin1String("U.Qt4Subdirs"),
|
||||
QLatin1String(ProjectExplorer::Constants::PROJECT_WIZARD_CATEGORY),
|
||||
QLatin1String(ProjectExplorer::Constants::PROJECT_WIZARD_CATEGORY_DISPLAY),
|
||||
QLatin1String(ProjectExplorer::Constants::QT_PROJECT_WIZARD_CATEGORY),
|
||||
QLatin1String(ProjectExplorer::Constants::QT_PROJECT_WIZARD_CATEGORY_DISPLAY),
|
||||
tr("Subdirs Project"),
|
||||
tr("Creates a qmake-based subdirs project. This allows you to group "
|
||||
"your projects in a tree structure."),
|
||||
|
||||
@@ -120,6 +120,11 @@ void TargetSetupPage::setRequiredQtFeatures(const Core::FeatureSet &features)
|
||||
m_requiredQtFeatures = features;
|
||||
}
|
||||
|
||||
void TargetSetupPage::setSelectedPlatform(const QString &platform)
|
||||
{
|
||||
m_selectedPlatform = platform;
|
||||
}
|
||||
|
||||
void TargetSetupPage::setMinimumQtVersion(const QtSupport::QtVersionNumber &number)
|
||||
{
|
||||
m_minimumQtVersionNumber = number;
|
||||
@@ -153,11 +158,21 @@ void TargetSetupPage::setupWidgets()
|
||||
continue;
|
||||
|
||||
QList<BuildConfigurationInfo> infos = BuildConfigurationInfo::filterBuildConfigurationInfos(m_importInfos, id);
|
||||
infos = BuildConfigurationInfo::filterBuildConfigurationInfos(infos, m_requiredQtFeatures);
|
||||
const QList<BuildConfigurationInfo> platformFilteredInfos =
|
||||
BuildConfigurationInfo::filterBuildConfigurationInfosByPlatform(factory->availableBuildConfigurations(id,
|
||||
m_proFilePath,
|
||||
m_minimumQtVersionNumber,
|
||||
m_maximumQtVersionNumber,
|
||||
m_requiredQtFeatures),
|
||||
m_selectedPlatform);
|
||||
|
||||
|
||||
|
||||
Qt4TargetSetupWidget *widget =
|
||||
factory->createTargetSetupWidget(id, m_proFilePath,
|
||||
m_minimumQtVersionNumber, m_maximumQtVersionNumber,
|
||||
m_minimumQtVersionNumber,
|
||||
m_maximumQtVersionNumber,
|
||||
m_requiredQtFeatures,
|
||||
m_importSearch, infos);
|
||||
if (widget) {
|
||||
bool selectTarget = false;
|
||||
@@ -168,6 +183,9 @@ void TargetSetupPage::setupWidgets()
|
||||
selectTarget = factory->targetFeatures(id).contains(m_preferredFeatures)
|
||||
&& factory->selectByDefault(id);
|
||||
}
|
||||
if (!m_selectedPlatform.isEmpty()) {
|
||||
selectTarget = !platformFilteredInfos.isEmpty();
|
||||
}
|
||||
}
|
||||
widget->setTargetSelected(selectTarget);
|
||||
atLeastOneTargetSelected |= selectTarget;
|
||||
|
||||
@@ -82,6 +82,8 @@ public:
|
||||
/// Sets the features a qt version must support
|
||||
/// call this before \sa initializePage()
|
||||
void setRequiredQtFeatures(const Core::FeatureSet &features);
|
||||
/// Sets the platform that was selected in the wizard
|
||||
void setSelectedPlatform(const QString &platform);
|
||||
/// Sets the minimum qt version
|
||||
/// calls this before \sa initializePage()
|
||||
void setMinimumQtVersion(const QtSupport::QtVersionNumber &number);
|
||||
@@ -119,6 +121,7 @@ private:
|
||||
QSet<QString> m_preferredFeatures;
|
||||
QSet<QString> m_requiredTargetFeatures;
|
||||
Core::FeatureSet m_requiredQtFeatures;
|
||||
QString m_selectedPlatform;
|
||||
bool m_importSearch;
|
||||
bool m_useScrollArea;
|
||||
QtSupport::QtVersionNumber m_minimumQtVersionNumber;
|
||||
|
||||
@@ -275,6 +275,23 @@ Core::FeatureSet BaseQtVersion::availableFeatures() const
|
||||
return features;
|
||||
}
|
||||
|
||||
QString BaseQtVersion::platformName() const
|
||||
{
|
||||
return QString();
|
||||
}
|
||||
|
||||
QString BaseQtVersion::platformDisplayName() const
|
||||
{
|
||||
return platformName();
|
||||
}
|
||||
|
||||
bool BaseQtVersion::supportsPlatform(const QString &platform) const
|
||||
{
|
||||
if (platform.isEmpty()) // empty target == target independent
|
||||
return true;
|
||||
return platform == platformName();
|
||||
}
|
||||
|
||||
void BaseQtVersion::setId(int id)
|
||||
{
|
||||
m_id = id;
|
||||
|
||||
@@ -216,6 +216,9 @@ public:
|
||||
bool fromPath = false);
|
||||
|
||||
virtual Core::FeatureSet availableFeatures() const;
|
||||
virtual QString platformName() const;
|
||||
virtual QString platformDisplayName() const;
|
||||
virtual bool supportsPlatform(const QString &platformName) const;
|
||||
|
||||
protected:
|
||||
BaseQtVersion();
|
||||
|
||||
@@ -59,14 +59,26 @@ const char FEATURE_QT_CONSOLE[] = "QtSupport.Wizards.FeatureQtConsole";
|
||||
const char FEATURE_GENERIC_CPP_ENTRY_POINT[] ="QtSupport.Wizards.FeatureGenericCppEntryPoint";
|
||||
const char FEATURE_QTQUICK_COMPONENTS_SYMBIAN[] = "QtSupport.Wizards.FeatureQtQuickComponentsSymbian";
|
||||
const char FEATURE_QTQUICK_COMPONENTS_MEEGO[] = "QtSupport.Wizards.FeatureQtQuickComponentsMeego";
|
||||
const char FEATURE_MOBILE[] = "QtSupport.Wizards.FeatureMobile";
|
||||
const char FEATURE_DESKTOP[] = "QtSupport.Wizards.FeatureDesktop";
|
||||
|
||||
// Platforms
|
||||
const char MEEGO_HARMATTAN_PLATFORM[] = "MeeGo/Harmattan";
|
||||
const char SYMBIAN_PLATFORM[] = "Symbian";
|
||||
const char DESKTOP_PLATFORM[] = "Desktop";
|
||||
const char EMBEDDED_LINUX_PLATFORM[] = "Embedded Linux";
|
||||
const char WINDOWS_CE_PLATFORM[] = "Windows CE";
|
||||
|
||||
const char MEEGO_HARMATTAN_PLATFORM_TR[] = QT_TRANSLATE_NOOP("QtSupport", "MeeGo/Harmattan");
|
||||
const char SYMBIAN_PLATFORM_TR[] = QT_TRANSLATE_NOOP("QtSupport", "Symbian");
|
||||
const char DESKTOP_PLATFORM_TR[] = QT_TRANSLATE_NOOP("QtSupport", "Desktop");
|
||||
const char EMBEDDED_LINUX_PLATFORM_TR[] = QT_TRANSLATE_NOOP("QtSupport", "Embedded Linux");
|
||||
const char WINDOWS_CE_PLATFORM_TR[] = QT_TRANSLATE_NOOP("QtSupport", "Windows CE");
|
||||
|
||||
|
||||
// QML wizard categories
|
||||
// QML wizard icon
|
||||
// both the qt4projectmanager and the qmlprojectmanager do have qt quick wizards
|
||||
// so we define the category here
|
||||
const char QML_WIZARD_CATEGORY[] = "C.Projects"; // (before Qt)
|
||||
const char QML_WIZARD_TR_SCOPE[] = "QmlProjectManager";
|
||||
const char QML_WIZARD_TR_CATEGORY[] = QT_TRANSLATE_NOOP("QmlProjectManager", "Qt Quick Project");
|
||||
// so we define the icon here
|
||||
const char QML_WIZARD_ICON[] = ":/qmlproject/images/qml_wizard.png";
|
||||
|
||||
} // namepsace Constants
|
||||
|
||||
@@ -562,11 +562,11 @@ QString QtVersionManager::popPendingGcceUpdate()
|
||||
return m_pendingGcceUpdates.takeFirst();
|
||||
}
|
||||
|
||||
Core::FeatureSet QtVersionManager::availableFeatures() const
|
||||
Core::FeatureSet QtVersionManager::availableFeatures(const QString &platformName) const
|
||||
{
|
||||
Core::FeatureSet features;
|
||||
foreach (BaseQtVersion *const qtVersion, validVersions()) {
|
||||
if (qtVersion->isValid())
|
||||
if (qtVersion->isValid() && ((qtVersion->platformName() == platformName) || platformName.isEmpty()))
|
||||
features |= qtVersion->availableFeatures();
|
||||
}
|
||||
if (validVersions().empty())
|
||||
@@ -574,6 +574,26 @@ Core::FeatureSet QtVersionManager::availableFeatures() const
|
||||
return features;
|
||||
}
|
||||
|
||||
QStringList QtVersionManager::availablePlatforms() const
|
||||
{
|
||||
QStringList platforms;
|
||||
foreach (BaseQtVersion *const qtVersion, validVersions()) {
|
||||
if (qtVersion->isValid() && !qtVersion->platformName().isEmpty())
|
||||
platforms.append(qtVersion->platformName());
|
||||
}
|
||||
platforms.removeDuplicates();
|
||||
return platforms;
|
||||
}
|
||||
|
||||
QString QtVersionManager::displayNameForPlatform(const QString &string) const
|
||||
{
|
||||
foreach (BaseQtVersion *const qtVersion, validVersions()) {
|
||||
if (qtVersion->platformName() == string)
|
||||
return qtVersion->platformDisplayName();
|
||||
}
|
||||
return QString();
|
||||
}
|
||||
|
||||
BaseQtVersion *QtVersionManager::version(int id) const
|
||||
{
|
||||
QMap<int, BaseQtVersion *>::const_iterator it = m_versions.find(id);
|
||||
@@ -893,7 +913,17 @@ BaseQtVersion::QmakeBuildConfigs QtVersionManager::qmakeBuildConfigFromCmdArgs(Q
|
||||
return result;
|
||||
}
|
||||
|
||||
Core::FeatureSet QtFeatureProvider::availableFeatures() const
|
||||
Core::FeatureSet QtFeatureProvider::availableFeatures(const QString &platformName) const
|
||||
{
|
||||
return QtVersionManager::instance()->availableFeatures();
|
||||
return QtVersionManager::instance()->availableFeatures(platformName);
|
||||
}
|
||||
|
||||
QStringList QtFeatureProvider::availablePlatforms() const
|
||||
{
|
||||
return QtVersionManager::instance()->availablePlatforms();
|
||||
}
|
||||
|
||||
QString QtFeatureProvider::displayNameForPlatform(const QString &string) const
|
||||
{
|
||||
return QtVersionManager::instance()->displayNameForPlatform(string);
|
||||
}
|
||||
|
||||
@@ -101,7 +101,9 @@ public:
|
||||
QString popPendingMwcUpdate();
|
||||
QString popPendingGcceUpdate();
|
||||
|
||||
Core::FeatureSet availableFeatures() const;
|
||||
Core::FeatureSet availableFeatures(const QString &platformName) const;
|
||||
QStringList availablePlatforms() const;
|
||||
QString displayNameForPlatform(const QString &string) const;
|
||||
|
||||
signals:
|
||||
// content of BaseQtVersion objects with qmake path might have changed
|
||||
@@ -155,7 +157,9 @@ class QTSUPPORT_EXPORT QtFeatureProvider : public Core::IFeatureProvider
|
||||
|
||||
public:
|
||||
QtFeatureProvider() {}
|
||||
virtual Core::FeatureSet availableFeatures() const;
|
||||
Core::FeatureSet availableFeatures(const QString &platformName) const;
|
||||
QStringList availablePlatforms() const;
|
||||
QString displayNameForPlatform(const QString &string) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -34,6 +34,8 @@
|
||||
|
||||
#include "remotelinux_constants.h"
|
||||
|
||||
#include <qtsupport/qtsupportconstants.h>
|
||||
|
||||
#include <QtCore/QCoreApplication>
|
||||
|
||||
namespace RemoteLinux {
|
||||
@@ -87,5 +89,15 @@ QString EmbeddedLinuxQtVersion::description() const
|
||||
return QCoreApplication::translate("QtVersion", "Embedded Linux", "Qt Version is used for embedded Linux development");
|
||||
}
|
||||
|
||||
QString EmbeddedLinuxQtVersion::platformName() const
|
||||
{
|
||||
return QLatin1String(QtSupport::Constants::EMBEDDED_LINUX_PLATFORM);
|
||||
}
|
||||
|
||||
QString EmbeddedLinuxQtVersion::platformDisplayName() const
|
||||
{
|
||||
return QLatin1String(QtSupport::Constants::EMBEDDED_LINUX_PLATFORM_TR);
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace RemoteLinux
|
||||
|
||||
@@ -56,6 +56,9 @@ public:
|
||||
QSet<QString> supportedTargetIds() const;
|
||||
|
||||
QString description() const;
|
||||
|
||||
QString platformName() const;
|
||||
QString platformDisplayName() const;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
@@ -111,6 +111,7 @@ bool TextEditorPlugin::initialize(const QStringList &arguments, QString *errorMe
|
||||
wizardParameters.setDisplayName(tr("Text File"));
|
||||
wizardParameters.setCategory(QLatin1String("U.General"));
|
||||
wizardParameters.setDisplayCategory(tr("General"));
|
||||
wizardParameters.setFlags(Core::IWizard::PlatformIndependent);
|
||||
TextFileWizard *wizard = new TextFileWizard(QLatin1String(Constants::C_TEXTEDITOR_MIMETYPE_TEXT),
|
||||
QLatin1String("text$"),
|
||||
wizardParameters);
|
||||
|
||||
@@ -124,7 +124,7 @@ void BaseCheckoutWizard::setId(const QString &id)
|
||||
d->id = id;
|
||||
}
|
||||
|
||||
void BaseCheckoutWizard::runWizard(const QString &path, QWidget *parent)
|
||||
void BaseCheckoutWizard::runWizard(const QString &path, QWidget *parent, const QString & /*platform*/)
|
||||
{
|
||||
// Create dialog and launch
|
||||
d->parameterPages = createParameterPages(path);
|
||||
@@ -152,6 +152,11 @@ Core::FeatureSet BaseCheckoutWizard::requiredFeatures() const
|
||||
return Core::FeatureSet();
|
||||
}
|
||||
|
||||
Core::IWizard::WizardFlags BaseCheckoutWizard::flags() const
|
||||
{
|
||||
return Core::IWizard::PlatformIndependent;
|
||||
}
|
||||
|
||||
static inline QString msgNoProjectFiles(const QDir &dir, const QStringList &patterns)
|
||||
{
|
||||
return BaseCheckoutWizard::tr("Could not find any project files matching (%1) in the directory '%2'.").arg(patterns.join(QLatin1String(", ")), QDir::toNativeSeparators(dir.absolutePath()));
|
||||
|
||||
@@ -64,10 +64,12 @@ public:
|
||||
virtual QString displayCategory() const;
|
||||
virtual QString id() const;
|
||||
|
||||
virtual void runWizard(const QString &path, QWidget *parent);
|
||||
virtual void runWizard(const QString &path, QWidget *parent, const QString &platform);
|
||||
|
||||
virtual Core::FeatureSet requiredFeatures() const;
|
||||
|
||||
virtual WizardFlags flags() const;
|
||||
|
||||
static QString openProject(const QString &path, QString *errorMessage);
|
||||
|
||||
protected:
|
||||
|
||||
Reference in New Issue
Block a user