Handle active (current) layer in layer tree view

This commit is contained in:
Martin Dobias 2014-05-07 21:57:54 +02:00
parent 1906de1779
commit a6158d55ff
2 changed files with 40 additions and 2 deletions

View File

@ -6,8 +6,9 @@
#include <QMenu>
#include <QContextMenuEvent>
QgsLayerTreeView::QgsLayerTreeView(QWidget *parent) :
QTreeView(parent)
QgsLayerTreeView::QgsLayerTreeView(QWidget *parent)
: QTreeView(parent)
, mCurrentLayer(0)
{
setHeaderHidden(true);
@ -19,6 +20,7 @@ QgsLayerTreeView::QgsLayerTreeView(QWidget *parent) :
connect(this, SIGNAL(collapsed(QModelIndex)), this, SLOT(updateExpandedStateToNode(QModelIndex)));
connect(this, SIGNAL(expanded(QModelIndex)), this, SLOT(updateExpandedStateToNode(QModelIndex)));
connect(this, SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(onCurrentChanged(QModelIndex)));
}
void QgsLayerTreeView::setModel(QAbstractItemModel* model)
@ -38,6 +40,20 @@ QgsLayerTreeModel *QgsLayerTreeView::layerTreeModel()
return qobject_cast<QgsLayerTreeModel*>(model());
}
QgsMapLayer* QgsLayerTreeView::currentLayer() const
{
return mCurrentLayer;
}
void QgsLayerTreeView::setCurrentLayer(QgsMapLayer* layer)
{
if (mCurrentLayer == layer)
return;
mCurrentLayer = layer;
emit currentLayerChanged(mCurrentLayer);
}
void QgsLayerTreeView::contextMenuEvent(QContextMenuEvent *event)
{
@ -144,6 +160,19 @@ void QgsLayerTreeView::updateExpandedStateToNode(QModelIndex index)
node->setExpanded(isExpanded(index));
}
void QgsLayerTreeView::onCurrentChanged(QModelIndex current)
{
QgsLayerTreeNode* node = layerTreeModel()->index2node(current);
if (!node)
return; // TODO: maybe also support symbology nodes
QgsMapLayer* layer = 0;
if (node->nodeType() == QgsLayerTreeNode::NodeLayer)
layer = static_cast<QgsLayerTreeLayer*>(node)->layer();
setCurrentLayer(layer);
}
void QgsLayerTreeView::updateExpandedStateFromNode(QgsLayerTreeNode* node)
{
QModelIndex idx = layerTreeModel()->node2index(node);

View File

@ -5,6 +5,7 @@
class QgsLayerTreeModel;
class QgsLayerTreeNode;
class QgsMapLayer;
class GUI_EXPORT QgsLayerTreeView : public QTreeView
{
@ -16,6 +17,9 @@ public:
QgsLayerTreeModel* layerTreeModel();
QgsMapLayer* currentLayer() const;
void setCurrentLayer(QgsMapLayer* layer);
protected:
void contextMenuEvent(QContextMenuEvent* event);
@ -26,6 +30,7 @@ protected:
void updateExpandedStateFromNode(QgsLayerTreeNode* node);
signals:
void currentLayerChanged(QgsMapLayer* layer);
public slots:
@ -38,6 +43,10 @@ protected slots:
void updateExpandedStateToNode(QModelIndex index);
void onCurrentChanged(QModelIndex current);
protected:
QgsMapLayer* mCurrentLayer;
};
#endif // QGSLAYERTREEVIEW_H