ProjectExplorer: Don't save defaults to settings

Writes less settings and makes it possible to change defaults in the
future.

Task-number: QTCREATORBUG-24762
Change-Id: I73873b3684827b4fe27cfa5ea2f62a76003f9750
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Eike Ziller
2020-12-14 17:00:53 +01:00
parent 8987996500
commit c898047880
20 changed files with 244 additions and 117 deletions

View File

@@ -75,7 +75,9 @@ static QString settingsPrefix(int position)
//! Flat mode settings
void NavigationWidgetFactory::saveSettings(QSettings *settings, int position, QWidget *widget)
void NavigationWidgetFactory::saveSettings(Utils::QtcSettings *settings,
int position,
QWidget *widget)
{
auto pw = qobject_cast<NavigationWidget *>(widget);
QTC_ASSERT(pw, return);

View File

@@ -41,7 +41,7 @@ public:
Core::NavigationView createWidget() override;
//! \implements Core::INavigationWidgetFactory::saveSettings
void saveSettings(QSettings *settings, int position, QWidget *widget) override;
void saveSettings(Utils::QtcSettings *settings, int position, QWidget *widget) override;
//! \implements Core::INavigationWidgetFactory::restoreSettings
void restoreSettings(QSettings *settings, int position, QWidget *widget) override;

View File

@@ -156,7 +156,9 @@ QKeySequence INavigationWidgetFactory::activationSequence() const
\sa INavigationWidgetFactory::restoreSettings()
*/
void INavigationWidgetFactory::saveSettings(QSettings * /* settings */, int /* position */, QWidget * /* widget */)
void INavigationWidgetFactory::saveSettings(Utils::QtcSettings * /* settings */,
int /* position */,
QWidget * /* widget */)
{
}

View File

@@ -39,6 +39,10 @@ class QToolButton;
class QWidget;
QT_END_NAMESPACE
namespace Utils {
class QtcSettings;
}
namespace Core {
struct NavigationView
@@ -75,7 +79,7 @@ public:
// Similar to how IView
virtual NavigationView createWidget() = 0;
virtual void saveSettings(QSettings *settings, int position, QWidget *widget);
virtual void saveSettings(Utils::QtcSettings *settings, int position, QWidget *widget);
virtual void restoreSettings(QSettings *settings, int position, QWidget *widget);
private:

View File

@@ -170,7 +170,7 @@ void NavigationSubWidget::saveSettings()
if (!m_navigationWidget || !factory())
return;
QSettings *settings = Core::ICore::settings();
QtcSettings *settings = Core::ICore::settings();
settings->beginGroup(m_parentWidget->settingsGroup());
factory()->saveSettings(settings, position(), m_navigationWidget);
settings->endGroup();

View File

@@ -48,6 +48,7 @@
#include <utils/fileutils.h>
#include <utils/navigationtreeview.h>
#include <utils/qtcassert.h>
#include <utils/qtcsettings.h>
#include <utils/utilsicons.h>
#include <QCoreApplication>
@@ -546,7 +547,7 @@ static CppIncludeHierarchyWidget *hierarchyWidget(QWidget *widget)
return hierarchyWidget;
}
void CppIncludeHierarchyFactory::saveSettings(QSettings *settings, int position, QWidget *widget)
void CppIncludeHierarchyFactory::saveSettings(QtcSettings *settings, int position, QWidget *widget)
{
hierarchyWidget(widget)->saveSettings(settings, position);
}

View File

@@ -72,7 +72,7 @@ public:
CppIncludeHierarchyFactory();
Core::NavigationView createWidget() override;
void saveSettings(QSettings *settings, int position, QWidget *widget) override;
void saveSettings(Utils::QtcSettings *settings, int position, QWidget *widget) override;
void restoreSettings(QSettings *settings, int position, QWidget *widget) override;
};

View File

