Skip to content

Commit a3149b1

Browse files
authored
Merge pull request #3396 from nyalldawson/displace_widget
Use panels for displacement renderer settings
2 parents 0f27235 + 42ebb4f commit a3149b1

File tree

2 files changed

+48
-42
lines changed

2 files changed

+48
-42
lines changed

src/gui/symbology-ng/qgspointdisplacementrendererwidget.cpp

+45-41
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ QgsRendererWidget* QgsPointDisplacementRendererWidget::create( QgsVectorLayer* l
3333
QgsPointDisplacementRendererWidget::QgsPointDisplacementRendererWidget( QgsVectorLayer* layer, QgsStyle* style, QgsFeatureRenderer* renderer )
3434
: QgsRendererWidget( layer, style )
3535
, mRenderer( nullptr )
36-
, mEmbeddedRendererWidget( nullptr )
3736
{
3837
if ( !layer )
3938
{
@@ -152,19 +151,10 @@ QgsPointDisplacementRendererWidget::QgsPointDisplacementRendererWidget( QgsVecto
152151
QgsPointDisplacementRendererWidget::~QgsPointDisplacementRendererWidget()
153152
{
154153
delete mRenderer;
155-
delete mEmbeddedRendererWidget;
156154
}
157155

158156
QgsFeatureRenderer* QgsPointDisplacementRendererWidget::renderer()
159157
{
160-
if ( mRenderer && mEmbeddedRendererWidget )
161-
{
162-
QgsFeatureRenderer* embeddedRenderer = mEmbeddedRendererWidget->renderer();
163-
if ( embeddedRenderer )
164-
{
165-
mRenderer->setEmbeddedRenderer( embeddedRenderer->clone() );
166-
}
167-
}
168158
return mRenderer;
169159
}
170160

@@ -173,8 +163,6 @@ void QgsPointDisplacementRendererWidget::setMapCanvas( QgsMapCanvas* canvas )
173163
QgsRendererWidget::setMapCanvas( canvas );
174164
if ( mDistanceUnitWidget )
175165
mDistanceUnitWidget->setMapCanvas( canvas );
176-
if ( mEmbeddedRendererWidget )
177-
mEmbeddedRendererWidget->setMapCanvas( canvas );
178166
}
179167

180168
void QgsPointDisplacementRendererWidget::on_mLabelFieldComboBox_currentIndexChanged( const QString& text )
@@ -199,9 +187,10 @@ void QgsPointDisplacementRendererWidget::on_mRendererComboBox_currentIndexChange
199187
QgsRendererAbstractMetadata* m = QgsRendererRegistry::instance()->rendererMetadata( rendererId );
200188
if ( m )
201189
{
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;
205194
emit widgetChanged();
206195
}
207196
}
@@ -217,26 +206,17 @@ void QgsPointDisplacementRendererWidget::on_mPlacementComboBox_currentIndexChang
217206

218207
void QgsPointDisplacementRendererWidget::on_mRendererSettingsButton_clicked()
219208
{
220-
if ( mEmbeddedRendererWidget )
209+
if ( !mRenderer )
210+
return;
211+
212+
QgsRendererAbstractMetadata* m = QgsRendererRegistry::instance()->rendererMetadata( mRenderer->embeddedRenderer()->type() );
213+
if ( m )
221214
{
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 );
240220
}
241221
}
242222

@@ -370,15 +350,39 @@ void QgsPointDisplacementRendererWidget::on_mCenterSymbolPushButton_clicked()
370350
return;
371351
}
372352
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 )
376373
{
377-
delete markerSymbol;
378-
return;
374+
QgsSymbolSelectorWidget* dlg = qobject_cast<QgsSymbolSelectorWidget*>( container );
375+
delete dlg->symbol();
379376
}
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() );
382386
emit widgetChanged();
383387
}
384388

src/gui/symbology-ng/qgspointdisplacementrendererwidget.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ class GUI_EXPORT QgsPointDisplacementRendererWidget: public QgsRendererWidget, p
3939

4040
private:
4141
QgsPointDisplacementRenderer* mRenderer;
42-
QgsRendererWidget* mEmbeddedRendererWidget;
4342

4443
void blockAllSignals( bool block );
4544
void updateCenterIcon();
@@ -60,6 +59,9 @@ class GUI_EXPORT QgsPointDisplacementRendererWidget: public QgsRendererWidget, p
6059
void on_mMaxScaleDenominatorEdit_textChanged( const QString & text );
6160
void on_mCenterSymbolPushButton_clicked();
6261
void on_mRendererSettingsButton_clicked();
62+
void updateCenterSymbolFromWidget();
63+
void cleanUpSymbolSelector( QgsPanelWidget* container );
64+
void updateRendererFromWidget();
6365
};
6466

6567
#endif // QGSPOINTDISPLACEMENTRENDERERWIDGET_H

0 commit comments

Comments
 (0)