Skip to content

Commit 528adfe

Browse files
author
jef
committed
fix legend
git-svn-id: http://svn.osgeo.org/qgis/trunk@14523 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent c799b17 commit 528adfe

File tree

3 files changed

+43
-36
lines changed

3 files changed

+43
-36
lines changed

src/app/legend/qgslegend.cpp

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ static const char *const ident_ = "$Id$";
4848
const int AUTOSCROLL_MARGIN = 16;
4949

5050
QgsLegend::QgsLegend( QgsMapCanvas *canvas, QWidget * parent, const char *name )
51-
: QTreeWidget( parent )
52-
, mMousePressedFlag( false )
53-
, mMapCanvas( canvas )
54-
, mMinimumIconSize( 20, 20 )
51+
: QTreeWidget( parent )
52+
, mMousePressedFlag( false )
53+
, mMapCanvas( canvas )
54+
, mMinimumIconSize( 20, 20 )
5555
{
5656
setObjectName( name );
5757

@@ -161,7 +161,6 @@ int QgsLegend::addGroup( QString name, bool expand )
161161
else
162162
group = new QgsLegendGroup( this, name );
163163

164-
group->setData( 0, Qt::UserRole, Qt::Checked );
165164
QModelIndex groupIndex = indexFromItem( group );
166165
setExpanded( groupIndex, expand );
167166
setCurrentItem( group );
@@ -235,7 +234,6 @@ void QgsLegend::removeLayer( QString layerId )
235234
delete ll;
236235
break;
237236
}
238-
239237
}
240238
}
241239

@@ -280,14 +278,14 @@ void QgsLegend::mouseMoveEvent( QMouseEvent * e )
280278
QgsDebugMsg( "layers prior to move: " + mLayersPriorToMove.join( ", " ) );
281279

282280
// record which items were selected and hide them
283-
foreach( QTreeWidgetItem *item, selectedItems() )
281+
foreach( QTreeWidgetItem * item, selectedItems() )
284282
{
285283
item->setHidden( true );
286284
mItemsBeingMoved << item;
287285
}
288286

