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
115113void 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-
146137void QgsLayerOrder::mousePressEvent ( QMouseEvent * e )
147138{
148139 QgsDebugMsg ( " Entering." );
0 commit comments