QGIS API Documentation 3.28.0-Firenze (ed3ad0430f)
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
28class 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
62class 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
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
217class 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
Class used to render QgsLayout as an atlas, by iterating over the features from an associated vector ...
An object for property widgets for layout items.
A common interface for layout designer dialogs and widgets.
A base class for property widgets for layout items.
A widget for controlling the common properties of layout items (e.g.
Base class for graphical items within a QgsLayout.
ReferencePoint
Fixed position reference point.
A base class for objects which belong to a layout.
DataDefinedProperty
Data defined properties for different item types.
Interface for master layout type objects, such as print layouts and reports.
Base class for any widget that can be shown as a inline panel.
A button for controlling property overrides which may apply to a widget.
LayoutUnit
Layout measurement units.
Definition: qgsunittypes.h:182
Represents a vector layer which manages a vector based data sets.
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
#define SIP_SKIP
Definition: qgis_sip.h:126