Skip to content

Commit fa1a8bc

Browse files
author
mhugent
committed
applied patch for extended data defined labels provided by Juergen
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@7297 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 09a075b commit fa1a8bc

File tree

4 files changed

+323
-134
lines changed

4 files changed

+323
-134
lines changed

src/app/qgslabeldialog.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ void QgsLabelDialog::init ( )
114114
cboFontSizeField->insertStringList(myFieldStringList);
115115
cboFontSizeField->setCurrentItem(itemNoForField(mLabel->labelField(QgsLabel::Size),myFieldStringList));
116116

117+
cboFontSizeTypeField->clear();
118+
cboFontSizeTypeField->insertStringList(myFieldStringList);
119+
cboFontSizeTypeField->setCurrentItem(itemNoForField(mLabel->labelField(QgsLabel::SizeType),myFieldStringList));
120+
117121
cboFontTransparencyField->clear();
118122
cboFontTransparencyField->insertStringList(myFieldStringList);
119123
//cboFontTransparencyField->setCurrentItem(itemNoForField(mLabel->labelField(QgsLabel::FontTransparency),myFieldStringList));
@@ -392,6 +396,7 @@ void QgsLabelDialog::apply()
392396
mLabel->setLabelField( QgsLabel::Italic, fieldIndexFromName(cboItalicField->currentText()) );
393397
mLabel->setLabelField( QgsLabel::Underline, fieldIndexFromName(cboUnderlineField->currentText()) );
394398
mLabel->setLabelField( QgsLabel::Size, fieldIndexFromName(cboFontSizeField->currentText()) );
399+
mLabel->setLabelField( QgsLabel::SizeType, fieldIndexFromName(cboFontSizeTypeField->currentText()) );
395400
mLabel->setLabelField( QgsLabel::BufferSize, fieldIndexFromName(cboBufferSizeField->currentText()) );
396401
//mLabel->setLabelField( QgsLabel::BufferTransparency, cboBufferTransparencyField->currentText() );
397402
mLabel->setLabelField( QgsLabel::XCoordinate, fieldIndexFromName(cboXCoordinateField->currentText()) );

src/core/qgslabel.cpp

Lines changed: 53 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,26 @@ void QgsLabel::renderLabel( QPainter * painter, QgsRect &viewExtent,
135135
{
136136
size = value.toDouble();
137137
}
138-
if ( mLabelAttributes->sizeType() == QgsLabelAttributes::MapUnits )
138+
int sizeType;
139+
value = fieldValue ( SizeType, feature );
140+
if( value.isEmpty() )
141+
sizeType = mLabelAttributes->sizeType();
142+
else
143+
{
144+
value = value.lower();
145+
if( value.compare("mapunits") == 0 )
146+
sizeType = QgsLabelAttributes::MapUnits;
147+
else
148+
sizeType = QgsLabelAttributes::PointUnits;
149+
}
150+
if ( sizeType == QgsLabelAttributes::MapUnits )
139151
{
140152
size *= scale;
141153
} else {
142154
size *= sizeScale;
143155
}
144-
font.setPointSizeFloat ( size );
156+
if(size>0.0)
157+
font.setPointSizeFloat ( size );
145158

146159
value = fieldValue ( Color, feature );
147160
if ( value.isEmpty() )
@@ -215,23 +228,22 @@ void QgsLabel::renderLabel( QPainter * painter, QgsRect &viewExtent,
215228
else
216229
{
217230
value = value.lower();
218-
alignment = Qt::AlignCenter;
219-
if ( value.compare("left") == 0 )
220-
{
221-
alignment = Qt::AlignLeft | Qt::AlignVCenter;
222-
}
223-
else if ( value.compare("right") == 0 )
224-
{
225-
alignment = Qt::AlignRight | Qt::AlignVCenter;
226-
}
227-
else if ( value.compare("bottom") == 0 )
228-
{
229-
alignment = Qt::AlignBottom | Qt::AlignHCenter;
230-
}
231-
else if ( value.compare("top") == 0 )
232-
{
233-
alignment = Qt::AlignTop | Qt::AlignHCenter;
234-
}
231+
232+
alignment=0;
233+
234+
if ( value.contains("left") )
235+
alignment |= Qt::AlignLeft;
236+
else if( value.contains("right") )
237+
alignment |= Qt::AlignRight;
238+
else
239+
alignment |= Qt::AlignHCenter;
240+
241+
if( value.contains("bottom") )
242+
alignment |= Qt::AlignBottom;
243+
else if( value.contains("top") )
244+
alignment |= Qt::AlignTop;
245+
else
246+
alignment |= Qt::AlignVCenter;
235247
}
236248

237249
if ( alignment & Qt::AlignLeft )
@@ -689,14 +701,22 @@ void QgsLabel::readXML( const QDomNode& node )
689701

690702
if ( scratchNode.isNull() )
691703
{
692-
QgsDebugMsg("couldn't find QgsLabel ``size'' attribute");
704+
QgsDebugMsg("couldn't find QgsLabel ``size'' attribute");
693705
}
694706
else
695707
{
696-
el = scratchNode.toElement();
697-
type = QgsLabelAttributes::unitsCode( el.attribute("units","") );
698-
mLabelAttributes->setSize ( el.attribute("value", "0.0").toDouble(), type );
699-
setLabelField ( Size, _elementFieldIndex(el) );
708+
el = scratchNode.toElement();
709+
if( !el.hasAttribute("unitfield") )
710+
{
711+
type = QgsLabelAttributes::unitsCode( el.attribute("units","") );
712+
mLabelAttributes->setSize ( el.attribute("value", "0.0").toDouble(), type );
713+
}
714+
else
715+
{
716+
QString str = el.attribute("unitfield","");
717+
setLabelField( SizeType, str=="" ? -1 : str.toInt() );
718+
}
719+
setLabelField ( Size, _elementFieldIndex(el) );
700720
}
701721

702722
/* Bold */
@@ -940,9 +960,18 @@ void QgsLabel::writeXML(std::ostream& xml)
940960
{
941961
if (mLabelFieldIdx[Size] != -1)
942962
{
963+
if (mLabelFieldIdx[SizeType] != -1)
964+
{
965+
xml << "\t\t\t<size value=\"" << mLabelAttributes->size()
966+
<< "\" unitfield=\"" << mLabelFieldIdx[SizeType]
967+
<< "\" field=\"" << mLabelFieldIdx[Size] << "\" />\n";
968+
}
969+
else
970+
{
943971
xml << "\t\t\t<size value=\"" << mLabelAttributes->size()
944972
<< "\" units=\"" << (const char *)QgsLabelAttributes::unitsName(mLabelAttributes->sizeType()).utf8()
945973
<< "\" field=\"" << mLabelFieldIdx[Size] << "\" />\n";
974+
}
946975
}
947976
else
948977
{

src/core/qgslabel.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class CORE_EXPORT QgsLabel
5555
Text = 0,
5656
Family,
5757
Size,
58+
SizeType,
5859
Bold,
5960
Italic,
6061
Underline,

0 commit comments

Comments
 (0)