[QGIS Commit] r12279 - in trunk/qgis: python/gui src/app src/app/legend src/gui

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sat Nov 28 16:20:17 EST 2009


Author: mhugent
Date: 2009-11-28 16:20:16 -0500 (Sat, 28 Nov 2009)
New Revision: 12279

Modified:
   trunk/qgis/python/gui/qgsmapcanvas.sip
   trunk/qgis/src/app/legend/qgslegend.cpp
   trunk/qgis/src/app/qgisapp.cpp
   trunk/qgis/src/gui/qgsmapcanvas.cpp
   trunk/qgis/src/gui/qgsmapcanvas.h
Log:
Apply patch #1716 (improvements to ZoomLast, ZoomNext tools) from Smizuno

Modified: trunk/qgis/python/gui/qgsmapcanvas.sip
===================================================================
--- trunk/qgis/python/gui/qgsmapcanvas.sip	2009-11-28 20:51:36 UTC (rev 12278)
+++ trunk/qgis/python/gui/qgsmapcanvas.sip	2009-11-28 21:20:16 UTC (rev 12279)
@@ -93,6 +93,9 @@
     //! Zoom to the next extent (view)
     void zoomToNextExtent();
 
+    // ! Clears the list of extents and sets current extent as first item
+    void clearExtentHistory();
+ 
     /** Zoom to the extent of the selected features of current (vector) layer.
       Added in version 1.2: optionally specify different than current layer */
     void zoomToSelected(QgsVectorLayer* layer = NULL);
@@ -257,6 +260,14 @@
     //! Emit map tool changed event
     void mapToolSet(QgsMapTool *tool);
 
+    //! Emitted when zoom last status changed
+    //! @note: this signal was added in version 1.4
+    void zoomLastStatusChanged( bool );
+
+    //! Emitted when zoom next status changed
+    //! @note: this signal was added in version 1.4
+    void zoomNextStatusChanged( bool );
+
   protected:
 
     //! Overridden key press event

Modified: trunk/qgis/src/app/legend/qgslegend.cpp
===================================================================
--- trunk/qgis/src/app/legend/qgslegend.cpp	2009-11-28 20:51:36 UTC (rev 12278)
+++ trunk/qgis/src/app/legend/qgslegend.cpp	2009-11-28 21:20:16 UTC (rev 12279)
@@ -516,7 +516,10 @@
 
   // first layer?
   if ( mMapCanvas->layerCount() == 1 )
+  {
     mMapCanvas->zoomToFullExtent();
+    mMapCanvas->clearExtentHistory();
+  }
   setCurrentItem( llayer );
   //make the QTreeWidget item up-to-date
   doItemsLayout();

Modified: trunk/qgis/src/app/qgisapp.cpp
===================================================================
--- trunk/qgis/src/app/qgisapp.cpp	2009-11-28 20:51:36 UTC (rev 12278)
+++ trunk/qgis/src/app/qgisapp.cpp	2009-11-28 21:20:16 UTC (rev 12279)
@@ -466,6 +466,7 @@
   QgsDebugMsg( QgsApplication::showSettings() );
   QgsDebugMsg( "\n--------------------------\n\n\n" );
   mMapCanvas->freeze( false );
+  mMapCanvas->clearExtentHistory(); // reset zoomnext/zoomlast
   mLastComposerId = 0;
 } // QgisApp ctor
 
@@ -1802,6 +1803,10 @@
   connect( mActionRedo, SIGNAL( triggered() ), mUndoWidget, SLOT( redo() ) );
   connect( mUndoWidget, SIGNAL( undoStackChanged() ), this, SLOT( updateUndoActions() ) );
 
+  // Connect status from ZoomLast/ZoomNext to corresponding action
+  connect( mMapCanvas, SIGNAL( zoomLastStatusChanged( bool ) ), mActionZoomLast, SLOT( setEnabled( bool ) ) );
+  connect( mMapCanvas, SIGNAL( zoomNextStatusChanged( bool ) ), mActionZoomNext, SLOT( setEnabled( bool ) ) );
+
   // Monitor change of project path
   connect( QgsProject::instance(), SIGNAL( readProject( const QDomDocument & ) ),
            this, SLOT( projectChanged( const QDomDocument & ) ) );
@@ -3193,6 +3198,7 @@
 
   mMapCanvas->freeze( false );
   mMapCanvas->refresh();
+  mMapCanvas->clearExtentHistory();
 
   mMapCanvas->mapRenderer()->setProjectionsEnabled( FALSE );
 

