Skip to content

Commit f57892c

Browse files
committed
[FEATURE] Add label wrapping on character. Semi Fixes #3284
1 parent 3f73c85 commit f57892c

File tree

4 files changed

+47
-10
lines changed

4 files changed

+47
-10
lines changed

src/app/qgslabelinggui.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ QgsLabelingGui::QgsLabelingGui( QgsPalLabeling* lbl, QgsVectorLayer* layer, QgsM
137137
chkMergeLines->setChecked( lyr.mergeLines );
138138
mMinSizeSpinBox->setValue( lyr.minFeatureSize );
139139
chkAddDirectionSymbol->setChecked( lyr.addDirectionSymbol );
140+
wrapCharacterEdit->setText( lyr.wrapChar );
140141

141142
bool scaleBased = ( lyr.scaleMin != 0 && lyr.scaleMax != 0 );
142143
chkScaleBasedVisibility->setChecked( scaleBased );
@@ -320,6 +321,7 @@ QgsPalLayerSettings QgsLabelingGui::layerSettings()
320321
}
321322
lyr.minFeatureSize = mMinSizeSpinBox->value();
322323
lyr.fontSizeInMapUnits = ( mFontSizeUnitComboBox->currentIndex() == 1 );
324+
lyr.wrapChar = wrapCharacterEdit->text();
323325

324326
//data defined labeling
325327
setDataDefinedProperty( mSizeAttributeComboBox, QgsPalLayerSettings::Size, lyr );

src/core/qgspallabeling.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ QgsPalLayerSettings::QgsPalLayerSettings()
157157
addDirectionSymbol = false;
158158
fontSizeInMapUnits = false;
159159
distInMapUnits = false;
160+
wrapChar = "";
160161
}
161162

162163
QgsPalLayerSettings::QgsPalLayerSettings( const QgsPalLayerSettings& s )
@@ -187,6 +188,7 @@ QgsPalLayerSettings::QgsPalLayerSettings( const QgsPalLayerSettings& s )
187188
addDirectionSymbol = s.addDirectionSymbol;
188189
fontSizeInMapUnits = s.fontSizeInMapUnits;
189190
distInMapUnits = s.distInMapUnits;
191+
wrapChar = s.wrapChar;
190192

191193
dataDefinedProperties = s.dataDefinedProperties;
192194
fontMetrics = NULL;
@@ -329,6 +331,7 @@ void QgsPalLayerSettings::readFromLayer( QgsVectorLayer* layer )
329331
minFeatureSize = layer->customProperty( "labeling/minFeatureSize" ).toDouble();
330332
fontSizeInMapUnits = layer->customProperty( "labeling/fontSizeInMapUnits" ).toBool();
331333
distInMapUnits = layer->customProperty( "labeling/distInMapUnits" ).toBool();
334+
wrapChar = layer->customProperty( "labeling/wrapChar" ).toString();
332335
_readDataDefinedPropertyMap( layer, dataDefinedProperties );
333336
}
334337

@@ -367,6 +370,7 @@ void QgsPalLayerSettings::writeToLayer( QgsVectorLayer* layer )
367370
layer->setCustomProperty( "labeling/minFeatureSize", minFeatureSize );
368371
layer->setCustomProperty( "labeling/fontSizeInMapUnits", fontSizeInMapUnits );
369372
layer->setCustomProperty( "labeling/distInMapUnits", distInMapUnits );
373+
layer->setCustomProperty( "labeling/wrapChar", wrapChar );
370374
_writeDataDefinedPropertyMap( layer, dataDefinedProperties );
371375
}
372376

@@ -432,7 +436,12 @@ void QgsPalLayerSettings::calculateLabelSize( const QFontMetricsF* fm, QString t
432436
}
433437

434438
double w, h;
435-
QStringList multiLineSplit = text.split( "\n" );
439+
QStringList multiLineSplit;
440+
if ( !wrapChar.isEmpty() )
441+
multiLineSplit = text.split( wrapChar );
442+
else
443+
multiLineSplit = text.split( "\n" );
444+
436445
h = fm->height() * multiLineSplit.size() / rasterCompressFactor;
437446
w = 0;
438447
for ( int i = 0; i < multiLineSplit.size(); ++i )
@@ -1337,7 +1346,10 @@ void QgsPalLabeling::drawLabel( pal::LabelPosition* label, QPainter* painter, co
13371346
//QgsDebugMsg( "drawLabel " + QString::number( drawBuffer ) + " " + txt );
13381347

13391348
QStringList multiLineList;
1340-
multiLineList = txt.split( "\n" );
1349+
if ( !lyr.wrapChar.isEmpty() )
1350+
multiLineList = txt.split( lyr.wrapChar );
1351+
else
1352+
multiLineList = txt.split( "\n" );
13411353

13421354
for ( int i = 0; i < multiLineList.size(); ++i )
13431355
{

src/core/qgspallabeling.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,14 +126,13 @@ class CORE_EXPORT QgsPalLayerSettings
126126
bool plusSign;
127127
bool labelPerPart; // whether to label every feature's part or only the biggest one
128128
bool mergeLines;
129-
bool multiLineLabels; //draw labels on multiple lines if they contain '\n'
130129
double minFeatureSize; // minimum feature size to be labelled (in mm)
131130
// Adds '<' or '>' to the label string pointing to the direction of the line / polygon ring
132131
// Works only if Placement == Line
133132
bool addDirectionSymbol;
134133
bool fontSizeInMapUnits; //true if font size is in map units (otherwise in points)
135134
bool distInMapUnits; //true if distance is in map units (otherwise in mm)
136-
135+
QString wrapChar;
137136
// called from register feature hook
138137
void calculateLabelSize( const QFontMetricsF* fm, QString text, double& labelX, double& labelY );
139138

src/ui/qgslabelingguibase.ui

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -473,8 +473,8 @@
473473
<rect>
474474
<x>0</x>
475475
<y>0</y>
476-
<width>658</width>
477-
<height>443</height>
476+
<width>646</width>
477+
<height>484</height>
478478
</rect>
479479
</property>
480480
<layout class="QGridLayout" name="gridLayout_13">
@@ -547,7 +547,7 @@
547547
</property>
548548
</widget>
549549
</item>
550-
<item row="3" column="0">
550+
<item row="4" column="0">
551551
<layout class="QHBoxLayout" name="horizontalLayout_2">
552552
<item>
553553
<widget class="QLabel" name="label_19">
@@ -565,7 +565,7 @@
565565
</item>
566566
</layout>
567567
</item>
568-
<item row="4" column="0">
568+
<item row="5" column="0">
569569
<layout class="QHBoxLayout" name="horizontalLayout_20">
570570
<item>
571571
<widget class="QCheckBox" name="chkNoObstacle">
@@ -602,6 +602,30 @@
602602
</item>
603603
</layout>
604604
</item>
605+
<item row="3" column="0">
606+
<layout class="QHBoxLayout" name="horizontalLayout">
607+
<property name="topMargin">
608+
<number>3</number>
609+
</property>
610+
<item>
611+
<widget class="QLabel" name="label_2">
612+
<property name="text">
613+
<string>Wrap label on character</string>
614+
</property>
615+
</widget>
616+
</item>
617+
<item>
618+
<widget class="QLineEdit" name="wrapCharacterEdit">
619+
<property name="sizePolicy">
620+
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
621+
<horstretch>0</horstretch>
622+
<verstretch>0</verstretch>
623+
</sizepolicy>
624+
</property>
625+
</widget>
626+
</item>
627+
</layout>
628+
</item>
605629
</layout>
606630
</widget>
607631
</item>
@@ -911,8 +935,8 @@
911935
<rect>
912936
<x>0</x>
913937
<y>0</y>
914-
<width>249</width>
915-
<height>567</height>
938+
<width>646</width>
939+
<height>585</height>
916940
</rect>
917941
</property>
918942
<layout class="QGridLayout" name="gridLayout_11">

0 commit comments

Comments
 (0)