Skip to content

Commit cbceb45

Browse files
author
mhugent
committedNov 25, 2009
Possitility to set start and end arrow marker from svg files
git-svn-id: http://svn.osgeo.org/qgis/trunk@12257 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 578405b commit cbceb45

File tree

5 files changed

+293
-99
lines changed

5 files changed

+293
-99
lines changed
 

‎src/app/composer/qgscomposerarrowwidget.cpp

Lines changed: 151 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,20 @@
1919
#include "qgscomposerarrow.h"
2020
#include "qgscomposeritemwidget.h"
2121
#include <QColorDialog>
22+
#include <QFileDialog>
23+
#include <QFileInfo>
2224

2325
QgsComposerArrowWidget::QgsComposerArrowWidget( QgsComposerArrow* arrow ): QWidget( 0 ), mArrow( arrow )
2426
{
2527
setupUi( this );
28+
mRadioButtonGroup = new QButtonGroup( this );
29+
mRadioButtonGroup->addButton( mDefaultMarkerRadioButton );
30+
mRadioButtonGroup->addButton( mNoMarkerRadioButton );
31+
mRadioButtonGroup->addButton( mSvgMarkerRadioButton );
32+
mRadioButtonGroup->setExclusive( true );
33+
34+
//disable the svg related gui elements by default
35+
on_mSvgMarkerRadioButton_toggled( false );
2636

2737
//add widget for general composer item properties
2838
QgsComposerItemWidget* itemPropertiesWidget = new QgsComposerItemWidget( this, mArrow );
@@ -38,88 +48,175 @@ QgsComposerArrowWidget::~QgsComposerArrowWidget()
3848

3949
void QgsComposerArrowWidget::on_mOutlineWidthSpinBox_valueChanged( double d )
4050
{
41-
if(!mArrow)
42-
{
43-
return;
44-
}
51+
if ( !mArrow )
52+
{
53+
return;
54+
}
4555

46-
mArrow->setOutlineWidth( d );
47-
mArrow->update();
56+
mArrow->setOutlineWidth( d );
57+
mArrow->update();
4858
}
4959

5060
void QgsComposerArrowWidget::on_mArrowHeadWidthSpinBox_valueChanged( double d )
5161
{
52-
if(!mArrow)
53-
{
54-
return;
55-
}
62+
if ( !mArrow )
63+
{
64+
return;
65+
}
5666

57-
mArrow->setArrowHeadWidth( d );
67+
mArrow->setArrowHeadWidth( d );
68+
mArrow->update();
69+
}
70+
71+
void QgsComposerArrowWidget::on_mArrowColorButton_clicked()
72+
{
73+
if ( !mArrow )
74+
{
75+
return;
76+
}
77+
78+
#if QT_VERSION >= 0x040500
79+
QColor newColor = QColorDialog::getColor( mArrow->arrowColor(), 0, tr( "Arrow color" ), QColorDialog::ShowAlphaChannel );
80+
#else
81+
QColor newColor = QColorDialog::getColor( mArrow->arrowColor() );
82+
#endif
83+
if ( newColor.isValid() )
84+
{
85+
mArrow->setArrowColor( newColor );
5886
mArrow->update();
87+
}
5988
}
6089

61-
void QgsComposerArrowWidget::on_mShowArrowHeadCheckBox_stateChanged ( int state )
90+
void QgsComposerArrowWidget::blockAllSignals( bool block )
6291
{
63-
if(!mArrow)
64-
{
65-
return;
66-
}
92+
mArrowColorButton->blockSignals( block );
93+
mOutlineWidthSpinBox->blockSignals( block );
94+
mArrowHeadWidthSpinBox->blockSignals( block );
95+
mDefaultMarkerRadioButton->blockSignals( block );
96+
mNoMarkerRadioButton->blockSignals( block );
97+
mSvgMarkerRadioButton->blockSignals( block );
98+
mStartMarkerLineEdit->blockSignals( block );
99+
mStartMarkerToolButton->blockSignals( block );
100+
mEndMarkerLineEdit->blockSignals( block );
101+
mEndMarkerToolButton->blockSignals( block );
102+
}
103+
104+
void QgsComposerArrowWidget::setGuiElementValues()
105+
{
106+
if ( !mArrow )
107+
{
108+
return;
109+
}
110+
111+
blockAllSignals( true );
112+
mOutlineWidthSpinBox->setValue( mArrow->outlineWidth() );
113+
mArrowHeadWidthSpinBox->setValue( mArrow->arrowHeadWidth() );
114+
115+
QgsComposerArrow::MarkerMode mode = mArrow->markerMode();
116+
if ( mode == QgsComposerArrow::DefaultMarker )
117+
{
118+
mDefaultMarkerRadioButton->setChecked( true );
119+
}
120+
else if ( mode == QgsComposerArrow::NoMarker )
121+
{
122+
mNoMarkerRadioButton->setChecked( true );
123+
}
124+
else //svg marker
125+
{
126+
mSvgMarkerRadioButton->setChecked( true );
127+
enableSvgInputElements( true );
128+
}
129+
mStartMarkerLineEdit->setText( mArrow->startMarker() );
130+
mEndMarkerLineEdit->setText( mArrow->endMarker() );
131+
blockAllSignals( false );
132+
}
133+
134+
void QgsComposerArrowWidget::enableSvgInputElements( bool enable )
135+
{
136+
mStartMarkerLineEdit->setEnabled( enable );
137+
mStartMarkerToolButton->setEnabled( enable );
138+
mEndMarkerLineEdit->setEnabled( enable );
139+
mEndMarkerToolButton->setEnabled( enable );
140+
}
141+
142+
void QgsComposerArrowWidget::on_mDefaultMarkerRadioButton_toggled( bool toggled )
143+
{
144+
if ( mArrow && toggled )
145+
{
146+
mArrow->setMarkerMode( QgsComposerArrow::DefaultMarker );
147+
mArrow->update();
148+
}
149+
}
150+
151+
void QgsComposerArrowWidget::on_mNoMarkerRadioButton_toggled( bool toggled )
152+
{
153+
if ( mArrow && toggled )
154+
{
155+
mArrow->setMarkerMode( QgsComposerArrow::NoMarker );
156+
mArrow->update();
157+
}
158+
}
159+
160+
void QgsComposerArrowWidget::on_mSvgMarkerRadioButton_toggled( bool toggled )
161+
{
162+
enableSvgInputElements( toggled );
163+
if ( mArrow && toggled )
164+
{
165+
mArrow->setMarkerMode( QgsComposerArrow::SVGMarker );
166+
mArrow->update();
167+
}
168+
}
67169

68-
if(state == Qt::Checked)
170+
void QgsComposerArrowWidget::on_mStartMarkerLineEdit_textChanged( const QString & text )
171+
{
172+
if ( mArrow )
173+
{
174+
QFileInfo fi( text );
175+
if ( fi.exists() )
69176
{
70-
mArrow->setShowArrowMarker(true);
177+
mArrow->setStartMarker( text );
71178
}
72179
else
73180
{
74-
mArrow->setShowArrowMarker(false);
181+
mArrow->setStartMarker( "" );
75182
}
76183
mArrow->update();
184+
}
77185
}
78186

79-
void QgsComposerArrowWidget::on_mArrowColorButton_clicked()
187+
void QgsComposerArrowWidget::on_mEndMarkerLineEdit_textChanged( const QString & text )
80188
{
81-
if(!mArrow)
189+
if ( mArrow )
190+
{
191+
QFileInfo fi( text );
192+
if ( fi.exists() )
82193
{
83-
return;
194+
mArrow->setEndMarker( text );
84195
}
85-
86-
#if QT_VERSION >= 0x040500
87-
QColor newColor = QColorDialog::getColor(mArrow->arrowColor(), 0, tr("Arrow color"), QColorDialog::ShowAlphaChannel);
88-
#else
89-
QColor newColor = QColorDialog::getColor(mArrow->arrowColor());
90-
#endif
91-
if(newColor.isValid())
196+
else
92197
{
93-
mArrow->setArrowColor(newColor);
94-
mArrow->update();
198+
mArrow->setEndMarker( "" );
95199
}
200+
mArrow->update();
201+
}
96202
}
97203

98-
void QgsComposerArrowWidget::blockAllSignals(bool block)
204+
void QgsComposerArrowWidget::on_mStartMarkerToolButton_clicked()
99205
{
100-
mArrowColorButton->blockSignals(block);
101-
mShowArrowHeadCheckBox->blockSignals(block);
102-
mOutlineWidthSpinBox->blockSignals(block);
103-
mArrowHeadWidthSpinBox->blockSignals(block);
206+
QFileInfo fi( mStartMarkerLineEdit->text() );
207+
QString svgFileName = QFileDialog::getOpenFileName( 0, tr( "Start marker svg file" ), fi.dir().absolutePath() );
208+
if ( !svgFileName.isNull() )
209+
{
210+
mStartMarkerLineEdit->setText( svgFileName );
211+
}
104212
}
105213

106-
void QgsComposerArrowWidget::setGuiElementValues()
214+
void QgsComposerArrowWidget::on_mEndMarkerToolButton_clicked()
107215
{
108-
if(!mArrow)
109-
{
110-
return;
111-
}
112-
113-
blockAllSignals(true);
114-
mOutlineWidthSpinBox->setValue(mArrow->outlineWidth());
115-
mArrowHeadWidthSpinBox->setValue(mArrow->arrowHeadWidth());
116-
if( mArrow->showArrowMarker())
117-
{
118-
mShowArrowHeadCheckBox->setCheckState(Qt::Checked);
119-
}
120-
else
121-
{
122-
mShowArrowHeadCheckBox->setCheckState(Qt::Unchecked);
123-
}
124-
blockAllSignals(false);
216+
QFileInfo fi( mEndMarkerLineEdit->text() );
217+
QString svgFileName = QFileDialog::getOpenFileName( 0, tr( "End marker svg file" ), fi.dir().absolutePath() );
218+
if ( !svgFileName.isNull() )
219+
{
220+
mEndMarkerLineEdit ->setText( svgFileName );
221+
}
125222
}

‎src/app/composer/qgscomposerarrowwidget.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,22 @@ class QgsComposerArrowWidget: public QWidget, private Ui::QgsComposerArrowWidget
3434

3535
void blockAllSignals( bool block );
3636
void setGuiElementValues();
37+
QButtonGroup* mRadioButtonGroup;
38+
39+
/**Enables / disables the SVG line inputs*/
40+
void enableSvgInputElements( bool enable );
3741

3842
private slots:
3943
void on_mOutlineWidthSpinBox_valueChanged( double d );
4044
void on_mArrowHeadWidthSpinBox_valueChanged( double d );
41-
void on_mShowArrowHeadCheckBox_stateChanged( int state );
4245
void on_mArrowColorButton_clicked();
46+
void on_mDefaultMarkerRadioButton_toggled( bool toggled );
47+
void on_mNoMarkerRadioButton_toggled( bool toggled );
48+
void on_mSvgMarkerRadioButton_toggled( bool toggled );
49+
void on_mStartMarkerLineEdit_textChanged( const QString & text );
50+
void on_mEndMarkerLineEdit_textChanged( const QString & text );
51+
void on_mStartMarkerToolButton_clicked();
52+
void on_mEndMarkerToolButton_clicked();
4353
};
4454

