[QGIS Commit] r8656 - in trunk/qgis/src: app gui

svn_qgis at osgeo.org svn_qgis at osgeo.org
Wed Jun 18 13:26:13 EDT 2008


Author: jef
Date: 2008-06-18 13:26:13 -0400 (Wed, 18 Jun 2008)
New Revision: 8656

Modified:
   trunk/qgis/src/app/qgisapp.cpp
   trunk/qgis/src/app/qgsmaptooledit.h
   trunk/qgis/src/gui/qgsmapcanvas.cpp
   trunk/qgis/src/gui/qgsmapcanvas.h
   trunk/qgis/src/gui/qgsmaptool.cpp
   trunk/qgis/src/gui/qgsmaptool.h
Log:
fix #958

Modified: trunk/qgis/src/app/qgisapp.cpp
===================================================================
--- trunk/qgis/src/app/qgisapp.cpp	2008-06-18 15:21:09 UTC (rev 8655)
+++ trunk/qgis/src/app/qgisapp.cpp	2008-06-18 17:26:13 UTC (rev 8656)
@@ -4750,8 +4750,6 @@
       // only process vector layers
       if ( mypLayer->type() == QgsMapLayer::VECTOR )
       {
-
-
         // Show the maptip if the maptips button is depressed
         if(mMapTipsVisible)
         {
@@ -4849,6 +4847,8 @@
     return;
   }
 
+  mMapCanvas->restoreMapTool();
+
   mActionToggleEditing->setEnabled(true);
   mActionRemoveLayer->setEnabled(true);
   mActionInOverview->setEnabled(true);

Modified: trunk/qgis/src/app/qgsmaptooledit.h
===================================================================
--- trunk/qgis/src/app/qgsmaptooledit.h	2008-06-18 15:21:09 UTC (rev 8655)
+++ trunk/qgis/src/app/qgsmaptooledit.h	2008-06-18 17:26:13 UTC (rev 8656)
@@ -29,6 +29,8 @@
  public:
   QgsMapToolEdit(QgsMapCanvas* canvas);
   virtual ~QgsMapToolEdit();
+
+  virtual bool isEditTool() { return true; }
   
  protected:
   /**Snapper object that reads the settings from project and option

Modified: trunk/qgis/src/gui/qgsmapcanvas.cpp
===================================================================
--- trunk/qgis/src/gui/qgsmapcanvas.cpp	2008-06-18 15:21:09 UTC (rev 8655)
+++ trunk/qgis/src/gui/qgsmapcanvas.cpp	2008-06-18 17:26:13 UTC (rev 8656)
@@ -87,6 +87,7 @@
   mMapOverview = NULL;
   mMapTool = NULL;
   mLastNonZoomMapTool = NULL;
+  mNonEditMapTool = NULL;
   
   mDrawing = false;
   mFrozen = false;
@@ -959,7 +960,7 @@
   {
     mLastNonZoomMapTool = NULL;
   }
-  
+
   // set new map tool and activate it
   mMapTool = tool;
   if (mMapTool)
@@ -967,6 +968,24 @@
 
 } // setMapTool
 
+void QgsMapCanvas::restoreMapTool()
+{
+  if( !mMapTool )
+    return;
+  
+  if( !mMapTool->isEditTool() )
+  {
+    mNonEditMapTool = mMapTool;
+    return;
+  }
+
+  if ( mCurrentLayer && !mCurrentLayer->isEditable() )
+  {
+    setMapTool(mNonEditMapTool);
+  }
+}
+
+
 void QgsMapCanvas::unsetMapTool(QgsMapTool* tool)
 {
   if (mMapTool && mMapTool == tool)

Modified: trunk/qgis/src/gui/qgsmapcanvas.h
===================================================================
--- trunk/qgis/src/gui/qgsmapcanvas.h	2008-06-18 15:21:09 UTC (rev 8655)
+++ trunk/qgis/src/gui/qgsmapcanvas.h	2008-06-18 17:26:13 UTC (rev 8656)
@@ -234,6 +234,8 @@
     //! zooms with the factor supplied. Factor > 1 zooms in
     void zoom(double scaleFactor);
 
+    //! restore tool on toggle editing
+    void restoreMapTool();
 
   public slots:
 
@@ -299,7 +301,7 @@
 
     //! Emit key release event
     void keyReleased(QKeyEvent * e);
-    
+
 protected:
     //! Overridden key press event
     void keyPressEvent(QKeyEvent * e);
@@ -398,6 +400,9 @@
     //! previous tool if current is for zooming/panning
     QgsMapTool* mLastNonZoomMapTool;
 
+    //! tool to restore when editing is toggled.
+    QgsMapTool* mNonEditMapTool;
+
     //! recently used extent
     QgsRect mLastExtent;
     

Modified: trunk/qgis/src/gui/qgsmaptool.cpp
===================================================================
--- trunk/qgis/src/gui/qgsmaptool.cpp	2008-06-18 15:21:09 UTC (rev 8655)
+++ trunk/qgis/src/gui/qgsmaptool.cpp	2008-06-18 17:26:13 UTC (rev 8656)
@@ -141,6 +141,11 @@
   return false;
 }
 
+bool QgsMapTool::isEditTool()
+{
+  return false;
+}
+
 QgsMapCanvas* QgsMapTool::canvas()
 {
   return mCanvas;

Modified: trunk/qgis/src/gui/qgsmaptool.h
===================================================================
--- trunk/qgis/src/gui/qgsmaptool.h	2008-06-18 15:21:09 UTC (rev 8655)
+++ trunk/qgis/src/gui/qgsmaptool.h	2008-06-18 17:26:13 UTC (rev 8656)
@@ -78,7 +78,13 @@
      * If it does, we will be able to perform the zoom  and then 
      * resume operations with the original / previously used tool.*/
     virtual bool isZoomTool();
-    
+ 
+    /** Check whether this MapTool performs an edit operation.
+     * If it does, we will deactivate it when editing is turned off and
+     * reactivate it when editing is turned back on.
+     */
+    virtual bool isEditTool();
+
     //! called when set as currently active map tool
     virtual void activate();
     



More information about the QGIS-commit mailing list