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 //! 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); auto pw = qobject_cast<NavigationWidget *>(widget);
QTC_ASSERT(pw, return); QTC_ASSERT(pw, return);

View File

@@ -41,7 +41,7 @@ public:
Core::NavigationView createWidget() override; Core::NavigationView createWidget() override;
//! \implements Core::INavigationWidgetFactory::saveSettings //! \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 //! \implements Core::INavigationWidgetFactory::restoreSettings
void restoreSettings(QSettings *settings, int position, QWidget *widget) override; void restoreSettings(QSettings *settings, int position, QWidget *widget) override;

View File

@@ -156,7 +156,9 @@ QKeySequence INavigationWidgetFactory::activationSequence() const
\sa INavigationWidgetFactory::restoreSettings() \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; class QWidget;
QT_END_NAMESPACE QT_END_NAMESPACE
namespace Utils {
class QtcSettings;
}
namespace Core { namespace Core {
struct NavigationView struct NavigationView
@@ -75,7 +79,7 @@ public:
// Similar to how IView // Similar to how IView
virtual NavigationView createWidget() = 0; 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); virtual void restoreSettings(QSettings *settings, int position, QWidget *widget);
private: private:

View File

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

View File

@@ -48,6 +48,7 @@
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/navigationtreeview.h> #include <utils/navigationtreeview.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/qtcsettings.h>
#include <utils/utilsicons.h> #include <utils/utilsicons.h>
#include <QCoreApplication> #include <QCoreApplication>
@@ -546,7 +547,7 @@ static CppIncludeHierarchyWidget *hierarchyWidget(QWidget *widget)
return hierarchyWidget; 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); hierarchyWidget(widget)->saveSettings(settings, position);
} }

View File

@@ -72,7 +72,7 @@ public:
CppIncludeHierarchyFactory(); CppIncludeHierarchyFactory();
Core::NavigationView createWidget() override; 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; void restoreSettings(QSettings *settings, int position, QWidget *widget) override;
}; };

View File

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

View File

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

View File

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

View File

@@ -903,15 +903,28 @@ Core::NavigationView FolderNavigationWidgetFactory::createWidget()
return n; 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); auto fnw = qobject_cast<FolderNavigationWidget *>(widget);
QTC_ASSERT(fnw, return); QTC_ASSERT(fnw, return);
const QString base = kSettingsBase + QString::number(position); const QString base = kSettingsBase + QString::number(position);
settings->setValue(base + kHiddenFilesKey, fnw->hiddenFilesFilter()); settings->setValueWithDefault(base + kHiddenFilesKey,
settings->setValue(base + kSyncKey, fnw->autoSynchronization()); fnw->hiddenFilesFilter(),
settings->setValue(base + kShowBreadCrumbs, fnw->isShowingBreadCrumbs()); kHiddenFilesDefault);
settings->setValue(base + kSyncRootWithEditor, fnw->rootAutoSynchronization()); 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) 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); auto fnw = qobject_cast<FolderNavigationWidget *>(widget);
QTC_ASSERT(fnw, return); QTC_ASSERT(fnw, return);
const QString base = kSettingsBase + QString::number(position); const QString base = kSettingsBase + QString::number(position);
fnw->setHiddenFilesFilter(settings->value(base + kHiddenFilesKey, false).toBool()); fnw->setHiddenFilesFilter(settings->value(base + kHiddenFilesKey, kHiddenFilesDefault).toBool());
fnw->setAutoSynchronization(settings->value(base + kSyncKey, true).toBool()); fnw->setAutoSynchronization(settings->value(base + kSyncKey, kAutoSyncDefault).toBool());
fnw->setShowBreadCrumbs(settings->value(base + kShowBreadCrumbs, true).toBool()); fnw->setShowBreadCrumbs(
fnw->setRootAutoSynchronization(settings->value(base + kSyncRootWithEditor, true).toBool()); settings->value(base + kShowBreadCrumbs, kShowBreadCrumbsDefault).toBool());
fnw->setRootAutoSynchronization(
settings->value(base + kSyncRootWithEditor, kRootAutoSyncDefault).toBool());
} }
void FolderNavigationWidgetFactory::insertRootDirectory(const RootDirectory &directory) void FolderNavigationWidgetFactory::insertRootDirectory(const RootDirectory &directory)

