Skip to content

Commit 1ea6a72

Browse files
committedMar 29, 2013
Data defined symbology for line pattern symbol layer
1 parent 6726875 commit 1ea6a72

File tree

5 files changed

+371
-84
lines changed

5 files changed

+371
-84
lines changed
 

‎src/core/symbology-ng/qgsfillsymbollayerv2.cpp

Lines changed: 228 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1237,7 +1237,7 @@ void QgsSVGFillSymbolLayer::prepareExpressions( const QgsVectorLayer* vl )
12371237
}
12381238

12391239
QgsLinePatternFillSymbolLayer::QgsLinePatternFillSymbolLayer(): QgsImageFillSymbolLayer(), mDistanceUnit( QgsSymbolV2::MM ), mLineWidthUnit( QgsSymbolV2::MM ),
1240-
mOffsetUnit( QgsSymbolV2::MM )
1240+
mOffsetUnit( QgsSymbolV2::MM ), mLineAngleExpression( 0 ), mDistanceExpression( 0 ), mLineWidthExpression( 0 ), mColorExpression( 0 )
12411241
{
12421242
}
12431243

@@ -1316,6 +1316,24 @@ QgsSymbolLayerV2* QgsLinePatternFillSymbolLayer::create( const QgsStringMap& pro
13161316
{
13171317
patternLayer->setOffsetUnit( QgsSymbolLayerV2Utils::decodeOutputUnit( properties["offset_unit"] ) );
13181318
}
1319+
1320+
//data defined properties
1321+
if ( properties.contains( "lineangle_expression" ) )
1322+
{
1323+
patternLayer->setDataDefinedProperty( "lineangle", properties["lineangle_expression"] );
1324+
}
1325+
if ( properties.contains( "distance_expression" ) )
1326+
{
1327+
patternLayer->setDataDefinedProperty( "distance", properties["distance_expression"] );
1328+
}
1329+
if ( properties.contains( "linewidth_expression" ) )
1330+
{
1331+
patternLayer->setDataDefinedProperty( "linewidth", properties["linewidth_expression"] );
1332+
}
1333+
if ( properties.contains( "color_expression" ) )
1334+
{
1335+
patternLayer->setDataDefinedProperty( "color", properties["color_expression"] );
1336+
}
13191337
return patternLayer;
13201338
}
13211339

@@ -1324,24 +1342,25 @@ QString QgsLinePatternFillSymbolLayer::layerType() const
13241342
return "LinePatternFill";
13251343
}
13261344

