Index: src/app/composer/qgscomposerlabelwidget.cpp
===================================================================
--- src/app/composer/qgscomposerlabelwidget.cpp (révision 13910)
+++ src/app/composer/qgscomposerlabelwidget.cpp (copie de travail)
@@ -34,6 +34,12 @@
{
mTextEdit->setText( mComposerLabel->text() );
mMarginDoubleSpinBox->setValue( mComposerLabel->margin() );
+ mTopRadioButton->setChecked( mComposerLabel->vAlign() == Qt::AlignTop ? true : false);
+ mMiddleRadioButton->setChecked( mComposerLabel->vAlign() == Qt::AlignVCenter ? true : false);
+ mBottomRadioButton->setChecked( mComposerLabel->vAlign() == Qt::AlignBottom ? true : false);
+ mLeftRadioButton->setChecked( mComposerLabel->hAlign() == Qt::AlignLeft ? true : false);
+ mCenterRadioButton->setChecked( mComposerLabel->hAlign() == Qt::AlignHCenter ? true : false);
+ mRightRadioButton->setChecked( mComposerLabel->hAlign() == Qt::AlignRight ? true : false);
}
}
@@ -88,3 +94,56 @@
mComposerLabel->setFontColor( newColor );
}
+void QgsComposerLabelWidget::on_mCenterRadioButton_clicked()
+{
+ if ( mComposerLabel )
+ {
+ mComposerLabel->setHAlign( Qt::AlignHCenter );
+ mComposerLabel->update();
+ }
+}
+
+void QgsComposerLabelWidget::on_mRightRadioButton_clicked()
+{
+ if ( mComposerLabel )
+ {
+ mComposerLabel->setHAlign( Qt::AlignRight );
+ mComposerLabel->update();
+ }
+}
+
+void QgsComposerLabelWidget::on_mLeftRadioButton_clicked()
+{
+ if ( mComposerLabel )
+ {
+ mComposerLabel->setHAlign( Qt::AlignLeft );
+ mComposerLabel->update();
+ }
+}
+
+void QgsComposerLabelWidget::on_mTopRadioButton_clicked()
+{
+ if ( mComposerLabel )
+ {
+ mComposerLabel->setVAlign( Qt::AlignTop );
+ mComposerLabel->update();
+ }
+}
+
+void QgsComposerLabelWidget::on_mBottomRadioButton_clicked()
+{
+ if ( mComposerLabel )
+ {
+ mComposerLabel->setVAlign( Qt::AlignBottom );
+ mComposerLabel->update();
+ }
+}
+
+void QgsComposerLabelWidget::on_mMiddleRadioButton_clicked()
+{
+ if ( mComposerLabel )
+ {
+ mComposerLabel->setVAlign( Qt::AlignVCenter );
+ mComposerLabel->update();
+ }
+}
Index: src/app/composer/qgscomposerlabelwidget.h
===================================================================
--- src/app/composer/qgscomposerlabelwidget.h (révision 13910)
+++ src/app/composer/qgscomposerlabelwidget.h (copie de travail)
@@ -36,6 +36,12 @@
void on_mFontButton_clicked();
void on_mMarginDoubleSpinBox_valueChanged( double d );
void on_mFontColorButton_clicked();
+ void on_mCenterRadioButton_clicked();
+ void on_mLeftRadioButton_clicked();
+ void on_mRightRadioButton_clicked();
+ void on_mTopRadioButton_clicked();
+ void on_mBottomRadioButton_clicked();
+ void on_mMiddleRadioButton_clicked();
private:
QgsComposerLabel* mComposerLabel;
Index: src/core/composer/qgscomposerlabel.h
===================================================================
--- src/core/composer/qgscomposerlabel.h (révision 13910)
+++ src/core/composer/qgscomposerlabel.h (copie de travail)
@@ -43,6 +43,10 @@
QFont font() const;
void setFont( const QFont& f );
+ int vAlign() const;
+ int hAlign() const;
+ void setHAlign( int a ) {mHAlignment = a;}
+ void setVAlign( int a ) {mVAlignment = a;}
double margin() {return mMargin;}
void setMargin( double m ) {mMargin = m;}
@@ -68,6 +72,12 @@
// Text
QString mText;
+ // Horizontal Alignment
+ int mHAlignment;
+
+ // Vertical Alignment
+ int mVAlignment;
+
// Font
QFont mFont;
Index: src/core/composer/qgscomposeritem.h
===================================================================
--- src/core/composer/qgscomposeritem.h (révision 13910)
+++ src/core/composer/qgscomposeritem.h (copie de travail)
@@ -144,6 +144,8 @@
/**Like the above, but with a rectangle for multiline text*/
void drawText( QPainter* p, const QRectF& rect, const QString& text, const QFont& font ) const;
+ /** Alignment management */
+ void drawText( QPainter* p, const QRectF& rect, const QString& text, const QFont& font, const int halignement, const int valignement ) const;
/**Returns the font width in Millimeters (considers upscaling and downscaling with FONT_WORKAROUND_SCALE*/
double textWidthMillimeters( const QFont& font, const QString& text ) const;
Index: src/core/composer/qgscomposerlabel.cpp
===================================================================
--- src/core/composer/qgscomposerlabel.cpp (révision 13910)
+++ src/core/composer/qgscomposerlabel.cpp (copie de travail)
@@ -24,6 +24,10 @@
{
//default font size is 10 point
mFont.setPointSizeF( 10 );
+ //default Horizontal Alignment is Left
+ mHAlignment = Qt::AlignLeft;
+ // default Vertical Alignment is Top
+ mVAlignment = Qt::AlignTop;
}
QgsComposerLabel::~QgsComposerLabel()
@@ -49,7 +53,7 @@
rect().height() - 2 * penWidth - 2 * mMargin );
- drawText( painter, painterRect, displayText(), mFont );
+ drawText( painter, painterRect, displayText(), mFont, mHAlignment, mVAlignment );
drawFrame( painter );
if ( isSelected() )
@@ -110,8 +114,20 @@
return mFont;
}
+int QgsComposerLabel::vAlign() const
+{
+ return mVAlignment;
+}
+
+int QgsComposerLabel::hAlign() const
+{
+ return mHAlignment;
+}
+
bool QgsComposerLabel::writeXML( QDomElement& elem, QDomDocument & doc ) const
{
+ QString alignment;
+
if ( elem.isNull() )
{
return false;
@@ -122,7 +138,29 @@
composerLabelElem.setAttribute( "labelText", mText );
composerLabelElem.setAttribute( "margin", QString::number( mMargin ) );
+ // Horizontal alignment
+ if ( mHAlignment == Qt::AlignHCenter )
+ alignment = "center";
+ else if ( mHAlignment == Qt::AlignLeft )
+ alignment = "left";
+ else if ( mHAlignment == Qt::AlignRight )
+ alignment = "right";
+ else
+ alignment = "left";
+ composerLabelElem.setAttribute( "halign", alignment);
+ // Vertical alignment
+ if ( mVAlignment == Qt::AlignVCenter )
+ alignment = "center";
+ else if ( mVAlignment == Qt::AlignTop )
+ alignment = "top";
+ else if ( mVAlignment == Qt::AlignBottom )
+ alignment = "bottom";
+ else
+ alignment = "top";
+ composerLabelElem.setAttribute( "valign", alignment);
+
+
//font
QDomElement labelFontElem = doc.createElement( "LabelFont" );
labelFontElem.setAttribute( "description", mFont.toString() );
@@ -141,6 +179,8 @@
bool QgsComposerLabel::readXML( const QDomElement& itemElem, const QDomDocument& doc )
{
+ QString alignment;
+
if ( itemElem.isNull() )
{
return false;
@@ -154,6 +194,31 @@
//margin
mMargin = itemElem.attribute( "margin" ).toDouble();
+ //Horizontal alignment
+ alignment = itemElem.attribute( "halign" );
+
+ if (alignment.compare( "center", Qt::CaseInsensitive) == 0 )
+ mHAlignment = Qt::AlignHCenter;
+ else if (alignment.compare( "left", Qt::CaseInsensitive) == 0 )
+ mHAlignment = Qt::AlignLeft;
+ else if (alignment.compare( "right", Qt::CaseInsensitive) == 0 )
+ mHAlignment = Qt::AlignRight;
+ else
+ mHAlignment = Qt::AlignLeft;
+
+ //Vertical alignment
+ alignment = itemElem.attribute( "valign" );
+
+ if (alignment.compare( "top", Qt::CaseInsensitive) == 0 )
+ mVAlignment = Qt::AlignTop;
+ else if (alignment.compare( "center", Qt::CaseInsensitive) == 0 )
+ mVAlignment = Qt::AlignVCenter;
+ else if (alignment.compare( "bottom", Qt::CaseInsensitive) == 0 )
+ mVAlignment = Qt::AlignBottom;
+ else
+ mVAlignment = Qt::AlignTop;
+
+
//font
QDomNodeList labelFontList = itemElem.elementsByTagName( "LabelFont" );
if ( labelFontList.size() > 0 )
Index: src/core/composer/qgscomposeritem.cpp
===================================================================
--- src/core/composer/qgscomposeritem.cpp (révision 13910)
+++ src/core/composer/qgscomposeritem.cpp (copie de travail)
@@ -721,6 +721,20 @@
p->restore();
}
+void QgsComposerItem::drawText( QPainter* p, const QRectF& rect, const QString& text, const QFont& font, const int halignement, const int valignment ) const
+{
+ QFont textFont = scaledFontPixelSize( font );
+
+ QRectF scaledRect( rect.x() * FONT_WORKAROUND_SCALE, rect.y() * FONT_WORKAROUND_SCALE,
+ rect.width() * FONT_WORKAROUND_SCALE, rect.height() * FONT_WORKAROUND_SCALE );
+
+ p->save();
+ p->setFont( textFont );
+ double scaleFactor = 1.0 / FONT_WORKAROUND_SCALE;
+ p->scale( scaleFactor, scaleFactor );
+ p->drawText( scaledRect, halignement | valignment | Qt::TextWordWrap, text );
+ p->restore();
+}
void QgsComposerItem::drawArrowHead( QPainter* p, double x, double y, double angle, double arrowHeadWidth ) const
{
if ( !p )
Index: src/ui/qgscomposerlabelwidgetbase.ui
===================================================================
--- src/ui/qgscomposerlabelwidgetbase.ui (révision 13910)
+++ src/ui/qgscomposerlabelwidgetbase.ui (copie de travail)
@@ -6,7 +6,7 @@
0
0
- 203
+ 519
362
@@ -30,8 +30,8 @@
0
0
- 185
- 317
+ 486
+ 320
@@ -65,7 +65,7 @@
- -
+
-
Margin (mm)
@@ -75,9 +75,72 @@
- -
+
-
+ -
+
+
+ Horizontal Alignment:
+
+
+
+ QLayout::SetMinimumSize
+
+
-
+
+
+ Left
+
+
+
+ -
+
+
+ Center
+
+
+
+ -
+
+
+ Right
+
+
+
+
+
+
+ -
+
+
+ Vertical Alignment:
+
+
+
-
+
+
+ Top
+
+
+
+ -
+
+
+ Middle
+
+
+
+ -
+
+
+ Bottom
+
+
+
+
+
+