Skip to content

Commit

Permalink
"Add snapping toggle with 'S' or status bar button
Browse files Browse the repository at this point in the history
This reverts commit d2a691a.
  • Loading branch information
NathanW2 committed Jul 14, 2015
1 parent bef52b0 commit 88bdbf7
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 4 deletions.
2 changes: 2 additions & 0 deletions src/roam/api/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ class _Events(QObject):
openfeatureform = pyqtSignal(object, QgsFeature, bool, bool, object)
deletefeature = pyqtSignal(object, QgsFeature)

snappingChanged = pyqtSignal(bool)

def delete_feature(self, form, feature):
self.deletefeature.emit(form, feature)

Expand Down
35 changes: 31 additions & 4 deletions src/roam/mainwindow.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,14 +179,25 @@ def createSpacer(width=0, height=0):
self.userlabel = QLabel("User: {user}".format(user=getpass.getuser()))
self.positionlabel = QLabel('')
self.gpslabel = QLabel("GPS: Not active")
self.statusbar.addWidget(self.projectlabel)
self.statusbar.addWidget(self.userlabel)
icon = QIcon(":/icons/info")
infobutton = QToolButton()
infobutton.setAutoRaise(True)
infobutton.setMaximumHeight(self.statusbar.height())
infobutton.setIcon(icon)
# self.statusbar.addWidget(infobutton)
self.snappingbutton = QToolButton()
self.snappingbutton.setText("Snapping: On")
self.snappingbutton.setAutoRaise(True)
self.snappingbutton.pressed.connect(self.toggle_snapping)
self.statusbar.addWidget(self.snappingbutton)
# self.statusbar.addWidget(self.projectlabel)
# self.statusbar.addWidget(self.userlabel)
spacer = createSpacer()
spacer2 = createSpacer()
spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
spacer2.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
self.statusbar.addWidget(spacer)
self.statusbar.addWidget(self.positionlabel)
# self.statusbar.addWidget(spacer)
# self.statusbar.addWidget(self.positionlabel)
self.statusbar.addWidget(spacer2)
self.statusbar.addWidget(self.gpslabel)

Expand Down Expand Up @@ -232,6 +243,7 @@ def createSpacer(width=0, height=0):
RoamEvents.selectionchanged.connect(self.showInfoResults)
RoamEvents.show_widget.connect(self.dataentrywidget.add_widget)
RoamEvents.closeProject.connect(self.close_project)
RoamEvents.snappingChanged.connect(self.snapping_changed)

GPS.gpsposition.connect(self.update_gps_label)
GPS.gpsdisconnected.connect(self.gps_disconnected)
Expand All @@ -240,6 +252,21 @@ def createSpacer(width=0, height=0):

self.currentselection = {}

def snapping_changed(self, snapping):
if snapping:
self.snappingbutton.setText("Snapping: On")
else:
self.snappingbutton.setText("Snapping: Off")

def toggle_snapping(self):
try:
tool = self.canvas.mapTool()
tool.toggle_snapping()
snapping = tool.snapping
self.snapping_changed(snapping)
except AttributeError:
pass

def update_scale_from_item(self, index):
scale, _ = self.scalewidget.toDouble(index.data(Qt.DisplayRole))
self.canvas.zoomScale(1.0 / scale)
Expand Down
15 changes: 15 additions & 0 deletions src/roam/maptools/maptools.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

import roam.resources_rc

snapping = True


class RubberBand(QgsRubberBand):
def __init__(self, canvas, geometrytype, width=5, iconsize=20):
Expand Down Expand Up @@ -218,9 +220,19 @@ def __init__(self, canvas):
RoamEvents.selectioncleared.connect(self.selection_updated)
RoamEvents.selectionchanged.connect(self.selection_updated)

self.snapping = snapping

def keyPressEvent(self, event):
if event.key() == Qt.Key_Escape:
self.reset()
if event.key() == Qt.Key_S:
self.toggle_snapping()

def toggle_snapping(self):
self.snapping = not self.snapping
global snapping
snapping = self.snapping
RoamEvents.snappingChanged.emit(snapping)

def selection_updated(self, *args):
if self.editmode:
Expand Down Expand Up @@ -408,6 +420,9 @@ def isEditTool(self):
return True

def snappoint(self, point):
if not self.snapping:
return self.canvas.getCoordinateTransform().toMapCoordinates(point)

try:
_, results = self.snapper.snapToBackgroundLayers(point)
point = results[0].snappedVertex
Expand Down
16 changes: 16 additions & 0 deletions src/roam/maptools/touchtool.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,34 @@
from roam.utils import log
from roam.maptools import maptoolutils

from roam.api import RoamEvents

snapping = True

try:
from qgis.gui import QgsMapToolTouch
maptooltype = QgsMapToolTouch
except ImportError:
maptooltype = QgsMapToolPan


class TouchMapTool(maptooltype):
def __init__(self, canvas):
super(TouchMapTool, self).__init__(canvas)
self.pinching = False
self.canvas = canvas
self.dragging = False
self.snapping = True

def keyPressEvent(self, event):
if event.key() == Qt.Key_S:
self.toggle_snapping()

def toggle_snapping(self):
self.snapping = not self.snapping
global snapping
snapping = self.snapping
RoamEvents.snappingChanged.emit(snapping)

def canvasMoveEvent(self, event):
if not self.pinching and event.buttons() & Qt.LeftButton:
Expand Down

0 comments on commit 88bdbf7

Please sign in to comment.