Skip to content

Commit 53a57e1

Browse files
committedJun 5, 2016
[styledock] Keep dock state updated from external changes
1 parent e7b04f2 commit 53a57e1

File tree

4 files changed

+139
-54
lines changed

4 files changed

+139
-54
lines changed
 

‎src/app/qgsmapstylingwidget.cpp

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ QgsMapStylingWidget::QgsMapStylingWidget( QgsMapCanvas* canvas, QList<QgsMapStyl
6666

6767
mStyleManagerFactory = new QgsMapLayerStyleManagerWidgetFactory();
6868

69-
connect( mUndoButton, SIGNAL( pressed() ), mUndoWidget, SLOT( undo() ) );
70-
connect( mRedoButton, SIGNAL( pressed() ), mUndoWidget, SLOT( redo() ) );
69+
connect( mUndoButton, SIGNAL( pressed() ), this, SLOT( undo() ) );
70+
connect( mRedoButton, SIGNAL( pressed() ), this, SLOT( redo() ) );
7171

7272
connect( mAutoApplyTimer, SIGNAL( timeout() ), this, SLOT( apply() ) );
7373

@@ -109,6 +109,7 @@ void QgsMapStylingWidget::setLayer( QgsMapLayer *layer )
109109
}
110110

111111
mCurrentLayer = layer;
112+
connect( mCurrentLayer, SIGNAL( repaintRequested() ), this, SLOT( updateCurrentWidgetLayer() ) );
112113

113114
int lastPage = mOptionsListWidget->currentIndex().row();
114115
mOptionsListWidget->clear();
@@ -152,6 +153,7 @@ void QgsMapStylingWidget::setLayer( QgsMapLayer *layer )
152153

153154
void QgsMapStylingWidget::apply()
154155
{
156+
disconnect( mCurrentLayer, SIGNAL( repaintRequested() ), this, SLOT( updateCurrentWidgetLayer() ) );
155157
QString undoName = "Style Change";
156158
if ( !mCurrentLayer )
157159
return;
@@ -197,7 +199,7 @@ void QgsMapStylingWidget::apply()
197199
mMapCanvas->clearCache();
198200
mMapCanvas->refresh();
199201
}
200-
202+
disconnect( mCurrentLayer, SIGNAL( repaintRequested() ), this, SLOT( updateCurrentWidgetLayer() ) );
201203
}
202204

203205
void QgsMapStylingWidget::autoApply()
@@ -208,8 +210,21 @@ void QgsMapStylingWidget::autoApply()
208210
}
209211
}
210212

213+
void QgsMapStylingWidget::undo()
214+
{
215+
mUndoWidget->undo();
216+
updateCurrentWidgetLayer();
217+
}
218+
219+
void QgsMapStylingWidget::redo()
220+
{
221+
mUndoWidget->redo();
222+
updateCurrentWidgetLayer();
223+
}
224+
211225
void QgsMapStylingWidget::updateCurrentWidgetLayer()
212226
{
227+
QgsDebugMsg( "UPDATE!!!" );
213228
mBlockAutoApply = true;
214229

215230
QgsMapLayer* layer = mCurrentLayer;
@@ -353,6 +368,16 @@ void QgsMapStylingWidget::layerAboutToBeRemoved( QgsMapLayer* layer )
353368
}
354369
}
355370

371+
void QgsMapStylingWidget::syncWidgetState()
372+
{
373+
QWidget* current = mWidgetArea->widget();
374+
375+
if ( QgsRendererV2PropertiesDialog* widget = qobject_cast<QgsRendererV2PropertiesDialog*>( current ) )
376+
{
377+
widget->syncToLayer();
378+
}
379+
}
380+
356381
void QgsMapStylingWidget::pushUndoItem( const QString &name )
357382
{
358383
QString errorMsg;

‎src/app/qgsmapstylingwidget.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,13 @@ class APP_EXPORT QgsMapStylingWidget : public QWidget, private Ui::QgsMapStyling
7979
void setLayer( QgsMapLayer* layer );
8080
void apply();
8181
void autoApply();
82+
void undo();
83+
void redo();
8284

8385
private slots:
8486
void updateCurrentWidgetLayer();
8587
void layerAboutToBeRemoved( QgsMapLayer* layer );
88+
void syncWidgetState();
8689

8790
private:
8891
void pushUndoItem( const QString& name );

‎src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp

Lines changed: 104 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -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

169125
void 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+
209206
QgsRendererV2PropertiesDialog::~QgsRendererV2PropertiesDialog()
210207
{
211208
delete mPaintEffect;
@@ -222,6 +219,7 @@ void QgsRendererV2PropertiesDialog::setMapCanvas( QgsMapCanvas* canvas )
222219
void 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+
315368
void QgsRendererV2PropertiesDialog::showOrderByDialog()
316369
{
317370
QgsOrderByDialog dlg( mLayer, this );

‎src/gui/symbology-ng/qgsrendererv2propertiesdialog.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ class GUI_EXPORT QgsRendererV2PropertiesDialog : public QDialog, private Ui::Qgs
7272
//! Apply and accept the changes for the dialog.
7373
void onOK();
7474

75+
void syncToLayer();
76+
7577
private slots:
7678
void showOrderByDialog();
7779

@@ -90,6 +92,8 @@ class GUI_EXPORT QgsRendererV2PropertiesDialog : public QDialog, private Ui::Qgs
9092
*/
9193
void connectValueChanged( QList<QWidget *> widgets, const char *slot );
9294

95+
void disconnectValueChanged( QList<QWidget *> widgets, const char *slot );
96+
9397
//! Reimplements dialog keyPress event so we can ignore it
9498
void keyPressEvent( QKeyEvent * event ) override;
9599

0 commit comments

Comments
 (0)
Please sign in to comment.