Skip to content

Commit 0fdd3ac

Browse files
committed
#9480: Add GUI checkbox option in labeling
1 parent 59427e2 commit 0fdd3ac

File tree

4 files changed

+16
-2
lines changed

4 files changed

+16
-2
lines changed

src/app/qgslabelinggui.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ void QgsLabelingGui::init()
259259

260260
// populate placement options
261261
mCentroidRadioWhole->setChecked( lyr.centroidWhole );
262+
mCentroidInsideCheckBox->setChecked( lyr.centroidInside );
262263
switch ( lyr.placement )
263264
{
264265
case QgsPalLayerSettings::AroundPoint:
@@ -545,6 +546,7 @@ QgsPalLayerSettings QgsLabelingGui::layerSettings()
545546

546547
QWidget* curPlacementWdgt = stackedPlacement->currentWidget();
547548
lyr.centroidWhole = mCentroidRadioWhole->isChecked();
549+
lyr.centroidInside = mCentroidInsideCheckBox->isChecked();
548550
if (( curPlacementWdgt == pagePoint && radAroundPoint->isChecked() )
549551
|| ( curPlacementWdgt == pagePolygon && radAroundCentroid->isChecked() ) )
550552
{

src/core/qgspallabeling.cpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ QgsPalLayerSettings::QgsPalLayerSettings()
311311
placement = AroundPoint;
312312
placementFlags = 0;
313313
centroidWhole = false;
314+
centroidInside = false;
314315
quadOffset = QuadrantOver;
315316
xOffset = 0;
316317
yOffset = 0;
@@ -502,6 +503,7 @@ QgsPalLayerSettings::QgsPalLayerSettings( const QgsPalLayerSettings& s )
502503
placement = s.placement;
503504
placementFlags = s.placementFlags;
504505
centroidWhole = s.centroidWhole;
506+
centroidInside = s.centroidInside;
505507
quadOffset = s.quadOffset;
506508
xOffset = s.xOffset;
507509
yOffset = s.yOffset;
@@ -997,6 +999,7 @@ void QgsPalLayerSettings::readFromLayer( QgsVectorLayer* layer )
997999
placement = ( Placement )layer->customProperty( "labeling/placement" ).toInt();
9981000
placementFlags = layer->customProperty( "labeling/placementFlags" ).toUInt();
9991001
centroidWhole = layer->customProperty( "labeling/centroidWhole", QVariant( false ) ).toBool();
1002+
centroidInside = layer->customProperty( "labeling/centroidInside", QVariant( false ) ).toBool();
10001003
dist = layer->customProperty( "labeling/dist" ).toDouble();
10011004
distInMapUnits = layer->customProperty( "labeling/distInMapUnits" ).toBool();
10021005
distMapUnitScale.minScale = layer->customProperty( "labeling/distMapUnitMinScale", 0.0 ).toDouble();
@@ -1167,6 +1170,7 @@ void QgsPalLayerSettings::writeToLayer( QgsVectorLayer* layer )
11671170
layer->setCustomProperty( "labeling/placement", placement );
11681171
layer->setCustomProperty( "labeling/placementFlags", ( unsigned int )placementFlags );
11691172
layer->setCustomProperty( "labeling/centroidWhole", centroidWhole );
1173+
layer->setCustomProperty( "labeling/centroidInside", centroidInside );
11701174
layer->setCustomProperty( "labeling/dist", dist );
11711175
layer->setCustomProperty( "labeling/distInMapUnits", distInMapUnits );
11721176
layer->setCustomProperty( "labeling/distMapUnitMinScale", distMapUnitScale.minScale );
@@ -3389,8 +3393,8 @@ int QgsPalLabeling::prepareLayer( QgsVectorLayer* layer, QStringList& attrNames,
33893393
// set whether adjacent lines should be merged
33903394
l->setMergeConnectedLines( lyr.mergeLines );
33913395

3392-
// force the location of the centroid inside of polygons
3393-
l->setCentroidInside( true );
3396+
// set whether location of centroid must be inside of polygons
3397+
l->setCentroidInside( lyr.centroidInside );
33943398

33953399
// set how to show upside-down labels
33963400
Layer::UpsideDownLabels upsdnlabels;

src/core/qgspallabeling.h

+1
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,7 @@ class CORE_EXPORT QgsPalLayerSettings
375375
unsigned int placementFlags;
376376

377377
bool centroidWhole; // whether centroid calculated from whole or visible polygon
378+
bool centroidInside; // whether centroid-point calculated must be inside polygon
378379
double dist; // distance from the feature (in mm)
379380
bool distInMapUnits; //true if distance is in map units (otherwise in mm)
380381
QgsMapUnitScale distMapUnitScale;

src/ui/qgslabelingguibase.ui

+7
Original file line numberDiff line numberDiff line change
@@ -4101,6 +4101,13 @@ font-style: italic;</string>
41014101
</property>
41024102
</widget>
41034103
</item>
4104+
<item row="1" column="1">
4105+
<widget class="QCheckBox" name="mCentroidInsideCheckBox">
4106+
<property name="text">
4107+
<string>Force point inside polygon</string>
4108+
</property>
4109+
</widget>
4110+
</item>
41044111
</layout>
41054112
</widget>
41064113
</item>

0 commit comments

Comments
 (0)