diff options
Diffstat (limited to 'libs/installer_bsplugins/src/GUI/IGeometrySettings.h')
| -rw-r--r-- | libs/installer_bsplugins/src/GUI/IGeometrySettings.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/libs/installer_bsplugins/src/GUI/IGeometrySettings.h b/libs/installer_bsplugins/src/GUI/IGeometrySettings.h new file mode 100644 index 0000000..681fc11 --- /dev/null +++ b/libs/installer_bsplugins/src/GUI/IGeometrySettings.h @@ -0,0 +1,44 @@ +#ifndef GUI_IGEOMETRYSETTINGS_H +#define GUI_IGEOMETRYSETTINGS_H + +#include <concepts> + +namespace GUI +{ + +template <class W> +class IGeometrySettings +{ +public: + virtual void saveGeometry(const W* widget) = 0; + virtual void restoreGeometry(W* widget) const = 0; +}; + +template <class W> +class [[nodiscard]] GeometrySaver final +{ +public: + GeometrySaver(IGeometrySettings<W>& s, W* w) : m_Settings{s}, m_Widget{w} + { + m_Settings.restoreGeometry(m_Widget); + } + + GeometrySaver(const GeometrySaver<W>&) = delete; + GeometrySaver(GeometrySaver<W>&&) = delete; + + ~GeometrySaver() { m_Settings.saveGeometry(m_Widget); } + + GeometrySaver<W>& operator=(const GeometrySaver<W>&) = delete; + GeometrySaver<W>& operator=(GeometrySaver<W>&&) = delete; + +private: + IGeometrySettings<W>& m_Settings; + W* m_Widget; +}; + +template <class W, std::derived_from<W> Derived> +GeometrySaver(IGeometrySettings<W>&, Derived*) -> GeometrySaver<W>; + +} // namespace GUI + +#endif // GUI_IGEOMETRYSETTINGS_H |
