Skip to content

Commit a6158d5

Browse files
committedMay 21, 2014
Handle active (current) layer in layer tree view
1 parent 1906de1 commit a6158d5

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed
 

‎src/gui/layertree/qgslayertreeview.cpp

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
#include <QMenu>
77
#include <QContextMenuEvent>
88

9-
QgsLayerTreeView::QgsLayerTreeView(QWidget *parent) :
10-
QTreeView(parent)
9+
QgsLayerTreeView::QgsLayerTreeView(QWidget *parent)
10+
: QTreeView(parent)
11+
, mCurrentLayer(0)
1112
{
1213
setHeaderHidden(true);
1314

@@ -19,6 +20,7 @@ QgsLayerTreeView::QgsLayerTreeView(QWidget *parent) :
1920

2021
connect(this, SIGNAL(collapsed(QModelIndex)), this, SLOT(updateExpandedStateToNode(QModelIndex)));
2122
connect(this, SIGNAL(expanded(QModelIndex)), this, SLOT(updateExpandedStateToNode(QModelIndex)));
23+
connect(this, SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(onCurrentChanged(QModelIndex)));
2224
}
2325

2426
void QgsLayerTreeView::setModel(QAbstractItemModel* model)
@@ -38,6 +40,20 @@ QgsLayerTreeModel *QgsLayerTreeView::layerTreeModel()
3840
return qobject_cast<QgsLayerTreeModel*>(model());
3941
}
4042

43+
QgsMapLayer* QgsLayerTreeView::currentLayer() const
44+
{
45+
return mCurrentLayer;
46+
}
47+
48+
void QgsLayerTreeView::setCurrentLayer(QgsMapLayer* layer)
49+
{
50+
if (mCurrentLayer == layer)
51+
return;
52+
53+
mCurrentLayer = layer;
54+
emit currentLayerChanged(mCurrentLayer);
55+
}
56+
4157

4258
void QgsLayerTreeView::contextMenuEvent(QContextMenuEvent *event)
4359
{
@@ -144,6 +160,19 @@ void QgsLayerTreeView::updateExpandedStateToNode(QModelIndex index)
144160
node->setExpanded(isExpanded(index));
145161
}
146162

163+
void QgsLayerTreeView::onCurrentChanged(QModelIndex current)
164+
{
165+
QgsLayerTreeNode* node = layerTreeModel()->index2node(current);
166+
if (!node)
167+
return; // TODO: maybe also support symbology nodes
168+
169+
QgsMapLayer* layer = 0;
170+
if (node->nodeType() == QgsLayerTreeNode::NodeLayer)
171+
layer = static_cast<QgsLayerTreeLayer*>(node)->layer();
172+
173+
setCurrentLayer(layer);
174+
}
175+
147176
void QgsLayerTreeView::updateExpandedStateFromNode(QgsLayerTreeNode* node)
148177
{
149178
QModelIndex idx = layerTreeModel()->node2index(node);

‎src/gui/layertree/qgslayertreeview.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
class QgsLayerTreeModel;
77
class QgsLayerTreeNode;
8+
class QgsMapLayer;
89

910
class GUI_EXPORT QgsLayerTreeView : public QTreeView
1011
{
@@ -16,6 +17,9 @@ class GUI_EXPORT QgsLayerTreeView : public QTreeView
1617

1718
QgsLayerTreeModel* layerTreeModel();
1819

20+
QgsMapLayer* currentLayer() const;
21+
void setCurrentLayer(QgsMapLayer* layer);
22+
1923
protected:
2024
void contextMenuEvent(QContextMenuEvent* event);
2125

@@ -26,6 +30,7 @@ class GUI_EXPORT QgsLayerTreeView : public QTreeView
2630
void updateExpandedStateFromNode(QgsLayerTreeNode* node);
2731

2832
signals:
33+
void currentLayerChanged(QgsMapLayer* layer);
2934

3035
public slots:
3136

@@ -38,6 +43,10 @@ protected slots:
3843

3944
void updateExpandedStateToNode(QModelIndex index);
4045

46+
void onCurrentChanged(QModelIndex current);
47+
48+
protected:
49+
QgsMapLayer* mCurrentLayer;
4150
};
4251

4352
#endif // QGSLAYERTREEVIEW_H

0 commit comments

Comments
 (0)
Please sign in to comment.