1327-
void QgsLinePatternFillSymbolLayer::startRender( QgsSymbolV2RenderContext& context )
1345+
void QgsLinePatternFillSymbolLayer::applyPattern( const QgsSymbolV2RenderContext& context, QBrush& brush, double lineAngle, double distance,
1346+
double lineWidth, const QColor& color )
13281347
{
13291348
const QgsRenderContext& ctx = context.renderContext();
1330-
double outlinePixelWidth = mLineWidth * QgsSymbolLayerV2Utils::pixelSizeScaleFactor( ctx, mLineWidthUnit );
1331-
double outputPixelDist = mDistance * QgsSymbolLayerV2Utils::pixelSizeScaleFactor( ctx, mDistanceUnit );
1349+
double outlinePixelWidth = lineWidth * QgsSymbolLayerV2Utils::pixelSizeScaleFactor( ctx, mLineWidthUnit );
1350+
double outputPixelDist = distance * QgsSymbolLayerV2Utils::pixelSizeScaleFactor( ctx, mDistanceUnit );
13321351
double outputPixelOffset = mOffset * QgsSymbolLayerV2Utils::pixelSizeScaleFactor( ctx, mOffsetUnit );
13331352

13341353
//create image
13351354
int height, width;
1336-
if ( doubleNear( mLineAngle, 0 ) || doubleNear( mLineAngle, 360 ) || doubleNear( mLineAngle, 90 ) || doubleNear( mLineAngle, 180 ) || doubleNear( mLineAngle, 270 ) )
1355+
if ( doubleNear( lineAngle, 0 ) || doubleNear( lineAngle, 360 ) || doubleNear( lineAngle, 90 ) || doubleNear( lineAngle, 180 ) || doubleNear( lineAngle, 270 ) )
13371356
{
13381357
height = outputPixelDist;
13391358
width = height; //width can be set to arbitrary value
13401359
}
13411360
else
13421361
{
1343-
height = qAbs( outputPixelDist / cos( mLineAngle * M_PI / 180 ) ); //keep perpendicular distance between lines constant
1344-
width = qAbs( height / tan( mLineAngle * M_PI / 180 ) );
1362+
height = qAbs( outputPixelDist / cos( lineAngle * M_PI / 180 ) ); //keep perpendicular distance between lines constant
1363+
width = qAbs( height / tan( lineAngle * M_PI / 180 ) );
13451364
}
13461365

13471366
//depending on the angle, we might need to render into a larger image and use a subset of it
@@ -1360,13 +1379,13 @@ void QgsLinePatternFillSymbolLayer::startRender( QgsSymbolV2RenderContext& conte
13601379
QPainter p( &patternImage );
13611380

13621381
p.setRenderHint( QPainter::Antialiasing, true );
1363-
QPen pen( mColor );
1382+
QPen pen( color );
13641383
pen.setWidthF( outlinePixelWidth );
13651384
pen.setCapStyle( Qt::FlatCap );
13661385
p.setPen( pen );
13671386

13681387
QPoint p1, p2, p3, p4, p5, p6;
1369-
if ( doubleNear( mLineAngle, 0.0 ) || doubleNear( mLineAngle, 360.0 ) || doubleNear( mLineAngle, 180.0 ) )
1388+
if ( doubleNear( lineAngle, 0.0 ) || doubleNear( lineAngle, 360.0 ) || doubleNear( lineAngle, 180.0 ) )
13701389
{
13711390
p1 = QPoint( 0, height );
13721391
p2 = QPoint( width, height );
@@ -1375,7 +1394,7 @@ void QgsLinePatternFillSymbolLayer::startRender( QgsSymbolV2RenderContext& conte
13751394
p5 = QPoint( 0, 2 * height );
13761395
p6 = QPoint( width, 2 * height );
13771396
}
1378-
else if ( doubleNear( mLineAngle, 90.0 ) || doubleNear( mLineAngle, 270.0 ) )
1397+
else if ( doubleNear( lineAngle, 90.0 ) || doubleNear( lineAngle, 270.0 ) )
13791398
{
13801399
p1 = QPoint( 0, height );
13811400
p2 = QPoint( 0, 0 );
@@ -1384,21 +1403,21 @@ void QgsLinePatternFillSymbolLayer::startRender( QgsSymbolV2RenderContext& conte
13841403
p5 = QPoint( -width, height );
13851404
p6 = QPoint( -width, 0 );
13861405
}
1387-
else if (( mLineAngle > 0 && mLineAngle < 90 ) || ( mLineAngle > 180 && mLineAngle < 270 ) )
1406+
else if (( lineAngle > 0 && lineAngle < 90 ) || ( lineAngle > 180 && lineAngle < 270 ) )
13881407
{
1389-
dx = outputPixelDist * cos(( 90 - mLineAngle ) * M_PI / 180.0 );
1390-
dy = outputPixelDist * sin(( 90 - mLineAngle ) * M_PI / 180.0 );
1408+
dx = outputPixelDist * cos(( 90 - lineAngle ) * M_PI / 180.0 );
1409+
dy = outputPixelDist * sin(( 90 - lineAngle ) * M_PI / 180.0 );
13911410
p1 = QPoint( 0, height );
13921411
p2 = QPoint( width, 0 );
13931412
p3 = QPoint( -dx, height - dy );
13941413
p4 = QPoint( width - dx, -dy ); //p4 = QPoint( p3.x() + width, p3.y() - height );
13951414
p5 = QPoint( dx, height + dy );
13961415
p6 = QPoint( width + dx, dy ); //p6 = QPoint( p5.x() + width, p5.y() - height );
13971416
}
1398-
else if (( mLineAngle < 180 ) || ( mLineAngle > 270 && mLineAngle < 360 ) )
1417+
else if (( lineAngle < 180 ) || ( lineAngle > 270 && lineAngle < 360 ) )
13991418
{
1400-
dy = outputPixelDist * cos(( 180 - mLineAngle ) * M_PI / 180 );
1401-
dx = outputPixelDist * sin(( 180 - mLineAngle ) * M_PI / 180 );
1419+
dy = outputPixelDist * cos(( 180 - lineAngle ) * M_PI / 180 );
1420+
dx = outputPixelDist * sin(( 180 - lineAngle ) * M_PI / 180 );
14021421
p1 = QPoint( width, height );
14031422
p2 = QPoint( 0, 0 );
14041423
p5 = QPoint( width + dx, height - dy );
@@ -1436,21 +1455,28 @@ void QgsLinePatternFillSymbolLayer::startRender( QgsSymbolV2RenderContext& conte
14361455
{
14371456
QImage transparentImage = patternImage.copy();
14381457
QgsSymbolLayerV2Utils::multiplyImageOpacity( &transparentImage, context.alpha() );
1439-
mBrush.setTextureImage( transparentImage );
1458+
brush.setTextureImage( transparentImage );
14401459
}
14411460
else
14421461
{
1443-
mBrush.setTextureImage( patternImage );
1462+
brush.setTextureImage( patternImage );
14441463
}
14451464

14461465
QTransform brushTransform;
14471466
brushTransform.scale( 1.0 / context.renderContext().rasterScaleFactor(), 1.0 / context.renderContext().rasterScaleFactor() );
1448-
mBrush.setTransform( brushTransform );
1467+
brush.setTransform( brushTransform );
1468+
}
1469+
1470+
void QgsLinePatternFillSymbolLayer::startRender( QgsSymbolV2RenderContext& context )
1471+
{
1472+
applyPattern( context, mBrush, mLineAngle, mDistance, mLineWidth, mColor );
14491473

14501474
if ( mOutline )
14511475
{
14521476
mOutline->startRender( context.renderContext() );
14531477
}
1478+
1479+
prepareExpressions( context.layer() );
14541480
}
14551481

14561482
void QgsLinePatternFillSymbolLayer::stopRender( QgsSymbolV2RenderContext & )
@@ -1468,6 +1494,25 @@ QgsStringMap QgsLinePatternFillSymbolLayer::properties() const
14681494
map.insert( "distance_unit", QgsSymbolLayerV2Utils::encodeOutputUnit( mDistanceUnit ) );
14691495
map.insert( "line_width_unit", QgsSymbolLayerV2Utils::encodeOutputUnit( mLineWidthUnit ) );
14701496
map.insert( "offset_unit", QgsSymbolLayerV2Utils::encodeOutputUnit( mOffsetUnit ) );
1497+
1498+
//data defined properties
1499+
if ( mLineAngleExpression )
1500+
{
1501+
map.insert( "lineangle_expression", mLineAngleExpression->dump() );
1502+
}
1503+
if ( mDistanceExpression )
1504+
{
1505+
map.insert( "distance_expression", mDistanceExpression->dump() );
1506+
}
1507+
if ( mLineWidthExpression )
1508+
{
1509+
map.insert( "linewidth_expression", mLineWidthExpression->dump() );
1510+
}
1511+
if ( mColorExpression )
1512+
{
1513+
map.insert( "color_expression", mColorExpression->dump() );
1514+
}
1515+
14711516
return map;
14721517
}
14731518

@@ -1481,6 +1526,24 @@ QgsSymbolLayerV2* QgsLinePatternFillSymbolLayer::clone() const
14811526
clonedLayer->setDistanceUnit( mDistanceUnit );
14821527
clonedLayer->setLineWidthUnit( mLineWidthUnit );
14831528
clonedLayer->setOffsetUnit( mOffsetUnit );
1529+
1530+
if ( mLineAngleExpression )
1531+
{
1532+
clonedLayer->setDataDefinedProperty( "lineangle", mLineAngleExpression->dump() );
1533+
}
1534+
if ( mDistanceExpression )
1535+
{
1536+
clonedLayer->setDataDefinedProperty( "distance", mDistanceExpression->dump() );
1537+
}
1538+
if ( mLineWidthExpression )
1539+
{
1540+
clonedLayer->setDataDefinedProperty( "linewidth", mLineWidthExpression->dump() );
1541+
}
1542+
if ( mColorExpression )
1543+
{
1544+
clonedLayer->setDataDefinedProperty( "color", mColorExpression->dump() );
1545+
}
1546+
14841547
return clonedLayer;
14851548
}
14861549

@@ -1547,6 +1610,152 @@ QString QgsLinePatternFillSymbolLayer::ogrFeatureStyleWidth( double widthScaleFa
15471610
return featureStyle;
15481611
}
15491612

1613+
const QgsExpression* QgsLinePatternFillSymbolLayer::dataDefinedProperty( const QString& property ) const
1614+
{
1615+
if ( property == "lineangle" )
1616+
{
1617+
return mLineAngleExpression;
1618+
}
1619+
else if ( property == "distance" )
1620+
{
1621+
return mDistanceExpression;
1622+
}
1623+
else if ( property == "linewidth" )
1624+
{
1625+
return mLineWidthExpression;
1626+
}
1627+
else if ( property == "color" )
1628+
{
1629+
return mColorExpression;
1630+
}
1631+
return 0;
1632+
}
1633+
1634+
QString QgsLinePatternFillSymbolLayer::dataDefinedPropertyString( const QString& property ) const
1635+
{
1636+
const QgsExpression* ex = dataDefinedProperty( property );
1637+
return ex ? ex->dump() : QString();
1638+
}
1639+
1640+
void QgsLinePatternFillSymbolLayer::setDataDefinedProperty( const QString& property, const QString& expressionString )
1641+
{
1642+
if ( property == "lineangle" )
1643+
{
1644+
delete mLineAngleExpression; mLineAngleExpression = new QgsExpression( expressionString );
1645+
}
1646+
else if ( property == "distance" )
1647+
{
1648+
delete mDistanceExpression; mDistanceExpression = new QgsExpression( expressionString );
1649+
}
1650+
else if ( property == "linewidth" )
1651+
{
1652+
delete mLineWidthExpression; mLineWidthExpression = new QgsExpression( expressionString );
1653+
}
1654+
else if ( property == "color" )
1655+
{
1656+
delete mColorExpression; mColorExpression = new QgsExpression( expressionString );
1657+
}
1658+
}
1659+
1660+
void QgsLinePatternFillSymbolLayer::removeDataDefinedProperty( const QString& property )
1661+
{
1662+
if ( property == "lineangle" )
1663+
{
1664+
delete mLineAngleExpression; mLineAngleExpression = 0;
1665+
}
1666+
else if ( property == "distance" )
1667+
{
1668+
delete mDistanceExpression; mDistanceExpression = 0;
1669+
}
1670+
else if ( property == "linewidth" )
1671+
{
1672+
delete mLineWidthExpression; mLineWidthExpression = 0;
1673+
}
1674+
else if ( property == "color" )
1675+
{
1676+
delete mColorExpression; mColorExpression = 0;
1677+
}
1678+
}
1679+
1680+
void QgsLinePatternFillSymbolLayer::removeDataDefinedProperties()
1681+
{
1682+
delete mLineAngleExpression; mLineAngleExpression = 0;
1683+
delete mDistanceExpression; mDistanceExpression = 0;
1684+
delete mLineWidthExpression; mLineWidthExpression = 0;
1685+
delete mColorExpression; mColorExpression = 0;
1686+
}
1687+
1688+
QSet<QString> QgsLinePatternFillSymbolLayer::usedAttributes() const
1689+
{
1690+
QSet<QString> attributes;
1691+
1692+
//add data defined attributes
1693+
QStringList columns;
1694+
if ( mLineAngleExpression )
1695+
columns.append( mLineAngleExpression->referencedColumns() );
1696+
if ( mDistanceExpression )
1697+
columns.append( mDistanceExpression->referencedColumns() );
1698+
if ( mLineWidthExpression )
1699+
columns.append( mLineWidthExpression->referencedColumns() );
1700+
if ( mColorExpression )
1701+
columns.append( mColorExpression->referencedColumns() );
1702+
1703+
QStringList::const_iterator it = columns.constBegin();
1704+
for ( ; it != columns.constEnd(); ++it )
1705+
{
1706+
attributes.insert( *it );
1707+
}
1708+
return attributes;
1709+
}
1710+
1711+
void QgsLinePatternFillSymbolLayer::applyDataDefinedSettings( const QgsSymbolV2RenderContext& context )
1712+
{
1713+
if ( !mLineAngleExpression && !mDistanceExpression && !mLineWidthExpression && !mColorExpression )
1714+
{
1715+
return; //no data defined settings
1716+
}
1717+
1718+
double lineAngle = mLineAngle;
1719+
if ( mLineAngleExpression )
1720+
{
1721+
lineAngle = mLineAngleExpression->evaluate( const_cast<QgsFeature*>( context.feature() ) ).toDouble();
1722+
}
1723+
double distance = mDistance;
1724+
if ( mDistanceExpression )
1725+
{
1726+
distance = mDistanceExpression->evaluate( const_cast<QgsFeature*>( context.feature() ) ).toDouble();
1727+
}
1728+
double lineWidth = mLineWidth;
1729+
if ( mLineWidthExpression )
1730+
{
1731+
lineWidth = mLineWidthExpression->evaluate( const_cast<QgsFeature*>( context.feature() ) ).toDouble();
1732+
}
1733+
QColor color = mColor;
1734+
if ( mColorExpression )
1735+
{
1736+
color = QColor( mColorExpression->evaluate( const_cast<QgsFeature*>( context.feature() ) ).toString() );
1737+
}
1738+
applyPattern( context, mBrush, lineAngle, distance, lineWidth, color );
1739+
}
1740+
1741+
void QgsLinePatternFillSymbolLayer::prepareExpressions( const QgsVectorLayer* vl )
1742+
{
1743+
if ( !vl )
1744+
{
1745+
return;
1746+
}
1747+
1748+
const QgsFields& fields = vl->pendingFields();
1749+
if ( mLineAngleExpression )
1750+
mLineAngleExpression->prepare( fields );
1751+
if ( mDistanceExpression )
1752+
mDistanceExpression->prepare( fields );
1753+
if ( mLineWidthExpression )
1754+
mLineWidthExpression->prepare( fields );
1755+
if ( mColorExpression )
1756+
mColorExpression->prepare( fields );
1757+
}
1758+
15501759
QgsSymbolLayerV2* QgsLinePatternFillSymbolLayer::createFromSld( QDomElement &element )
15511760
{
15521761
QgsDebugMsg( "Entered." );

‎src/core/symbology-ng/qgsfillsymbollayerv2.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,14 @@ class CORE_EXPORT QgsLinePatternFillSymbolLayer: public QgsImageFillSymbolLayer
288288
void setOutputUnit( QgsSymbolV2::OutputUnit unit );
289289
QgsSymbolV2::OutputUnit outputUnit() const;
290290

291+
const QgsExpression* dataDefinedProperty( const QString& property ) const;
292+
QString dataDefinedPropertyString( const QString& property ) const;
293+
void setDataDefinedProperty( const QString& property, const QString& expressionString );
294+
void removeDataDefinedProperty( const QString& property );
295+
void removeDataDefinedProperties();
296+
297+
QSet<QString> usedAttributes() const;
298+
291299
protected:
292300
/**Distance (in mm or map units) between lines*/
293301
double mDistance;
@@ -301,6 +309,19 @@ class CORE_EXPORT QgsLinePatternFillSymbolLayer: public QgsImageFillSymbolLayer
301309
/**Offset perpendicular to line direction*/
302310
double mOffset;
303311
QgsSymbolV2::OutputUnit mOffsetUnit;
312+
313+
//data defined properties
314+
QgsExpression* mLineAngleExpression;
315+
QgsExpression* mDistanceExpression;
316+
QgsExpression* mLineWidthExpression;
317+
QgsExpression* mColorExpression;
318+
319+
void applyDataDefinedSettings( const QgsSymbolV2RenderContext& context );
320+
321+
private:
322+
void prepareExpressions( const QgsVectorLayer* vl );
323+
/**Applies the svg pattern to the brush*/
324+
void applyPattern( const QgsSymbolV2RenderContext& context, QBrush& brush, double lineAngle, double distance, double lineWidth, const QColor& color );
304325
};
305326

306327
class CORE_EXPORT QgsPointPatternFillSymbolLayer: public QgsImageFillSymbolLayer

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1583,6 +1583,38 @@ void QgsLinePatternFillSymbolLayerWidget::on_mOffsetUnitComboBox_currentIndexCha
15831583
}
15841584
}
15851585

1586+
void QgsLinePatternFillSymbolLayerWidget::on_mDataDefinedPropertiesButton_clicked()
1587+
{
1588+
if ( !mLayer )
1589+
{
1590+
return;
1591+
}
1592+
1593+
QMap<QString, QPair< QString, QString> > dataDefinedProperties;
1594+
dataDefinedProperties.insert( "lineangle", qMakePair( tr( "Angle" ), mLayer->dataDefinedPropertyString( "lineangle" ) ) );
1595+
dataDefinedProperties.insert( "distance", qMakePair( tr( "Distance" ), mLayer->dataDefinedPropertyString( "distance" ) ) );
1596+
dataDefinedProperties.insert( "linewidth", qMakePair( tr( "Line width" ), mLayer->dataDefinedPropertyString( "linewidth" ) ) );
1597+
dataDefinedProperties.insert( "color", qMakePair( tr( "Color" ), mLayer->dataDefinedPropertyString( "color" ) ) );
1598+
1599+
QgsDataDefinedSymbolDialog d( dataDefinedProperties, mVectorLayer );
1600+
if ( d.exec() == QDialog::Accepted )
1601+
{
1602+
//empty all existing properties first
1603+
mLayer->removeDataDefinedProperties();
1604+
1605+
QMap<QString, QString> properties = d.dataDefinedProperties();
1606+
QMap<QString, QString>::const_iterator it = properties.constBegin();
1607+
for ( ; it != properties.constEnd(); ++it )
1608+
{
1609+
if ( !it.value().isEmpty() )
1610+
{
1611+
mLayer->setDataDefinedProperty( it.key(), it.value() );
1612+
}
1613+
}
1614+
emit changed();
1615+
}
1616+
}
1617+
15861618

15871619
/////////////
15881620

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,7 @@ class GUI_EXPORT QgsLinePatternFillSymbolLayerWidget : public QgsSymbolLayerV2Wi
326326
void on_mDistanceUnitComboBox_currentIndexChanged( int index );
327327
void on_mLineWidthUnitComboBox_currentIndexChanged( int index );
328328
void on_mOffsetUnitComboBox_currentIndexChanged( int index );
329+
void on_mDataDefinedPropertiesButton_clicked();
329330
};
330331

