Skip to content

Commit 0d241b7

Browse files
committed
Clean up API for QgsUnitSelectionWidget
Makes the widget easier to use, avoids duplicate code
1 parent 1272870 commit 0d241b7

8 files changed

+213
-223
lines changed

src/app/qgslabelinggui.cpp

+33-33
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,17 @@ QgsLabelingGui::QgsLabelingGui( QgsVectorLayer* layer, QgsMapCanvas* mapCanvas,
5858
return;
5959

6060
setupUi( this );
61-
mFontSizeUnitWidget->setUnits( QStringList() << tr( "points" ) << tr( "map units" ), 1 );
62-
mBufferUnitWidget->setUnits( QStringList() << tr( "mm" ) << tr( "map units" ), 1 );
63-
mShapeSizeUnitWidget->setUnits( QStringList() << tr( "mm" ) << tr( "map units" ), 1 );
64-
mShapeOffsetUnitWidget->setUnits( QStringList() << tr( "mm" ) << tr( "map units" ), 1 );
65-
mShapeRadiusUnitWidget->setUnits( QStringList() << tr( "mm" ) << tr( "map units" ) << tr( "% of length" ), 1 );
66-
mShapeBorderWidthUnitWidget->setUnits( QStringList() << tr( "mm" ) << tr( "map units" ), 1 );
67-
mShadowOffsetUnitWidget->setUnits( QStringList() << tr( "mm" ) << tr( "map units" ), 1 );
68-
mShadowRadiusUnitWidget->setUnits( QStringList() << tr( "mm" ) << tr( "map units" ), 1 );
69-
mPointOffsetUnitWidget->setUnits( QStringList() << tr( "mm" ) << tr( "map units" ), 1 );
70-
mLineDistanceUnitWidget->setUnits( QStringList() << tr( "mm" ) << tr( "map units" ), 1 );
71-
mRepeatDistanceUnitWidget->setUnits( QStringList() << tr( "mm" ) << tr( "map units" ), 1 );
61+
mFontSizeUnitWidget->setUnits( QStringList() << tr( "Points" ) << tr( "Map unit" ), 1 );
62+
mBufferUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::MapUnit );
63+
mShapeSizeUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::MapUnit );
64+
mShapeOffsetUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::MapUnit );
65+
mShapeRadiusUnitWidget->setUnits( QStringList() << tr( "Millimeter" ) << tr( "Map unit" ) << tr( "% of length" ), 1 );
66+
mShapeBorderWidthUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::MapUnit );
67+
mShadowOffsetUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::MapUnit );
68+
mShadowRadiusUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::MapUnit );
69+
mPointOffsetUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::MapUnit );
70+
mLineDistanceUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::MapUnit );
71+
mRepeatDistanceUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::MapUnit );
7272

7373
mFontLineHeightSpinBox->setClearValue( 1.0 );
7474
mShapeRotationDblSpnBx->setClearValue( 0.0 );
@@ -305,7 +305,7 @@ void QgsLabelingGui::init()
305305
radAroundCentroid->setChecked( true );
306306

