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)
{
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<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)
{
removedTarget(target);
@@ -1070,25 +1041,6 @@ void MiniProjectTargetSelector::handleRemovalOfTarget(Target *target)
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)
{
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()

View File

@@ -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();

View File

@@ -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);

View File

@@ -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

View File

@@ -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();

View File

@@ -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 <coreplugin/coreconstants.h>
#include <extensionsystem/pluginmanager.h>
#include <utils/algorithm.h>
#include <utils/macroexpander.h>
#include <utils/qtcassert.h>
@@ -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<BuildConfiguration *> Target::buildConfigurations() const
const QList<BuildConfiguration *> 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<DeployConfiguration *> Target::deployConfigurations() const
const QList<DeployConfiguration *> Target::deployConfigurations() const
{
return d->m_deployConfigurations;
}
@@ -404,7 +403,7 @@ void Target::setActiveDeployConfiguration(DeployConfiguration *dc)
updateDeviceState();
}
QList<RunConfiguration *> Target::runConfigurations() const
const QList<RunConfiguration *> 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;

View File

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

View File

@@ -41,6 +41,8 @@
#include <memory>
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;

View File

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