5
5
#include < QMimeData>
6
6
#include < QVBoxLayout>
7
7
8
+ #include " qgslayertree.h"
8
9
#include " qgslayertreemapcanvasbridge.h"
9
10
10
11
#include " qgsmaplayer.h"
@@ -26,36 +27,52 @@ class CustomLayerOrderModel : public QAbstractListModel
26
27
27
28
QVariant data (const QModelIndex &index, int role) const
28
29
{
30
+ QString id = mOrder .at (index .row ());
31
+
29
32
if (role == Qt::DisplayRole)
30
33
{
31
- QString id = mOrder .at (index .row ());
32
34
QgsMapLayer* layer = QgsMapLayerRegistry::instance ()->mapLayer (id);
33
35
if (layer)
34
36
return layer->name ();
35
37
}
36
38
37
39
if (role == Qt::UserRole+1 )
38
40
{
39
- QString id = mOrder .at (index .row ());
40
41
QgsMapLayer* layer = QgsMapLayerRegistry::instance ()->mapLayer (id);
41
42
if (layer)
42
43
return layer->id ();
43
44
}
44
45
45
46
if (role == Qt::CheckStateRole)
46
47
{
47
- // TODO: layer visibility
48
- return Qt::Checked;
48
+ QgsLayerTreeLayer* nodeLayer = mBridge ->rootGroup ()->findLayer (id);
49
+ if (nodeLayer)
50
+ return nodeLayer->isVisible ();
49
51
}
50
52
51
53
return QVariant ();
52
54
}
53
55
56
+ bool setData (const QModelIndex &index, const QVariant &value, int role)
57
+ {
58
+ if (role == Qt::CheckStateRole)
59
+ {
60
+ QString id = mOrder .at (index .row ());
61
+ QgsLayerTreeLayer* nodeLayer = mBridge ->rootGroup ()->findLayer (id);
62
+ if (nodeLayer)
63
+ {
64
+ nodeLayer->setVisible ((Qt::CheckState)value.toInt ());
65
+ return true ;
66
+ }
67
+ }
68
+ return false ;
69
+ }
70
+
54
71
Qt::ItemFlags flags (const QModelIndex &index) const
55
72
{
56
73
if (!index .isValid ())
57
74
return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled;
58
- return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled; // | Qt::ItemIsUserCheckable;
75
+ return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsUserCheckable;
59
76
}
60
77
61
78
Qt::DropActions supportedDropActions () const
@@ -128,6 +145,13 @@ class CustomLayerOrderModel : public QAbstractListModel
128
145
129
146
QStringList order () const { return mOrder ; }
130
147
148
+ void updateLayerVisibility (const QString& layerId)
149
+ {
150
+ int row = mOrder .indexOf (layerId);
151
+ if (row != -1 )
152
+ emit dataChanged (index (row),index (row));
153
+ }
154
+
131
155
protected:
132
156
QgsLayerTreeMapCanvasBridge* mBridge ;
133
157
QStringList mOrder ;
@@ -159,6 +183,8 @@ QgsCustomLayerOrderWidget::QgsCustomLayerOrderWidget(QgsLayerTreeMapCanvasBridge
159
183
connect (mModel , SIGNAL (rowsInserted (QModelIndex,int ,int )), this , SLOT (modelUpdated ()));
160
184
connect (mModel , SIGNAL (rowsRemoved (QModelIndex,int ,int )), this , SLOT (modelUpdated ()));
161
185
186
+ connect (bridge->rootGroup (), SIGNAL (visibilityChanged (QgsLayerTreeNode*,Qt::CheckState)), this , SLOT (nodeVisibilityChanged (QgsLayerTreeNode*,Qt::CheckState)));
187
+
162
188
QVBoxLayout* l = new QVBoxLayout;
163
189
l->setMargin ( 0 );
164
190
l->addWidget ( mView );
@@ -179,6 +205,14 @@ void QgsCustomLayerOrderWidget::bridgeCustomLayerOrderChanged(const QStringList&
179
205
mModel ->refreshModel (mBridge ->hasCustomLayerOrder () ? mBridge ->customLayerOrder () : mBridge ->defaultLayerOrder ());
180
206
}
181
207
208
+ void QgsCustomLayerOrderWidget::nodeVisibilityChanged (QgsLayerTreeNode* node, Qt::CheckState state)
209
+ {
210
+ if (QgsLayerTree::isLayer (node))
211
+ {
212
+ mModel ->updateLayerVisibility (QgsLayerTree::toLayer (node)->layerId ());
213
+ }
214
+ }
215
+
182
216
void QgsCustomLayerOrderWidget::modelUpdated ()
183
217
{
184
218
mBridge ->setCustomLayerOrder (mModel ->order ());
0 commit comments