Skip to content

Commit 8e18629

Browse files
committedSep 7, 2021
Implement annotation item widget for point text annotation items
1 parent ac4d252 commit 8e18629

File tree

6 files changed

+165
-0
lines changed

6 files changed

+165
-0
lines changed
 

‎src/gui/annotations/qgsannotationitemguiregistry.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,16 @@ void QgsAnnotationItemGuiRegistry::addDefaultItems()
153153
widget->setItem( item );
154154
return widget;
155155
} ) );
156+
157+
addAnnotationItemGuiMetadata( new QgsAnnotationItemGuiMetadata( QStringLiteral( "pointtext" ),
158+
QObject::tr( "Text at Point" ),
159+
QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddImage.svg" ) ),
160+
[ = ]( QgsAnnotationItem * item )->QgsAnnotationItemBaseWidget *
161+
{
162+
QgsAnnotationPointTextItemWidget *widget = new QgsAnnotationPointTextItemWidget( nullptr );
163+
widget->setItem( item );
164+
return widget;
165+
} ) );
156166
}
157167

158168
QgsAnnotationItem *QgsAnnotationItemGuiMetadata::createItem()

‎src/gui/annotations/qgsannotationitemwidget_impl.cpp

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
#include "qgsannotationpolygonitem.h"
2323
#include "qgsannotationlineitem.h"
2424
#include "qgsannotationmarkeritem.h"
25+
#include "qgsannotationpointtextitem.h"
26+
#include "qgstextformatwidget.h"
2527

2628
///@cond PRIVATE
2729

@@ -206,5 +208,71 @@ bool QgsAnnotationMarkerItemWidget::setNewItem( QgsAnnotationItem *item )
206208
return true;
207209
}
208210

211+
212+
213+
//
214+
// QgsAnnotationPointTextItemWidget
215+
//
216+
217+
QgsAnnotationPointTextItemWidget::QgsAnnotationPointTextItemWidget( QWidget *parent )
218+
: QgsAnnotationItemBaseWidget( parent )
219+
{
220+
setupUi( this );
221+
222+
mTextFormatWidget = new QgsTextFormatWidget();
223+
QVBoxLayout *vLayout = new QVBoxLayout();
224+
vLayout->setContentsMargins( 0, 0, 0, 0 );
225+
vLayout->addWidget( mTextFormatWidget );
226+
mTextFormatWidgetContainer->setLayout( vLayout );
227+
228+
mTextEdit->setMaximumHeight( mTextEdit->fontMetrics().height() * 10 );
229+
230+
mTextFormatWidget->setDockMode( dockMode() );
231+
connect( mTextFormatWidget, &QgsTextFormatWidget::widgetChanged, this, [ = ]
232+
{
233+
if ( !mBlockChangedSignal )
234+
emit itemChanged();
235+
} );
236+
connect( mTextEdit, &QPlainTextEdit::textChanged, this, [ = ]
237+
{
238+
if ( !mBlockChangedSignal )
239+
emit itemChanged();
240+
} );
241+
242+
}
243+
244+
QgsAnnotationItem *QgsAnnotationPointTextItemWidget::createItem()
245+
{
246+
QgsAnnotationPointTextItem *newItem = mItem->clone();
247+
newItem->setFormat( mTextFormatWidget->format() );
248+
newItem->setText( mTextEdit->toPlainText() );
249+
return newItem;
250+
}
251+
252+
void QgsAnnotationPointTextItemWidget::setDockMode( bool dockMode )
253+
{
254+
QgsAnnotationItemBaseWidget::setDockMode( dockMode );
255+
if ( mTextFormatWidget )
256+
mTextFormatWidget->setDockMode( dockMode );
257+
}
258+
259+
QgsAnnotationPointTextItemWidget::~QgsAnnotationPointTextItemWidget() = default;
260+
261+
bool QgsAnnotationPointTextItemWidget::setNewItem( QgsAnnotationItem *item )
262+
{
263+
QgsAnnotationPointTextItem *textItem = dynamic_cast< QgsAnnotationPointTextItem * >( item );
264+
if ( !textItem )
265+
return false;
266+
267+
mItem.reset( textItem->clone() );
268+
269+
mBlockChangedSignal = true;
270+
mTextFormatWidget->setFormat( mItem->format() );
271+
mTextEdit->setPlainText( mItem->text() );
272+
mBlockChangedSignal = false;
273+
274+
return true;
275+
}
276+
209277
///@endcond PRIVATE
210278

‎src/gui/annotations/qgsannotationitemwidget_impl.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,20 @@
1818
#include "qgsannotationitemwidget.h"
1919
#include "qgis_sip.h"
2020
#include "qgis_gui.h"
21+
#include "qgstextformat.h"
2122
#include <memory>
2223

