Skip to content

Commit 80f85ce

Browse files
author
mhugent
committed
prevent changing of the current item after removing/inserting symbology items
git-svn-id: http://svn.osgeo.org/qgis/trunk@5009 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 3e46f18 commit 80f85ce

File tree

1 file changed

+19
-22
lines changed

1 file changed

+19
-22
lines changed

src/legend/qgslegend.cpp

+19-22
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,10 @@ QgsLegend::QgsLegend(QgisApp* app, QWidget * parent, const char *name)
6363
this, SLOT(handleItemChange(QTreeWidgetItem*, int)));
6464

6565
connect( this, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)),
66-
this, SLOT(handleCurrentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)));
66+
this, SLOT(handleCurrentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)));
67+
6768

68-
setSortingEnabled(false);
69+
setSortingEnabled(false);
6970
setDragEnabled(false);
7071
setAutoScroll(true);
7172
QFont f("Arial", 10, QFont::Normal);
@@ -509,32 +510,22 @@ void QgsLegend::addLayer( QgsMapLayer * layer )
509510
QgsMapLayer* QgsLegend::currentLayer()
510511
{
511512
QgsLegendItem* citem=dynamic_cast<QgsLegendItem*>(currentItem());
512-
/*
513-
// XXX commented out because QGIS crashed when switching projects [MD]
514-
QList<QTreeWidgetItem*> selItems = selectedItems();
515-
if(selItems.size() > 1)
516-
{
517-
return 0;
518-
}
519-
QList<QTreeWidgetItem*>::iterator it = selItems.begin();
520-
QgsLegendItem* citem=dynamic_cast<QgsLegendItem*>(*it);
521-
*/
522-
523-
if(citem)
513+
514+
if(citem)
524515
{
525-
QgsLegendLayerFile* llf=dynamic_cast<QgsLegendLayerFile*>(citem);
526-
if(llf)
516+
QgsLegendLayerFile* llf=dynamic_cast<QgsLegendLayerFile*>(citem);
517+
if(llf)
527518
{
528519
return llf->layer(); //the current item is itself a legend layer file
529520
}
530-
else
521+
else
531522
{
532-
QgsLegendLayer* ll = dynamic_cast<QgsLegendLayer*>(citem);
533-
if(ll)
523+
QgsLegendLayer* ll = dynamic_cast<QgsLegendLayer*>(citem);
524+
if(ll)
534525
{
535526
return ll->firstMapLayer(); //the current item is a legend layer, so return its first layer
536527
}
537-
else
528+
else
538529
{
539530
QgsLegendLayer* lpl = dynamic_cast<QgsLegendLayer*>(citem->parent());
540531
if(lpl)
@@ -548,9 +539,9 @@ QgsMapLayer* QgsLegend::currentLayer()
548539
}
549540
}
550541
}
551-
else
542+
else
552543
{
553-
return 0;
544+
return 0;
554545
}
555546
}
556547

@@ -1268,6 +1259,9 @@ void QgsLegend::changeSymbologySettings(const QString& key, const std::list< std
12681259
{
12691260
return;
12701261
}
1262+
1263+
//store the current item
1264+
QTreeWidgetItem* theCurrentItem = currentItem();
12711265

12721266
//remove the symbology items under the legend layer
12731267
for(int i = theLegendLayer->childCount(); i >= 0; --i)
@@ -1296,6 +1290,9 @@ void QgsLegend::changeSymbologySettings(const QString& key, const std::list< std
12961290

12971291
//copy the legend settings for the other layer files in the same legend layer
12981292
theLegendLayer->updateLayerSymbologySettings(theMapLayer);
1293+
1294+
//restore the current item again
1295+
setCurrentItem(theCurrentItem);
12991296
}
13001297

13011298
void QgsLegend::handleItemChange(QTreeWidgetItem* item, int row)

0 commit comments

Comments
 (0)