Skip to content

Commit df939c3

Browse files
committed
Data defined all the things!
Add a bunch of missing data defined options for symbology. Also fix dialog sizing issues.
1 parent 8216f7d commit df939c3

19 files changed

Lines changed: 473 additions & 270 deletions

python/gui/symbology-ng/qgsdatadefinedsymboldialog.sip

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,8 @@ class QgsDataDefinedSymbolDialog : QDialog
2525
static QString gradientCoordModeHelpText();
2626
static QString gradientSpreadHelpText();
2727
static QString boolHelpText();
28+
static QString lineStyleHelpText();
29+
static QString joinStyleHelpText();
30+
static QString capStyleHelpText();
31+
static QString fillStyleHelpText();
2832
};

src/core/symbology-ng/qgsfillsymbollayerv2.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ void QgsSimpleFillSymbolLayerV2::applyDataDefinedSymbology( QgsSymbolV2RenderCon
8585
{
8686
brush.setColor( QgsSymbolLayerV2Utils::decodeColor( colorExpression->evaluate( const_cast<QgsFeature*>( context.feature() ) ).toString() ) );
8787
}
88+
QgsExpression* fillStyleExpression = expression( "fill_style" );
89+
if ( fillStyleExpression )
90+
{
91+
brush.setStyle( QgsSymbolLayerV2Utils::decodeBrushStyle( fillStyleExpression->evaluate( const_cast<QgsFeature*>( context.feature() ) ).toString() ) );
92+
}
8893
QgsExpression* colorBorderExpression = expression( "color_border" );
8994
if ( colorBorderExpression )
9095
{
@@ -98,6 +103,18 @@ void QgsSimpleFillSymbolLayerV2::applyDataDefinedSymbology( QgsSymbolV2RenderCon
98103
pen.setWidthF( width );
99104
selPen.setWidthF( width );
100105
}
106+
QgsExpression* borderStyleExpression = expression( "border_style" );
107+
if ( borderStyleExpression )
108+
{
109+
pen.setStyle( QgsSymbolLayerV2Utils::decodePenStyle( borderStyleExpression->evaluate( const_cast<QgsFeature*>( context.feature() ) ).toString() ) );
110+
selPen.setStyle( QgsSymbolLayerV2Utils::decodePenStyle( borderStyleExpression->evaluate( const_cast<QgsFeature*>( context.feature() ) ).toString() ) );
111+
}
112+
QgsExpression* joinStyleExpression = expression( "join_style" );
113+
if ( joinStyleExpression )
114+
{
115+
pen.setJoinStyle( QgsSymbolLayerV2Utils::decodePenJoinStyle( joinStyleExpression->evaluate( const_cast<QgsFeature*>( context.feature() ) ).toString() ) );
116+
selPen.setJoinStyle( QgsSymbolLayerV2Utils::decodePenJoinStyle( joinStyleExpression->evaluate( const_cast<QgsFeature*>( context.feature() ) ).toString() ) );
117+
}
101118
}
102119

103120

@@ -194,6 +211,18 @@ QgsSymbolLayerV2* QgsSimpleFillSymbolLayerV2::create( const QgsStringMap& props
194211
{
195212
sl->setDataDefinedProperty( "width_border", props["width_border_expression"] );
196213
}
214+
if ( props.contains( "fill_style_expression" ) )
215+
{
216+
sl->setDataDefinedProperty( "fill_style", props["fill_style_expression"] );
217+
}
218+
if ( props.contains( "border_style_expression" ) )
219+
{
220+
sl->setDataDefinedProperty( "border_style", props["border_style_expression"] );
221+
}
222+
if ( props.contains( "join_style_expression" ) )
223+
{
224+
sl->setDataDefinedProperty( "join_style", props["join_style_expression"] );
225+
}
197226
return sl;
198227
}
199228

src/core/symbology-ng/qgslinesymbollayerv2.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,8 @@ QgsSymbolLayerV2* QgsSimpleLineSymbolLayerV2::create( const QgsStringMap& props
187187
l->setDataDefinedProperty( "joinstyle", props["joinstyle_expression"] );
188188
if ( props.contains( "capstyle_expression" ) )
189189
l->setDataDefinedProperty( "capstyle", props["capstyle_expression"] );
190+
if ( props.contains( "line_style_expression" ) )
191+
l->setDataDefinedProperty( "line_style", props["line_style_expression"] );
190192

191193
return l;
192194
}
@@ -534,6 +536,14 @@ void QgsSimpleLineSymbolLayerV2::applyDataDefinedSymbology( QgsSymbolV2RenderCon
534536
pen.setDashPattern( dashVector );
535537
}
536538

539+
//line style
540+
QgsExpression* lineStyleExpression = expression( "line_style" );
541+
if ( lineStyleExpression )
542+
{
543+
QString lineStyleString = lineStyleExpression->evaluate( const_cast<QgsFeature*>( context.feature() ) ).toString();
544+
pen.setStyle( QgsSymbolLayerV2Utils::decodePenStyle( lineStyleString ) );
545+
}
546+
537547
//join style
538548
QgsExpression* joinStyleExpression = expression( "joinstyle" );
539549
if ( joinStyleExpression )

src/core/symbology-ng/qgsmarkersymbollayerv2.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,10 @@ QgsSymbolLayerV2* QgsSimpleMarkerSymbolLayerV2::create( const QgsStringMap& prop
161161
{
162162
m->setDataDefinedProperty( "color_border", props["color_border_expression"] );
163163
}
164+
if ( props.contains( "outline_style_expression" ) )
165+
{
166+
m->setDataDefinedProperty( "outline_style", props["outline_style_expression"] );
167+
}
164168
if ( props.contains( "outline_width_expression" ) )
165169
{
166170
m->setDataDefinedProperty( "outline_width", props["outline_width_expression"] );
@@ -226,7 +230,8 @@ void QgsSimpleMarkerSymbolLayerV2::startRender( QgsSymbolV2RenderContext& contex
226230
// - size, rotation, shape, color, border color is not data-defined
227231
// - drawing to screen (not printer)
228232
mUsingCache = !hasDataDefinedRotation && !hasDataDefinedSize && !context.renderContext().forceVectorOutput()
229-
&& !dataDefinedProperty( "name" ) && !dataDefinedProperty( "color" ) && !dataDefinedProperty( "color_border" ) && !dataDefinedProperty( "outline_width" ) &&
233+
&& !dataDefinedProperty( "name" ) && !dataDefinedProperty( "color" ) && !dataDefinedProperty( "color_border" )
234+
&& !dataDefinedProperty( "outline_width" ) && !dataDefinedProperty( "outline_style" ) &&
230235
!dataDefinedProperty( "size" );
231236

232237
// use either QPolygonF or QPainterPath for drawing
@@ -581,6 +586,7 @@ void QgsSimpleMarkerSymbolLayerV2::renderPoint( const QPointF& point, QgsSymbolV
581586
QgsExpression* colorExpression = expression( "color" );
582587
QgsExpression* colorBorderExpression = expression( "color_border" );
583588
QgsExpression* outlineWidthExpression = expression( "outline_width" );
589+
QgsExpression* outlineStyleExpression = expression( "outline_style" );
584590
if ( colorExpression )
585591
{
586592
mBrush.setColor( QgsSymbolLayerV2Utils::decodeColor( colorExpression->evaluate( const_cast<QgsFeature*>( context.feature() ) ).toString() ) );
@@ -596,6 +602,12 @@ void QgsSimpleMarkerSymbolLayerV2::renderPoint( const QPointF& point, QgsSymbolV
596602
mPen.setWidthF( outlineWidth * QgsSymbolLayerV2Utils::lineWidthScaleFactor( context.renderContext(), mOutlineWidthUnit, mOutlineWidthMapUnitScale ) );
597603
mSelPen.setWidthF( outlineWidth * QgsSymbolLayerV2Utils::lineWidthScaleFactor( context.renderContext(), mOutlineWidthUnit, mOutlineWidthMapUnitScale ) );
598604
}
605+
if ( outlineStyleExpression )
606+
{
607+
QString outlineStyle = outlineStyleExpression->evaluate( const_cast<QgsFeature*>( context.feature() ) ).toString();
608+
mPen.setStyle( QgsSymbolLayerV2Utils::decodePenStyle( outlineStyle ) );
609+
mSelPen.setStyle( QgsSymbolLayerV2Utils::decodePenStyle( outlineStyle ) );
610+
}
599611

600612
p->setBrush( context.selected() ? mSelBrush : mBrush );
601613
p->setPen( context.selected() ? mSelPen : mPen );

src/gui/symbology-ng/qgsdatadefinedsymboldialog.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,4 +139,26 @@ QString QgsDataDefinedSymbolDialog::boolHelpText()
139139
return tr( "0 (false)|1 (true)" );
140140
}
141141

142+
QString QgsDataDefinedSymbolDialog::lineStyleHelpText()
143+
{
144+
return "'no'|'solid'|'dash'|'dot'|'dash dot'|'dash dot dot'";
145+
}
146+
147+
QString QgsDataDefinedSymbolDialog::joinStyleHelpText()
148+
{
149+
return "'bevel'|'miter'|'round'";
150+
}
151+
152+
QString QgsDataDefinedSymbolDialog::capStyleHelpText()
153+
{
154+
return "'square'|'flat'|'round'";
155+
}
156+
157+
QString QgsDataDefinedSymbolDialog::fillStyleHelpText()
158+
{
159+
return "'solid'|'horizontal'|'vertical'|'cross'|'b_diagonal'|'f_diagonal'|"
160+
"'diagonal_x'|'dense1'|'dense2'|'dense3'|'dense4'|'dense5'|"
161+
"'dense6'|'dense7'|'no'";
162+
}
163+
142164

src/gui/symbology-ng/qgsdatadefinedsymboldialog.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ class GUI_EXPORT QgsDataDefinedSymbolDialog: public QDialog, private Ui::QgsData
3939
static QString gradientCoordModeHelpText();
4040
static QString gradientSpreadHelpText();
4141
static QString boolHelpText();
42+
static QString lineStyleHelpText();
43+
static QString joinStyleHelpText();
44+
static QString capStyleHelpText();
45+
static QString fillStyleHelpText();
4246

4347
private:
4448
const QgsVectorLayer* mVectorLayer;

src/gui/symbology-ng/qgsellipsesymbollayerv2widget.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ void QgsEllipseSymbolLayerV2Widget::setSymbolLayer( QgsSymbolLayerV2* layer )
116116
registerDataDefinedButton( mOutlineWidthDDBtn, "outline_width", QgsDataDefinedButton::Double, "" );
117117
registerDataDefinedButton( mFillColorDDBtn, "fill_color", QgsDataDefinedButton::String, "'red,green,blue,alpha' e.g. '255,0,0,255'" );
118118
registerDataDefinedButton( mBorderColorDDBtn, "outline_color", QgsDataDefinedButton::String, "'red,green,blue,alpha' e.g. '255,0,0,255'" );
119-
registerDataDefinedButton( mOutlineStyleDDBtn, "outline_style", QgsDataDefinedButton::String, "'no'|'solid'|'dash'|'dot'|'dash dot'|'dash dot dot'" );
119+
registerDataDefinedButton( mOutlineStyleDDBtn, "outline_style", QgsDataDefinedButton::String, QgsDataDefinedSymbolDialog::lineStyleHelpText() );
120120
registerDataDefinedButton( mShapeDDBtn, "symbol_name", QgsDataDefinedButton::String, "'circle', 'rectangle', 'cross', 'triangle'" );
121121
registerDataDefinedButton( mOffsetDDBtn, "offset", QgsDataDefinedButton::String, "'x,y' e.g. '2,3.5'" );
122122
registerDataDefinedButton( mHorizontalAnchorDDBtn, "horizontal_anchor_point", QgsDataDefinedButton::String, "'left', 'center' or 'right'" );

src/gui/symbology-ng/qgssymbollayerv2widget.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,8 +186,9 @@ void QgsSimpleLineSymbolLayerV2Widget::setSymbolLayer( QgsSymbolLayerV2* layer )
186186
registerDataDefinedButton( mPenWidthDDBtn, "width", QgsDataDefinedButton::Double, "" );
187187
registerDataDefinedButton( mOffsetDDBtn, "offset", QgsDataDefinedButton::String, QgsDataDefinedSymbolDialog::offsetHelpText() );
188188
registerDataDefinedButton( mDashPatternDDBtn, "customdash", QgsDataDefinedButton::String, tr( "'<dash>;<space>' e.g. '8;2;1;2'" ) );
189-
registerDataDefinedButton( mJoinStyleDDBtn, "joinstyle", QgsDataDefinedButton::String, tr( "'bevel'|'miter'|'round'" ) );
190-
registerDataDefinedButton( mCapStyleDDBtn, "capstyle", QgsDataDefinedButton::String, tr( "'square'|'flat'|'round'" ) );
189+
registerDataDefinedButton( mPenStyleDDBtn, "line_style", QgsDataDefinedButton::String, QgsDataDefinedSymbolDialog::lineStyleHelpText() );
190+
registerDataDefinedButton( mJoinStyleDDBtn, "joinstyle", QgsDataDefinedButton::String, QgsDataDefinedSymbolDialog::joinStyleHelpText() );
191+
registerDataDefinedButton( mCapStyleDDBtn, "capstyle", QgsDataDefinedButton::String, QgsDataDefinedSymbolDialog::capStyleHelpText() );
191192
}
192193

193194
QgsSymbolLayerV2* QgsSimpleLineSymbolLayerV2Widget::symbolLayer()
@@ -425,6 +426,7 @@ void QgsSimpleMarkerSymbolLayerV2Widget::setSymbolLayer( QgsSymbolLayerV2* layer
425426
registerDataDefinedButton( mFillColorDDBtn, "color", QgsDataDefinedButton::String, QgsDataDefinedSymbolDialog::colorHelpText() );
426427
registerDataDefinedButton( mBorderColorDDBtn, "color_border", QgsDataDefinedButton::String, QgsDataDefinedSymbolDialog::colorHelpText() );
427428
registerDataDefinedButton( mOutlineWidthDDBtn, "outline_width", QgsDataDefinedButton::Double, "" );
429+
registerDataDefinedButton( mOutlineStyleDDBtn, "outline_style", QgsDataDefinedButton::String, QgsDataDefinedSymbolDialog::lineStyleHelpText() );
428430
registerDataDefinedButton( mSizeDDBtn, "size", QgsDataDefinedButton::Double, "" );
429431
registerDataDefinedButton( mAngleDDBtn, "angle", QgsDataDefinedButton::Double, "" );
430432
registerDataDefinedButton( mOffsetDDBtn, "offset", QgsDataDefinedButton::String, QgsDataDefinedSymbolDialog::offsetHelpText() );
@@ -626,6 +628,10 @@ void QgsSimpleFillSymbolLayerV2Widget::setSymbolLayer( QgsSymbolLayerV2* layer )
626628
registerDataDefinedButton( mFillColorDDBtn, "color", QgsDataDefinedButton::String, QgsDataDefinedSymbolDialog::colorHelpText() );
627629
registerDataDefinedButton( mBorderColorDDBtn, "color_border", QgsDataDefinedButton::String, QgsDataDefinedSymbolDialog::colorHelpText() );
628630
registerDataDefinedButton( mBorderWidthDDBtn, "width_border", QgsDataDefinedButton::Double, "" );
631+
registerDataDefinedButton( mFillStyleDDBtn, "fill_style", QgsDataDefinedButton::String, QgsDataDefinedSymbolDialog::fillStyleHelpText() );
632+
registerDataDefinedButton( mBorderStyleDDBtn, "border_style", QgsDataDefinedButton::String, QgsDataDefinedSymbolDialog::lineStyleHelpText() );
633+
registerDataDefinedButton( mJoinStyleDDBtn, "join_style", QgsDataDefinedButton::String, QgsDataDefinedSymbolDialog::joinStyleHelpText() );
634+
629635
}
630636

631637
QgsSymbolLayerV2* QgsSimpleFillSymbolLayerV2Widget::symbolLayer()

src/ui/symbollayer/widget_gradientfill.ui

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>780</width>
10-
<height>657</height>
9+
<width>556</width>
10+
<height>342</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
@@ -139,7 +139,7 @@
139139
<item>
140140
<widget class="QCheckBox" name="checkRefPoint1Centroid">
141141
<property name="text">
142-
<string>Feature centroid</string>
142+
<string>Centroid</string>
143143
</property>
144144
</widget>
145145
</item>
@@ -411,7 +411,7 @@
411411
<item>
412412
<widget class="QCheckBox" name="checkRefPoint2Centroid">
413413
<property name="text">
414-
<string>Feature centroid</string>
414+
<string>Centroid</string>
415415
</property>
416416
</widget>
417417
</item>

src/ui/symbollayer/widget_linepatternfill.ui

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>580</width>
10-
<height>387</height>
9+
<width>345</width>
10+
<height>176</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">

0 commit comments

Comments
 (0)