@@ -510,15 +510,27 @@ void AppOutputPane::setSettings(const AppOutputSettings &settings)
updateFromSettings();
}
const AppOutputPaneMode kRunOutputModeDefault = AppOutputPaneMode::PopupOnFirstOutput;
const AppOutputPaneMode kDebugOutputModeDefault = AppOutputPaneMode::FlashOnOutput;
const bool kCleanOldOutputDefault = false;
const bool kMergeChannelsDefault = false;
const bool kWrapOutputDefault = true;
void AppOutputPane::storeSettings() const
{
QSettings * const s = Core::ICore::settings();
s->setValue(POP_UP_FOR_RUN_OUTPUT_KEY, int(m_settings.runOutputMode));
s->setValue(POP_UP_FOR_DEBUG_OUTPUT_KEY, int(m_settings.debugOutputMode));
s->setValue(CLEAN_OLD_OUTPUT_KEY, m_settings.cleanOldOutput);
s->setValue(MERGE_CHANNELS_KEY, m_settings.mergeChannels);
s->setValue(WRAP_OUTPUT_KEY, m_settings.wrapOutput);
s->setValue(MAX_LINES_KEY, m_settings.maxCharCount / 100);
Utils::QtcSettings *const s = Core::ICore::settings();
s->setValueWithDefault(POP_UP_FOR_RUN_OUTPUT_KEY,
int(m_settings.runOutputMode),
int(kRunOutputModeDefault));
s->setValueWithDefault(POP_UP_FOR_DEBUG_OUTPUT_KEY,
int(m_settings.debugOutputMode),
int(kDebugOutputModeDefault));
s->setValueWithDefault(CLEAN_OLD_OUTPUT_KEY, m_settings.cleanOldOutput, kCleanOldOutputDefault);
s->setValueWithDefault(MERGE_CHANNELS_KEY, m_settings.mergeChannels, kMergeChannelsDefault);
s->setValueWithDefault(WRAP_OUTPUT_KEY, m_settings.wrapOutput, kWrapOutputDefault);
s->setValueWithDefault(MAX_LINES_KEY,
m_settings.maxCharCount / 100,
Core::Constants::DEFAULT_MAX_CHAR_COUNT);
}
void AppOutputPane::loadSettings()
@@ -527,13 +539,12 @@ void AppOutputPane::loadSettings()
const auto modeFromSettings = [s](const QString key, AppOutputPaneMode defaultValue) {
return static_cast<AppOutputPaneMode>(s->value(key, int(defaultValue)).toInt());
};
m_settings.runOutputMode = modeFromSettings(POP_UP_FOR_RUN_OUTPUT_KEY,
AppOutputPaneMode::PopupOnFirstOutput);
m_settings.runOutputMode = modeFromSettings(POP_UP_FOR_RUN_OUTPUT_KEY, kRunOutputModeDefault);
m_settings.debugOutputMode = modeFromSettings(POP_UP_FOR_DEBUG_OUTPUT_KEY,
AppOutputPaneMode::FlashOnOutput);
m_settings.cleanOldOutput = s->value(CLEAN_OLD_OUTPUT_KEY, false).toBool();
m_settings.mergeChannels = s->value(MERGE_CHANNELS_KEY, false).toBool();
m_settings.wrapOutput = s->value(WRAP_OUTPUT_KEY, true).toBool();
kDebugOutputModeDefault);
m_settings.cleanOldOutput = s->value(CLEAN_OLD_OUTPUT_KEY, kCleanOldOutputDefault).toBool();
m_settings.mergeChannels = s->value(MERGE_CHANNELS_KEY, kMergeChannelsDefault).toBool();
m_settings.wrapOutput = s->value(WRAP_OUTPUT_KEY, kWrapOutputDefault).toBool();
m_settings.maxCharCount = s->value(MAX_LINES_KEY,
Core::Constants::DEFAULT_MAX_CHAR_COUNT).toInt() * 100;
}

View File

