QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgslayoutlegendwidget.h
Go to the documentation of this file.
1/***************************************************************************
2 qgslayoutlegendwidget.h
3 -----------------------
4 begin : October 2017
5 copyright : (C) 2017 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#ifndef QGSLAYOUTLEGENDWIDGET_H
19#define QGSLAYOUTLEGENDWIDGET_H
20
21// We don't want to expose this in the public API
22#define SIP_NO_FILE
23
24#include "qgis_gui.h"
25#include "ui_qgslayoutlegendwidgetbase.h"
26#include "ui_qgslayoutlegendmapfilteringwidgetbase.h"
27#include "qgslayoutitemwidget.h"
28#include "qgslayoutitemlegend.h"
29#include <QWidget>
30#include <QItemDelegate>
31
32class QgsLayoutLegendMapFilteringWidget;
33
35
43class GUI_EXPORT QgsLayoutLegendWidget: public QgsLayoutItemBaseWidget, public QgsExpressionContextGenerator, private Ui::QgsLayoutLegendWidgetBase
44{
45 Q_OBJECT
46
47 public:
49 explicit QgsLayoutLegendWidget( QgsLayoutItemLegend *legend, QgsMapCanvas *mapCanvas );
50 void setMasterLayout( QgsMasterLayoutInterface *masterLayout ) override;
53 void updateLegend();
54
56 QgsLayoutItemLegend *legend() { return mLegend; }
57 void setReportTypeString( const QString &string ) override;
59 public slots:
61 void resetLayerNodeToDefaults();
62
67 void setCurrentNodeStyleFromAction();
68
69 protected:
70
71 bool setNewItem( QgsLayoutItem *item ) override;
72
73 private slots:
74
75 void mWrapCharLineEdit_textChanged( const QString &text );
76 void mTitleLineEdit_textChanged( const QString &text );
77 void mColumnCountSpinBox_valueChanged( int c );
78 void mSplitLayerCheckBox_toggled( bool checked );
79 void mEqualColumnWidthCheckBox_toggled( bool checked );
80 void mSymbolWidthSpinBox_valueChanged( double d );
81 void mSymbolHeightSpinBox_valueChanged( double d );
82 void mMaxSymbolSizeSpinBox_valueChanged( double d );
83 void mMinSymbolSizeSpinBox_valueChanged( double d );
84 void mWmsLegendWidthSpinBox_valueChanged( double d );
85 void mWmsLegendHeightSpinBox_valueChanged( double d );
86 void mTitleSpaceBottomSpinBox_valueChanged( double d );
87 void mGroupSpaceSpinBox_valueChanged( double d );
88 void mGroupIndentSpinBox_valueChanged( double d );
89 void mSubgroupIndentSpinBox_valueChanged( double d );
90 void mLayerSpaceSpinBox_valueChanged( double d );
91 void mSymbolSpaceSpinBox_valueChanged( double d );
92 void mIconLabelSpaceSpinBox_valueChanged( double d );
93 void mBoxSpaceSpinBox_valueChanged( double d );
94 void mColumnSpaceSpinBox_valueChanged( double d );
95 void mCheckBoxAutoUpdate_stateChanged( int state, bool userTriggered = true );
96 void composerMapChanged( QgsLayoutItem *item );
97 void mCheckboxResizeContents_toggled( bool checked );
98
99 void mRasterStrokeGroupBox_toggled( bool state );
100 void mRasterStrokeWidthSpinBox_valueChanged( double d );
101 void mRasterStrokeColorButton_colorChanged( const QColor &newColor );
102
103 //item manipulation
104 void mMoveDownToolButton_clicked();
105 void mMoveUpToolButton_clicked();
106 void mRemoveToolButton_clicked();
107 void mAddToolButton_clicked();
108 void mEditPushButton_clicked();
109 void mCountToolButton_clicked( bool checked );
110 void mExpressionFilterButton_toggled( bool checked );
111 void mFilterByMapCheckBox_toggled( bool checked );
112 void mUpdateAllPushButton_clicked();
113 void mAddGroupToolButton_clicked();
114 void mLayerExpressionButton_clicked();
115
116 void mFilterLegendByAtlasCheckBox_toggled( bool checked );
117
118 void selectedChanged( const QModelIndex &current, const QModelIndex &previous );
119
120 void setLegendMapViewData();
121
122 void expandLegendTree();
123 void collapseLegendTree();
124
125 private slots:
127 void setGuiElements();
128
130 void updateFilterLegendByAtlasButton();
131
132 void mItemTreeView_doubleClicked( const QModelIndex &index );
133 void titleFontChanged();
134 void groupFontChanged();
135 void layerFontChanged();
136 void itemFontChanged();
137
138 void titleAlignmentChanged();
139 void groupAlignmentChanged();
140 void subgroupAlignmentChanged();
141 void itemAlignmentChanged();
142 void arrangementChanged();
143
144 void spaceBelowSubGroupHeadingChanged( double space );
145 void spaceBelowGroupHeadingChanged( double space );
146
147 void spaceGroupSideChanged( double space );
148 void spaceSubGroupSideChanged( double space );
149
150 void spaceSymbolSideChanged( double space );
151
152 private:
153 QgsLayoutLegendWidget() = delete;
154 void blockAllSignals( bool b );
155
156 QPointer< QgsLayoutItemLegend > mLegend;
157 QgsMapCanvas *mMapCanvas = nullptr;
158 QgsLayoutItemPropertiesWidget *mItemPropertiesWidget = nullptr;
159
160 QPointer< QgsLayoutLegendMapFilteringWidget > mMapFilteringWidget;
161};
162
170class GUI_EXPORT QgsLayoutLegendMenuProvider : public QgsLayerTreeViewMenuProvider
171{
172
173 public:
175 QgsLayoutLegendMenuProvider( QgsLayerTreeView *view, QgsLayoutLegendWidget *w );
176
177 QMenu *createContextMenu() override;
178
179 protected:
180 QgsLayerTreeView *mView = nullptr;
181 QgsLayoutLegendWidget *mWidget = nullptr;
182};
183
184#include "ui_qgslayoutlegendnodewidgetbase.h"
185
193class GUI_EXPORT QgsLayoutLegendNodeWidget: public QgsPanelWidget, private Ui::QgsLayoutLegendNodeWidgetBase
194{
195 Q_OBJECT
196
197 public:
198
199 QgsLayoutLegendNodeWidget( QgsLayoutItemLegend *legend, QgsLayerTreeNode *node, QgsLayerTreeModelLegendNode *legendNode, int originalLegendNodeIndex, QWidget *parent = nullptr );
200
201 void setDockMode( bool dockMode ) override;
202
203 private slots:
204
205 void labelChanged();
206 void patchChanged();
207 void insertExpression();
208 void sizeChanged( double );
209 void customSymbolChanged();
210 void colorRampLegendChanged();
211 void columnBreakToggled( bool checked );
212 void columnSplitChanged();
213
214 private:
215
216 QgsLayoutItemLegend *mLegend = nullptr;
217 QgsLayerTreeNode *mNode = nullptr;
218 QgsLayerTreeLayer *mLayer = nullptr;
219 QgsLayerTreeModelLegendNode *mLegendNode = nullptr;
220 int mOriginalLegendNodeIndex = -1;
221
222};
223
224
232class GUI_EXPORT QgsLayoutLegendMapFilteringModel : public QSortFilterProxyModel
233{
234 Q_OBJECT
235
236 public:
238 explicit QgsLayoutLegendMapFilteringModel( QgsLayoutItemLegend *legend, QgsLayoutModel *layoutModel, QObject *parent = nullptr );
239
240 int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
241 QVariant data( const QModelIndex &index, int role ) const override;
242 bool setData( const QModelIndex &index, const QVariant &value, int role ) override;
243 Qt::ItemFlags flags( const QModelIndex &index ) const override;
244
245 protected:
246
247 bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override;
248
249 private:
250 QgsLayoutModel *mLayoutModel = nullptr;
251 QPointer< QgsLayoutItemLegend > mLegendItem;
252
253};
254
262class GUI_EXPORT QgsLayoutLegendMapFilteringWidget: public QgsLayoutItemBaseWidget, private Ui::QgsLayoutLegendMapFilteringWidgetBase
263{
264 Q_OBJECT
265
266 public:
268 explicit QgsLayoutLegendMapFilteringWidget( QgsLayoutItemLegend *legend );
269
270 protected:
271 bool setNewItem( QgsLayoutItem *item ) final;
272
273 private slots:
274 void updateGuiElements();
275
276 private:
277 QPointer< QgsLayoutItemLegend > mLegendItem;
278 bool mBlockUpdates = false;
279};
280
282
283#endif //QGSLAYOUTLEGENDWIDGET_H
284
Abstract interface for generating an expression context.
virtual QgsExpressionContext createExpressionContext() const =0
This method needs to be reimplemented in all classes which implement this interface and return an exp...
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Layer tree node points to a map layer.
The QgsLegendRendererItem class is abstract interface for legend items returned from QgsMapLayerLegen...
This class is a base class for nodes in a layer tree.
Implementation of this interface can be implemented to allow QgsLayerTreeView instance to provide cus...
The QgsLayerTreeView class extends QTreeView and provides some additional functionality when working ...
A common interface for layout designer dialogs and widgets.
A base class for property widgets for layout items.
virtual bool setNewItem(QgsLayoutItem *item)
Attempts to update the widget to show the properties for the specified item.
virtual void setDesignerInterface(QgsLayoutDesignerInterface *iface)
Sets the the layout designer interface in which the widget is being shown.
virtual void setMasterLayout(QgsMasterLayoutInterface *masterLayout)
Sets the master layout associated with the item.
virtual void setReportTypeString(const QString &string)
Sets the string to use to describe the current report type (e.g.
A layout item subclass for map legends.
A widget for controlling the common properties of layout items (e.g.
Base class for graphical items within a QgsLayout.
A model for items attached to a layout.
Map canvas is a class for displaying all GIS data types on a canvas.
Definition: qgsmapcanvas.h:93
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.
virtual void setDockMode(bool dockMode)
Set the widget in dock mode which tells the widget to emit panel widgets and not open dialogs.
QgsLayerTreeModelLegendNode * legendNode(const QString &rule, QgsLayerTreeModel &model)
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c