summaryrefslogtreecommitdiff
path: root/src/plugins/projectexplorer
diff options
context:
space:
mode:
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();