307307
mLineDistanceSpnBx->setValue( lyr.dist );
308-
mLineDistanceUnitWidget->setUnit( lyr.distInMapUnits ? 1 : 0 );
308+
mLineDistanceUnitWidget->setUnit( lyr.distInMapUnits ? QgsSymbolV2::MapUnit : QgsSymbolV2::MM );
309309
mLineDistanceUnitWidget->setMapUnitScale( lyr.distMapUnitScale );
310310
//spinAngle->setValue( lyr.angle ); // TODO: uncomment when supported
311311
break;
@@ -316,7 +316,7 @@ void QgsLabelingGui::init()
316316
mQuadrantBtnGrp->button(( int )lyr.quadOffset )->setChecked( true );
317317
mPointOffsetXSpinBox->setValue( lyr.xOffset );
318318
mPointOffsetYSpinBox->setValue( lyr.yOffset );
319-
mPointOffsetUnitWidget->setUnit( lyr.labelOffsetInMapUnits ? 1 : 0 );
319+
mPointOffsetUnitWidget->setUnit( lyr.labelOffsetInMapUnits ? QgsSymbolV2::MapUnit : QgsSymbolV2::MM );
320320
mPointOffsetUnitWidget->setMapUnitScale( lyr.labelOffsetMapUnitScale );
321321
mPointAngleSpinBox->setValue( lyr.angleOffset );
322322
break;
@@ -339,7 +339,7 @@ void QgsLabelingGui::init()
339339
if ( lyr.placement == QgsPalLayerSettings::Line || lyr.placement == QgsPalLayerSettings::Curved )
340340
{
341341
mLineDistanceSpnBx->setValue( lyr.dist );
342-
mLineDistanceUnitWidget->setUnit( lyr.distInMapUnits ? 1 : 0 );
342+
mLineDistanceUnitWidget->setUnit( lyr.distInMapUnits ? QgsSymbolV2::MapUnit : QgsSymbolV2::MM );
343343
mLineDistanceUnitWidget->setMapUnitScale( lyr.distMapUnitScale );
344344
chkLineAbove->setChecked( lyr.placementFlags & QgsPalLayerSettings::AboveLine );
345345
chkLineBelow->setChecked( lyr.placementFlags & QgsPalLayerSettings::BelowLine );
@@ -350,7 +350,7 @@ void QgsLabelingGui::init()
350350

351351
// Label repeat distance
352352
mRepeatDistanceSpinBox->setValue( lyr.repeatDistance );
353-
mRepeatDistanceUnitWidget->setUnit( lyr.repeatDistanceUnit - 1 );
353+
mRepeatDistanceUnitWidget->setUnit( lyr.repeatDistanceUnit ? QgsSymbolV2::MapUnit : QgsSymbolV2::MM );
354354
mRepeatDistanceUnitWidget->setMapUnitScale( lyr.repeatDistanceMapUnitScale );
355355

356356
mPrioritySlider->setValue( lyr.priority );
@@ -392,7 +392,7 @@ void QgsLabelingGui::init()
392392
// buffer
393393
mBufferDrawChkBx->setChecked( lyr.bufferDraw );
394394
spinBufferSize->setValue( lyr.bufferSize );
395-
mBufferUnitWidget->setUnit( lyr.bufferSizeInMapUnits ? 1 : 0 );
395+
mBufferUnitWidget->setUnit( lyr.bufferSizeInMapUnits ? QgsSymbolV2::MapUnit : QgsSymbolV2::MM );
396396
mBufferUnitWidget->setMapUnitScale( lyr.bufferSizeMapUnitScale );
397397
btnBufferColor->setColor( lyr.bufferColor );
398398
mBufferTranspSpinBox->setValue( lyr.bufferTransp );
@@ -451,15 +451,15 @@ void QgsLabelingGui::init()
451451
mShapeSizeCmbBx->setCurrentIndex( lyr.shapeSizeType );
452452
mShapeSizeXSpnBx->setValue( lyr.shapeSize.x() );
453453
mShapeSizeYSpnBx->setValue( lyr.shapeSize.y() );
454-
mShapeSizeUnitWidget->setUnit( lyr.shapeSizeUnits - 1 );
454+
mShapeSizeUnitWidget->setUnit( lyr.shapeSizeUnits == QgsPalLayerSettings::MapUnits ? QgsSymbolV2::MapUnit : QgsSymbolV2::MM );
455455
mShapeSizeUnitWidget->setMapUnitScale( lyr.shapeSizeMapUnitScale );
456456
mShapeRotationCmbBx->setCurrentIndex( lyr.shapeRotationType );
457457
mShapeRotationDblSpnBx->setEnabled( lyr.shapeRotationType != QgsPalLayerSettings::RotationSync );
458458
mShapeRotationDDBtn->setEnabled( lyr.shapeRotationType != QgsPalLayerSettings::RotationSync );
459459
mShapeRotationDblSpnBx->setValue( lyr.shapeRotation );
460460
mShapeOffsetXSpnBx->setValue( lyr.shapeOffset.x() );
461461
mShapeOffsetYSpnBx->setValue( lyr.shapeOffset.y() );
462-
mShapeOffsetUnitWidget->setUnit( lyr.shapeOffsetUnits - 1 );
462+
mShapeOffsetUnitWidget->setUnit( lyr.shapeOffsetUnits == QgsPalLayerSettings::MapUnits ? QgsSymbolV2::MapUnit : QgsSymbolV2::MM );
463463
mShapeOffsetUnitWidget->setMapUnitScale( lyr.shapeOffsetMapUnitScale );
464464
mShapeRadiusXDbSpnBx->setValue( lyr.shapeRadii.x() );
465465
mShapeRadiusYDbSpnBx->setValue( lyr.shapeRadii.y() );
@@ -469,7 +469,7 @@ void QgsLabelingGui::init()
469469
mShapeFillColorBtn->setColor( lyr.shapeFillColor );
470470
mShapeBorderColorBtn->setColor( lyr.shapeBorderColor );
471471
mShapeBorderWidthSpnBx->setValue( lyr.shapeBorderWidth );
472-
mShapeBorderWidthUnitWidget->setUnit( lyr.shapeBorderWidthUnits - 1 );
472+
mShapeBorderWidthUnitWidget->setUnit( lyr.shapeBorderWidthUnits == QgsPalLayerSettings::MapUnits ? QgsSymbolV2::MapUnit : QgsSymbolV2::MM );
473473
mShapeBorderWidthUnitWidget->setMapUnitScale( lyr.shapeBorderWidthMapUnitScale );
474474
mShapePenStyleCmbBx->setPenJoinStyle( lyr.shapeJoinStyle );
475475

@@ -484,12 +484,12 @@ void QgsLabelingGui::init()
484484
mShadowUnderCmbBx->setCurrentIndex( lyr.shadowUnder );
485485
mShadowOffsetAngleSpnBx->setValue( lyr.shadowOffsetAngle );
486486
mShadowOffsetSpnBx->setValue( lyr.shadowOffsetDist );
487-
mShadowOffsetUnitWidget->setUnit( lyr.shadowOffsetUnits - 1 );
487+
mShadowOffsetUnitWidget->setUnit( lyr.shadowOffsetUnits == QgsPalLayerSettings::MapUnits ? QgsSymbolV2::MapUnit : QgsSymbolV2::MM );
488488
mShadowOffsetUnitWidget->setMapUnitScale( lyr.shadowOffsetMapUnitScale );
489489
mShadowOffsetGlobalChkBx->setChecked( lyr.shadowOffsetGlobal );
490490

491491
mShadowRadiusDblSpnBx->setValue( lyr.shadowRadius );
492-
mShadowRadiusUnitWidget->setUnit( lyr.shadowRadiusUnits - 1 );
492+
mShadowRadiusUnitWidget->setUnit( lyr.shadowRadiusUnits == QgsPalLayerSettings::MapUnits ? QgsSymbolV2::MapUnit : QgsSymbolV2::MM );
493493
mShadowRadiusUnitWidget->setMapUnitScale( lyr.shadowRadiusMapUnitScale );
494494
mShadowRadiusAlphaChkBx->setChecked( lyr.shadowRadiusAlphaOnly );
495495
mShadowTranspSpnBx->setValue( lyr.shadowTransparency );
@@ -591,7 +591,7 @@ QgsPalLayerSettings QgsLabelingGui::layerSettings()
591591
{
592592
lyr.placement = QgsPalLayerSettings::AroundPoint;
593593
lyr.dist = mLineDistanceSpnBx->value();
594-
lyr.distInMapUnits = ( mLineDistanceUnitWidget->getUnit() == 1 );
594+
lyr.distInMapUnits = ( mLineDistanceUnitWidget->unit() == QgsSymbolV2::MapUnit );
595595
lyr.distMapUnitScale = mLineDistanceUnitWidget->getMapUnitScale();
596596
}
597597
else if (( curPlacementWdgt == pagePoint && radOverPoint->isChecked() )
@@ -601,7 +601,7 @@ QgsPalLayerSettings QgsLabelingGui::layerSettings()
601601
lyr.quadOffset = ( QgsPalLayerSettings::QuadrantPosition )mQuadrantBtnGrp->checkedId();
602602
lyr.xOffset = mPointOffsetXSpinBox->value();
603603
lyr.yOffset = mPointOffsetYSpinBox->value();
604-
lyr.labelOffsetInMapUnits = ( mPointOffsetUnitWidget->getUnit() == 1 );
604+
lyr.labelOffsetInMapUnits = ( mPointOffsetUnitWidget->unit() == QgsSymbolV2::MapUnit );
605605
lyr.labelOffsetMapUnitScale = mPointOffsetUnitWidget->getMapUnitScale();
606606
lyr.angleOffset = mPointAngleSpinBox->value();
607607
}
@@ -612,7 +612,7 @@ QgsPalLayerSettings QgsLabelingGui::layerSettings()
612612
bool curved = ( curPlacementWdgt == pageLine && radLineCurved->isChecked() );
613613
lyr.placement = ( curved ? QgsPalLayerSettings::Curved : QgsPalLayerSettings::Line );
614614
lyr.dist = mLineDistanceSpnBx->value();
615-
lyr.distInMapUnits = ( mLineDistanceUnitWidget->getUnit() == 1 );
615+
lyr.distInMapUnits = ( mLineDistanceUnitWidget->unit() == QgsSymbolV2::MapUnit );
616616
lyr.distMapUnitScale = mLineDistanceUnitWidget->getMapUnitScale();
617617
if ( chkLineAbove->isChecked() )
618618
lyr.placementFlags |= QgsPalLayerSettings::AboveLine;
@@ -639,7 +639,7 @@ QgsPalLayerSettings QgsLabelingGui::layerSettings()
639639
}
640640

