AppMan: Use new setup pattern for AppManagerDeployConfigurationAutoSwitcher

Change-Id: Id5c487318c5dfbefacc5c2600da6511cbf6f4fec
Reviewed-by: Dominik Holland <dominik.holland@qt.io>
This commit is contained in:
hjk
2024-01-11 13:46:21 +01:00
parent a9b3e8a852
commit 9c96565756
3 changed files with 47 additions and 65 deletions

View File

@@ -13,36 +13,47 @@
#include <projectexplorer/runconfiguration.h> #include <projectexplorer/runconfiguration.h>
#include <projectexplorer/target.h> #include <projectexplorer/target.h>
#include <utils/qtcassert.h>
using namespace ProjectExplorer; using namespace ProjectExplorer;
namespace AppManager { namespace AppManager::Internal {
namespace Internal {
class AppManagerDeployConfigurationAutoSwitcherPrivate class AppManagerDeployConfigurationAutoSwitcher final : public QObject
{ {
public: public:
Project *project = nullptr; AppManagerDeployConfigurationAutoSwitcher();
Target *target = nullptr;
RunConfiguration *runConfiguration = nullptr; private:
DeployConfiguration *deployConfiguration = nullptr; void onActiveDeployConfigurationChanged(DeployConfiguration *dc);
QHash<RunConfiguration*,DeployConfiguration*> deployConfigurationsUsageHistory; void onActiveRunConfigurationChanged(RunConfiguration *rc);
void onActiveTargetChanged(Target *target);
void onStartupProjectChanged(Project *project);
Project *m_project = nullptr;
Target *m_target = nullptr;
RunConfiguration *m_runConfiguration = nullptr;
DeployConfiguration *m_deployConfiguration = nullptr;
QHash<RunConfiguration *, DeployConfiguration *> m_deployConfigurationsUsageHistory;
}; };
AppManagerDeployConfigurationAutoSwitcher::AppManagerDeployConfigurationAutoSwitcher(QObject *parent) AppManagerDeployConfigurationAutoSwitcher::AppManagerDeployConfigurationAutoSwitcher()
: QObject(parent)
, d(new AppManagerDeployConfigurationAutoSwitcherPrivate())
{ {
} ProjectManager *projectManager = ProjectManager::instance();
QTC_ASSERT(projectManager, return);
AppManagerDeployConfigurationAutoSwitcher::~AppManagerDeployConfigurationAutoSwitcher() = default; connect(projectManager, &ProjectManager::startupProjectChanged,
this, &AppManagerDeployConfigurationAutoSwitcher::onStartupProjectChanged, Qt::UniqueConnection);
onStartupProjectChanged(projectManager->startupProject());
}
void AppManagerDeployConfigurationAutoSwitcher::onActiveDeployConfigurationChanged(DeployConfiguration *deployConfiguration) void AppManagerDeployConfigurationAutoSwitcher::onActiveDeployConfigurationChanged(DeployConfiguration *deployConfiguration)
{ {
if (d->deployConfiguration != deployConfiguration) { if (m_deployConfiguration != deployConfiguration) {
d->deployConfiguration = deployConfiguration; m_deployConfiguration = deployConfiguration;
if (deployConfiguration && deployConfiguration->target()) { if (deployConfiguration && deployConfiguration->target()) {
if (auto runConfiguration = deployConfiguration->target()->activeRunConfiguration()) { if (auto runConfiguration = deployConfiguration->target()->activeRunConfiguration()) {
d->deployConfigurationsUsageHistory.insert(runConfiguration, deployConfiguration); m_deployConfigurationsUsageHistory.insert(runConfiguration, deployConfiguration);
} }
} }
} }
@@ -60,14 +71,14 @@ static bool isApplicationManagerDeployConfiguration(const DeployConfiguration *d
void AppManagerDeployConfigurationAutoSwitcher::onActiveRunConfigurationChanged(RunConfiguration *runConfiguration) void AppManagerDeployConfigurationAutoSwitcher::onActiveRunConfigurationChanged(RunConfiguration *runConfiguration)
{ {
if (d->runConfiguration != runConfiguration) { if (m_runConfiguration != runConfiguration) {
d->runConfiguration = runConfiguration; m_runConfiguration = runConfiguration;
if (runConfiguration) { if (runConfiguration) {
if (auto target = runConfiguration->target()) { if (auto target = runConfiguration->target()) {
const auto stored = d->deployConfigurationsUsageHistory.contains(runConfiguration); const auto stored = m_deployConfigurationsUsageHistory.contains(runConfiguration);
if (stored) { if (stored) {
// deploy selection stored -> restore // deploy selection stored -> restore
auto deployConfiguration = d->deployConfigurationsUsageHistory.value(runConfiguration, nullptr); auto deployConfiguration = m_deployConfigurationsUsageHistory.value(runConfiguration, nullptr);
target->setActiveDeployConfiguration(deployConfiguration, SetActive::NoCascade); target->setActiveDeployConfiguration(deployConfiguration, SetActive::NoCascade);
} else if (auto activeDeployConfiguration = target->activeDeployConfiguration()) { } else if (auto activeDeployConfiguration = target->activeDeployConfiguration()) {
// active deploy configuration exists // active deploy configuration exists
@@ -106,11 +117,11 @@ void AppManagerDeployConfigurationAutoSwitcher::onActiveRunConfigurationChanged(
void AppManagerDeployConfigurationAutoSwitcher::onActiveTargetChanged(Target *target) void AppManagerDeployConfigurationAutoSwitcher::onActiveTargetChanged(Target *target)
{ {
if (d->target != target) { if (m_target != target) {
if (d->target) { if (m_target) {
disconnect(d->target, nullptr, this, nullptr); disconnect(m_target, nullptr, this, nullptr);
} }
d->target = target; m_target = target;
if (target) { if (target) {
connect(target, &Target::activeRunConfigurationChanged, connect(target, &Target::activeRunConfigurationChanged,
this, &AppManagerDeployConfigurationAutoSwitcher::onActiveRunConfigurationChanged); this, &AppManagerDeployConfigurationAutoSwitcher::onActiveRunConfigurationChanged);
@@ -124,11 +135,11 @@ void AppManagerDeployConfigurationAutoSwitcher::onActiveTargetChanged(Target *ta
void AppManagerDeployConfigurationAutoSwitcher::onStartupProjectChanged(Project *project) void AppManagerDeployConfigurationAutoSwitcher::onStartupProjectChanged(Project *project)
{ {
if (d->project != project) { if (m_project != project) {
if (d->project) { if (m_project) {
disconnect(d->project, nullptr, this, nullptr); disconnect(m_project, nullptr, this, nullptr);
} }
d->project = project; m_project = project;
if (project) { if (project) {
connect(project, &Project::activeTargetChanged, connect(project, &Project::activeTargetChanged,
this, &AppManagerDeployConfigurationAutoSwitcher::onActiveTargetChanged); this, &AppManagerDeployConfigurationAutoSwitcher::onActiveTargetChanged);
@@ -137,14 +148,9 @@ void AppManagerDeployConfigurationAutoSwitcher::onStartupProjectChanged(Project
} }
} }
void AppManagerDeployConfigurationAutoSwitcher::initialize() void setupAppManagerDeployConfigurationAutoSwitcher()
{ {
if (auto projectManager = ProjectManager::instance()) { static AppManagerDeployConfigurationAutoSwitcher theAppManagerDeployConfigurationAutoSwitcher;
connect(projectManager, &ProjectManager::startupProjectChanged,
this, &AppManagerDeployConfigurationAutoSwitcher::onStartupProjectChanged, Qt::UniqueConnection);
onStartupProjectChanged(projectManager->startupProject());
}
} }
} // namespace Internal } // AppManager::Internal
} // namespace AppManager

View File

@@ -5,32 +5,8 @@
#pragma once #pragma once
#include <projectexplorer/deployconfiguration.h> namespace AppManager::Internal {
#include <projectexplorer/runconfiguration.h>
namespace AppManager { void setupAppManagerDeployConfigurationAutoSwitcher();
namespace Internal {
class AppManagerDeployConfigurationAutoSwitcherPrivate; } // AppManager::Internal
class AppManagerDeployConfigurationAutoSwitcher : public QObject
{
Q_OBJECT
QScopedPointer<AppManagerDeployConfigurationAutoSwitcherPrivate> d;
public:
AppManagerDeployConfigurationAutoSwitcher(QObject *parent = nullptr);
~AppManagerDeployConfigurationAutoSwitcher() override;
void initialize();
private:
void onActiveDeployConfigurationChanged(ProjectExplorer::DeployConfiguration *dc);
void onActiveRunConfigurationChanged(ProjectExplorer::RunConfiguration *rc);
void onActiveTargetChanged(ProjectExplorer::Target *target);
void onStartupProjectChanged(ProjectExplorer::Project *project);
};
} // namespace Internal
} // namespace AppManager

View File

@@ -21,7 +21,6 @@ namespace AppManager::Internal {
class AppManagerPluginPrivate class AppManagerPluginPrivate
{ {
public: public:
AppManagerDeployConfigurationAutoSwitcher deployConfigurationAutoSwitcher;
AppManagerDeployConfigurationFactory deployConfigFactory; AppManagerDeployConfigurationFactory deployConfigFactory;
AppManagerRunConfigurationFactory runConfigFactory; AppManagerRunConfigurationFactory runConfigFactory;
@@ -44,8 +43,9 @@ void AppManagerPlugin::initialize()
setupAppManagerInstallPackageStep(); setupAppManagerInstallPackageStep();
setupAppManagerRemoteInstallPackageStep(); setupAppManagerRemoteInstallPackageStep();
setupAppManagerDeployConfigurationAutoSwitcher();
d = new AppManagerPluginPrivate; d = new AppManagerPluginPrivate;
d->deployConfigurationAutoSwitcher.initialize();
} }
} // AppManager::Internal } // AppManager::Internal