diff options
Diffstat (limited to 'src/plugins/projectexplorer')
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(); |