ProjectExplorer: Make communication between target and selector direct

Architecture-wise, this now means that Target knows about the
MiniProjectTargetSelector, otoh, Project does less, and quite
a bit of signal, slot and qobject_cast is gone.

Change-Id: I0feef9328144282c7c4ca710a12ac0e495810684
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2020-02-18 15:55:26 +01:00
parent 5451b78367
commit 7f1c8aea5d
9 changed files with 71 additions and 110 deletions

View File

@@ -990,13 +990,8 @@ void MiniProjectTargetSelector::doLayout(bool keepSize)
void MiniProjectTargetSelector::projectAdded(Project *project) void MiniProjectTargetSelector::projectAdded(Project *project)
{ {
connect(project, &Project::addedProjectConfiguration,
this, &MiniProjectTargetSelector::handleNewProjectConfiguration);
connect(project, &Project::addedTarget, connect(project, &Project::addedTarget,
this, &MiniProjectTargetSelector::handleNewTarget); this, &MiniProjectTargetSelector::handleNewTarget);
connect(project, &Project::removedProjectConfiguration,
this, &MiniProjectTargetSelector::handleRemovalOfProjectConfiguration);
connect(project, &Project::removedTarget, connect(project, &Project::removedTarget,
this, &MiniProjectTargetSelector::handleRemovalOfTarget); this, &MiniProjectTargetSelector::handleRemovalOfTarget);
@@ -1012,13 +1007,8 @@ void MiniProjectTargetSelector::projectAdded(Project *project)
void MiniProjectTargetSelector::projectRemoved(Project *project) void MiniProjectTargetSelector::projectRemoved(Project *project)
{ {
disconnect(project, &Project::addedProjectConfiguration,
this, &MiniProjectTargetSelector::handleNewProjectConfiguration);
disconnect(project, &Project::addedTarget, disconnect(project, &Project::addedTarget,
this, &MiniProjectTargetSelector::handleNewTarget); this, &MiniProjectTargetSelector::handleNewTarget);
disconnect(project, &Project::removedProjectConfiguration,
this, &MiniProjectTargetSelector::handleRemovalOfProjectConfiguration);
disconnect(project, &Project::removedTarget, disconnect(project, &Project::removedTarget,
this, &MiniProjectTargetSelector::handleRemovalOfTarget); this, &MiniProjectTargetSelector::handleRemovalOfTarget);
@@ -1041,25 +1031,6 @@ void MiniProjectTargetSelector::handleNewTarget(Target *target)
updateRunListVisible(); updateRunListVisible();
} }
void MiniProjectTargetSelector::handleNewProjectConfiguration(ProjectConfiguration *pc)
{
if (auto bc = qobject_cast<BuildConfiguration *>(pc)) {
if (addedBuildConfiguration(bc))
updateBuildListVisible();
return;
}
if (auto dc = qobject_cast<DeployConfiguration *>(pc)) {
if (addedDeployConfiguration(dc))
updateDeployListVisible();
return;
}
if (auto rc = qobject_cast<RunConfiguration *>(pc)) {
if (addedRunConfiguration(rc))
updateRunListVisible();
return;
}
}
void MiniProjectTargetSelector::handleRemovalOfTarget(Target *target) void MiniProjectTargetSelector::handleRemovalOfTarget(Target *target)
{ {
removedTarget(target); removedTarget(target);
@@ -1070,25 +1041,6 @@ void MiniProjectTargetSelector::handleRemovalOfTarget(Target *target)
updateRunListVisible(); updateRunListVisible();
} }
void MiniProjectTargetSelector::handleRemovalOfProjectConfiguration(ProjectConfiguration *pc)
{
if (auto bc = qobject_cast<BuildConfiguration *>(pc)) {
if (removedBuildConfiguration(bc))
updateBuildListVisible();
return;
}
if (auto dc = qobject_cast<DeployConfiguration *>(pc)) {
if (removedDeployConfiguration(dc))
updateDeployListVisible();
return;
}
if (auto rc = qobject_cast<RunConfiguration *>(pc)) {
if (removedRunConfiguration(rc))
updateRunListVisible();
return;
}
}
void MiniProjectTargetSelector::addedTarget(Target *target) void MiniProjectTargetSelector::addedTarget(Target *target)
{ {
if (target->project() != m_project) if (target->project() != m_project)
@@ -1096,12 +1048,12 @@ void MiniProjectTargetSelector::addedTarget(Target *target)
m_listWidgets[TARGET]->addProjectConfiguration(target); m_listWidgets[TARGET]->addProjectConfiguration(target);
foreach (BuildConfiguration *bc, target->buildConfigurations()) for (BuildConfiguration *bc : target->buildConfigurations())
addedBuildConfiguration(bc); addedBuildConfiguration(bc, false);
foreach (DeployConfiguration *dc, target->deployConfigurations()) for (DeployConfiguration *dc : target->deployConfigurations())
addedDeployConfiguration(dc); addedDeployConfiguration(dc, false);
foreach (RunConfiguration *rc, target->runConfigurations()) for (RunConfiguration *rc : target->runConfigurations())
addedRunConfiguration(rc); addedRunConfiguration(rc, false);
} }
void MiniProjectTargetSelector::removedTarget(Target *target) void MiniProjectTargetSelector::removedTarget(Target *target)
@@ -1111,65 +1063,72 @@ void MiniProjectTargetSelector::removedTarget(Target *target)
m_listWidgets[TARGET]->removeProjectConfiguration(target); m_listWidgets[TARGET]->removeProjectConfiguration(target);
foreach (BuildConfiguration *bc, target->buildConfigurations()) for (BuildConfiguration *bc : target->buildConfigurations())
removedBuildConfiguration(bc); removedBuildConfiguration(bc, false);
foreach (DeployConfiguration *dc, target->deployConfigurations()) for (DeployConfiguration *dc : target->deployConfigurations())
removedDeployConfiguration(dc); removedDeployConfiguration(dc, false);
foreach (RunConfiguration *rc, target->runConfigurations()) for (RunConfiguration *rc : target->runConfigurations())
removedRunConfiguration(rc); removedRunConfiguration(rc, false);
} }
bool MiniProjectTargetSelector::addedBuildConfiguration(BuildConfiguration *bc) void MiniProjectTargetSelector::addedBuildConfiguration(BuildConfiguration *bc, bool update)
{ {
if (bc->target() != m_project->activeTarget()) if (!m_project || bc->target() != m_project->activeTarget())
return false; return;
m_listWidgets[BUILD]->addProjectConfiguration(bc); 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()) if (!m_project || bc->target() != m_project->activeTarget())
return false; return;
m_listWidgets[BUILD]->removeProjectConfiguration(bc); 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()) if (!m_project || dc->target() != m_project->activeTarget())
return false; return;
m_listWidgets[DEPLOY]->addProjectConfiguration(dc); 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()) if (!m_project || dc->target() != m_project->activeTarget())
return false; return;
m_listWidgets[DEPLOY]->removeProjectConfiguration(dc); 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()) if (!m_project || rc->target() != m_project->activeTarget())
return false; return;
m_listWidgets[RUN]->addProjectConfiguration(rc); 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()) if (!m_project || rc->target() != m_project->activeTarget())
return false; return;
m_listWidgets[RUN]->removeProjectConfiguration(rc); m_listWidgets[RUN]->removeProjectConfiguration(rc);
return true; if (update)
updateRunListVisible();
} }
void MiniProjectTargetSelector::updateProjectListVisible() void MiniProjectTargetSelector::updateProjectListVisible()