@@ -305,21 +305,26 @@ void CompileOutputWindow::updateFilter()
filterUsesRegexp(), filterIsInverted());
}
const bool kPopUpDefault = false;
const bool kWrapOutputDefault = true;
void CompileOutputWindow::loadSettings()
{
QSettings * const s = Core::ICore::settings();
m_settings.popUp = s->value(POP_UP_KEY, false).toBool();
m_settings.wrapOutput = s->value(WRAP_OUTPUT_KEY, true).toBool();
m_settings.popUp = s->value(POP_UP_KEY, kPopUpDefault).toBool();
m_settings.wrapOutput = s->value(WRAP_OUTPUT_KEY, kWrapOutputDefault).toBool();
m_settings.maxCharCount = s->value(MAX_LINES_KEY,
Core::Constants::DEFAULT_MAX_CHAR_COUNT).toInt() * 100;
}
void CompileOutputWindow::storeSettings() const
{
QSettings * const s = Core::ICore::settings();
s->setValue(POP_UP_KEY, m_settings.popUp);
s->setValue(WRAP_OUTPUT_KEY, m_settings.wrapOutput);
s->setValue(MAX_LINES_KEY, m_settings.maxCharCount / 100);
Utils::QtcSettings *const s = Core::ICore::settings();
s->setValueWithDefault(POP_UP_KEY, m_settings.popUp, kPopUpDefault);
s->setValueWithDefault(WRAP_OUTPUT_KEY, m_settings.wrapOutput, kWrapOutputDefault);
s->setValueWithDefault(MAX_LINES_KEY,
m_settings.maxCharCount / 100,
Core::Constants::DEFAULT_MAX_CHAR_COUNT);
}
class CompileOutputSettingsWidget : public Core::IOptionsPageWidget

View File

@@ -219,7 +219,7 @@ void DeviceSettingsWidget::updateDeviceFromUi()
void DeviceSettingsWidget::saveSettings()
{
ICore::settings()->setValue(QLatin1String(LastDeviceIndexKey), currentIndex());
ICore::settings()->setValueWithDefault(LastDeviceIndexKey, currentIndex(), 0);
DeviceManager::replaceInstance();
}

View File

@@ -903,15 +903,28 @@ Core::NavigationView FolderNavigationWidgetFactory::createWidget()
return n;
}
void FolderNavigationWidgetFactory::saveSettings(QSettings *settings, int position, QWidget *widget)
const bool kHiddenFilesDefault = false;
const bool kAutoSyncDefault = true;
const bool kShowBreadCrumbsDefault = true;
const bool kRootAutoSyncDefault = true;
void FolderNavigationWidgetFactory::saveSettings(Utils::QtcSettings *settings,
int position,
QWidget *widget)
{
auto fnw = qobject_cast<FolderNavigationWidget *>(widget);
QTC_ASSERT(fnw, return);
const QString base = kSettingsBase + QString::number(position);
settings->setValue(base + kHiddenFilesKey, fnw->hiddenFilesFilter());
settings->setValue(base + kSyncKey, fnw->autoSynchronization());
settings->setValue(base + kShowBreadCrumbs, fnw->isShowingBreadCrumbs());
settings->setValue(base + kSyncRootWithEditor, fnw->rootAutoSynchronization());
settings->setValueWithDefault(base + kHiddenFilesKey,
fnw->hiddenFilesFilter(),
kHiddenFilesDefault);
settings->setValueWithDefault(base + kSyncKey, fnw->autoSynchronization(), kAutoSyncDefault);
settings->setValueWithDefault(base + kShowBreadCrumbs,
fnw->isShowingBreadCrumbs(),
kShowBreadCrumbsDefault);
settings->setValueWithDefault(base + kSyncRootWithEditor,
fnw->rootAutoSynchronization(),
kRootAutoSyncDefault);
}
void FolderNavigationWidgetFactory::restoreSettings(QSettings *settings, int position, QWidget *widget)
@@ -919,10 +932,12 @@ void FolderNavigationWidgetFactory::restoreSettings(QSettings *settings, int pos
auto fnw = qobject_cast<FolderNavigationWidget *>(widget);
QTC_ASSERT(fnw, return);
const QString base = kSettingsBase + QString::number(position);
fnw->setHiddenFilesFilter(settings->value(base + kHiddenFilesKey, false).toBool());
fnw->setAutoSynchronization(settings->value(base + kSyncKey, true).toBool());
fnw->setShowBreadCrumbs(settings->value(base + kShowBreadCrumbs, true).toBool());
fnw->setRootAutoSynchronization(settings->value(base + kSyncRootWithEditor, true).toBool());
fnw->setHiddenFilesFilter(settings->value(base + kHiddenFilesKey, kHiddenFilesDefault).toBool());
fnw->setAutoSynchronization(settings->value(base + kSyncKey, kAutoSyncDefault).toBool());
fnw->setShowBreadCrumbs(
settings->value(base + kShowBreadCrumbs, kShowBreadCrumbsDefault).toBool());
fnw->setRootAutoSynchronization(
settings->value(base + kSyncRootWithEditor, kRootAutoSyncDefault).toBool());
}
void FolderNavigationWidgetFactory::insertRootDirectory(const RootDirectory &directory)

