summaryrefslogtreecommitdiff
path: root/src/plugins/projectexplorer
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2019-07-30 09:15:56 +0200
committerhjk <hjk@qt.io>2019-07-31 11:36:55 +0000
commit4461efdfbb050c5bab105264e9c1d0bab9fe04b5 (patch)
treead4e6e985e7c55d242b91348e9347ee5c06259cc /src/plugins/projectexplorer
parent7d3091a7b9e42efc382f0c1d33e9a34931734ee2 (diff)
downloadqt-creator-4461efdfbb050c5bab105264e9c1d0bab9fe04b5.tar.gz
ProjectExplorer: Move *ConfigurationModel ownership to target
The models hold essentially duplicated information besides the actual configuration lists that are already in the target and are only used in a context where the target is known and accessible. As the models keep track of all added or removed configurations and can be fed configurations of the right types only, the need to filter is gone. Change-Id: Iec2c6879223893297c71e7632310ac526b704237 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/projectexplorer')
-rw-r--r--src/plugins/projectexplorer/buildsettingspropertiespage.cpp14
-rw-r--r--src/plugins/projectexplorer/projectconfigurationmodel.cpp65
-rw-r--r--src/plugins/projectexplorer/projectconfigurationmodel.h35
-rw-r--r--src/plugins/projectexplorer/runsettingspropertiespage.cpp29
-rw-r--r--src/plugins/projectexplorer/runsettingspropertiespage.h4
-rw-r--r--src/plugins/projectexplorer/target.cpp45
-rw-r--r--src/plugins/projectexplorer/target.h5
7 files changed, 76 insertions, 121 deletions
diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
index 481c37eef0..98645ee987 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
@@ -83,7 +83,7 @@ BuildSettingsWidget::BuildSettingsWidget(Target *target) :
hbox->addWidget(new QLabel(tr("Edit build configuration:"), this));
m_buildConfigurationComboBox = new QComboBox(this);
m_buildConfigurationComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents);
- m_buildConfigurationComboBox->setModel(new BuildConfigurationModel(m_target, this));
+ m_buildConfigurationComboBox->setModel(m_target->buildConfigurationModel());
hbox->addWidget(m_buildConfigurationComboBox);
m_addButton = new QPushButton(this);
@@ -113,8 +113,8 @@ BuildSettingsWidget::BuildSettingsWidget(Target *target) :
}
m_buildConfiguration = m_target->activeBuildConfiguration();
- auto model = static_cast<BuildConfigurationModel *>(m_buildConfigurationComboBox->model());
- m_buildConfigurationComboBox->setCurrentIndex(model->indexFor(m_buildConfiguration).row());
+ m_buildConfigurationComboBox->setCurrentIndex(
+ m_target->buildConfigurationModel()->indexFor(m_buildConfiguration));
updateAddButtonMenu();
updateBuildSettings();
@@ -217,8 +217,8 @@ void BuildSettingsWidget::updateBuildSettings()
void BuildSettingsWidget::currentIndexChanged(int index)
{
- auto model = static_cast<BuildConfigurationModel *>(m_buildConfigurationComboBox->model());
- auto buildConfiguration = qobject_cast<BuildConfiguration *>(model->projectConfigurationAt(index));
+ auto buildConfiguration = qobject_cast<BuildConfiguration *>(
+ m_target->buildConfigurationModel()->projectConfigurationAt(index));
SessionManager::setActiveBuildConfiguration(m_target, buildConfiguration, SetActive::Cascade);
}
@@ -229,8 +229,8 @@ void BuildSettingsWidget::updateActiveConfiguration()
m_buildConfiguration = m_target->activeBuildConfiguration();
- auto model = static_cast<BuildConfigurationModel *>(m_buildConfigurationComboBox->model());
- m_buildConfigurationComboBox->setCurrentIndex(model->indexFor(m_buildConfiguration).row());
+ m_buildConfigurationComboBox->setCurrentIndex(
+ m_target->buildConfigurationModel()->indexFor(m_buildConfiguration));
updateBuildSettings();
}
diff --git a/src/plugins/projectexplorer/projectconfigurationmodel.cpp b/src/plugins/projectexplorer/projectconfigurationmodel.cpp
index 111d5a0745..c3617fb99b 100644
--- a/src/plugins/projectexplorer/projectconfigurationmodel.cpp
+++ b/src/plugins/projectexplorer/projectconfigurationmodel.cpp
@@ -57,23 +57,9 @@ const auto ComparisonOperator =
} // namespace
-ProjectConfigurationModel::ProjectConfigurationModel(Target *target, FilterFunction filter,
- QObject *parent) :
- QAbstractListModel(parent),
- m_target(target),
- m_filter(filter)
+ProjectConfigurationModel::ProjectConfigurationModel(Target *target) :
+ m_target(target)
{
- m_projectConfigurations = Utils::filtered(m_target->projectConfigurations(), m_filter);
- Utils::sort(m_projectConfigurations, ComparisonOperator);
-
- connect(target, &Target::addedProjectConfiguration,
- this, &ProjectConfigurationModel::addedProjectConfiguration);
- connect(target, &Target::removedProjectConfiguration,
- this, &ProjectConfigurationModel::removedProjectConfiguration);
-
- foreach (ProjectConfiguration *pc, m_projectConfigurations)
- connect(pc, &ProjectConfiguration::displayNameChanged,
- this, &ProjectConfigurationModel::displayNameChanged);
}
int ProjectConfigurationModel::rowCount(const QModelIndex &parent) const
@@ -142,33 +128,20 @@ QVariant ProjectConfigurationModel::data(const QModelIndex &index, int role) con
return QVariant();
}
-ProjectConfiguration *ProjectConfigurationModel::projectConfigurationAt(int i)
+ProjectConfiguration *ProjectConfigurationModel::projectConfigurationAt(int i) const
{
if (i > m_projectConfigurations.size() || i < 0)
return nullptr;
return m_projectConfigurations.at(i);
}
-ProjectConfiguration *ProjectConfigurationModel::projectConfigurationFor(const QModelIndex &idx)
+int ProjectConfigurationModel::indexFor(ProjectConfiguration *pc) const
{
- if (idx.row() > m_projectConfigurations.size() || idx.row() < 0)
- return nullptr;
- return m_projectConfigurations.at(idx.row());
+ return m_projectConfigurations.indexOf(pc);
}
-QModelIndex ProjectConfigurationModel::indexFor(ProjectConfiguration *pc)
+void ProjectConfigurationModel::addProjectConfiguration(ProjectConfiguration *pc)
{
- int idx = m_projectConfigurations.indexOf(pc);
- if (idx == -1)
- return QModelIndex();
- return index(idx, 0);
-}
-
-void ProjectConfigurationModel::addedProjectConfiguration(ProjectConfiguration *pc)
-{
- if (!m_filter(pc))
- return;
-
// Find the right place to insert
int i = 0;
for (; i < m_projectConfigurations.size(); ++i) {
@@ -184,7 +157,7 @@ void ProjectConfigurationModel::addedProjectConfiguration(ProjectConfiguration *
this, &ProjectConfigurationModel::displayNameChanged);
}
-void ProjectConfigurationModel::removedProjectConfiguration(ProjectConfiguration *pc)
+void ProjectConfigurationModel::removeProjectConfiguration(ProjectConfiguration *pc)
{
int i = m_projectConfigurations.indexOf(pc);
if (i < 0)
@@ -193,27 +166,3 @@ void ProjectConfigurationModel::removedProjectConfiguration(ProjectConfiguration
m_projectConfigurations.removeAt(i);
endRemoveRows();
}
-
-BuildConfigurationModel::BuildConfigurationModel(Target *t, QObject *parent) :
- ProjectConfigurationModel(t,
- [](const ProjectConfiguration *pc) {
- return qobject_cast<const BuildConfiguration *>(pc) != nullptr;
- },
- parent)
-{ }
-
-DeployConfigurationModel::DeployConfigurationModel(Target *t, QObject *parent) :
- ProjectConfigurationModel(t,
- [](const ProjectConfiguration *pc) {
- return qobject_cast<const DeployConfiguration *>(pc) != nullptr;
- },
- parent)
-{ }
-
-RunConfigurationModel::RunConfigurationModel(Target *t, QObject *parent) :
- ProjectConfigurationModel(t,
- [](const ProjectConfiguration *pc) {
- return qobject_cast<const RunConfiguration *>(pc) != nullptr;
- },
- parent)
-{ }
diff --git a/src/plugins/projectexplorer/projectconfigurationmodel.h b/src/plugins/projectexplorer/projectconfigurationmodel.h
index adc1a00402..d3d68b3bfb 100644
--- a/src/plugins/projectexplorer/projectconfigurationmodel.h
+++ b/src/plugins/projectexplorer/projectconfigurationmodel.h
@@ -37,46 +37,25 @@ class ProjectConfiguration;
class ProjectConfigurationModel : public QAbstractListModel
{
Q_OBJECT
-public:
- using FilterFunction = std::function<bool(const ProjectConfiguration *)>;
- explicit ProjectConfigurationModel(Target *target, FilterFunction filter,
- QObject *parent = nullptr);
+public:
+ explicit ProjectConfigurationModel(Target *target);
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
- ProjectConfiguration *projectConfigurationAt(int i);
- ProjectConfiguration *projectConfigurationFor(const QModelIndex &idx);
- QModelIndex indexFor(ProjectConfiguration *pc);
+ ProjectConfiguration *projectConfigurationAt(int i) const;
+ int indexFor(ProjectConfiguration *pc) const;
+
+ void addProjectConfiguration(ProjectConfiguration *pc);
+ void removeProjectConfiguration(ProjectConfiguration *pc);
private:
- void addedProjectConfiguration(ProjectConfiguration *pc);
- void removedProjectConfiguration(ProjectConfiguration *pc);
void displayNameChanged();
Target *m_target;
- FilterFunction m_filter;
QList<ProjectConfiguration *> m_projectConfigurations;
};
-class BuildConfigurationModel : public ProjectConfigurationModel
-{
-public:
- explicit BuildConfigurationModel(Target *t, QObject *parent = nullptr);
-};
-
-class DeployConfigurationModel : public ProjectConfigurationModel
-{
-public:
- explicit DeployConfigurationModel(Target *t, QObject *parent = nullptr);
-};
-
-class RunConfigurationModel : public ProjectConfigurationModel
-{
-public:
- explicit RunConfigurationModel(Target *t, QObject *parent = nullptr);
-};
-
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
index 39b2f01af6..1b3473e605 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
@@ -76,9 +76,7 @@ using ExtensionSystem::PluginManager;
///
RunSettingsWidget::RunSettingsWidget(Target *target) :
- m_target(target),
- m_runConfigurationsModel(new RunConfigurationModel(target, this)),
- m_deployConfigurationModel(new DeployConfigurationModel(target, this))
+ m_target(target)
{
Q_ASSERT(m_target);
@@ -146,7 +144,7 @@ RunSettingsWidget::RunSettingsWidget(Target *target) :
m_deployLayout->setMargin(0);
m_deployLayout->setSpacing(5);
- m_deployConfigurationCombo->setModel(m_deployConfigurationModel);
+ m_deployConfigurationCombo->setModel(m_target->deployConfigurationModel());
m_addDeployMenu = new QMenu(m_addDeployToolButton);
m_addDeployToolButton->setMenu(m_addDeployMenu);
@@ -188,10 +186,10 @@ RunSettingsWidget::RunSettingsWidget(Target *target) :
m_runLayout->addLayout(disabledHBox);
+ ProjectConfigurationModel *model = m_target->runConfigurationModel();
RunConfiguration *rc = m_target->activeRunConfiguration();
- m_runConfigurationCombo->setModel(m_runConfigurationsModel);
- m_runConfigurationCombo->setCurrentIndex(
- m_runConfigurationsModel->indexFor(rc).row());
+ m_runConfigurationCombo->setModel(model);
+ m_runConfigurationCombo->setCurrentIndex(model->indexFor(rc));
m_removeRunToolButton->setEnabled(m_target->runConfigurations().size() > 1);
m_renameRunButton->setEnabled(rc);
@@ -284,10 +282,12 @@ void RunSettingsWidget::activeRunConfigurationChanged()
{
if (m_ignoreChange)
return;
- QModelIndex actRc = m_runConfigurationsModel->indexFor(m_target->activeRunConfiguration());
+
+ ProjectConfigurationModel *model = m_target->runConfigurationModel();
+ int index = model->indexFor(m_target->activeRunConfiguration());
m_ignoreChange = true;
- m_runConfigurationCombo->setCurrentIndex(actRc.row());
- setConfigurationWidget(qobject_cast<RunConfiguration *>(m_runConfigurationsModel->projectConfigurationAt(actRc.row())));
+ m_runConfigurationCombo->setCurrentIndex(index);
+ setConfigurationWidget(qobject_cast<RunConfiguration *>(model->projectConfigurationAt(index)));
m_ignoreChange = false;
m_renameRunButton->setEnabled(m_target->activeRunConfiguration());
m_cloneRunButton->setEnabled(m_target->activeRunConfiguration());
@@ -318,7 +318,8 @@ void RunSettingsWidget::currentRunConfigurationChanged(int index)
RunConfiguration *selectedRunConfiguration = nullptr;
if (index >= 0)
- selectedRunConfiguration = qobject_cast<RunConfiguration *>(m_runConfigurationsModel->projectConfigurationAt(index));
+ selectedRunConfiguration = qobject_cast<RunConfiguration *>
+ (m_target->runConfigurationModel()->projectConfigurationAt(index));
if (selectedRunConfiguration == m_runConfiguration)
return;
@@ -339,7 +340,7 @@ void RunSettingsWidget::currentDeployConfigurationChanged(int index)
SessionManager::setActiveDeployConfiguration(m_target, nullptr, SetActive::Cascade);
else
SessionManager::setActiveDeployConfiguration(m_target,
- qobject_cast<DeployConfiguration *>(m_deployConfigurationModel->projectConfigurationAt(index)),
+ qobject_cast<DeployConfiguration *>(m_target->deployConfigurationModel()->projectConfigurationAt(index)),
SetActive::Cascade);
}
@@ -434,9 +435,9 @@ void RunSettingsWidget::updateDeployConfiguration(DeployConfiguration *dc)
if (!dc)
return;
- QModelIndex actDc = m_deployConfigurationModel->indexFor(dc);
+ int index = m_target->deployConfigurationModel()->indexFor(dc);
m_ignoreChange = true;
- m_deployConfigurationCombo->setCurrentIndex(actDc.row());
+ m_deployConfigurationCombo->setCurrentIndex(index);
m_ignoreChange = false;
m_deployConfigurationWidget = dc->createConfigWidget();
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.h b/src/plugins/projectexplorer/runsettingspropertiespage.h
index bf86fe56ba..2ed66cb169 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.h
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.h
@@ -39,10 +39,8 @@ QT_END_NAMESPACE
namespace ProjectExplorer {
class DeployConfiguration;
-class DeployConfigurationModel;
class NamedWidget;
class RunConfiguration;
-class RunConfigurationModel;
class RunConfigWidget;
class Target;
@@ -83,8 +81,6 @@ private:
void updateEnabledState();
Target *m_target;
- RunConfigurationModel *m_runConfigurationsModel;
- DeployConfigurationModel *m_deployConfigurationModel;
QWidget *m_runConfigurationWidget = nullptr;
RunConfiguration *m_runConfiguration = nullptr;
QVBoxLayout *m_runLayout = nullptr;
diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp
index ce3f4c9b32..6c6c7255bb 100644
--- a/src/plugins/projectexplorer/target.cpp
+++ b/src/plugins/projectexplorer/target.cpp
@@ -23,6 +23,7 @@
**
****************************************************************************/
+#include "projectconfigurationmodel.h"
#include "target.h"
#include "buildconfiguration.h"
@@ -59,7 +60,8 @@
using namespace Utils;
-namespace {
+namespace ProjectExplorer {
+
const char ACTIVE_BC_KEY[] = "ProjectExplorer.Target.ActiveBuildConfiguration";
const char BC_KEY_PREFIX[] = "ProjectExplorer.Target.BuildConfiguration.";
const char BC_COUNT_KEY[] = "ProjectExplorer.Target.BuildConfigurationCount";
@@ -82,18 +84,19 @@ static QString formatDeviceInfo(const ProjectExplorer::IDevice::DeviceInfo &inpu
return lines.join(QLatin1String("<br>"));
}
-} // namespace
-
// -------------------------------------------------------------------------
// Target
// -------------------------------------------------------------------------
-namespace ProjectExplorer {
-
class TargetPrivate
{
public:
- TargetPrivate(Kit *k);
+ TargetPrivate(Target *t, Kit *k) :
+ m_kit(k),
+ m_buildConfigurationModel(t),
+ m_deployConfigurationModel(t),
+ m_runConfigurationModel(t)
+ { }
bool m_isEnabled = true;
QIcon m_overlayIcon;
@@ -110,15 +113,16 @@ public:
Kit *const m_kit;
MacroExpander m_macroExpander;
+
+ ProjectConfigurationModel m_buildConfigurationModel;
+ ProjectConfigurationModel m_deployConfigurationModel;
+ ProjectConfigurationModel m_runConfigurationModel;
};
-TargetPrivate::TargetPrivate(Kit *k) :
- m_kit(k)
-{ }
Target::Target(Project *project, Kit *k, _constructor_tag) :
QObject(project),
- d(std::make_unique<TargetPrivate>(k))
+ d(std::make_unique<TargetPrivate>(this, k))
{
QTC_CHECK(d->m_kit);
connect(DeviceManager::instance(), &DeviceManager::updated, this, &Target::updateDeviceState);
@@ -227,6 +231,7 @@ void Target::addBuildConfiguration(BuildConfiguration *bc)
emit addedProjectConfiguration(bc);
emit addedBuildConfiguration(bc);
+ d->m_buildConfigurationModel.addProjectConfiguration(bc);
if (!activeBuildConfiguration())
setActiveBuildConfiguration(bc);
@@ -255,6 +260,7 @@ bool Target::removeBuildConfiguration(BuildConfiguration *bc)
emit removedBuildConfiguration(bc);
emit removedProjectConfiguration(bc);
+ d->m_buildConfigurationModel.removeProjectConfiguration(bc);
delete bc;
return true;
@@ -296,6 +302,7 @@ void Target::addDeployConfiguration(DeployConfiguration *dc)
d->m_deployConfigurations.push_back(dc);
emit addedProjectConfiguration(dc);
+ d->m_deployConfigurationModel.addProjectConfiguration(dc);
emit addedDeployConfiguration(dc);
if (!d->m_activeDeployConfiguration)
@@ -324,6 +331,7 @@ bool Target::removeDeployConfiguration(DeployConfiguration *dc)
}
emit removedProjectConfiguration(dc);
+ d->m_deployConfigurationModel.removeProjectConfiguration(dc);
emit removedDeployConfiguration(dc);
delete dc;
@@ -413,6 +421,7 @@ void Target::addRunConfiguration(RunConfiguration *rc)
d->m_runConfigurations.push_back(rc);
emit addedProjectConfiguration(rc);
+ d->m_runConfigurationModel.addProjectConfiguration(rc);
emit addedRunConfiguration(rc);
if (!activeRunConfiguration())
@@ -435,6 +444,7 @@ void Target::removeRunConfiguration(RunConfiguration *rc)
emit removedRunConfiguration(rc);
emit removedProjectConfiguration(rc);
+ d->m_runConfigurationModel.removeProjectConfiguration(rc);
delete rc;
}
@@ -728,6 +738,21 @@ MacroExpander *Target::macroExpander() const
return &d->m_macroExpander;
}
+ProjectConfigurationModel *Target::buildConfigurationModel() const
+{
+ return &d->m_buildConfigurationModel;
+}
+
+ProjectConfigurationModel *Target::deployConfigurationModel() const
+{
+ return &d->m_deployConfigurationModel;
+}
+
+ProjectConfigurationModel *Target::runConfigurationModel() const
+{
+ return &d->m_runConfigurationModel;
+}
+
void Target::updateDeviceState()
{
IDevice::ConstPtr current = DeviceKitAspect::device(kit());
diff --git a/src/plugins/projectexplorer/target.h b/src/plugins/projectexplorer/target.h
index ed2a225d04..7a631b2155 100644
--- a/src/plugins/projectexplorer/target.h
+++ b/src/plugins/projectexplorer/target.h
@@ -42,6 +42,7 @@ class DeploymentData;
class Kit;
class MakeInstallCommand;
class Project;
+class ProjectConfigurationModel;
class RunConfiguration;
class TargetPrivate;
@@ -123,6 +124,10 @@ public:
Utils::MacroExpander *macroExpander() const;
+ ProjectConfigurationModel *buildConfigurationModel() const;
+ ProjectConfigurationModel *deployConfigurationModel() const;
+ ProjectConfigurationModel *runConfigurationModel() const;
+
signals:
void targetEnabled(bool);
void iconChanged();