diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index 1d11232d826..820feadda6d 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -198,6 +198,7 @@ SET(QGIS_APP_SRCS locator/qgslocatoroptionswidget.cpp options/qgsoptions.cpp + options/qgsoptionsutils.cpp gps/qgsgpsbearingitem.cpp gps/qgsgpsinformationwidget.cpp diff --git a/src/app/devtools/qgsappdevtoolutils.h b/src/app/devtools/qgsappdevtoolutils.h index cc66b07f38c..08484ccde71 100644 --- a/src/app/devtools/qgsappdevtoolutils.h +++ b/src/app/devtools/qgsappdevtoolutils.h @@ -20,9 +20,9 @@ class QgsDevToolWidgetFactory; #include /** - * \ingroup core + * \ingroup app * - * Manages lifetime of a QgsScopedDevToolWidgetFactory, automatically + * Manages lifetime of a QgsDevToolWidgetFactory, automatically * registering and unregistering it as required. * * \since QGIS 3.14 diff --git a/src/app/options/qgsoptionsutils.cpp b/src/app/options/qgsoptionsutils.cpp new file mode 100644 index 00000000000..f62a8afb905 --- /dev/null +++ b/src/app/options/qgsoptionsutils.cpp @@ -0,0 +1,36 @@ +/*************************************************************************** + qgsoptionsutils.cpp + ------------------------- + begin : September 2020 + copyright : (C) 2020 by Nyall Dawson + email : nyall dot dawson at gmail dot com + *************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ +#include "qgsoptionsutils.h" + +#include "qgisapp.h" +#include "qgis.h" +#include "qgsoptionswidgetfactory.h" + +QgsScopedOptionsWidgetFactory::QgsScopedOptionsWidgetFactory() = default; + +QgsScopedOptionsWidgetFactory::~QgsScopedOptionsWidgetFactory() +{ + if ( mFactory ) + QgisApp::instance()->unregisterOptionsWidgetFactory( mFactory.get() ); +} + +void QgsScopedOptionsWidgetFactory::reset( std::unique_ptr factory ) +{ + if ( mFactory ) + QgisApp::instance()->unregisterOptionsWidgetFactory( mFactory.get() ); + mFactory = std::move( factory ); + if ( mFactory ) + QgisApp::instance()->registerOptionsWidgetFactory( mFactory.get() ); +} diff --git a/src/app/options/qgsoptionsutils.h b/src/app/options/qgsoptionsutils.h new file mode 100644 index 00000000000..52f00737d2f --- /dev/null +++ b/src/app/options/qgsoptionsutils.h @@ -0,0 +1,42 @@ +/*************************************************************************** + qgsoptionsutils.h + ------------------------- + begin : September 2020 + copyright : (C) 2020 by Nyall Dawson + email : nyall dot dawson at gmail dot com + *************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ +#ifndef QGSOPTIONSUTILS_H +#define QGSOPTIONSUTILS_H + +class QgsOptionsWidgetFactory; +#include + +/** + * \ingroup app + * + * Manages lifetime of a QgsOptionsWidgetFactory, automatically + * registering and unregistering it as required. + * + * \since QGIS 3.16 + */ +class QgsScopedOptionsWidgetFactory +{ + public: + QgsScopedOptionsWidgetFactory(); + ~QgsScopedOptionsWidgetFactory(); + + void reset( std::unique_ptr< QgsOptionsWidgetFactory > factory = nullptr ); + + private: + std::unique_ptr< QgsOptionsWidgetFactory > mFactory; +}; + + +#endif // QGSOPTIONSUTILS_H