소스 검색

wxGUI/mapswipe: add text label with map name

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@54224 15284696-431f-4ddb-bdfa-cd5b030d7da7
Anna Petrášová 12 년 전
부모
커밋
65f8713756

+ 7 - 0
gui/wxpython/gui_core/mapdisp.py

@@ -564,7 +564,14 @@ class DoubleMapFrame(MapFrameBase):
         self._preparePan(mapWindow = win)
         
     def OnPointer(self, event):
+        """!Set pointer mode (dragging overlays)"""
+        toolbar = self.GetMapToolbar()
+        self.SwitchTool(toolbar, event)
+
         self.GetFirstWindow().mouse['use'] = 'pointer'
+        self.GetFirstWindow().SetCursor(self.cursors["default"])
+        self.GetSecondWindow().mouse['use'] = 'pointer'
+        self.GetSecondWindow().SetCursor(self.cursors["default"])
 
     def OnRender(self, event):
         """!Re-render map composition (each map layer)

+ 8 - 7
gui/wxpython/mapdisp/mapwindow.py

@@ -796,14 +796,14 @@ class BufferedWindow(MapWindow, wx.Window):
         self.dragimg.DoDrawImage(dc, moveto)
         self.dragimg.EndDrag()
         
-    def DragItem(self, id, event):
+    def DragItem(self, id, coords):
         """!Drag an overlay decoration item
         """
         if id == 99 or id == '' or id == None: return
         Debug.msg (5, "BufferedWindow.DragItem(): id=%d" % id)
         x, y = self.lastpos
-        dx = event.GetX() - x
-        dy = event.GetY() - y
+        dx = coords[0] - x
+        dy = coords[1] - y
         self.pdc.SetBackground(wx.Brush(self.GetBackgroundColour()))
         r = self.pdc.GetIdBounds(id)
         
@@ -826,7 +826,7 @@ class BufferedWindow(MapWindow, wx.Window):
         r = r.Union(r2)
         r.Inflate(4,4)
         self.RefreshRect(r, False)
-        self.lastpos = (event.GetX(), event.GetY())
+        self.lastpos = (coords[0], coords[1])
                 
     def MouseDraw(self, pdc = None, begin = None, end = None):
         """!Mouse box or line from 'begin' to 'end'
@@ -1083,7 +1083,8 @@ class BufferedWindow(MapWindow, wx.Window):
         elif (self.mouse['use'] == 'pointer' and 
                 not digitToolbar and 
                 self.dragid != None):
-            self.DragItem(self.dragid, event)
+            coords = event.GetPositionTuple()
+            self.DragItem(self.dragid, coords)
         
         # dragging anything else - rubber band box or line
         else:
@@ -1128,13 +1129,13 @@ class BufferedWindow(MapWindow, wx.Window):
         
         elif self.mouse['use'] == 'pointer':
             # get decoration or text id
-            self.idlist = []
+            idlist = []
             self.dragid = ''
             self.lastpos = self.mouse['begin']
             idlist = self.pdc.FindObjects(self.lastpos[0], self.lastpos[1],
                                           self.hitradius)
             if 99 in idlist:
-                idlist.remove(99)                             
+                idlist.remove(99)
             if idlist != []:
                 self.dragid = idlist[0] #drag whatever is on top
         else:

+ 15 - 0
gui/wxpython/mapswipe/frame.py

@@ -314,6 +314,7 @@ class SwipeMapFrame(DoubleMapFrame):
                     message += _("Map <%s> not found.") % maps[1]
                 GError(parent = self, message = message)
                 dlg.Destroy()
+            self.SetRasterNames()
             self.ZoomToMap()
 
         dlg.Destroy()
@@ -452,6 +453,20 @@ class SwipeMapFrame(DoubleMapFrame):
         self._mgr.Update()
         splitter.OnSashChanged(None)
         self.OnSize(None)
+        self.SetRasterNames()
+
+    def OnAddText(self, event):
+        """!Double click on text overlay
+
+        So far not implemented.
+        """
+        pass
+
+    def SetRasterNames(self):
+        if self.rasters['first']:
+            self.GetFirstWindow().SetRasterNameText(self.rasters['first'], 101)
+        if self.rasters['second']:
+            self.GetSecondWindow().SetRasterNameText(self.rasters['second'], 102)
 
     def GetMapToolbar(self):
         """!Returns toolbar with zooming tools"""

+ 2 - 0
gui/wxpython/mapswipe/g.gui.mapswipe.py

