QGIS API Documentation 3.99.0-Master (2fe06baccd8)
Loading...
Searching...
No Matches
qgslegendrenderer.h
Go to the documentation of this file.
1/***************************************************************************
2 qgslegendrenderer.h
3 --------------------------------------
4 Date : July 2014
5 Copyright : (C) 2014 by Martin Dobias
6 Email : wonder dot sk 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
16#ifndef QGSLEGENDRENDERER_H
17#define QGSLEGENDRENDERER_H
18
19#include "qgis_core.h"
20
21#include <QPointF>
22
23class QRectF;
24class QStandardItem;
25class QJsonObject;
26
32class QgsSymbol;
35
36#include "qgslegendsettings.h"
37
48class CORE_EXPORT QgsLegendRenderer
49{
50 public:
51
56 QgsLegendRenderer( QgsLayerTreeModel *legendModel, const QgsLegendSettings &settings );
58
59#ifndef SIP_RUN
60 QgsLegendRenderer( const QgsLegendRenderer &other ) = delete;
63#endif
64
75
85
91 QSizeF minimumSize( QgsRenderContext *renderContext = nullptr );
92
101 void setLegendSize( QSizeF s ) { mLegendSize = s; }
102
111 QSizeF legendSize() const { return mLegendSize; }
112
119 Q_DECL_DEPRECATED void drawLegend( QPainter *painter ) SIP_DEPRECATED;
120
126 void drawLegend( QgsRenderContext &context );
127
133 QJsonObject exportLegendToJson( const QgsRenderContext &context );
134
140 static void setNodeLegendStyle( QgsLayerTreeNode *node, Qgis::LegendComponent style );
141
147 static Qgis::LegendComponent nodeLegendStyle( QgsLayerTreeNode *node, QgsLayerTreeModel *model );
148
149 private:
150
151#ifndef SIP_RUN
152
160 class LegendComponent
161 {
162 public:
163
164 LegendComponent() = default;
165
166 QObject *item = nullptr;
167
169 QSizeF symbolSize;
170
172 QSizeF labelSize;
173
175 QSizeF size;
176
181 double indent = 0;
182
189 double labelXOffset = 0.0;
190
195 double maxSiblingSymbolWidth = 0.0;
196 };
197
212 class LegendComponentGroup
213 {
214 public:
215
217 QList<LegendComponent> components;
218
220 QSizeF size = QSizeF( 0, 0 );
221
223 int column = 0;
224
228 bool placeColumnBreakBeforeGroup = false;
229
230 };
231
235 class ColumnContext
236 {
237 public:
238
239 ColumnContext() {}
240
242 double left = 0;
244 double right = 0;
245 };
246
251 QList<LegendComponentGroup> createComponentGroupList( QgsLayerTreeGroup *parentGroup, QgsRenderContext &context, double indent = 0 );
252
258 int setColumns( QList<LegendComponentGroup> &groupList );
259
263 double spaceAboveGroup( const LegendComponentGroup &group );
264
270 QJsonObject exportLegendToJson( const QgsRenderContext &context, QgsLayerTreeGroup *nodeGroup );
271
278 QSizeF paintAndDetermineSize( QgsRenderContext &context );
279
287 QSizeF drawTitle( QgsRenderContext &context, double top, Qt::AlignmentFlag halignment = Qt::AlignLeft, double legendWidth = 0 ) const;
288
297 QSizeF drawGroup( const LegendComponentGroup &group, QgsRenderContext &context, ColumnContext columnContext, double top = 0 );
298
302 LegendComponent drawSymbolItem( QgsLayerTreeModelLegendNode *symbolItem, QgsRenderContext &context, ColumnContext columnContext, double top, double maxSiblingSymbolWidth = 0 );
303
311 QSizeF drawLayerTitle( QgsLayerTreeLayer *nodeLayer, QgsRenderContext &context, ColumnContext columnContext = ColumnContext(), double top = 0 );
312
318 QSizeF drawGroupTitle( QgsLayerTreeGroup *nodeGroup, QgsRenderContext &context, ColumnContext columnContext = ColumnContext(), double top = 0 );
319
323 Qgis::LegendComponent nodeLegendStyle( QgsLayerTreeNode *node );
324
325 QgsLayerTreeModel *mLegendModel = nullptr;
326 std::unique_ptr< QgsLayerTreeFilterProxyModel >mProxyModel;
327
328 QgsLegendSettings mSettings;
329
330 QSizeF mLegendSize;
331
332#endif
333
334#ifdef SIP_RUN
335 QgsLegendRenderer( const QgsLegendRenderer &other );
336#endif
337
338 void widthAndOffsetForTitleText( const Qt::AlignmentFlag halignment, double legendWidth, double &width, double &offset ) const;
339};
340
341#endif // QGSLEGENDRENDERER_H
LegendComponent
Component of legends which can be styled.
Definition qgis.h:4575
A sort filter proxy model to easily reproduce the legend/layer tree in a tree view.
Layer tree group node serves as a container for layers and further groups.
Layer tree node points to a map layer.
An abstract interface for legend items returned from QgsMapLayerLegend implementation.
A model representing the layer tree, including layers and groups of layers.
Base class for nodes in a layer tree.
QSizeF minimumSize(QgsRenderContext *renderContext=nullptr)
Runs the layout algorithm and returns the minimum size required for the legend.
QgsLayerTreeFilterProxyModel * proxyModel()
Returns the filter proxy model used for filtering the legend model content during rendering.
QgsLegendRenderer(QgsLayerTreeModel *legendModel, const QgsLegendSettings &settings)
Constructor for QgsLegendRenderer.
void setLegendSize(QSizeF s)
Sets the preferred resulting legend size.
void setProxyModel(QgsLayerTreeFilterProxyModel *model)
Sets the filter proxy model to use for filtering the legend model content during rendering.
QSizeF legendSize() const
Returns the preferred legend size set by the client.
QgsLegendRenderer & operator=(const QgsLegendRenderer &other)=delete
QgsLegendRenderer(const QgsLegendRenderer &other)=delete
Stores the appearance and layout settings for legend drawing with QgsLegendRenderer.
Contains information about the context of a rendering operation.
Abstract base class for all rendered symbols.
Definition qgssymbol.h:231
#define SIP_DEPRECATED
Definition qgis_sip.h:114
#define SIP_TRANSFER
Definition qgis_sip.h:36