289287
// remove and unhide items, whose parent is already to be moved
290-
foreach( QTreeWidgetItem *item, mItemsBeingMoved )
288+
foreach( QTreeWidgetItem * item, mItemsBeingMoved )
291289
{
292290
QTreeWidgetItem *parent = item->parent();
293291

@@ -423,7 +421,7 @@ void QgsLegend::mouseReleaseEvent( QMouseEvent * e )
423421
hideLine();
424422

425423
// unhide
426-
foreach( QTreeWidgetItem *item, mItemsBeingMoved )
424+
foreach( QTreeWidgetItem * item, mItemsBeingMoved )
427425
{
428426
item->setHidden( false );
429427
}
@@ -441,7 +439,7 @@ void QgsLegend::mouseReleaseEvent( QMouseEvent * e )
441439

442440
showItem( "prev sibling", mDropTarget );
443441

444-
foreach( QTreeWidgetItem *item, mItemsBeingMoved )
442+
foreach( QTreeWidgetItem * item, mItemsBeingMoved )
445443
{
446444
moveItem( item, mDropTarget );
447445
mDropTarget = item;
@@ -468,7 +466,7 @@ void QgsLegend::mouseReleaseEvent( QMouseEvent * e )
468466
{
469467
showItem( "drop after", mDropTarget );
470468

471-
foreach( QTreeWidgetItem *item, mItemsBeingMoved )
469+
foreach( QTreeWidgetItem * item, mItemsBeingMoved )
472470
{
473471
moveItem( item, mDropTarget );
474472
mDropTarget = item;
@@ -479,7 +477,7 @@ void QgsLegend::mouseReleaseEvent( QMouseEvent * e )
479477
{
480478
showItem( "insert into", mDropTarget );
481479

482-
foreach( QTreeWidgetItem *item, mItemsBeingMoved )
480+
foreach( QTreeWidgetItem * item, mItemsBeingMoved )
483481
{
484482
insertItem( item, mDropTarget );
485483
}
@@ -592,12 +590,10 @@ void QgsLegend::addLayer( QgsMapLayer * layer )
592590
if ( llayer->isVisible() )
593591
{
594592
llayer->setCheckState( 0, Qt::Checked );
595-
llayer->setData( 0, Qt::UserRole, Qt::Checked );
596593
}
597594
else
598595
{
599596
llayer->setCheckState( 0, Qt::Unchecked );
600-
llayer->setData( 0, Qt::UserRole, Qt::Unchecked );
601597
}
602598
blockSignals( false );
603599

@@ -677,7 +673,7 @@ QList<QgsMapLayer *> QgsLegend::selectedLayers()
677673
{
678674
QList<QgsMapLayer *> layers;
679675

680-
foreach( QTreeWidgetItem *item, selectedItems() )
676+
foreach( QTreeWidgetItem * item, selectedItems() )
681677
{
682678
QgsLegendLayer *ll = dynamic_cast<QgsLegendLayer *>( item );
683679
if ( ll )
@@ -803,7 +799,7 @@ bool QgsLegend::writeXML( QDomNode &legendnode, QDomDocument &document )
803799

804800
bool QgsLegend::writeXML( QList<QTreeWidgetItem *> items, QDomNode &node, QDomDocument &document )
805801
{
806-
foreach( QTreeWidgetItem *currentItem, items )
802+
foreach( QTreeWidgetItem * currentItem, items )
807803
{
808804
QgsLegendItem *item = dynamic_cast<QgsLegendItem *>( currentItem );
809805
if ( !item )
@@ -944,17 +940,14 @@ bool QgsLegend::readXML( QgsLegendGroup *parent, const QDomNode &node )
944940
if ( checked == "Qt::Checked" )
945941
{
946942
theGroup->setCheckState( 0, Qt::Checked );
947-
theGroup->setData( 0, Qt::UserRole, Qt::Checked );
948943
}
949944
else if ( checked == "Qt::Unchecked" )
950945
{
951946
theGroup->setCheckState( 0, Qt::Unchecked );
952-
theGroup->setData( 0, Qt::UserRole, Qt::Checked );
953947
}
954948
else if ( checked == "Qt::PartiallyChecked" )
955949
{
956950
theGroup->setCheckState( 0, Qt::PartiallyChecked );
957-
theGroup->setData( 0, Qt::UserRole, Qt::PartiallyChecked );
958951
}
959952
blockSignals( false );
960953

@@ -1070,13 +1063,11 @@ QgsLegendLayer* QgsLegend::readLayerFromXML( QDomElement& childelem, bool& isOpe
10701063
{
10711064
ll->setVisible( true );
10721065
ll->setCheckState( 0, Qt::Checked );
1073-
ll->setData( 0, Qt::UserRole, Qt::Checked );
10741066
}
10751067
else if ( checked == "Qt::Unchecked" )
10761068
{
10771069
ll->setVisible( false );
10781070
ll->setCheckState( 0, Qt::Unchecked );
1079-
ll->setData( 0, Qt::UserRole, Qt::Unchecked );
10801071
}
10811072
blockSignals( false );
10821073

@@ -1535,13 +1526,22 @@ void QgsLegend::handleItemChange( QTreeWidgetItem* item, int row )
15351526
if ( item->data( 0, Qt::UserRole ).toInt() == item->checkState( 0 ) )
15361527
return;
15371528

1529+
saveCheckStates( invisibleRootItem() );
1530+
15381531
bool renderFlagState = mMapCanvas->renderFlag();
15391532
if ( renderFlagState )
15401533
mMapCanvas->setRenderFlag( false );
15411534

1542-
foreach( QTreeWidgetItem *i, selectedItems() )
1535+
if ( !item->isSelected() )
15431536
{
1544-
propagateItemChange( i, item->checkState( 0 ) );
1537+
propagateItemChange( item, item->checkState( 0 ) );
1538+
}
1539+
else
1540+
{
1541+
foreach( QTreeWidgetItem * i, selectedItems() )
1542+
{
1543+
propagateItemChange( i, item->checkState( 0 ) );
1544+
}
15451545
}
15461546

15471547
// update layer set
@@ -1553,6 +1553,16 @@ void QgsLegend::handleItemChange( QTreeWidgetItem* item, int row )
15531553
mMapCanvas->setRenderFlag( true );
15541554
}
15551555

1556+
void QgsLegend::saveCheckStates( QTreeWidgetItem *item )
1557+
{
1558+
for ( int i = 0; i < item->childCount(); i++ )
1559+
{
1560+
QTreeWidgetItem *child = item->child( i );
1561+
child->setData( 0, Qt::UserRole, child->checkState( 0 ) );
1562+
saveCheckStates( child );
1563+
}
1564+
}
1565+
15561566
void QgsLegend::propagateItemChange( QTreeWidgetItem *item, Qt::CheckState state )
15571567
{
15581568
QgsLegendGroup* lg = dynamic_cast<QgsLegendGroup *>( item ); //item is a legend group
@@ -1588,17 +1598,14 @@ void QgsLegend::propagateItemChange( QTreeWidgetItem *item, Qt::CheckState state
15881598
items << lg->child( i );
15891599
}
15901600
}
1591-
1592-
item->setData( 0, Qt::UserRole, state );
15931601
}
15941602

15951603
QgsLegendLayer* ll = dynamic_cast<QgsLegendLayer *>( item ); //item is a legend layer
15961604
if ( ll )
15971605
{
15981606
blockSignals( true );
15991607
ll->setCheckState( 0, state );
1600-
blockSignals( false );
1601-
ll->setData( 0, Qt::UserRole, ll->checkState( 0 ) );
1608+
16021609
if ( ll->layer() )
16031610
{
16041611
ll->setVisible( state == Qt::Checked );
@@ -1608,11 +1615,10 @@ void QgsLegend::propagateItemChange( QTreeWidgetItem *item, Qt::CheckState state
16081615
while ( lg )
16091616
{
16101617
lg->updateCheckState();
1611-
lg->setData( 0, Qt::UserRole, lg->checkState( 0 ) );
16121618
lg = dynamic_cast<QgsLegendGroup*>( lg->parent() );
16131619
}
1614-
//update check state of the legend group
1615-
item->setData( 0, Qt::UserRole, state );
1620+
1621+
blockSignals( false );
16161622
}
16171623
}
16181624

@@ -1820,7 +1826,7 @@ void QgsLegend::removeSelectedLayers()
18201826
if ( renderFlagState )
18211827
mMapCanvas->setRenderFlag( false );
18221828

1823-
foreach( QTreeWidgetItem *item, selectedItems() )
1829+
foreach( QTreeWidgetItem * item, selectedItems() )
18241830
{
18251831
QgsLegendGroup* lg = dynamic_cast<QgsLegendGroup *>( item );
18261832
if ( lg )

src/app/legend/qgslegend.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,9 @@ class QgsLegend : public QTreeWidget
419419
/**QgsLegend does not set the icon with/height to values lower than the minimum icon size*/
420420
QSize mMinimumIconSize;
421421

422+
/** save item check states */
423+
void saveCheckStates( QTreeWidgetItem *item );
424+
422425
/** structure which holds pixmap which are used in legend */
423426
class QgsLegendPixmaps
424427
{

src/app/legend/qgslegendgroup.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
#include <QIcon>
2626

2727
QgsLegendGroup::QgsLegendGroup( QTreeWidgetItem * theItem, QString theName )
28-
: QgsLegendItem( theItem, theName )
28+
: QgsLegendItem( theItem, theName )
2929
{
3030
mType = LEGEND_GROUP;
3131
setFlags( Qt::ItemIsEditable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable );
@@ -34,7 +34,7 @@ QgsLegendGroup::QgsLegendGroup( QTreeWidgetItem * theItem, QString theName )
3434
setIcon( 0, myIcon );
3535
}
3636
QgsLegendGroup::QgsLegendGroup( QTreeWidget* theListView, QString theString )
37-
: QgsLegendItem( theListView, theString )
37+
: QgsLegendItem( theListView, theString )
3838
{
3939
mType = LEGEND_GROUP;
4040
setFlags( Qt::ItemIsEditable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable );
@@ -114,7 +114,7 @@ void QgsLegendGroup::updateCheckState()
114114
return;
115115

116116
Qt::CheckState theState = elements[0]->checkState( 0 );
117-
foreach( QgsLegendItem *li, elements )
117+
foreach( QgsLegendItem * li, elements )
118118
{
119119
if ( theState != li->checkState( 0 ) )
120120
{
@@ -125,8 +125,6 @@ void QgsLegendGroup::updateCheckState()
125125

126126
if ( theState != checkState( 0 ) )
127127
{
128-
treeWidget()->blockSignals( true );
129128
setCheckState( 0, theState );
130-
treeWidget()->blockSignals( false );
131129
}
132130
}

0 commit comments

Comments
 (0)