Skip to content

Commit

Permalink
Use font button in annotation widgets instead of full text format widget
Browse files Browse the repository at this point in the history
The widgets were getting very complex, this reduces the amount
of controls shown in the dock
  • Loading branch information
nyalldawson committed Jan 30, 2025
1 parent 02719c5 commit 5857e33
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 5857e33

Please sign in to comment.