@@ -124,6 +124,11 @@ void QgsLegend::removeAll()
124
124
125
125
void QgsLegend::selectAll (bool select)
126
126
{
127
+ if (!mMapCanvas || mMapCanvas ->isDrawing ())
128
+ {
129
+ return ;
130
+ }
131
+
127
132
QTreeWidgetItem* theItem = firstItem ();
128
133
129
134
while (theItem)
@@ -140,6 +145,11 @@ void QgsLegend::selectAll(bool select)
140
145
141
146
void QgsLegend::removeLayer (QString layer_key)
142
147
{
148
+ if (!mMapCanvas || mMapCanvas ->isDrawing ())
149
+ {
150
+ return ;
151
+ }
152
+
143
153
QTreeWidgetItem* theItem = firstItem ();
144
154
#ifdef QGISDEBUG
145
155
qWarning (" in QgsLegend::removeLayer" );
@@ -371,20 +381,24 @@ void QgsLegend::mouseReleaseEvent(QMouseEvent * e)
371
381
372
382
void QgsLegend::mouseDoubleClickEvent (QMouseEvent* e)
373
383
{
384
+ if (!mMapCanvas || mMapCanvas ->isDrawing ())
385
+ {
386
+ return ;
387
+ }
374
388
legendLayerShowProperties ();
375
389
}
376
390
377
391
void QgsLegend::handleRightClickEvent (QTreeWidgetItem* item, const QPoint& position)
378
392
{
393
+ if (!mMapCanvas || mMapCanvas ->isDrawing ())
394
+ {
395
+ return ;
396
+ }
397
+
379
398
QMenu theMenu;
380
399
381
400
QString iconsPath = QgsApplication::themePath ();
382
401
383
- if (mMapCanvas ->isDrawing ())
384
- {
385
- return ;
386
- }
387
-
388
402
QgsLegendItem* li = dynamic_cast <QgsLegendItem*>(item);
389
403
if (li)
390
404
{
@@ -446,6 +460,11 @@ int QgsLegend::getItemPos(QTreeWidgetItem* item)
446
460
447
461
void QgsLegend::addLayer ( QgsMapLayer * layer )
448
462
{
463
+ if (!mMapCanvas || mMapCanvas ->isDrawing ())
464
+ {
465
+ return ;
466
+ }
467
+
449
468
QgsLegendLayer * llayer = new QgsLegendLayer (layer->name ());// generate entry for mStateOfCheckBoxes below
450
469
QgsLegendLayerFileGroup * llfgroup = new QgsLegendLayerFileGroup (llayer,QString (" Files" ));
451
470
QgsLegendLayerFile * llfile = new QgsLegendLayerFile (llfgroup, QgsLegendLayerFile::nameFromLayer (layer), layer);
@@ -535,6 +554,11 @@ QgsMapLayer* QgsLegend::currentLayer()
535
554
536
555
void QgsLegend::legendGroupRemove ()
537
556
{
557
+ if (!mMapCanvas || mMapCanvas ->isDrawing ())
558
+ {
559
+ return ;
560
+ }
561
+
538
562
QgsLegendGroup* lg = dynamic_cast <QgsLegendGroup*>(currentItem ());
539
563
if (lg)
540
564
{
@@ -553,6 +577,11 @@ void QgsLegend::legendGroupRemove()
553
577
554
578
void QgsLegend::legendLayerRemove ()
555
579
{
580
+ if (!mMapCanvas || mMapCanvas ->isDrawing ())
581
+ {
582
+ return ;
583
+ }
584
+
556
585
// if the current item is a legend layer: remove all layers of the current legendLayer
557
586
QgsLegendLayer* ll = dynamic_cast <QgsLegendLayer*>(currentItem ());
558
587
if (ll)
@@ -572,14 +601,12 @@ void QgsLegend::legendLayerRemove()
572
601
// remove the layer
573
602
if (*it)
574
603
{
604
+ // the map layer registry emits a signal an this will remove the legend layer
605
+ // from the legend and from memory by calling QgsLegend::removeLayer(QString layer key)
575
606
QgsMapLayerRegistry::instance ()->removeMapLayer ((*it)->getLayerID ());
576
607
}
577
608
}
578
609
579
- if (maplayers.size ()>0 )
580
- {
581
- mMapCanvas ->refresh ();
582
- }
583
610
removeItem (ll);
584
611
delete ll;
585
612
adjustIconSize ();
@@ -604,6 +631,11 @@ void QgsLegend::legendLayerRemove()
604
631
605
632
void QgsLegend::legendLayerShowProperties ()
606
633
{
634
+ if (!mMapCanvas || mMapCanvas ->isDrawing ())
635
+ {
636
+ return ;
637
+ }
638
+
607
639
QgsLegendItem* li = dynamic_cast <QgsLegendItem*>(currentItem ());
608
640
QgsLegendLayerFile* llf = 0 ;
609
641
@@ -679,6 +711,11 @@ void QgsLegend::legendLayerShowProperties()
679
711
680
712
void QgsLegend::legendLayerShowInOverview ()
681
713
{
714
+ if (!mMapCanvas || mMapCanvas ->isDrawing ())
715
+ {
716
+ return ;
717
+ }
718
+
682
719
QgsLegendItem* li = dynamic_cast <QgsLegendItem*>(currentItem ());
683
720
if (!li)
684
721
return ;
@@ -1585,6 +1622,7 @@ void QgsLegend::handleItemChange(QTreeWidgetItem* item, int row)
1585
1622
// set all the child layer files to the new check state
1586
1623
subfiles = ll->legendLayerFiles ();
1587
1624
bool renderFlagState = mMapCanvas ->renderFlag ();
1625
+ mMapCanvas ->freeze (true );
1588
1626
mMapCanvas ->setRenderFlag (false );
1589
1627
for (std::list<QgsLegendLayerFile*>::iterator iter = subfiles.begin (); iter != subfiles.end (); ++iter)
1590
1628
{
@@ -1605,7 +1643,10 @@ void QgsLegend::handleItemChange(QTreeWidgetItem* item, int row)
1605
1643
// If it was on, turn it back on, otherwise leave it
1606
1644
// off, as turning it on causes a refresh.
1607
1645
if (renderFlagState)
1608
- mMapCanvas ->setRenderFlag (true );
1646
+ {
1647
+ mMapCanvas ->setRenderFlag (true );
1648
+ }
1649
+ mMapCanvas ->freeze (false );
1609
1650
// update check state of the legend group
1610
1651
mStateOfCheckBoxes [item] = item->checkState (0 );
1611
1652
}
@@ -1752,6 +1793,10 @@ void QgsLegend::legendLayerZoomNative()
1752
1793
1753
1794
void QgsLegend::legendLayerAttributeTable ()
1754
1795
{
1796
+ if (!mMapCanvas || mMapCanvas ->isDrawing ())
1797
+ {
1798
+ return ;
1799
+ }
1755
1800
1756
1801
// try whether it's a legend layer
1757
1802
QgsLegendLayer* ll = dynamic_cast <QgsLegendLayer*>(currentItem ());
0 commit comments