View File

@@ -39,6 +39,7 @@ class IEditor;
namespace Utils {
class NavigationTreeView;
class FileCrumbLabel;
class QtcSettings;
}
QT_BEGIN_NAMESPACE
@@ -70,7 +71,7 @@ public:
FolderNavigationWidgetFactory();
Core::NavigationView createWidget() override;
void saveSettings(QSettings *settings, int position, QWidget *widget) override;
void saveSettings(Utils::QtcSettings *settings, int position, QWidget *widget) override;
void restoreSettings(QSettings *settings, int position, QWidget *widget) override;
static void insertRootDirectory(const RootDirectory &directory);

View File

@@ -92,7 +92,7 @@ void KitChooser::onActivated()
Id id = Id::fromSetting(m_chooser->currentData());
if (m_hasStartupKit && m_chooser->currentIndex() == 0)
id = Id(); // Special value to indicate startup kit.
ICore::settings()->setValue(lastKitKey, id.toSetting());
ICore::settings()->setValueWithDefault(lastKitKey, id.toSetting(), Id().toSetting());
emit activated();
}

View File

@@ -262,6 +262,8 @@ const char DEFAULT_BUILD_DIRECTORY_TEMPLATE[] = "../%{JS: Util.asciify(\"build-%
const char DEFAULT_BUILD_DIRECTORY_TEMPLATE_KEY_OLD[] = "Directories/BuildDirectory.Template"; // TODO: Remove in ~4.16
const char DEFAULT_BUILD_DIRECTORY_TEMPLATE_KEY[] = "Directories/BuildDirectory.TemplateV2";
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";
@@ -1481,10 +1483,9 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
});
QSettings *s = ICore::settings();
const QStringList fileNames =
s->value(QLatin1String("ProjectExplorer/RecentProjects/FileNames")).toStringList();
const QStringList displayNames =
s->value(QLatin1String("ProjectExplorer/RecentProjects/DisplayNames")).toStringList();
const QStringList fileNames = s->value(Constants::RECENTPROJECTS_FILE_NAMES_KEY).toStringList();
const QStringList displayNames = s->value(Constants::RECENTPROJECTS_DISPLAY_NAMES_KEY)
.toStringList();
if (fileNames.size() == displayNames.size()) {
for (int i = 0; i < fileNames.size(); ++i) {
dd->m_recentProjects.append(qMakePair(fileNames.at(i), displayNames.at(i)));
@@ -1502,38 +1503,59 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
= static_cast<BuildBeforeRunMode>(buildBeforeDeploy.toInt());
}
dd->m_projectExplorerSettings.deployBeforeRun =
s->value(Constants::DEPLOY_BEFORE_RUN_SETTINGS_KEY, true).toBool();
dd->m_projectExplorerSettings.saveBeforeBuild =
s->value(Constants::SAVE_BEFORE_BUILD_SETTINGS_KEY, false).toBool();
dd->m_projectExplorerSettings.useJom = s->value(Constants::USE_JOM_SETTINGS_KEY, true).toBool();
dd->m_projectExplorerSettings.autorestoreLastSession =
s->value(Constants::AUTO_RESTORE_SESSION_SETTINGS_KEY, false).toBool();
dd->m_projectExplorerSettings.addLibraryPathsToRunEnv =
s->value(Constants::ADD_LIBRARY_PATHS_TO_RUN_ENV_SETTINGS_KEY, true).toBool();
dd->m_projectExplorerSettings.prompToStopRunControl =
s->value(Constants::PROMPT_TO_STOP_RUN_CONTROL_SETTINGS_KEY, false).toBool();
dd->m_projectExplorerSettings.automaticallyCreateRunConfigurations =
s->value(Constants::AUTO_CREATE_RUN_CONFIGS_SETTINGS_KEY, true).toBool();
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.autorestoreLastSession
= s->value(Constants::AUTO_RESTORE_SESSION_SETTINGS_KEY,
defaultSettings.autorestoreLastSession)
.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,
Utils::HostOsInfo::isWindowsHost() ? 1 : 0).toInt();
int(defaultSettings.stopBeforeBuild))
.toInt();
if (tmp < 0 || tmp > int(StopBeforeBuild::SameApp))
tmp = Utils::HostOsInfo::isWindowsHost() ? 1 : 0;
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(TerminalMode::Off)).toInt());
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, true).toBool();
= 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, true).toBool();
= 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, true).toBool();
= 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, false).toBool();
= s->value(Constants::LOW_BUILD_PRIORITY_SETTINGS_KEY, defaultSettings.lowBuildPriority)
.toBool();
dd->m_buildPropertiesSettings.buildDirectoryTemplateOld
= s->value(Constants::DEFAULT_BUILD_DIRECTORY_TEMPLATE_KEY_OLD).toString();
@@ -2119,7 +2141,7 @@ void ProjectExplorerPluginPrivate::savePersistentSettings()
SessionManager::save();
}
QSettings *s = ICore::settings();
QtcSettings *s = ICore::settings();
if (SessionManager::isDefaultVirgin()) {
s->remove(Constants::STARTUPSESSION_KEY);
} else {
@@ -2137,45 +2159,79 @@ void ProjectExplorerPluginPrivate::savePersistentSettings()
displayNames << (*it).second;
}
s->setValue(QLatin1String("ProjectExplorer/RecentProjects/FileNames"), fileNames);
s->setValue(QLatin1String("ProjectExplorer/RecentProjects/DisplayNames"), displayNames);
s->setValueWithDefault(Constants::RECENTPROJECTS_FILE_NAMES_KEY, fileNames);
s->setValueWithDefault(Constants::RECENTPROJECTS_DISPLAY_NAMES_KEY, displayNames);
s->setValue(Constants::BUILD_BEFORE_DEPLOY_SETTINGS_KEY, int(dd->m_projectExplorerSettings.buildBeforeDeploy));
s->setValue(Constants::DEPLOY_BEFORE_RUN_SETTINGS_KEY, dd->m_projectExplorerSettings.deployBeforeRun);
s->setValue(Constants::SAVE_BEFORE_BUILD_SETTINGS_KEY, dd->m_projectExplorerSettings.saveBeforeBuild);
s->setValue(Constants::USE_JOM_SETTINGS_KEY, dd->m_projectExplorerSettings.useJom);
s->setValue(Constants::AUTO_RESTORE_SESSION_SETTINGS_KEY, dd->m_projectExplorerSettings.autorestoreLastSession);
s->setValue(Constants::ADD_LIBRARY_PATHS_TO_RUN_ENV_SETTINGS_KEY, dd->m_projectExplorerSettings.addLibraryPathsToRunEnv);
s->setValue(Constants::PROMPT_TO_STOP_RUN_CONTROL_SETTINGS_KEY, dd->m_projectExplorerSettings.prompToStopRunControl);
s->setValue(Constants::TERMINAL_MODE_SETTINGS_KEY,
int(dd->m_projectExplorerSettings.terminalMode));
s->setValue(Constants::CLOSE_FILES_WITH_PROJECT_SETTINGS_KEY,
dd->m_projectExplorerSettings.closeSourceFilesWithProject);
s->setValue(Constants::CLEAR_ISSUES_ON_REBUILD_SETTINGS_KEY,
dd->m_projectExplorerSettings.clearIssuesOnRebuild);
s->setValue(Constants::ABORT_BUILD_ALL_ON_ERROR_SETTINGS_KEY,
dd->m_projectExplorerSettings.abortBuildAllOnError);
s->setValue(Constants::LOW_BUILD_PRIORITY_SETTINGS_KEY,
dd->m_projectExplorerSettings.lowBuildPriority);
s->setValue(Constants::AUTO_CREATE_RUN_CONFIGS_SETTINGS_KEY,
dd->m_projectExplorerSettings.automaticallyCreateRunConfigurations);
s->setValue(Constants::ENVIRONMENT_ID_SETTINGS_KEY, dd->m_projectExplorerSettings.environmentId.toByteArray());
s->setValue(Constants::STOP_BEFORE_BUILD_SETTINGS_KEY, int(dd->m_projectExplorerSettings.stopBeforeBuild));
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::AUTO_RESTORE_SESSION_SETTINGS_KEY,
dd->m_projectExplorerSettings.autorestoreLastSession,
defaultSettings.autorestoreLastSession);
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::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));
// Store this in the Core directory scope for backward compatibility!
s->setValue(Constants::DEFAULT_BUILD_DIRECTORY_TEMPLATE_KEY_OLD,
dd->m_buildPropertiesSettings.buildDirectoryTemplateOld);
s->setValue(Constants::DEFAULT_BUILD_DIRECTORY_TEMPLATE_KEY,
dd->m_buildPropertiesSettings.buildDirectoryTemplate);
if (dd->m_buildPropertiesSettings.buildDirectoryTemplate
== Constants::DEFAULT_BUILD_DIRECTORY_TEMPLATE) {
s->remove(Constants::DEFAULT_BUILD_DIRECTORY_TEMPLATE_KEY_OLD);
s->remove(Constants::DEFAULT_BUILD_DIRECTORY_TEMPLATE_KEY);
} else {
s->setValue(Constants::DEFAULT_BUILD_DIRECTORY_TEMPLATE_KEY_OLD,
dd->m_buildPropertiesSettings.buildDirectoryTemplateOld);
s->setValue(Constants::DEFAULT_BUILD_DIRECTORY_TEMPLATE_KEY,
dd->m_buildPropertiesSettings.buildDirectoryTemplate);
}
s->setValue(Constants::SEPARATE_DEBUG_INFO_SETTINGS_KEY,
dd->m_buildPropertiesSettings.separateDebugInfo.toVariant());
s->setValue(Constants::QML_DEBUGGING_SETTINGS_KEY,
dd->m_buildPropertiesSettings.qmlDebugging.toVariant());
s->setValue(Constants::QT_QUICK_COMPILER_SETTINGS_KEY,
dd->m_buildPropertiesSettings.qtQuickCompiler.toVariant());
s->setValueWithDefault(Constants::SEPARATE_DEBUG_INFO_SETTINGS_KEY,
dd->m_buildPropertiesSettings.separateDebugInfo.toVariant(),
TriState::Default.toVariant());
s->setValueWithDefault(Constants::QML_DEBUGGING_SETTINGS_KEY,
dd->m_buildPropertiesSettings.qmlDebugging.toVariant(),
TriState::Default.toVariant());
s->setValueWithDefault(Constants::QT_QUICK_COMPILER_SETTINGS_KEY,
dd->m_buildPropertiesSettings.qtQuickCompiler.toVariant(),
TriState::Default.toVariant());
s->setValue(Constants::CUSTOM_PARSER_COUNT_KEY, dd->m_customParsers.count());
s->setValueWithDefault(Constants::CUSTOM_PARSER_COUNT_KEY, dd->m_customParsers.count(), 0);
for (int i = 0; i < dd->m_customParsers.count(); ++i) {
s->setValue(Constants::CUSTOM_PARSER_PREFIX_KEY + QString::number(i),
dd->m_customParsers.at(i).toMap());

View File

@@ -25,8 +25,10 @@
#pragma once
#include "projectexplorerconstants.h"
#include <coreplugin/coreconstants.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <utils/hostosinfo.h>
#include <QUuid>
@@ -53,7 +55,9 @@ public:
bool clearIssuesOnRebuild = true;
bool abortBuildAllOnError = true;
bool lowBuildPriority = false;
StopBeforeBuild stopBeforeBuild = StopBeforeBuild::None;
StopBeforeBuild stopBeforeBuild = Utils::HostOsInfo::isWindowsHost()
? StopBeforeBuild::SameProject
: StopBeforeBuild::None;
TerminalMode terminalMode = TerminalMode::Off;
// Add a UUid which is used to identify the development environment.

View File

@@ -635,16 +635,32 @@ NavigationView ProjectTreeWidgetFactory::createWidget()
return n;
}
void ProjectTreeWidgetFactory::saveSettings(QSettings *settings, int position, QWidget *widget)
const bool kProjectFilterDefault = false;
const bool kHideGeneratedFilesDefault = true;
const bool kHideDisabledFilesDefault = false;
const bool kTrimEmptyDirsDefault = true;
const bool kSyncDefault = true;
void ProjectTreeWidgetFactory::saveSettings(QtcSettings *settings, int position, QWidget *widget)
{
auto ptw = qobject_cast<ProjectTreeWidget *>(widget);
Q_ASSERT(ptw);
const QString baseKey = QLatin1String("ProjectTreeWidget.") + QString::number(position);
settings->setValue(baseKey + QLatin1String(".ProjectFilter"), ptw->projectFilter());
settings->setValue(baseKey + QLatin1String(".GeneratedFilter"), ptw->generatedFilesFilter());
settings->setValue(baseKey + ".DisabledFilesFilter", ptw->disabledFilesFilter());
settings->setValue(baseKey + QLatin1String(".TrimEmptyDirsFilter"), ptw->trimEmptyDirectoriesFilter());
settings->setValue(baseKey + QLatin1String(".SyncWithEditor"), ptw->autoSynchronization());
settings->setValueWithDefault(baseKey + ".ProjectFilter",
ptw->projectFilter(),
kProjectFilterDefault);
settings->setValueWithDefault(baseKey + ".GeneratedFilter",
ptw->generatedFilesFilter(),
kHideGeneratedFilesDefault);
settings->setValueWithDefault(baseKey + ".DisabledFilesFilter",
ptw->disabledFilesFilter(),
kHideDisabledFilesDefault);
settings->setValueWithDefault(baseKey + ".TrimEmptyDirsFilter",
ptw->trimEmptyDirectoriesFilter(),
kTrimEmptyDirsDefault);
settings->setValueWithDefault(baseKey + ".SyncWithEditor",
ptw->autoSynchronization(),
kSyncDefault);
}
void ProjectTreeWidgetFactory::restoreSettings(QSettings *settings, int position, QWidget *widget)
@@ -652,9 +668,16 @@ void ProjectTreeWidgetFactory::restoreSettings(QSettings *settings, int position
auto ptw = qobject_cast<ProjectTreeWidget *>(widget);
Q_ASSERT(ptw);
const QString baseKey = QLatin1String("ProjectTreeWidget.") + QString::number(position);
ptw->setProjectFilter(settings->value(baseKey + QLatin1String(".ProjectFilter"), false).toBool());
ptw->setGeneratedFilesFilter(settings->value(baseKey + QLatin1String(".GeneratedFilter"), true).toBool());
ptw->setDisabledFilesFilter(settings->value(baseKey + ".DisabledFilesFilter", false).toBool());
ptw->setTrimEmptyDirectories(settings->value(baseKey + QLatin1String(".TrimEmptyDirsFilter"), true).toBool());
ptw->setAutoSynchronization(settings->value(baseKey + QLatin1String(".SyncWithEditor"), true).toBool());
ptw->setProjectFilter(
settings->value(baseKey + QLatin1String(".ProjectFilter"), kProjectFilterDefault).toBool());
ptw->setGeneratedFilesFilter(
settings->value(baseKey + QLatin1String(".GeneratedFilter"), kHideGeneratedFilesDefault)
.toBool());
ptw->setDisabledFilesFilter(
settings->value(baseKey + ".DisabledFilesFilter", kHideDisabledFilesDefault).toBool());
ptw->setTrimEmptyDirectories(
settings->value(baseKey + QLatin1String(".TrimEmptyDirsFilter"), kTrimEmptyDirsDefault)
.toBool());
ptw->setAutoSynchronization(
settings->value(baseKey + QLatin1String(".SyncWithEditor"), kSyncDefault).toBool());
}

