QGIS API Documentation 3.41.0-Master (af5edcb665c)
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 bool setNewItem( QgsLayoutItem *item ) override;
71
72 private slots:
73
74 void mWrapCharLineEdit_textChanged( const QString &text );
75 void mTitleLineEdit_textChanged( const QString &text );
76 void mColumnCountSpinBox_valueChanged( int c );
77 void mSplitLayerCheckBox_toggled( bool checked );
78 void mEqualColumnWidthCheckBox_toggled( bool checked );
79 void mSymbolWidthSpinBox_valueChanged( double d );
80 void mSymbolHeightSpinBox_valueChanged( double d );
81 void mMaxSymbolSizeSpinBox_valueChanged( double d );
82 void mMinSymbolSizeSpinBox_valueChanged( double d );
83 void mWmsLegendWidthSpinBox_valueChanged( double d );
84 void mWmsLegendHeightSpinBox_valueChanged( double d );
85 void mTitleSpaceBottomSpinBox_valueChanged( double d );
86 void mGroupSpaceSpinBox_valueChanged( double d );
87 void mGroupIndentSpinBox_valueChanged( double d );
88 void mSubgroupIndentSpinBox_valueChanged( double d );
89 void mLayerSpaceSpinBox_valueChanged( double d );
90 void mSymbolSpaceSpinBox_valueChanged( double d );
91 void mIconLabelSpaceSpinBox_valueChanged( double d );
92 void mBoxSpaceSpinBox_valueChanged( double d );
93 void mColumnSpaceSpinBox_valueChanged( double d );
94 void mCheckBoxAutoUpdate_stateChanged( int state, bool userTriggered = true );
95 void composerMapChanged( QgsLayoutItem *item );
96 void mCheckboxResizeContents_toggled( bool checked );
97
98 void mRasterStrokeGroupBox_toggled( bool state );
99 void mRasterStrokeWidthSpinBox_valueChanged( double d );
100 void mRasterStrokeColorButton_colorChanged( const QColor &newColor );
101
102 //item manipulation
103 void mMoveDownToolButton_clicked();
104 void mMoveUpToolButton_clicked();
105 void mRemoveToolButton_clicked();
106 void mAddToolButton_clicked();
107 void mEditPushButton_clicked();
108 void mCountToolButton_clicked( bool checked );
109 void mExpressionFilterButton_toggled( bool checked );
110 void mFilterByMapCheckBox_toggled( bool checked );
111 void mUpdateAllPushButton_clicked();
112 void mAddGroupToolButton_clicked();
113 void mLayerExpressionButton_clicked();
114
115 void mFilterLegendByAtlasCheckBox_toggled( bool checked );
116
117 void selectedChanged( const QModelIndex &current, const QModelIndex &previous );
118
119 void setLegendMapViewData();
120
121 void expandLegendTree();
122 void collapseLegendTree();
123
124 private slots:
126 void setGuiElements();
127
129 void updateFilterLegendByAtlasButton();
130
131 void mItemTreeView_doubleClicked( const QModelIndex &index );
132 void titleFontChanged();
133 void groupFontChanged();
134 void layerFontChanged();
135 void itemFontChanged();
136
137 void titleAlignmentChanged();
138 void groupAlignmentChanged();
139 void subgroupAlignmentChanged();
140 void itemAlignmentChanged();
141 void arrangementChanged();
142
143 void spaceBelowSubGroupHeadingChanged( double space );
144 void spaceBelowGroupHeadingChanged( double space );
145
146 void spaceGroupSideChanged( double space );
147 void spaceSubGroupSideChanged( double space );
148
149 void spaceSymbolSideChanged( double space );
150
151 private:
152 QgsLayoutLegendWidget() = delete;
153 void blockAllSignals( bool b );
154
155 QPointer<QgsLayoutItemLegend> mLegend;
156 QgsMapCanvas *mMapCanvas = nullptr;
157 QgsLayoutItemPropertiesWidget *mItemPropertiesWidget = nullptr;
158
159 QPointer<QgsLayoutLegendMapFilteringWidget> mMapFilteringWidget;
160};
161
169class GUI_EXPORT QgsLayoutLegendMenuProvider : public QgsLayerTreeViewMenuProvider
170{
171 public:
173 QgsLayoutLegendMenuProvider( QgsLayerTreeView *view, QgsLayoutLegendWidget *w );
174
175 QMenu *createContextMenu() override;
176
177 protected:
178 QgsLayerTreeView *mView = nullptr;
179 QgsLayoutLegendWidget *mWidget = nullptr;
180};
181
182#include "ui_qgslayoutlegendnodewidgetbase.h"
183
191class GUI_EXPORT QgsLayoutLegendNodeWidget : public QgsPanelWidget, private Ui::QgsLayoutLegendNodeWidgetBase
192{
193 Q_OBJECT
194
195 public:
196 QgsLayoutLegendNodeWidget( QgsLayoutItemLegend *legend, QgsLayerTreeNode *node, QgsLayerTreeModelLegendNode *legendNode, int originalLegendNodeIndex, QWidget *parent = nullptr );
197
198 void setDockMode( bool dockMode ) override;
199
200 private slots:
201
202 void labelChanged();
203 void patchChanged();
204 void insertExpression();
205 void sizeChanged( double );
206 void customSymbolChanged();
207 void colorRampLegendChanged();
208 void columnBreakToggled( bool checked );
209 void columnSplitChanged();
210
211 private:
212 QgsLayoutItemLegend *mLegend = nullptr;
213 QgsLayerTreeNode *mNode = nullptr;
214 QgsLayerTreeLayer *mLayer = nullptr;
215 QgsLayerTreeModelLegendNode *mLegendNode = nullptr;
216 int mOriginalLegendNodeIndex = -1;
217};
218
219
227class GUI_EXPORT QgsLayoutLegendMapFilteringModel : public QSortFilterProxyModel
228{
229 Q_OBJECT
230
231 public:
233 explicit QgsLayoutLegendMapFilteringModel( QgsLayoutItemLegend *legend, QgsLayoutModel *layoutModel, QObject *parent = nullptr );
234
235 int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
236 QVariant data( const QModelIndex &index, int role ) const override;
237 bool setData( const QModelIndex &index, const QVariant &value, int role ) override;
238 Qt::ItemFlags flags( const QModelIndex &index ) const override;
239
240 protected:
241 bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override;
242
243 private:
244 QgsLayoutModel *mLayoutModel = nullptr;
245 QPointer<QgsLayoutItemLegend> mLegendItem;
246};
247
255class GUI_EXPORT QgsLayoutLegendMapFilteringWidget : public QgsLayoutItemBaseWidget, private Ui::QgsLayoutLegendMapFilteringWidgetBase
256{
257 Q_OBJECT
258
259 public:
261 explicit QgsLayoutLegendMapFilteringWidget( QgsLayoutItemLegend *legend );
262
263 protected:
264 bool setNewItem( QgsLayoutItem *item ) final;
265
266 private slots:
267 void updateGuiElements();
268
269 private:
270 QPointer<QgsLayoutItemLegend> mLegendItem;
271 bool mBlockUpdates = false;
272};
273
275
276#endif //QGSLAYOUTLEGENDWIDGET_H
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