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 + + + + + +