Skip to content

Commit

Permalink
Merge pull request #60368 from qgis/backport-60354-to-release-3_40
Browse files Browse the repository at this point in the history
[Backport release-3_40] Use font button in annotation widgets instead of full text format widget
  • Loading branch information
alexbruy authored Jan 31, 2025
2 parents 610ab32 + ab245b6 commit 2defd04
Show file tree
Hide file tree
Showing 6 changed files with 338 additions and 295 deletions.
98 changes: 34 additions & 64 deletions src/gui/annotations/qgsannotationitemwidget_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -314,14 +314,9 @@ QgsAnnotationPointTextItemWidget::QgsAnnotationPointTextItemWidget( QWidget *par
{
setupUi( this );

mTextFormatWidget = new QgsTextFormatWidget();
QVBoxLayout *vLayout = new QVBoxLayout();
vLayout->setContentsMargins( 0, 0, 0, 0 );
vLayout->addWidget( mTextFormatWidget );
mTextFormatWidgetContainer->setLayout( vLayout );

mTextEdit->setMode( QgsRichTextEditor::Mode::QgsTextRenderer );
mTextEdit->setMaximumHeight( mTextEdit->fontMetrics().height() * 10 );

mTextFormatButton->setMode( QgsFontButton::ModeTextRenderer );

mSpinTextAngle->setClearValue( 0 );

Expand All @@ -330,10 +325,9 @@ QgsAnnotationPointTextItemWidget::QgsAnnotationPointTextItemWidget( QWidget *par

mAlignmentComboBox->setAvailableAlignments( Qt::AlignLeft | Qt::AlignHCenter | Qt::AlignRight );

mTextFormatWidget->setDockMode( dockMode() );
connect( mTextFormatWidget, &QgsTextFormatWidget::widgetChanged, this, [=] {
connect( mTextFormatButton, &QgsFontButton::changed, this, [=] {
mTextEdit->setMode(
mTextFormatWidget->format().allowHtmlFormatting() ? QgsRichTextEditor::Mode::QgsTextRenderer : QgsRichTextEditor::Mode::PlainText
mTextFormatButton->textFormat().allowHtmlFormatting() ? QgsRichTextEditor::Mode::QgsTextRenderer : QgsRichTextEditor::Mode::PlainText
);

if ( !mBlockChangedSignal )
Expand Down Expand Up @@ -377,8 +371,8 @@ void QgsAnnotationPointTextItemWidget::updateItem( QgsAnnotationItem *item )
if ( QgsAnnotationPointTextItem *pointTextItem = dynamic_cast<QgsAnnotationPointTextItem *>( item ) )
{
mBlockChangedSignal = true;
pointTextItem->setFormat( mTextFormatWidget->format() );
pointTextItem->setText( mTextFormatWidget->format().allowHtmlFormatting() ? mTextEdit->toHtml() : mTextEdit->toPlainText() );
pointTextItem->setFormat( mTextFormatButton->textFormat() );
pointTextItem->setText( mTextFormatButton->textFormat().allowHtmlFormatting() ? mTextEdit->toHtml() : mTextEdit->toPlainText() );
pointTextItem->setAngle( mSpinTextAngle->value() );
pointTextItem->setRotationMode( mRotationModeCombo->currentData().value<Qgis::SymbolRotationMode>() );
pointTextItem->setAlignment( mAlignmentComboBox->currentAlignment() );
Expand All @@ -387,18 +381,14 @@ void QgsAnnotationPointTextItemWidget::updateItem( QgsAnnotationItem *item )
}
}

void QgsAnnotationPointTextItemWidget::setDockMode( bool dockMode )
{
QgsAnnotationItemBaseWidget::setDockMode( dockMode );
if ( mTextFormatWidget )
mTextFormatWidget->setDockMode( dockMode );
}

void QgsAnnotationPointTextItemWidget::setContext( const QgsSymbolWidgetContext &context )
{
QgsAnnotationItemBaseWidget::setContext( context );
if ( mTextFormatWidget )
mTextFormatWidget->setContext( context );
if ( mTextFormatButton )
{
mTextFormatButton->setMapCanvas( context.mapCanvas() );
mTextFormatButton->setMessageBar( context.messageBar() );
}
mPropertiesWidget->setContext( context );
}

Expand All @@ -419,7 +409,7 @@ bool QgsAnnotationPointTextItemWidget::setNewItem( QgsAnnotationItem *item )
mItem.reset( textItem->clone() );

mBlockChangedSignal = true;
mTextFormatWidget->setFormat( mItem->format() );
mTextFormatButton->setTextFormat( mItem->format() );
mTextEdit->setMode( mItem->format().allowHtmlFormatting() ? QgsRichTextEditor::Mode::QgsTextRenderer : QgsRichTextEditor::Mode::PlainText );
mTextEdit->setText( mItem->text() );
mSpinTextAngle->setValue( mItem->angle() );
Expand Down Expand Up @@ -464,19 +454,13 @@ QgsAnnotationLineTextItemWidget::QgsAnnotationLineTextItemWidget( QWidget *paren
{
setupUi( this );

mTextFormatWidget = new QgsTextFormatWidget();
QVBoxLayout *vLayout = new QVBoxLayout();
vLayout->setContentsMargins( 0, 0, 0, 0 );
vLayout->addWidget( mTextFormatWidget );
mTextFormatWidgetContainer->setLayout( vLayout );
mTextFormatButton->setMode( QgsFontButton::ModeTextRenderer );

mTextEdit->setMode( QgsRichTextEditor::Mode::QgsTextRenderer );
mTextEdit->setMaximumHeight( mTextEdit->fontMetrics().height() * 10 );

mTextFormatWidget->setDockMode( dockMode() );
connect( mTextFormatWidget, &QgsTextFormatWidget::widgetChanged, this, [=] {
connect( mTextFormatButton, &QgsFontButton::changed, this, [=] {
mTextEdit->setMode(
mTextFormatWidget->format().allowHtmlFormatting() ? QgsRichTextEditor::Mode::QgsTextRenderer : QgsRichTextEditor::Mode::PlainText
mTextFormatButton->textFormat().allowHtmlFormatting() ? QgsRichTextEditor::Mode::QgsTextRenderer : QgsRichTextEditor::Mode::PlainText
);

if ( !mBlockChangedSignal )
Expand Down Expand Up @@ -519,8 +503,8 @@ void QgsAnnotationLineTextItemWidget::updateItem( QgsAnnotationItem *item )
if ( QgsAnnotationLineTextItem *lineTextItem = dynamic_cast<QgsAnnotationLineTextItem *>( item ) )
{
mBlockChangedSignal = true;
lineTextItem->setFormat( mTextFormatWidget->format() );
lineTextItem->setText( mTextFormatWidget->format().allowHtmlFormatting() ? mTextEdit->toHtml() : mTextEdit->toPlainText() );
lineTextItem->setFormat( mTextFormatButton->textFormat() );
lineTextItem->setText( mTextFormatButton->textFormat().allowHtmlFormatting() ? mTextEdit->toHtml() : mTextEdit->toPlainText() );

lineTextItem->setOffsetFromLine( mSpinOffset->value() );
lineTextItem->setOffsetFromLineUnit( mOffsetUnitWidget->unit() );
Expand All @@ -531,18 +515,14 @@ void QgsAnnotationLineTextItemWidget::updateItem( QgsAnnotationItem *item )
}
}

void QgsAnnotationLineTextItemWidget::setDockMode( bool dockMode )
{
QgsAnnotationItemBaseWidget::setDockMode( dockMode );
if ( mTextFormatWidget )
mTextFormatWidget->setDockMode( dockMode );
}

void QgsAnnotationLineTextItemWidget::setContext( const QgsSymbolWidgetContext &context )
{
QgsAnnotationItemBaseWidget::setContext( context );
if ( mTextFormatWidget )
mTextFormatWidget->setContext( context );
if ( mTextFormatButton )
{
mTextFormatButton->setMapCanvas( context.mapCanvas() );
mTextFormatButton->setMessageBar( context.messageBar() );
}
mPropertiesWidget->setContext( context );
}

Expand All @@ -561,7 +541,7 @@ bool QgsAnnotationLineTextItemWidget::setNewItem( QgsAnnotationItem *item )
mItem.reset( textItem->clone() );

mBlockChangedSignal = true;
mTextFormatWidget->setFormat( mItem->format() );
mTextFormatButton->setTextFormat( mItem->format() );
mTextEdit->setMode( mItem->format().allowHtmlFormatting() ? QgsRichTextEditor::Mode::QgsTextRenderer : QgsRichTextEditor::Mode::PlainText );
mTextEdit->setText( mItem->text() );
mPropertiesWidget->setItem( mItem.get() );
Expand Down Expand Up @@ -628,22 +608,16 @@ QgsAnnotationRectangleTextItemWidget::QgsAnnotationRectangleTextItemWidget( QWid
mSpinLeftMargin->setClearValue( 0 );
mMarginUnitWidget->setUnits( QgsUnitTypes::RenderUnitList() << Qgis::RenderUnit::Millimeters << Qgis::RenderUnit::MetersInMapUnits << Qgis::RenderUnit::MapUnits << Qgis::RenderUnit::Pixels << Qgis::RenderUnit::Points << Qgis::RenderUnit::Inches );

mTextFormatWidget = new QgsTextFormatWidget();
QVBoxLayout *vLayout = new QVBoxLayout();
vLayout->setContentsMargins( 0, 0, 0, 0 );
vLayout->addWidget( mTextFormatWidget );
mTextFormatWidgetContainer->setLayout( vLayout );
mTextFormatButton->setMode( QgsFontButton::ModeTextRenderer );

mTextEdit->setMode( QgsRichTextEditor::Mode::QgsTextRenderer );
mTextEdit->setMaximumHeight( mTextEdit->fontMetrics().height() * 10 );

mAlignmentComboBox->setAvailableAlignments( Qt::AlignLeft | Qt::AlignHCenter | Qt::AlignRight | Qt::AlignJustify );
mVerticalAlignmentComboBox->setAvailableAlignments( Qt::AlignTop | Qt::AlignVCenter | Qt::AlignBottom );

mTextFormatWidget->setDockMode( dockMode() );
connect( mTextFormatWidget, &QgsTextFormatWidget::widgetChanged, this, [this] {
connect( mTextFormatButton, &QgsFontButton::changed, this, [this] {
mTextEdit->setMode(
mTextFormatWidget->format().allowHtmlFormatting() ? QgsRichTextEditor::Mode::QgsTextRenderer : QgsRichTextEditor::Mode::PlainText
mTextFormatButton->textFormat().allowHtmlFormatting() ? QgsRichTextEditor::Mode::QgsTextRenderer : QgsRichTextEditor::Mode::PlainText
);

onWidgetChanged();
Expand Down Expand Up @@ -685,8 +659,8 @@ void QgsAnnotationRectangleTextItemWidget::updateItem( QgsAnnotationItem *item )
if ( QgsAnnotationRectangleTextItem *rectTextItem = dynamic_cast<QgsAnnotationRectangleTextItem *>( item ) )
{
mBlockChangedSignal = true;
rectTextItem->setFormat( mTextFormatWidget->format() );
rectTextItem->setText( mTextFormatWidget->format().allowHtmlFormatting() ? mTextEdit->toHtml() : mTextEdit->toPlainText() );
rectTextItem->setFormat( mTextFormatButton->textFormat() );
rectTextItem->setText( mTextFormatButton->textFormat().allowHtmlFormatting() ? mTextEdit->toHtml() : mTextEdit->toPlainText() );
rectTextItem->setAlignment( mAlignmentComboBox->currentAlignment() | mVerticalAlignmentComboBox->currentAlignment() );

rectTextItem->setPlacementMode( mSizeModeCombo->currentData().value<Qgis::AnnotationPlacementMode>() );
Expand Down Expand Up @@ -714,18 +688,14 @@ void QgsAnnotationRectangleTextItemWidget::updateItem( QgsAnnotationItem *item )
}
}

void QgsAnnotationRectangleTextItemWidget::setDockMode( bool dockMode )
{
QgsAnnotationItemBaseWidget::setDockMode( dockMode );
if ( mTextFormatWidget )
mTextFormatWidget->setDockMode( dockMode );
}

void QgsAnnotationRectangleTextItemWidget::setContext( const QgsSymbolWidgetContext &context )
{
QgsAnnotationItemBaseWidget::setContext( context );
if ( mTextFormatWidget )
mTextFormatWidget->setContext( context );
if ( mTextFormatButton )
{
mTextFormatButton->setMapCanvas( context.mapCanvas() );
mTextFormatButton->setMessageBar( context.messageBar() );
}
mBackgroundSymbolButton->setMapCanvas( context.mapCanvas() );
mBackgroundSymbolButton->setMessageBar( context.messageBar() );
mFrameSymbolButton->setMapCanvas( context.mapCanvas() );
Expand Down Expand Up @@ -760,7 +730,7 @@ bool QgsAnnotationRectangleTextItemWidget::setNewItem( QgsAnnotationItem *item )
mItem.reset( textItem->clone() );

mBlockChangedSignal = true;
mTextFormatWidget->setFormat( mItem->format() );
mTextFormatButton->setTextFormat( mItem->format() );
mTextEdit->setMode( mItem->format().allowHtmlFormatting() ? QgsRichTextEditor::Mode::QgsTextRenderer : QgsRichTextEditor::Mode::PlainText );
mTextEdit->setText( mItem->text() );
mAlignmentComboBox->setCurrentAlignment( mItem->alignment() & Qt::AlignHorizontal_Mask );
Expand Down
6 changes: 0 additions & 6 deletions src/gui/annotations/qgsannotationitemwidget_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,6 @@ class QgsAnnotationPointTextItemWidget : public QgsAnnotationItemBaseWidget, pri
~QgsAnnotationPointTextItemWidget() override;
QgsAnnotationItem *createItem() override;
void updateItem( QgsAnnotationItem *item ) override;
void setDockMode( bool dockMode ) override;
void setContext( const QgsSymbolWidgetContext &context ) override;

public slots:
Expand All @@ -134,7 +133,6 @@ class QgsAnnotationPointTextItemWidget : public QgsAnnotationItemBaseWidget, pri
private:
void mInsertExpressionButton_clicked();

QgsTextFormatWidget *mTextFormatWidget = nullptr;
bool mBlockChangedSignal = false;
std::unique_ptr<QgsAnnotationPointTextItem> mItem;
};
Expand All @@ -149,7 +147,6 @@ class QgsAnnotationRectangleTextItemWidget : public QgsAnnotationItemBaseWidget,
~QgsAnnotationRectangleTextItemWidget() override;
QgsAnnotationItem *createItem() override;
void updateItem( QgsAnnotationItem *item ) override;
void setDockMode( bool dockMode ) override;
void setContext( const QgsSymbolWidgetContext &context ) override;
QgsExpressionContext createExpressionContext() const override;

Expand All @@ -170,7 +167,6 @@ class QgsAnnotationRectangleTextItemWidget : public QgsAnnotationItemBaseWidget,
private:
void mInsertExpressionButton_clicked();

QgsTextFormatWidget *mTextFormatWidget = nullptr;
bool mBlockChangedSignal = false;
bool mUpdateItemPosition = false;

Expand All @@ -186,7 +182,6 @@ class QgsAnnotationLineTextItemWidget : public QgsAnnotationItemBaseWidget, priv
~QgsAnnotationLineTextItemWidget() override;
QgsAnnotationItem *createItem() override;
void updateItem( QgsAnnotationItem *item ) override;
void setDockMode( bool dockMode ) override;
void setContext( const QgsSymbolWidgetContext &context ) override;

public slots:
Expand All @@ -199,7 +194,6 @@ class QgsAnnotationLineTextItemWidget : public QgsAnnotationItemBaseWidget, priv
private:
void mInsertExpressionButton_clicked();

QgsTextFormatWidget *mTextFormatWidget = nullptr;
bool mBlockChangedSignal = false;
std::unique_ptr<QgsAnnotationLineTextItem> mItem;
};
Expand Down
56 changes: 39 additions & 17 deletions src/ui/annotations/qgsannotationlinetextwidgetbase.ui
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<property name="windowTitle">
<string>Point Text Annotation</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<layout class="QGridLayout" name="gridLayout" columnstretch="0,1">
<property name="leftMargin">
<number>0</number>
</property>
Expand All @@ -26,7 +26,27 @@
<property name="bottomMargin">
<number>0</number>
</property>
<item row="1" column="0">
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Text format</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QgsFontButton" name="mTextFormatButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Text format</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QToolButton" name="mInsertExpressionButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
Expand All @@ -38,17 +58,17 @@
<string>Insert/Edit Expression…</string>
</property>
<property name="popupMode">
<enum>QToolButton::ToolButtonPopupMode::MenuButtonPopup</enum>
<enum>QToolButton::MenuButtonPopup</enum>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonStyle::ToolButtonTextOnly</enum>
<enum>Qt::ToolButtonTextOnly</enum>
</property>
<property name="arrowType">
<enum>Qt::ArrowType::DownArrow</enum>
<enum>Qt::DownArrow</enum>
</property>
</widget>
</item>
<item row="0" column="0">
<item row="0" column="0" colspan="2">
<widget class="QgsRichTextEditor" name="mTextEdit" native="true">
<property name="minimumSize">
<size>
Expand All @@ -58,7 +78,7 @@
</property>
</widget>
</item>
<item row="3" column="0">
<item row="3" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Properties</string>
Expand Down Expand Up @@ -100,7 +120,7 @@
</size>
</property>
<property name="focusPolicy">
<enum>Qt::FocusPolicy::StrongFocus</enum>
<enum>Qt::StrongFocus</enum>
</property>
</widget>
</item>
Expand All @@ -116,26 +136,28 @@
</layout>
</widget>
</item>
<item row="4" column="0">
<item row="4" column="0" colspan="2">
<widget class="QgsAnnotationItemCommonPropertiesWidget" name="mPropertiesWidget" native="true"/>
</item>
<item row="2" column="0">
<widget class="QWidget" name="mTextFormatWidgetContainer" native="true"/>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>QgsDoubleSpinBox</class>
<extends>QDoubleSpinBox</extends>
<header>qgsdoublespinbox.h</header>
</customwidget>
<customwidget>
<class>QgsFontButton</class>
<extends>QToolButton</extends>
<header>qgsfontbutton.h</header>
</customwidget>
<customwidget>
<class>QgsAnnotationItemCommonPropertiesWidget</class>
<extends>QWidget</extends>
<header>qgsannotationitemcommonpropertieswidget.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>QgsDoubleSpinBox</class>
<extends>QDoubleSpinBox</extends>
<header>qgsdoublespinbox.h</header>
</customwidget>
<customwidget>
<class>QgsRichTextEditor</class>
<extends>QWidget</extends>
Expand Down
Loading

0 comments on commit 2defd04

Please sign in to comment.