QGIS API Documentation 3.99.0-Master (d270888f95f)
Loading...
Searching...
No Matches
qgsarrowsymbollayerwidget.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsarrowsymbollayerwidget.cpp
3 ---------------------
4 begin : February 2016
5 copyright : (C) 2016 by Hugo Mercier / Oslandia
6 email : hugo dot mercier at oslandia dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
16
17#include "qgsarrowsymbollayer.h"
18#include "qgsvectorlayer.h"
19
20#include <QColorDialog>
21#include <QString>
22
23#include "moc_qgsarrowsymbollayerwidget.cpp"
24
25using namespace Qt::StringLiterals;
26
28 : QgsSymbolLayerWidget( parent, vl )
29
30{
31 setupUi( this );
32 connect( mArrowWidthSpin, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsArrowSymbolLayerWidget::mArrowWidthSpin_valueChanged );
33 connect( mArrowWidthUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsArrowSymbolLayerWidget::mArrowWidthUnitWidget_changed );
34 connect( mArrowStartWidthSpin, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsArrowSymbolLayerWidget::mArrowStartWidthSpin_valueChanged );
35 connect( mArrowStartWidthUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsArrowSymbolLayerWidget::mArrowStartWidthUnitWidget_changed );
36 connect( mHeadLengthSpin, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsArrowSymbolLayerWidget::mHeadLengthSpin_valueChanged );
37 connect( mHeadLengthUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsArrowSymbolLayerWidget::mHeadLengthUnitWidget_changed );
38 connect( mHeadThicknessSpin, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsArrowSymbolLayerWidget::mHeadThicknessSpin_valueChanged );
39 connect( mHeadThicknessUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsArrowSymbolLayerWidget::mHeadThicknessUnitWidget_changed );
40 connect( mHeadTypeCombo, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsArrowSymbolLayerWidget::mHeadTypeCombo_currentIndexChanged );
41 connect( mArrowTypeCombo, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsArrowSymbolLayerWidget::mArrowTypeCombo_currentIndexChanged );
42 connect( mOffsetSpin, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsArrowSymbolLayerWidget::mOffsetSpin_valueChanged );
43 connect( mOffsetUnitWidget, &QgsUnitSelectionWidget::changed, this, &QgsArrowSymbolLayerWidget::mOffsetUnitWidget_changed );
44 connect( mCurvedArrowCheck, &QCheckBox::stateChanged, this, &QgsArrowSymbolLayerWidget::mCurvedArrowChck_stateChanged );
45 connect( mRepeatArrowCheck, &QCheckBox::stateChanged, this, &QgsArrowSymbolLayerWidget::mRepeatArrowChck_stateChanged );
46 this->layout()->setContentsMargins( 0, 0, 0, 0 );
47
53
54 mOffsetSpin->setClearValue( 0.0 );
55}
56
58{
59 if ( !layer || layer->layerType() != "ArrowLine"_L1 )
60 {
61 return;
62 }
63
64 mLayer = static_cast<QgsArrowSymbolLayer *>( layer );
65
66 mArrowWidthSpin->setValue( mLayer->arrowWidth() );
67 mArrowWidthUnitWidget->setUnit( mLayer->arrowWidthUnit() );
68 mArrowWidthUnitWidget->setMapUnitScale( mLayer->arrowWidthUnitScale() );
69
70 mArrowStartWidthSpin->setValue( mLayer->arrowStartWidth() );
71 mArrowStartWidthUnitWidget->setUnit( mLayer->arrowStartWidthUnit() );
72 mArrowStartWidthUnitWidget->setMapUnitScale( mLayer->arrowStartWidthUnitScale() );
73
74 mHeadLengthSpin->setValue( mLayer->headLength() );
75 mHeadLengthUnitWidget->setUnit( mLayer->headLengthUnit() );
76 mHeadLengthUnitWidget->setMapUnitScale( mLayer->headLengthUnitScale() );
77 mHeadThicknessSpin->setValue( mLayer->headThickness() );
78 mHeadThicknessUnitWidget->setUnit( mLayer->headThicknessUnit() );
79 mHeadThicknessUnitWidget->setMapUnitScale( mLayer->headThicknessUnitScale() );
80
81 mHeadTypeCombo->setCurrentIndex( mLayer->headType() );
82 mArrowTypeCombo->setCurrentIndex( mLayer->arrowType() );
83
84 mOffsetSpin->setValue( mLayer->offset() );
85 mOffsetUnitWidget->setUnit( mLayer->offsetUnit() );
86 mOffsetUnitWidget->setMapUnitScale( mLayer->offsetMapUnitScale() );
87
88 mCurvedArrowCheck->setChecked( mLayer->isCurved() );
89 mRepeatArrowCheck->setChecked( mLayer->isRepeated() );
90
98}
99
100
105
106void QgsArrowSymbolLayerWidget::mArrowWidthSpin_valueChanged( double d )
107{
108 if ( !mLayer )
109 return;
110
111 mLayer->setArrowWidth( d );
112 emit changed();
113}
114
115void QgsArrowSymbolLayerWidget::mArrowStartWidthSpin_valueChanged( double d )
116{
117 if ( !mLayer )
118 return;
119
120 mLayer->setArrowStartWidth( d );
121 emit changed();
122}
123
124void QgsArrowSymbolLayerWidget::mHeadLengthSpin_valueChanged( double d )
125{
126 if ( !mLayer )
127 return;
128
129 mLayer->setHeadLength( d );
130 emit changed();
131}
132
133void QgsArrowSymbolLayerWidget::mHeadThicknessSpin_valueChanged( double d )
134{
135 if ( !mLayer )
136 return;
137
138 mLayer->setHeadThickness( d );
139 emit changed();
140}
141
142void QgsArrowSymbolLayerWidget::mArrowWidthUnitWidget_changed()
143{
144 if ( !mLayer )
145 return;
146
147 mLayer->setArrowWidthUnit( mArrowWidthUnitWidget->unit() );
148 mLayer->setArrowWidthUnitScale( mArrowWidthUnitWidget->getMapUnitScale() );
149 emit changed();
150}
151
152void QgsArrowSymbolLayerWidget::mArrowStartWidthUnitWidget_changed()
153{
154 if ( !mLayer )
155 return;
156
157 mLayer->setArrowStartWidthUnit( mArrowStartWidthUnitWidget->unit() );
158 mLayer->setArrowStartWidthUnitScale( mArrowStartWidthUnitWidget->getMapUnitScale() );
159 emit changed();
160}
161
162void QgsArrowSymbolLayerWidget::mHeadLengthUnitWidget_changed()
163{
164 if ( !mLayer )
165 return;
166
167 mLayer->setHeadLengthUnit( mHeadLengthUnitWidget->unit() );
168 mLayer->setHeadLengthUnitScale( mHeadLengthUnitWidget->getMapUnitScale() );
169 emit changed();
170}
171
172void QgsArrowSymbolLayerWidget::mHeadThicknessUnitWidget_changed()
173{
174 if ( !mLayer )
175 return;
176
177 mLayer->setHeadThicknessUnit( mHeadThicknessUnitWidget->unit() );
178 mLayer->setHeadThicknessUnitScale( mHeadThicknessUnitWidget->getMapUnitScale() );
179 emit changed();
180}
181
182void QgsArrowSymbolLayerWidget::mHeadTypeCombo_currentIndexChanged( int idx )
183{
184 if ( !mLayer )
185 return;
186
188 mLayer->setHeadType( t );
190 mArrowStartWidthDDBtn->setEnabled( isSingle );
191 mArrowStartWidthSpin->setEnabled( isSingle );
192 mArrowStartWidthUnitWidget->setEnabled( isSingle );
193 emit changed();
194}
195
196void QgsArrowSymbolLayerWidget::mArrowTypeCombo_currentIndexChanged( int idx )
197{
198 if ( !mLayer )
199 return;
200
202 mLayer->setArrowType( t );
203 emit changed();
204}
205
206void QgsArrowSymbolLayerWidget::mOffsetSpin_valueChanged( double d )
207{
208 if ( !mLayer )
209 return;
210
211 mLayer->setOffset( d );
212 emit changed();
213}
214
215void QgsArrowSymbolLayerWidget::mOffsetUnitWidget_changed()
216{
217 if ( !mLayer )
218 return;
219
220 mLayer->setOffsetUnit( mOffsetUnitWidget->unit() );
221 mLayer->setOffsetMapUnitScale( mOffsetUnitWidget->getMapUnitScale() );
222 emit changed();
223}
224
225void QgsArrowSymbolLayerWidget::mCurvedArrowChck_stateChanged( int state )
226{
227 if ( !mLayer )
228 return;
229
230 mLayer->setIsCurved( state == Qt::Checked );
231 emit changed();
232}
233
234void QgsArrowSymbolLayerWidget::mRepeatArrowChck_stateChanged( int state )
235{
236 if ( !mLayer )
237 return;
238
239 mLayer->setIsRepeated( state == Qt::Checked );
240 emit changed();
241}
@ Millimeters
Millimeters.
Definition qgis.h:5256
@ Points
Points (e.g., for font sizes).
Definition qgis.h:5260
@ MapUnits
Map units.
Definition qgis.h:5257
@ Pixels
Pixels.
Definition qgis.h:5258
@ Inches
Inches.
Definition qgis.h:5261
QgsArrowSymbolLayerWidget(QgsVectorLayer *layer, QWidget *parent=nullptr)
Constructor.
QgsSymbolLayer * symbolLayer() override
void setSymbolLayer(QgsSymbolLayer *layer) override
Line symbol layer used for representing lines as arrows.
HeadType
Possible head types.
void setArrowWidth(double width)
Sets the arrow width.
ArrowType
Possible arrow types.
void setMapUnitScale(const QgsMapUnitScale &scale) override
void registerDataDefinedButton(QgsPropertyOverrideButton *button, QgsSymbolLayer::Property key)
Registers a data defined override button.
QgsSymbolLayerWidget(QWidget *parent, QgsVectorLayer *vl=nullptr)
Constructor for QgsSymbolLayerWidget.
void changed()
Should be emitted whenever configuration changes happened on this symbol layer configuration.
Abstract base class for symbol layers.
@ ArrowHeadLength
Arrow head length.
@ ArrowWidth
Arrow tail width.
@ ArrowHeadType
Arrow head type.
@ ArrowHeadThickness
Arrow head thickness.
@ ArrowStartWidth
Arrow tail start width.
virtual QString layerType() const =0
Returns a string that represents this layer type.
void changed()
Emitted when the selected unit is changed, or the definition of the map unit scale is changed.
Represents a vector layer which manages a vector based dataset.