4555
#endif // QGSCOMPOSERARROWWIDGET_H

‎src/core/composer/qgscomposerarrow.cpp

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,14 @@
2525
#include <math.h>
2626
#endif
2727

28-
QgsComposerArrow::QgsComposerArrow( QgsComposition* c ): QgsComposerItem( c ), mStartPoint( 0, 0 ), mStopPoint( 0, 0 ), mArrowColor( QColor( 0, 0, 0 ) )
28+
QgsComposerArrow::QgsComposerArrow( QgsComposition* c ): QgsComposerItem( c ), mStartPoint( 0, 0 ), mStopPoint( 0, 0 ), mMarkerMode( DefaultMarker ), mArrowColor( QColor( 0, 0, 0 ) )
2929
{
3030
initGraphicsSettings();
3131
}
3232

3333
QgsComposerArrow::QgsComposerArrow( const QPointF& startPoint, const QPointF& stopPoint, QgsComposition* c ): QgsComposerItem( c ), mStartPoint( startPoint ), \
34-
mStopPoint( stopPoint ), mArrowColor( QColor( 0, 0, 0 ) )
34+
mStopPoint( stopPoint ), mMarkerMode( DefaultMarker ), mArrowColor( QColor( 0, 0, 0 ) )
3535
{
36-
//setStartMarker( "/home/marco/src/qgis/images/svg/north_arrows/NorthArrow11.svg" );
37-
//setEndMarker( "/home/marco/src/qgis/images/svg/north_arrows/NorthArrow11.svg" );
3836
initGraphicsSettings();
3937
adaptItemSceneRect();
4038
}
@@ -49,7 +47,9 @@ void QgsComposerArrow::initGraphicsSettings()
4947
setArrowHeadWidth( 4 );
5048
mPen.setColor( QColor( 0, 0, 0 ) );
5149
mPen.setWidthF( 1 );
52-
mShowArrowMarker = true;
50+
51+
//setStartMarker( "/home/marco/src/qgis/images/svg/north_arrows/NorthArrow11.svg" );
52+
//setEndMarker( "/home/marco/src/qgis/images/svg/north_arrows/NorthArrow11.svg" );
5353