View File

@@ -38,7 +38,6 @@ class Project;
class Target; class Target;
class BuildConfiguration; class BuildConfiguration;
class DeployConfiguration; class DeployConfiguration;
class ProjectConfiguration;
class RunConfiguration; class RunConfiguration;
namespace Internal { namespace Internal {
@@ -51,7 +50,8 @@ class MiniProjectTargetSelector : public QWidget
Q_OBJECT Q_OBJECT
public: public:
explicit MiniProjectTargetSelector(QAction *projectAction, QWidget *parent = nullptr); explicit MiniProjectTargetSelector(QAction *projectAction, QWidget *parent);
void setVisible(bool visible) override; void setVisible(bool visible) override;
void keyPressEvent(QKeyEvent *ke) override; void keyPressEvent(QKeyEvent *ke) override;
@@ -62,11 +62,10 @@ public:
void nextOrShow(); void nextOrShow();
private: private:
friend class ProjectExplorer::Target;
void projectAdded(ProjectExplorer::Project *project); void projectAdded(ProjectExplorer::Project *project);
void projectRemoved(ProjectExplorer::Project *project); void projectRemoved(ProjectExplorer::Project *project);
void handleNewProjectConfiguration(ProjectExplorer::ProjectConfiguration *pc);
void handleNewTarget(Target *target); void handleNewTarget(Target *target);
void handleRemovalOfProjectConfiguration(ProjectExplorer::ProjectConfiguration *pc);
void handleRemovalOfTarget(Target *pc); void handleRemovalOfTarget(Target *pc);
void changeStartupProject(ProjectExplorer::Project *project); void changeStartupProject(ProjectExplorer::Project *project);
@@ -81,12 +80,12 @@ private:
void switchToProjectsMode(); void switchToProjectsMode();
void addedTarget(Target *target); void addedTarget(Target *target);
void removedTarget(Target *target); void removedTarget(Target *target);
bool addedBuildConfiguration(BuildConfiguration* bc); void addedBuildConfiguration(BuildConfiguration *bc, bool update = true);
bool removedBuildConfiguration(BuildConfiguration* bc); void removedBuildConfiguration(BuildConfiguration *bc, bool update = true);
bool addedDeployConfiguration(DeployConfiguration *dc); void addedDeployConfiguration(DeployConfiguration *dc, bool update = true);
bool removedDeployConfiguration(DeployConfiguration *dc); void removedDeployConfiguration(DeployConfiguration *dc, bool update = true);
bool addedRunConfiguration(RunConfiguration *rc); void addedRunConfiguration(RunConfiguration *rc, bool update = true);
bool removedRunConfiguration(RunConfiguration *rc); void removedRunConfiguration(RunConfiguration *rc, bool update = true);
void updateProjectListVisible(); void updateProjectListVisible();
void updateTargetListVisible(); void updateTargetListVisible();

View File

@@ -51,12 +51,10 @@ namespace ProjectExplorer {
class BuildInfo; class BuildInfo;
class BuildSystem; class BuildSystem;
class BuildConfiguration;
class ContainerNode; class ContainerNode;
class EditorConfiguration; class EditorConfiguration;
class FolderNode; class FolderNode;
class Node; class Node;
class ProjectConfiguration;
class ProjectImporter; class ProjectImporter;
class ProjectNode; class ProjectNode;
class ProjectPrivate; class ProjectPrivate;
@@ -183,9 +181,6 @@ signals:
// Note: activeTarget can be 0 (if no targets are defined). // Note: activeTarget can be 0 (if no targets are defined).
void activeTargetChanged(ProjectExplorer::Target *target); void activeTargetChanged(ProjectExplorer::Target *target);
void removedProjectConfiguration(ProjectExplorer::ProjectConfiguration *pc);
void addedProjectConfiguration(ProjectExplorer::ProjectConfiguration *pc);
void aboutToRemoveTarget(ProjectExplorer::Target *target); void aboutToRemoveTarget(ProjectExplorer::Target *target);
void removedTarget(ProjectExplorer::Target *target); void removedTarget(ProjectExplorer::Target *target);
void addedTarget(ProjectExplorer::Target *target); void addedTarget(ProjectExplorer::Target *target);

View File

@@ -2365,6 +2365,11 @@ QThreadPool *ProjectExplorerPlugin::sharedThreadPool()
return &(dd->m_threadPool); return &(dd->m_threadPool);
} }
MiniProjectTargetSelector *ProjectExplorerPlugin::targetSelector()
{
return dd->m_targetSelector;
}
/*! /*!
This function is connected to the ICore::coreOpened signal. If This function is connected to the ICore::coreOpened signal. If
there was no session explicitly loaded, it creates an empty new there was no session explicitly loaded, it creates an empty new

View File

@@ -59,6 +59,7 @@ class FileNode;
namespace Internal { namespace Internal {
class AppOutputSettings; class AppOutputSettings;
class MiniProjectTargetSelector;
class ProjectExplorerSettings; class ProjectExplorerSettings;
} }
@@ -166,6 +167,7 @@ public:
static QStringList projectFileGlobs(); static QStringList projectFileGlobs();
static QThreadPool *sharedThreadPool(); static QThreadPool *sharedThreadPool();
static Internal::MiniProjectTargetSelector *targetSelector();
static void showSessionManager(); static void showSessionManager();
static void openNewProjectDialog(); static void openNewProjectDialog();

View File

@@ -37,6 +37,7 @@
#include "kit.h" #include "kit.h"
#include "kitinformation.h" #include "kitinformation.h"
#include "kitmanager.h" #include "kitmanager.h"
#include "miniprojecttargetselector.h"
#include "project.h" #include "project.h"
#include "projectexplorer.h" #include "projectexplorer.h"
#include "projectexplorericons.h" #include "projectexplorericons.h"
@@ -46,8 +47,6 @@
#include <coreplugin/coreconstants.h> #include <coreplugin/coreconstants.h>
#include <extensionsystem/pluginmanager.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/macroexpander.h> #include <utils/macroexpander.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
@@ -279,7 +278,7 @@ void Target::addBuildConfiguration(BuildConfiguration *bc)
// add it // add it
d->m_buildConfigurations.push_back(bc); d->m_buildConfigurations.push_back(bc);
project()->addedProjectConfiguration(bc); ProjectExplorerPlugin::targetSelector()->addedBuildConfiguration(bc);
emit addedBuildConfiguration(bc); emit addedBuildConfiguration(bc);
d->m_buildConfigurationModel.addProjectConfiguration(bc); d->m_buildConfigurationModel.addProjectConfiguration(bc);
@@ -306,14 +305,14 @@ bool Target::removeBuildConfiguration(BuildConfiguration *bc)
} }
emit removedBuildConfiguration(bc); emit removedBuildConfiguration(bc);
project()->removedProjectConfiguration(bc); ProjectExplorerPlugin::targetSelector()->removedBuildConfiguration(bc);
d->m_buildConfigurationModel.removeProjectConfiguration(bc); d->m_buildConfigurationModel.removeProjectConfiguration(bc);
delete bc; delete bc;
return true; return true;
} }
QList<BuildConfiguration *> Target::buildConfigurations() const const QList<BuildConfiguration *> Target::buildConfigurations() const
{ {
return d->m_buildConfigurations; return d->m_buildConfigurations;
} }
@@ -347,7 +346,7 @@ void Target::addDeployConfiguration(DeployConfiguration *dc)
// add it // add it
d->m_deployConfigurations.push_back(dc); d->m_deployConfigurations.push_back(dc);
project()->addedProjectConfiguration(dc); ProjectExplorerPlugin::targetSelector()->addedDeployConfiguration(dc);
d->m_deployConfigurationModel.addProjectConfiguration(dc); d->m_deployConfigurationModel.addProjectConfiguration(dc);
emit addedDeployConfiguration(dc); emit addedDeployConfiguration(dc);
@@ -375,7 +374,7 @@ bool Target::removeDeployConfiguration(DeployConfiguration *dc)
SetActive::Cascade); SetActive::Cascade);
} }
project()->removedProjectConfiguration(dc); ProjectExplorerPlugin::targetSelector()->removedDeployConfiguration(dc);
d->m_deployConfigurationModel.removeProjectConfiguration(dc); d->m_deployConfigurationModel.removeProjectConfiguration(dc);
emit removedDeployConfiguration(dc); emit removedDeployConfiguration(dc);
@@ -383,7 +382,7 @@ bool Target::removeDeployConfiguration(DeployConfiguration *dc)
return true; return true;
} }
QList<DeployConfiguration *> Target::deployConfigurations() const const QList<DeployConfiguration *> Target::deployConfigurations() const
{ {
return d->m_deployConfigurations; return d->m_deployConfigurations;
} }
@@ -404,7 +403,7 @@ void Target::setActiveDeployConfiguration(DeployConfiguration *dc)
updateDeviceState(); updateDeviceState();
} }
QList<RunConfiguration *> Target::runConfigurations() const const QList<RunConfiguration *> Target::runConfigurations() const
{ {
return d->m_runConfigurations; return d->m_runConfigurations;
} }
@@ -426,7 +425,7 @@ void Target::addRunConfiguration(RunConfiguration *rc)
d->m_runConfigurations.push_back(rc); d->m_runConfigurations.push_back(rc);
project()->addedProjectConfiguration(rc); ProjectExplorerPlugin::targetSelector()->addedRunConfiguration(rc);
d->m_runConfigurationModel.addProjectConfiguration(rc); d->m_runConfigurationModel.addProjectConfiguration(rc);
emit addedRunConfiguration(rc); emit addedRunConfiguration(rc);
@@ -448,7 +447,7 @@ void Target::removeRunConfiguration(RunConfiguration *rc)
} }
emit removedRunConfiguration(rc); emit removedRunConfiguration(rc);
project()->removedProjectConfiguration(rc); ProjectExplorerPlugin::targetSelector()->removedRunConfiguration(rc);
d->m_runConfigurationModel.removeProjectConfiguration(rc); d->m_runConfigurationModel.removeProjectConfiguration(rc);
delete rc; delete rc;

View File

@@ -73,18 +73,18 @@ public:
void addBuildConfiguration(BuildConfiguration *bc); void addBuildConfiguration(BuildConfiguration *bc);
bool removeBuildConfiguration(BuildConfiguration *bc); bool removeBuildConfiguration(BuildConfiguration *bc);
QList<BuildConfiguration *> buildConfigurations() const; const QList<BuildConfiguration *> buildConfigurations() const;
BuildConfiguration *activeBuildConfiguration() const; BuildConfiguration *activeBuildConfiguration() const;
// DeployConfiguration // DeployConfiguration
void addDeployConfiguration(DeployConfiguration *dc); void addDeployConfiguration(DeployConfiguration *dc);
bool removeDeployConfiguration(DeployConfiguration *dc); bool removeDeployConfiguration(DeployConfiguration *dc);
QList<DeployConfiguration *> deployConfigurations() const; const QList<DeployConfiguration *> deployConfigurations() const;
DeployConfiguration *activeDeployConfiguration() const; DeployConfiguration *activeDeployConfiguration() const;
// Running // Running
QList<RunConfiguration *> runConfigurations() const; const QList<RunConfiguration *> runConfigurations() const;
void addRunConfiguration(RunConfiguration *rc); void addRunConfiguration(RunConfiguration *rc);
void removeRunConfiguration(RunConfiguration *rc); void removeRunConfiguration(RunConfiguration *rc);

View File

@@ -41,6 +41,8 @@
#include <memory> #include <memory>
namespace ProjectExplorer { class BuildConfiguration; }
namespace Utils { namespace Utils {
class FilePath; class FilePath;
class FileSystemWatcher; class FileSystemWatcher;
@@ -49,7 +51,6 @@ class FileSystemWatcher;
namespace QtSupport { class ProFileReader; } namespace QtSupport { class ProFileReader; }
namespace QmakeProjectManager { namespace QmakeProjectManager {
class QmakeBuildConfiguration;
class QmakeBuildSystem; class QmakeBuildSystem;
class QmakeProFile; class QmakeProFile;
class QmakeProject; class QmakeProject;

View File

@@ -48,6 +48,7 @@ namespace ProjectExplorer { class DeploymentData; }
namespace QtSupport { class ProFileReader; } namespace QtSupport { class ProFileReader; }
namespace QmakeProjectManager { namespace QmakeProjectManager {
class QmakeBuildConfiguration;
namespace Internal { class CentralizedFolderWatcher; } namespace Internal { class CentralizedFolderWatcher; }