diff --git a/src/plugins/projectexplorer/miniprojecttargetselector.cpp b/src/plugins/projectexplorer/miniprojecttargetselector.cpp index 087bf9181dd..85b75860e88 100644 --- a/src/plugins/projectexplorer/miniprojecttargetselector.cpp +++ b/src/plugins/projectexplorer/miniprojecttargetselector.cpp @@ -990,13 +990,8 @@ void MiniProjectTargetSelector::doLayout(bool keepSize) void MiniProjectTargetSelector::projectAdded(Project *project) { - connect(project, &Project::addedProjectConfiguration, - this, &MiniProjectTargetSelector::handleNewProjectConfiguration); connect(project, &Project::addedTarget, this, &MiniProjectTargetSelector::handleNewTarget); - - connect(project, &Project::removedProjectConfiguration, - this, &MiniProjectTargetSelector::handleRemovalOfProjectConfiguration); connect(project, &Project::removedTarget, this, &MiniProjectTargetSelector::handleRemovalOfTarget); @@ -1012,13 +1007,8 @@ void MiniProjectTargetSelector::projectAdded(Project *project) void MiniProjectTargetSelector::projectRemoved(Project *project) { - disconnect(project, &Project::addedProjectConfiguration, - this, &MiniProjectTargetSelector::handleNewProjectConfiguration); disconnect(project, &Project::addedTarget, this, &MiniProjectTargetSelector::handleNewTarget); - - disconnect(project, &Project::removedProjectConfiguration, - this, &MiniProjectTargetSelector::handleRemovalOfProjectConfiguration); disconnect(project, &Project::removedTarget, this, &MiniProjectTargetSelector::handleRemovalOfTarget); @@ -1041,25 +1031,6 @@ void MiniProjectTargetSelector::handleNewTarget(Target *target) updateRunListVisible(); } -void MiniProjectTargetSelector::handleNewProjectConfiguration(ProjectConfiguration *pc) -{ - if (auto bc = qobject_cast(pc)) { - if (addedBuildConfiguration(bc)) - updateBuildListVisible(); - return; - } - if (auto dc = qobject_cast(pc)) { - if (addedDeployConfiguration(dc)) - updateDeployListVisible(); - return; - } - if (auto rc = qobject_cast(pc)) { - if (addedRunConfiguration(rc)) - updateRunListVisible(); - return; - } -} - void MiniProjectTargetSelector::handleRemovalOfTarget(Target *target) { removedTarget(target); @@ -1070,25 +1041,6 @@ void MiniProjectTargetSelector::handleRemovalOfTarget(Target *target) updateRunListVisible(); } -void MiniProjectTargetSelector::handleRemovalOfProjectConfiguration(ProjectConfiguration *pc) -{ - if (auto bc = qobject_cast(pc)) { - if (removedBuildConfiguration(bc)) - updateBuildListVisible(); - return; - } - if (auto dc = qobject_cast(pc)) { - if (removedDeployConfiguration(dc)) - updateDeployListVisible(); - return; - } - if (auto rc = qobject_cast(pc)) { - if (removedRunConfiguration(rc)) - updateRunListVisible(); - return; - } -} - void MiniProjectTargetSelector::addedTarget(Target *target) { if (target->project() != m_project) @@ -1096,12 +1048,12 @@ void MiniProjectTargetSelector::addedTarget(Target *target) m_listWidgets[TARGET]->addProjectConfiguration(target); - foreach (BuildConfiguration *bc, target->buildConfigurations()) - addedBuildConfiguration(bc); - foreach (DeployConfiguration *dc, target->deployConfigurations()) - addedDeployConfiguration(dc); - foreach (RunConfiguration *rc, target->runConfigurations()) - addedRunConfiguration(rc); + for (BuildConfiguration *bc : target->buildConfigurations()) + addedBuildConfiguration(bc, false); + for (DeployConfiguration *dc : target->deployConfigurations()) + addedDeployConfiguration(dc, false); + for (RunConfiguration *rc : target->runConfigurations()) + addedRunConfiguration(rc, false); } void MiniProjectTargetSelector::removedTarget(Target *target) @@ -1111,65 +1063,72 @@ void MiniProjectTargetSelector::removedTarget(Target *target) m_listWidgets[TARGET]->removeProjectConfiguration(target); - foreach (BuildConfiguration *bc, target->buildConfigurations()) - removedBuildConfiguration(bc); - foreach (DeployConfiguration *dc, target->deployConfigurations()) - removedDeployConfiguration(dc); - foreach (RunConfiguration *rc, target->runConfigurations()) - removedRunConfiguration(rc); + for (BuildConfiguration *bc : target->buildConfigurations()) + removedBuildConfiguration(bc, false); + for (DeployConfiguration *dc : target->deployConfigurations()) + removedDeployConfiguration(dc, false); + for (RunConfiguration *rc : target->runConfigurations()) + removedRunConfiguration(rc, false); } -bool MiniProjectTargetSelector::addedBuildConfiguration(BuildConfiguration *bc) +void MiniProjectTargetSelector::addedBuildConfiguration(BuildConfiguration *bc, bool update) { - if (bc->target() != m_project->activeTarget()) - return false; + if (!m_project || bc->target() != m_project->activeTarget()) + return; m_listWidgets[BUILD]->addProjectConfiguration(bc); - return true; + if (update) + updateBuildListVisible(); } -bool MiniProjectTargetSelector::removedBuildConfiguration(BuildConfiguration *bc) +void MiniProjectTargetSelector::removedBuildConfiguration(BuildConfiguration *bc, bool update) { - if (bc->target() != m_project->activeTarget()) - return false; + if (!m_project || bc->target() != m_project->activeTarget()) + return; m_listWidgets[BUILD]->removeProjectConfiguration(bc); - return true; + if (update) + updateBuildListVisible(); } -bool MiniProjectTargetSelector::addedDeployConfiguration(DeployConfiguration *dc) +void MiniProjectTargetSelector::addedDeployConfiguration(DeployConfiguration *dc, bool update) { if (!m_project || dc->target() != m_project->activeTarget()) - return false; + return; m_listWidgets[DEPLOY]->addProjectConfiguration(dc); - return true; + if (update) + updateDeployListVisible(); } -bool MiniProjectTargetSelector::removedDeployConfiguration(DeployConfiguration *dc) +void MiniProjectTargetSelector::removedDeployConfiguration(DeployConfiguration *dc, bool update) { if (!m_project || dc->target() != m_project->activeTarget()) - return false; + return; m_listWidgets[DEPLOY]->removeProjectConfiguration(dc); - return true; + if (update) + updateDeployListVisible(); } -bool MiniProjectTargetSelector::addedRunConfiguration(RunConfiguration *rc) + +void MiniProjectTargetSelector::addedRunConfiguration(RunConfiguration *rc, bool update) { if (!m_project || rc->target() != m_project->activeTarget()) - return false; + return; m_listWidgets[RUN]->addProjectConfiguration(rc); - return true; + if (update) + updateRunListVisible(); } -bool MiniProjectTargetSelector::removedRunConfiguration(RunConfiguration *rc) +void MiniProjectTargetSelector::removedRunConfiguration(RunConfiguration *rc, bool update) { if (!m_project || rc->target() != m_project->activeTarget()) - return false; + return; m_listWidgets[RUN]->removeProjectConfiguration(rc); - return true; + if (update) + updateRunListVisible(); } void MiniProjectTargetSelector::updateProjectListVisible() diff --git a/src/plugins/projectexplorer/miniprojecttargetselector.h b/src/plugins/projectexplorer/miniprojecttargetselector.h index e78d416089b..b86845f59a9 100644 --- a/src/plugins/projectexplorer/miniprojecttargetselector.h +++ b/src/plugins/projectexplorer/miniprojecttargetselector.h @@ -38,7 +38,6 @@ class Project; class Target; class BuildConfiguration; class DeployConfiguration; -class ProjectConfiguration; class RunConfiguration; namespace Internal { @@ -51,7 +50,8 @@ class MiniProjectTargetSelector : public QWidget Q_OBJECT public: - explicit MiniProjectTargetSelector(QAction *projectAction, QWidget *parent = nullptr); + explicit MiniProjectTargetSelector(QAction *projectAction, QWidget *parent); + void setVisible(bool visible) override; void keyPressEvent(QKeyEvent *ke) override; @@ -62,11 +62,10 @@ public: void nextOrShow(); private: + friend class ProjectExplorer::Target; void projectAdded(ProjectExplorer::Project *project); void projectRemoved(ProjectExplorer::Project *project); - void handleNewProjectConfiguration(ProjectExplorer::ProjectConfiguration *pc); void handleNewTarget(Target *target); - void handleRemovalOfProjectConfiguration(ProjectExplorer::ProjectConfiguration *pc); void handleRemovalOfTarget(Target *pc); void changeStartupProject(ProjectExplorer::Project *project); @@ -81,12 +80,12 @@ private: void switchToProjectsMode(); void addedTarget(Target *target); void removedTarget(Target *target); - bool addedBuildConfiguration(BuildConfiguration* bc); - bool removedBuildConfiguration(BuildConfiguration* bc); - bool addedDeployConfiguration(DeployConfiguration *dc); - bool removedDeployConfiguration(DeployConfiguration *dc); - bool addedRunConfiguration(RunConfiguration *rc); - bool removedRunConfiguration(RunConfiguration *rc); + void addedBuildConfiguration(BuildConfiguration *bc, bool update = true); + void removedBuildConfiguration(BuildConfiguration *bc, bool update = true); + void addedDeployConfiguration(DeployConfiguration *dc, bool update = true); + void removedDeployConfiguration(DeployConfiguration *dc, bool update = true); + void addedRunConfiguration(RunConfiguration *rc, bool update = true); + void removedRunConfiguration(RunConfiguration *rc, bool update = true); void updateProjectListVisible(); void updateTargetListVisible(); diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index 5fb9c3ad8e7..2b0c95a1341 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -51,12 +51,10 @@ namespace ProjectExplorer { class BuildInfo; class BuildSystem; -class BuildConfiguration; class ContainerNode; class EditorConfiguration; class FolderNode; class Node; -class ProjectConfiguration; class ProjectImporter; class ProjectNode; class ProjectPrivate; @@ -183,9 +181,6 @@ signals: // Note: activeTarget can be 0 (if no targets are defined). void activeTargetChanged(ProjectExplorer::Target *target); - void removedProjectConfiguration(ProjectExplorer::ProjectConfiguration *pc); - void addedProjectConfiguration(ProjectExplorer::ProjectConfiguration *pc); - void aboutToRemoveTarget(ProjectExplorer::Target *target); void removedTarget(ProjectExplorer::Target *target); void addedTarget(ProjectExplorer::Target *target); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 2afe540f1dd..75de3f5cc24 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -2365,6 +2365,11 @@ QThreadPool *ProjectExplorerPlugin::sharedThreadPool() return &(dd->m_threadPool); } +MiniProjectTargetSelector *ProjectExplorerPlugin::targetSelector() +{ + return dd->m_targetSelector; +} + /*! This function is connected to the ICore::coreOpened signal. If there was no session explicitly loaded, it creates an empty new diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index 91f14acd5bb..2c803aa7840 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -59,6 +59,7 @@ class FileNode; namespace Internal { class AppOutputSettings; +class MiniProjectTargetSelector; class ProjectExplorerSettings; } @@ -166,6 +167,7 @@ public: static QStringList projectFileGlobs(); static QThreadPool *sharedThreadPool(); + static Internal::MiniProjectTargetSelector *targetSelector(); static void showSessionManager(); static void openNewProjectDialog(); diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp index ef8215f73fb..177e4011f55 100644 --- a/src/plugins/projectexplorer/target.cpp +++ b/src/plugins/projectexplorer/target.cpp @@ -37,6 +37,7 @@ #include "kit.h" #include "kitinformation.h" #include "kitmanager.h" +#include "miniprojecttargetselector.h" #include "project.h" #include "projectexplorer.h" #include "projectexplorericons.h" @@ -46,8 +47,6 @@ #include -#include - #include #include #include @@ -279,7 +278,7 @@ void Target::addBuildConfiguration(BuildConfiguration *bc) // add it d->m_buildConfigurations.push_back(bc); - project()->addedProjectConfiguration(bc); + ProjectExplorerPlugin::targetSelector()->addedBuildConfiguration(bc); emit addedBuildConfiguration(bc); d->m_buildConfigurationModel.addProjectConfiguration(bc); @@ -306,14 +305,14 @@ bool Target::removeBuildConfiguration(BuildConfiguration *bc) } emit removedBuildConfiguration(bc); - project()->removedProjectConfiguration(bc); + ProjectExplorerPlugin::targetSelector()->removedBuildConfiguration(bc); d->m_buildConfigurationModel.removeProjectConfiguration(bc); delete bc; return true; } -QList Target::buildConfigurations() const +const QList Target::buildConfigurations() const { return d->m_buildConfigurations; } @@ -347,7 +346,7 @@ void Target::addDeployConfiguration(DeployConfiguration *dc) // add it d->m_deployConfigurations.push_back(dc); - project()->addedProjectConfiguration(dc); + ProjectExplorerPlugin::targetSelector()->addedDeployConfiguration(dc); d->m_deployConfigurationModel.addProjectConfiguration(dc); emit addedDeployConfiguration(dc); @@ -375,7 +374,7 @@ bool Target::removeDeployConfiguration(DeployConfiguration *dc) SetActive::Cascade); } - project()->removedProjectConfiguration(dc); + ProjectExplorerPlugin::targetSelector()->removedDeployConfiguration(dc); d->m_deployConfigurationModel.removeProjectConfiguration(dc); emit removedDeployConfiguration(dc); @@ -383,7 +382,7 @@ bool Target::removeDeployConfiguration(DeployConfiguration *dc) return true; } -QList Target::deployConfigurations() const +const QList Target::deployConfigurations() const { return d->m_deployConfigurations; } @@ -404,7 +403,7 @@ void Target::setActiveDeployConfiguration(DeployConfiguration *dc) updateDeviceState(); } -QList Target::runConfigurations() const +const QList Target::runConfigurations() const { return d->m_runConfigurations; } @@ -426,7 +425,7 @@ void Target::addRunConfiguration(RunConfiguration *rc) d->m_runConfigurations.push_back(rc); - project()->addedProjectConfiguration(rc); + ProjectExplorerPlugin::targetSelector()->addedRunConfiguration(rc); d->m_runConfigurationModel.addProjectConfiguration(rc); emit addedRunConfiguration(rc); @@ -448,7 +447,7 @@ void Target::removeRunConfiguration(RunConfiguration *rc) } emit removedRunConfiguration(rc); - project()->removedProjectConfiguration(rc); + ProjectExplorerPlugin::targetSelector()->removedRunConfiguration(rc); d->m_runConfigurationModel.removeProjectConfiguration(rc); delete rc; diff --git a/src/plugins/projectexplorer/target.h b/src/plugins/projectexplorer/target.h index 08ea4ef4516..652b5624a6f 100644 --- a/src/plugins/projectexplorer/target.h +++ b/src/plugins/projectexplorer/target.h @@ -73,18 +73,18 @@ public: void addBuildConfiguration(BuildConfiguration *bc); bool removeBuildConfiguration(BuildConfiguration *bc); - QList buildConfigurations() const; + const QList buildConfigurations() const; BuildConfiguration *activeBuildConfiguration() const; // DeployConfiguration void addDeployConfiguration(DeployConfiguration *dc); bool removeDeployConfiguration(DeployConfiguration *dc); - QList deployConfigurations() const; + const QList deployConfigurations() const; DeployConfiguration *activeDeployConfiguration() const; // Running - QList runConfigurations() const; + const QList runConfigurations() const; void addRunConfiguration(RunConfiguration *rc); void removeRunConfiguration(RunConfiguration *rc); diff --git a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h index 0812e162550..3e8483df715 100644 --- a/src/plugins/qmakeprojectmanager/qmakeparsernodes.h +++ b/src/plugins/qmakeprojectmanager/qmakeparsernodes.h @@ -41,6 +41,8 @@ #include +namespace ProjectExplorer { class BuildConfiguration; } + namespace Utils { class FilePath; class FileSystemWatcher; @@ -49,7 +51,6 @@ class FileSystemWatcher; namespace QtSupport { class ProFileReader; } namespace QmakeProjectManager { -class QmakeBuildConfiguration; class QmakeBuildSystem; class QmakeProFile; class QmakeProject; diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.h b/src/plugins/qmakeprojectmanager/qmakeproject.h index 9cd8902dbbf..b70bfbfdee9 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.h +++ b/src/plugins/qmakeprojectmanager/qmakeproject.h @@ -48,6 +48,7 @@ namespace ProjectExplorer { class DeploymentData; } namespace QtSupport { class ProFileReader; } namespace QmakeProjectManager { +class QmakeBuildConfiguration; namespace Internal { class CentralizedFolderWatcher; }