9
9
10
10
QgsLayerTreeView::QgsLayerTreeView (QWidget *parent)
11
11
: QTreeView(parent)
12
- , mCurrentLayer(0 )
13
12
, mDefaultActions(0 )
14
13
, mMenuProvider(0 )
15
14
{
@@ -18,6 +17,7 @@ QgsLayerTreeView::QgsLayerTreeView(QWidget *parent)
18
17
setDragEnabled (true );
19
18
setAcceptDrops (true );
20
19
setDropIndicatorShown (true );
20
+ setEditTriggers (EditKeyPressed | SelectedClicked);
21
21
22
22
setSelectionMode (ExtendedSelection);
23
23
@@ -39,7 +39,7 @@ void QgsLayerTreeView::setModel(QAbstractItemModel* model)
39
39
40
40
QTreeView::setModel (model);
41
41
42
- connect (selectionModel (), SIGNAL (currentChanged (QModelIndex,QModelIndex)), this , SLOT (onCurrentChanged (QModelIndex)));
42
+ connect (selectionModel (), SIGNAL (currentChanged (QModelIndex,QModelIndex)), this , SLOT (onCurrentChanged (QModelIndex,QModelIndex )));
43
43
44
44
updateExpandedStateFromNode (layerTreeModel ()->rootGroup ());
45
45
}
@@ -64,16 +64,16 @@ void QgsLayerTreeView::setMenuProvider(QgsLayerTreeViewMenuProvider* menuProvide
64
64
65
65
QgsMapLayer* QgsLayerTreeView::currentLayer () const
66
66
{
67
- return mCurrentLayer ;
67
+ return layerForIndex ( currentIndex () ) ;
68
68
}
69
69
70
70
void QgsLayerTreeView::setCurrentLayer (QgsMapLayer* layer)
71
71
{
72
- if (mCurrentLayer == layer)
72
+ QgsLayerTreeLayer* nodeLayer = layerTreeModel ()->rootGroup ()->findLayer (layer->id ());
73
+ if (!nodeLayer)
73
74
return ;
74
75
75
- mCurrentLayer = layer;
76
- emit currentLayerChanged (mCurrentLayer );
76
+ setCurrentIndex ( layerTreeModel ()->node2index (nodeLayer) );
77
77
}
78
78
79
79
@@ -117,17 +117,16 @@ void QgsLayerTreeView::updateExpandedStateToNode(QModelIndex index)
117
117
node->setExpanded (isExpanded (index ));
118
118
}
119
119
120
- void QgsLayerTreeView::onCurrentChanged (QModelIndex current)
120
+ void QgsLayerTreeView::onCurrentChanged (QModelIndex current, QModelIndex previous )
121
121
{
122
- QgsLayerTreeNode* node = layerTreeModel ()->index2node (current);
123
- if (!node)
124
- return ; // TODO: maybe also support symbology nodes
122
+ QgsMapLayer* layerPrevious = layerForIndex (previous);
123
+ QgsMapLayer* layerCurrent = layerForIndex (current);
125
124
126
- QgsMapLayer* layer = 0 ;
127
- if (node->nodeType () == QgsLayerTreeNode::NodeLayer)
128
- layer = static_cast <QgsLayerTreeLayer*>(node)->layer ();
125
+ if (layerPrevious == layerCurrent)
126
+ return ;
129
127
130
- setCurrentLayer (layer);
128
+ qDebug (" current layer changed!" );
129
+ emit currentLayerChanged (layerCurrent);
131
130
}
132
131
133
132
void QgsLayerTreeView::updateExpandedStateFromNode (QgsLayerTreeNode* node)
@@ -139,6 +138,25 @@ void QgsLayerTreeView::updateExpandedStateFromNode(QgsLayerTreeNode* node)
139
138
updateExpandedStateFromNode (child);
140
139
}
141
140
141
+ QgsMapLayer* QgsLayerTreeView::layerForIndex (const QModelIndex& index) const
142
+ {
143
+ QgsLayerTreeNode* node = layerTreeModel ()->index2node (index );
144
+ if (node)
145
+ {
146
+ if (node->nodeType () == QgsLayerTreeNode::NodeLayer)
147
+ return static_cast <QgsLayerTreeLayer*>(node)->layer ();
148
+ }
149
+ else
150
+ {
151
+ // possibly a symbology node
152
+ QgsLayerTreeModelSymbologyNode* symnode = layerTreeModel ()->index2symnode (index );
153
+ if (symnode)
154
+ return symnode->parent ()->layer ();
155
+ }
156
+
157
+ return 0 ;
158
+ }
159
+
142
160
QgsLayerTreeNode* QgsLayerTreeView::currentNode () const
143
161
{
144
162
return layerTreeModel ()->index2node (selectionModel ()->currentIndex ());
0 commit comments