View File

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

View File

@@ -92,7 +92,7 @@ void KitChooser::onActivated()
Id id = Id::fromSetting(m_chooser->currentData()); Id id = Id::fromSetting(m_chooser->currentData());
if (m_hasStartupKit && m_chooser->currentIndex() == 0) if (m_hasStartupKit && m_chooser->currentIndex() == 0)
id = Id(); // Special value to indicate startup kit. id = Id(); // Special value to indicate startup kit.
ICore::settings()->setValue(lastKitKey, id.toSetting()); ICore::settings()->setValueWithDefault(lastKitKey, id.toSetting(), Id().toSetting());
emit activated(); 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_OLD[] = "Directories/BuildDirectory.Template"; // TODO: Remove in ~4.16
const char DEFAULT_BUILD_DIRECTORY_TEMPLATE_KEY[] = "Directories/BuildDirectory.TemplateV2"; 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 BUILD_BEFORE_DEPLOY_SETTINGS_KEY[] = "ProjectExplorer/Settings/BuildBeforeDeploy";
const char DEPLOY_BEFORE_RUN_SETTINGS_KEY[] = "ProjectExplorer/Settings/DeployBeforeRun"; const char DEPLOY_BEFORE_RUN_SETTINGS_KEY[] = "ProjectExplorer/Settings/DeployBeforeRun";
const char SAVE_BEFORE_BUILD_SETTINGS_KEY[] = "ProjectExplorer/Settings/SaveBeforeBuild"; 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(); QSettings *s = ICore::settings();
const QStringList fileNames = const QStringList fileNames = s->value(Constants::RECENTPROJECTS_FILE_NAMES_KEY).toStringList();
s->value(QLatin1String("ProjectExplorer/RecentProjects/FileNames")).toStringList(); const QStringList displayNames = s->value(Constants::RECENTPROJECTS_DISPLAY_NAMES_KEY)
const QStringList displayNames = .toStringList();
s->value(QLatin1String("ProjectExplorer/RecentProjects/DisplayNames")).toStringList();
if (fileNames.size() == displayNames.size()) { if (fileNames.size() == displayNames.size()) {
for (int i = 0; i < fileNames.size(); ++i) { for (int i = 0; i < fileNames.size(); ++i) {
dd->m_recentProjects.append(qMakePair(fileNames.at(i), displayNames.at(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()); = static_cast<BuildBeforeRunMode>(buildBeforeDeploy.toInt());
} }
dd->m_projectExplorerSettings.deployBeforeRun = static const ProjectExplorerSettings defaultSettings;
s->value(Constants::DEPLOY_BEFORE_RUN_SETTINGS_KEY, true).toBool();
dd->m_projectExplorerSettings.saveBeforeBuild = dd->m_projectExplorerSettings.deployBeforeRun
s->value(Constants::SAVE_BEFORE_BUILD_SETTINGS_KEY, false).toBool(); = s->value(Constants::DEPLOY_BEFORE_RUN_SETTINGS_KEY, defaultSettings.deployBeforeRun)
dd->m_projectExplorerSettings.useJom = s->value(Constants::USE_JOM_SETTINGS_KEY, true).toBool(); .toBool();
dd->m_projectExplorerSettings.autorestoreLastSession = dd->m_projectExplorerSettings.saveBeforeBuild
s->value(Constants::AUTO_RESTORE_SESSION_SETTINGS_KEY, false).toBool(); = s->value(Constants::SAVE_BEFORE_BUILD_SETTINGS_KEY, defaultSettings.saveBeforeBuild)
dd->m_projectExplorerSettings.addLibraryPathsToRunEnv = .toBool();
s->value(Constants::ADD_LIBRARY_PATHS_TO_RUN_ENV_SETTINGS_KEY, true).toBool(); dd->m_projectExplorerSettings.useJom
dd->m_projectExplorerSettings.prompToStopRunControl = = s->value(Constants::USE_JOM_SETTINGS_KEY, defaultSettings.useJom).toBool();
s->value(Constants::PROMPT_TO_STOP_RUN_CONTROL_SETTINGS_KEY, false).toBool(); dd->m_projectExplorerSettings.autorestoreLastSession
dd->m_projectExplorerSettings.automaticallyCreateRunConfigurations = = s->value(Constants::AUTO_RESTORE_SESSION_SETTINGS_KEY,
s->value(Constants::AUTO_CREATE_RUN_CONFIGS_SETTINGS_KEY, true).toBool(); 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 = dd->m_projectExplorerSettings.environmentId =
QUuid(s->value(Constants::ENVIRONMENT_ID_SETTINGS_KEY).toByteArray()); QUuid(s->value(Constants::ENVIRONMENT_ID_SETTINGS_KEY).toByteArray());
if (dd->m_projectExplorerSettings.environmentId.isNull()) if (dd->m_projectExplorerSettings.environmentId.isNull())
dd->m_projectExplorerSettings.environmentId = QUuid::createUuid(); dd->m_projectExplorerSettings.environmentId = QUuid::createUuid();
int tmp = s->value(Constants::STOP_BEFORE_BUILD_SETTINGS_KEY, 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)) 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.stopBeforeBuild = StopBeforeBuild(tmp);
dd->m_projectExplorerSettings.terminalMode = static_cast<TerminalMode>(s->value( dd->m_projectExplorerSettings.terminalMode = static_cast<TerminalMode>(
Constants::TERMINAL_MODE_SETTINGS_KEY, int(TerminalMode::Off)).toInt()); s->value(Constants::TERMINAL_MODE_SETTINGS_KEY, int(defaultSettings.terminalMode)).toInt());
dd->m_projectExplorerSettings.closeSourceFilesWithProject 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 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 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 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 dd->m_buildPropertiesSettings.buildDirectoryTemplateOld
= s->value(Constants::DEFAULT_BUILD_DIRECTORY_TEMPLATE_KEY_OLD).toString(); = s->value(Constants::DEFAULT_BUILD_DIRECTORY_TEMPLATE_KEY_OLD).toString();
@@ -2119,7 +2141,7 @@ void ProjectExplorerPluginPrivate::savePersistentSettings()
SessionManager::save(); SessionManager::save();
} }
QSettings *s = ICore::settings(); QtcSettings *s = ICore::settings();
if (SessionManager::isDefaultVirgin()) { if (SessionManager::isDefaultVirgin()) {
s->remove(Constants::STARTUPSESSION_KEY); s->remove(Constants::STARTUPSESSION_KEY);
} else { } else {
@@ -2137,45 +2159,79 @@ void ProjectExplorerPluginPrivate::savePersistentSettings()
displayNames << (*it).second; displayNames << (*it).second;
} }
s->setValue(QLatin1String("ProjectExplorer/RecentProjects/FileNames"), fileNames); s->setValueWithDefault(Constants::RECENTPROJECTS_FILE_NAMES_KEY, fileNames);
s->setValue(QLatin1String("ProjectExplorer/RecentProjects/DisplayNames"), displayNames); s->setValueWithDefault(Constants::RECENTPROJECTS_DISPLAY_NAMES_KEY, displayNames);
s->setValue(Constants::BUILD_BEFORE_DEPLOY_SETTINGS_KEY, int(dd->m_projectExplorerSettings.buildBeforeDeploy)); static const ProjectExplorerSettings defaultSettings;
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->setValueWithDefault(Constants::BUILD_BEFORE_DEPLOY_SETTINGS_KEY,
s->setValue(Constants::USE_JOM_SETTINGS_KEY, dd->m_projectExplorerSettings.useJom); int(dd->m_projectExplorerSettings.buildBeforeDeploy),
s->setValue(Constants::AUTO_RESTORE_SESSION_SETTINGS_KEY, dd->m_projectExplorerSettings.autorestoreLastSession); int(defaultSettings.buildBeforeDeploy));
s->setValue(Constants::ADD_LIBRARY_PATHS_TO_RUN_ENV_SETTINGS_KEY, dd->m_projectExplorerSettings.addLibraryPathsToRunEnv); s->setValueWithDefault(Constants::DEPLOY_BEFORE_RUN_SETTINGS_KEY,
s->setValue(Constants::PROMPT_TO_STOP_RUN_CONTROL_SETTINGS_KEY, dd->m_projectExplorerSettings.prompToStopRunControl); dd->m_projectExplorerSettings.deployBeforeRun,
s->setValue(Constants::TERMINAL_MODE_SETTINGS_KEY, defaultSettings.deployBeforeRun);
int(dd->m_projectExplorerSettings.terminalMode)); s->setValueWithDefault(Constants::SAVE_BEFORE_BUILD_SETTINGS_KEY,
s->setValue(Constants::CLOSE_FILES_WITH_PROJECT_SETTINGS_KEY, dd->m_projectExplorerSettings.saveBeforeBuild,
dd->m_projectExplorerSettings.closeSourceFilesWithProject); defaultSettings.saveBeforeBuild);
s->setValue(Constants::CLEAR_ISSUES_ON_REBUILD_SETTINGS_KEY, s->setValueWithDefault(Constants::USE_JOM_SETTINGS_KEY,
dd->m_projectExplorerSettings.clearIssuesOnRebuild); dd->m_projectExplorerSettings.useJom,
s->setValue(Constants::ABORT_BUILD_ALL_ON_ERROR_SETTINGS_KEY, defaultSettings.useJom);
dd->m_projectExplorerSettings.abortBuildAllOnError); s->setValueWithDefault(Constants::AUTO_RESTORE_SESSION_SETTINGS_KEY,
s->setValue(Constants::LOW_BUILD_PRIORITY_SETTINGS_KEY, dd->m_projectExplorerSettings.autorestoreLastSession,
dd->m_projectExplorerSettings.lowBuildPriority); defaultSettings.autorestoreLastSession);
s->setValue(Constants::AUTO_CREATE_RUN_CONFIGS_SETTINGS_KEY, s->setValueWithDefault(Constants::ADD_LIBRARY_PATHS_TO_RUN_ENV_SETTINGS_KEY,
dd->m_projectExplorerSettings.automaticallyCreateRunConfigurations); dd->m_projectExplorerSettings.addLibraryPathsToRunEnv,
s->setValue(Constants::ENVIRONMENT_ID_SETTINGS_KEY, dd->m_projectExplorerSettings.environmentId.toByteArray()); defaultSettings.addLibraryPathsToRunEnv);
s->setValue(Constants::STOP_BEFORE_BUILD_SETTINGS_KEY, int(dd->m_projectExplorerSettings.stopBeforeBuild)); 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! // Store this in the Core directory scope for backward compatibility!
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, s->setValue(Constants::DEFAULT_BUILD_DIRECTORY_TEMPLATE_KEY_OLD,
dd->m_buildPropertiesSettings.buildDirectoryTemplateOld); dd->m_buildPropertiesSettings.buildDirectoryTemplateOld);
s->setValue(Constants::DEFAULT_BUILD_DIRECTORY_TEMPLATE_KEY, s->setValue(Constants::DEFAULT_BUILD_DIRECTORY_TEMPLATE_KEY,
dd->m_buildPropertiesSettings.buildDirectoryTemplate); dd->m_buildPropertiesSettings.buildDirectoryTemplate);
}
s->setValue(Constants::SEPARATE_DEBUG_INFO_SETTINGS_KEY, s->setValueWithDefault(Constants::SEPARATE_DEBUG_INFO_SETTINGS_KEY,
dd->m_buildPropertiesSettings.separateDebugInfo.toVariant()); dd->m_buildPropertiesSettings.separateDebugInfo.toVariant(),
s->setValue(Constants::QML_DEBUGGING_SETTINGS_KEY, TriState::Default.toVariant());
dd->m_buildPropertiesSettings.qmlDebugging.toVariant()); s->setValueWithDefault(Constants::QML_DEBUGGING_SETTINGS_KEY,
s->setValue(Constants::QT_QUICK_COMPILER_SETTINGS_KEY, dd->m_buildPropertiesSettings.qmlDebugging.toVariant(),
dd->m_buildPropertiesSettings.qtQuickCompiler.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) { for (int i = 0; i < dd->m_customParsers.count(); ++i) {
s->setValue(Constants::CUSTOM_PARSER_PREFIX_KEY + QString::number(i), s->setValue(Constants::CUSTOM_PARSER_PREFIX_KEY + QString::number(i),
dd->m_customParsers.at(i).toMap()); dd->m_customParsers.at(i).toMap());

View File

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

View File

@@ -635,16 +635,32 @@ NavigationView ProjectTreeWidgetFactory::createWidget()
return n; 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); auto ptw = qobject_cast<ProjectTreeWidget *>(widget);
Q_ASSERT(ptw); Q_ASSERT(ptw);
const QString baseKey = QLatin1String("ProjectTreeWidget.") + QString::number(position); const QString baseKey = QLatin1String("ProjectTreeWidget.") + QString::number(position);
settings->setValue(baseKey + QLatin1String(".ProjectFilter"), ptw->projectFilter()); settings->setValueWithDefault(baseKey + ".ProjectFilter",
settings->setValue(baseKey + QLatin1String(".GeneratedFilter"), ptw->generatedFilesFilter()); ptw->projectFilter(),
settings->setValue(baseKey + ".DisabledFilesFilter", ptw->disabledFilesFilter()); kProjectFilterDefault);
settings->setValue(baseKey + QLatin1String(".TrimEmptyDirsFilter"), ptw->trimEmptyDirectoriesFilter()); settings->setValueWithDefault(baseKey + ".GeneratedFilter",
settings->setValue(baseKey + QLatin1String(".SyncWithEditor"), ptw->autoSynchronization()); 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) 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); auto ptw = qobject_cast<ProjectTreeWidget *>(widget);
Q_ASSERT(ptw); Q_ASSERT(ptw);
const QString baseKey = QLatin1String("ProjectTreeWidget.") + QString::number(position); const QString baseKey = QLatin1String("ProjectTreeWidget.") + QString::number(position);
ptw->setProjectFilter(settings->value(baseKey + QLatin1String(".ProjectFilter"), false).toBool()); ptw->setProjectFilter(
ptw->setGeneratedFilesFilter(settings->value(baseKey + QLatin1String(".GeneratedFilter"), true).toBool()); settings->value(baseKey + QLatin1String(".ProjectFilter"), kProjectFilterDefault).toBool());
ptw->setDisabledFilesFilter(settings->value(baseKey + ".DisabledFilesFilter", false).toBool()); ptw->setGeneratedFilesFilter(
ptw->setTrimEmptyDirectories(settings->value(baseKey + QLatin1String(".TrimEmptyDirsFilter"), true).toBool()); settings->value(baseKey + QLatin1String(".GeneratedFilter"), kHideGeneratedFilesDefault)
ptw->setAutoSynchronization(settings->value(baseKey + QLatin1String(".SyncWithEditor"), true).toBool()); .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; Core::NavigationView createWidget() override;
void restoreSettings(QSettings *settings, int position, QWidget *widget) 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 } // namespace Internal

View File

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

View File

@@ -250,7 +250,7 @@ Core::NavigationView OutlineFactory::createWidget()
return n; 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); auto widgetStack = qobject_cast<OutlineWidgetStack *>(widget);
Q_ASSERT(widgetStack); Q_ASSERT(widgetStack);

View File

@@ -79,7 +79,7 @@ public:
// from INavigationWidgetFactory // from INavigationWidgetFactory
Core::NavigationView createWidget() override; 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; void restoreSettings(QSettings *settings, int position, QWidget *widget) override;
signals: signals: