1
/***************************************************************************
5
copyright : (C) 2005 by Radim Blazek
7
***************************************************************************/
9
/***************************************************************************
11
* This program is free software; you can redistribute it and/or modify *
12
* it under the terms of the GNU General Public License as published by *
13
* the Free Software Foundation; either version 2 of the License, or *
14
* (at your option) any later version. *
16
***************************************************************************/
18
#include "qgscomposerlabel.h"
20
#include <QDomElement>
23
QgsComposerLabel::QgsComposerLabel( QgsComposition *composition ): QgsComposerItem( composition ), mMargin( 1.0 ), mFontColor( QColor( 0, 0, 0 ) )
25
//default font size is 10 point
26
mFont.setPointSizeF( 10 );
29
QgsComposerLabel::~QgsComposerLabel()
33
void QgsComposerLabel::paint( QPainter* painter, const QStyleOptionGraphicsItem* itemStyle, QWidget* pWidget )
40
drawBackground( painter );
41
painter->setPen( QPen( QColor( mFontColor ) ) ); //draw all text black
42
painter->setFont( mFont );
44
QFontMetricsF fontSize( mFont );
46
//support multiline labels
47
double penWidth = pen().widthF();
48
QRectF painterRect( penWidth + mMargin, penWidth + mMargin, rect().width() - 2 * penWidth - 2 * mMargin,
49
rect().height() - 2 * penWidth - 2 * mMargin );
52
drawText( painter, painterRect, displayText(), mFont );
57
drawSelectionBoxes( painter );
61
void QgsComposerLabel::setText( const QString& text )
66
QString QgsComposerLabel::displayText() const
68
QString displayText = mText;
69
replaceDateText( displayText );
73
void QgsComposerLabel::replaceDateText( QString& text ) const
75
int currentDatePos = text.indexOf( "$CURRENT_DATE" );
76
if ( currentDatePos != -1 )
78
//check if there is a bracket just after $CURRENT_DATE
80
int openingBracketPos = text.indexOf( "(", currentDatePos );
81
int closingBracketPos = text.indexOf( ")", openingBracketPos + 1 );
82
if ( openingBracketPos != -1 && closingBracketPos != -1 && ( closingBracketPos - openingBracketPos ) > 1 )
84
formatText = text.mid( openingBracketPos + 1, closingBracketPos - openingBracketPos - 1 );
85
text.replace( currentDatePos, closingBracketPos - currentDatePos + 1, QDate::currentDate().toString( formatText ) );
89
text.replace( "$CURRENT_DATE", QDate::currentDate().toString() );
94
void QgsComposerLabel::setFont( const QFont& f )
99
void QgsComposerLabel::adjustSizeToText()
101
double textWidth = textWidthMillimeters( mFont, displayText() );
102
double fontAscent = fontAscentMillimeters( mFont );
104
setSceneRect( QRectF( transform().dx(), transform().dy(), textWidth + 2 * mMargin + 2 * pen().widthF() + 1, \
105
fontAscent + 2 * mMargin + 2 * pen().widthF() + 1 ) );
108
QFont QgsComposerLabel::font() const
113
bool QgsComposerLabel::writeXML( QDomElement& elem, QDomDocument & doc ) const
120
QDomElement composerLabelElem = doc.createElement( "ComposerLabel" );
122
composerLabelElem.setAttribute( "labelText", mText );
123
composerLabelElem.setAttribute( "margin", QString::number( mMargin ) );
127
QDomElement labelFontElem = doc.createElement( "LabelFont" );
128
labelFontElem.setAttribute( "description", mFont.toString() );
129
composerLabelElem.appendChild( labelFontElem );
132
QDomElement fontColorElem = doc.createElement( "FontColor" );
133
fontColorElem.setAttribute( "red", mFontColor.red() );
134
fontColorElem.setAttribute( "green", mFontColor.green() );
135
fontColorElem.setAttribute( "blue", mFontColor.blue() );
136
composerLabelElem.appendChild( fontColorElem );
138
elem.appendChild( composerLabelElem );
139
return _writeXML( composerLabelElem, doc );
142
bool QgsComposerLabel::readXML( const QDomElement& itemElem, const QDomDocument& doc )
144
if ( itemElem.isNull() )
149
//restore label specific properties
152
mText = itemElem.attribute( "labelText" );
155
mMargin = itemElem.attribute( "margin" ).toDouble();
158
QDomNodeList labelFontList = itemElem.elementsByTagName( "LabelFont" );
159
if ( labelFontList.size() > 0 )
161
QDomElement labelFontElem = labelFontList.at( 0 ).toElement();
162
mFont.fromString( labelFontElem.attribute( "description" ) );
166
QDomNodeList fontColorList = itemElem.elementsByTagName( "FontColor" );
167
if ( fontColorList.size() > 0 )
169
QDomElement fontColorElem = fontColorList.at( 0 ).toElement();
170
int red = fontColorElem.attribute( "red", "0" ).toInt();
171
int green = fontColorElem.attribute( "green", "0" ).toInt();
172
int blue = fontColorElem.attribute( "blue", "0" ).toInt();
173
mFontColor = QColor( red, green, blue );
177
mFontColor = QColor( 0, 0, 0 );
180
//restore general composer item properties
181
QDomNodeList composerItemList = itemElem.elementsByTagName( "ComposerItem" );
182
if ( composerItemList.size() > 0 )
184
QDomElement composerItemElem = composerItemList.at( 0 ).toElement();
185
_readXML( composerItemElem, doc );