331332
//////////

‎src/ui/symbollayer/widget_linepatternfill.ui

Lines changed: 89 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,10 @@
1717
<property name="margin">
1818
<number>1</number>
1919
</property>
20-
<item row="5" column="1">
21-
<widget class="QDoubleSpinBox" name="mOffsetSpinBox">
22-
<property name="decimals">
23-
<number>5</number>
24-
</property>
25-
<property name="minimum">
26-
<double>-99.000000000000000</double>
27-
</property>
28-
<property name="maximum">
29-
<double>999999999.000000000000000</double>
30-
</property>
31-
</widget>
32-
</item>
33-
<item row="3" column="1">
34-
<widget class="QDoubleSpinBox" name="mLineWidthSpinBox">
35-
<property name="decimals">
36-
<number>5</number>
37-
</property>
38-
<property name="maximum">
39-
<double>99999999.000000000000000</double>
40-
</property>
41-
</widget>
42-
</item>
43-
<item row="7" column="1">
44-
<widget class="QgsColorButtonV2" name="mColorPushButton">
20+
<item row="4" column="0">
21+
<widget class="QLabel" name="mLineWidthUnitLabel">
4522
<property name="text">
46-
<string>Change</string>
23+
<string>Line width unit</string>
4724
</property>
4825
</widget>
4926
</item>
@@ -54,10 +31,10 @@
5431
</property>
5532
</widget>
5633
</item>
57-
<item row="0" column="1">
58-
<widget class="QDoubleSpinBox" name="mAngleSpinBox">
59-
<property name="maximum">
60-
<double>360.000000000000000</double>
34+
<item row="1" column="0">
35+
<widget class="QLabel" name="mDistanceLabel">
36+
<property name="text">
37+
<string>Distance</string>
6138
</property>
6239
</widget>
6340
</item>
@@ -75,41 +52,13 @@
7552
</item>
7653
</widget>
7754
</item>
78-
<item row="1" column="0">
79-
<widget class="QLabel" name="mDistanceLabel">
80-
<property name="text">
81-
<string>Distance</string>
82-
</property>
83-
</widget>
84-
</item>
85-
<item row="2" column="0">
86-
<widget class="QLabel" name="mDistanceUnitLabel">
87-
<property name="text">
88-
<string>Distance unit</string>
89-
</property>
90-
</widget>
91-
</item>
9255
<item row="3" column="0">
9356
<widget class="QLabel" name="mLineWidthLabel">
9457
<property name="text">
9558
<string>Line width</string>
9659
</property>
9760
</widget>
9861
</item>
99-
<item row="4" column="0">
100-
<widget class="QLabel" name="mLineWidthUnitLabel">
101-
<property name="text">
102-
<string>Line width unit</string>
103-
</property>
104-
</widget>
105-
</item>
106-
<item row="7" column="0">
107-
<widget class="QLabel" name="mColorLabel">
108-
<property name="text">
109-
<string>Color</string>
110-
</property>
111-
</widget>
112-
</item>
11362
<item row="2" column="1">
11463
<widget class="QComboBox" name="mDistanceUnitComboBox">
11564
<item>
@@ -124,14 +73,28 @@
12473
</item>
12574
</widget>
12675
</item>
76+
<item row="0" column="1">
77+
<widget class="QDoubleSpinBox" name="mAngleSpinBox">
78+
<property name="maximum">
79+
<double>360.000000000000000</double>
80+
</property>
81+
</widget>
82+
</item>
83+
<item row="6" column="0">
84+
<widget class="QLabel" name="mOffsetUnitLabel">
85+
<property name="text">
86+
<string>Offset unit</string>
87+
</property>
88+
</widget>
89+
</item>
12790
<item row="5" column="0">
12891
<widget class="QLabel" name="mOffsetLabel">
12992
<property name="text">
13093
<string>Offset</string>
13194
</property>
13295
</widget>
13396
</item>
134-
<item row="8" column="0" colspan="2">
97+
<item row="9" column="0" colspan="2">
13598
<spacer name="verticalSpacer">
13699
<property name="orientation">
137100
<enum>Qt::Vertical</enum>
@@ -144,13 +107,57 @@
144107
</property>
145108
</spacer>
146109
</item>
110+
<item row="2" column="0">
111+
<widget class="QLabel" name="mDistanceUnitLabel">
112+
<property name="text">
113+
<string>Distance unit</string>
114+
</property>
115+
</widget>
116+
</item>
117+
<item row="3" column="1">
118+
<widget class="QDoubleSpinBox" name="mLineWidthSpinBox">
119+
<property name="decimals">
120+
<number>5</number>
121+
</property>
122+
<property name="maximum">
123+
<double>99999999.000000000000000</double>
124+
</property>
125+
</widget>
126+
</item>
127+
<item row="7" column="1">
128+
<widget class="QgsColorButtonV2" name="mColorPushButton">
129+
<property name="text">
130+
<string>Change</string>
131+
</property>
132+
</widget>
133+
</item>
134+
<item row="7" column="0">
135+
<widget class="QLabel" name="mColorLabel">
136+
<property name="text">
137+
<string>Color</string>
138+
</property>
139+
</widget>
140+
</item>
147141
<item row="1" column="1">
148142
<widget class="QDoubleSpinBox" name="mDistanceSpinBox">
149143
<property name="maximum">
150144
<double>999999999.000000000000000</double>
151145
</property>
152146
</widget>
153147
</item>
148+
<item row="5" column="1">
149+
<widget class="QDoubleSpinBox" name="mOffsetSpinBox">
150+
<property name="decimals">
151+
<number>5</number>
152+
</property>
153+
<property name="minimum">
154+
<double>-99.000000000000000</double>
155+
</property>
156+
<property name="maximum">
157+
<double>999999999.000000000000000</double>
158+
</property>
159+
</widget>
160+
</item>
154161
<item row="6" column="1">
155162
<widget class="QComboBox" name="mOffsetUnitComboBox">
156163
<item>
@@ -165,12 +172,29 @@
165172
</item>
166173
</widget>
167174
</item>
168-
<item row="6" column="0">
169-
<widget class="QLabel" name="mOffsetUnitLabel">
170-
<property name="text">
171-
<string>Offset unit</string>
172-
</property>
173-
</widget>
175+
<item row="8" column="0" colspan="2">
176+
<layout class="QHBoxLayout" name="horizontalLayout_3">
177+
<item>
178+
<widget class="QLabel" name="mDataDefinedPropertiesLabel">
179+
<property name="text">
180+
<string>Data defined properties</string>
181+
</property>
182+
</widget>
183+
</item>
184+
<item>
185+
<widget class="QPushButton" name="mDataDefinedPropertiesButton">
186+
<property name="sizePolicy">
187+
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
188+
<horstretch>0</horstretch>
189+
<verstretch>0</verstretch>
190+
</sizepolicy>
191+
</property>
192+
<property name="text">
193+
<string>...</string>
194+
</property>
195+
</widget>
196+
</item>
197+
</layout>
174198
</item>
175199
</layout>
176200
</widget>

0 commit comments

Comments
 (0)
Please sign in to comment.