@@ -133,10 +133,7 @@ void QgsPropertyAssistantWidget::computeValuesFromLayer()
133133
134134void QgsPropertyAssistantWidget::updatePreview ()
135135{
136- if ( !mTransformerWidget || !mSymbol )
137- return ;
138-
139- if ( dockMode () )
136+ if ( !mTransformerWidget || !mLayer ) // TODO - make this work OK without a layer
140137 return ;
141138
142139 mLegendPreview ->setIconSize ( QSize ( 512 , 512 ) );
@@ -145,7 +142,7 @@ void QgsPropertyAssistantWidget::updatePreview()
145142 QList<double > breaks = QgsSymbolLayerUtils::prettyBreaks ( minValueSpinBox->value (),
146143 maxValueSpinBox->value (), 4 );
147144
148- QList< QgsSymbolLegendNode* > nodes = mTransformerWidget ->generatePreviews ( breaks, mLayerTreeLayer , mLayer , mSymbol .get (), minValueSpinBox->value (),
145+ QList< QgsSymbolLegendNode* > nodes = mTransformerWidget ->generatePreviews ( breaks, mLayerTreeLayer , mSymbol .get (), minValueSpinBox->value (),
149146 maxValueSpinBox->value () );
150147 if ( nodes.isEmpty () )
151148 {
@@ -321,29 +318,44 @@ QgsSizeScaleTransformer* QgsPropertySizeAssistantWidget::createTransformer( doub
321318 return transformer;
322319}
323320
324- QList< QgsSymbolLegendNode* > QgsPropertySizeAssistantWidget::generatePreviews ( const QList<double >& breaks, QgsLayerTreeLayer* parent, const QgsVectorLayer* layer, const QgsSymbol* symbol, double minValue, double maxValue ) const
321+ QList< QgsSymbolLegendNode* > QgsPropertySizeAssistantWidget::generatePreviews ( const QList<double >& breaks, QgsLayerTreeLayer* parent, const QgsSymbol* symbol, double minValue, double maxValue ) const
325322{
326323 QList< QgsSymbolLegendNode* > nodes;
327324
328- if ( !symbol || !layer )
325+ const QgsSymbol* legendSymbol = symbol;
326+ std::unique_ptr< QgsSymbol > tempSymbol;
327+
328+ if ( !legendSymbol )
329+ {
330+ if ( mDefinition .standardTemplate () == QgsPropertyDefinition::Size )
331+ {
332+ tempSymbol.reset ( QgsMarkerSymbol::createSimple ( QgsStringMap () ) );
333+ }
334+ else if ( mDefinition .standardTemplate () == QgsPropertyDefinition::StrokeWidth )
335+ {
336+ tempSymbol.reset ( QgsLineSymbol::createSimple ( QgsStringMap () ) );
337+ }
338+ legendSymbol = tempSymbol.get ();
339+ }
340+ if ( !legendSymbol )
329341 return nodes;
330342
331343 std::unique_ptr< QgsSizeScaleTransformer > t ( createTransformer ( minValue, maxValue ) );
332344
333345 for ( int i = 0 ; i < breaks.length (); i++ )
334346 {
335347 std::unique_ptr< QgsSymbolLegendNode > node;
336- if ( dynamic_cast <const QgsMarkerSymbol*>( symbol ) )
348+ if ( dynamic_cast <const QgsMarkerSymbol*>( legendSymbol ) )
337349 {
338- std::unique_ptr< QgsMarkerSymbol > symbolClone ( static_cast <QgsMarkerSymbol*>( symbol ->clone () ) );
350+ std::unique_ptr< QgsMarkerSymbol > symbolClone ( static_cast <QgsMarkerSymbol*>( legendSymbol ->clone () ) );
339351 symbolClone->setDataDefinedSize ( QgsProperty () );
340352 symbolClone->setDataDefinedAngle ( QgsProperty () ); // to avoid symbol not being drawn
341353 symbolClone->setSize ( t->size ( breaks[i] ) );
342354 node.reset ( new QgsSymbolLegendNode ( parent, QgsLegendSymbolItem ( symbolClone.get (), QString::number ( i ), QString () ) ) );
343355 }
344- else if ( dynamic_cast <const QgsLineSymbol*>( symbol ) )
356+ else if ( dynamic_cast <const QgsLineSymbol*>( legendSymbol ) )
345357 {
346- std::unique_ptr< QgsLineSymbol > symbolClone ( static_cast <QgsLineSymbol*>( symbol ->clone () ) );
358+ std::unique_ptr< QgsLineSymbol > symbolClone ( static_cast <QgsLineSymbol*>( legendSymbol ->clone () ) );
347359 symbolClone->setDataDefinedWidth ( QgsProperty () );
348360 symbolClone->setWidth ( t->size ( breaks[i] ) );
349361 node.reset ( new QgsSymbolLegendNode ( parent, QgsLegendSymbolItem ( symbolClone.get (), QString::number ( i ), QString () ) ) );
@@ -354,7 +366,7 @@ QList< QgsSymbolLegendNode* > QgsPropertySizeAssistantWidget::generatePreviews(
354366 return nodes;
355367}
356368
357- QList<QgsSymbolLegendNode*> QgsPropertyAbstractTransformerWidget::generatePreviews ( const QList<double >& , QgsLayerTreeLayer* , const QgsVectorLayer*, const QgsSymbol*, double , double ) const
369+ QList<QgsSymbolLegendNode*> QgsPropertyAbstractTransformerWidget::generatePreviews ( const QList<double >& , QgsLayerTreeLayer* , const QgsSymbol*, double , double ) const
358370{
359371 return QList< QgsSymbolLegendNode* >();
360372}
0 commit comments