diff --git a/python/gui/symbology/qgssymbollevelsdialog.sip b/python/gui/symbology/qgssymbollevelsdialog.sip index 67173f99466..7e703ba3ded 100644 --- a/python/gui/symbology/qgssymbollevelsdialog.sip +++ b/python/gui/symbology/qgssymbollevelsdialog.sip @@ -9,31 +9,40 @@ -class QgsSymbolLevelsDialog : QDialog +class QgsSymbolLevelsWidget : QgsPanelWidget { +%Docstring + A widget which allows the user to modify the rendering order of symbol layers. +.. seealso:: QgsSymbolLevelsDialog +.. versionadded:: 3.0 +%End %TypeHeaderCode #include "qgssymbollevelsdialog.h" %End public: - QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent = 0 ); + QgsSymbolLevelsWidget( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent /TransferThis/ = 0 ); %Docstring -Constructor for QgsSymbolLevelsDialog +Constructor for QgsSymbolLevelsWidget %End - ~QgsSymbolLevelsDialog(); - bool usingLevels() const; %Docstring +Returns whether the level ordering is enabled :rtype: bool %End void setForceOrderingEnabled( bool enabled ); +%Docstring + Sets whether the level ordering is always forced on and hide the checkbox (used by rule-based renderer) + \param enabled toggle level ordering +%End public slots: - void updateUi(); - - void renderingPassChanged( int row, int column ); + void apply(); +%Docstring +Apply button +%End protected: @@ -41,7 +50,28 @@ Constructor for QgsSymbolLevelsDialog private: - QgsSymbolLevelsDialog(); + QgsSymbolLevelsWidget(); + +}; + +class QgsSymbolLevelsDialog : QDialog +{ +%Docstring + A dialog which allows the user to modify the rendering order of symbol layers. +.. seealso:: QgsSymbolLevelsWidget +%End + +%TypeHeaderCode +#include "qgssymbollevelsdialog.h" +%End + public: + + QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent /TransferThis/ = 0 ); +%Docstring +Constructor for QgsSymbolLevelsDialog. +%End + + void setForceOrderingEnabled( bool enabled ); }; diff --git a/src/gui/symbology/qgsrendererwidget.cpp b/src/gui/symbology/qgsrendererwidget.cpp index 0518aee5f0a..f288ccc00ce 100644 --- a/src/gui/symbology/qgsrendererwidget.cpp +++ b/src/gui/symbology/qgsrendererwidget.cpp @@ -251,7 +251,18 @@ void QgsRendererWidget::changeSymbolAngle() void QgsRendererWidget::showSymbolLevelsDialog( QgsFeatureRenderer *r ) { - QgsSymbolLevelsDialog dlg( r, r->usingSymbolLevels(), this ); + QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this ); + if ( panel && panel->dockMode() ) + { + QgsSymbolLevelsWidget *widget = new QgsSymbolLevelsWidget( r, r->usingSymbolLevels(), panel ); + widget->setPanelTitle( tr( "Symbol Levels" ) ); + connect( widget, &QgsPanelWidget::widgetChanged, widget, &QgsSymbolLevelsWidget::apply ); + connect( widget, &QgsPanelWidget::widgetChanged, this, &QgsPanelWidget::widgetChanged ); + panel->openPanel( widget ); + return; + } + + QgsSymbolLevelsDialog dlg( r, r->usingSymbolLevels(), panel ); if ( dlg.exec() ) { emit widgetChanged(); diff --git a/src/gui/symbology/qgsrulebasedrendererwidget.cpp b/src/gui/symbology/qgsrulebasedrendererwidget.cpp index bc1fc68d567..13f13997793 100644 --- a/src/gui/symbology/qgsrulebasedrendererwidget.cpp +++ b/src/gui/symbology/qgsrulebasedrendererwidget.cpp @@ -396,7 +396,19 @@ void QgsRuleBasedRendererWidget::keyPressEvent( QKeyEvent *event ) void QgsRuleBasedRendererWidget::setRenderingOrder() { - QgsSymbolLevelsDialog dlg( mRenderer, true, this ); + QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this ); + if ( panel && panel->dockMode() ) + { + QgsSymbolLevelsWidget *widget = new QgsSymbolLevelsWidget( mRenderer, true, panel ); + widget->setForceOrderingEnabled( true ); + widget->setPanelTitle( tr( "Symbol Levels" ) ); + connect( widget, &QgsPanelWidget::widgetChanged, widget, &QgsSymbolLevelsWidget::apply ); + connect( widget, &QgsPanelWidget::widgetChanged, this, &QgsPanelWidget::widgetChanged ); + panel->openPanel( widget ); + return; + } + + QgsSymbolLevelsDialog dlg( mRenderer, true, panel ); dlg.setForceOrderingEnabled( true ); if ( dlg.exec() ) { diff --git a/src/gui/symbology/qgssymbollevelsdialog.cpp b/src/gui/symbology/qgssymbollevelsdialog.cpp index 16c54f90cef..cc8991ba163 100644 --- a/src/gui/symbology/qgssymbollevelsdialog.cpp +++ b/src/gui/symbology/qgssymbollevelsdialog.cpp @@ -23,28 +23,23 @@ #include #include #include - +#include //////////////// -QgsSymbolLevelsDialog::QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent ) - : QDialog( parent ) +QgsSymbolLevelsWidget::QgsSymbolLevelsWidget( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent ) + : QgsPanelWidget( parent ) , mRenderer( renderer ) , mForceOrderingEnabled( false ) { setupUi( this ); - QgsSettings settings; - restoreGeometry( settings.value( QStringLiteral( "Windows/symbolLevelsDlg/geometry" ) ).toByteArray() ); - tableLevels->setItemDelegate( new SpinBoxDelegate( this ) ); chkEnable->setChecked( usingSymbolLevels ); - connect( chkEnable, &QAbstractButton::clicked, this, &QgsSymbolLevelsDialog::updateUi ); - connect( buttonBox, &QDialogButtonBox::accepted, this, &QgsSymbolLevelsDialog::apply ); - connect( buttonBox, &QDialogButtonBox::helpRequested, this, &QgsSymbolLevelsDialog::showHelp ); + connect( chkEnable, &QAbstractButton::clicked, this, &QgsSymbolLevelsWidget::updateUi ); if ( mRenderer ) { @@ -89,16 +84,10 @@ QgsSymbolLevelsDialog::QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool populateTable(); - connect( tableLevels, &QTableWidget::cellChanged, this, &QgsSymbolLevelsDialog::renderingPassChanged ); + connect( tableLevels, &QTableWidget::cellChanged, this, &QgsSymbolLevelsWidget::renderingPassChanged ); } -QgsSymbolLevelsDialog::~QgsSymbolLevelsDialog() -{ - QgsSettings settings; - settings.setValue( QStringLiteral( "Windows/symbolLevelsDlg/geometry" ), saveGeometry() ); -} - -void QgsSymbolLevelsDialog::populateTable() +void QgsSymbolLevelsWidget::populateTable() { for ( int row = 0; row < mList.count(); row++ ) { @@ -128,12 +117,13 @@ void QgsSymbolLevelsDialog::populateTable() } -void QgsSymbolLevelsDialog::updateUi() +void QgsSymbolLevelsWidget::updateUi() { tableLevels->setEnabled( chkEnable->isChecked() ); + emit widgetChanged(); } -void QgsSymbolLevelsDialog::apply() +void QgsSymbolLevelsWidget::apply() { for ( int i = 0; i < mList.count(); i++ ) { @@ -147,7 +137,7 @@ void QgsSymbolLevelsDialog::apply() mRenderer->setUsingSymbolLevels( usingLevels() ); } -void QgsSymbolLevelsDialog::setDefaultLevels() +void QgsSymbolLevelsWidget::setDefaultLevels() { for ( int i = 0; i < mList.count(); i++ ) { @@ -159,12 +149,12 @@ void QgsSymbolLevelsDialog::setDefaultLevels() } } -bool QgsSymbolLevelsDialog::usingLevels() const +bool QgsSymbolLevelsWidget::usingLevels() const { return chkEnable->isChecked(); } -void QgsSymbolLevelsDialog::renderingPassChanged( int row, int column ) +void QgsSymbolLevelsWidget::renderingPassChanged( int row, int column ) { if ( row < 0 || row >= mList.count() ) return; @@ -172,9 +162,11 @@ void QgsSymbolLevelsDialog::renderingPassChanged( int row, int column ) if ( column < 0 || column > sym->symbolLayerCount() ) return; sym->symbolLayer( column - 1 )->setRenderingPass( tableLevels->item( row, column )->text().toInt() ); + + emit widgetChanged(); } -void QgsSymbolLevelsDialog::setForceOrderingEnabled( bool enabled ) +void QgsSymbolLevelsWidget::setForceOrderingEnabled( bool enabled ) { mForceOrderingEnabled = enabled; if ( enabled ) @@ -186,11 +178,24 @@ void QgsSymbolLevelsDialog::setForceOrderingEnabled( bool enabled ) chkEnable->show(); } -void QgsSymbolLevelsDialog::showHelp() +QgsSymbolLevelsDialog::QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent ) + : QDialog( parent ) { - QgsHelp::openHelp( QStringLiteral( "working_with_vector/vector_properties.html#symbols-levels" ) ); + QVBoxLayout *vLayout = new QVBoxLayout(); + mWidget = new QgsSymbolLevelsWidget( renderer, usingSymbolLevels ); + vLayout->addWidget( mWidget ); + QDialogButtonBox *bbox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal ); + connect( bbox, &QDialogButtonBox::accepted, mWidget, &QgsSymbolLevelsWidget::apply ); + connect( bbox, &QDialogButtonBox::accepted, this, &QgsSymbolLevelsDialog::accept ); + connect( bbox, &QDialogButtonBox::rejected, this, &QgsSymbolLevelsDialog::reject ); + vLayout->addWidget( bbox ); + setLayout( vLayout ); } +void QgsSymbolLevelsDialog::setForceOrderingEnabled( bool enabled ) +{ + mWidget->setForceOrderingEnabled( enabled ); +} /// @cond PRIVATE diff --git a/src/gui/symbology/qgssymbollevelsdialog.h b/src/gui/symbology/qgssymbollevelsdialog.h index 503b0d47aa7..a7d0cc11717 100644 --- a/src/gui/symbology/qgssymbollevelsdialog.h +++ b/src/gui/symbology/qgssymbollevelsdialog.h @@ -21,38 +21,41 @@ #include #include "qgshelp.h" +#include "qgspanelwidget.h" #include "qgsrenderer.h" #include "ui_qgssymbollevelsdialogbase.h" #include "qgis_gui.h" -/** \ingroup gui - * \class QgsSymbolLevelsDialog +/** \class QgsSymbolLevelsWidget + * \ingroup gui + * A widget which allows the user to modify the rendering order of symbol layers. + * \see QgsSymbolLevelsDialog + * \since QGIS 3.0 */ -class GUI_EXPORT QgsSymbolLevelsDialog : public QDialog, private Ui::QgsSymbolLevelsDialogBase +class GUI_EXPORT QgsSymbolLevelsWidget : public QgsPanelWidget, private Ui::QgsSymbolLevelsDialogBase { Q_OBJECT public: - //! Constructor for QgsSymbolLevelsDialog - QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent = nullptr ); - - ~QgsSymbolLevelsDialog(); + //! Constructor for QgsSymbolLevelsWidget + QgsSymbolLevelsWidget( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent SIP_TRANSFERTHIS = 0 ); + //! Returns whether the level ordering is enabled bool usingLevels() const; - // used by rule-based renderer (to hide checkbox to enable/disable ordering) + /** Sets whether the level ordering is always forced on and hide the checkbox (used by rule-based renderer) + * \param enabled toggle level ordering + */ void setForceOrderingEnabled( bool enabled ); public slots: - void updateUi(); - - void renderingPassChanged( int row, int column ); - - private slots: //! Apply button void apply(); - void showHelp(); + private slots: + void updateUi(); + + void renderingPassChanged( int row, int column ); protected: //! \note not available in Python bindings @@ -71,11 +74,33 @@ class GUI_EXPORT QgsSymbolLevelsDialog : public QDialog, private Ui::QgsSymbolLe private: #ifdef SIP_RUN - QgsSymbolLevelsDialog(); + QgsSymbolLevelsWidget(); #endif }; +/** \class QgsSymbolLevelsDialog + * \ingroup gui + * A dialog which allows the user to modify the rendering order of symbol layers. + * \see QgsSymbolLevelsWidget +*/ +class GUI_EXPORT QgsSymbolLevelsDialog : public QDialog +{ + Q_OBJECT + public: + + //! Constructor for QgsSymbolLevelsDialog. + QgsSymbolLevelsDialog( QgsFeatureRenderer *renderer, bool usingSymbolLevels, QWidget *parent SIP_TRANSFERTHIS = 0 ); + + // used by rule-based renderer (to hide checkbox to enable/disable ordering) + void setForceOrderingEnabled( bool enabled ); + + private: + + QgsSymbolLevelsWidget *mWidget = nullptr; + +}; + #ifndef SIP_RUN ///@cond PRIVATE diff --git a/src/ui/qgssymbollevelsdialogbase.ui b/src/ui/qgssymbollevelsdialogbase.ui index 589530ee4eb..a312ed4a1dd 100644 --- a/src/ui/qgssymbollevelsdialogbase.ui +++ b/src/ui/qgssymbollevelsdialogbase.ui @@ -1,7 +1,7 @@ QgsSymbolLevelsDialogBase - + 0 @@ -41,51 +41,14 @@ - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok - - - + + + QgsPanelWidget + QWidget +
qgspanelwidget.h
+
+
- - - buttonBox - accepted() - QgsSymbolLevelsDialogBase - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - QgsSymbolLevelsDialogBase - reject() - - - 316 - 260 - - - 286 - 274 - - - -