@@ -33,7 +33,6 @@ QgsRendererWidget* QgsPointDisplacementRendererWidget::create( QgsVectorLayer* l
33
33
QgsPointDisplacementRendererWidget::QgsPointDisplacementRendererWidget ( QgsVectorLayer* layer, QgsStyle* style, QgsFeatureRenderer* renderer )
34
34
: QgsRendererWidget( layer, style )
35
35
, mRenderer( nullptr )
36
- , mEmbeddedRendererWidget( nullptr )
37
36
{
38
37
if ( !layer )
39
38
{
@@ -152,19 +151,10 @@ QgsPointDisplacementRendererWidget::QgsPointDisplacementRendererWidget( QgsVecto
152
151
QgsPointDisplacementRendererWidget::~QgsPointDisplacementRendererWidget ()
153
152
{
154
153
delete mRenderer ;
155
- delete mEmbeddedRendererWidget ;
156
154
}
157
155
158
156
QgsFeatureRenderer* QgsPointDisplacementRendererWidget::renderer ()
159
157
{
160
- if ( mRenderer && mEmbeddedRendererWidget )
161
- {
162
- QgsFeatureRenderer* embeddedRenderer = mEmbeddedRendererWidget ->renderer ();
163
- if ( embeddedRenderer )
164
- {
165
- mRenderer ->setEmbeddedRenderer ( embeddedRenderer->clone () );
166
- }
167
- }
168
158
return mRenderer ;
169
159
}
170
160
@@ -173,8 +163,6 @@ void QgsPointDisplacementRendererWidget::setMapCanvas( QgsMapCanvas* canvas )
173
163
QgsRendererWidget::setMapCanvas ( canvas );
174
164
if ( mDistanceUnitWidget )
175
165
mDistanceUnitWidget ->setMapCanvas ( canvas );
176
- if ( mEmbeddedRendererWidget )
177
- mEmbeddedRendererWidget ->setMapCanvas ( canvas );
178
166
}
179
167
180
168
void QgsPointDisplacementRendererWidget::on_mLabelFieldComboBox_currentIndexChanged ( const QString& text )
@@ -199,9 +187,10 @@ void QgsPointDisplacementRendererWidget::on_mRendererComboBox_currentIndexChange
199
187
QgsRendererAbstractMetadata* m = QgsRendererRegistry::instance ()->rendererMetadata ( rendererId );
200
188
if ( m )
201
189
{
202
- delete mEmbeddedRendererWidget ;
203
- mEmbeddedRendererWidget = m->createRendererWidget ( mLayer , mStyle , mRenderer ->embeddedRenderer ()->clone () );
204
- mEmbeddedRendererWidget ->setMapCanvas ( mMapCanvas );
190
+ // unfortunately renderer conversion is only available through the creation of a widget...
191
+ QgsRendererWidget* tempRenderWidget = m->createRendererWidget ( mLayer , mStyle , mRenderer ->embeddedRenderer ()->clone () );
192
+ mRenderer ->setEmbeddedRenderer ( tempRenderWidget->renderer ()->clone () );
193
+ delete tempRenderWidget;
205
194
emit widgetChanged ();
206
195
}
207
196
}
@@ -217,26 +206,17 @@ void QgsPointDisplacementRendererWidget::on_mPlacementComboBox_currentIndexChang
217
206
218
207
void QgsPointDisplacementRendererWidget::on_mRendererSettingsButton_clicked ()
219
208
{
220
- if ( mEmbeddedRendererWidget )
209
+ if ( !mRenderer )
210
+ return ;
211
+
212
+ QgsRendererAbstractMetadata* m = QgsRendererRegistry::instance ()->rendererMetadata ( mRenderer ->embeddedRenderer ()->type () );
213
+ if ( m )
221
214
{
222
- // create a dialog with the embedded widget
223
- #ifdef Q_OS_MAC
224
- QDialog* d = new QDialog ( this ->window () );
225
- d->setWindowModality ( Qt::WindowModal );
226
- #else
227
- QDialog* d = new QDialog ();
228
- #endif
229
- QGridLayout* layout = new QGridLayout ( d );
230
- mEmbeddedRendererWidget ->setParent ( d );
231
- QDialogButtonBox* buttonBox = new QDialogButtonBox ( d );
232
- buttonBox->addButton ( QDialogButtonBox::Ok );
233
- QObject::connect ( buttonBox, SIGNAL ( accepted () ), d, SLOT ( accept () ) );
234
- layout->addWidget ( mEmbeddedRendererWidget , 0 , 0 );
235
- layout->addWidget ( buttonBox, 1 , 0 );
236
- d->exec ();
237
- mEmbeddedRendererWidget ->setParent ( nullptr );
238
- delete d;
239
- emit widgetChanged ();
215
+ QgsRendererWidget* w = m->createRendererWidget ( mLayer , mStyle , mRenderer ->embeddedRenderer ()->clone () );
216
+ w->setMapCanvas ( mMapCanvas );
217
+ connect ( w, SIGNAL ( widgetChanged () ), this , SLOT ( updateRendererFromWidget () ) );
218
+ w->setDockMode ( this ->dockMode () );
219
+ openPanel ( w );
240
220
}
241
221
}
242
222
@@ -370,15 +350,39 @@ void QgsPointDisplacementRendererWidget::on_mCenterSymbolPushButton_clicked()
370
350
return ;
371
351
}
372
352
QgsMarkerSymbol* markerSymbol = mRenderer ->centerSymbol ()->clone ();
373
- QgsSymbolSelectorDialog dlg ( markerSymbol, QgsStyle::defaultStyle (), mLayer , this );
374
- dlg.setMapCanvas ( mMapCanvas );
375
- if ( dlg.exec () == QDialog::Rejected )
353
+ QgsSymbolSelectorWidget* dlg = new QgsSymbolSelectorWidget ( markerSymbol, QgsStyle::defaultStyle (), mLayer , this );
354
+ dlg->setDockMode ( this ->dockMode () );
355
+ dlg->setMapCanvas ( mMapCanvas );
356
+ connect ( dlg, SIGNAL ( widgetChanged () ), this , SLOT ( updateCenterSymbolFromWidget () ) );
357
+ connect ( dlg, SIGNAL ( panelAccepted ( QgsPanelWidget* ) ), this , SLOT ( cleanUpSymbolSelector ( QgsPanelWidget* ) ) );
358
+ openPanel ( dlg );
359
+ }
360
+
361
+ void QgsPointDisplacementRendererWidget::updateCenterSymbolFromWidget ()
362
+ {
363
+ QgsSymbolSelectorWidget* dlg = qobject_cast<QgsSymbolSelectorWidget*>( sender () );
364
+ QgsSymbol* symbol = dlg->symbol ()->clone ();
365
+ mRenderer ->setCenterSymbol ( static_cast < QgsMarkerSymbol* >( symbol ) );
366
+ updateCenterIcon ();
367
+ emit widgetChanged ();
368
+ }
369
+
370
+ void QgsPointDisplacementRendererWidget::cleanUpSymbolSelector ( QgsPanelWidget *container )
371
+ {
372
+ if ( container )
376
373
{
377
- delete markerSymbol ;
378
- return ;
374
+ QgsSymbolSelectorWidget* dlg = qobject_cast<QgsSymbolSelectorWidget*>( container ) ;
375
+ delete dlg-> symbol () ;
379
376
}
380
- mRenderer ->setCenterSymbol ( markerSymbol );
381
- updateCenterIcon ();
377
+ }
378
+
379
+ void QgsPointDisplacementRendererWidget::updateRendererFromWidget ()
380
+ {
381
+ QgsRendererWidget* w = qobject_cast<QgsRendererWidget*>( sender () );
382
+ if ( !w )
383
+ return ;
384
+
385
+ mRenderer ->setEmbeddedRenderer ( w->renderer ()->clone () );
382
386
emit widgetChanged ();
383
387
}
384
388
0 commit comments