diff --git a/src/blackgui/dockwidget.cpp b/src/blackgui/dockwidget.cpp index a0af8cde9..be2794bd1 100644 --- a/src/blackgui/dockwidget.cpp +++ b/src/blackgui/dockwidget.cpp @@ -103,7 +103,7 @@ namespace BlackGui { CDockWidgetSettings s = this->getSettings(); s.setMarginsWhenFloating(margins); - this->setSettings(s); + this->saveSettings(s); } void CDockWidget::setMarginsWhenFloating(int left, int top, int right, int bottom) @@ -120,7 +120,7 @@ namespace BlackGui { CDockWidgetSettings s = this->getSettings(); s.setMarginsWhenFramelessFloating(margins); - this->setSettings(s); + this->saveSettings(s); } void CDockWidget::setMarginsWhenFramelessFloating(int left, int top, int right, int bottom) @@ -137,7 +137,7 @@ namespace BlackGui { CDockWidgetSettings s = this->getSettings(); s.setMarginsWhenDocked(margins); - this->setSettings(s); + this->saveSettings(s); } void CDockWidget::setMarginsWhenDocked(int left, int top, int right, int bottom) @@ -343,7 +343,7 @@ namespace BlackGui // State actions (windows state) contextMenu->addAction(BlackMisc::CIcons::load16(), "Restore", this, &CDockWidget::restoreFromSettings); - contextMenu->addAction(BlackMisc::CIcons::save16(), "Save state", this, &CDockWidget::saveToSettings); + contextMenu->addAction(BlackMisc::CIcons::save16(), "Save state", this, &CDockWidget::saveCurrentStateToSettings); contextMenu->addAction(BlackMisc::CIcons::refresh16(), "Reset to defaults", this, &CDockWidget::resetSettings); contextMenu->addAction(BlackMisc::CIcons::refresh16(), "Reset position", this, &CDockWidget::resetPosition); @@ -354,10 +354,7 @@ namespace BlackGui void CDockWidget::initialFloating() { - // settings, ii here because name now is set - this->initSettings(); - - // init status bar, as we have now all structures set + // init status bar, as we have now all structures set and name is known this->initStatusBarAndProperties(); // for the first time resize @@ -386,10 +383,10 @@ namespace BlackGui void CDockWidget::ps_onTopLevelChanged(bool topLevel) { - #ifdef Q_OS_LINUX +# ifdef Q_OS_LINUX // Give XCB platforms enough time to handle window events before adjusting it. QThread::msleep(100); - #endif +# endif this->setMargins(); if (topLevel) @@ -542,58 +539,37 @@ namespace BlackGui this->setStyleSheet(qss); } - void CDockWidget::initSettings() - { - const QString name(this->getNameForSettings()); - CDockWidgetsSettings all = this->m_settings.get(); - if (all.contains(name)) { return; } - all.getByNameOrInitToDefault(name); - this->m_settings.setAndSave(all); - } - - QString CDockWidget::getNameForSettings() const - { - const QString n(this->objectName().toLower().remove(' ')); - Q_ASSERT_X(!n.isEmpty(), Q_FUNC_INFO, "No settings name"); - return n; - } - CDockWidgetSettings CDockWidget::getSettings() const { - const CDockWidgetsSettings all = this->m_settings.get(); - const QString name(this->getNameForSettings()); - const CDockWidgetSettings s = all.value(name); + Q_ASSERT_X(!this->objectName().isEmpty(), Q_FUNC_INFO, "Need object name for settings %OwnerName%"); + const CDockWidgetSettings s = this->m_settings.get(); return s; } - void CDockWidget::setSettings(const CDockWidgetSettings &settings) + void CDockWidget::saveSettings(const CDockWidgetSettings &settings) { - const CDockWidgetSettings current = getSettings(); - if (current == settings) { return; } - CDockWidgetsSettings all = this->m_settings.get(); - const QString name(this->getNameForSettings()); - all.insert(name, settings); - const CStatusMessage m = this->m_settings.set(all); // saved when shutdown + Q_ASSERT_X(!this->objectName().isEmpty(), Q_FUNC_INFO, "Need object name for settings %OwnerName%"); + const CStatusMessage m = this->m_settings.setAndSave(settings); if (m.isFailure()) { CLogMessage::preformatted(m); } } - void CDockWidget::saveToSettings() + void CDockWidget::saveCurrentStateToSettings() { CDockWidgetSettings s = this->getSettings(); s.setFloating(this->isFloating()); s.setFrameless(this->isFrameless()); s.setGeometry(this->saveGeometry()); - this->setSettings(s); + this->saveSettings(s); } void CDockWidget::resetSettings() { CDockWidgetSettings s = this->getSettings(); s.reset(); - this->setSettings(s); + this->saveSettings(s); this->restoreFromSettings(); } diff --git a/src/blackgui/dockwidget.h b/src/blackgui/dockwidget.h index bb14100a3..cb2057744 100644 --- a/src/blackgui/dockwidget.h +++ b/src/blackgui/dockwidget.h @@ -118,7 +118,7 @@ namespace BlackGui bool restoreFromSettings(); //! Remember widget state - void saveToSettings(); + void saveCurrentStateToSettings(); //! Reset margin settings void resetSettings(); @@ -231,11 +231,11 @@ namespace BlackGui QPoint m_offsetWhenFloating; //!< initial offset to main window when floating first time bool m_allowStatusBar = true; bool m_windowTitleWhenDocked = true; - bool m_wasAlreadyFloating = false; + bool m_wasAlreadyFloating = false; //!< flag if widget was at least once in floating state bool m_selected = false; //!< selected when tabbed bool m_dockWidgetVisible = false; //!< logical visible, not to be confused with QDockWidget::isVisible() bool m_wasFrameless = false; //!< frameless when last floating - BlackMisc::CSetting m_settings { this, &CDockWidget::ps_settingsChanged }; //!< all docked wigets settings + BlackMisc::CSetting m_settings { this, &CDockWidget::ps_settingsChanged }; //!< all docked wigets settings //! Empty widget with no size void initTitleBarWidgets(); @@ -246,17 +246,11 @@ namespace BlackGui //! Force a style sheet update void forceStyleSheetUpdate(); - //! Init settings - void initSettings(); - - //! Name used as key for settings - QString getNameForSettings() const; - //! This widget`s settings BlackGui::Settings::CDockWidgetSettings getSettings() const; - //! Save my updated settings - void setSettings(const BlackGui::Settings::CDockWidgetSettings &settings); + //! Save settings + void saveSettings(const BlackGui::Settings::CDockWidgetSettings &settings); }; } // namespace diff --git a/src/blackgui/registermetadata.cpp b/src/blackgui/registermetadata.cpp index e7e08edfe..d113e2eeb 100644 --- a/src/blackgui/registermetadata.cpp +++ b/src/blackgui/registermetadata.cpp @@ -17,7 +17,6 @@ namespace BlackGui void registerMetadata() { BlackGui::Settings::CDockWidgetSettings::registerMetadata(); - BlackGui::Settings::CDockWidgetsSettings::registerMetadata(); BlackGui::Settings::CNavigatorSettings::registerMetadata(); BlackGui::Components::registerMetadata(); } diff --git a/src/blackgui/settings/dockwidgetsettings.cpp b/src/blackgui/settings/dockwidgetsettings.cpp index f87f0bf1c..dac5602df 100644 --- a/src/blackgui/settings/dockwidgetsettings.cpp +++ b/src/blackgui/settings/dockwidgetsettings.cpp @@ -149,25 +149,5 @@ namespace BlackGui break; } } - - CDockWidgetSettings CDockWidgetsSettings::getByNameOrInitToDefault(const QString &name) - { - if (this->contains(name)) { return this->value(name); } - CDockWidgetSettings s; - - // default values can be set here, this could be enhanced if needed - // e.g. by platform dependent defaults - s.reset(); - this->insert(name, s); - return s; - } - - void CDockWidgetsSettings::resetToDefaults(const QString &name) - { - if (this->contains(name)) - { - this->remove(name); - } - } } // ns } // ns diff --git a/src/blackgui/settings/dockwidgetsettings.h b/src/blackgui/settings/dockwidgetsettings.h index d5b3a336b..983a3d1d8 100644 --- a/src/blackgui/settings/dockwidgetsettings.h +++ b/src/blackgui/settings/dockwidgetsettings.h @@ -92,7 +92,7 @@ namespace BlackGui //! \copydoc BlackMisc::Mixin::String::toQString QString convertToQString(bool i18n = false) const; - //! To string + //! \copydoc BlackMisc::Mixin::String::toQString QString convertToQString(const QString &separator, bool i18n = false) const; //! \copydoc BlackMisc::Mixin::Index::propertyByIndex @@ -120,33 +120,13 @@ namespace BlackGui ); }; - //! Needed to compile properly with Q_DECLARE_METATYPE - using CDockWidgetSettingsDictionary = BlackMisc::CDictionary; - - //! Settings for all dock widgets - class BLACKGUI_EXPORT CDockWidgetsSettings : - public CDockWidgetSettingsDictionary, - public BlackMisc::Mixin::MetaType, - public BlackMisc::Mixin::JsonOperators - { - public: - BLACKMISC_DECLARE_USING_MIXIN_METATYPE(CDockWidgetsSettings) - - //! Default constructor. - CDockWidgetsSettings() {} - - //! Get setting or init by estimated default values - CDockWidgetSettings getByNameOrInitToDefault(const QString &name); - - //! Reset to defaults - void resetToDefaults(const QString &name); - }; - //! Trait for settings for dock widget - struct TDockWidgets : public BlackMisc::TSettingTrait + //! \details All settings will go in one file, separated by application and object name + //! (of the parent object using this setting). If the object name is not set, it will not work correctly + struct TDockWidget : public BlackMisc::TSettingTrait { - //! Key in data cache - static const char *key() { return "guidockwidget"; } + //! Key in data cache https://dev.vatsim-germany.org/issues/776 + static const char *key() { return "guidockwidget/%Application%/%OwnerName%"; } }; } // ns } // ns @@ -154,7 +134,5 @@ namespace BlackGui Q_DECLARE_METATYPE(BlackGui::Settings::CDockWidgetSettings) Q_DECLARE_METATYPE(BlackMisc::CCollection) Q_DECLARE_METATYPE(BlackMisc::CSequence) -Q_DECLARE_METATYPE(BlackGui::Settings::CDockWidgetSettingsDictionary) -Q_DECLARE_METATYPE(BlackGui::Settings::CDockWidgetsSettings) #endif // guard