From ab245b6a6a39bb1b996bf6974bac5ef7e255d3d6 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Thu, 30 Jan 2025 14:40:02 +1000 Subject: [PATCH] Use font button in annotation widgets instead of full text format widget The widgets were getting very complex, this reduces the amount of controls shown in the dock --- .../qgsannotationitemwidget_impl.cpp | 98 ++--- .../qgsannotationitemwidget_impl.h | 6 - .../qgsannotationlinetextwidgetbase.ui | 56 ++- .../qgsannotationpointtextwidgetbase.ui | 87 ++-- .../qgsannotationrectangulartextwidgetbase.ui | 382 +++++++++--------- src/ui/qgsrichtexteditorbase.ui | 4 +- 6 files changed, 338 insertions(+), 295 deletions(-) diff --git a/src/gui/annotations/qgsannotationitemwidget_impl.cpp b/src/gui/annotations/qgsannotationitemwidget_impl.cpp index e05dd7f90657..82a90e55167d 100644 --- a/src/gui/annotations/qgsannotationitemwidget_impl.cpp +++ b/src/gui/annotations/qgsannotationitemwidget_impl.cpp @@ -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 ); @@ -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 ) @@ -377,8 +371,8 @@ void QgsAnnotationPointTextItemWidget::updateItem( QgsAnnotationItem *item ) if ( QgsAnnotationPointTextItem *pointTextItem = dynamic_cast( 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() ); pointTextItem->setAlignment( mAlignmentComboBox->currentAlignment() ); @@ -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 ); } @@ -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() ); @@ -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 ) @@ -519,8 +503,8 @@ void QgsAnnotationLineTextItemWidget::updateItem( QgsAnnotationItem *item ) if ( QgsAnnotationLineTextItem *lineTextItem = dynamic_cast( 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() ); @@ -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 ); } @@ -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() ); @@ -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(); @@ -685,8 +659,8 @@ void QgsAnnotationRectangleTextItemWidget::updateItem( QgsAnnotationItem *item ) if ( QgsAnnotationRectangleTextItem *rectTextItem = dynamic_cast( 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() ); @@ -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() ); @@ -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 ); diff --git a/src/gui/annotations/qgsannotationitemwidget_impl.h b/src/gui/annotations/qgsannotationitemwidget_impl.h index 4fa3a6bdfe6b..175602f73105 100644 --- a/src/gui/annotations/qgsannotationitemwidget_impl.h +++ b/src/gui/annotations/qgsannotationitemwidget_impl.h @@ -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: @@ -134,7 +133,6 @@ class QgsAnnotationPointTextItemWidget : public QgsAnnotationItemBaseWidget, pri private: void mInsertExpressionButton_clicked(); - QgsTextFormatWidget *mTextFormatWidget = nullptr; bool mBlockChangedSignal = false; std::unique_ptr mItem; }; @@ -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; @@ -170,7 +167,6 @@ class QgsAnnotationRectangleTextItemWidget : public QgsAnnotationItemBaseWidget, private: void mInsertExpressionButton_clicked(); - QgsTextFormatWidget *mTextFormatWidget = nullptr; bool mBlockChangedSignal = false; bool mUpdateItemPosition = false; @@ -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: @@ -199,7 +194,6 @@ class QgsAnnotationLineTextItemWidget : public QgsAnnotationItemBaseWidget, priv private: void mInsertExpressionButton_clicked(); - QgsTextFormatWidget *mTextFormatWidget = nullptr; bool mBlockChangedSignal = false; std::unique_ptr mItem; }; diff --git a/src/ui/annotations/qgsannotationlinetextwidgetbase.ui b/src/ui/annotations/qgsannotationlinetextwidgetbase.ui index 49bc5e5b3914..7b085b40774d 100644 --- a/src/ui/annotations/qgsannotationlinetextwidgetbase.ui +++ b/src/ui/annotations/qgsannotationlinetextwidgetbase.ui @@ -13,7 +13,7 @@ Point Text Annotation - + 0 @@ -26,7 +26,27 @@ 0 - + + + + Text format + + + + + + + + 0 + 0 + + + + Text format + + + + @@ -38,17 +58,17 @@ Insert/Edit Expression… - QToolButton::ToolButtonPopupMode::MenuButtonPopup + QToolButton::MenuButtonPopup - Qt::ToolButtonStyle::ToolButtonTextOnly + Qt::ToolButtonTextOnly - Qt::ArrowType::DownArrow + Qt::DownArrow - + @@ -58,7 +78,7 @@ - + Properties @@ -100,7 +120,7 @@ - Qt::FocusPolicy::StrongFocus + Qt::StrongFocus @@ -116,26 +136,28 @@ - + - - - + + QgsDoubleSpinBox + QDoubleSpinBox +
qgsdoublespinbox.h
+
+ + QgsFontButton + QToolButton +
qgsfontbutton.h
+
QgsAnnotationItemCommonPropertiesWidget QWidget
qgsannotationitemcommonpropertieswidget.h
1
- - QgsDoubleSpinBox - QDoubleSpinBox -
qgsdoublespinbox.h
-
QgsRichTextEditor QWidget diff --git a/src/ui/annotations/qgsannotationpointtextwidgetbase.ui b/src/ui/annotations/qgsannotationpointtextwidgetbase.ui index 2bd54142f364..b3285951679a 100644 --- a/src/ui/annotations/qgsannotationpointtextwidgetbase.ui +++ b/src/ui/annotations/qgsannotationpointtextwidgetbase.ui @@ -13,7 +13,7 @@ Point Text Annotation - + 0 @@ -26,11 +26,14 @@ 0 - - - + + + 0 + 0 + + Rotation @@ -70,16 +73,13 @@ - - - - - - - - 0 - 150 - + + + + + 0 + 0 + @@ -95,45 +95,80 @@ Insert/Edit Expression… - QToolButton::ToolButtonPopupMode::MenuButtonPopup + QToolButton::MenuButtonPopup - Qt::ToolButtonStyle::ToolButtonTextOnly + Qt::ToolButtonTextOnly - Qt::ArrowType::DownArrow + Qt::DownArrow - + + + + Alignment + + + + + + + + + 0 + 0 + + + + Text format + + + + + + + + 0 + 2 + + + + - + - Alignment + Text format - - QgsAnnotationItemCommonPropertiesWidget - QWidget -
qgsannotationitemcommonpropertieswidget.h
- 1 -
QgsDoubleSpinBox QDoubleSpinBox
qgsdoublespinbox.h
+ + QgsFontButton + QToolButton +
qgsfontbutton.h
+
QgsAlignmentComboBox QComboBox
qgsalignmentcombobox.h
+ + QgsAnnotationItemCommonPropertiesWidget + QWidget +
qgsannotationitemcommonpropertieswidget.h
+ 1 +
QgsRichTextEditor QWidget diff --git a/src/ui/annotations/qgsannotationrectangulartextwidgetbase.ui b/src/ui/annotations/qgsannotationrectangulartextwidgetbase.ui index aafa452027e2..338856556832 100644 --- a/src/ui/annotations/qgsannotationrectangulartextwidgetbase.ui +++ b/src/ui/annotations/qgsannotationrectangulartextwidgetbase.ui @@ -7,7 +7,7 @@ 0 0 321 - 716 + 779 @@ -23,13 +23,67 @@ 0 - - - - - 0 - 150 - + + + + Frame + + + true + + + + + + Symbol + + + + + + + + 0 + 0 + + + + Change… + + + + + + + + + + + + + Vertical alignment + + + + + + + + 0 + 0 + + + + Insert/Edit Expression… + + + QToolButton::MenuButtonPopup + + + Qt::ToolButtonTextOnly + + + Qt::DownArrow @@ -65,19 +119,119 @@ - - + + + + + + + + + + Horizontal alignment + + + + + + + + + + Width + + + + + + + + 0 + 0 + + + + 6 + + + 100000.000000000000000 + + + 0.200000000000000 + + + 1.000000000000000 + + + false + + + + + + + Height + + + + + + + + 0 + 0 + + + + 6 + + + 100000.000000000000000 + + + 0.200000000000000 + + + 1.000000000000000 + + + false + + + + + + + Unit + + + + + + + + 0 + 0 + + + + Qt::StrongFocus + + + + + + + + 0 - 0 + 150 - - - @@ -247,209 +401,77 @@ - - - - Vertical alignment - - - - + - Horizontal alignment + Text format - - - - - - - - - - Frame - - - true - - - - - - Symbol - - - - - - - - 0 - 0 - - - - Change… - - - - - - - - - - - - - Width - - - - - - - - 0 - 0 - - - - 6 - - - 100000.000000000000000 - - - 0.200000000000000 - - - 1.000000000000000 - - - false - - - - - - - Height - - - - - - - - 0 - 0 - - - - 6 - - - 100000.000000000000000 - - - 0.200000000000000 - - - 1.000000000000000 - - - false - - - - - - - Unit - - - - - - - - 0 - 0 - - - - Qt::StrongFocus - - - - - - - - - - + - + 0 0 - Insert/Edit Expression… - - - QToolButton::MenuButtonPopup - - - Qt::ToolButtonTextOnly + Text format - - Qt::DownArrow + + + + + + + 0 + 0 + - - QgsAnnotationItemCommonPropertiesWidget - QWidget -
qgsannotationitemcommonpropertieswidget.h
- 1 -
- - QgsSymbolButton - QToolButton -
qgssymbolbutton.h
-
QgsDoubleSpinBox QDoubleSpinBox
qgsdoublespinbox.h
- QgsUnitSelectionWidget - QWidget -
qgsunitselectionwidget.h
- 1 + QgsFontButton + QToolButton +
qgsfontbutton.h
QgsAlignmentComboBox QComboBox
qgsalignmentcombobox.h
+ + QgsAnnotationItemCommonPropertiesWidget + QWidget +
qgsannotationitemcommonpropertieswidget.h
+ 1 +
QgsRichTextEditor QWidget
qgsrichtexteditor.h
1
+ + QgsSymbolButton + QToolButton +
qgssymbolbutton.h
+
+ + QgsUnitSelectionWidget + QWidget +
qgsunitselectionwidget.h
+ 1 +
QgsCollapsibleGroupBox QGroupBox diff --git a/src/ui/qgsrichtexteditorbase.ui b/src/ui/qgsrichtexteditorbase.ui index 06573732ad7c..b0e9f7dc58a1 100644 --- a/src/ui/qgsrichtexteditorbase.ui +++ b/src/ui/qgsrichtexteditorbase.ui @@ -7,7 +7,7 @@ 0 0 846 - 312 + 705
@@ -51,7 +51,7 @@ - QTextEdit::AutoFormattingFlag::AutoNone + QTextEdit::AutoNone true