diff --git a/src/Gui/DlgPreferencesImp.cpp b/src/Gui/DlgPreferencesImp.cpp index d4b401ebaf..1c31064a85 100644 --- a/src/Gui/DlgPreferencesImp.cpp +++ b/src/Gui/DlgPreferencesImp.cpp @@ -866,6 +866,11 @@ void DlgPreferencesImp::restorePageDefaults(PreferencesPageItem* item) auto* page = qobject_cast(item->getWidget()); page->resetSettingsToDefaults(); + /** + * Let's save the restart request before the page object is deleted and replaced with + * the newPage object (wich has restartRequired initialized to false) + */ + restartRequired = restartRequired || page->isRestartRequired(); std::string pageName = page->property(PageNameProperty).toString().toStdString(); std::string groupName = page->property(GroupNameProperty).toString().toStdString(); diff --git a/src/Gui/PreferencePages/DlgSettings3DViewImp.cpp b/src/Gui/PreferencePages/DlgSettings3DViewImp.cpp index 77d90b245d..2ff0be450e 100644 --- a/src/Gui/PreferencePages/DlgSettings3DViewImp.cpp +++ b/src/Gui/PreferencePages/DlgSettings3DViewImp.cpp @@ -135,6 +135,21 @@ void DlgSettings3DViewImp::loadSettings() ui->boxMarkerSize->setCurrentIndex(index); } +void DlgSettings3DViewImp::resetSettingsToDefaults() +{ + ParameterGrp::handle hGrp; + hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/View"); + //reset "AntiAliasing" parameter + hGrp->RemoveInt("AntiAliasing"); + //reset "RenderCache" parameter + hGrp->RemoveInt("RenderCache"); + //reset "MarkerSize" parameter + hGrp->RemoveInt("MarkerSize"); + + //finally reset all the parameters associated to Gui::Pref* widgets + PreferencePage::resetSettingsToDefaults(); +} + /** * Sets the strings of the subwidgets using the current language. */ diff --git a/src/Gui/PreferencePages/DlgSettings3DViewImp.h b/src/Gui/PreferencePages/DlgSettings3DViewImp.h index 03f402aaa1..86af22838a 100644 --- a/src/Gui/PreferencePages/DlgSettings3DViewImp.h +++ b/src/Gui/PreferencePages/DlgSettings3DViewImp.h @@ -48,6 +48,7 @@ public: void saveSettings() override; void loadSettings() override; + void resetSettingsToDefaults() override; private Q_SLOTS: void onAliasingChanged(int); diff --git a/src/Gui/PreferencePages/DlgSettingsCacheDirectory.cpp b/src/Gui/PreferencePages/DlgSettingsCacheDirectory.cpp index 8af2959bb4..0fb60854eb 100644 --- a/src/Gui/PreferencePages/DlgSettingsCacheDirectory.cpp +++ b/src/Gui/PreferencePages/DlgSettingsCacheDirectory.cpp @@ -98,6 +98,19 @@ void DlgSettingsCacheDirectory::loadSettings() ui->comboBoxLimit->setCurrentIndex(index); } +void DlgSettingsCacheDirectory::resetSettingsToDefaults() +{ + ParameterGrp::handle hGrp; + hGrp = WindowParameter::getDefaultParameter()->GetGroup("CacheDirectory"); + //reset "Limit" parameter + hGrp->RemoveUnsigned("Limit"); + //reset "Period" parameter + hGrp->RemoveInt("Period"); + + //finally reset all the parameters associated to Gui::Pref* widgets + PreferencePage::resetSettingsToDefaults(); +} + void DlgSettingsCacheDirectory::changeEvent(QEvent *e) { if (e->type() == QEvent::LanguageChange) { diff --git a/src/Gui/PreferencePages/DlgSettingsCacheDirectory.h b/src/Gui/PreferencePages/DlgSettingsCacheDirectory.h index e8bffe5154..8f74157e67 100644 --- a/src/Gui/PreferencePages/DlgSettingsCacheDirectory.h +++ b/src/Gui/PreferencePages/DlgSettingsCacheDirectory.h @@ -46,6 +46,7 @@ public: void saveSettings() override; void loadSettings() override; + void resetSettingsToDefaults() override; protected: void changeEvent(QEvent *e) override; diff --git a/src/Gui/PreferencePages/DlgSettingsEditor.cpp b/src/Gui/PreferencePages/DlgSettingsEditor.cpp index 170ba8fc0c..a8a4bb35a8 100644 --- a/src/Gui/PreferencePages/DlgSettingsEditor.cpp +++ b/src/Gui/PreferencePages/DlgSettingsEditor.cpp @@ -327,6 +327,23 @@ void DlgSettingsEditor::loadSettings() ui->displayItems->setCurrentItem(ui->displayItems->topLevelItem(0)); } +void DlgSettingsEditor::resetSettingsToDefaults() +{ + ParameterGrp::handle hGrp; + hGrp = WindowParameter::getDefaultParameter()->GetGroup("Editor"); + //reset the parameters in the "Editor" group + for (QVector >::Iterator it = d->colormap.begin(); it != d->colormap.end(); ++it) { + hGrp->RemoveUnsigned((*it).first.toLatin1()); + } + //reset "FontSize" parameter + hGrp->RemoveInt("FontSize"); + //reset "Font" parameter + hGrp->RemoveASCII("Font"); + + //finally reset all the parameters associated to Gui::Pref* widgets + PreferencePage::resetSettingsToDefaults(); +} + /** * Sets the strings of the subwidgets using the current language. */ diff --git a/src/Gui/PreferencePages/DlgSettingsEditor.h b/src/Gui/PreferencePages/DlgSettingsEditor.h index cf6e7ecb6d..6c5e0e832f 100644 --- a/src/Gui/PreferencePages/DlgSettingsEditor.h +++ b/src/Gui/PreferencePages/DlgSettingsEditor.h @@ -51,6 +51,7 @@ public: public: void saveSettings() override; void loadSettings() override; + void resetSettingsToDefaults() override; private: void setupConnections(); diff --git a/src/Gui/PreferencePages/DlgSettingsGeneral.cpp b/src/Gui/PreferencePages/DlgSettingsGeneral.cpp index 5b0d3955c7..7957022c79 100644 --- a/src/Gui/PreferencePages/DlgSettingsGeneral.cpp +++ b/src/Gui/PreferencePages/DlgSettingsGeneral.cpp @@ -341,6 +341,44 @@ void DlgSettingsGeneral::loadSettings() loadThemes(); } +void DlgSettingsGeneral::resetSettingsToDefaults() +{ + ParameterGrp::handle hGrp; + hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Units"); + //reset "UserSchema" parameter + hGrp->RemoveInt("UserSchema"); + //reset "Decimals" parameter + hGrp->RemoveInt("Decimals"); + //reset "IgnoreProjectSchema" parameter + hGrp->RemoveBool("IgnoreProjectSchema"); + //reset "FracInch" parameter + hGrp->RemoveInt("FracInch"); + + hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow"); + //reset "Theme" parameter + hGrp->RemoveASCII("Theme"); + //reset "TiledBackground" parameter + hGrp->RemoveBool("TiledBackground"); + + + hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/DockWindows"); + //reset "ComboView" parameters + hGrp->GetGroup("ComboView")->RemoveBool("Enabled"); + //reset "TreeView" parameters + hGrp->GetGroup("TreeView")->RemoveBool("Enabled"); + //reset "PropertyView" parameters + hGrp->GetGroup("PropertyView")->RemoveBool("Enabled"); + + hGrp = WindowParameter::getDefaultParameter()->GetGroup("General"); + //reset "Language" parameter + hGrp->RemoveASCII("Language"); + //reset "ToolbarIconSize" parameter + hGrp->RemoveInt("ToolbarIconSize"); + + //finally reset all the parameters associated to Gui::Pref* widgets + PreferencePage::resetSettingsToDefaults(); +} + void DlgSettingsGeneral::saveThemes() { ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow"); diff --git a/src/Gui/PreferencePages/DlgSettingsGeneral.h b/src/Gui/PreferencePages/DlgSettingsGeneral.h index 05e5366a7a..cab67e4716 100644 --- a/src/Gui/PreferencePages/DlgSettingsGeneral.h +++ b/src/Gui/PreferencePages/DlgSettingsGeneral.h @@ -53,6 +53,7 @@ public: void saveSettings() override; void loadSettings() override; + void resetSettingsToDefaults() override; void saveThemes(); void loadThemes(); diff --git a/src/Gui/PreferencePages/DlgSettingsMacroImp.cpp b/src/Gui/PreferencePages/DlgSettingsMacroImp.cpp index 46f8d4a588..9de92a3fa6 100644 --- a/src/Gui/PreferencePages/DlgSettingsMacroImp.cpp +++ b/src/Gui/PreferencePages/DlgSettingsMacroImp.cpp @@ -102,6 +102,17 @@ void DlgSettingsMacroImp::loadSettings() ui->ShortcutCount->onRestore(); } +void DlgSettingsMacroImp::resetSettingsToDefaults() +{ + ParameterGrp::handle hGrp; + hGrp = WindowParameter::getDefaultParameter()->GetGroup("RecentMacros"); + //reset "ShortcutModifiers" parameter + hGrp->RemoveASCII("ShortcutModifiers"); + + //finally reset all the parameters associated to Gui::Pref* widgets + PreferencePage::resetSettingsToDefaults(); +} + /** * Sets the strings of the subwidgets using the current language. */ diff --git a/src/Gui/PreferencePages/DlgSettingsMacroImp.h b/src/Gui/PreferencePages/DlgSettingsMacroImp.h index 9ebb246d41..41e4718e69 100644 --- a/src/Gui/PreferencePages/DlgSettingsMacroImp.h +++ b/src/Gui/PreferencePages/DlgSettingsMacroImp.h @@ -46,6 +46,7 @@ public: void saveSettings() override; void loadSettings() override; + void resetSettingsToDefaults() override; protected: void changeEvent(QEvent *e) override; diff --git a/src/Gui/PreferencePages/DlgSettingsNavigation.cpp b/src/Gui/PreferencePages/DlgSettingsNavigation.cpp index 5ad22a869c..7ca3eba404 100644 --- a/src/Gui/PreferencePages/DlgSettingsNavigation.cpp +++ b/src/Gui/PreferencePages/DlgSettingsNavigation.cpp @@ -208,6 +208,39 @@ void DlgSettingsNavigation::loadSettings() } +void DlgSettingsNavigation::resetSettingsToDefaults() +{ + ParameterGrp::handle hGrp; + hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/View"); + //reset "NavigationStyle" parameter + hGrp->RemoveASCII("NavigationStyle"); + //reset "OrbitStyle" parameter + hGrp->RemoveInt("OrbitStyle"); + //reset "RotationMode" parameter + hGrp->RemoveInt("RotationMode"); + //reset "ShowNaviCube" parameter + hGrp->RemoveBool("ShowNaviCube"); + //reset "ShowRotationCenter" parameter + hGrp->RemoveBool("ShowRotationCenter"); + //reset "UseNavigationAnimations" parameter + hGrp->RemoveBool("UseNavigationAnimations"); + //reset "NewDocumentCameraOrientation" parameter + hGrp->RemoveASCII("NewDocumentCameraOrientation"); + + hGrp = hGrp->GetGroup("Custom"); + //reset "Q0" parameter + hGrp->RemoveFloat("Q0"); + //reset "Q1" parameter + hGrp->RemoveFloat("Q1"); + //reset "Q2" parameter + hGrp->RemoveFloat("Q2"); + //reset "Q3" parameter + hGrp->RemoveFloat("Q3"); + + //finally reset all the parameters associated to Gui::Pref* widgets + PreferencePage::resetSettingsToDefaults(); +} + void DlgSettingsNavigation::onMouseButtonClicked() { QDialog dlg(this); diff --git a/src/Gui/PreferencePages/DlgSettingsNavigation.h b/src/Gui/PreferencePages/DlgSettingsNavigation.h index 95edfc7def..45a7d1ccf3 100644 --- a/src/Gui/PreferencePages/DlgSettingsNavigation.h +++ b/src/Gui/PreferencePages/DlgSettingsNavigation.h @@ -49,6 +49,7 @@ public: void saveSettings() override; void loadSettings() override; + void resetSettingsToDefaults() override; private: void onMouseButtonClicked(); diff --git a/src/Gui/PreferencePages/DlgSettingsWorkbenchesImp.cpp b/src/Gui/PreferencePages/DlgSettingsWorkbenchesImp.cpp index 9f819d4920..5cd157d509 100644 --- a/src/Gui/PreferencePages/DlgSettingsWorkbenchesImp.cpp +++ b/src/Gui/PreferencePages/DlgSettingsWorkbenchesImp.cpp @@ -351,6 +351,37 @@ void DlgSettingsWorkbenchesImp::loadSettings() } } +void DlgSettingsWorkbenchesImp::resetSettingsToDefaults() +{ + ParameterGrp::handle hGrp; + hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Workbenches"); + //reset "Ordered" parameter + hGrp->RemoveASCII("Ordered"); + //reset "Disabled" parameter + hGrp->RemoveASCII("Disabled"); + + hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/General"); + //reset "BackgroundAutoloadModules" parameter + hGrp->RemoveASCII("BackgroundAutoloadModules"); + //reset "AutoloadModule" parameter + hGrp->RemoveASCII("AutoloadModule"); + + hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow"); + //reset "WSPosition" parameter + hGrp->RemoveASCII("WSPosition"); + if (ui->WorkbenchSelectorPosition->currentIndex() != WorkbenchSwitcher::getIndex()) { + requireRestart(); + } + + //finally reset all the parameters associated to Gui::Pref* widgets + PreferencePage::resetSettingsToDefaults(); + + hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/View"); + if (ui->CheckBox_WbByTab->isChecked() != hGrp->GetBool("SaveWBbyTab", 0)) { + requireRestart(); + } +} + /** Build the list of unloaded workbenches. */ @@ -590,7 +621,16 @@ void DlgSettingsWorkbenchesImp::onStartWbChanged(int index) void DlgSettingsWorkbenchesImp::onWbSelectorChanged(int index) { Q_UNUSED(index); - requireRestart(); + /** + * TODO: move the following code somewhere else so that the restart request isn't asked + * everytime the WorkbenchSwitcher is changed but only when the value that will be saved in + * the parameter is actually different from the current one. + * The code, as is now, will request the restart even if the use selects again the same value + * that is already saved in the parameters + */ + if (ui->WorkbenchSelectorPosition->currentIndex() != WorkbenchSwitcher::getIndex()) { + requireRestart(); + } } void DlgSettingsWorkbenchesImp::onWbByTabToggled(bool val) diff --git a/src/Gui/PreferencePages/DlgSettingsWorkbenchesImp.h b/src/Gui/PreferencePages/DlgSettingsWorkbenchesImp.h index 6432e75a28..6c2f6d7c9f 100644 --- a/src/Gui/PreferencePages/DlgSettingsWorkbenchesImp.h +++ b/src/Gui/PreferencePages/DlgSettingsWorkbenchesImp.h @@ -29,7 +29,8 @@ #include #include -namespace Gui::Dialog { +namespace Gui{ +namespace Dialog { class Ui_DlgSettingsWorkbenches; /** @@ -47,6 +48,7 @@ public: void saveSettings() override; void loadSettings() override; + void resetSettingsToDefaults() override; static QStringList getEnabledWorkbenches(); static QStringList getDisabledWorkbenches(); @@ -78,6 +80,7 @@ private: std::unique_ptr ui; }; -} // namespace Gui::Dialog +} // namespace Dialog +} // namespace Gui #endif // GUI_DIALOG_DLGSETTINGSWORKBENCHES_IMP_H