641641
lyr.repeatDistance = mRepeatDistanceSpinBox->value();
642-
lyr.repeatDistanceUnit = static_cast<QgsPalLayerSettings::SizeUnit>( 1 + mRepeatDistanceUnitWidget->getUnit() );
642+
lyr.repeatDistanceUnit = mRepeatDistanceUnitWidget->unit() == QgsSymbolV2::MapUnit ? QgsPalLayerSettings::MapUnits : QgsPalLayerSettings::MM;
643643
lyr.repeatDistanceMapUnitScale = mRepeatDistanceUnitWidget->getMapUnitScale();
644644

645645
lyr.textColor = btnTextColor->color();
@@ -664,7 +664,7 @@ QgsPalLayerSettings QgsLabelingGui::layerSettings()
664664
lyr.bufferSize = spinBufferSize->value();
665665
lyr.bufferColor = btnBufferColor->color();
666666
lyr.bufferTransp = mBufferTranspSpinBox->value();
667-
lyr.bufferSizeInMapUnits = ( mBufferUnitWidget->getUnit() == 1 );
667+
lyr.bufferSizeInMapUnits = ( mBufferUnitWidget->unit() == QgsSymbolV2::MapUnit );
668668
lyr.bufferSizeMapUnitScale = mBufferUnitWidget->getMapUnitScale();
669669
lyr.bufferJoinStyle = mBufferJoinStyleComboBox->penJoinStyle();
670670
lyr.bufferNoFill = !mBufferTranspFillChbx->isChecked();
@@ -677,12 +677,12 @@ QgsPalLayerSettings QgsLabelingGui::layerSettings()
677677

