Skip to content

Commit

Permalink
Synchronize check states between legend and layer order widget
Browse files Browse the repository at this point in the history
  • Loading branch information
mhugent committed Nov 20, 2012
1 parent de2c671 commit 32e981d
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 32 deletions.
51 changes: 21 additions & 30 deletions src/app/legend/qgslayerorder.cpp
Expand Up @@ -20,6 +20,8 @@
#include "qgsmaplayer.h"
#include "qgslogger.h"
#include "qgslegend.h"
#include "qgslegendgroup.h"
#include "qgslegendlayer.h"
#include "qgslegendlayer.h"
#include "qgsproject.h"

Expand All @@ -33,10 +35,6 @@ QgsLayerOrder::QgsLayerOrder( QgsLegend *legend, QWidget * parent, const char *n
{
setObjectName( name );

// track visibility changed in legend
connect( mLegend, SIGNAL( itemChanged( QTreeWidgetItem *, int ) ),
this, SLOT( legendItemChanged( QTreeWidgetItem *, int ) ) );

// track if legend mode changes
connect( mLegend, SIGNAL( updateDrawingOrderChecked( bool ) ),
this, SLOT( updateDrawingOrderChecked( bool ) ) );
Expand Down Expand Up @@ -114,35 +112,28 @@ QListWidgetItem *QgsLayerOrder::layerItem( QgsMapLayer *layer ) const

void QgsLayerOrder::itemChanged( QListWidgetItem *item )
{
QgsDebugMsg( "Entering." );
QgsDebugMsg( QString( "item=%1" ).arg( item ? item->text() : "(null item)" ) );

QgsMapLayer *layer = qobject_cast<QgsMapLayer *>( item->data( Qt::UserRole ).value<QObject*>() );
mLegend->setLayerVisible( layer, item->checkState() == Qt::Checked );

QString name = item->text();
QString id = item->data( Qt::UserRole ).toString();
bool embeddedGroup = item->data( Qt::UserRole + 1 ).toBool();
if ( embeddedGroup )
{
QgsLegendGroup* grp = mLegend->findLegendGroup( name, id );
if ( grp )
{
grp->setCheckState( 0, item->checkState() );
}
}
else
{
QgsLegendLayer* ll = mLegend->findLegendLayer( id );
if ( ll )
{
ll->setCheckState( 0, item->checkState() );
}
}
updateLayerOrder();
}

void QgsLayerOrder::legendItemChanged( QTreeWidgetItem *item, int col )
{
QgsDebugMsg( "Entering." );

if ( col != 0 )
return;

QgsDebugMsg( QString( "legendItem changed=%1" ).arg( item ? item->text( 0 ) : "(null item)" ) );

QgsLegendLayer *ll = dynamic_cast< QgsLegendLayer * >( item );
if ( !ll )
return;

QListWidgetItem *lwi = layerItem( ll->layer() );
if ( !lwi )
return;

lwi->setCheckState( item->checkState( col ) );
}

void QgsLayerOrder::mousePressEvent( QMouseEvent * e )
{
QgsDebugMsg( "Entering." );
Expand Down
1 change: 0 additions & 1 deletion src/app/legend/qgslayerorder.h
Expand Up @@ -48,7 +48,6 @@ class QgsLayerOrder : public QListWidget
private slots:
void updateDrawingOrderChecked( bool );
void itemChanged( QListWidgetItem * );
void legendItemChanged( QTreeWidgetItem *, int );
void refreshLayerList();

private:
Expand Down
2 changes: 1 addition & 1 deletion src/app/legend/qgslegend.cpp
Expand Up @@ -1193,7 +1193,7 @@ QList<DrawingOrderInfo> QgsLegend::drawingOrder()
DrawingOrderInfo dInfo;
dInfo.name = lgroup->text( 0 );
dInfo.id = lgroup->projectPath();
dInfo.checked = ( lgroup->checkState( 0 ) == Qt::Checked );
dInfo.checked = ( lgroup->checkState( 0 ) != Qt::Unchecked );
dInfo.embeddedGroup = true;
if ( mUpdateDrawingOrder )
{
Expand Down

0 comments on commit 32e981d

Please sign in to comment.