Skip to content

Commit f33974e

Browse files
committedJun 21, 2017
Use panel widget for data-defined size legend
1 parent 5cff21f commit f33974e

13 files changed

+92
-121
lines changed
 

‎python/gui/gui.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@
239239
%Include symbology-ng/qgscategorizedsymbolrendererwidget.sip
240240
%Include symbology-ng/qgscptcitycolorrampdialog.sip
241241
%Include symbology-ng/qgsdashspacedialog.sip
242-
%Include symbology-ng/qgsdatadefinedsizelegenddialog.sip
242+
%Include symbology-ng/qgsdatadefinedsizelegendwidget.sip
243243
%Include symbology-ng/qgsellipsesymbollayerwidget.sip
244244
%Include symbology-ng/qgsgraduatedhistogramwidget.sip
245245
%Include symbology-ng/qgsgraduatedsymbolrendererwidget.sip

‎python/gui/symbology-ng/qgsdatadefinedsizelegenddialog.sip renamed to ‎python/gui/symbology-ng/qgsdatadefinedsizelegendwidget.sip

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/************************************************************************
22
* This file has been generated automatically from *
33
* *
4-
* src/gui/symbology-ng/qgsdatadefinedsizelegenddialog.h *
4+
* src/gui/symbology-ng/qgsdatadefinedsizelegendwidget.h *
55
* *
66
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
77
************************************************************************/
@@ -12,23 +12,23 @@
1212

1313

1414

15-
class QgsDataDefinedSizeLegendDialog : QDialog
15+
class QgsDataDefinedSizeLegendWidget : QgsPanelWidget
1616
{
1717
%Docstring
18-
Dialog for configuration of appearance of legend for marker symbols with data-defined size.
18+
Widget for configuration of appearance of legend for marker symbols with data-defined size.
1919

2020
.. versionadded:: 3.0
2121
%End
2222

2323
%TypeHeaderCode
24-
#include "qgsdatadefinedsizelegenddialog.h"
24+
#include "qgsdatadefinedsizelegendwidget.h"
2525
%End
2626
public:
27-
explicit QgsDataDefinedSizeLegendDialog( const QgsDataDefinedSizeLegend *ddsLegend, const QgsProperty &ddSize, QgsMarkerSymbol *overrideSymbol /Transfer/, QgsMapCanvas *canvas = 0, QWidget *parent /TransferThis/ = 0 );
27+
explicit QgsDataDefinedSizeLegendWidget( const QgsDataDefinedSizeLegend *ddsLegend, const QgsProperty &ddSize, QgsMarkerSymbol *overrideSymbol /Transfer/, QgsMapCanvas *canvas = 0, QWidget *parent /TransferThis/ = 0 );
2828
%Docstring
2929
when the symbol is given from outside rather than being set inside QgsDataDefinedSizeLegend.
3030
%End
31-
~QgsDataDefinedSizeLegendDialog();
31+
~QgsDataDefinedSizeLegendWidget();
3232

3333
QgsDataDefinedSizeLegend *dataDefinedSizeLegend() const /Factory/;
3434
%Docstring
@@ -43,7 +43,7 @@ Returns configuration as set up in the dialog (may be null). Ownership is passed
4343
/************************************************************************
4444
* This file has been generated automatically from *
4545
* *
46-
* src/gui/symbology-ng/qgsdatadefinedsizelegenddialog.h *
46+
* src/gui/symbology-ng/qgsdatadefinedsizelegendwidget.h *
4747
* *
4848
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
4949
************************************************************************/

‎python/gui/symbology-ng/qgsrendererwidget.sip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,10 @@ and by connecting the slot contextMenuViewCategories(const QPoint&)*
8686
%End
8787
virtual void refreshSymbolView();
8888

89-
QgsDataDefinedSizeLegend *showDataDefinedSizeLegendDialog( const QgsMarkerSymbol *symbol, const QgsDataDefinedSizeLegend *ddsLegend, bool *ok /Out/ ) /Factory/;
89+
QgsDataDefinedSizeLegendWidget *openDataDefinedSizeLegendWidget( const QgsMarkerSymbol *symbol, const QgsDataDefinedSizeLegend *ddsLegend );
9090
%Docstring
9191
.. versionadded:: 3.0
92-
:rtype: QgsDataDefinedSizeLegend
92+
:rtype: QgsDataDefinedSizeLegendWidget
9393
%End
9494

9595
protected slots:

‎src/app/qgsdiagramproperties.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
#include "qgsproject.h"
2323
#include "qgsapplication.h"
2424
#include "qgsdatadefinedsizelegend.h"
25-
#include "qgsdatadefinedsizelegenddialog.h"
25+
#include "qgsdatadefinedsizelegendwidget.h"
2626
#include "qgsdiagramproperties.h"
2727
#include "qgsdiagramrenderer.h"
2828
#include "qgslabelengineconfigdialog.h"
@@ -947,9 +947,15 @@ void QgsDiagramProperties::showSizeLegendDialog()
947947
QgsProperty ddSize = isExpression ? QgsProperty::fromExpression( sizeFieldNameOrExp ) : QgsProperty::fromField( sizeFieldNameOrExp );
948948
ddSize.setTransformer( new QgsSizeScaleTransformer( QgsSizeScaleTransformer::Linear, 0.0, mMaxValueSpinBox->value(), 0.0, mSizeSpinBox->value() ) );
949949

950-
QgsDataDefinedSizeLegendDialog dlg( mSizeLegend.get(), ddSize, nullptr, mMapCanvas );
951-
if ( !dlg.exec() )
952-
return;
953-
954-
mSizeLegend.reset( dlg.dataDefinedSizeLegend() );
950+
QgsDataDefinedSizeLegendWidget *panel = new QgsDataDefinedSizeLegendWidget( mSizeLegend.get(), ddSize, nullptr, mMapCanvas );
951+
952+
QDialog dlg;
953+
dlg.setLayout( new QVBoxLayout() );
954+
dlg.setWindowTitle( panel->panelTitle() );
955+
dlg.layout()->addWidget( panel );
956+
QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok );
957+
connect( buttonBox, &QDialogButtonBox::accepted, &dlg, &QDialog::accept );
958+
dlg.layout()->addWidget( buttonBox );
959+
if ( dlg.exec() )
960+
mSizeLegend.reset( panel->dataDefinedSizeLegend() );
955961
}

