QGIS API Documentation 3.41.0-Master (af5edcb665c)
Loading...
Searching...
No Matches
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
61class GUI_EXPORT QgsLayoutConfigObject : public QObject
62{
63 Q_OBJECT
64 public:
68 QgsLayoutConfigObject( QWidget *parent SIP_TRANSFERTHIS, QgsLayoutObject *layoutObject );
69
74 void initializeDataDefinedButton( QgsPropertyOverrideButton *button, QgsLayoutObject::DataDefinedProperty key );
75
79 void updateDataDefinedButton( QgsPropertyOverrideButton *button );
80
84 QgsVectorLayer *coverageLayer() const;
85
87 QgsLayoutAtlas *layoutAtlas() const;
88
96 void setObject( QgsLayoutObject *object ) SIP_SKIP;
97
98 private slots:
100 void updateDataDefinedProperty();
101
103 void updateDataDefinedButtons();
104
105 private:
106 QPointer<QgsLayoutObject> mLayoutObject;
107};
108
119{
120 Q_OBJECT
121
122 public:
126 QgsLayoutItemBaseWidget( QWidget *parent SIP_TRANSFERTHIS, QgsLayoutObject *layoutObject );
127
131 QgsLayoutObject *layoutObject();
132
141 bool setItem( QgsLayoutItem *item );
142
149 virtual void setReportTypeString( const QString &string );
150
157 virtual void setDesignerInterface( QgsLayoutDesignerInterface *iface );
158
164 virtual void setMasterLayout( QgsMasterLayoutInterface *masterLayout );
165
166 protected:
171 void registerDataDefinedButton( QgsPropertyOverrideButton *button, QgsLayoutObject::DataDefinedProperty property );
172
176 void updateDataDefinedButton( QgsPropertyOverrideButton *button );
177
181 QgsVectorLayer *coverageLayer() const;
182
192 virtual bool setNewItem( QgsLayoutItem *item );
193
195 QgsLayoutAtlas *layoutAtlas() const;
196
197 private:
198 QgsLayoutConfigObject *mConfigObject = nullptr;
199
200 QgsLayoutObject *mObject = nullptr;
201};
202
203
210class GUI_EXPORT QgsLayoutItemPropertiesWidget : public QWidget, private Ui::QgsLayoutItemWidgetBase
211{
212 Q_OBJECT
213 public:
217 QgsLayoutItemPropertiesWidget( QWidget *parent, QgsLayoutItem *item );
218
220 QgsLayoutItem::ReferencePoint positionMode() const;
221
223 void showBackgroundGroup( bool showGroup );
224
226 void showFrameGroup( bool showGroup );
227
229 void setItem( QgsLayoutItem *item );
230
236 void setMasterLayout( QgsMasterLayoutInterface *masterLayout );
237
243 void updateVariables();
244
245 protected slots:
247 void initializeDataDefinedButtons();
249 void populateDataDefinedButtons();
250
251 private slots:
252
256 void mFrameColorButton_colorChanged( const QColor &newFrameColor );
257
261 void mBackgroundColorButton_colorChanged( const QColor &newBackgroundColor );
262 // void on_mTransparencySlider_valueChanged( int value );
263 // void on_mTransparencySpinBox_valueChanged( int value );
264 void mStrokeWidthSpinBox_valueChanged( double d );
265 void strokeUnitChanged( Qgis::LayoutUnit unit );
266 void mFrameGroupBox_toggled( bool state );
267 void mFrameJoinStyleCombo_currentIndexChanged( int index );
268 void mBackgroundGroupBox_toggled( bool state );
269 void mItemIdLineEdit_editingFinished();
270 void exportGroupNameEditingFinished();
271
272 //adjust coordinates in line edits
273 void mPageSpinBox_valueChanged( int );
274 void mXPosSpin_valueChanged( double );
275 void mYPosSpin_valueChanged( double );
276 void positionUnitsChanged( Qgis::LayoutUnit unit );
277 void mWidthSpin_valueChanged( double );
278 void mHeightSpin_valueChanged( double );
279 void sizeUnitsChanged( Qgis::LayoutUnit unit );
280
281 void mUpperLeftCheckBox_stateChanged( bool state );
282 void mUpperMiddleCheckBox_stateChanged( bool state );
283 void mUpperRightCheckBox_stateChanged( bool state );
284 void mMiddleLeftCheckBox_stateChanged( bool state );
285 void mMiddleCheckBox_stateChanged( bool state );
286 void mMiddleRightCheckBox_stateChanged( bool state );
287 void mLowerLeftCheckBox_stateChanged( bool state );
288 void mLowerMiddleCheckBox_stateChanged( bool state );
289 void mLowerRightCheckBox_stateChanged( bool state );
290
291 void mBlendModeCombo_currentIndexChanged( int index );
292 void opacityChanged( double value );
293
294 void mItemRotationSpinBox_valueChanged( double val );
295 void mExcludeFromPrintsCheckBox_toggled( bool checked );
296
297 void setValuesForGuiElements();
298 //sets the values for all position related (x, y, width, height) elements
299 void setValuesForGuiPositionElements();
300 //sets the values for all non-position related elements
301 void setValuesForGuiNonPositionElements();
302
303 void variablesChanged();
304
305 private:
306 QPointer<QgsLayoutItem> mItem;
307 QgsLayoutConfigObject *mConfigObject = nullptr;
308
309 bool mFreezeXPosSpin = false;
310 bool mFreezeYPosSpin = false;
311 bool mFreezeWidthSpin = false;
312 bool mFreezeHeightSpin = false;
313 bool mFreezePageSpin = false;
314 bool mBlockVariableUpdates = false;
315 // void changeItemTransparency( int value );
316 void changeItemPosition();
317 void changeItemReference( QgsLayoutItem::ReferencePoint point );
318 void changeItemSize();
319};
320
321
322#endif // QGSLAYOUTITEMWIDGET_H
LayoutUnit
Layout measurement units.
Definition qgis.h:4930
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.
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