QGIS API Documentation 3.41.0-Master (3440c17df1d)
Loading...
Searching...
No Matches
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.
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.
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