@@ -80,6 +80,8 @@ def main():
     if second:
         frame.SetSecondRaster(second)
 
+    frame.SetRasterNames()
+    frame.ZoomToMap()
     frame.Show()
 
     app.MainLoop()

+ 39 - 1
gui/wxpython/mapswipe/mapwindow.py

@@ -119,6 +119,38 @@ class SwipeBufferedWindow(BufferedWindow):
 
         return super(SwipeBufferedWindow, self).Draw(pdc, img, drawid, pdctype, coords)
         
+    def OnLeftDown(self, event):
+        """!Left mouse button pressed.
+
+        In case of 'pointer' mode, coordinates must be adjusted.
+        """
+        if self.mouse['use'] == 'pointer':
+            evX, evY = event.GetPositionTuple()[:]
+            imX, imY = self.GetImageCoords()
+            self.lastpos = evX + imX, evY + imY
+            # get decoration or text id
+            self.dragid = None
+            idlist = self.pdc.FindObjects(self.lastpos[0], self.lastpos[1],
+                                          self.hitradius)
+            if 99 in idlist:
+                idlist.remove(99)
+            if idlist:
+                self.dragid = idlist[0] #drag whatever is on top
+        else:
+            super(SwipeBufferedWindow, self).OnLeftDown(event)
+
+    def OnDragging(self, event):
+        """!Mouse dragging - overlay (text) is moving.
+
+        Coordinates must be adjusted.
+        """
+        if (self.mouse['use'] == 'pointer' and self.dragid != None):
+            evX, evY = event.GetPositionTuple()
+            imX, imY = self.GetImageCoords()
+            self.DragItem(self.dragid, (evX + imX, evY + imY))
+        else:
+            super(SwipeBufferedWindow, self).OnDragging(event)
+
     def TranslateImage(self, dx, dy):
         """!Translate image and redraw.
         """
@@ -126,7 +158,13 @@ class SwipeBufferedWindow(BufferedWindow):
 
         self.pdc.TranslateId(self.imageId, dx, dy)
         self.Refresh()
-        
+
+    def SetRasterNameText(self, name, textId):
+        """!Sets text label with map name."""
+        self.textdict[textId] = {'bbox': wx.Rect(), 'coords': [10, 10],
+                                 'font': self.GetFont(), 'color': wx.BLACK,
+                                 'rotation': 0, 'text': name,
+                                 'active': True}
 
     def MouseActions(self, event):
         """!Handle mouse events and if needed let parent frame know"""

+ 3 - 0
gui/wxpython/mapswipe/toolbars.py

@@ -58,6 +58,9 @@ class SwipeMapToolbar(BaseToolbar):
                                      ("erase", icons["erase"],
                                       self.parent.OnErase),
                                      (None, ), # creates separator
+                                     ("pointer", icons["pointer"],
+                                      self.parent.OnPointer,
+                                      wx.ITEM_CHECK),
                                      ("pan", icons["pan"],
                                       self.parent.OnPan,
                                       wx.ITEM_CHECK), # toggle tool

+ 5 - 5
gui/wxpython/nviz/mapwindow.py

@@ -693,7 +693,7 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
                 
         if self.mouse['use'] == 'pointer':
             if self.dragid > 0:
-                self.DragItem(self.dragid, event)
+                self.DragItem(self.dragid, event.GetPositionTuple())
             
         if self.mouse['use'] == 'rotate':    
             dx, dy = event.GetX() - self.mouse['tmp'][0], event.GetY() - self.mouse['tmp'][1]
@@ -909,14 +909,14 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
             self.render['quick'] = True
             self.Refresh(False)
             
-    def DragItem(self, id, event):
+    def DragItem(self, id, coords):
         """!Drag an overlay decoration item
         """
         if not id: return
         Debug.msg (5, "GLWindow.DragItem(): id=%d" % id)
         x, y = self.mouse['tmp']
-        dx = event.GetX() - x
-        dy = event.GetY() - y
+        dx = coords[0] - x
+        dy = coords[1] - y
         for texture in self.imagelist:
             if texture.id == id:
                 texture.MoveTexture(dx, dy)
@@ -925,7 +925,7 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
         self.render['quick'] = True
         self.Refresh(False)
         
-        self.mouse['tmp'] = (event.GetX(), event.GetY()) 
+        self.mouse['tmp'] = coords
         
     def ZoomBack(self):
         """!Set previous view in history list