678678
lyr.shapeSizeType = ( QgsPalLayerSettings::SizeType )mShapeSizeCmbBx->currentIndex();
679679
lyr.shapeSize = QPointF( mShapeSizeXSpnBx->value(), mShapeSizeYSpnBx->value() );
680-
lyr.shapeSizeUnits = ( QgsPalLayerSettings::SizeUnit )( mShapeSizeUnitWidget->getUnit() + 1 );
680+
lyr.shapeSizeUnits = mShapeSizeUnitWidget->unit() == QgsSymbolV2::MapUnit ? QgsPalLayerSettings::MapUnits : QgsPalLayerSettings::MM;
681681
lyr.shapeSizeMapUnitScale = mShapeSizeUnitWidget->getMapUnitScale();
682682
lyr.shapeRotationType = ( QgsPalLayerSettings::RotationType )( mShapeRotationCmbBx->currentIndex() );
683683
lyr.shapeRotation = mShapeRotationDblSpnBx->value();
684684
lyr.shapeOffset = QPointF( mShapeOffsetXSpnBx->value(), mShapeOffsetYSpnBx->value() );
685-
lyr.shapeOffsetUnits = ( QgsPalLayerSettings::SizeUnit )( mShapeOffsetUnitWidget->getUnit() + 1 );
685+
lyr.shapeOffsetUnits = mShapeOffsetUnitWidget->unit() == QgsSymbolV2::MapUnit ? QgsPalLayerSettings::MapUnits : QgsPalLayerSettings::MM;
686686
lyr.shapeOffsetMapUnitScale = mShapeOffsetUnitWidget->getMapUnitScale();
687687
lyr.shapeRadii = QPointF( mShapeRadiusXDbSpnBx->value(), mShapeRadiusYDbSpnBx->value() );
688688
lyr.shapeRadiiUnits = ( QgsPalLayerSettings::SizeUnit )( mShapeRadiusUnitWidget->getUnit() + 1 );
@@ -691,7 +691,7 @@ QgsPalLayerSettings QgsLabelingGui::layerSettings()
691691
lyr.shapeFillColor = mShapeFillColorBtn->color();
692692
lyr.shapeBorderColor = mShapeBorderColorBtn->color();
693693
lyr.shapeBorderWidth = mShapeBorderWidthSpnBx->value();
694-
lyr.shapeBorderWidthUnits = ( QgsPalLayerSettings::SizeUnit )( mShapeBorderWidthUnitWidget->getUnit() + 1 );
694+
lyr.shapeBorderWidthUnits = mShapeBorderWidthUnitWidget->unit() == QgsSymbolV2::MapUnit ? QgsPalLayerSettings::MapUnits : QgsPalLayerSettings::MM;
695695
lyr.shapeBorderWidthMapUnitScale = mShapeBorderWidthUnitWidget->getMapUnitScale();
696696
lyr.shapeJoinStyle = mShapePenStyleCmbBx->penJoinStyle();
697697
lyr.shapeTransparency = mShapeTranspSpinBox->value();
@@ -702,11 +702,11 @@ QgsPalLayerSettings QgsLabelingGui::layerSettings()
702702
lyr.shadowUnder = ( QgsPalLayerSettings::ShadowType )mShadowUnderCmbBx->currentIndex();
703703
lyr.shadowOffsetAngle = mShadowOffsetAngleSpnBx->value();
704704
lyr.shadowOffsetDist = mShadowOffsetSpnBx->value();
705-
lyr.shadowOffsetUnits = ( QgsPalLayerSettings::SizeUnit )( mShadowOffsetUnitWidget->getUnit() + 1 );
705+
lyr.shadowOffsetUnits = mShadowOffsetUnitWidget->unit() == QgsSymbolV2::MapUnit ? QgsPalLayerSettings::MapUnits : QgsPalLayerSettings::MM;
706706
lyr.shadowOffsetMapUnitScale = mShadowOffsetUnitWidget->getMapUnitScale();
707707
lyr.shadowOffsetGlobal = mShadowOffsetGlobalChkBx->isChecked();
708708
lyr.shadowRadius = mShadowRadiusDblSpnBx->value();
709-
lyr.shadowRadiusUnits = ( QgsPalLayerSettings::SizeUnit )( mShadowRadiusUnitWidget->getUnit() + 1 );
709+
lyr.shadowRadiusUnits = mShadowRadiusUnitWidget->unit() == QgsSymbolV2::MapUnit ? QgsPalLayerSettings::MapUnits : QgsPalLayerSettings::MM;
710710
lyr.shadowRadiusMapUnitScale = mShadowRadiusUnitWidget->getMapUnitScale();
711711
lyr.shadowRadiusAlphaOnly = mShadowRadiusAlphaChkBx->isChecked();
712712
lyr.shadowTransparency = mShadowTranspSpnBx->value();
@@ -1182,7 +1182,7 @@ void QgsLabelingGui::updatePreview()
11821182

