@@ -504,9 +504,20 @@ void QgsMapCanvas::setExtent( QgsRectangle const & r )
504
504
mLastExtent .removeAt ( i );
505
505
}
506
506
507
-
508
507
mLastExtent .append ( extent () ) ;
508
+
509
+ // adjust history to no more than 20
510
+ if ( mLastExtent .size () > 20 )
511
+ {
512
+ mLastExtent .removeAt ( 0 );
513
+ }
514
+
515
+ // the last item is the current extent
509
516
mLastExtentIndex = mLastExtent .size () - 1 ;
517
+
518
+ // update controls' enabled state
519
+ emit zoomLastStatusChanged ( mLastExtentIndex > 0 );
520
+ emit zoomNextStatusChanged ( mLastExtentIndex < mLastExtent .size () - 1 );
510
521
// notify canvas items of change
511
522
updateCanvasItemPositions ();
512
523
@@ -558,17 +569,20 @@ void QgsMapCanvas::zoomToPreviousExtent()
558
569
return ;
559
570
}
560
571
561
- if ( mLastExtentIndex > 1 )
572
+ if ( mLastExtentIndex > 0 )
562
573
{
563
574
mLastExtentIndex --;
564
575
mMapRenderer ->setExtent ( mLastExtent [mLastExtentIndex ] );
565
576
emit extentsChanged ();
566
577
updateScale ();
567
578
if ( mMapOverview )
568
579
mMapOverview ->drawExtentRect ();
580
+ refresh ();
581
+ // update controls' enabled state
582
+ emit zoomLastStatusChanged ( mLastExtentIndex > 0 );
583
+ emit zoomNextStatusChanged ( mLastExtentIndex < mLastExtent .size () - 1 );
569
584
}
570
585
571
- refresh ();
572
586
} // zoomToPreviousExtent
573
587
574
588
void QgsMapCanvas::zoomToNextExtent ()
@@ -585,10 +599,22 @@ void QgsMapCanvas::zoomToNextExtent()
585
599
updateScale ();
586
600
if ( mMapOverview )
587
601
mMapOverview ->drawExtentRect ();
602
+ refresh ();
603
+ // update controls' enabled state
604
+ emit zoomLastStatusChanged ( mLastExtentIndex > 0 );
605
+ emit zoomNextStatusChanged ( mLastExtentIndex < mLastExtent .size () - 1 );
588
606
}
589
- refresh ();
590
607
}// zoomToNextExtent
591
608
609
+ void QgsMapCanvas::clearExtentHistory ()
610
+ {
611
+ mLastExtent .clear (); // clear the zoom history list
612
+ mLastExtent .append ( extent () ) ; // set the current extent in the list
613
+ mLastExtentIndex = mLastExtent .size () - 1 ;
614
+ // update controls' enabled state
615
+ emit zoomLastStatusChanged ( mLastExtentIndex > 0 );
616
+ emit zoomNextStatusChanged ( mLastExtentIndex < mLastExtent .size () - 1 );
617
+ }// clearExtentHistory
592
618
593
619
594
620
bool QgsMapCanvas::hasCrsTransformEnabled ()
@@ -1340,6 +1366,7 @@ void QgsMapCanvas::readProject( const QDomDocument & doc )
1340
1366
{
1341
1367
QDomNode node = nodes.item ( 0 );
1342
1368
mMapRenderer ->readXML ( node );
1369
+ clearExtentHistory (); // clear the extent history on project load
1343
1370
}
1344
1371
else
1345
1372
{
0 commit comments