24+
#include "ui_qgsannotationpointtextwidgetbase.h"
25+
2326
class QgsSymbolSelectorWidget;
2427
class QgsFillSymbol;
2528
class QgsLineSymbol;
2629
class QgsMarkerSymbol;
2730
class QgsAnnotationPolygonItem;
2831
class QgsAnnotationLineItem;
2932
class QgsAnnotationMarkerItem;
33+
class QgsAnnotationPointTextItem;
34+
class QgsTextFormatWidget;
3035

3136
#define SIP_NO_FILE
3237

@@ -95,6 +100,27 @@ class QgsAnnotationMarkerItemWidget : public QgsAnnotationItemBaseWidget
95100
std::unique_ptr< QgsAnnotationMarkerItem> mItem;
96101
};
97102

103+
104+
class QgsAnnotationPointTextItemWidget : public QgsAnnotationItemBaseWidget, private Ui_QgsAnnotationPointTextWidgetBase
105+
{
106+
Q_OBJECT
107+
108+
public:
109+
QgsAnnotationPointTextItemWidget( QWidget *parent );
110+
~QgsAnnotationPointTextItemWidget() override;
111+
QgsAnnotationItem *createItem() override;
112+
void setDockMode( bool dockMode ) override;
113+
114+
protected:
115+
bool setNewItem( QgsAnnotationItem *item ) override;
116+
117+
private:
118+
119+
QgsTextFormatWidget *mTextFormatWidget = nullptr;
120+
bool mBlockChangedSignal = false;
121+
std::unique_ptr< QgsAnnotationPointTextItem> mItem;
122+
};
123+
98124
///@endcond
99125

100126
#endif // QGSANNOTATIONITEMWIDGETIMPL_H

‎src/ui/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ file(GLOB CALLOUT_UIS "${CMAKE_CURRENT_SOURCE_DIR}/callouts/*.ui")
1616
file(GLOB NUMERICFORMAT_UIS "${CMAKE_CURRENT_SOURCE_DIR}/numericformats/*.ui")
1717
file(GLOB ATTRIBUTEFORMCONFIG_UIS "${CMAKE_CURRENT_SOURCE_DIR}/attributeformconfig/*.ui")
1818
file(GLOB GEOREFERENCER_UIS "${CMAKE_CURRENT_SOURCE_DIR}/georeferencer/*.ui")
19+
file(GLOB ANNOTATION_UIS "${CMAKE_CURRENT_SOURCE_DIR}/annotations/*.ui")
1920

2021
if (WITH_QT6)
2122
QT6_WRAP_UI(QGIS_UIS_H
@@ -36,6 +37,7 @@ if (WITH_QT6)
3637
${NUMERICFORMAT_UIS}
3738
${ATTRIBUTEFORMCONFIG_UIS}
3839
${GEOREFERENCER_UIS}
40+
${ANNOTATION_UIS}
3941
)
4042
else()
4143
QT5_WRAP_UI(QGIS_UIS_H
@@ -56,6 +58,7 @@ else()
5658
${NUMERICFORMAT_UIS}
5759
${ATTRIBUTEFORMCONFIG_UIS}
5860
${GEOREFERENCER_UIS}
61+
${ANNOTATION_UIS}
5962
)
6063
endif()
6164

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>QgsAnnotationPointTextWidgetBase</class>
4+
<widget class="QWidget" name="QgsAnnotationPointTextWidgetBase">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>321</width>
10+
<height>278</height>
11+
</rect>
12+
</property>
13+
<property name="windowTitle">
14+
<string>Point Text Annotation</string>
15+
</property>
16+
<layout class="QGridLayout" name="gridLayout">
17+
<property name="leftMargin">
18+
<number>0</number>
19+
</property>
20+
<property name="topMargin">
21+
<number>0</number>
22+
</property>
23+
<property name="rightMargin">
24+
<number>0</number>
25+
</property>
26+
<property name="bottomMargin">
27+
<number>0</number>
28+
</property>
29+
<item row="0" column="0">
30+
<widget class="QPlainTextEdit" name="mTextEdit">
31+
<property name="minimumSize">
32+
<size>
33+
<width>0</width>
34+
<height>150</height>
35+
</size>
36+
</property>
37+
</widget>
38+
</item>
39+
<item row="1" column="0">
40+
<widget class="QWidget" name="mTextFormatWidgetContainer" native="true"/>
41+
</item>
42+
</layout>
43+
</widget>
44+
<resources/>
45+
<connections/>
46+
</ui>

‎src/ui/qgstextformatwidgetbase.ui

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,18 @@
1414
<string>Layer Labeling Settings</string>
1515
</property>
1616
<layout class="QGridLayout" name="gridLayout_8">
17+
<property name="leftMargin">
18+
<number>0</number>
19+
</property>
20+
<property name="topMargin">
21+
<number>0</number>
22+
</property>
23+
<property name="rightMargin">
24+
<number>0</number>
25+
</property>
26+
<property name="bottomMargin">
27+
<number>0</number>
28+
</property>
1729
<item row="1" column="0">
1830
<widget class="QFrame" name="mLabelingFrame">
1931
<property name="minimumSize">

0 commit comments

Comments
 (0)
Please sign in to comment.