11831183
if ( mBufferDrawChkBx->isChecked() )
11841184
{
1185-
if ( mBufferUnitWidget->getUnit() == 1 ) // map units
1185+
if ( mBufferUnitWidget->unit() == QgsSymbolV2::MapUnit )
11861186
{
11871187
bufferSize = previewRatio * spinBufferSize->value() / 3.527;
11881188
}
@@ -1202,7 +1202,7 @@ void QgsLabelingGui::updatePreview()
12021202

12031203
if ( mBufferDrawChkBx->isChecked() )
12041204
{
1205-
if ( mBufferUnitWidget->getUnit() == 0 ) // millimeters
1205+
if ( mBufferUnitWidget->unit() == QgsSymbolV2::MM )
12061206
{
12071207
bufferSize = spinBufferSize->value();
12081208
}

src/core/symbology-ng/qgssymbolv2.h

+2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ class CORE_EXPORT QgsSymbolV2
5252
Pixel
5353
};
5454

55+
typedef QList<OutputUnit> OutputUnitList;
56+
5557
enum SymbolType
5658
{
5759
Marker,

src/gui/qgsunitselectionwidget.cpp

+52-3
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,57 @@ void QgsUnitSelectionWidget::setUnits( const QStringList &units, int mapUnitIdx
9393
blockSignals( false );
9494
}
9595

96+
void QgsUnitSelectionWidget::setUnits( const QgsSymbolV2::OutputUnitList &units )
97+
{
98+
blockSignals( true );
99+
mUnitCombo->clear();
100+
101+
//instead of iterating over the units list, we specifically check for presence of unit types
102+
//to ensure that the widget always keeps the same order for units, regardless of the
103+
//order specified in the units list
104+
mMapUnitIdx = -1;
105+
if ( units.contains( QgsSymbolV2::MM ) )
106+
{
107+
mUnitCombo->addItem( tr( "Millimeter" ), QgsSymbolV2::MM );
108+
}
109+
if ( units.contains( QgsSymbolV2::Pixel ) )
110+
{
111+
mUnitCombo->addItem( tr( "Pixels" ), QgsSymbolV2::Pixel );
112+
}
113+
if ( units.contains( QgsSymbolV2::MapUnit ) )
114+
{
115+
mUnitCombo->addItem( tr( "Map unit" ), QgsSymbolV2::MapUnit );
116+
}
117+
blockSignals( false );
118+
}
119+
120+
QgsSymbolV2::OutputUnit QgsUnitSelectionWidget::unit() const
121+
{
122+
if ( mUnitCombo->count() == 0 )
123+
return QgsSymbolV2::Mixed;
124+
125+
QVariant currentData = mUnitCombo->itemData( mUnitCombo->currentIndex() );
126+
if ( currentData.isValid() )
127+
{
128+
return ( QgsSymbolV2::OutputUnit ) currentData.toInt();
129+
}
130+
//unknown
131+
return QgsSymbolV2::Mixed;
132+
}
133+
96134
void QgsUnitSelectionWidget::setUnit( int unitIndex )
97135
{
98136
blockSignals( true );
99137
mUnitCombo->setCurrentIndex( unitIndex );
100138
blockSignals( false );
101139
}
102140

141+
void QgsUnitSelectionWidget::setUnit( QgsSymbolV2::OutputUnit unit )
142+
{
143+
int idx = mUnitCombo->findData( QVariant(( int ) unit ) );
144+
mUnitCombo->setCurrentIndex( idx == -1 ? 0 : idx );
145+
}
146+
103147
void QgsUnitSelectionWidget::showDialog()
104148
{
105149
QgsMapUnitScale scale = mUnitScaleDialog->getMapUnitScale();
@@ -119,8 +163,13 @@ void QgsUnitSelectionWidget::showDialog()
119163

120164
void QgsUnitSelectionWidget::toggleUnitRangeButton()
121165
{
122-
mMapScaleButton->setVisible( mMapUnitIdx != -1 && mUnitCombo->currentIndex() == mMapUnitIdx );
166+
if ( unit() != QgsSymbolV2::Mixed )
167+
{
168+
mMapScaleButton->setVisible( unit() == QgsSymbolV2::MapUnit );
169+
}
170+
else
171+
{
172+
mMapScaleButton->setVisible( mMapUnitIdx != -1 && mUnitCombo->currentIndex() == mMapUnitIdx );
173+
}
123174
}
124175

125-
126-

src/gui/qgsunitselectionwidget.h

+27-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
#include "ui_qgsunitselectionwidget.h"
2424
#include "ui_qgsmapunitscaledialog.h"
2525

26-
2726
/** Dialog allowing the user to choose the minimum and maximum scale of an object in map units */
2827
class GUI_EXPORT QgsMapUnitScaleDialog : public QDialog, private Ui::QgsMapUnitScaleDialog
2928
{
@@ -55,15 +54,40 @@ class GUI_EXPORT QgsUnitSelectionWidget : public QWidget, private Ui::QgsUnitSel
5554
public:
5655
QgsUnitSelectionWidget( QWidget* parent = 0 );
5756

58-
/** Sets the units which the user can choose from in the combobox. mapUnitIdx specifies which entry corresponds to the map units, or -1 if none */
57+
/** Sets the units which the user can choose from in the combobox.
58+
* @param units list of strings for custom units to display in the widget
59+
* @param mapUnitIdx specifies which entry corresponds to the map units, or -1 if none
60+
*/
5961
void setUnits( const QStringList& units, int mapUnitIdx );
6062

63+
/** Sets the units which the user can choose from in the combobox. Clears any existing units.
64+
* @param units list of valid units
65+
* @note added in QGIS 2.9
66+
*/
67+
void setUnits( const QgsSymbolV2::OutputUnitList& units );
68+
6169
/** Get the selected unit index */
6270
int getUnit() const { return mUnitCombo->currentIndex(); }
63-
/** Sets the selected unit index */
71+
72+
/** Returns the current predefined selected unit (if applicable).
73+
* @returns selected output unit, or QgsSymbolV2::Mixed if the widget was populated with custom unit types
74+
* @note added in QGIS 2.9
75+
*/
76+
QgsSymbolV2::OutputUnit unit() const;
77+
78+
/** Sets the selected unit index
79+
* @param unitIndex index of unit to set as current
80+
*/
6481
void setUnit( int unitIndex );
82+
83+
/** Sets the selected unit
84+
* @param unit predefined unit to set as current
85+
*/
86+
void setUnit( QgsSymbolV2::OutputUnit unit );
87+
6588
/** Returns the map unit scale */
6689
QgsMapUnitScale getMapUnitScale() const { return mUnitScaleDialog->getMapUnitScale(); }
90+
6791
/** Sets the map unit scale */
6892
void setMapUnitScale( const QgsMapUnitScale& scale ) { mUnitScaleDialog->setMapUnitScale( scale ); }
6993

0 commit comments

Comments
 (0)