QGIS API Documentation 4.0.0-Norrköping (1ddcee3d0e4)
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:
55 QgsLegendRenderer( QgsLayerTreeModel *legendModel, const QgsLegendSettings &settings );
57
58#ifndef SIP_RUN
59 QgsLegendRenderer( const QgsLegendRenderer &other ) = delete;
62#endif
63
74
84
90 QSizeF minimumSize( QgsRenderContext *renderContext = nullptr );
91
100 void setLegendSize( QSizeF s ) { mLegendSize = s; }
101
110 QSizeF legendSize() const { return mLegendSize; }
111
118 Q_DECL_DEPRECATED void drawLegend( QPainter *painter ) SIP_DEPRECATED;
119
125 void drawLegend( QgsRenderContext &context );
126
132 QJsonObject exportLegendToJson( const QgsRenderContext &context );
133
139 static void setNodeLegendStyle( QgsLayerTreeNode *node, Qgis::LegendComponent style );
140
146 static Qgis::LegendComponent nodeLegendStyle( QgsLayerTreeNode *node, QgsLayerTreeModel *model );
147
148 private:
149#ifndef SIP_RUN
150
158 class LegendComponent
159 {
160 public:
161 LegendComponent() = default;
162
163 QObject *item = nullptr;
164
166 QSizeF symbolSize;
167
169 QSizeF labelSize;
170
172 QSizeF size;
173
178 double indent = 0;
179
186 double labelXOffset = 0.0;
187
192 double maxSiblingSymbolWidth = 0.0;
193 };
194
209 class LegendComponentGroup
210 {
211 public:
213 QList<LegendComponent> components;
214
216 QSizeF size = QSizeF( 0, 0 );
217
219 int column = 0;
220
224 bool placeColumnBreakBeforeGroup = false;
225 };
226
230 class ColumnContext
231 {
232 public:
233 ColumnContext() {}
234
236 double left = 0;
238 double right = 0;
239 };
240
245 QList<LegendComponentGroup> createComponentGroupList( QgsLayerTreeGroup *parentGroup, QgsRenderContext &context, double indent = 0 );
246
252 int setColumns( QList<LegendComponentGroup> &groupList );
253
257 double spaceAboveGroup( const LegendComponentGroup &group );
258
264 QJsonObject exportLegendToJson( const QgsRenderContext &context, QgsLayerTreeGroup *nodeGroup );
265
272 QSizeF paintAndDetermineSize( QgsRenderContext &context );
273
281 QSizeF drawTitle( QgsRenderContext &context, double top, Qt::AlignmentFlag halignment = Qt::AlignLeft, double legendWidth = 0 ) const;
282
291 QSizeF drawGroup( const LegendComponentGroup &group, QgsRenderContext &context, ColumnContext columnContext, double top = 0 );
292
296 LegendComponent drawSymbolItem( QgsLayerTreeModelLegendNode *symbolItem, QgsRenderContext &context, ColumnContext columnContext, double top, double maxSiblingSymbolWidth = 0 );
297
305 QSizeF drawLayerTitle( QgsLayerTreeLayer *nodeLayer, QgsRenderContext &context, ColumnContext columnContext = ColumnContext(), double top = 0 );
306
312 QSizeF drawGroupTitle( QgsLayerTreeGroup *nodeGroup, QgsRenderContext &context, ColumnContext columnContext = ColumnContext(), double top = 0 );
313
317 Qgis::LegendComponent nodeLegendStyle( QgsLayerTreeNode *node );
318
319 QgsLayerTreeModel *mLegendModel = nullptr;
320 std::unique_ptr< QgsLayerTreeFilterProxyModel > mProxyModel;
321
322 QgsLegendSettings mSettings;
323
324 QSizeF mLegendSize;
325
326#endif
327
328#ifdef SIP_RUN
329 QgsLegendRenderer( const QgsLegendRenderer &other );
330#endif
331
332 void widthAndOffsetForTitleText( const Qt::AlignmentFlag halignment, double legendWidth, double &width, double &offset ) const;
333};
334
335#endif // QGSLEGENDRENDERER_H
LegendComponent
Component of legends which can be styled.
Definition qgis.h:4719
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:227
#define SIP_DEPRECATED
Definition qgis_sip.h:113
#define SIP_TRANSFER
Definition qgis_sip.h:35