5454
//set composer item brush and pen to transparent white by default
5555
setPen( QPen( QColor( 255, 255, 255, 0 ) ) );
@@ -73,11 +73,14 @@ void QgsComposerArrow::paint( QPainter* painter, const QStyleOptionGraphicsItem*
7373
painter->setBrush( QBrush( mArrowColor ) );
7474
painter->drawLine( QPointF( mStartPoint.x() - transform().dx(), mStartPoint.y() - transform().dy() ), QPointF( mStopPoint.x() - transform().dx(), mStopPoint.y() - transform().dy() ) );
7575

76-
if ( mShowArrowMarker )
76+
if ( mMarkerMode == DefaultMarker )
7777
{
7878
drawHardcodedMarker( painter, EndMarker );
79-
//drawSVGMarker( painter, StartMarker, mStartMarkerFile );
80-
//drawSVGMarker( painter, EndMarker, mEndMarkerFile );
79+
}
80+
else if ( mMarkerMode == SVGMarker )
81+
{
82+
drawSVGMarker( painter, StartMarker, mStartMarkerFile );
83+
drawSVGMarker( painter, EndMarker, mEndMarkerFile );
8184
}
8285

8386
drawFrame( painter );
@@ -155,9 +158,19 @@ void QgsComposerArrow::drawSVGMarker( QPainter* p, MarkerType type, const QStrin
155158

156159
//prepare paint device
157160
int dpi = ( p->device()->logicalDpiX() + p->device()->logicalDpiY() ) / 2;
161+
double viewScaleFactor = horizontalViewScaleFactor();
158162
int imageWidth = mArrowHeadWidth / 25.4 * dpi;
159163
int imageHeight = arrowHeadHeight / 25.4 * dpi;
164+
165+
//make nicer preview
166+
if ( mComposition && mComposition->plotStyle() == QgsComposition::Preview )
167+
{
168+
imageWidth *= std::min( viewScaleFactor, 10.0 );
169+
imageHeight *= std::min( viewScaleFactor, 10.0 );
170+
}
160171
QImage markerImage( imageWidth, imageHeight, QImage::Format_ARGB32 );
172+
QColor markerBG( 255, 255, 255, 0 ); //transparent white background
173+
markerImage.fill( markerBG.rgba() );
161174

162175
QPointF imageFixPoint;
163176
imageFixPoint.setX( mArrowHeadWidth / 2.0 );
@@ -202,8 +215,8 @@ void QgsComposerArrow::drawSVGMarker( QPainter* p, MarkerType type, const QStrin
202215
}
203216
QPointF rotatedFixPoint;
204217
double angleRad = angle / 180 * M_PI;
205-
rotatedFixPoint.setX( fixPoint.x() * cos( angleRad ) + fixPoint.y() * sin( angleRad ) );
206-
rotatedFixPoint.setY( fixPoint.x() * -sin( angleRad ) + fixPoint.y() * cos( angleRad ) );
218+
rotatedFixPoint.setX( fixPoint.x() * cos( angleRad ) + fixPoint.y() * -sin( angleRad ) );
219+
rotatedFixPoint.setY( fixPoint.x() * sin( angleRad ) + fixPoint.y() * cos( angleRad ) );
207220

208221

209222
QPainter imagePainter( &markerImage );
@@ -275,12 +288,8 @@ void QgsComposerArrow::setOutlineWidth( double width )
275288
void QgsComposerArrow::setArrowHeadWidth( double width )
276289
{
277290
mArrowHeadWidth = width;
278-
adaptItemSceneRect();
279-
}
280-
281-
void QgsComposerArrow::setShowArrowMarker( bool show )
282-
{
283-
mShowArrowMarker = show;
291+
setStartMarker( mStartMarkerFile );
292+
setEndMarker( mEndMarkerFile );
284293
adaptItemSceneRect();
285294
}
286295

@@ -290,15 +299,20 @@ void QgsComposerArrow::adaptItemSceneRect()
290299
QRectF rect = QRectF( std::min( mStartPoint.x(), mStopPoint.x() ), std::min( mStartPoint.y(), mStopPoint.y() ), \
291300
fabs( mStopPoint.x() - mStartPoint.x() ), fabs( mStopPoint.y() - mStartPoint.y() ) );
292301
double enlarge;
293-
if ( mShowArrowMarker )
302+
if ( mMarkerMode == DefaultMarker )
294303
{
295-
double maxArrowHeight = std::max( mStartArrowHeadHeight, mStopArrowHeadHeight );
296-
enlarge = mPen.widthF() / 2 + std::max( mArrowHeadWidth / 2.0, maxArrowHeight / 2.0 );
304+
enlarge == mPen.widthF() / 2.0 + mArrowHeadWidth / 2.0;
297305
}
298-
else
306+
else if ( mMarkerMode == NoMarker )
299307
{
300308
enlarge = mPen.widthF() / 2.0;
301309
}
310+
else if ( mMarkerMode == SVGMarker )
311+
{
312+
double maxArrowHeight = std::max( mStartArrowHeadHeight, mStopArrowHeadHeight );
313+
enlarge = mPen.widthF() / 2 + std::max( mArrowHeadWidth / 2.0, maxArrowHeight / 2.0 );
314+
}
315+
302316
rect.adjust( -enlarge, -enlarge, enlarge, enlarge );
303317
QgsComposerItem::setSceneRect( rect );
304318
}
@@ -307,8 +321,10 @@ bool QgsComposerArrow::writeXML( QDomElement& elem, QDomDocument & doc ) const
307321
{
308322
QDomElement composerArrowElem = doc.createElement( "ComposerArrow" );
309323
composerArrowElem.setAttribute( "outlineWidth", outlineWidth() );
310-
composerArrowElem.setAttribute( "showArrowMarker", mShowArrowMarker );
311324
composerArrowElem.setAttribute( "arrowHeadWidth", mArrowHeadWidth );
325+
composerArrowElem.setAttribute( "markerMode", mMarkerMode );
326+
composerArrowElem.setAttribute( "startMarkerFile", mStartMarkerFile );
327+
composerArrowElem.setAttribute( "endMarkerFile", mEndMarkerFile );
312328

313329
//arrow color
314330
QDomElement arrowColorElem = doc.createElement( "ArrowColor" );
@@ -336,9 +352,11 @@ bool QgsComposerArrow::writeXML( QDomElement& elem, QDomDocument & doc ) const
336352

337353
bool QgsComposerArrow::readXML( const QDomElement& itemElem, const QDomDocument& doc )
338354
{
339-
mShowArrowMarker = itemElem.attribute( "showArrowMarker", "1" ).toInt();
340355
mArrowHeadWidth = itemElem.attribute( "arrowHeadWidth", "2.0" ).toDouble();
341356
mPen.setWidthF( itemElem.attribute( "outlineWidth", "1.0" ).toDouble() );
357+
setStartMarker( itemElem.attribute( "startMarkerFile", "" ) );
358+
setEndMarker( itemElem.attribute( "endMarkerFile", "" ) );
359+
mMarkerMode = QgsComposerArrow::MarkerMode( itemElem.attribute( "markerMode", "0" ).toInt() );
342360

343361
//arrow color
344362
QDomNodeList arrowColorList = itemElem.elementsByTagName( "ArrowColor" );

‎src/core/composer/qgscomposerarrow.h

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,14 @@
2424
class CORE_EXPORT QgsComposerArrow: public QgsComposerItem
2525
{
2626
public:
27+
28+
enum MarkerMode
29+
{
30+
DefaultMarker,
31+
NoMarker,
32+
SVGMarker
33+
};
34+
2735
QgsComposerArrow( QgsComposition* c );
2836
QgsComposerArrow( const QPointF& startPoint, const QPointF& stopPoint, QgsComposition* c );
2937
~QgsComposerArrow();
@@ -42,14 +50,16 @@ class CORE_EXPORT QgsComposerArrow: public QgsComposerItem
4250
double outlineWidth() const {return mPen.widthF();}
4351

4452
void setStartMarker( const QString& svgPath );
53+
QString startMarker() const {return mStartMarkerFile;}
4554
void setEndMarker( const QString& svgPath );
46-
47-
bool showArrowMarker() const { return mShowArrowMarker;}
48-
void setShowArrowMarker( bool show );
55+
QString endMarker() const {return mEndMarkerFile;}
4956

5057
QColor arrowColor() const { return mArrowColor; }
5158
void setArrowColor( const QColor& c ) { mArrowColor = c; }
5259

60+
MarkerMode markerMode() const { return mMarkerMode;}
61+
void setMarkerMode( MarkerMode mode ) {mMarkerMode = mode;}
62+
5363
/** stores state in Dom node
5464
* @param node is Dom node corresponding to 'Composer' tag
5565
* @param temp write template file
@@ -85,16 +95,18 @@ class CORE_EXPORT QgsComposerArrow: public QgsComposerItem
8595
QString mStartMarkerFile;
8696
/**Path to the end marker file*/
8797
QString mEndMarkerFile;
88-
89-
/**True if arrow head marker is drawn*/
90-
bool mShowArrowMarker;
98+
/**Default marker, no marker or svg marker*/
99+
MarkerMode mMarkerMode;
91100
QColor mArrowColor;
92101

102+
103+
93104
/**Adapts the item scene rect to contain the start point, the stop point including the arrow marker and the outline.
94105
Needs to be called whenever the arrow width/height, the outline with or the endpoints are changed*/
95106
void adaptItemSceneRect();
96-
107+
/**Draws the default marker at the line end*/
97108
void drawHardcodedMarker( QPainter* p, MarkerType type );
109+
/**Draws a user-defined marker (must be an svg file)*/
98110
void drawSVGMarker( QPainter* p, MarkerType type, const QString& markerPath );
99111
/**Calculates arrow angle (for marker rotation)*/
100112
double arrowAngle() const;

‎src/ui/qgscomposerarrowwidgetbase.ui

Lines changed: 72 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>273</width>
10-
<height>306</height>
9+
<width>196</width>
10+
<height>407</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
1414
<string>Form</string>
1515
</property>
16-
<layout class="QGridLayout" name="gridLayout_2">
16+
<layout class="QGridLayout" name="gridLayout_3">
1717
<item row="0" column="0">
1818
<widget class="QToolBox" name="toolBox">
1919
<property name="currentIndex">
@@ -24,14 +24,14 @@
2424
<rect>
2525
<x>0</x>
2626
<y>0</y>
27-
<width>255</width>
28-
<height>256</height>
27+
<width>178</width>
28+
<height>363</height>
2929
</rect>
3030
</property>
3131
<attribute name="label">
3232
<string>Arrow</string>
3333
</attribute>
34-
<layout class="QGridLayout" name="gridLayout">
34+
<layout class="QGridLayout" name="gridLayout_2">
3535
<item row="0" column="0">
3636
<widget class="QPushButton" name="mArrowColorButton">
3737
<property name="text">
@@ -40,26 +40,83 @@
4040
</widget>
4141
</item>
4242
<item row="1" column="0">
43-
<widget class="QCheckBox" name="mShowArrowHeadCheckBox">
44-
<property name="text">
45-
<string>Show arrow head</string>
46-
</property>
47-
</widget>
48-
</item>
49-
<item row="2" column="0">
5043
<widget class="QDoubleSpinBox" name="mOutlineWidthSpinBox">
5144
<property name="prefix">
5245
<string>Outline width </string>
5346
</property>
5447
</widget>
5548
</item>
56-
<item row="3" column="0">
49+
<item row="2" column="0">
5750
<widget class="QDoubleSpinBox" name="mArrowHeadWidthSpinBox">
5851
<property name="prefix">
5952
<string>Arrow head width </string>
6053
</property>
6154
</widget>
6255
</item>
56+
<item row="3" column="0">
57+
<widget class="QGroupBox" name="mArrowMarkersGroupBox">
58+
<property name="title">
59+
<string>Arrow markers</string>
60+
</property>
61+
<layout class="QGridLayout" name="gridLayout">
62+
<item row="0" column="0" colspan="2">
63+
<widget class="QRadioButton" name="mDefaultMarkerRadioButton">
64+
<property name="text">
65+
<string>Default marker</string>
66+
</property>
67+
</widget>
68+
</item>
69+
<item row="1" column="0">
70+
<widget class="QRadioButton" name="mNoMarkerRadioButton">
71+
<property name="text">
72+
<string>No marker</string>
73+
</property>
74+
</widget>
75+
</item>
76+
<item row="2" column="0" colspan="2">
77+
<widget class="QRadioButton" name="mSvgMarkerRadioButton">
78+
<property name="text">
79+
<string>SVG markers</string>
80+
</property>
81+
</widget>
82+
</item>
83+
<item row="3" column="0">
84+
<widget class="QLabel" name="mStartMarkerLabel">
85+
<property name="text">
86+
<string>Start marker</string>
87+
</property>
88+
</widget>
89+
</item>
90+
<item row="4" column="0">
91+
<widget class="QLineEdit" name="mStartMarkerLineEdit"/>
92+
</item>
93+
<item row="4" column="1">
94+
<widget class="QToolButton" name="mStartMarkerToolButton">
95+
<property name="text">
96+
<string>...</string>
97+
</property>
98+
</widget>
99+
</item>
100+
<item row="5" column="0">
101+
<widget class="QLabel" name="mEndMarkerLabel">
102+
<property name="text">
103+
<string>End marker</string>
104+
</property>
105+
</widget>
106+
</item>
107+
<item row="6" column="0">
108+
<widget class="QLineEdit" name="mEndMarkerLineEdit"/>
109+
</item>
110+
<item row="6" column="1">
111+
<widget class="QToolButton" name="mEndMarkerToolButton">
112+
<property name="text">
113+
<string>...</string>
114+
</property>
115+
</widget>
116+
</item>
117+
</layout>
118+
</widget>
119+
</item>
63120
<item row="4" column="0">
64121
<spacer name="verticalSpacer">
65122
<property name="orientation">
@@ -68,7 +125,7 @@
68125
<property name="sizeHint" stdset="0">
69126
<size>
70127
<width>20</width>
71-
<height>40</height>
128+
<height>62</height>
72129
</size>
73130
</property>
74131
</spacer>

0 commit comments

Comments
 (0)
Please sign in to comment.