aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2024-02-02 11:16:21 +0100
committerhjk <hjk@qt.io>2024-04-12 11:48:29 +0000
commitabd538507ac943e478fec1e23549aa5e986dacb5 (patch)
tree9ce6df46f2fb18933ca1582f6fb774449eaafad2
parent18a867aa237778a7e73b7fa8f67d67c82c987e8e (diff)
ProjectExplorer: Make settings access more direct
A step towards aspectification. Change-Id: Iabf5e56e993449dc482d1d2ab6eeb2885243ab3e Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--src/plugins/android/androidrunner.cpp3
-rw-r--r--src/plugins/autotest/testrunner.cpp9
-rw-r--r--src/plugins/cmakeprojectmanager/cmakekitaspect.cpp2
-rw-r--r--src/plugins/debugger/debuggerplugin.cpp2
-rw-r--r--src/plugins/projectexplorer/abstractprocessstep.cpp2
-rw-r--r--src/plugins/projectexplorer/appoutputpane.cpp6
-rw-r--r--src/plugins/projectexplorer/buildaspects.cpp2
-rw-r--r--src/plugins/projectexplorer/buildmanager.cpp20
-rw-r--r--src/plugins/projectexplorer/environmentaspect.cpp4
-rw-r--r--src/plugins/projectexplorer/msvctoolchain.cpp2
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp170
-rw-r--r--src/plugins/projectexplorer/projectexplorer.h4
-rw-r--r--src/plugins/projectexplorer/projectexplorersettings.cpp316
-rw-r--r--src/plugins/projectexplorer/projectexplorersettings.h34
-rw-r--r--src/plugins/projectexplorer/runconfigurationaspects.cpp4
-rw-r--r--src/plugins/projectexplorer/target.cpp2
-rw-r--r--src/plugins/projectexplorer/userfileaccessor.cpp10
17 files changed, 316 insertions, 276 deletions
diff --git a/src/plugins/android/androidrunner.cpp b/src/plugins/android/androidrunner.cpp
index 152c5fa4c5..22bb64b0a4 100644
--- a/src/plugins/android/androidrunner.cpp
+++ b/src/plugins/android/androidrunner.cpp
@@ -11,7 +11,6 @@
#include "androidtr.h"
#include <coreplugin/messagemanager.h>
-#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/projectexplorersettings.h>
#include <projectexplorer/runconfigurationaspects.h>
#include <projectexplorer/target.h>
@@ -88,7 +87,7 @@ AndroidRunner::~AndroidRunner()
void AndroidRunner::start()
{
- if (!ProjectExplorerPlugin::projectExplorerSettings().deployBeforeRun) {
+ if (!projectExplorerSettings().deployBeforeRun) {
qCDebug(androidRunnerLog) << "Run without deployment";
launchAVD();
if (!m_launchedAVDName.isEmpty()) {
diff --git a/src/plugins/autotest/testrunner.cpp b/src/plugins/autotest/testrunner.cpp
index 29b7898835..7dbbb49cdc 100644
--- a/src/plugins/autotest/testrunner.cpp
+++ b/src/plugins/autotest/testrunner.cpp
@@ -23,7 +23,6 @@
#include <projectexplorer/buildmanager.h>
#include <projectexplorer/buildsystem.h>
#include <projectexplorer/project.h>
-#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/projectexplorersettings.h>
#include <projectexplorer/projectmanager.h>
#include <projectexplorer/runconfiguration.h>
@@ -169,11 +168,9 @@ void TestRunner::runTests(TestRunMode mode, const QList<ITestConfiguration *> &s
m_skipTargetsCheck = false;
m_runMode = mode;
- const ProjectExplorerSettings projectExplorerSettings
- = ProjectExplorerPlugin::projectExplorerSettings();
if (mode != TestRunMode::RunAfterBuild
- && projectExplorerSettings.buildBeforeDeploy != BuildBeforeRunMode::Off
- && !projectExplorerSettings.saveBeforeBuild) {
+ && projectExplorerSettings().buildBeforeDeploy != BuildBeforeRunMode::Off
+ && !projectExplorerSettings().saveBeforeBuild) {
if (!ProjectExplorerPlugin::saveModifiedFiles())
return;
}
@@ -203,7 +200,7 @@ void TestRunner::runTests(TestRunMode mode, const QList<ITestConfiguration *> &s
m_targetConnect = connect(project, &Project::activeTargetChanged,
this, [this] { cancelCurrent(KitChanged); });
- if (projectExplorerSettings.buildBeforeDeploy == BuildBeforeRunMode::Off
+ if (projectExplorerSettings().buildBeforeDeploy == BuildBeforeRunMode::Off
|| mode == TestRunMode::DebugWithoutDeploy
|| mode == TestRunMode::RunWithoutDeploy || mode == TestRunMode::RunAfterBuild) {
runOrDebugTests();
diff --git a/src/plugins/cmakeprojectmanager/cmakekitaspect.cpp b/src/plugins/cmakeprojectmanager/cmakekitaspect.cpp
index 00750f4d3c..3d8aa65475 100644
--- a/src/plugins/cmakeprojectmanager/cmakekitaspect.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakekitaspect.cpp
@@ -695,7 +695,7 @@ QVariant CMakeGeneratorKitAspectFactory::defaultValue(const Kit *k) const
return g.matches("NMake Makefiles")
|| g.matches("NMake Makefiles JOM");
});
- if (ProjectExplorerPlugin::projectExplorerSettings().useJom) {
+ if (projectExplorerSettings().useJom) {
it = std::find_if(known.constBegin(),
known.constEnd(),
[](const CMakeTool::Generator &g) {
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index d2647f3d7b..cc3c847b63 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -1993,7 +1993,7 @@ void DebuggerPluginPrivate::setInitialState()
void DebuggerPluginPrivate::updateDebugWithoutDeployMenu()
{
- const bool state = ProjectExplorerPlugin::projectExplorerSettings().deployBeforeRun;
+ const bool state = projectExplorerSettings().deployBeforeRun;
m_debugWithoutDeployAction.setVisible(state);
}
diff --git a/src/plugins/projectexplorer/abstractprocessstep.cpp b/src/plugins/projectexplorer/abstractprocessstep.cpp
index 5cfb66e811..fcdfdc6b63 100644
--- a/src/plugins/projectexplorer/abstractprocessstep.cpp
+++ b/src/plugins/projectexplorer/abstractprocessstep.cpp
@@ -189,7 +189,7 @@ bool AbstractProcessStep::setupProcess(Process &process)
process.setEnvironment(envWithPwd);
process.setCommand({d->m_param.effectiveCommand(), d->m_param.effectiveArguments(),
CommandLine::Raw});
- if (d->m_lowPriority && ProjectExplorerPlugin::projectExplorerSettings().lowBuildPriority)
+ if (d->m_lowPriority && projectExplorerSettings().lowBuildPriority)
process.setLowPriority();
process.setStdOutCodec(buildEnvironment().hasKey("VSLANG")
diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp
index 94e2694acc..742e6df5e4 100644
--- a/src/plugins/projectexplorer/appoutputpane.cpp
+++ b/src/plugins/projectexplorer/appoutputpane.cpp
@@ -661,10 +661,10 @@ void AppOutputPane::closeTab(int tabIndex, CloseTabMode closeTabMode)
bool AppOutputPane::optionallyPromptToStop(RunControl *runControl)
{
- ProjectExplorerSettings settings = ProjectExplorerPlugin::projectExplorerSettings();
- if (!runControl->promptToStop(&settings.prompToStopRunControl))
+ bool promptToStop = projectExplorerSettings().prompToStopRunControl;
+ if (!runControl->promptToStop(&promptToStop))
return false;
- ProjectExplorerPlugin::setProjectExplorerSettings(settings);
+ setPromptToStopSettings(promptToStop);
return true;
}
diff --git a/src/plugins/projectexplorer/buildaspects.cpp b/src/plugins/projectexplorer/buildaspects.cpp
index 0f9c025fce..3872b7824a 100644
--- a/src/plugins/projectexplorer/buildaspects.cpp
+++ b/src/plugins/projectexplorer/buildaspects.cpp
@@ -190,7 +190,7 @@ QString BuildDirectoryAspect::updateProblemLabelsHelper(const QString &value)
QString genericProblem;
QString genericProblemLabelString;
- if (ProjectExplorerPlugin::projectExplorerSettings().warnAgainstNonAsciiBuildDir) {
+ if (projectExplorerSettings().warnAgainstNonAsciiBuildDir) {
const auto isInvalid = [](QChar c) { return c.isSpace() || !isascii(c.toLatin1()); };
if (const auto invalidChar = Utils::findOr(value, std::nullopt, isInvalid)) {
genericProblem = Tr::tr(
diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp
index 1a32d340f2..b65aa609f4 100644
--- a/src/plugins/projectexplorer/buildmanager.cpp
+++ b/src/plugins/projectexplorer/buildmanager.cpp
@@ -209,10 +209,10 @@ static int queue(const QList<Project *> &projects, const QList<Id> &stepIds,
if (!ProjectExplorerPlugin::saveModifiedFiles())
return -1;
- const ProjectExplorerSettings &settings = ProjectExplorerPlugin::projectExplorerSettings();
- if (settings.stopBeforeBuild != StopBeforeBuild::None
+ const StopBeforeBuild stopBeforeBuild = projectExplorerSettings().stopBeforeBuild;
+ if (stopBeforeBuild != StopBeforeBuild::None
&& stepIds.contains(Constants::BUILDSTEPS_BUILD)) {
- StopBeforeBuild stopCondition = settings.stopBeforeBuild;
+ StopBeforeBuild stopCondition = stopBeforeBuild;
if (stopCondition == StopBeforeBuild::SameApp && !forRunConfig)
stopCondition = StopBeforeBuild::SameBuildDir;
const auto isStoppableRc = [&projects, stopCondition, configSelection, forRunConfig,
@@ -258,7 +258,7 @@ static int queue(const QList<Project *> &projects, const QList<Id> &stepIds,
if (!toStop.isEmpty()) {
bool stopThem = true;
- if (settings.prompToStopRunControl) {
+ if (projectExplorerSettings().prompToStopRunControl) {
QStringList names = Utils::transform(toStop, &RunControl::displayName);
if (QMessageBox::question(ICore::dialogParent(),
Tr::tr("Stop Applications"),
@@ -516,7 +516,7 @@ void BuildManager::rebuildProjects(const QList<Project *> &projects,
void BuildManager::deployProjects(const QList<Project *> &projects)
{
QList<Id> steps;
- if (ProjectExplorerPlugin::projectExplorerSettings().buildBeforeDeploy != BuildBeforeRunMode::Off)
+ if (projectExplorerSettings().buildBeforeDeploy != BuildBeforeRunMode::Off)
steps << Id(Constants::BUILDSTEPS_BUILD);
steps << Id(Constants::BUILDSTEPS_DEPLOY);
queue(projects, steps, ConfigSelection::Active);
@@ -525,10 +525,9 @@ void BuildManager::deployProjects(const QList<Project *> &projects)
BuildForRunConfigStatus BuildManager::potentiallyBuildForRunConfig(RunConfiguration *rc)
{
QList<Id> stepIds;
- const ProjectExplorerSettings &settings = ProjectExplorerPlugin::projectExplorerSettings();
- if (settings.deployBeforeRun) {
+ if (projectExplorerSettings().deployBeforeRun) {
if (!isBuilding()) {
- switch (settings.buildBeforeDeploy) {
+ switch (projectExplorerSettings().buildBeforeDeploy) {
case BuildBeforeRunMode::AppOnly:
if (rc->target()->activeBuildConfiguration())
rc->target()->activeBuildConfiguration()->restrictNextBuild(rc);
@@ -721,8 +720,7 @@ void BuildManager::startBuildQueue()
};
const GroupItem abortPolicy
- = ProjectExplorerPlugin::projectExplorerSettings().abortBuildAllOnError
- ? stopOnError : continueOnError;
+ = projectExplorerSettings().abortBuildAllOnError ? stopOnError : continueOnError;
QList<GroupItem> topLevel { abortPolicy, ParserAwaiterTask(onAwaiterSetup) };
Project *lastProject = nullptr;
@@ -856,7 +854,7 @@ bool BuildManager::buildQueueAppend(const QList<BuildItem> &items, const QString
{
if (!d->m_taskTreeRunner.isRunning()) {
d->m_outputWindow->clearContents();
- if (ProjectExplorerPlugin::projectExplorerSettings().clearIssuesOnRebuild) {
+ if (projectExplorerSettings().clearIssuesOnRebuild) {
TaskHub::clearTasks(Constants::TASK_CATEGORY_COMPILE);
TaskHub::clearTasks(Constants::TASK_CATEGORY_BUILDSYSTEM);
TaskHub::clearTasks(Constants::TASK_CATEGORY_DEPLOYMENT);
diff --git a/src/plugins/projectexplorer/environmentaspect.cpp b/src/plugins/projectexplorer/environmentaspect.cpp
index af4d8449d1..fb5aaa2c24 100644
--- a/src/plugins/projectexplorer/environmentaspect.cpp
+++ b/src/plugins/projectexplorer/environmentaspect.cpp
@@ -31,9 +31,7 @@ EnvironmentAspect::EnvironmentAspect(AspectContainer *container)
setConfigWidgetCreator([this] { return new EnvironmentAspectWidget(this); });
addDataExtractor(this, &EnvironmentAspect::environment, &Data::environment);
if (qobject_cast<RunConfiguration *>(container)) {
- addModifier([](Environment &env) {
- env.modify(ProjectExplorerPlugin::projectExplorerSettings().appEnvChanges);
- });
+ addModifier([](Environment &env) { env.modify(projectExplorerSettings().appEnvChanges); });
connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged,
this, &EnvironmentAspect::environmentChanged);
}
diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp
index 5066d0969a..310e170e5a 100644
--- a/src/plugins/projectexplorer/msvctoolchain.cpp
+++ b/src/plugins/projectexplorer/msvctoolchain.cpp
@@ -1151,7 +1151,7 @@ static QString wrappedMakeCommand(const QString &command)
FilePath MsvcToolchain::makeCommand(const Environment &environment) const
{
- bool useJom = ProjectExplorerPlugin::projectExplorerSettings().useJom;
+ const bool useJom = projectExplorerSettings().useJom;
const QString jom("jom.exe");
const QString nmake("nmake.exe");
Utils::FilePath tmp;
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index cf82aa6e73..a409de59cb 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -262,27 +262,6 @@ const char PROJECT_OPEN_LOCATIONS_CONTEXT_MENU[] = "Project.P.OpenLocation.CtxM
const char RECENTPROJECTS_FILE_NAMES_KEY[] = "ProjectExplorer/RecentProjects/FileNames";
const char RECENTPROJECTS_DISPLAY_NAMES_KEY[] = "ProjectExplorer/RecentProjects/DisplayNames";
-const char BUILD_BEFORE_DEPLOY_SETTINGS_KEY[] = "ProjectExplorer/Settings/BuildBeforeDeploy";
-const char DEPLOY_BEFORE_RUN_SETTINGS_KEY[] = "ProjectExplorer/Settings/DeployBeforeRun";
-const char SAVE_BEFORE_BUILD_SETTINGS_KEY[] = "ProjectExplorer/Settings/SaveBeforeBuild";
-const char USE_JOM_SETTINGS_KEY[] = "ProjectExplorer/Settings/UseJom";
-const char ADD_LIBRARY_PATHS_TO_RUN_ENV_SETTINGS_KEY[] =
- "ProjectExplorer/Settings/AddLibraryPathsToRunEnv";
-const char PROMPT_TO_STOP_RUN_CONTROL_SETTINGS_KEY[] =
- "ProjectExplorer/Settings/PromptToStopRunControl";
-const char AUTO_CREATE_RUN_CONFIGS_SETTINGS_KEY[] =
- "ProjectExplorer/Settings/AutomaticallyCreateRunConfigurations";
-const char ENVIRONMENT_ID_SETTINGS_KEY[] = "ProjectExplorer/Settings/EnvironmentId";
-const char STOP_BEFORE_BUILD_SETTINGS_KEY[] = "ProjectExplorer/Settings/StopBeforeBuild";
-const char TERMINAL_MODE_SETTINGS_KEY[] = "ProjectExplorer/Settings/TerminalMode";
-const char CLOSE_FILES_WITH_PROJECT_SETTINGS_KEY[]
- = "ProjectExplorer/Settings/CloseFilesWithProject";
-const char CLEAR_ISSUES_ON_REBUILD_SETTINGS_KEY[] = "ProjectExplorer/Settings/ClearIssuesOnRebuild";
-const char ABORT_BUILD_ALL_ON_ERROR_SETTINGS_KEY[]
- = "ProjectExplorer/Settings/AbortBuildAllOnError";
-const char LOW_BUILD_PRIORITY_SETTINGS_KEY[] = "ProjectExplorer/Settings/LowBuildPriority";
-const char WARN_AGAINST_NON_ASCII_BUILD_DIR_SETTINGS_KEY[] = "ProjectExplorer/Settings/LowBuildPriority";
-const char APP_ENV_CHANGES_SETTINGS_KEY[] = "ProjectExplorer/Settings/AppEnvChanges";
const char CUSTOM_PARSER_COUNT_KEY[] = "ProjectExplorer/Settings/CustomParserCount";
const char CUSTOM_PARSER_PREFIX_KEY[] = "ProjectExplorer/Settings/CustomParser";
@@ -640,7 +619,6 @@ public:
QPointer<RunConfiguration> m_defaultRunConfiguration;
QPointer<RunConfiguration> m_delayedRunConfiguration;
MiniProjectTargetSelector * m_targetSelector;
- ProjectExplorerSettings m_projectExplorerSettings;
QList<CustomParserSettings> m_customParsers;
bool m_shouldHaveRunConfiguration = false;
Id m_runMode = Constants::NO_RUN_MODE;
@@ -700,7 +678,6 @@ public:
ProjectFileWizardExtension m_projectFileWizardExtension;
// Settings pages
- ProjectExplorerSettingsPage m_projectExplorerSettingsPage;
AppOutputSettingsPage m_appOutputSettingsPage;
DeviceSettingsPage m_deviceSettingsPage;
SshSettingsPage m_sshSettingsPage;
@@ -811,6 +788,8 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
setupProjectTreeWidgetFactory();
+ setupProjectExplorerSettings();
+
dd = new ProjectExplorerPluginPrivate;
setupDesktopRunConfigurations();
@@ -1637,73 +1616,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
}
}
- const QVariant buildBeforeDeploy = s->value(Constants::BUILD_BEFORE_DEPLOY_SETTINGS_KEY);
- const QString buildBeforeDeployString = buildBeforeDeploy.toString();
- if (buildBeforeDeployString == "true") { // backward compatibility with QtC < 4.12
- dd->m_projectExplorerSettings.buildBeforeDeploy = BuildBeforeRunMode::WholeProject;
- } else if (buildBeforeDeployString == "false") {
- dd->m_projectExplorerSettings.buildBeforeDeploy = BuildBeforeRunMode::Off;
- } else if (buildBeforeDeploy.isValid()) {
- dd->m_projectExplorerSettings.buildBeforeDeploy
- = static_cast<BuildBeforeRunMode>(buildBeforeDeploy.toInt());
- }
-
- static const ProjectExplorerSettings defaultSettings;
-
- dd->m_projectExplorerSettings.deployBeforeRun
- = s->value(Constants::DEPLOY_BEFORE_RUN_SETTINGS_KEY, defaultSettings.deployBeforeRun)
- .toBool();
- dd->m_projectExplorerSettings.saveBeforeBuild
- = s->value(Constants::SAVE_BEFORE_BUILD_SETTINGS_KEY, defaultSettings.saveBeforeBuild)
- .toBool();
- dd->m_projectExplorerSettings.useJom
- = s->value(Constants::USE_JOM_SETTINGS_KEY, defaultSettings.useJom).toBool();
- dd->m_projectExplorerSettings.addLibraryPathsToRunEnv
- = s->value(Constants::ADD_LIBRARY_PATHS_TO_RUN_ENV_SETTINGS_KEY,
- defaultSettings.addLibraryPathsToRunEnv)
- .toBool();
- dd->m_projectExplorerSettings.prompToStopRunControl
- = s->value(Constants::PROMPT_TO_STOP_RUN_CONTROL_SETTINGS_KEY,
- defaultSettings.prompToStopRunControl)
- .toBool();
- dd->m_projectExplorerSettings.automaticallyCreateRunConfigurations
- = s->value(Constants::AUTO_CREATE_RUN_CONFIGS_SETTINGS_KEY,
- defaultSettings.automaticallyCreateRunConfigurations)
- .toBool();
- dd->m_projectExplorerSettings.environmentId =
- QUuid(s->value(Constants::ENVIRONMENT_ID_SETTINGS_KEY).toByteArray());
- if (dd->m_projectExplorerSettings.environmentId.isNull())
- dd->m_projectExplorerSettings.environmentId = QUuid::createUuid();
- int tmp = s->value(Constants::STOP_BEFORE_BUILD_SETTINGS_KEY,
- int(defaultSettings.stopBeforeBuild))
- .toInt();
- if (tmp < 0 || tmp > int(StopBeforeBuild::SameApp))
- tmp = int(defaultSettings.stopBeforeBuild);
- dd->m_projectExplorerSettings.stopBeforeBuild = StopBeforeBuild(tmp);
- dd->m_projectExplorerSettings.terminalMode = static_cast<TerminalMode>(
- s->value(Constants::TERMINAL_MODE_SETTINGS_KEY, int(defaultSettings.terminalMode)).toInt());
- dd->m_projectExplorerSettings.closeSourceFilesWithProject
- = s->value(Constants::CLOSE_FILES_WITH_PROJECT_SETTINGS_KEY,
- defaultSettings.closeSourceFilesWithProject)
- .toBool();
- dd->m_projectExplorerSettings.clearIssuesOnRebuild
- = s->value(Constants::CLEAR_ISSUES_ON_REBUILD_SETTINGS_KEY,
- defaultSettings.clearIssuesOnRebuild)
- .toBool();
- dd->m_projectExplorerSettings.abortBuildAllOnError
- = s->value(Constants::ABORT_BUILD_ALL_ON_ERROR_SETTINGS_KEY,
- defaultSettings.abortBuildAllOnError)
- .toBool();
- dd->m_projectExplorerSettings.lowBuildPriority
- = s->value(Constants::LOW_BUILD_PRIORITY_SETTINGS_KEY, defaultSettings.lowBuildPriority)
- .toBool();
- dd->m_projectExplorerSettings.warnAgainstNonAsciiBuildDir
- = s->value(Constants::WARN_AGAINST_NON_ASCII_BUILD_DIR_SETTINGS_KEY,
- defaultSettings.warnAgainstNonAsciiBuildDir)
- .toBool();
- dd->m_projectExplorerSettings.appEnvChanges = EnvironmentItem::fromStringList(
- s->value(Constants::APP_ENV_CHANGES_SETTINGS_KEY).toStringList());
-
const int customParserCount = s->value(Constants::CUSTOM_PARSER_COUNT_KEY).toInt();
for (int i = 0; i < customParserCount; ++i) {
CustomParserSettings settings;
@@ -2145,7 +2057,7 @@ bool ProjectExplorerPlugin::delayedInitialize()
void ProjectExplorerPluginPrivate::updateRunWithoutDeployMenu()
{
- m_runWithoutDeployAction->setVisible(m_projectExplorerSettings.deployBeforeRun);
+ m_runWithoutDeployAction->setVisible(projectExplorerSettings().deployBeforeRun);
}
IPlugin::ShutdownFlag ProjectExplorerPlugin::aboutToShutdown()
@@ -2228,55 +2140,6 @@ void ProjectExplorerPluginPrivate::savePersistentSettings()
s->setValueWithDefault(Constants::RECENTPROJECTS_FILE_NAMES_KEY, fileNames);
s->setValueWithDefault(Constants::RECENTPROJECTS_DISPLAY_NAMES_KEY, displayNames);
- static const ProjectExplorerSettings defaultSettings;
-
- s->setValueWithDefault(Constants::BUILD_BEFORE_DEPLOY_SETTINGS_KEY,
- int(dd->m_projectExplorerSettings.buildBeforeDeploy),
- int(defaultSettings.buildBeforeDeploy));
- s->setValueWithDefault(Constants::DEPLOY_BEFORE_RUN_SETTINGS_KEY,
- dd->m_projectExplorerSettings.deployBeforeRun,
- defaultSettings.deployBeforeRun);
- s->setValueWithDefault(Constants::SAVE_BEFORE_BUILD_SETTINGS_KEY,
- dd->m_projectExplorerSettings.saveBeforeBuild,
- defaultSettings.saveBeforeBuild);
- s->setValueWithDefault(Constants::USE_JOM_SETTINGS_KEY,
- dd->m_projectExplorerSettings.useJom,
- defaultSettings.useJom);
- s->setValueWithDefault(Constants::ADD_LIBRARY_PATHS_TO_RUN_ENV_SETTINGS_KEY,
- dd->m_projectExplorerSettings.addLibraryPathsToRunEnv,
- defaultSettings.addLibraryPathsToRunEnv);
- s->setValueWithDefault(Constants::PROMPT_TO_STOP_RUN_CONTROL_SETTINGS_KEY,
- dd->m_projectExplorerSettings.prompToStopRunControl,
- defaultSettings.prompToStopRunControl);
- s->setValueWithDefault(Constants::TERMINAL_MODE_SETTINGS_KEY,
- int(dd->m_projectExplorerSettings.terminalMode),
- int(defaultSettings.terminalMode));
- s->setValueWithDefault(Constants::CLOSE_FILES_WITH_PROJECT_SETTINGS_KEY,
- dd->m_projectExplorerSettings.closeSourceFilesWithProject,
- defaultSettings.closeSourceFilesWithProject);
- s->setValueWithDefault(Constants::CLEAR_ISSUES_ON_REBUILD_SETTINGS_KEY,
- dd->m_projectExplorerSettings.clearIssuesOnRebuild,
- defaultSettings.clearIssuesOnRebuild);
- s->setValueWithDefault(Constants::ABORT_BUILD_ALL_ON_ERROR_SETTINGS_KEY,
- dd->m_projectExplorerSettings.abortBuildAllOnError,
- defaultSettings.abortBuildAllOnError);
- s->setValueWithDefault(Constants::LOW_BUILD_PRIORITY_SETTINGS_KEY,
- dd->m_projectExplorerSettings.lowBuildPriority,
- defaultSettings.lowBuildPriority);
- s->setValueWithDefault(Constants::WARN_AGAINST_NON_ASCII_BUILD_DIR_SETTINGS_KEY,
- dd->m_projectExplorerSettings.warnAgainstNonAsciiBuildDir,
- defaultSettings.warnAgainstNonAsciiBuildDir);
- s->setValueWithDefault(Constants::AUTO_CREATE_RUN_CONFIGS_SETTINGS_KEY,
- dd->m_projectExplorerSettings.automaticallyCreateRunConfigurations,
- defaultSettings.automaticallyCreateRunConfigurations);
- s->setValueWithDefault(Constants::ENVIRONMENT_ID_SETTINGS_KEY,
- dd->m_projectExplorerSettings.environmentId.toByteArray());
- s->setValueWithDefault(Constants::STOP_BEFORE_BUILD_SETTINGS_KEY,
- int(dd->m_projectExplorerSettings.stopBeforeBuild),
- int(defaultSettings.stopBeforeBuild));
- s->setValueWithDefault(Constants::APP_ENV_CHANGES_SETTINGS_KEY,
- EnvironmentItem::toStringList(dd->m_projectExplorerSettings.appEnvChanges));
-
buildPropertiesSettings().writeSettings(); // FIXME: Should not be needed.
s->setValueWithDefault(Constants::CUSTOM_PARSER_COUNT_KEY, int(dd->m_customParsers.count()), 0);
@@ -2723,7 +2586,7 @@ bool ProjectExplorerPlugin::saveModifiedFiles()
{
QList<IDocument *> documentsToSave = DocumentManager::modifiedDocuments();
if (!documentsToSave.isEmpty()) {
- if (dd->m_projectExplorerSettings.saveBeforeBuild) {
+ if (projectExplorerSettings().saveBeforeBuild) {
bool cancelled = false;
DocumentManager::saveModifiedDocumentsSilently(documentsToSave, &cancelled);
if (cancelled)
@@ -2738,7 +2601,7 @@ bool ProjectExplorerPlugin::saveModifiedFiles()
}
if (alwaysSave)
- dd->m_projectExplorerSettings.saveBeforeBuild = true;
+ setSaveBeforeBuildSettings(true);
}
}
return true;
@@ -3054,7 +2917,7 @@ void ProjectExplorerPluginPrivate::updateDeployActions()
&& !BuildManager::isBuilding(currentProject)
&& hasDeploySettings(currentProject);
- if (m_projectExplorerSettings.buildBeforeDeploy != BuildBeforeRunMode::Off) {
+ if (projectExplorerSettings().buildBeforeDeploy != BuildBeforeRunMode::Off) {
if (hasBuildSettings(project)
&& !buildSettingsEnabled(project).first)
enableDeployActions = false;
@@ -3072,7 +2935,7 @@ void ProjectExplorerPluginPrivate::updateDeployActions()
m_deployProjectOnlyAction->setEnabled(enableDeployActions);
bool enableDeploySessionAction = true;
- if (m_projectExplorerSettings.buildBeforeDeploy != BuildBeforeRunMode::Off) {
+ if (projectExplorerSettings().buildBeforeDeploy != BuildBeforeRunMode::Off) {
auto hasDisabledBuildConfiguration = [](Project *project) {
return project && project->activeTarget()
&& project->activeTarget()->activeBuildConfiguration()
@@ -3116,8 +2979,8 @@ expected_str<void> ProjectExplorerPlugin::canRunStartupProject(Utils::Id runMode
if (!activeRC->isEnabled(runMode))
return make_unexpected(activeRC->disabledReason(runMode));
- if (dd->m_projectExplorerSettings.buildBeforeDeploy != BuildBeforeRunMode::Off
- && dd->m_projectExplorerSettings.deployBeforeRun
+ if (projectExplorerSettings().buildBeforeDeploy != BuildBeforeRunMode::Off
+ && projectExplorerSettings().deployBeforeRun
&& !BuildManager::isBuilding(project)
&& hasBuildSettings(project)) {
QPair<bool, QString> buildState = dd->buildSettingsEnabled(project);
@@ -3968,21 +3831,6 @@ void ProjectExplorerPluginPrivate::handleSetStartupProject()
setStartupProject(ProjectTree::currentProject());
}
-void ProjectExplorerPlugin::setProjectExplorerSettings(const ProjectExplorerSettings &pes)
-{
- QTC_ASSERT(dd->m_projectExplorerSettings.environmentId == pes.environmentId, return);
-
- if (dd->m_projectExplorerSettings == pes)
- return;
- dd->m_projectExplorerSettings = pes;
- emit m_instance->settingsChanged();
-}
-
-const ProjectExplorerSettings &ProjectExplorerPlugin::projectExplorerSettings()
-{
- return dd->m_projectExplorerSettings;
-}
-
void ProjectExplorerPlugin::setAppOutputSettings(const AppOutputSettings &settings)
{
dd->m_outputPane.setSettings(settings);
diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h
index ffb5d1bcd3..291734901a 100644
--- a/src/plugins/projectexplorer/projectexplorer.h
+++ b/src/plugins/projectexplorer/projectexplorer.h
@@ -29,7 +29,6 @@ class CustomParserSettings;
class FolderNode;
class Node;
class Project;
-class ProjectExplorerSettings;
class RunControl;
class RunConfiguration;
@@ -110,9 +109,6 @@ public:
bool delayedInitialize() override;
ShutdownFlag aboutToShutdown() override;
- static void setProjectExplorerSettings(const ProjectExplorerSettings &pes);
- static const ProjectExplorerSettings &projectExplorerSettings();
-
static void setAppOutputSettings(const Internal::AppOutputSettings &settings);
static const Internal::AppOutputSettings &appOutputSettings();
diff --git a/src/plugins/projectexplorer/projectexplorersettings.cpp b/src/plugins/projectexplorer/projectexplorersettings.cpp
index b99a38d461..54cbc57a8c 100644
--- a/src/plugins/projectexplorer/projectexplorersettings.cpp
+++ b/src/plugins/projectexplorer/projectexplorersettings.cpp
@@ -9,7 +9,9 @@
#include "projectexplorertr.h"
#include <coreplugin/coreconstants.h>
+#include <coreplugin/dialogs/ioptionspage.h>
#include <coreplugin/documentmanager.h>
+#include <coreplugin/icore.h>
#include <utils/environmentdialog.h>
#include <utils/layoutbuilder.h>
@@ -27,10 +29,203 @@
using namespace Core;
using namespace Utils;
-namespace ProjectExplorer::Internal {
+namespace ProjectExplorer {
+namespace Internal {
+
+namespace Constants {
+const char BUILD_BEFORE_DEPLOY_SETTINGS_KEY[] = "ProjectExplorer/Settings/BuildBeforeDeploy";
+const char DEPLOY_BEFORE_RUN_SETTINGS_KEY[] = "ProjectExplorer/Settings/DeployBeforeRun";
+const char SAVE_BEFORE_BUILD_SETTINGS_KEY[] = "ProjectExplorer/Settings/SaveBeforeBuild";
+const char USE_JOM_SETTINGS_KEY[] = "ProjectExplorer/Settings/UseJom";
+const char ADD_LIBRARY_PATHS_TO_RUN_ENV_SETTINGS_KEY[] =
+ "ProjectExplorer/Settings/AddLibraryPathsToRunEnv";
+const char PROMPT_TO_STOP_RUN_CONTROL_SETTINGS_KEY[] =
+ "ProjectExplorer/Settings/PromptToStopRunControl";
+const char AUTO_CREATE_RUN_CONFIGS_SETTINGS_KEY[] =
+ "ProjectExplorer/Settings/AutomaticallyCreateRunConfigurations";
+const char ENVIRONMENT_ID_SETTINGS_KEY[] = "ProjectExplorer/Settings/EnvironmentId";
+const char STOP_BEFORE_BUILD_SETTINGS_KEY[] = "ProjectExplorer/Settings/StopBeforeBuild";
+const char TERMINAL_MODE_SETTINGS_KEY[] = "ProjectExplorer/Settings/TerminalMode";
+const char CLOSE_FILES_WITH_PROJECT_SETTINGS_KEY[]
+ = "ProjectExplorer/Settings/CloseFilesWithProject";
+const char CLEAR_ISSUES_ON_REBUILD_SETTINGS_KEY[] = "ProjectExplorer/Settings/ClearIssuesOnRebuild";
+const char ABORT_BUILD_ALL_ON_ERROR_SETTINGS_KEY[]
+ = "ProjectExplorer/Settings/AbortBuildAllOnError";
+const char LOW_BUILD_PRIORITY_SETTINGS_KEY[] = "ProjectExplorer/Settings/LowBuildPriority";
+const char APP_ENV_CHANGES_SETTINGS_KEY[] = "ProjectExplorer/Settings/AppEnvChanges";
+const char WARN_AGAINST_NON_ASCII_BUILD_DIR_SETTINGS_KEY[] = "ProjectExplorer/Settings/LowBuildPriority";
+
+} // Constants
enum { UseCurrentDirectory, UseProjectDirectory };
+void saveProjectExplorerSettings();
+
+static bool operator==(const ProjectExplorerSettings &p1, const ProjectExplorerSettings &p2)
+{
+ return p1.buildBeforeDeploy == p2.buildBeforeDeploy
+ && p1.deployBeforeRun == p2.deployBeforeRun
+ && p1.saveBeforeBuild == p2.saveBeforeBuild
+ && p1.useJom == p2.useJom
+ && p1.prompToStopRunControl == p2.prompToStopRunControl
+ && p1.automaticallyCreateRunConfigurations == p2.automaticallyCreateRunConfigurations
+ && p1.addLibraryPathsToRunEnv == p2.addLibraryPathsToRunEnv
+ && p1.environmentId == p2.environmentId
+ && p1.stopBeforeBuild == p2.stopBeforeBuild
+ && p1.terminalMode == p2.terminalMode
+ && p1.closeSourceFilesWithProject == p2.closeSourceFilesWithProject
+ && p1.clearIssuesOnRebuild == p2.clearIssuesOnRebuild
+ && p1.abortBuildAllOnError == p2.abortBuildAllOnError
+ && p1.appEnvChanges == p2.appEnvChanges
+ && p1.lowBuildPriority == p2.lowBuildPriority;
+}
+
+ProjectExplorerSettings &mutableProjectExplorerSettings()
+{
+ static ProjectExplorerSettings theProjectExplorerSettings;
+ return theProjectExplorerSettings;
+}
+
+void setPromptToStopSettings(bool promptToStop)
+{
+ mutableProjectExplorerSettings().prompToStopRunControl = promptToStop;
+ saveProjectExplorerSettings();
+ emit ProjectExplorerPlugin::instance()->settingsChanged();
+}
+
+void setSaveBeforeBuildSettings(bool saveBeforeBuild)
+{
+ mutableProjectExplorerSettings().saveBeforeBuild = saveBeforeBuild;
+ saveProjectExplorerSettings();
+}
+
+static void loadProjectExplorerSettings()
+{
+ QtcSettings *s = ICore::settings();
+
+ const QVariant buildBeforeDeploy = s->value(Constants::BUILD_BEFORE_DEPLOY_SETTINGS_KEY);
+ const QString buildBeforeDeployString = buildBeforeDeploy.toString();
+ ProjectExplorerSettings &settings = mutableProjectExplorerSettings();
+ if (buildBeforeDeployString == "true") { // backward compatibility with QtC < 4.12
+ settings.buildBeforeDeploy = BuildBeforeRunMode::WholeProject;
+ } else if (buildBeforeDeployString == "false") {
+ settings.buildBeforeDeploy = BuildBeforeRunMode::Off;
+ } else if (buildBeforeDeploy.isValid()) {
+ settings.buildBeforeDeploy
+ = static_cast<BuildBeforeRunMode>(buildBeforeDeploy.toInt());
+ }
+
+ static const ProjectExplorerSettings defaultSettings;
+
+ settings.deployBeforeRun
+ = s->value(Constants::DEPLOY_BEFORE_RUN_SETTINGS_KEY, defaultSettings.deployBeforeRun)
+ .toBool();
+ settings.saveBeforeBuild
+ = s->value(Constants::SAVE_BEFORE_BUILD_SETTINGS_KEY, defaultSettings.saveBeforeBuild)
+ .toBool();
+ settings.useJom
+ = s->value(Constants::USE_JOM_SETTINGS_KEY, defaultSettings.useJom).toBool();
+ settings.addLibraryPathsToRunEnv
+ = s->value(Constants::ADD_LIBRARY_PATHS_TO_RUN_ENV_SETTINGS_KEY,
+ defaultSettings.addLibraryPathsToRunEnv)
+ .toBool();
+ settings.prompToStopRunControl
+ = s->value(Constants::PROMPT_TO_STOP_RUN_CONTROL_SETTINGS_KEY,
+ defaultSettings.prompToStopRunControl)
+ .toBool();
+ settings.automaticallyCreateRunConfigurations
+ = s->value(Constants::AUTO_CREATE_RUN_CONFIGS_SETTINGS_KEY,
+ defaultSettings.automaticallyCreateRunConfigurations)
+ .toBool();
+ settings.environmentId =
+ QUuid(s->value(Constants::ENVIRONMENT_ID_SETTINGS_KEY).toByteArray());
+ if (settings.environmentId.isNull())
+ settings.environmentId = QUuid::createUuid();
+ int tmp = s->value(Constants::STOP_BEFORE_BUILD_SETTINGS_KEY,
+ int(defaultSettings.stopBeforeBuild))
+ .toInt();
+ if (tmp < 0 || tmp > int(StopBeforeBuild::SameApp))
+ tmp = int(defaultSettings.stopBeforeBuild);
+ settings.stopBeforeBuild = StopBeforeBuild(tmp);
+ settings.terminalMode = static_cast<TerminalMode>(
+ s->value(Constants::TERMINAL_MODE_SETTINGS_KEY, int(defaultSettings.terminalMode)).toInt());
+ settings.closeSourceFilesWithProject
+ = s->value(Constants::CLOSE_FILES_WITH_PROJECT_SETTINGS_KEY,
+ defaultSettings.closeSourceFilesWithProject)
+ .toBool();
+ settings.clearIssuesOnRebuild
+ = s->value(Constants::CLEAR_ISSUES_ON_REBUILD_SETTINGS_KEY,
+ defaultSettings.clearIssuesOnRebuild)
+ .toBool();
+ settings.abortBuildAllOnError
+ = s->value(Constants::ABORT_BUILD_ALL_ON_ERROR_SETTINGS_KEY,
+ defaultSettings.abortBuildAllOnError)
+ .toBool();
+ settings.lowBuildPriority
+ = s->value(Constants::LOW_BUILD_PRIORITY_SETTINGS_KEY, defaultSettings.lowBuildPriority)
+ .toBool();
+ settings.warnAgainstNonAsciiBuildDir
+ = s->value(Constants::WARN_AGAINST_NON_ASCII_BUILD_DIR_SETTINGS_KEY,
+ defaultSettings.warnAgainstNonAsciiBuildDir)
+ .toBool();
+ settings.appEnvChanges = EnvironmentItem::fromStringList(
+ s->value(Constants::APP_ENV_CHANGES_SETTINGS_KEY).toStringList());
+}
+
+void saveProjectExplorerSettings()
+{
+ QtcSettings *s = ICore::settings();
+ static const ProjectExplorerSettings defaultSettings;
+
+ const ProjectExplorerSettings &settings = projectExplorerSettings();
+ s->setValueWithDefault(Constants::BUILD_BEFORE_DEPLOY_SETTINGS_KEY,
+ int(settings.buildBeforeDeploy),
+ int(defaultSettings.buildBeforeDeploy));
+ s->setValueWithDefault(Constants::DEPLOY_BEFORE_RUN_SETTINGS_KEY,
+ settings.deployBeforeRun,
+ defaultSettings.deployBeforeRun);
+ s->setValueWithDefault(Constants::SAVE_BEFORE_BUILD_SETTINGS_KEY,
+ settings.saveBeforeBuild,
+ defaultSettings.saveBeforeBuild);
+ s->setValueWithDefault(Constants::USE_JOM_SETTINGS_KEY,
+ settings.useJom,
+ defaultSettings.useJom);
+ s->setValueWithDefault(Constants::ADD_LIBRARY_PATHS_TO_RUN_ENV_SETTINGS_KEY,
+ settings.addLibraryPathsToRunEnv,
+ defaultSettings.addLibraryPathsToRunEnv);
+ s->setValueWithDefault(Constants::PROMPT_TO_STOP_RUN_CONTROL_SETTINGS_KEY,
+ settings.prompToStopRunControl,
+ defaultSettings.prompToStopRunControl);
+ s->setValueWithDefault(Constants::TERMINAL_MODE_SETTINGS_KEY,
+ int(settings.terminalMode),
+ int(defaultSettings.terminalMode));
+ s->setValueWithDefault(Constants::CLOSE_FILES_WITH_PROJECT_SETTINGS_KEY,
+ settings.closeSourceFilesWithProject,
+ defaultSettings.closeSourceFilesWithProject);
+ s->setValueWithDefault(Constants::CLEAR_ISSUES_ON_REBUILD_SETTINGS_KEY,
+ settings.clearIssuesOnRebuild,
+ defaultSettings.clearIssuesOnRebuild);
+ s->setValueWithDefault(Constants::ABORT_BUILD_ALL_ON_ERROR_SETTINGS_KEY,
+ settings.abortBuildAllOnError,
+ defaultSettings.abortBuildAllOnError);
+ s->setValueWithDefault(Constants::LOW_BUILD_PRIORITY_SETTINGS_KEY,
+ settings.lowBuildPriority,
+ defaultSettings.lowBuildPriority);
+ s->setValueWithDefault(Constants::WARN_AGAINST_NON_ASCII_BUILD_DIR_SETTINGS_KEY,
+ settings.warnAgainstNonAsciiBuildDir,
+ defaultSettings.warnAgainstNonAsciiBuildDir);
+ s->setValueWithDefault(Constants::AUTO_CREATE_RUN_CONFIGS_SETTINGS_KEY,
+ settings.automaticallyCreateRunConfigurations,
+ defaultSettings.automaticallyCreateRunConfigurations);
+ s->setValueWithDefault(Constants::ENVIRONMENT_ID_SETTINGS_KEY,
+ settings.environmentId.toByteArray());
+ s->setValueWithDefault(Constants::STOP_BEFORE_BUILD_SETTINGS_KEY,
+ int(settings.stopBeforeBuild),
+ int(defaultSettings.stopBeforeBuild));
+ s->setValueWithDefault(Constants::APP_ENV_CHANGES_SETTINGS_KEY,
+ EnvironmentItem::toStringList(settings.appEnvChanges));
+}
+
class ProjectExplorerSettingsWidget : public IOptionsPageWidget
{
public:
@@ -47,7 +242,15 @@ public:
void apply() final
{
- ProjectExplorerPlugin::setProjectExplorerSettings(settings());
+ ProjectExplorerSettings newSettings = settings();
+ QTC_CHECK(projectExplorerSettings().environmentId == newSettings.environmentId);
+
+ if (!(projectExplorerSettings() == newSettings)) {
+ mutableProjectExplorerSettings() = newSettings;
+ saveProjectExplorerSettings();
+ emit ProjectExplorerPlugin::instance()->settingsChanged();
+ }
+
DocumentManager::setProjectsDirectory(projectsDirectory());
DocumentManager::setUseProjectsDirectory(useProjectsDirectory());
}
@@ -56,7 +259,6 @@ private:
void slotDirectoryButtonGroupChanged();
void updateAppEnvChangesLabel();
- mutable ProjectExplorerSettings m_settings;
Utils::EnvironmentItems m_appEnvChanges;
QRadioButton *m_currentDirectoryRadioButton;
QRadioButton *m_directoryRadioButton;
@@ -204,7 +406,7 @@ ProjectExplorerSettingsWidget::ProjectExplorerSettingsWidget()
connect(m_directoryButtonGroup, &QButtonGroup::buttonClicked,
this, &ProjectExplorerSettingsWidget::slotDirectoryButtonGroupChanged);
- setSettings(ProjectExplorerPlugin::projectExplorerSettings());
+ setSettings(projectExplorerSettings());
setProjectsDirectory(DocumentManager::projectsDirectory());
setUseProjectsDirectory(DocumentManager::useProjectsDirectory());
updateAppEnvChangesLabel();
@@ -212,46 +414,46 @@ ProjectExplorerSettingsWidget::ProjectExplorerSettingsWidget()
ProjectExplorerSettings ProjectExplorerSettingsWidget::settings() const
{
- m_settings.buildBeforeDeploy = static_cast<BuildBeforeRunMode>(
- m_buildBeforeDeployComboBox->currentData().toInt());
- m_settings.deployBeforeRun = m_deployProjectBeforeRunCheckBox->isChecked();
- m_settings.saveBeforeBuild = m_saveAllFilesCheckBox->isChecked();
- m_settings.useJom = m_jomCheckbox->isChecked();
- m_settings.addLibraryPathsToRunEnv = m_addLibraryPathsToRunEnvCheckBox->isChecked();
- m_settings.prompToStopRunControl = m_promptToStopRunControlCheckBox->isChecked();
- m_settings.automaticallyCreateRunConfigurations = m_automaticallyCreateRunConfiguration->isChecked();
- m_settings.stopBeforeBuild = static_cast<StopBeforeBuild>(
- m_stopBeforeBuildComboBox->currentData().toInt());
- m_settings.terminalMode = static_cast<ProjectExplorer::TerminalMode>(m_terminalModeComboBox->currentIndex());
- m_settings.closeSourceFilesWithProject = m_closeSourceFilesCheckBox->isChecked();
- m_settings.clearIssuesOnRebuild = m_clearIssuesCheckBox->isChecked();
- m_settings.abortBuildAllOnError = m_abortBuildAllOnErrorCheckBox->isChecked();
- m_settings.lowBuildPriority = m_lowBuildPriorityCheckBox->isChecked();
- m_settings.warnAgainstNonAsciiBuildDir = m_warnAgainstNonAsciiBuildDirCheckBox->isChecked();
- m_settings.appEnvChanges = m_appEnvChanges;
- return m_settings;
+ ProjectExplorerSettings s;
+ s.buildBeforeDeploy = static_cast<BuildBeforeRunMode>(
+ m_buildBeforeDeployComboBox->currentData().toInt());
+ s.deployBeforeRun = m_deployProjectBeforeRunCheckBox->isChecked();
+ s.saveBeforeBuild = m_saveAllFilesCheckBox->isChecked();
+ s.useJom = m_jomCheckbox->isChecked();
+ s.addLibraryPathsToRunEnv = m_addLibraryPathsToRunEnvCheckBox->isChecked();
+ s.prompToStopRunControl = m_promptToStopRunControlCheckBox->isChecked();
+ s.automaticallyCreateRunConfigurations = m_automaticallyCreateRunConfiguration->isChecked();
+ s.stopBeforeBuild = static_cast<StopBeforeBuild>(
+ m_stopBeforeBuildComboBox->currentData().toInt());
+ s.terminalMode = static_cast<ProjectExplorer::TerminalMode>(m_terminalModeComboBox->currentIndex());
+ s.closeSourceFilesWithProject = m_closeSourceFilesCheckBox->isChecked();
+ s.clearIssuesOnRebuild = m_clearIssuesCheckBox->isChecked();
+ s.abortBuildAllOnError = m_abortBuildAllOnErrorCheckBox->isChecked();
+ s.lowBuildPriority = m_lowBuildPriorityCheckBox->isChecked();
+ s.warnAgainstNonAsciiBuildDir = m_warnAgainstNonAsciiBuildDirCheckBox->isChecked();
+ s.appEnvChanges = m_appEnvChanges;
+ return s;
}
-void ProjectExplorerSettingsWidget::setSettings(const ProjectExplorerSettings &pes)
+void ProjectExplorerSettingsWidget::setSettings(const ProjectExplorerSettings &s)
{
- m_settings = pes;
- m_appEnvChanges = pes.appEnvChanges;
+ m_appEnvChanges = s.appEnvChanges;
m_buildBeforeDeployComboBox->setCurrentIndex(
- m_buildBeforeDeployComboBox->findData(int(m_settings.buildBeforeDeploy)));
- m_deployProjectBeforeRunCheckBox->setChecked(m_settings.deployBeforeRun);
- m_saveAllFilesCheckBox->setChecked(m_settings.saveBeforeBuild);
- m_jomCheckbox->setChecked(m_settings.useJom);
- m_addLibraryPathsToRunEnvCheckBox->setChecked(m_settings.addLibraryPathsToRunEnv);
- m_promptToStopRunControlCheckBox->setChecked(m_settings.prompToStopRunControl);
- m_automaticallyCreateRunConfiguration->setChecked(m_settings.automaticallyCreateRunConfigurations);
+ m_buildBeforeDeployComboBox->findData(int(s.buildBeforeDeploy)));
+ m_deployProjectBeforeRunCheckBox->setChecked(s.deployBeforeRun);
+ m_saveAllFilesCheckBox->setChecked(s.saveBeforeBuild);
+ m_jomCheckbox->setChecked(s.useJom);
+ m_addLibraryPathsToRunEnvCheckBox->setChecked(s.addLibraryPathsToRunEnv);
+ m_promptToStopRunControlCheckBox->setChecked(s.prompToStopRunControl);
+ m_automaticallyCreateRunConfiguration->setChecked(s.automaticallyCreateRunConfigurations);
m_stopBeforeBuildComboBox->setCurrentIndex(
- m_stopBeforeBuildComboBox->findData(int(m_settings.stopBeforeBuild)));
- m_terminalModeComboBox->setCurrentIndex(static_cast<int>(m_settings.terminalMode));
- m_closeSourceFilesCheckBox->setChecked(m_settings.closeSourceFilesWithProject);
- m_clearIssuesCheckBox->setChecked(m_settings.clearIssuesOnRebuild);
- m_abortBuildAllOnErrorCheckBox->setChecked(m_settings.abortBuildAllOnError);
- m_lowBuildPriorityCheckBox->setChecked(m_settings.lowBuildPriority);
- m_warnAgainstNonAsciiBuildDirCheckBox->setChecked(m_settings.warnAgainstNonAsciiBuildDir);
+ m_stopBeforeBuildComboBox->findData(int(s.stopBeforeBuild)));
+ m_terminalModeComboBox->setCurrentIndex(static_cast<int>(s.terminalMode));
+ m_closeSourceFilesCheckBox->setChecked(s.closeSourceFilesWithProject);
+ m_clearIssuesCheckBox->setChecked(s.clearIssuesOnRebuild);
+ m_abortBuildAllOnErrorCheckBox->setChecked(s.abortBuildAllOnError);
+ m_lowBuildPriorityCheckBox->setChecked(s.lowBuildPriority);
+ m_warnAgainstNonAsciiBuildDirCheckBox->setChecked(s.warnAgainstNonAsciiBuildDir);
}
FilePath ProjectExplorerSettingsWidget::projectsDirectory() const
@@ -292,14 +494,34 @@ void ProjectExplorerSettingsWidget::updateAppEnvChangesLabel()
// ProjectExplorerSettingsPage
-ProjectExplorerSettingsPage::ProjectExplorerSettingsPage()
+class ProjectExplorerSettingsPage final : public IOptionsPage
+{
+public:
+ ProjectExplorerSettingsPage()
+ {
+ setId(ProjectExplorer::Constants::BUILD_AND_RUN_SETTINGS_PAGE_ID);
+ setDisplayName(Tr::tr("General"));
+ setCategory(ProjectExplorer::Constants::BUILD_AND_RUN_SETTINGS_CATEGORY);
+ setDisplayCategory(Tr::tr("Build & Run"));
+ setCategoryIconPath(":/projectexplorer/images/settingscategory_buildrun.png");
+ setWidgetCreator([] { return new ProjectExplorerSettingsWidget; });
+ }
+};
+
+void setupProjectExplorerSettings()
{
- setId(Constants::BUILD_AND_RUN_SETTINGS_PAGE_ID);
- setDisplayName(Tr::tr("General"));
- setCategory(Constants::BUILD_AND_RUN_SETTINGS_CATEGORY);
- setDisplayCategory(Tr::tr("Build & Run"));
- setCategoryIconPath(":/projectexplorer/images/settingscategory_buildrun.png");
- setWidgetCreator([] { return new ProjectExplorerSettingsWidget; });
+ static ProjectExplorerSettingsPage theProjectExplorerSettingsPage;
+
+ loadProjectExplorerSettings();
}
-} // ProjectExplorer::Internal
+
+} // Internal
+
+const ProjectExplorerSettings &projectExplorerSettings()
+{
+ return Internal::mutableProjectExplorerSettings();
+}
+
+} // ProjectExplorer
+
diff --git a/src/plugins/projectexplorer/projectexplorersettings.h b/src/plugins/projectexplorer/projectexplorersettings.h
index dbec8ea2ae..51970eb290 100644
--- a/src/plugins/projectexplorer/projectexplorersettings.h
+++ b/src/plugins/projectexplorer/projectexplorersettings.h
@@ -3,8 +3,9 @@
#pragma once
+#include "projectexplorer_export.h"
+
#include <coreplugin/coreconstants.h>
-#include <coreplugin/dialogs/ioptionspage.h>
#include <utils/environment.h>
#include <utils/hostosinfo.h>
@@ -20,26 +21,6 @@ enum class StopBeforeBuild { None, SameProject, All, SameBuildDir, SameApp };
class ProjectExplorerSettings
{
public:
- friend bool operator==(const ProjectExplorerSettings &p1, const ProjectExplorerSettings &p2)
- {
- return p1.buildBeforeDeploy == p2.buildBeforeDeploy
- && p1.deployBeforeRun == p2.deployBeforeRun
- && p1.saveBeforeBuild == p2.saveBeforeBuild
- && p1.useJom == p2.useJom
- && p1.prompToStopRunControl == p2.prompToStopRunControl
- && p1.automaticallyCreateRunConfigurations == p2.automaticallyCreateRunConfigurations
- && p1.addLibraryPathsToRunEnv == p2.addLibraryPathsToRunEnv
- && p1.environmentId == p2.environmentId
- && p1.stopBeforeBuild == p2.stopBeforeBuild
- && p1.terminalMode == p2.terminalMode
- && p1.closeSourceFilesWithProject == p2.closeSourceFilesWithProject
- && p1.clearIssuesOnRebuild == p2.clearIssuesOnRebuild
- && p1.abortBuildAllOnError == p2.abortBuildAllOnError
- && p1.appEnvChanges == p2.appEnvChanges
- && p1.warnAgainstNonAsciiBuildDir == p2.warnAgainstNonAsciiBuildDir
- && p1.lowBuildPriority == p2.lowBuildPriority;
- }
-
BuildBeforeRunMode buildBeforeDeploy = BuildBeforeRunMode::WholeProject;
bool deployBeforeRun = true;
bool saveBeforeBuild = false;
@@ -64,8 +45,13 @@ public:
QUuid environmentId;
};
+PROJECTEXPLORER_EXPORT const ProjectExplorerSettings &projectExplorerSettings();
+
namespace Internal {
+void setPromptToStopSettings(bool promptToStop); // FIXME: Remove.
+void setSaveBeforeBuildSettings(bool saveBeforeBuild); // FIXME: Remove.
+
enum class AppOutputPaneMode { FlashOnOutput, PopupOnOutput, PopupOnFirstOutput };
class AppOutputSettings
@@ -79,11 +65,7 @@ public:
int maxCharCount = Core::Constants::DEFAULT_MAX_CHAR_COUNT;
};
-class ProjectExplorerSettingsPage : public Core::IOptionsPage
-{
-public:
- ProjectExplorerSettingsPage();
-};
+void setupProjectExplorerSettings();
} // namespace Internal
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/runconfigurationaspects.cpp b/src/plugins/projectexplorer/runconfigurationaspects.cpp
index 7b6c7f4f5d..c042f081f1 100644
--- a/src/plugins/projectexplorer/runconfigurationaspects.cpp
+++ b/src/plugins/projectexplorer/runconfigurationaspects.cpp
@@ -107,7 +107,7 @@ void TerminalAspect::calculateUseTerminal()
if (m_userSet)
return;
bool useTerminal;
- switch (ProjectExplorerPlugin::projectExplorerSettings().terminalMode) {
+ switch (projectExplorerSettings().terminalMode) {
case TerminalMode::On: useTerminal = true; break;
case TerminalMode::Off: useTerminal = false; break;
default: useTerminal = m_useTerminalHint;
@@ -737,7 +737,7 @@ UseLibraryPathsAspect::UseLibraryPathsAspect(AspectContainer *container)
setLabel(Tr::tr("Add build library search path to LD_LIBRARY_PATH"),
LabelPlacement::AtCheckBox);
}
- setValue(ProjectExplorerPlugin::projectExplorerSettings().addLibraryPathsToRunEnv);
+ setValue(projectExplorerSettings().addLibraryPathsToRunEnv);
}
diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp
index b4d8a776f8..cae9a01d02 100644
--- a/src/plugins/projectexplorer/target.cpp
+++ b/src/plugins/projectexplorer/target.cpp
@@ -722,7 +722,7 @@ void Target::updateDefaultRunConfigurations()
configuredCount -= toRemove.count();
bool removeExistingUnconfigured = false;
- if (ProjectExplorerPlugin::projectExplorerSettings().automaticallyCreateRunConfigurations) {
+ if (projectExplorerSettings().automaticallyCreateRunConfigurations) {
// Create new "automatic" RCs and put them into newConfigured/newUnconfigured
for (const RunConfigurationCreationInfo &item : creators) {
if (item.creationMode == RunConfigurationCreationInfo::ManualCreationOnly)
diff --git a/src/plugins/projectexplorer/userfileaccessor.cpp b/src/plugins/projectexplorer/userfileaccessor.cpp
index a370d80ff6..82e4d0edfb 100644
--- a/src/plugins/projectexplorer/userfileaccessor.cpp
+++ b/src/plugins/projectexplorer/userfileaccessor.cpp
@@ -300,7 +300,7 @@ UserFileAccessor::UserFileAccessor(Project *project)
secondary->setReadOnly();
setSecondaryAccessor(std::move(secondary));
- setSettingsId(ProjectExplorerPlugin::projectExplorerSettings().environmentId.toByteArray());
+ setSettingsId(projectExplorerSettings().environmentId.toByteArray());
// Register Upgraders:
addVersionUpgrader(std::make_unique<UserFileVersion14Upgrader>());
@@ -990,7 +990,7 @@ void ProjectExplorerTest::testUserFileAccessor_prepareToWriteSettings()
QCOMPARE(result.count(), data.count() + 3);
QCOMPARE(result.value("EnvironmentId").toByteArray(),
- ProjectExplorerPlugin::projectExplorerSettings().environmentId.toByteArray());
+ projectExplorerSettings().environmentId.toByteArray());
QCOMPARE(result.value("UserStickyKeys"), QVariant(QStringList({"shared1"})));
QCOMPARE(result.value("Version").toInt(), accessor.currentVersion());
QCOMPARE(result.value("ProjectExplorer.Project.Updater.FileVersion").toInt(), accessor.currentVersion());
@@ -1013,7 +1013,7 @@ void ProjectExplorerTest::testUserFileAccessor_mergeSettings()
Store data;
data.insert("Version", accessor.currentVersion());
- data.insert("EnvironmentId", ProjectExplorerPlugin::projectExplorerSettings().environmentId.toByteArray());
+ data.insert("EnvironmentId", projectExplorerSettings().environmentId.toByteArray());
data.insert("UserStickyKeys", QStringList({"shared1"}));
data.insert("shared1", "bar1");
data.insert("unique1", 1234);
@@ -1025,7 +1025,7 @@ void ProjectExplorerTest::testUserFileAccessor_mergeSettings()
QCOMPARE(result.data.count(), data.count() + 1);
// mergeSettings does not run updateSettings, so no OriginalVersion will be set
QCOMPARE(result.data.value("EnvironmentId").toByteArray(),
- ProjectExplorerPlugin::projectExplorerSettings().environmentId.toByteArray()); // unchanged
+ projectExplorerSettings().environmentId.toByteArray()); // unchanged
QCOMPARE(result.data.value("UserStickyKeys"), QVariant(QStringList({"shared1"}))); // unchanged
QCOMPARE(result.data.value("Version").toInt(), accessor.currentVersion()); // forced
QCOMPARE(result.data.value("shared1"), data.value("shared1")); // from data
@@ -1066,7 +1066,7 @@ void ProjectExplorerTest::testUserFileAccessor_mergeSettingsEmptyShared()
Store data;
data.insert("Version", accessor.currentVersion());
data.insert("OriginalVersion", accessor.currentVersion());
- data.insert("EnvironmentId", ProjectExplorerPlugin::projectExplorerSettings().environmentId.toByteArray());
+ data.insert("EnvironmentId", projectExplorerSettings().environmentId.toByteArray());
data.insert("UserStickyKeys", QStringList({"shared1"}));
data.insert("shared1", "bar1");
data.insert("unique1", 1234);