diff --git a/src/gui/symbology/qgsrulebasedrendererwidget.cpp b/src/gui/symbology/qgsrulebasedrendererwidget.cpp
index 597ae4cfb32..0e01492567b 100644
--- a/src/gui/symbology/qgsrulebasedrendererwidget.cpp
+++ b/src/gui/symbology/qgsrulebasedrendererwidget.cpp
@@ -181,12 +181,25 @@ void QgsRuleBasedRendererWidget::editRule( const QModelIndex &index )
return;
QgsRuleBasedRenderer::Rule *rule = mModel->ruleForIndex( index );
+ QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this );
- QgsRendererRulePropsWidget *widget = new QgsRendererRulePropsWidget( rule, mLayer, mStyle, this, mContext );
- widget->setPanelTitle( tr( "Edit Rule" ) );
- connect( widget, &QgsPanelWidget::panelAccepted, this, &QgsRuleBasedRendererWidget::ruleWidgetPanelAccepted );
- connect( widget, &QgsPanelWidget::widgetChanged, this, &QgsRuleBasedRendererWidget::liveUpdateRuleFromPanel );
- openPanel( widget );
+ if ( panel && panel->dockMode() )
+ {
+ QgsRendererRulePropsWidget *widget = new QgsRendererRulePropsWidget( rule, mLayer, mStyle, this, mContext );//panel?
+ widget->setPanelTitle( tr( "Edit Rule" ) );
+ connect( widget, &QgsPanelWidget::panelAccepted, this, &QgsRuleBasedRendererWidget::ruleWidgetPanelAccepted );
+ connect( widget, &QgsPanelWidget::widgetChanged, this, &QgsRuleBasedRendererWidget::liveUpdateRuleFromPanel );
+ openPanel( widget );
+ return;
+ }
+
+ QgsRendererRulePropsDialog dlg( rule, mLayer, mStyle, this, mContext );
+ if ( dlg.exec() )
+ {
+ mModel->updateRule( index.parent(), index.row() );
+ mModel->clearFeatureCounts();
+ emit widgetChanged();
+ }
}
void QgsRuleBasedRendererWidget::removeRule()
@@ -666,6 +679,8 @@ QgsRendererRulePropsWidget::QgsRendererRulePropsWidget( QgsRuleBasedRenderer::Ru
connect( mScaleRangeWidget, &QgsScaleRangeWidget::rangeChanged, this, &QgsPanelWidget::widgetChanged );
}
+#include "qgsvscrollarea.h"
+
QgsRendererRulePropsDialog::QgsRendererRulePropsDialog( QgsRuleBasedRenderer::Rule *rule, QgsVectorLayer *layer, QgsStyle *style, QWidget *parent, const QgsSymbolWidgetContext &context )
: QDialog( parent )
{
@@ -673,16 +688,21 @@ QgsRendererRulePropsDialog::QgsRendererRulePropsDialog( QgsRuleBasedRenderer::Ru
#ifdef Q_OS_MAC
setWindowModality( Qt::WindowModal );
#endif
- this->setLayout( new QVBoxLayout() );
- buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel );
+ QVBoxLayout *layout = new QVBoxLayout( this );
+ QgsVScrollArea *scrollArea = new QgsVScrollArea( this );
+ layout->addWidget( scrollArea );
+
+ buttonBox = new QDialogButtonBox( QDialogButtonBox::Cancel | QDialogButtonBox::Help | QDialogButtonBox::Ok );
mPropsWidget = new QgsRendererRulePropsWidget( rule, layer, style, this, context );
- this->layout()->addWidget( mPropsWidget );
- this->layout()->addWidget( buttonBox );
+ scrollArea->setWidget( mPropsWidget );
+ layout->addWidget( buttonBox );
+ this->setWindowTitle( "Edit Rule" );
connect( buttonBox, &QDialogButtonBox::accepted, this, &QgsRendererRulePropsDialog::accept );
connect( buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject );
+ connect( buttonBox, &QDialogButtonBox::helpRequested, this, &QgsRendererRulePropsDialog::showHelp );
QgsSettings settings;
restoreGeometry( settings.value( QStringLiteral( "Windows/QgsRendererRulePropsDialog/geometry" ) ).toByteArray() );
@@ -710,6 +730,11 @@ void QgsRendererRulePropsDialog::accept()
QDialog::accept();
}
+void QgsRendererRulePropsDialog::showHelp()
+{
+ QgsHelp::openHelp( QStringLiteral( "working_with_vector/vector_properties.html#rule-based-rendering" ) );
+}
+
void QgsRendererRulePropsWidget::buildExpression()
{
diff --git a/src/gui/symbology/qgsrulebasedrendererwidget.h b/src/gui/symbology/qgsrulebasedrendererwidget.h
index 38d65201613..011966bfd83 100644
--- a/src/gui/symbology/qgsrulebasedrendererwidget.h
+++ b/src/gui/symbology/qgsrulebasedrendererwidget.h
@@ -273,6 +273,9 @@ class GUI_EXPORT QgsRendererRulePropsDialog : public QDialog
void buildExpression();
void accept() override;
+ private slots:
+ void showHelp();
+
private:
QgsRendererRulePropsWidget *mPropsWidget = nullptr;
QDialogButtonBox *buttonBox = nullptr;
diff --git a/src/ui/qgsrendererrulepropsdialogbase.ui b/src/ui/qgsrendererrulepropsdialogbase.ui
index 594bd622bb5..38c377c3b09 100644
--- a/src/ui/qgsrendererrulepropsdialogbase.ui
+++ b/src/ui/qgsrendererrulepropsdialogbase.ui
@@ -6,134 +6,115 @@
0
0
- 427
- 274
+ 376
+ 155
Form
-
+
-
-
-
- true
+
+
+ QFormLayout::ExpandingFieldsGrow
-
-
-
- 0
- 0
- 407
- 254
-
-
-
+
-
+
+
+ Label
+
+
+
+ -
+
+
+ -
+
+
+ Filter
+
+
+
+ -
+
-
-
-
- QFormLayout::ExpandingFieldsGrow
-
-
-
-
-
- Label
-
-
-
- -
-
-
- -
-
-
- Filter
-
-
-
- -
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- :/images/themes/default/mIconExpression.svg:/images/themes/default/mIconExpression.svg
-
-
-
- -
-
-
- Test
-
-
-
-
-
- -
-
-
- Description
-
-
-
- -
-
-
-
+
-
-
-
- Scale range
-
-
- true
-
-
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
+
-
+
0
0
-
- Symbol
+
+
+ :/images/themes/default/mIconExpression.svg:/images/themes/default/mIconExpression.svg
-
- true
+
+
+ -
+
+
+ Test
-
+
+ -
+
+
+ Description
+
+
+
+ -
+
+
+
+
+ -
+
+
+ Scale range
+
+
+ true
+
+
+ false
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Symbol
+
+
+ true
+