Skip to content

Commit

Permalink
[layertree] Update layer tree view when a tree node changes the expan…
Browse files Browse the repository at this point in the history
…ded state
  • Loading branch information
wonder-sk committed Jun 17, 2014
1 parent e4dd900 commit b134c25
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 2 deletions.
2 changes: 2 additions & 0 deletions python/core/layertree/qgslayertreenode.sip
Expand Up @@ -112,6 +112,8 @@ class QgsLayerTreeNode : QObject
void visibilityChanged( QgsLayerTreeNode* node, Qt::CheckState state );
//! Emitted when a custom property of a node within the tree has been changed or removed
void customPropertyChanged( QgsLayerTreeNode* node, QString key );
//! Emitted when the collapsed/expanded state of a node within the tree has been changed
void expandedChanged( QgsLayerTreeNode* node, bool expanded );

protected:

Expand Down
18 changes: 18 additions & 0 deletions src/core/layertree/qgslayertreenode.cpp
Expand Up @@ -58,6 +58,23 @@ QgsLayerTreeNode* QgsLayerTreeNode::readXML( QDomElement& element )
return node;
}


bool QgsLayerTreeNode::isExpanded() const
{
return mExpanded;
}


void QgsLayerTreeNode::setExpanded( bool expanded )
{
if ( mExpanded == expanded )
return;

mExpanded = expanded;
emit expandedChanged( this, expanded );
}


void QgsLayerTreeNode::setCustomProperty( const QString &key, const QVariant &value )
{
mProperties.setValue( key, value );
Expand Down Expand Up @@ -115,6 +132,7 @@ void QgsLayerTreeNode::insertChildrenPrivate( int index, QList<QgsLayerTreeNode*
connect( nodes[i], SIGNAL( removedChildren( QgsLayerTreeNode*, int, int ) ), this, SIGNAL( removedChildren( QgsLayerTreeNode*, int, int ) ) );
connect( nodes[i], SIGNAL( customPropertyChanged( QgsLayerTreeNode*, QString ) ), this, SIGNAL( customPropertyChanged( QgsLayerTreeNode*, QString ) ) );
connect( nodes[i], SIGNAL( visibilityChanged( QgsLayerTreeNode*, Qt::CheckState ) ), this, SIGNAL( visibilityChanged( QgsLayerTreeNode*, Qt::CheckState ) ) );
connect( nodes[i], SIGNAL( expandedChanged( QgsLayerTreeNode*, bool ) ), this, SIGNAL( expandedChanged( QgsLayerTreeNode*, bool ) ) );
}
emit addedChildren( this, index, indexTo );
}
Expand Down
6 changes: 4 additions & 2 deletions src/core/layertree/qgslayertreenode.h
Expand Up @@ -92,9 +92,9 @@ class CORE_EXPORT QgsLayerTreeNode : public QObject
virtual QgsLayerTreeNode* clone() const = 0;

//! Return whether the node should be shown as expanded or collapsed in GUI
bool isExpanded() const { return mExpanded; }
bool isExpanded() const;
//! Set whether the node should be shown as expanded or collapsed in GUI
void setExpanded( bool expanded ) { mExpanded = expanded; }
void setExpanded( bool expanded );

/** Set a custom property for the node. Properties are stored in a map and saved in project file. */
void setCustomProperty( const QString& key, const QVariant& value );
Expand All @@ -119,6 +119,8 @@ class CORE_EXPORT QgsLayerTreeNode : public QObject
void visibilityChanged( QgsLayerTreeNode* node, Qt::CheckState state );
//! Emitted when a custom property of a node within the tree has been changed or removed
void customPropertyChanged( QgsLayerTreeNode* node, QString key );
//! Emitted when the collapsed/expanded state of a node within the tree has been changed
void expandedChanged( QgsLayerTreeNode* node, bool expanded );

protected:

Expand Down
9 changes: 9 additions & 0 deletions src/gui/layertree/qgslayertreeview.cpp
Expand Up @@ -57,6 +57,8 @@ void QgsLayerTreeView::setModel( QAbstractItemModel* model )

QTreeView::setModel( model );

connect( layerTreeModel()->rootGroup(), SIGNAL( expandedChanged( QgsLayerTreeNode*, bool ) ), this, SLOT( onExpandedChanged( QgsLayerTreeNode*, bool ) ) );

connect( selectionModel(), SIGNAL( currentChanged( QModelIndex, QModelIndex ) ), this, SLOT( onCurrentChanged() ) );

updateExpandedStateFromNode( layerTreeModel()->rootGroup() );
Expand Down Expand Up @@ -163,6 +165,13 @@ void QgsLayerTreeView::onCurrentChanged()
emit currentLayerChanged( layerCurrent );
}

void QgsLayerTreeView::onExpandedChanged( QgsLayerTreeNode* node, bool expanded )
{
QModelIndex idx = layerTreeModel()->node2index( node );
if ( isExpanded( idx ) != expanded )
setExpanded( idx, expanded );
}

void QgsLayerTreeView::updateExpandedStateFromNode( QgsLayerTreeNode* node )
{
QModelIndex idx = layerTreeModel()->node2index( node );
Expand Down
1 change: 1 addition & 0 deletions src/gui/layertree/qgslayertreeview.h
Expand Up @@ -104,6 +104,7 @@ class GUI_EXPORT QgsLayerTreeView : public QTreeView
void updateExpandedStateToNode( QModelIndex index );

void onCurrentChanged();
void onExpandedChanged( QgsLayerTreeNode* node, bool expanded );

protected:
//! helper class with default actions. Lazily initialized.
Expand Down

0 comments on commit b134c25

Please sign in to comment.