Skip to content

Commit 32e981d

Browse files
committedNov 20, 2012
Synchronize check states between legend and layer order widget
1 parent de2c671 commit 32e981d

File tree

3 files changed

+22
-32
lines changed

3 files changed

+22
-32
lines changed
 

‎src/app/legend/qgslayerorder.cpp

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
#include "qgsmaplayer.h"
2121
#include "qgslogger.h"
2222
#include "qgslegend.h"
23+
#include "qgslegendgroup.h"
24+
#include "qgslegendlayer.h"
2325
#include "qgslegendlayer.h"
2426
#include "qgsproject.h"
2527

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

36-
// track visibility changed in legend
37-
connect( mLegend, SIGNAL( itemChanged( QTreeWidgetItem *, int ) ),
38-
this, SLOT( legendItemChanged( QTreeWidgetItem *, int ) ) );
39-
4038
// track if legend mode changes
4139
connect( mLegend, SIGNAL( updateDrawingOrderChecked( bool ) ),
4240
this, SLOT( updateDrawingOrderChecked( bool ) ) );
@@ -114,35 +112,28 @@ QListWidgetItem *QgsLayerOrder::layerItem( QgsMapLayer *layer ) const
114112

115113
void QgsLayerOrder::itemChanged( QListWidgetItem *item )
116114
{
117-
QgsDebugMsg( "Entering." );
118-
QgsDebugMsg( QString( "item=%1" ).arg( item ? item->text() : "(null item)" ) );
119-
120-
QgsMapLayer *layer = qobject_cast<QgsMapLayer *>( item->data( Qt::UserRole ).value<QObject*>() );
121-
mLegend->setLayerVisible( layer, item->checkState() == Qt::Checked );
122-
115+
QString name = item->text();
116+
QString id = item->data( Qt::UserRole ).toString();
117+
bool embeddedGroup = item->data( Qt::UserRole + 1 ).toBool();
118+
if ( embeddedGroup )
119+
{
120+
QgsLegendGroup* grp = mLegend->findLegendGroup( name, id );
121+
if ( grp )
122+
{
123+
grp->setCheckState( 0, item->checkState() );
124+
}
125+
}
126+
else
127+
{
128+
QgsLegendLayer* ll = mLegend->findLegendLayer( id );
129+
if ( ll )
130+
{
131+
ll->setCheckState( 0, item->checkState() );
132+
}
133+
}
123134
updateLayerOrder();
124135
}
125136

126-
void QgsLayerOrder::legendItemChanged( QTreeWidgetItem *item, int col )
127-
{
128-
QgsDebugMsg( "Entering." );
129-
130-
if ( col != 0 )
131-
return;
132-
133-
QgsDebugMsg( QString( "legendItem changed=%1" ).arg( item ? item->text( 0 ) : "(null item)" ) );
134-
135-
QgsLegendLayer *ll = dynamic_cast< QgsLegendLayer * >( item );
136-
if ( !ll )
137-
return;
138-
139-
QListWidgetItem *lwi = layerItem( ll->layer() );
140-
if ( !lwi )
141-
return;
142-
143-
lwi->setCheckState( item->checkState( col ) );
144-
}
145-
146137
void QgsLayerOrder::mousePressEvent( QMouseEvent * e )
147138
{
148139
QgsDebugMsg( "Entering." );

‎src/app/legend/qgslayerorder.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ class QgsLayerOrder : public QListWidget
4848
private slots:
4949
void updateDrawingOrderChecked( bool );
5050
void itemChanged( QListWidgetItem * );
51-
void legendItemChanged( QTreeWidgetItem *, int );
5251
void refreshLayerList();
5352

5453
private:

‎src/app/legend/qgslegend.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1193,7 +1193,7 @@ QList<DrawingOrderInfo> QgsLegend::drawingOrder()
11931193
DrawingOrderInfo dInfo;
11941194
dInfo.name = lgroup->text( 0 );
11951195
dInfo.id = lgroup->projectPath();
1196-
dInfo.checked = ( lgroup->checkState( 0 ) == Qt::Checked );
1196+
dInfo.checked = ( lgroup->checkState( 0 ) != Qt::Unchecked );
11971197
dInfo.embeddedGroup = true;
11981198
if ( mUpdateDrawingOrder )
11991199
{

0 commit comments

Comments
 (0)
Please sign in to comment.