25
25
#include " qgsvectorlayer.h"
26
26
#include " qgsexpressioncontextutils.h"
27
27
28
+ #include < QJsonObject>
28
29
#include < QPainter>
29
30
30
31
@@ -45,6 +46,79 @@ void QgsLegendRenderer::drawLegend( QPainter *painter )
45
46
paintAndDetermineSize ( painter );
46
47
}
47
48
49
+ void QgsLegendRenderer::drawLegend ( QJsonObject &json )
50
+ {
51
+ QgsLayerTreeGroup *rootGroup = mLegendModel ->rootGroup ();
52
+ if ( !rootGroup )
53
+ return ;
54
+
55
+ json[" title" ] = mSettings .title ();
56
+ drawLegend ( rootGroup, json );
57
+ }
58
+
59
+ void QgsLegendRenderer::drawLegend ( QgsLayerTreeGroup *nodeGroup, QJsonObject &json )
60
+ {
61
+ QJsonArray nodes;
62
+ Q_FOREACH ( QgsLayerTreeNode *node, nodeGroup->children () )
63
+ {
64
+ if ( QgsLayerTree::isGroup ( node ) )
65
+ {
66
+ QgsLayerTreeGroup *nodeGroup = QgsLayerTree::toGroup ( node );
67
+
68
+ QModelIndex idx = mLegendModel ->node2index ( nodeGroup );
69
+ QgsExpressionContext tempContext;
70
+ const QString text = mLegendModel ->data ( idx, Qt::DisplayRole ).toString ();
71
+
72
+ QJsonObject group;
73
+ group[ " type" ] = " group" ;
74
+ group[ " title" ] = text;
75
+ drawLegend ( nodeGroup, group );
76
+ nodes.append ( group );
77
+ }
78
+ else if ( QgsLayerTree::isLayer ( node ) )
79
+ {
80
+ QJsonObject group;
81
+ group[ " type" ] = " layer" ;
82
+
83
+ QgsLayerTreeLayer *nodeLayer = QgsLayerTree::toLayer ( node );
84
+
85
+ QString text;
86
+ if ( nodeLegendStyle ( nodeLayer ) != QgsLegendStyle::Hidden )
87
+ {
88
+ QModelIndex idx = mLegendModel ->node2index ( nodeLayer );
89
+ text = mLegendModel ->data ( idx, Qt::DisplayRole ).toString ();
90
+ }
91
+
92
+ QList<QgsLayerTreeModelLegendNode *> legendNodes = mLegendModel ->layerLegendNodes ( nodeLayer );
93
+
94
+ if ( legendNodes.isEmpty () && mLegendModel ->legendFilterMapSettings () )
95
+ continue ;
96
+
97
+ if ( legendNodes.count () == 1 )
98
+ {
99
+ legendNodes.at ( 0 )->draw ( mSettings , group );
100
+ nodes.append ( group );
101
+ }
102
+ else if ( legendNodes.count () > 1 )
103
+ {
104
+ QJsonArray symbols;
105
+ for ( int j = 0 ; j < legendNodes.count (); j++ )
106
+ {
107
+ QgsLayerTreeModelLegendNode *legendNode = legendNodes.at ( j );
108
+ QJsonObject symbol;
109
+ legendNode->draw ( mSettings , symbol );
110
+ symbols.append ( symbol );
111
+ }
112
+ group[ " title" ] = text;
113
+ group[ " symbols" ] = symbols;
114
+ nodes.append ( group );
115
+ }
116
+ }
117
+ }
118
+
119
+ json[" nodes" ] = nodes;
120
+ }
121
+
48
122
QSizeF QgsLegendRenderer::paintAndDetermineSize ( QPainter *painter )
49
123
{
50
124
return paintAndDetermineSizeInternal ( nullptr , painter );
0 commit comments