@@ -95,37 +95,9 @@ QgsRendererV2PropertiesDialog::QgsRendererV2PropertiesDialog( QgsVectorLayer* la
9595 }
9696
9797
98- connect ( buttonBox, SIGNAL ( accepted () ), this , SLOT ( onOK () ) );
99-
10098 // initialize registry's widget functions
10199 _initRendererWidgetFunctions ();
102100
103- // Blend mode
104- mBlendModeComboBox ->setBlendMode ( mLayer ->blendMode () );
105-
106- // Feature blend mode
107- mFeatureBlendComboBox ->setBlendMode ( mLayer ->featureBlendMode () );
108-
109- // Layer transparency
110- mLayerTransparencySlider ->setValue ( mLayer ->layerTransparency () );
111- mLayerTransparencySpnBx ->setValue ( mLayer ->layerTransparency () );
112-
113- // connect layer transparency slider and spin box
114- connect ( mLayerTransparencySlider , SIGNAL ( valueChanged ( int ) ), mLayerTransparencySpnBx , SLOT ( setValue ( int ) ) );
115- connect ( mLayerTransparencySpnBx , SIGNAL ( valueChanged ( int ) ), mLayerTransparencySlider , SLOT ( setValue ( int ) ) );
116-
117- // paint effect widget
118- if ( mLayer ->rendererV2 () )
119- {
120- if ( mLayer ->rendererV2 ()->paintEffect () )
121- {
122- mPaintEffect = mLayer ->rendererV2 ()->paintEffect ()->clone ();
123- mEffectWidget ->setPaintEffect ( mPaintEffect );
124- }
125-
126- mOrderBy = mLayer ->rendererV2 ()->orderBy ();
127- }
128-
129101 QgsRendererV2Registry* reg = QgsRendererV2Registry::instance ();
130102 QStringList renderers = reg->renderersList ();
131103 Q_FOREACH ( const QString& name, renderers )
@@ -136,34 +108,18 @@ QgsRendererV2PropertiesDialog::QgsRendererV2PropertiesDialog( QgsVectorLayer* la
136108
137109 cboRenderers->setCurrentIndex ( -1 ); // set no current renderer
138110
139- // setup slot rendererChanged()
111+ connect ( buttonBox, SIGNAL ( accepted () ), this , SLOT ( onOK () ) );
112+
113+ // connect layer transparency slider and spin box
114+ connect ( mLayerTransparencySlider , SIGNAL ( valueChanged ( int ) ), mLayerTransparencySpnBx , SLOT ( setValue ( int ) ) );
115+ connect ( mLayerTransparencySpnBx , SIGNAL ( valueChanged ( int ) ), mLayerTransparencySlider , SLOT ( setValue ( int ) ) );
116+
140117 connect ( cboRenderers, SIGNAL ( currentIndexChanged ( int ) ), this , SLOT ( rendererChanged () ) );
141- // setup order by
142- if ( mLayer ->rendererV2 ()->orderByEnabled () )
143- {
144- checkboxEnableOrderBy->setChecked ( true );
145- }
146- else
147- {
148- btnOrderBy->setEnabled ( false );
149- checkboxEnableOrderBy->setChecked ( false );
150- lineEditOrderBy->setEnabled ( false );
151- }
152- lineEditOrderBy->setReadOnly ( true );
153118 connect ( checkboxEnableOrderBy, SIGNAL ( toggled ( bool ) ), btnOrderBy, SLOT ( setEnabled ( bool ) ) );
154119 connect ( checkboxEnableOrderBy, SIGNAL ( toggled ( bool ) ), lineEditOrderBy, SLOT ( setEnabled ( bool ) ) );
155120 connect ( btnOrderBy, SIGNAL ( clicked ( bool ) ), this , SLOT ( showOrderByDialog () ) );
156- lineEditOrderBy->setText ( mOrderBy .dump () );
157121
158- // set current renderer from layer
159- QString rendererName = mLayer ->rendererV2 ()->type ();
160-
161- int rendererIdx = cboRenderers->findData ( rendererName );
162- cboRenderers->setCurrentIndex ( rendererIdx );
163-
164- // no renderer found... this mustn't happen
165- Q_ASSERT ( rendererIdx != -1 && " there must be a renderer!" );
166- connectValueChanged ( findChildren<QWidget*>(), SIGNAL ( widgetChanged () ) );
122+ syncToLayer ();
167123}
168124
169125void QgsRendererV2PropertiesDialog::connectValueChanged ( QList<QWidget *> widgets, const char *slot )
@@ -206,6 +162,47 @@ void QgsRendererV2PropertiesDialog::connectValueChanged( QList<QWidget *> widget
206162 }
207163}
208164
165+ void QgsRendererV2PropertiesDialog::disconnectValueChanged ( QList<QWidget *> widgets, const char *slot )
166+ {
167+ Q_FOREACH ( QWidget* widget, widgets )
168+ {
169+ if ( QgsDataDefinedButton* w = qobject_cast<QgsDataDefinedButton*>( widget ) )
170+ {
171+ disconnect ( w, SIGNAL ( dataDefinedActivated ( bool ) ), this , slot );
172+ disconnect ( w, SIGNAL ( dataDefinedChanged ( QString ) ), this , slot );
173+ }
174+ else if ( QgsFieldExpressionWidget* w = qobject_cast<QgsFieldExpressionWidget*>( widget ) )
175+ {
176+ disconnect ( w, SIGNAL ( fieldChanged ( QString ) ), this , slot );
177+ }
178+ else if ( QComboBox* w = qobject_cast<QComboBox*>( widget ) )
179+ {
180+ disconnect ( w, SIGNAL ( currentIndexChanged ( int ) ), this , slot );
181+ }
182+ else if ( QSpinBox* w = qobject_cast<QSpinBox*>( widget ) )
183+ {
184+ disconnect ( w, SIGNAL ( valueChanged ( int ) ), this , slot );
185+ }
186+ else if ( QDoubleSpinBox* w = qobject_cast<QDoubleSpinBox*>( widget ) )
187+ {
188+ disconnect ( w , SIGNAL ( valueChanged ( double ) ), this , slot );
189+ }
190+ else if ( QgsColorButtonV2* w = qobject_cast<QgsColorButtonV2*>( widget ) )
191+ {
192+ disconnect ( w, SIGNAL ( colorChanged ( QColor ) ), this , slot );
193+ }
194+ else if ( QCheckBox* w = qobject_cast<QCheckBox*>( widget ) )
195+ {
196+ disconnect ( w, SIGNAL ( toggled ( bool ) ), this , slot );
197+ }
198+ else if ( QLineEdit* w = qobject_cast<QLineEdit*>( widget ) )
199+ {
200+ disconnect ( w, SIGNAL ( textEdited ( QString ) ), this , slot );
201+ }
202+ }
203+
204+ }
205+
209206QgsRendererV2PropertiesDialog::~QgsRendererV2PropertiesDialog ()
210207{
211208 delete mPaintEffect ;
@@ -222,6 +219,7 @@ void QgsRendererV2PropertiesDialog::setMapCanvas( QgsMapCanvas* canvas )
222219void QgsRendererV2PropertiesDialog::rendererChanged ()
223220{
224221
222+ QgsDebugMsg ( " RENDERER CHANGED" );
225223 if ( cboRenderers->currentIndex () == -1 )
226224 {
227225 QgsDebugMsg ( " No current item -- this should never happen!" );
@@ -312,6 +310,61 @@ void QgsRendererV2PropertiesDialog::onOK()
312310 accept ();
313311}
314312
313+ void QgsRendererV2PropertiesDialog::syncToLayer ()
314+ {
315+ QgsDebugMsg ( " SYNC TO LAYER!!" );
316+ disconnectValueChanged ( findChildren<QWidget*>(), SIGNAL ( widgetChanged () ) );
317+ // Blend mode
318+ mBlendModeComboBox ->setBlendMode ( mLayer ->blendMode () );
319+
320+ // Feature blend mode
321+ mFeatureBlendComboBox ->setBlendMode ( mLayer ->featureBlendMode () );
322+
323+ // Layer transparency
324+ mLayerTransparencySlider ->setValue ( mLayer ->layerTransparency () );
325+ mLayerTransparencySpnBx ->setValue ( mLayer ->layerTransparency () );
326+
327+ QgsDebugMsg ( QString ( " VALUE: %1" ).arg ( mLayer ->layerTransparency () ) );
328+ // paint effect widget
329+ if ( mLayer ->rendererV2 () )
330+ {
331+ if ( mLayer ->rendererV2 ()->paintEffect () )
332+ {
333+ mPaintEffect = mLayer ->rendererV2 ()->paintEffect ()->clone ();
334+ mEffectWidget ->setPaintEffect ( mPaintEffect );
335+ }
336+
337+ mOrderBy = mLayer ->rendererV2 ()->orderBy ();
338+ }
339+
340+ lineEditOrderBy->setText ( mOrderBy .dump () );
341+
342+ // setup slot rendererChanged()
343+ // setup order by
344+ if ( mLayer ->rendererV2 ()->orderByEnabled () )
345+ {
346+ checkboxEnableOrderBy->setChecked ( true );
347+ }
348+ else
349+ {
350+ btnOrderBy->setEnabled ( false );
351+ checkboxEnableOrderBy->setChecked ( false );
352+ lineEditOrderBy->setEnabled ( false );
353+ }
354+ lineEditOrderBy->setReadOnly ( true );
355+
356+ // set current renderer from layer
357+ QString rendererName = mLayer ->rendererV2 ()->type ();
358+
359+ int rendererIdx = cboRenderers->findData ( rendererName );
360+ cboRenderers->setCurrentIndex ( rendererIdx );
361+
362+ // no renderer found... this mustn't happen
363+ Q_ASSERT ( rendererIdx != -1 && " there must be a renderer!" );
364+
365+ connectValueChanged ( findChildren<QWidget*>(), SIGNAL ( widgetChanged () ) );
366+ }
367+
315368void QgsRendererV2PropertiesDialog::showOrderByDialog ()
316369{
317370 QgsOrderByDialog dlg ( mLayer , this );
0 commit comments