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 +