QGIS API Documentation  3.26.3-Buenos Aires (65e4edfdad)
qgslayoutitemwidget.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgslayoutitemwidget.h
3  ------------------------
4  Date : July 2017
5  Copyright : (C) 2017 Nyall Dawson
6  Email : nyall dot dawson at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 #ifndef QGSLAYOUTITEMWIDGET_H
16 #define QGSLAYOUTITEMWIDGET_H
17 
18 #include "qgis_gui.h"
19 #include "qgslayoutobject.h"
20 #include "qgspanelwidget.h"
21 #include "qgslayoutitem.h"
22 #include "ui_qgslayoutitemwidgetbase.h"
23 #include <QObject>
24 #include <QPointer>
25 
28 class QgsLayoutAtlas;
30 
31 // NOTE - the inheritance here is tricky, as we need to avoid the multiple inheritance
32 // diamond problem and the ideal base object (QgsLayoutConfigObject) MUST be a QObject
33 // because of its slots.
34 
35 // So here we go:
36 // QgsLayoutItemWidget is just a QWidget which is embedded inside specific item property
37 // widgets and contains common settings like position and rotation of the items. While the
38 // actual individual item type widgets MUST be QgsPanelWidgets unfortunately QgsLayoutItemWidget
39 // CANNOT be a QgsPanelWidget and must instead be a generic QWidget (otherwise a QgsPanelWidget
40 // contains a child QgsPanelWidget, which breaks lots of assumptions made in QgsPanelWidget
41 // and related classes).
42 // So QgsLayoutItemWidget HAS a QgsLayoutConfigObject to handle these common tasks.
43 // Specific item property widgets (e.g., QgsLayoutMapWidget) should inherit from QgsLayoutItemBaseWidget
44 // (which is a QgsPanelWidget) and also HAS a QgsLayoutConfigObject, with protected methods
45 // which are just proxied through to the QgsLayoutConfigObject.
46 // phew!
47 // long story short - don't change this without good reason. If you add a new item type, inherit
48 // from QgsLayoutItemBaseWidget and trust that everything else has been done for you.
49 
62 class GUI_EXPORT QgsLayoutConfigObject: public QObject
63 {
64  Q_OBJECT
65  public:
66 
70  QgsLayoutConfigObject( QWidget *parent SIP_TRANSFERTHIS, QgsLayoutObject *layoutObject );
71 
76  void initializeDataDefinedButton( QgsPropertyOverrideButton *button, QgsLayoutObject::DataDefinedProperty key );
77 
81  void updateDataDefinedButton( QgsPropertyOverrideButton *button );
82 
86  QgsVectorLayer *coverageLayer() const;
87 
89  QgsLayoutAtlas *layoutAtlas() const;
90 
98  void setObject( QgsLayoutObject *object ) SIP_SKIP;
99 
100  private slots:
102  void updateDataDefinedProperty();
103 
105  void updateDataDefinedButtons();
106 
107  private:
108 
109  QPointer< QgsLayoutObject > mLayoutObject;
110 };
111 
122 class GUI_EXPORT QgsLayoutItemBaseWidget: public QgsPanelWidget
123 {
124  Q_OBJECT
125 
126  public:
127 
131  QgsLayoutItemBaseWidget( QWidget *parent SIP_TRANSFERTHIS, QgsLayoutObject *layoutObject );
132 
136  QgsLayoutObject *layoutObject();
137 
146  bool setItem( QgsLayoutItem *item );
147 
154  virtual void setReportTypeString( const QString &string );
155 
162  virtual void setDesignerInterface( QgsLayoutDesignerInterface *iface );
163 
169  virtual void setMasterLayout( QgsMasterLayoutInterface *masterLayout );
170 
171  protected:
172 
177  void registerDataDefinedButton( QgsPropertyOverrideButton *button, QgsLayoutObject::DataDefinedProperty property );
178 
182  void updateDataDefinedButton( QgsPropertyOverrideButton *button );
183 
187  QgsVectorLayer *coverageLayer() const;
188 
198  virtual bool setNewItem( QgsLayoutItem *item );
199 
201  QgsLayoutAtlas *layoutAtlas() const;
202 
203  private:
204  QgsLayoutConfigObject *mConfigObject = nullptr;
205 
206  QgsLayoutObject *mObject = nullptr;
207 };
208 
209 
217 class GUI_EXPORT QgsLayoutItemPropertiesWidget: public QWidget, private Ui::QgsLayoutItemWidgetBase
218 {
219  Q_OBJECT
220  public:
221 
225  QgsLayoutItemPropertiesWidget( QWidget *parent, QgsLayoutItem *item );
226 
228  QgsLayoutItem::ReferencePoint positionMode() const;
229 
231  void showBackgroundGroup( bool showGroup );
232 
234  void showFrameGroup( bool showGroup );
235 
237  void setItem( QgsLayoutItem *item );
238 
244  void setMasterLayout( QgsMasterLayoutInterface *masterLayout );
245 
251  void updateVariables();
252 
253  protected slots:
255  void initializeDataDefinedButtons();
257  void populateDataDefinedButtons();
258 
259  private slots:
260 
264  void mFrameColorButton_colorChanged( const QColor &newFrameColor );
265 
269  void mBackgroundColorButton_colorChanged( const QColor &newBackgroundColor );
270 // void on_mTransparencySlider_valueChanged( int value );
271 // void on_mTransparencySpinBox_valueChanged( int value );
272  void mStrokeWidthSpinBox_valueChanged( double d );
273  void strokeUnitChanged( QgsUnitTypes::LayoutUnit unit );
274  void mFrameGroupBox_toggled( bool state );
275  void mFrameJoinStyleCombo_currentIndexChanged( int index );
276  void mBackgroundGroupBox_toggled( bool state );
277  void mItemIdLineEdit_editingFinished();
278 
279  //adjust coordinates in line edits
280  void mPageSpinBox_valueChanged( int );
281  void mXPosSpin_valueChanged( double );
282  void mYPosSpin_valueChanged( double );
283  void positionUnitsChanged( QgsUnitTypes::LayoutUnit unit );
284  void mWidthSpin_valueChanged( double );
285  void mHeightSpin_valueChanged( double );
286  void sizeUnitsChanged( QgsUnitTypes::LayoutUnit unit );
287 
288  void mUpperLeftCheckBox_stateChanged( bool state );
289  void mUpperMiddleCheckBox_stateChanged( bool state );
290  void mUpperRightCheckBox_stateChanged( bool state );
291  void mMiddleLeftCheckBox_stateChanged( bool state );
292  void mMiddleCheckBox_stateChanged( bool state );
293  void mMiddleRightCheckBox_stateChanged( bool state );
294  void mLowerLeftCheckBox_stateChanged( bool state );
295  void mLowerMiddleCheckBox_stateChanged( bool state );
296  void mLowerRightCheckBox_stateChanged( bool state );
297 
298  void mBlendModeCombo_currentIndexChanged( int index );
299  void opacityChanged( double value );
300 
301  void mItemRotationSpinBox_valueChanged( double val );
302  void mExcludeFromPrintsCheckBox_toggled( bool checked );
303 
304  void setValuesForGuiElements();
305  //sets the values for all position related (x, y, width, height) elements
306  void setValuesForGuiPositionElements();
307  //sets the values for all non-position related elements
308  void setValuesForGuiNonPositionElements();
309 
310  void variablesChanged();
311 
312  private:
313 
314  QPointer< QgsLayoutItem > mItem;
315  QgsLayoutConfigObject *mConfigObject = nullptr;
316 
317  bool mFreezeXPosSpin = false;
318  bool mFreezeYPosSpin = false;
319  bool mFreezeWidthSpin = false;
320  bool mFreezeHeightSpin = false;
321  bool mFreezePageSpin = false;
322  bool mBlockVariableUpdates = false;
323 // void changeItemTransparency( int value );
324  void changeItemPosition();
325  void changeItemReference( QgsLayoutItem::ReferencePoint point );
326  void changeItemSize();
327 
328 };
329 
330 
331 #endif // QGSLAYOUTITEMWIDGET_H
QgsUnitTypes::LayoutUnit
LayoutUnit
Layout measurement units.
Definition: qgsunittypes.h:181
QgsLayoutItem::ReferencePoint
ReferencePoint
Fixed position reference point.
Definition: qgslayoutitem.h:201
QgsLayoutItemPropertiesWidget
A widget for controlling the common properties of layout items (e.g. position and size,...
Definition: qgslayoutitemwidget.h:217
QgsPropertyOverrideButton
A button for controlling property overrides which may apply to a widget.
Definition: qgspropertyoverridebutton.h:50
SIP_SKIP
#define SIP_SKIP
Definition: qgis_sip.h:126
QgsPanelWidget
Base class for any widget that can be shown as a inline panel.
Definition: qgspanelwidget.h:29
qgslayoutitem.h
QgsLayoutItem
Base class for graphical items within a QgsLayout.
Definition: qgslayoutitem.h:112
QgsLayoutItemBaseWidget
A base class for property widgets for layout items. All layout item widgets should inherit from this ...
Definition: qgslayoutitemwidget.h:122
QgsVectorLayer
Represents a vector layer which manages a vector based data sets.
Definition: qgsvectorlayer.h:391
QgsLayoutDesignerInterface
A common interface for layout designer dialogs and widgets.
Definition: qgslayoutdesignerinterface.h:55
qgslayoutobject.h
QgsMasterLayoutInterface
Interface for master layout type objects, such as print layouts and reports.
Definition: qgsmasterlayoutinterface.h:42
qgspanelwidget.h
SIP_TRANSFERTHIS
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
QgsLayoutAtlas
Class used to render QgsLayout as an atlas, by iterating over the features from an associated vector ...
Definition: qgslayoutatlas.h:41
QgsLayoutConfigObject
An object for property widgets for layout items. All layout config type widgets should contain this o...
Definition: qgslayoutitemwidget.h:62
QgsLayoutObject::DataDefinedProperty
DataDefinedProperty
Data defined properties for different item types.
Definition: qgslayoutobject.h:132
QgsLayoutObject
A base class for objects which belong to a layout.
Definition: qgslayoutobject.h:39