diff options
author | Eike Ziller <eike.ziller@qt.io> | 2020-12-14 17:00:53 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2020-12-16 08:40:24 +0000 |
commit | c8980478805ed6bcdfbf2965cbf6c03492d804e6 (patch) | |
tree | 7637ee0aea7eec25ec46a38dedcad06ece797e79 | |
parent | 8987996500adea77ac494da5c70e2e489d907353 (diff) | |
download | qt-creator-c8980478805ed6bcdfbf2965cbf6c03492d804e6.tar.gz |
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>
20 files changed, 247 insertions, 120 deletions
diff --git a/src/plugins/classview/classviewnavigationwidgetfactory.cpp b/src/plugins/classview/classviewnavigationwidgetfactory.cpp index aaaa4295d3..217fedea9a 100644 --- a/src/plugins/classview/classviewnavigationwidgetfactory.cpp +++ b/src/plugins/classview/classviewnavigationwidgetfactory.cpp @@ -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); diff --git a/src/plugins/classview/classviewnavigationwidgetfactory.h b/src/plugins/classview/classviewnavigationwidgetfactory.h index 31f664476d..e067e9ee00 100644 --- a/src/plugins/classview/classviewnavigationwidgetfactory.h +++ b/src/plugins/classview/classviewnavigationwidgetfactory.h @@ -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; diff --git a/src/plugins/coreplugin/inavigationwidgetfactory.cpp b/src/plugins/coreplugin/inavigationwidgetfactory.cpp index 7e36dbdd08..63ed236e11 100644 --- a/src/plugins/coreplugin/inavigationwidgetfactory.cpp +++ b/src/plugins/coreplugin/inavigationwidgetfactory.cpp @@ -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 */) { } diff --git a/src/plugins/coreplugin/inavigationwidgetfactory.h b/src/plugins/coreplugin/inavigationwidgetfactory.h index 802f1ca5d8..cd918de6f3 100644 --- a/src/plugins/coreplugin/inavigationwidgetfactory.h +++ b/src/plugins/coreplugin/inavigationwidgetfactory.h @@ -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: diff --git a/src/plugins/coreplugin/navigationsubwidget.cpp b/src/plugins/coreplugin/navigationsubwidget.cpp index 9f340ddf71..bb439d4eff 100644 --- a/src/plugins/coreplugin/navigationsubwidget.cpp +++ b/src/plugins/coreplugin/navigationsubwidget.cpp @@ -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(); diff --git a/src/plugins/cppeditor/cppincludehierarchy.cpp b/src/plugins/cppeditor/cppincludehierarchy.cpp index 8ea60a7609..f3a038c50d 100644 --- a/src/plugins/cppeditor/cppincludehierarchy.cpp +++ b/src/plugins/cppeditor/cppincludehierarchy.cpp @@ -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); } diff --git a/src/plugins/cppeditor/cppincludehierarchy.h b/src/plugins/cppeditor/cppincludehierarchy.h index 99310a8904..ee20f470b7 100644 --- a/src/plugins/cppeditor/cppincludehierarchy.h +++ b/src/plugins/cppeditor/cppincludehierarchy.h @@ -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; }; diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp index 658028b2b7..8eb808111f 100644 --- a/src/plugins/projectexplorer/appoutputpane.cpp +++ b/src/plugins/projectexplorer/appoutputpane.cpp @@ -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; } diff --git a/src/plugins/projectexplorer/compileoutputwindow.cpp b/src/plugins/projectexplorer/compileoutputwindow.cpp index 6bd7f7aba8..2f322a660a 100644 --- a/src/plugins/projectexplorer/compileoutputwindow.cpp +++ b/src/plugins/projectexplorer/compileoutputwindow.cpp @@ -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 diff --git a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp index f33607b5c9..12c9e4e53c 100644 --- a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp @@ -219,7 +219,7 @@ void DeviceSettingsWidget::updateDeviceFromUi() void DeviceSettingsWidget::saveSettings() { - ICore::settings()->setValue(QLatin1String(LastDeviceIndexKey), currentIndex()); + ICore::settings()->setValueWithDefault(LastDeviceIndexKey, currentIndex(), 0); DeviceManager::replaceInstance(); } diff --git a/src/plugins/projectexplorer/foldernavigationwidget.cpp b/src/plugins/projectexplorer/foldernavigationwidget.cpp index b7d399720c..c3987e1e48 100644 --- a/src/plugins/projectexplorer/foldernavigationwidget.cpp +++ b/src/plugins/projectexplorer/foldernavigationwidget.cpp @@ -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) diff --git a/src/plugins/projectexplorer/foldernavigationwidget.h b/src/plugins/projectexplorer/foldernavigationwidget.h index f871fb2aaa..a69ddedf47 100644 --- a/src/plugins/projectexplorer/foldernavigationwidget.h +++ b/src/plugins/projectexplorer/foldernavigationwidget.h @@ -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); diff --git a/src/plugins/projectexplorer/kitchooser.cpp b/src/plugins/projectexplorer/kitchooser.cpp index 469dc9cf71..8b6b6ecb05 100644 --- a/src/plugins/projectexplorer/kitchooser.cpp +++ b/src/plugins/projectexplorer/kitchooser.cpp @@ -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(); } diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 3552d8d471..3f9a969f29 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -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->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)); + 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::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); - - 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->setValue(Constants::CUSTOM_PARSER_COUNT_KEY, dd->m_customParsers.count()); + 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->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->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()); diff --git a/src/plugins/projectexplorer/projectexplorersettings.h b/src/plugins/projectexplorer/projectexplorersettings.h index 496bc3e26a..b5cbd7db3f 100644 --- a/src/plugins/projectexplorer/projectexplorersettings.h +++ b/src/plugins/projectexplorer/projectexplorersettings.h @@ -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. diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp index 353d50716c..6b15b6f13a 100644 --- a/src/plugins/projectexplorer/projecttreewidget.cpp +++ b/src/plugins/projectexplorer/projecttreewidget.cpp @@ -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()); } diff --git a/src/plugins/projectexplorer/projecttreewidget.h b/src/plugins/projectexplorer/projecttreewidget.h index aa612fdf7e..c9afb44fab 100644 --- a/src/plugins/projectexplorer/projecttreewidget.h +++ b/src/plugins/projectexplorer/projecttreewidget.h @@ -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 diff --git a/src/plugins/projectexplorer/toolchainmanager.cpp b/src/plugins/projectexplorer/toolchainmanager.cpp index e16f642952..546f553b0c 100644 --- a/src/plugins/projectexplorer/toolchainmanager.cpp +++ b/src/plugins/projectexplorer/toolchainmanager.cpp @@ -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) diff --git a/src/plugins/texteditor/outlinefactory.cpp b/src/plugins/texteditor/outlinefactory.cpp index 87a162e0d1..7c7e644b18 100644 --- a/src/plugins/texteditor/outlinefactory.cpp +++ b/src/plugins/texteditor/outlinefactory.cpp @@ -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); diff --git a/src/plugins/texteditor/outlinefactory.h b/src/plugins/texteditor/outlinefactory.h index 83d6e00522..0f72bcf6e5 100644 --- a/src/plugins/texteditor/outlinefactory.h +++ b/src/plugins/texteditor/outlinefactory.h @@ -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: |