QGIS API Documentation 3.43.0-Master (c67cf405802)
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:
69 QgsLayoutConfigObject( QWidget *parent SIP_TRANSFERTHIS, QgsLayoutObject *layoutObject );
70
75 void initializeDataDefinedButton( QgsPropertyOverrideButton *button, QgsLayoutObject::DataDefinedProperty key );
76
80 void updateDataDefinedButton( QgsPropertyOverrideButton *button );
81
85 QgsVectorLayer *coverageLayer() const;
86
88 QgsLayoutAtlas *layoutAtlas() const;
89
97 void setObject( QgsLayoutObject *object ) SIP_SKIP;
98
99 private slots:
101 void updateDataDefinedProperty();
102
104 void updateDataDefinedButtons();
105
106 private:
107 QPointer<QgsLayoutObject> mLayoutObject;
108};
109
120{
121 Q_OBJECT
122
123 public:
127 QgsLayoutItemBaseWidget( QWidget *parent SIP_TRANSFERTHIS, QgsLayoutObject *layoutObject );
128
132 QgsLayoutObject *layoutObject();
133
142 bool setItem( QgsLayoutItem *item );
143
150 virtual void setReportTypeString( const QString &string );
151
158 virtual void setDesignerInterface( QgsLayoutDesignerInterface *iface );
159
165 virtual void setMasterLayout( QgsMasterLayoutInterface *masterLayout );
166
167 protected:
172 void registerDataDefinedButton( QgsPropertyOverrideButton *button, QgsLayoutObject::DataDefinedProperty property );
173
177 void updateDataDefinedButton( QgsPropertyOverrideButton *button );
178
182 QgsVectorLayer *coverageLayer() const;
183
193 virtual bool setNewItem( QgsLayoutItem *item );
194
196 QgsLayoutAtlas *layoutAtlas() const;
197
198 private:
199 QgsLayoutConfigObject *mConfigObject = nullptr;
200
201 QgsLayoutObject *mObject = nullptr;
202};
203
204
211class GUI_EXPORT QgsLayoutItemPropertiesWidget : public QWidget, private Ui::QgsLayoutItemWidgetBase
212{
213 Q_OBJECT
214 public:
218 QgsLayoutItemPropertiesWidget( QWidget *parent, QgsLayoutItem *item );
219
221 QgsLayoutItem::ReferencePoint positionMode() const;
222
224 void showBackgroundGroup( bool showGroup );
225
227 void showFrameGroup( bool showGroup );
228
230 void setItem( QgsLayoutItem *item );
231
237 void setMasterLayout( QgsMasterLayoutInterface *masterLayout );
238
244 void updateVariables();
245
246 protected slots:
248 void initializeDataDefinedButtons();
250 void populateDataDefinedButtons();
251
252 private slots:
253
257 void mFrameColorButton_colorChanged( const QColor &newFrameColor );
258
262 void mBackgroundColorButton_colorChanged( const QColor &newBackgroundColor );
263 // void on_mTransparencySlider_valueChanged( int value );
264 // void on_mTransparencySpinBox_valueChanged( int value );
265 void mStrokeWidthSpinBox_valueChanged( double d );
266 void strokeUnitChanged( Qgis::LayoutUnit unit );
267 void mFrameGroupBox_toggled( bool state );
268 void mFrameJoinStyleCombo_currentIndexChanged( int index );
269 void mBackgroundGroupBox_toggled( bool state );
270 void mItemIdLineEdit_editingFinished();
271 void exportGroupNameEditingFinished();
272
273 //adjust coordinates in line edits
274 void mPageSpinBox_valueChanged( int );
275 void mXPosSpin_valueChanged( double );
276 void mYPosSpin_valueChanged( double );
277 void positionUnitsChanged( Qgis::LayoutUnit unit );
278 void mWidthSpin_valueChanged( double );
279 void mHeightSpin_valueChanged( double );
280 void sizeUnitsChanged( Qgis::LayoutUnit unit );
281
282 void mUpperLeftCheckBox_stateChanged( bool state );
283 void mUpperMiddleCheckBox_stateChanged( bool state );
284 void mUpperRightCheckBox_stateChanged( bool state );
285 void mMiddleLeftCheckBox_stateChanged( bool state );
286 void mMiddleCheckBox_stateChanged( bool state );
287 void mMiddleRightCheckBox_stateChanged( bool state );
288 void mLowerLeftCheckBox_stateChanged( bool state );
289 void mLowerMiddleCheckBox_stateChanged( bool state );
290 void mLowerRightCheckBox_stateChanged( bool state );
291
292 void mBlendModeCombo_currentIndexChanged( int index );
293 void opacityChanged( double value );
294
295 void mItemRotationSpinBox_valueChanged( double val );
296 void mExcludeFromPrintsCheckBox_toggled( bool checked );
297
298 void setValuesForGuiElements();
299 //sets the values for all position related (x, y, width, height) elements
300 void setValuesForGuiPositionElements();
301 //sets the values for all non-position related elements
302 void setValuesForGuiNonPositionElements();
303
304 void variablesChanged();
305
306 private:
307 QPointer<QgsLayoutItem> mItem;
308 QgsLayoutConfigObject *mConfigObject = nullptr;
309
310 bool mFreezeXPosSpin = false;
311 bool mFreezeYPosSpin = false;
312 bool mFreezeWidthSpin = false;
313 bool mFreezeHeightSpin = false;
314 bool mFreezePageSpin = false;
315 bool mBlockVariableUpdates = false;
316 // void changeItemTransparency( int value );
317 void changeItemPosition();
318 void changeItemReference( QgsLayoutItem::ReferencePoint point );
319 void changeItemSize();
320};
321
322
323#endif // QGSLAYOUTITEMWIDGET_H
LayoutUnit
Layout measurement units.
Definition qgis.h:5033
Used to render QgsLayout as an atlas, by iterating over the features from an associated vector layer.
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 an inline panel.
A button for controlling property overrides which may apply to a widget.
Represents a vector layer which manages a vector based dataset.
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53
#define SIP_SKIP
Definition qgis_sip.h:126