Skip to content

Commit e4aa1c5

Browse files
committed
Fix crash when editing marker through symbol manager (fix #13077)
1 parent 4cf3825 commit e4aa1c5

File tree

3 files changed

+32
-16
lines changed

3 files changed

+32
-16
lines changed

src/gui/symbology-ng/qgsrendererv2widget.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,24 +57,24 @@ class GUI_EXPORT QgsRendererV2Widget : public QWidget
5757
QAction* mCopyAction;
5858
QAction* mPasteAction;
5959

60-
/**Subclasses may provide the capability of changing multiple symbols at once by implementing the following two methods
60+
/** Subclasses may provide the capability of changing multiple symbols at once by implementing the following two methods
6161
and by connecting the slot contextMenuViewCategories(const QPoint&)*/
6262
virtual QList<QgsSymbolV2*> selectedSymbols() { return QList<QgsSymbolV2*>(); }
6363
virtual void refreshSymbolView() {}
6464

6565
protected slots:
6666
void contextMenuViewCategories( const QPoint& p );
67-
/**Change color of selected symbols*/
67+
/** Change color of selected symbols*/
6868
void changeSymbolColor();
69-
/**Change opacity of selected symbols*/
69+
/** Change opacity of selected symbols*/
7070
void changeSymbolTransparency();
71-
/**Change units mm/map units of selected symbols*/
71+
/** Change units mm/map units of selected symbols*/
7272
void changeSymbolUnit();
73-
/**Change line widths of selected symbols*/
73+
/** Change line widths of selected symbols*/
7474
void changeSymbolWidth();
75-
/**Change marker sizes of selected symbols*/
75+
/** Change marker sizes of selected symbols*/
7676
void changeSymbolSize();
77-
/**Change marker angles of selected symbols*/
77+
/** Change marker angles of selected symbols*/
7878
void changeSymbolAngle();
7979

8080
virtual void copy() {}
@@ -173,7 +173,7 @@ class GUI_EXPORT QgsDataDefinedSizeDialog : public QgsDataDefinedValueDialog
173173
: QgsDataDefinedValueDialog( symbolList, layer, tr( "Size" ) )
174174
{
175175
init( tr( "Symbol size" ) );
176-
if ( symbolList.length() )
176+
if ( symbolList.length() && mLayer )
177177
mDDBtn->setAssistant( tr( "Size Assistant..." ), new QgsSizeScaleWidget( mLayer, static_cast<const QgsMarkerSymbolV2*>( symbolList[0] ) ) );
178178
}
179179

src/gui/symbology-ng/qgssizescalewidget.cpp

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,20 @@ QgsSizeScaleWidget::QgsSizeScaleWidget( const QgsVectorLayer * layer, const QgsM
8282
: mSymbol( symbol )
8383
// we just use the minimumValue and maximumValue from the layer, unfortunately they are
8484
// non const, so we get the layer from the registry instead
85-
, mLayer( dynamic_cast<QgsVectorLayer *>( QgsMapLayerRegistry::instance()->mapLayer( layer->id() ) ) )
85+
, mLayer( layer ? dynamic_cast<QgsVectorLayer *>( QgsMapLayerRegistry::instance()->mapLayer( layer->id() ) ) : 0 )
8686
{
8787
setupUi( this );
8888
setWindowFlags( Qt::WindowStaysOnTopHint );
8989

90-
mLayerTreeLayer = new QgsLayerTreeLayer( mLayer );
91-
mRoot.addChildNode( mLayerTreeLayer ); // takes ownership
90+
if ( mLayer )
91+
{
92+
mLayerTreeLayer = new QgsLayerTreeLayer( mLayer );
93+
mRoot.addChildNode( mLayerTreeLayer ); // takes ownership
94+
}
95+
else
96+
{
97+
mLayerTreeLayer = 0;
98+
}
9299

93100
treeView->setModel( &mPreviewList );
94101
treeView->setItemDelegate( new ItemDelegate( &mPreviewList ) );
@@ -104,7 +111,10 @@ QgsSizeScaleWidget::QgsSizeScaleWidget( const QgsVectorLayer * layer, const QgsM
104111
connect( computeValuesButton, SIGNAL( clicked() ), computeValuesButton, SLOT( showMenu() ) );
105112

106113
//mExpressionWidget->setFilters( QgsFieldProxyModel::Numeric | QgsFieldProxyModel::Date );
107-
mExpressionWidget->setLayer( mLayer );
114+
if ( mLayer )
115+
{
116+
mExpressionWidget->setLayer( mLayer );
117+
}
108118

109119
scaleMethodComboBox->addItem( tr( "Flannery" ), int( QgsScaleExpression::Flannery ) );
110120
scaleMethodComboBox->addItem( tr( "Surface" ), int( QgsScaleExpression::Area ) );
@@ -153,7 +163,7 @@ QgsScaleExpression *QgsSizeScaleWidget::createExpression() const
153163

154164
void QgsSizeScaleWidget::updatePreview()
155165
{
156-
if ( !mSymbol )
166+
if ( !mSymbol || !mLayer )
157167
return;
158168

159169
QScopedPointer<QgsScaleExpression> expr( createExpression() );
@@ -193,6 +203,9 @@ void QgsSizeScaleWidget::updatePreview()
193203

194204
void QgsSizeScaleWidget::computeFromLayerTriggered()
195205
{
206+
if ( !mLayer )
207+
return;
208+
196209
QgsExpression expression( mExpressionWidget->currentField() );
197210
if ( ! expression.prepare( mLayer->pendingFields() ) )
198211
return;

src/gui/symbology-ng/qgssymbollayerv2widget.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,8 @@ QgsSimpleMarkerSymbolLayerV2Widget::QgsSimpleMarkerSymbolLayerV2Widget( const Qg
338338
//make a temporary symbol for the size assistant preview
339339
mAssistantPreviewSymbol = new QgsMarkerSymbolV2();
340340

341-
mSizeDDBtn->setAssistant( tr( "Size Assistant..." ), new QgsSizeScaleWidget( mVectorLayer, mAssistantPreviewSymbol ) );
341+
if ( mVectorLayer )
342+
mSizeDDBtn->setAssistant( tr( "Size Assistant..." ), new QgsSizeScaleWidget( mVectorLayer, mAssistantPreviewSymbol ) );
342343

343344
QSize size = lstNames->iconSize();
344345
QStringList names;
@@ -1538,7 +1539,8 @@ QgsSvgMarkerSymbolLayerV2Widget::QgsSvgMarkerSymbolLayerV2Widget( const QgsVecto
15381539

15391540
//make a temporary symbol for the size assistant preview
15401541
mAssistantPreviewSymbol = new QgsMarkerSymbolV2();
1541-
mSizeDDBtn->setAssistant( tr( "Size Assistant..." ), new QgsSizeScaleWidget( mVectorLayer, mAssistantPreviewSymbol ) );
1542+
if ( mVectorLayer )
1543+
mSizeDDBtn->setAssistant( tr( "Size Assistant..." ), new QgsSizeScaleWidget( mVectorLayer, mAssistantPreviewSymbol ) );
15421544
}
15431545

15441546
QgsSvgMarkerSymbolLayerV2Widget::~QgsSvgMarkerSymbolLayerV2Widget()
@@ -2504,7 +2506,8 @@ QgsFontMarkerSymbolLayerV2Widget::QgsFontMarkerSymbolLayerV2Widget( const QgsVec
25042506
//make a temporary symbol for the size assistant preview
25052507
mAssistantPreviewSymbol = new QgsMarkerSymbolV2();
25062508

2507-
mSizeDDBtn->setAssistant( tr( "Size Assistant..." ), new QgsSizeScaleWidget( mVectorLayer, mAssistantPreviewSymbol ) );
2509+
if ( mVectorLayer )
2510+
mSizeDDBtn->setAssistant( tr( "Size Assistant..." ), new QgsSizeScaleWidget( mVectorLayer, mAssistantPreviewSymbol ) );
25082511

25092512
connect( cboFont, SIGNAL( currentFontChanged( const QFont & ) ), this, SLOT( setFontFamily( const QFont& ) ) );
25102513
connect( spinSize, SIGNAL( valueChanged( double ) ), this, SLOT( setSize( double ) ) );

0 commit comments

Comments
 (0)