‎src/gui/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ SET(QGIS_GUI_SRCS
1818
symbology-ng/qgscategorizedsymbolrendererwidget.cpp
1919
symbology-ng/qgscptcitycolorrampdialog.cpp
2020
symbology-ng/qgsdashspacedialog.cpp
21-
symbology-ng/qgsdatadefinedsizelegenddialog.cpp
21+
symbology-ng/qgsdatadefinedsizelegendwidget.cpp
2222
symbology-ng/qgsellipsesymbollayerwidget.cpp
2323
symbology-ng/qgsgraduatedhistogramwidget.cpp
2424
symbology-ng/qgsgraduatedsymbolrendererwidget.cpp
@@ -494,7 +494,7 @@ SET(QGIS_GUI_MOC_HDRS
494494
symbology-ng/qgscategorizedsymbolrendererwidget.h
495495
symbology-ng/qgscptcitycolorrampdialog.h
496496
symbology-ng/qgsdashspacedialog.h
497-
symbology-ng/qgsdatadefinedsizelegenddialog.h
497+
symbology-ng/qgsdatadefinedsizelegendwidget.h
498498
symbology-ng/qgsellipsesymbollayerwidget.h
499499
symbology-ng/qgsgraduatedhistogramwidget.h
500500
symbology-ng/qgsgraduatedsymbolrendererwidget.h

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "qgscategorizedsymbolrenderer.h"
2020

2121
#include "qgsdatadefinedsizelegend.h"
22+
#include "qgsdatadefinedsizelegendwidget.h"
2223
#include "qgssymbol.h"
2324
#include "qgssymbollayerutils.h"
2425
#include "qgscolorramp.h"
@@ -1044,12 +1045,14 @@ QgsExpressionContext QgsCategorizedSymbolRendererWidget::createExpressionContext
10441045

10451046
void QgsCategorizedSymbolRendererWidget::dataDefinedSizeLegend()
10461047
{
1047-
bool ok;
10481048
QgsMarkerSymbol *s = static_cast<QgsMarkerSymbol *>( mCategorizedSymbol ); // this should be only enabled for marker symbols
1049-
std::unique_ptr<QgsDataDefinedSizeLegend> ddsLegend( showDataDefinedSizeLegendDialog( s, mRenderer->dataDefinedSizeLegend(), &ok ) );
1050-
if ( ok )
1049+
QgsDataDefinedSizeLegendWidget *panel = openDataDefinedSizeLegendWidget( s, mRenderer->dataDefinedSizeLegend() );
1050+
if ( panel )
10511051
{
1052-
mRenderer->setDataDefinedSizeLegend( ddsLegend.release() ); // ownership is passed from dlg to renderer
1053-
emit widgetChanged();
1052+
connect( panel, &QgsPanelWidget::widgetChanged, [ = ]
1053+
{
1054+
mRenderer->setDataDefinedSizeLegend( panel->dataDefinedSizeLegend() );
1055+
emit widgetChanged();
1056+
} );
10541057
}
10551058
}

‎src/gui/symbology-ng/qgsdatadefinedsizelegenddialog.cpp renamed to ‎src/gui/symbology-ng/qgsdatadefinedsizelegendwidget.cpp

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/***************************************************************************
2-
qgsdatadefinedsizelegenddialog.cpp
2+
qgsdatadefinedsizelegendwidget.cpp
33
--------------------------------------
44
Date : June 2017
55
Copyright : (C) 2017 by Martin Dobias
@@ -13,7 +13,7 @@
1313
* *
1414
***************************************************************************/
1515

16-
#include "qgsdatadefinedsizelegenddialog.h"
16+
#include "qgsdatadefinedsizelegendwidget.h"
1717

1818
#include <QInputDialog>
1919

@@ -28,12 +28,13 @@
2828
#include "qgssymbolselectordialog.h"
2929
#include "qgsvectorlayer.h"
3030

31-
QgsDataDefinedSizeLegendDialog::QgsDataDefinedSizeLegendDialog( const QgsDataDefinedSizeLegend *ddsLegend, const QgsProperty &ddSize, QgsMarkerSymbol *overrideSymbol, QgsMapCanvas *canvas, QWidget *parent )
32-
: QDialog( parent )
31+
QgsDataDefinedSizeLegendWidget::QgsDataDefinedSizeLegendWidget( const QgsDataDefinedSizeLegend *ddsLegend, const QgsProperty &ddSize, QgsMarkerSymbol *overrideSymbol, QgsMapCanvas *canvas, QWidget *parent )
32+
: QgsPanelWidget( parent )
3333
, mSizeProperty( ddSize )
3434
, mMapCanvas( canvas )
3535
{
3636
setupUi( this );
37+
setPanelTitle( tr( "Data-defined size legend" ) );
3738

3839
QgsMarkerSymbol *symbol = nullptr;
3940

@@ -89,9 +90,9 @@ QgsDataDefinedSizeLegendDialog::QgsDataDefinedSizeLegendDialog( const QgsDataDef
8990
mSizeClassesModel->sort( 0 );
9091
}
9192

92-
connect( groupManualSizeClasses, &QGroupBox::clicked, this, &QgsDataDefinedSizeLegendDialog::updatePreview );
93-
connect( btnAddClass, &QToolButton::clicked, this, &QgsDataDefinedSizeLegendDialog::addSizeClass );
94-
connect( btnRemoveClass, &QToolButton::clicked, this, &QgsDataDefinedSizeLegendDialog::removeSizeClass );
93+
connect( groupManualSizeClasses, &QGroupBox::clicked, this, &QgsDataDefinedSizeLegendWidget::updatePreview );
94+
connect( btnAddClass, &QToolButton::clicked, this, &QgsDataDefinedSizeLegendWidget::addSizeClass );
95+
connect( btnRemoveClass, &QToolButton::clicked, this, &QgsDataDefinedSizeLegendWidget::removeSizeClass );
9596

9697
viewSizeClasses->setModel( mSizeClassesModel );
9798

@@ -104,22 +105,23 @@ QgsDataDefinedSizeLegendDialog::QgsDataDefinedSizeLegendDialog( const QgsDataDef
104105
mPreviewModel->setLegendMapViewData( canvas->mapUnitsPerPixel(), canvas->mapSettings().outputDpi(), canvas->scale() );
105106
viewLayerTree->setModel( mPreviewModel );
106107

107-
connect( cboAlignSymbols, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), [ = ] { updatePreview(); } );
108-
connect( radDisabled, &QRadioButton::clicked, this, &QgsDataDefinedSizeLegendDialog::updatePreview );
109-
connect( radSeparated, &QRadioButton::clicked, this, &QgsDataDefinedSizeLegendDialog::updatePreview );
110-
connect( radCollapsed, &QRadioButton::clicked, this, &QgsDataDefinedSizeLegendDialog::updatePreview );
111-
connect( btnChangeSymbol, &QPushButton::clicked, this, &QgsDataDefinedSizeLegendDialog::changeSymbol );
108+
connect( cboAlignSymbols, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), [ = ] { emit widgetChanged(); } );
109+
connect( radDisabled, &QRadioButton::clicked, this, &QgsPanelWidget::widgetChanged );
110+
connect( radSeparated, &QRadioButton::clicked, this, &QgsPanelWidget::widgetChanged );
111+
connect( radCollapsed, &QRadioButton::clicked, this, &QgsPanelWidget::widgetChanged );
112+
connect( btnChangeSymbol, &QPushButton::clicked, this, &QgsDataDefinedSizeLegendWidget::changeSymbol );
113+
connect( this, &QgsPanelWidget::widgetChanged, this, &QgsDataDefinedSizeLegendWidget::updatePreview );
112114
updatePreview();
113115
}
114116

115-
QgsDataDefinedSizeLegendDialog::~QgsDataDefinedSizeLegendDialog()
117+
QgsDataDefinedSizeLegendWidget::~QgsDataDefinedSizeLegendWidget()
116118
{
117119
delete mPreviewModel;
118120
delete mPreviewTree;
119121
delete mPreviewLayer;
120122
}
121123

122-
QgsDataDefinedSizeLegend *QgsDataDefinedSizeLegendDialog::dataDefinedSizeLegend() const
124+
QgsDataDefinedSizeLegend *QgsDataDefinedSizeLegendWidget::dataDefinedSizeLegend() const
123125
{
124126
if ( radDisabled->isChecked() )
125127
return nullptr;
@@ -146,7 +148,7 @@ QgsDataDefinedSizeLegend *QgsDataDefinedSizeLegendDialog::dataDefinedSizeLegend(
146148
return ddsLegend;
147149
}
148150

149-
void QgsDataDefinedSizeLegendDialog::updatePreview()
151+
void QgsDataDefinedSizeLegendWidget::updatePreview()
150152
{
151153
QgsMarkerSymbol *symbol = mSourceSymbol->clone();
152154
symbol->setDataDefinedSize( mSizeProperty );
@@ -157,7 +159,7 @@ void QgsDataDefinedSizeLegendDialog::updatePreview()
157159
viewLayerTree->expandAll();
158160
}
159161

160-
void QgsDataDefinedSizeLegendDialog::changeSymbol()
162+
void QgsDataDefinedSizeLegendWidget::changeSymbol()
161163
{
162164
std::unique_ptr<QgsMarkerSymbol> newSymbol( mSourceSymbol->clone() );
163165
QgsSymbolWidgetContext context;
@@ -188,7 +190,7 @@ void QgsDataDefinedSizeLegendDialog::changeSymbol()
188190
updatePreview();
189191
}
190192

191-
void QgsDataDefinedSizeLegendDialog::addSizeClass()
193+
void QgsDataDefinedSizeLegendWidget::addSizeClass()
192194
{
193195
bool ok;
194196
double v = QInputDialog::getDouble( this, tr( "Add Size Class" ), tr( "Enter value for a new class" ),
@@ -204,7 +206,7 @@ void QgsDataDefinedSizeLegendDialog::addSizeClass()
204206
updatePreview();
205207
}
206208

207-
void QgsDataDefinedSizeLegendDialog::removeSizeClass()
209+
void QgsDataDefinedSizeLegendWidget::removeSizeClass()
208210
{
209211
QModelIndex idx = viewSizeClasses->currentIndex();
210212
if ( !idx.isValid() )

‎src/gui/symbology-ng/qgsdatadefinedsizelegenddialog.h renamed to ‎src/gui/symbology-ng/qgsdatadefinedsizelegendwidget.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/***************************************************************************
2-
qgsdatadefinedsizelegenddialog.h
2+
qgsdatadefinedsizelegendwidget.h
33
--------------------------------------
44
Date : June 2017
55
Copyright : (C) 2017 by Martin Dobias
@@ -13,16 +13,16 @@
1313
* *
1414
***************************************************************************/
1515

16-
#ifndef QGSDATADEFINEDSIZELEGENDDIALOG_H
17-
#define QGSDATADEFINEDSIZELEGENDDIALOG_H
16+
#ifndef QGSDATADEFINEDSIZELEGENDWIDGET_H
17+
#define QGSDATADEFINEDSIZELEGENDWIDGET_H
1818

1919
#include "qgis.h"
2020
#include "qgis_gui.h"
2121

2222
#include <memory>
23-
#include <QDialog>
24-
#include <ui_qgsdatadefinedsizelegenddialog.h>
23+
#include <ui_qgsdatadefinedsizelegendwidget.h>
2524

25+
#include "qgspanelwidget.h"
2626
#include "qgsproperty.h"
2727

2828
class QStandardItemModel;
@@ -37,20 +37,20 @@ class QgsProperty;
3737
class QgsVectorLayer;
3838

3939
/** \ingroup gui
40-
* Dialog for configuration of appearance of legend for marker symbols with data-defined size.
40+
* Widget for configuration of appearance of legend for marker symbols with data-defined size.
4141
*
4242
* \since QGIS 3.0
4343
*/
44-
class GUI_EXPORT QgsDataDefinedSizeLegendDialog : public QDialog, private Ui::QgsDataDefinedSizeLegendDialog
44+
class GUI_EXPORT QgsDataDefinedSizeLegendWidget : public QgsPanelWidget, private Ui::QgsDataDefinedSizeLegendWidget
4545
{
4646
Q_OBJECT
4747
public:
4848
//! Creates the dialog and initializes the content to what is passed in the legend configuration (may be null).
4949
//! The ddSize argument determines scaling of the marker symbol - it should have a size scale transformer assigned
5050
//! to know the range of sizes. The overrideSymbol argument may override the source symbol: this is useful in case
5151
//! when the symbol is given from outside rather than being set inside QgsDataDefinedSizeLegend.
52-
explicit QgsDataDefinedSizeLegendDialog( const QgsDataDefinedSizeLegend *ddsLegend, const QgsProperty &ddSize, QgsMarkerSymbol *overrideSymbol SIP_TRANSFER, QgsMapCanvas *canvas = nullptr, QWidget *parent SIP_TRANSFERTHIS = nullptr );
53-
~QgsDataDefinedSizeLegendDialog();
52+
explicit QgsDataDefinedSizeLegendWidget( const QgsDataDefinedSizeLegend *ddsLegend, const QgsProperty &ddSize, QgsMarkerSymbol *overrideSymbol SIP_TRANSFER, QgsMapCanvas *canvas = nullptr, QWidget *parent SIP_TRANSFERTHIS = nullptr );
53+
~QgsDataDefinedSizeLegendWidget();
5454

5555
//! Returns configuration as set up in the dialog (may be null). Ownership is passed to the caller.
5656
QgsDataDefinedSizeLegend *dataDefinedSizeLegend() const SIP_FACTORY;
@@ -75,4 +75,4 @@ class GUI_EXPORT QgsDataDefinedSizeLegendDialog : public QDialog, private Ui::Qg
7575
QStandardItemModel *mSizeClassesModel;
7676
};
7777

78-
#endif // QGSDATADEFINEDSIZELEGENDDIALOG_H
78+
#endif // QGSDATADEFINEDSIZELEGENDWIDGET_H

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "qgspanelwidget.h"
1717

1818
#include "qgsdatadefinedsizelegend.h"
19+
#include "qgsdatadefinedsizelegendwidget.h"
1920
#include "qgssymbol.h"
2021
#include "qgssymbollayerutils.h"
2122
#include "qgscolorramp.h"
@@ -1176,12 +1177,14 @@ void QgsGraduatedSymbolRendererWidget::keyPressEvent( QKeyEvent *event )
11761177

11771178
void QgsGraduatedSymbolRendererWidget::dataDefinedSizeLegend()
11781179
{
1179-
bool ok;
11801180
QgsMarkerSymbol *s = static_cast<QgsMarkerSymbol *>( mGraduatedSymbol ); // this should be only enabled for marker symbols
1181-
std::unique_ptr<QgsDataDefinedSizeLegend> ddsLegend( showDataDefinedSizeLegendDialog( s, mRenderer->dataDefinedSizeLegend(), &ok ) );
1182-
if ( ok )
1181+
QgsDataDefinedSizeLegendWidget *panel = openDataDefinedSizeLegendWidget( s, mRenderer->dataDefinedSizeLegend() );
1182+
if ( panel )
11831183
{
1184-
mRenderer->setDataDefinedSizeLegend( ddsLegend.release() ); // ownership is passed from dlg to renderer
1185-
emit widgetChanged();
1184+
connect( panel, &QgsPanelWidget::widgetChanged, [ = ]
1185+
{
1186+
mRenderer->setDataDefinedSizeLegend( panel->dataDefinedSizeLegend() );
1187+
emit widgetChanged();
1188+
} );
11861189
}
11871190
}

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

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
***************************************************************************/
1515
#include "qgsrendererwidget.h"
1616

17-
#include "qgsdatadefinedsizelegenddialog.h"
17+
#include "qgsdatadefinedsizelegendwidget.h"
1818
#include "qgssymbol.h"
1919
#include "qgsvectorlayer.h"
2020
#include "qgscolordialog.h"
@@ -275,10 +275,8 @@ void QgsRendererWidget::applyChanges()
275275
apply();
276276
}
277277

278-
QgsDataDefinedSizeLegend *QgsRendererWidget::showDataDefinedSizeLegendDialog( const QgsMarkerSymbol *symbol, const QgsDataDefinedSizeLegend *ddsLegend, bool *ok )
278+
QgsDataDefinedSizeLegendWidget *QgsRendererWidget::openDataDefinedSizeLegendWidget( const QgsMarkerSymbol *symbol, const QgsDataDefinedSizeLegend *ddsLegend )
279279
{
280-
*ok = false;
281-
282280
QgsProperty ddSize = symbol->dataDefinedSize();
283281
if ( !ddSize || !ddSize.isActive() )
284282
{
@@ -291,12 +289,10 @@ QgsDataDefinedSizeLegend *QgsRendererWidget::showDataDefinedSizeLegendDialog( co
291289
return nullptr;
292290
}
293291

294-
QgsDataDefinedSizeLegendDialog dlg( ddsLegend, ddSize, symbol->clone(), mContext.mapCanvas() );
295-
if ( !dlg.exec() )
296-
return nullptr;
297-
298-
*ok = true;
299-
return dlg.dataDefinedSizeLegend();
292+
QgsDataDefinedSizeLegendWidget *panel = new QgsDataDefinedSizeLegendWidget( ddsLegend, ddSize, symbol->clone(), mContext.mapCanvas() );
293+
connect( panel, &QgsPanelWidget::widgetChanged, this, &QgsPanelWidget::widgetChanged );
294+
openPanel( panel );
295+
return panel;
300296
}
301297

302298

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "qgssymbollayer.h"
2525

2626
class QgsDataDefinedSizeLegend;
27+
class QgsDataDefinedSizeLegendWidget;
2728
class QgsVectorLayer;
2829
class QgsStyle;
2930
class QgsFeatureRenderer;
@@ -99,10 +100,10 @@ class GUI_EXPORT QgsRendererWidget : public QgsPanelWidget
99100
virtual QList<QgsSymbol *> selectedSymbols() { return QList<QgsSymbol *>(); }
100101
virtual void refreshSymbolView() {}
101102

102-
//! Shows GUI to setup data-defined size legend. If accepted, ok argument will be true and a new legend configuration is returned.
103-
//! Caller takes ownership of the returned object.
103+
//! Shows GUI to setup data-defined size legend.
104+
//! Returns newly open panel - may be null if it coult not be opened. Ownership is not transferred.
104105
//! \since QGIS 3.0
105-
QgsDataDefinedSizeLegend *showDataDefinedSizeLegendDialog( const QgsMarkerSymbol *symbol, const QgsDataDefinedSizeLegend *ddsLegend, bool *ok SIP_OUT ) SIP_FACTORY;
106+
QgsDataDefinedSizeLegendWidget *openDataDefinedSizeLegendWidget( const QgsMarkerSymbol *symbol, const QgsDataDefinedSizeLegend *ddsLegend );
106107

107108
protected slots:
108109
void contextMenuViewCategories( QPoint p );

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "qgssinglesymbolrendererwidget.h"
1616

1717
#include "qgsdatadefinedsizelegend.h"
18+
#include "qgsdatadefinedsizelegendwidget.h"
1819
#include "qgssinglesymbolrenderer.h"
1920
#include "qgssymbol.h"
2021

@@ -117,12 +118,14 @@ void QgsSingleSymbolRendererWidget::showSymbolLevels()
117118

118119
void QgsSingleSymbolRendererWidget::dataDefinedSizeLegend()
119120
{
120-
bool ok;
121121
QgsMarkerSymbol *s = static_cast<QgsMarkerSymbol *>( mSingleSymbol ); // this should be only enabled for marker symbols
122-
std::unique_ptr<QgsDataDefinedSizeLegend> ddsLegend( showDataDefinedSizeLegendDialog( s, mRenderer->dataDefinedSizeLegend(), &ok ) );
123-
if ( ok )
122+
QgsDataDefinedSizeLegendWidget *panel = openDataDefinedSizeLegendWidget( s, mRenderer->dataDefinedSizeLegend() );
123+
if ( panel )
124124
{
125-
mRenderer->setDataDefinedSizeLegend( ddsLegend.release() ); // ownership is passed from dlg to renderer
126-
emit widgetChanged();
125+
connect( panel, &QgsPanelWidget::widgetChanged, [ = ]
126+
{
127+
mRenderer->setDataDefinedSizeLegend( panel->dataDefinedSizeLegend() );
128+
emit widgetChanged();
129+
} );
127130
}
128131
}

‎src/ui/qgsdatadefinedsizelegenddialog.ui renamed to ‎src/ui/qgsdatadefinedsizelegendwidget.ui

Lines changed: 4 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ui version="4.0">
3-
<class>QgsDataDefinedSizeLegendDialog</class>
4-
<widget class="QDialog" name="QgsDataDefinedSizeLegendDialog">
3+
<class>QgsDataDefinedSizeLegendWidget</class>
4+
<widget class="QWidget" name="QgsDataDefinedSizeLegendWidget">
55
<property name="geometry">
66
<rect>
77
<x>0</x>
@@ -132,23 +132,13 @@
132132
</item>
133133
</layout>
134134
</item>
135-
<item row="0" column="2">
135+
<item row="0" column="1">
136136
<widget class="QTreeView" name="viewLayerTree">
137137
<property name="headerHidden">
138138
<bool>true</bool>
139139
</property>
140140
</widget>
141141
</item>
142-
<item row="1" column="0" colspan="3">
143-
<widget class="QDialogButtonBox" name="buttonBox">
144-
<property name="orientation">
145-
<enum>Qt::Horizontal</enum>
146-
</property>
147-
<property name="standardButtons">
148-
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
149-
</property>
150-
</widget>
151-
</item>
152142
</layout>
153143
</widget>
154144
<tabstops>
@@ -164,38 +154,5 @@
164154
<tabstop>viewLayerTree</tabstop>
165155
</tabstops>
166156
<resources/>
167-
<connections>
168-
<connection>
169-
<sender>buttonBox</sender>
170-
<signal>accepted()</signal>
171-
<receiver>QgsDataDefinedSizeLegendDialog</receiver>
172-
<slot>accept()</slot>
173-
<hints>
174-
<hint type="sourcelabel">
175-
<x>248</x>
176-
<y>254</y>
177-
</hint>
178-
<hint type="destinationlabel">
179-
<x>157</x>
180-
<y>274</y>
181-
</hint>
182-
</hints>
183-
</connection>
184-
<connection>
185-
<sender>buttonBox</sender>
186-
<signal>rejected()</signal>
187-
<receiver>QgsDataDefinedSizeLegendDialog</receiver>
188-
<slot>reject()</slot>
189-
<hints>
190-
<hint type="sourcelabel">
191-
<x>316</x>
192-
<y>260</y>
193-
</hint>
194-
<hint type="destinationlabel">
195-
<x>286</x>
196-
<y>274</y>
197-
</hint>
198-
</hints>
199-
</connection>
200-
</connections>
157+
<connections/>
201158
</ui>

0 commit comments

Comments
 (0)
Please sign in to comment.