2525#include " qgslogger.h"
2626#include " qstring.h"
2727#include " qgssinglesymbolrendererv2.h"
28+ #include " qgspanelwidget.h"
2829
2930#include < QKeyEvent>
3031#include < QMenu>
@@ -176,15 +177,15 @@ void QgsRuleBasedRendererV2Widget::editRule( const QModelIndex& index )
176177{
177178 if ( !index.isValid () )
178179 return ;
180+
179181 QgsRuleBasedRendererV2::Rule* rule = mModel ->ruleForIndex ( index );
180182
181- QgsRendererRulePropsDialog dlg ( rule, mLayer , mStyle , this , mMapCanvas );
182- if ( dlg.exec () )
183- {
184- // model should know about the change and emit dataChanged signal for the view
185- mModel ->updateRule ( index.parent (), index.row () );
186- mModel ->clearFeatureCounts ();
187- }
183+ QgsRendererRulePropsWidget* widget = new QgsRendererRulePropsWidget ( rule, mLayer , mStyle , this , mMapCanvas );
184+ widget->setDockMode ( true );
185+ widget->setPanelTitle (tr (" Edit rule" ));
186+ connect ( widget, SIGNAL (panelAccepted (QgsPanelWidget*)), this , SLOT (ruleWidgetPanelAccepted (QgsPanelWidget*)));
187+ connect ( widget, SIGNAL (widgetChanged ()), this , SLOT (liveUpdateRuleFromPanel ()));
188+ openPanel (widget);
188189}
189190
190191void QgsRuleBasedRendererV2Widget::removeRule ()
@@ -490,6 +491,22 @@ void QgsRuleBasedRendererV2Widget::paste()
490491 mModel ->dropMimeData ( mime, Qt::CopyAction, index.row (), index.column (), index.parent () );
491492}
492493
494+ void QgsRuleBasedRendererV2Widget::ruleWidgetPanelAccepted (QgsPanelWidget *panel)
495+ {
496+ QgsRendererRulePropsWidget* widget = qobject_cast<QgsRendererRulePropsWidget*>( panel );
497+ widget->apply ();
498+
499+ // model should know about the change and emit dataChanged signal for the view
500+ QModelIndex index = viewRules->selectionModel ()->currentIndex ();
501+ mModel ->updateRule ( index.parent (), index.row () );
502+ mModel ->clearFeatureCounts ();
503+ }
504+
505+ void QgsRuleBasedRendererV2Widget::liveUpdateRuleFromPanel ()
506+ {
507+ ruleWidgetPanelAccepted ( qobject_cast<QgsPanelWidget*>(sender ()));
508+ }
509+
493510
494511void QgsRuleBasedRendererV2Widget::countFeatures ()
495512{
@@ -592,21 +609,15 @@ void QgsRuleBasedRendererV2Widget::selectedRulesChanged()
592609
593610// /////////
594611
595- QgsRendererRulePropsDialog::QgsRendererRulePropsDialog ( QgsRuleBasedRendererV2::Rule* rule, QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent , QgsMapCanvas* mapCanvas )
596- : QDialog ( parent )
612+ QgsRendererRulePropsWidget::QgsRendererRulePropsWidget ( QgsRuleBasedRendererV2::Rule* rule, QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent , QgsMapCanvas* mapCanvas )
613+ : QgsPanelWidget ( parent )
597614 , mRule( rule )
598615 , mLayer( layer )
599616 , mSymbolSelector( nullptr )
600617 , mSymbol( nullptr )
601618 , mMapCanvas( mapCanvas )
602619{
603620 setupUi ( this );
604- #ifdef Q_OS_MAC
605- setWindowModality ( Qt::WindowModal );
606- #endif
607-
608- connect ( buttonBox, SIGNAL ( accepted () ), this , SLOT ( accept () ) );
609- connect ( buttonBox, SIGNAL ( rejected () ), this , SLOT ( reject () ) );
610621
611622 editFilter->setText ( mRule ->filterExpression () );
612623 editFilter->setToolTip ( mRule ->filterExpression () );
@@ -636,27 +647,70 @@ QgsRendererRulePropsDialog::QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::
636647 mSymbol = QgsSymbolV2::defaultSymbol ( mLayer ->geometryType () );
637648 }
638649
639- mSymbolSelector = new QgsSymbolV2SelectorDialog ( mSymbol , style, mLayer , this , true );
650+ mSymbolSelector = new QgsSymbolV2SelectorWidget ( mSymbol , style, mLayer , this );
640651 mSymbolSelector ->setMapCanvas ( mMapCanvas );
652+ connect (mSymbolSelector , SIGNAL (widgetChanged ()), this , SIGNAL (widgetChanged ()));
653+ connect ( mSymbolSelector , SIGNAL (showPanel (QgsPanelWidget*)), this , SLOT (openPanel (QgsPanelWidget*)));
654+
641655 QVBoxLayout* l = new QVBoxLayout;
642656 l->addWidget ( mSymbolSelector );
643657 groupSymbol->setLayout ( l );
644658
645659 connect ( btnExpressionBuilder, SIGNAL ( clicked () ), this , SLOT ( buildExpression () ) );
646660 connect ( btnTestFilter, SIGNAL ( clicked () ), this , SLOT ( testFilter () ) );
647661
662+ }
663+
664+ QgsRendererRulePropsWidget::~QgsRendererRulePropsWidget ()
665+ {
666+
667+ }
668+
669+ QgsRendererRulePropsDialog::QgsRendererRulePropsDialog (QgsRuleBasedRendererV2::Rule *rule, QgsVectorLayer *layer, QgsStyleV2 *style, QWidget *parent, QgsMapCanvas *mapCanvas)
670+ : QDialog(parent)
671+ {
672+
673+ #ifdef Q_OS_MAC
674+ setWindowModality ( Qt::WindowModal );
675+ #endif
676+ this ->setLayout (new QVBoxLayout ());
677+
678+ buttonBox = new QDialogButtonBox (QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
679+ mPropsWidget = new QgsRendererRulePropsWidget (rule, layer, style, this , mapCanvas);
680+
681+ this ->layout ()->addWidget (mPropsWidget );
682+ this ->layout ()->addWidget (buttonBox);
683+
684+ connect ( buttonBox, SIGNAL ( accepted () ), this , SLOT ( accept () ) );
685+ connect ( buttonBox, SIGNAL ( rejected () ), this , SLOT ( reject () ) );
686+
648687 QSettings settings;
649688 restoreGeometry ( settings.value ( " /Windows/QgsRendererRulePropsDialog/geometry" ).toByteArray () );
650689}
651690
652691QgsRendererRulePropsDialog::~QgsRendererRulePropsDialog ()
653692{
654- delete mSymbol ;
655693 QSettings settings;
656694 settings.setValue ( " /Windows/QgsRendererRulePropsDialog/geometry" , saveGeometry () );
657695}
658696
697+ void QgsRendererRulePropsDialog::testFilter ()
698+ {
699+ mPropsWidget ->testFilter ();
700+ }
701+
659702void QgsRendererRulePropsDialog::buildExpression ()
703+ {
704+ mPropsWidget ->buildExpression ();
705+ }
706+
707+ void QgsRendererRulePropsDialog::accept ()
708+ {
709+ mPropsWidget ->apply ();
710+ QDialog::accept ();
711+ }
712+
713+ void QgsRendererRulePropsWidget::buildExpression ()
660714{
661715 QgsExpressionContext context;
662716 context << QgsExpressionContextUtils::globalScope ()
@@ -679,7 +733,7 @@ void QgsRendererRulePropsDialog::buildExpression()
679733 editFilter->setText ( dlg.expressionText () );
680734}
681735
682- void QgsRendererRulePropsDialog ::testFilter ()
736+ void QgsRendererRulePropsWidget ::testFilter ()
683737{
684738 QgsExpression filter ( editFilter->text () );
685739 if ( filter.hasParserError () )
@@ -731,7 +785,7 @@ void QgsRendererRulePropsDialog::testFilter()
731785 QMessageBox::information ( this , tr ( " Filter" ), tr ( " Filter returned %n feature(s)" , " number of filtered features" , count ) );
732786}
733787
734- void QgsRendererRulePropsDialog::accept ()
788+ void QgsRendererRulePropsWidget::apply ()
735789{
736790 mRule ->setFilterExpression ( editFilter->text () );
737791 mRule ->setLabel ( editLabel->text () );
@@ -740,8 +794,12 @@ void QgsRendererRulePropsDialog::accept()
740794 mRule ->setScaleMinDenom ( groupScale->isChecked () ? mScaleRangeWidget ->minimumScaleDenom () : 0 );
741795 mRule ->setScaleMaxDenom ( groupScale->isChecked () ? mScaleRangeWidget ->maximumScaleDenom () : 0 );
742796 mRule ->setSymbol ( groupSymbol->isChecked () ? mSymbol ->clone () : nullptr );
797+ }
743798
744- QDialog::accept ();
799+ void QgsRendererRulePropsWidget::setDockMode (bool dockMode)
800+ {
801+ QgsPanelWidget::setDockMode ( dockMode );
802+ mSymbolSelector ->setDockMode ( true );
745803}
746804
747805// //////
0 commit comments