[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