View File

@@ -114,7 +114,7 @@ public:
Core::NavigationView createWidget() override;
void restoreSettings(QSettings *settings, int position, QWidget *widget) override;
void saveSettings(QSettings *settings, int position, QWidget *widget) override;
void saveSettings(Utils::QtcSettings *settings, int position, QWidget *widget) override;
};
} // namespace Internal

View File

@@ -105,7 +105,8 @@ ToolChainManager::ToolChainManager(QObject *parent) :
connect(this, &ToolChainManager::toolChainUpdated, this, &ToolChainManager::toolChainsChanged);
QSettings * const s = Core::ICore::settings();
d->m_detectionSettings.detectX64AsX32 = s->value(DETECT_X64_AS_X32_KEY, false).toBool();
d->m_detectionSettings.detectX64AsX32
= s->value(DETECT_X64_AS_X32_KEY, ToolchainDetectionSettings().detectX64AsX32).toBool();
}
ToolChainManager::~ToolChainManager()
@@ -137,8 +138,10 @@ void ToolChainManager::saveToolChains()
QTC_ASSERT(d->m_accessor, return);
d->m_accessor->saveToolChains(d->m_toolChains, Core::ICore::dialogParent());
QSettings * const s = Core::ICore::settings();
s->setValue(DETECT_X64_AS_X32_KEY, d->m_detectionSettings.detectX64AsX32);
QtcSettings *const s = Core::ICore::settings();
s->setValueWithDefault(DETECT_X64_AS_X32_KEY,
d->m_detectionSettings.detectX64AsX32,
ToolchainDetectionSettings().detectX64AsX32);
}
QList<ToolChain *> ToolChainManager::toolChains(const ToolChain::Predicate &predicate)

View File

@@ -250,7 +250,7 @@ Core::NavigationView OutlineFactory::createWidget()
return n;
}
void OutlineFactory::saveSettings(QSettings *settings, int position, QWidget *widget)
void OutlineFactory::saveSettings(Utils::QtcSettings *settings, int position, QWidget *widget)
{
auto widgetStack = qobject_cast<OutlineWidgetStack *>(widget);
Q_ASSERT(widgetStack);

View File

@@ -79,7 +79,7 @@ public:
// from INavigationWidgetFactory
Core::NavigationView createWidget() override;
void saveSettings(QSettings *settings, int position, QWidget *widget) override;
void saveSettings(Utils::QtcSettings *settings, int position, QWidget *widget) override;
void restoreSettings(QSettings *settings, int position, QWidget *widget) override;
signals: