Skip to content

Commit e3b5681

Browse files
author
wonder
committed
simple fill: added border style and width
pen style combo box: added "no pen" git-svn-id: http://svn.osgeo.org/qgis/trunk@12155 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent af5d94b commit e3b5681

7 files changed

+99
-25
lines changed

src/core/symbology-ng/qgsfillsymbollayerv2.cpp

+20-10
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
#include <QPainter>
88

9-
QgsSimpleFillSymbolLayerV2::QgsSimpleFillSymbolLayerV2(QColor color, QColor borderColor, Qt::BrushStyle style)
10-
: mBrushStyle(style), mBorderColor(borderColor)
9+
QgsSimpleFillSymbolLayerV2::QgsSimpleFillSymbolLayerV2(QColor color, Qt::BrushStyle style, QColor borderColor, Qt::PenStyle borderStyle, double borderWidth)
10+
: mBrushStyle(style), mBorderColor(borderColor), mBorderStyle(borderStyle), mBorderWidth(borderWidth)
1111
{
1212
mColor = color;
1313
}
@@ -16,17 +16,23 @@ QgsSimpleFillSymbolLayerV2::QgsSimpleFillSymbolLayerV2(QColor color, QColor bord
1616
QgsSymbolLayerV2* QgsSimpleFillSymbolLayerV2::create(const QgsStringMap& props)
1717
{
1818
QColor color = DEFAULT_SIMPLEFILL_COLOR;
19-
QColor borderColor = DEFAULT_SIMPLEFILL_BORDERCOLOR;
2019
Qt::BrushStyle style = DEFAULT_SIMPLEFILL_STYLE;
21-
20+
QColor borderColor = DEFAULT_SIMPLEFILL_BORDERCOLOR;
21+
Qt::PenStyle borderStyle = DEFAULT_SIMPLEFILL_BORDERSTYLE;
22+
double borderWidth = DEFAULT_SIMPLEFILL_BORDERWIDTH;
23+
2224
if (props.contains("color"))
2325
color = QgsSymbolLayerV2Utils::decodeColor(props["color"]);
24-
if (props.contains("color_border"))
25-
borderColor = QgsSymbolLayerV2Utils::decodeColor(props["color_border"]);
2626
if (props.contains("style"))
2727
style = QgsSymbolLayerV2Utils::decodeBrushStyle(props["style"]);
28-
29-
return new QgsSimpleFillSymbolLayerV2(color, borderColor, style);
28+
if (props.contains("color_border"))
29+
borderColor = QgsSymbolLayerV2Utils::decodeColor(props["color_border"]);
30+
if (props.contains("style_border"))
31+
borderStyle = QgsSymbolLayerV2Utils::decodePenStyle(props["style_border"]);
32+
if (props.contains("width_border"))
33+
borderWidth = props["width_border"].toDouble();
34+
35+
return new QgsSimpleFillSymbolLayerV2(color, style, borderColor, borderStyle, borderWidth);
3036
}
3137

3238

@@ -39,6 +45,8 @@ void QgsSimpleFillSymbolLayerV2::startRender(QgsRenderContext& context)
3945
{
4046
mBrush = QBrush(mColor, mBrushStyle);
4147
mPen = QPen(mBorderColor);
48+
mPen.setStyle(mBorderStyle);
49+
mPen.setWidthF(mBorderWidth);
4250
}
4351

4452
void QgsSimpleFillSymbolLayerV2::stopRender(QgsRenderContext& context)
@@ -73,12 +81,14 @@ QgsStringMap QgsSimpleFillSymbolLayerV2::properties() const
7381
{
7482
QgsStringMap map;
7583
map["color"] = QgsSymbolLayerV2Utils::encodeColor(mColor);
76-
map["color_border"] = QgsSymbolLayerV2Utils::encodeColor(mBorderColor);
7784
map["style"] = QgsSymbolLayerV2Utils::encodeBrushStyle(mBrushStyle);
85+
map["color_border"] = QgsSymbolLayerV2Utils::encodeColor(mBorderColor);
86+
map["style_border"] = QgsSymbolLayerV2Utils::encodePenStyle(mBorderStyle);
87+
map["width_border"] = QString::number(mBorderWidth);
7888
return map;
7989
}
8090

8191
QgsSymbolLayerV2* QgsSimpleFillSymbolLayerV2::clone() const
8292
{
83-
return new QgsSimpleFillSymbolLayerV2(mColor, mBorderColor, mBrushStyle);
93+
return new QgsSimpleFillSymbolLayerV2(mColor, mBrushStyle, mBorderColor, mBorderStyle, mBorderWidth);
8494
}

src/core/symbology-ng/qgsfillsymbollayerv2.h

+14-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#define DEFAULT_SIMPLEFILL_COLOR QColor(0,0,255)
88
#define DEFAULT_SIMPLEFILL_STYLE Qt::SolidPattern
99
#define DEFAULT_SIMPLEFILL_BORDERCOLOR QColor(0,0,0)
10+
#define DEFAULT_SIMPLEFILL_BORDERSTYLE Qt::SolidLine
11+
#define DEFAULT_SIMPLEFILL_BORDERWIDTH 1.0
1012

1113
#include <QPen>
1214
#include <QBrush>
@@ -15,9 +17,11 @@ class CORE_EXPORT QgsSimpleFillSymbolLayerV2 : public QgsFillSymbolLayerV2
1517
{
1618
public:
1719
QgsSimpleFillSymbolLayerV2( QColor color = DEFAULT_SIMPLEFILL_COLOR,
20+
Qt::BrushStyle style = DEFAULT_SIMPLEFILL_STYLE,
1821
QColor borderColor = DEFAULT_SIMPLEFILL_BORDERCOLOR,
19-
Qt::BrushStyle style = DEFAULT_SIMPLEFILL_STYLE );
20-
22+
Qt::PenStyle borderStyle = DEFAULT_SIMPLEFILL_BORDERSTYLE,
23+
double borderWidth = DEFAULT_SIMPLEFILL_BORDERWIDTH );
24+
2125
// static stuff
2226

2327
static QgsSymbolLayerV2* create( const QgsStringMap& properties = QgsStringMap() );
@@ -42,10 +46,18 @@ class CORE_EXPORT QgsSimpleFillSymbolLayerV2 : public QgsFillSymbolLayerV2
4246
QColor borderColor() const { return mBorderColor; }
4347
void setBorderColor( QColor borderColor ) { mBorderColor = borderColor; }
4448

49+
Qt::PenStyle borderStyle() const { return mBorderStyle; }
50+
void setBorderStyle( Qt::PenStyle borderStyle ) { mBorderStyle = borderStyle; }
51+
52+
double borderWidth() const { return mBorderWidth; }
53+
void setBorderWidth( double borderWidth ) { mBorderWidth = borderWidth; }
54+
4555
protected:
4656
QBrush mBrush;
4757
Qt::BrushStyle mBrushStyle;
4858
QColor mBorderColor;
59+
Qt::PenStyle mBorderStyle;
60+
double mBorderWidth;
4961
QPen mPen;
5062
};
5163

src/core/symbology-ng/qgssymbollayerv2utils.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ QString QgsSymbolLayerV2Utils::encodePenStyle( Qt::PenStyle style )
3131
{
3232
switch ( style )
3333
{
34+
case Qt::NoPen: return "no";
3435
case Qt::SolidLine: return "solid";
3536
case Qt::DashLine: return "dash";
3637
case Qt::DotLine: return "dot";
@@ -42,6 +43,7 @@ QString QgsSymbolLayerV2Utils::encodePenStyle( Qt::PenStyle style )
4243

4344
Qt::PenStyle QgsSymbolLayerV2Utils::decodePenStyle( QString str )
4445
{
46+
if ( str == "no" ) return Qt::NoPen;
4547
if ( str == "solid" ) return Qt::SolidLine;
4648
if ( str == "dash" ) return Qt::DashLine;
4749
if ( str == "dot" ) return Qt::DotLine;

src/gui/symbology-ng/qgspenstylecombobox.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ QgsPenStyleComboBox::QgsPenStyleComboBox(QWidget* parent)
1717
<< qMakePair(Qt::DashLine, QString("Dash Line"))
1818
<< qMakePair(Qt::DotLine, QString("Dot Line"))
1919
<< qMakePair(Qt::DashDotLine, QString("Dash Dot Line"))
20-
<< qMakePair(Qt::DashDotDotLine, QString("Dash Dot Dot Line"));
20+
<< qMakePair(Qt::DashDotDotLine, QString("Dash Dot Dot Line"))
21+
<< qMakePair(Qt::NoPen, QString("No Pen"));
2122

2223
setIconSize(QSize(32,12));
2324

src/gui/symbology-ng/qgssymbollayerv2widget.cpp

+18-2
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,10 @@ QgsSimpleFillSymbolLayerV2Widget::QgsSimpleFillSymbolLayerV2Widget(QWidget* pare
212212
setupUi(this);
213213

214214
connect(btnChangeColor, SIGNAL(clicked()), this, SLOT(setColor()));
215-
connect(btnChangeBorderColor, SIGNAL(clicked()), this, SLOT(setBorderColor()));
216215
connect(cboFillStyle, SIGNAL(currentIndexChanged(int)), this, SLOT(setBrushStyle()));
216+
connect(btnChangeBorderColor, SIGNAL(clicked()), this, SLOT(setBorderColor()));
217+
connect(spinBorderWidth, SIGNAL(valueChanged(double)), this, SLOT(borderWidthChanged()));
218+
connect(cboBorderStyle, SIGNAL(currentIndexChanged(int)), this, SLOT(borderStyleChanged()));
217219
}
218220

219221
void QgsSimpleFillSymbolLayerV2Widget::setSymbolLayer(QgsSymbolLayerV2* layer)
@@ -226,8 +228,10 @@ void QgsSimpleFillSymbolLayerV2Widget::setSymbolLayer(QgsSymbolLayerV2* layer)
226228

227229
// set values
228230
btnChangeColor->setColor(mLayer->color());
229-
btnChangeBorderColor->setColor(mLayer->borderColor());
230231
cboFillStyle->setBrushStyle(mLayer->brushStyle());
232+
btnChangeBorderColor->setColor(mLayer->borderColor());
233+
cboBorderStyle->setPenStyle(mLayer->borderStyle());
234+
spinBorderWidth->setValue(mLayer->borderWidth());
231235
}
232236

233237
QgsSymbolLayerV2* QgsSimpleFillSymbolLayerV2Widget::symbolLayer()
@@ -261,6 +265,18 @@ void QgsSimpleFillSymbolLayerV2Widget::setBrushStyle()
261265
emit changed();
262266
}
263267

268+
void QgsSimpleFillSymbolLayerV2Widget::borderWidthChanged()
269+
{
270+
mLayer->setBorderWidth(spinBorderWidth->value());
271+
emit changed();
272+
}
273+
274+
void QgsSimpleFillSymbolLayerV2Widget::borderStyleChanged()
275+
{
276+
mLayer->setBorderStyle(cboBorderStyle->penStyle());
277+
emit changed();
278+
}
279+
264280
///////////
265281

266282
QgsMarkerLineSymbolLayerV2Widget::QgsMarkerLineSymbolLayerV2Widget(QWidget* parent)

src/gui/symbology-ng/qgssymbollayerv2widget.h

+2
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ class GUI_EXPORT QgsSimpleFillSymbolLayerV2Widget : public QgsSymbolLayerV2Widge
105105
void setColor();
106106
void setBorderColor();
107107
void setBrushStyle();
108+
void borderWidthChanged();
109+
void borderStyleChanged();
108110

109111
protected:
110112
QgsSimpleFillSymbolLayerV2* mLayer;

src/ui/symbollayer/widget_simplefill.ui

+41-10
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<x>0</x>
88
<y>0</y>
99
<width>335</width>
10-
<height>154</height>
10+
<height>206</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
@@ -30,7 +30,7 @@
3030
</property>
3131
</widget>
3232
</item>
33-
<item row="0" column="2" rowspan="3">
33+
<item row="0" column="2" rowspan="5">
3434
<spacer>
3535
<property name="orientation">
3636
<enum>Qt::Horizontal</enum>
@@ -47,26 +47,50 @@
4747
</spacer>
4848
</item>
4949
<item row="2" column="0">
50-
<widget class="QLabel" name="label_2">
50+
<widget class="QLabel" name="label_3">
5151
<property name="text">
52-
<string>Fill style:</string>
52+
<string>Border color:</string>
5353
</property>
5454
</widget>
5555
</item>
5656
<item row="2" column="1">
57+
<widget class="QgsColorButtonV2" name="btnChangeBorderColor">
58+
<property name="text">
59+
<string>Change</string>
60+
</property>
61+
</widget>
62+
</item>
63+
<item row="1" column="1">
5764
<widget class="QgsBrushStyleComboBox" name="cboFillStyle"/>
5865
</item>
5966
<item row="1" column="0">
60-
<widget class="QLabel" name="label_3">
67+
<widget class="QLabel" name="label_2">
6168
<property name="text">
62-
<string>Border color:</string>
69+
<string>Fill style:</string>
6370
</property>
6471
</widget>
6572
</item>
66-
<item row="1" column="1">
67-
<widget class="QgsColorButtonV2" name="btnChangeBorderColor">
73+
<item row="3" column="0">
74+
<widget class="QLabel" name="label_4">
6875
<property name="text">
69-
<string>Change</string>
76+
<string>Border style:</string>
77+
</property>
78+
</widget>
79+
</item>
80+
<item row="3" column="1">
81+
<widget class="QgsPenStyleComboBox" name="cboBorderStyle"/>
82+
</item>
83+
<item row="4" column="0">
84+
<widget class="QLabel" name="label_5">
85+
<property name="text">
86+
<string>Border width:</string>
87+
</property>
88+
</widget>
89+
</item>
90+
<item row="4" column="1">
91+
<widget class="QDoubleSpinBox" name="spinBorderWidth">
92+
<property name="decimals">
93+
<number>1</number>
7094
</property>
7195
</widget>
7296
</item>
@@ -98,11 +122,18 @@
98122
<extends>QPushButton</extends>
99123
<header>qgscolorbutton.h</header>
100124
</customwidget>
125+
<customwidget>
126+
<class>QgsPenStyleComboBox</class>
127+
<extends>QComboBox</extends>
128+
<header>qgspenstylecombobox.h</header>
129+
</customwidget>
101130
</customwidgets>
102131
<tabstops>
103132
<tabstop>btnChangeColor</tabstop>
104-
<tabstop>btnChangeBorderColor</tabstop>
105133
<tabstop>cboFillStyle</tabstop>
134+
<tabstop>btnChangeBorderColor</tabstop>
135+
<tabstop>cboBorderStyle</tabstop>
136+
<tabstop>spinBorderWidth</tabstop>
106137
</tabstops>
107138
<resources/>
108139
<connections/>

0 commit comments

Comments
 (0)