From 4c67afa69892d5ac5eb83634fbab023f5bbc51e2 Mon Sep 17 00:00:00 2001 From: Denis Rouzaud Date: Fri, 24 Jan 2025 15:25:37 +0100 Subject: [PATCH] remove old method --- .../qgscodeeditordockwidget.sip.in | 2 +- .../qgscodeeditordockwidget.sip.in | 2 +- src/app/3d/qgs3dmapcanvaswidget.cpp | 3 +- .../elevation/qgselevationprofilewidget.cpp | 3 +- src/app/qgsmapcanvasdockwidget.cpp | 2 +- .../codeeditors/qgscodeeditordockwidget.cpp | 18 ++++++- src/gui/codeeditors/qgscodeeditordockwidget.h | 2 +- src/gui/qgsdockablewidgethelper.cpp | 48 +++++-------------- src/gui/qgsdockablewidgethelper.h | 13 +---- 9 files changed, 37 insertions(+), 56 deletions(-) diff --git a/python/PyQt6/gui/auto_generated/codeeditors/qgscodeeditordockwidget.sip.in b/python/PyQt6/gui/auto_generated/codeeditors/qgscodeeditordockwidget.sip.in index 0b2d2d63356..687393c3fc3 100644 --- a/python/PyQt6/gui/auto_generated/codeeditors/qgscodeeditordockwidget.sip.in +++ b/python/PyQt6/gui/auto_generated/codeeditors/qgscodeeditordockwidget.sip.in @@ -27,7 +27,7 @@ A custom dock widget for code editors. #include "qgscodeeditordockwidget.h" %End public: - QgsCodeEditorDockWidget( const QString &windowGeometrySettingsKey = QString(), bool usePersistentWidget = false ); + QgsCodeEditorDockWidget( const QString &dockId = QString(), bool usePersistentWidget = false ); %Docstring Constructor for QgsCodeEditorDockWidget, with the specified window geometry settings key. diff --git a/python/gui/auto_generated/codeeditors/qgscodeeditordockwidget.sip.in b/python/gui/auto_generated/codeeditors/qgscodeeditordockwidget.sip.in index 0b2d2d63356..687393c3fc3 100644 --- a/python/gui/auto_generated/codeeditors/qgscodeeditordockwidget.sip.in +++ b/python/gui/auto_generated/codeeditors/qgscodeeditordockwidget.sip.in @@ -27,7 +27,7 @@ A custom dock widget for code editors. #include "qgscodeeditordockwidget.h" %End public: - QgsCodeEditorDockWidget( const QString &windowGeometrySettingsKey = QString(), bool usePersistentWidget = false ); + QgsCodeEditorDockWidget( const QString &dockId = QString(), bool usePersistentWidget = false ); %Docstring Constructor for QgsCodeEditorDockWidget, with the specified window geometry settings key. diff --git a/src/app/3d/qgs3dmapcanvaswidget.cpp b/src/app/3d/qgs3dmapcanvaswidget.cpp index c7ff142b85f..f69f8463cd7 100644 --- a/src/app/3d/qgs3dmapcanvaswidget.cpp +++ b/src/app/3d/qgs3dmapcanvaswidget.cpp @@ -367,7 +367,8 @@ Qgs3DMapCanvasWidget::Qgs3DMapCanvasWidget( const QString &name, bool isDocked ) onTotalPendingJobsCountChanged(); - mDockableWidgetHelper = new QgsDockableWidgetHelper( isDocked, mCanvasName, this, QgisApp::instance() ); + mDockableWidgetHelper = new QgsDockableWidgetHelper( mCanvasName, this, QgisApp::instance(), mCanvasName, QStringList(), isDocked ? QgsDockableWidgetHelper::OpeningMode::ForceDocked : QgsDockableWidgetHelper::OpeningMode::RespectSetting ); + if ( QDialog *dialog = mDockableWidgetHelper->dialog() ) { QFontMetrics fm( font() ); diff --git a/src/app/elevation/qgselevationprofilewidget.cpp b/src/app/elevation/qgselevationprofilewidget.cpp index 5975a409c52..1d21f04e8d9 100644 --- a/src/app/elevation/qgselevationprofilewidget.cpp +++ b/src/app/elevation/qgselevationprofilewidget.cpp @@ -457,7 +457,8 @@ QgsElevationProfileWidget::QgsElevationProfileWidget( const QString &name ) } ); setLayout( layout ); - mDockableWidgetHelper = new QgsDockableWidgetHelper( true, mCanvasName, this, QgisApp::instance(), Qt::BottomDockWidgetArea, QStringList(), true ); + mDockableWidgetHelper = new QgsDockableWidgetHelper( mCanvasName, this, QgisApp::instance(), mCanvasName, QStringList(), QgsDockableWidgetHelper::OpeningMode::RespectSetting, false, Qt::DockWidgetArea::BottomDockWidgetArea, QgsDockableWidgetHelper::Option::RaiseTab ); + QToolButton *toggleButton = mDockableWidgetHelper->createDockUndockToolButton(); toggleButton->setToolTip( tr( "Dock Elevation Profile View" ) ); toolBar->addWidget( toggleButton ); diff --git a/src/app/qgsmapcanvasdockwidget.cpp b/src/app/qgsmapcanvasdockwidget.cpp index d6d455fd472..6843039d716 100644 --- a/src/app/qgsmapcanvasdockwidget.cpp +++ b/src/app/qgsmapcanvasdockwidget.cpp @@ -243,7 +243,7 @@ QgsMapCanvasDockWidget::QgsMapCanvasDockWidget( const QString &name, QWidget *pa connect( QgsProject::instance()->mapThemeCollection(), &QgsMapThemeCollection::mapThemeRenamed, this, &QgsMapCanvasDockWidget::currentMapThemeRenamed ); - mDockableWidgetHelper = new QgsDockableWidgetHelper( isDocked, mCanvasName, this, QgisApp::instance(), Qt::RightDockWidgetArea ); + mDockableWidgetHelper = new QgsDockableWidgetHelper( mCanvasName, this, QgisApp::instance(), mCanvasName, QStringList(), isDocked ? QgsDockableWidgetHelper::OpeningMode::ForceDocked : QgsDockableWidgetHelper::OpeningMode::RespectSetting ); QToolButton *toggleButton = mDockableWidgetHelper->createDockUndockToolButton(); toggleButton->setToolTip( tr( "Dock 2D Map View" ) ); mToolbar->addWidget( toggleButton ); diff --git a/src/gui/codeeditors/qgscodeeditordockwidget.cpp b/src/gui/codeeditors/qgscodeeditordockwidget.cpp index 1d5f4758df1..60bb09fc55e 100644 --- a/src/gui/codeeditors/qgscodeeditordockwidget.cpp +++ b/src/gui/codeeditors/qgscodeeditordockwidget.cpp @@ -17,10 +17,24 @@ #include "moc_qgscodeeditordockwidget.cpp" #include "qgsdockablewidgethelper.h" -QgsCodeEditorDockWidget::QgsCodeEditorDockWidget( const QString &windowGeometrySettingsKey, bool usePersistentWidget ) +QgsCodeEditorDockWidget::QgsCodeEditorDockWidget( const QString &dockId, bool usePersistentWidget ) : QWidget( nullptr ) { - mDockableWidgetHelper = new QgsDockableWidgetHelper( true, tr( "Code Editor" ), this, QgsDockableWidgetHelper::sOwnerWindow, Qt::BottomDockWidgetArea, QStringList(), true, windowGeometrySettingsKey, usePersistentWidget ); + QgsDockableWidgetHelper::Options options = QgsDockableWidgetHelper::Option::RaiseTab; + if ( usePersistentWidget ) + options.setFlag( QgsDockableWidgetHelper::Option::PermanentWidget ); + + mDockableWidgetHelper = new QgsDockableWidgetHelper( + tr( "Code Editor" ), + this, + QgsDockableWidgetHelper::sOwnerWindow, + dockId, + QStringList(), + QgsDockableWidgetHelper::OpeningMode::RespectSetting, + true, + Qt::BottomDockWidgetArea, + options + ); mDockToggleButton = mDockableWidgetHelper->createDockUndockToolButton(); mDockToggleButton->setToolTip( tr( "Dock Code Editor" ) ); diff --git a/src/gui/codeeditors/qgscodeeditordockwidget.h b/src/gui/codeeditors/qgscodeeditordockwidget.h index 562120d9d30..572535858fe 100644 --- a/src/gui/codeeditors/qgscodeeditordockwidget.h +++ b/src/gui/codeeditors/qgscodeeditordockwidget.h @@ -41,7 +41,7 @@ class GUI_EXPORT QgsCodeEditorDockWidget : public QWidget * * If \a usePersistentWidget is TRUE then the widget (either as a dock or window) cannot be destroyed and must be hidden instead. */ - QgsCodeEditorDockWidget( const QString &windowGeometrySettingsKey = QString(), bool usePersistentWidget = false ); + QgsCodeEditorDockWidget( const QString &dockId = QString(), bool usePersistentWidget = false ); ~QgsCodeEditorDockWidget() override; /** diff --git a/src/gui/qgsdockablewidgethelper.cpp b/src/gui/qgsdockablewidgethelper.cpp index eebf5ef3bb9..abfb0731114 100644 --- a/src/gui/qgsdockablewidgethelper.cpp +++ b/src/gui/qgsdockablewidgethelper.cpp @@ -18,7 +18,6 @@ #include "qgsdockwidget.h" #include "qgsapplication.h" -#include "qgssettings.h" #include #include @@ -27,30 +26,14 @@ ///@cond PRIVATE const QgsSettingsEntryBool *QgsDockableWidgetHelper::sSettingsIsDocked = new QgsSettingsEntryBool( QStringLiteral( "is-docked" ), QgsDockableWidgetHelper::sTtreeDockConfigs, false ); -const QgsSettingsEntryVariant *QgsDockableWidgetHelper::sSettingsWindowGeometry = new QgsSettingsEntryVariant( QStringLiteral( "geometry" ), QgsDockableWidgetHelper::sTtreeDockConfigs ); -const QgsSettingsEntryEnumFlag *QgsDockableWidgetHelper::sSettingsDockArea = new QgsSettingsEntryEnumFlag( QStringLiteral( "area" ), QgsDockableWidgetHelper::sTtreeDockConfigs, Qt::RightDockWidgetArea ); +const QgsSettingsEntryVariant *QgsDockableWidgetHelper::sSettingsDockGeometry = new QgsSettingsEntryVariant( QStringLiteral( "dock-geometry" ), QgsDockableWidgetHelper::sTtreeDockConfigs ); +const QgsSettingsEntryVariant *QgsDockableWidgetHelper::sSettingsDialogGeometry = new QgsSettingsEntryVariant( QStringLiteral( "dialog-geometry" ), QgsDockableWidgetHelper::sTtreeDockConfigs ); +const QgsSettingsEntryEnumFlag *QgsDockableWidgetHelper::sSettingsDockArea = new QgsSettingsEntryEnumFlag( QStringLiteral( "dock-area" ), QgsDockableWidgetHelper::sTtreeDockConfigs, Qt::RightDockWidgetArea ); std::function QgsDockableWidgetHelper::sAddTabifiedDockWidgetFunction = []( Qt::DockWidgetArea, QDockWidget *, const QStringList &, bool ) {}; std::function QgsDockableWidgetHelper::sAppStylesheetFunction = [] { return QString(); }; QMainWindow *QgsDockableWidgetHelper::sOwnerWindow = nullptr; -QgsDockableWidgetHelper::QgsDockableWidgetHelper( bool isDocked, const QString &windowTitle, QWidget *widget, QMainWindow *ownerWindow, Qt::DockWidgetArea defaultDockArea, const QStringList &tabifyWith, bool raiseTab, const QString &windowGeometrySettingsKey, bool usePersistentWidget ) - : QObject( nullptr ) - , mWidget( widget ) - , mDialogGeometry( 0, 0, 0, 0 ) - , mIsDockFloating( defaultDockArea == Qt::DockWidgetArea::NoDockWidgetArea ) - , mDockArea( defaultDockArea == Qt::DockWidgetArea::NoDockWidgetArea ? Qt::DockWidgetArea::RightDockWidgetArea : defaultDockArea ) - , mWindowTitle( windowTitle ) - , mOwnerWindow( ownerWindow ) - , mTabifyWith( tabifyWith ) - , mWindowGeometrySettingsKey( windowGeometrySettingsKey ) - , mUuid( QUuid::createUuid().toString() ) -{ - mOptions.setFlag( Option::RaiseTab, raiseTab ); - mOptions.setFlag( Option::PermanentWidget, usePersistentWidget ); - toggleDockMode( isDocked ); -} - QgsDockableWidgetHelper::QgsDockableWidgetHelper( const QString &windowTitle, QWidget *widget, QMainWindow *ownerWindow, const QString &dockId, const QStringList &tabifyWith, OpeningMode openingMode, bool defaultIsDocked, Qt::DockWidgetArea defaultDockArea, Options options ) : QObject( nullptr ) , mWidget( widget ) @@ -79,7 +62,7 @@ QgsDockableWidgetHelper::~QgsDockableWidgetHelper() { mDockGeometry = mDock->geometry(); if ( !mSettingKeyDockId.isEmpty() ) - sSettingsWindowGeometry->setValue( mDock->saveGeometry(), mSettingKeyDockId ); + sSettingsDockGeometry->setValue( mDock->saveGeometry(), mSettingKeyDockId ); mIsDockFloating = mDock->isFloating(); if ( mOwnerWindow ) mDockArea = mOwnerWindow->dockWidgetArea( mDock ); @@ -96,12 +79,8 @@ QgsDockableWidgetHelper::~QgsDockableWidgetHelper() { mDialogGeometry = mDialog->geometry(); - if ( !mWindowGeometrySettingsKey.isEmpty() ) - { - QgsSettings().setValue( mWindowGeometrySettingsKey, mDialog->saveGeometry() ); - } if ( !mSettingKeyDockId.isEmpty() ) - sSettingsWindowGeometry->setValue( mDialog->saveGeometry(), mSettingKeyDockId ); + sSettingsDialogGeometry->setValue( mDialog->saveGeometry(), mSettingKeyDockId ); mDialog->layout()->removeWidget( mWidget ); mDialog->deleteLater(); @@ -259,8 +238,8 @@ void QgsDockableWidgetHelper::toggleDockMode( bool docked ) if ( mDialog ) { // going from window -> dock, so save current window geometry - if ( !mWindowGeometrySettingsKey.isEmpty() ) - QgsSettings().setValue( mWindowGeometrySettingsKey, mDialog->saveGeometry() ); + if ( !mSettingKeyDockId.isEmpty() ) + sSettingsDialogGeometry->setValue( mDialog->saveGeometry(), mSettingKeyDockId ); mDialogGeometry = mDialog->geometry(); @@ -332,14 +311,9 @@ void QgsDockableWidgetHelper::toggleDockMode( bool docked ) vl->setContentsMargins( 0, 0, 0, 0 ); vl->addWidget( mWidget ); - if ( !mWindowGeometrySettingsKey.isEmpty() ) + if ( !mSettingKeyDockId.isEmpty() ) { - QgsSettings settings; - mDialog->restoreGeometry( settings.value( mWindowGeometrySettingsKey ).toByteArray() ); - } - else if ( !mSettingKeyDockId.isEmpty() ) - { - mDialog->restoreGeometry( sSettingsWindowGeometry->value( mSettingKeyDockId ).toByteArray() ); + mDialog->restoreGeometry( sSettingsDialogGeometry->value( mSettingKeyDockId ).toByteArray() ); } else { @@ -455,8 +429,8 @@ void QgsDockableWidgetHelper::setupDockWidget( const QStringList &tabSiblings ) // can only resize properly and set the dock geometry after pending events have been processed, // so queue the geometry setting on the end of the event loop QMetaObject::invokeMethod( mDock, [this] { - if (mIsDockFloating && sSettingsWindowGeometry->exists(mSettingKeyDockId)) - mDock->restoreGeometry( sSettingsWindowGeometry->value(mSettingKeyDockId).toByteArray() ); + if (mIsDockFloating && sSettingsDockGeometry->exists( mSettingKeyDockId ) ) + mDock->restoreGeometry( sSettingsDockGeometry->value( mSettingKeyDockId ).toByteArray() ); else mDock->setGeometry( mDockGeometry ); }, Qt::QueuedConnection ); } diff --git a/src/gui/qgsdockablewidgethelper.h b/src/gui/qgsdockablewidgethelper.h index 5a671ea5453..2f4e469cbc4 100644 --- a/src/gui/qgsdockablewidgethelper.h +++ b/src/gui/qgsdockablewidgethelper.h @@ -57,7 +57,8 @@ class GUI_EXPORT QgsDockableWidgetHelper : public QObject static inline QgsSettingsTreeNode *sTtreeDockConfigs = QgsGui::sTtreeWidgetGeometry->createNamedListNode( QStringLiteral( "docks" ) ) SIP_SKIP; static const QgsSettingsEntryBool *sSettingsIsDocked SIP_SKIP; - static const QgsSettingsEntryVariant *sSettingsWindowGeometry SIP_SKIP; + static const QgsSettingsEntryVariant *sSettingsDockGeometry SIP_SKIP; + static const QgsSettingsEntryVariant *sSettingsDialogGeometry SIP_SKIP; static const QgsSettingsEntryEnumFlag *sSettingsDockArea SIP_SKIP; Q_OBJECT @@ -77,14 +78,6 @@ class GUI_EXPORT QgsDockableWidgetHelper : public QObject Q_ENUM( Option ) Q_DECLARE_FLAGS( Options, Option ) - /** - * Constructs an object that is responsible of making a docked widget or a window titled \a windowTitle that holds the \a widget - * The ownership of \a widget is returned to \a ownerWindow once the object is destroyed. - * - * If \a usePersistentWidget is TRUE then the \a widget (either as a dock or window) cannot be destroyed and must be hidden instead. - */ - QgsDockableWidgetHelper( bool isDocked, const QString &windowTitle, QWidget *widget, QMainWindow *ownerWindow, Qt::DockWidgetArea defaultDockArea = Qt::NoDockWidgetArea, const QStringList &tabifyWith = QStringList(), bool raiseTab = false, const QString &windowGeometrySettingsKey = QString(), bool usePersistentWidget = false ); - /** * Constructs an object that is responsible of making a docked widget or a window titled \a windowTitle that holds the \a widget * The ownership of \a widget is returned to \a ownerWindow once the object is destroyed. @@ -193,8 +186,6 @@ class GUI_EXPORT QgsDockableWidgetHelper : public QObject QStringList mTabifyWith; Options mOptions; - QString mWindowGeometrySettingsKey; - // Unique identifier of dock QString mUuid;