Modified: trunk/qgis/src/gui/qgsmapcanvas.cpp
===================================================================
--- trunk/qgis/src/gui/qgsmapcanvas.cpp	2009-11-28 20:51:36 UTC (rev 12278)
+++ trunk/qgis/src/gui/qgsmapcanvas.cpp	2009-11-28 21:20:16 UTC (rev 12279)
@@ -504,9 +504,20 @@
     mLastExtent.removeAt( i );
   }
 
+  mLastExtent.append( extent() ) ;
 
-  mLastExtent.append( extent() ) ;
+  // adjust history to no more than 20
+  if ( mLastExtent.size() > 20 )
+  {
+    mLastExtent.removeAt( 0 );
+  }
+
+  // the last item is the current extent
   mLastExtentIndex = mLastExtent.size() - 1;
+
+  // update controls' enabled state
+  emit zoomLastStatusChanged( mLastExtentIndex > 0 );
+  emit zoomNextStatusChanged( mLastExtentIndex < mLastExtent.size() - 1 );
   // notify canvas items of change
   updateCanvasItemPositions();
 
@@ -558,7 +569,7 @@
     return;
   }
 
-  if ( mLastExtentIndex > 1 )
+  if ( mLastExtentIndex > 0 )
   {
     mLastExtentIndex--;
     mMapRenderer->setExtent( mLastExtent[mLastExtentIndex] );
@@ -566,9 +577,12 @@
     updateScale();
     if ( mMapOverview )
       mMapOverview->drawExtentRect();
+    refresh();
+    // update controls' enabled state
+    emit zoomLastStatusChanged( mLastExtentIndex > 0 );
+    emit zoomNextStatusChanged( mLastExtentIndex < mLastExtent.size() - 1 );
   }
 
-  refresh();
 } // zoomToPreviousExtent
 
 void QgsMapCanvas::zoomToNextExtent()
@@ -585,10 +599,22 @@
     updateScale();
     if ( mMapOverview )
       mMapOverview->drawExtentRect();
+    refresh();
+    // update controls' enabled state
+    emit zoomLastStatusChanged( mLastExtentIndex > 0 );
+    emit zoomNextStatusChanged( mLastExtentIndex < mLastExtent.size() - 1 );
   }
-  refresh();
 }// zoomToNextExtent
 
+void QgsMapCanvas::clearExtentHistory()
+{
+  mLastExtent.clear(); // clear the zoom history list
+  mLastExtent.append( extent() ) ; // set the current extent in the list
+  mLastExtentIndex = mLastExtent.size() - 1;
+  // update controls' enabled state
+  emit zoomLastStatusChanged( mLastExtentIndex > 0 );
+  emit zoomNextStatusChanged( mLastExtentIndex < mLastExtent.size() - 1 );
+}// clearExtentHistory
 
 
 bool QgsMapCanvas::hasCrsTransformEnabled()
@@ -1340,6 +1366,7 @@
   {
     QDomNode node = nodes.item( 0 );
     mMapRenderer->readXML( node );
+    clearExtentHistory(); // clear the extent history on project load
   }
   else
   {

Modified: trunk/qgis/src/gui/qgsmapcanvas.h
===================================================================
--- trunk/qgis/src/gui/qgsmapcanvas.h	2009-11-28 20:51:36 UTC (rev 12278)
+++ trunk/qgis/src/gui/qgsmapcanvas.h	2009-11-28 21:20:16 UTC (rev 12279)
@@ -147,6 +147,9 @@
     //! Zoom to the Next extent (view)
     void zoomToNextExtent();
 
+    // ! Clears the list of extents and sets current extent as first item
+    void clearExtentHistory();
+
     /** Zoom to the extent of the selected features of current (vector) layer.
       Added in version 1.2: optionally specify different than current layer */
     void zoomToSelected( QgsVectorLayer* layer = NULL );
@@ -321,6 +324,14 @@
     //! Emitted when selection in any layer gets changed
     void selectionChanged( QgsMapLayer * layer );
 
+    //! Emitted when zoom last status changed
+    //! @note: this signal was added in version 1.4
+    void zoomLastStatusChanged( bool );
+
+    //! Emitted when zoom next status changed
+    //! @note: this signal was added in version 1.4
+    void zoomNextStatusChanged( bool );
+
   protected:
     //! Overridden key press event
     void keyPressEvent( QKeyEvent * e );



More information about the QGIS-commit mailing list