浏览代码

wxGUI/layertree: move method from mapwindow to layertree (co-author: wenzeslaus)

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@54034 15284696-431f-4ddb-bdfa-cd5b030d7da7
Anna Petrášová 12 年之前
父节点
当前提交
39328e708d

+ 0 - 46
gui/wxpython/gui_core/mapwindow.py

@@ -275,49 +275,3 @@ class MapWindow(object):
             return self.tree.GetLayerInfo(item, key = 'nviz')
             return self.tree.GetLayerInfo(item, key = 'nviz')
         
         
         return item
         return item
-        
-    def GetSelectedLayer(self, type = 'layer', multi = False):
-        """!Get selected layer from layer tree
-        
-        @param type 'item' / 'layer' / 'nviz'
-        @param multi return first selected layer or all
-        
-        @return layer / map layer properties / nviz properties
-        @return None / [] on failure
-        """
-        ret = []
-        if not self.tree or \
-                not self.tree.GetSelection():
-            if multi:
-                return []
-            else:
-                return None
-        
-        if multi and \
-                type == 'item':
-            return self.tree.GetSelections()
-        
-        for item in self.tree.GetSelections():
-            if not item.IsChecked():
-                if multi:
-                    continue
-                else:
-                    return None
-
-            if type == 'item': # -> multi = False
-                return item
-        
-            try:
-                if type == 'nviz':
-                    layer = self.tree.GetLayerInfo(item, key = 'nviz')
-                else:
-                    layer = self.tree.GetLayerInfo(item, key = 'maplayer')
-            except:
-                layer = None
-
-            if multi:
-                ret.append(layer)
-            else:
-                return layer
-            
-        return ret

+ 28 - 8
gui/wxpython/lmgr/layertree.py

@@ -240,24 +240,44 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         self.Bind(wx.EVT_IDLE,                  self.OnIdle)
         self.Bind(wx.EVT_IDLE,                  self.OnIdle)
         self.Bind(wx.EVT_MOTION,                self.OnMotion)
         self.Bind(wx.EVT_MOTION,                self.OnMotion)
 
 
-    def GetSelectedLayer(self):
+    def _getSelectedLayer(self):
         """!Get selected layer.
         """!Get selected layer.
 
 
         @return None if no layer selected
         @return None if no layer selected
         @return first layer (GenericTreeItem instance) of all selected
         @return first layer (GenericTreeItem instance) of all selected
         """
         """
-        layers = self.GetSelections()
-        if len(layers) >= 1:
-            return layers[0]
-        return None
+        return self.GetSelectedLayer(multi = False, checkedOnly = False)
 
 
     # for compatibility
     # for compatibility
-    layer_selected = property(fget = GetSelectedLayer)
+    layer_selected = property(fget = _getSelectedLayer)
 
 
-    def GetSelectedLayers(self):
+    def GetSelectedLayers(self, checkedOnly = False):
         """!Get selected layers as a list.
         """!Get selected layers as a list.
         """
         """
-        return self.GetSelections()
+        return self.GetSelectedLayers(multi = True, checkedOnly = False)
+
+    def GetSelectedLayer(self, multi = False, checkedOnly = False):
+        """!Get selected layer from layer tree.
+        
+        @param multi return multiple selection as a list
+        @param checkedOnly return only the checked layers
+
+        @return None or [] for multi == True if no layer selected 
+        @return first layer (GenericTreeItem instance) of all selected or a list
+        """
+        ret = []
+        layers = self.GetSelections()
+
+        for layer in layers:
+            if not checkedOnly or (checkedOnly and layer.IsChecked()):
+                ret.append(layer)
+        if multi:
+            return ret
+
+        if ret:
+            return ret[0]
+
+        return None
 
 
     def _setGradient(self, iType = None):
     def _setGradient(self, iType = None):
         """!Set gradient for items
         """!Set gradient for items

+ 5 - 4
gui/wxpython/mapdisp/mapwindow.py

@@ -54,7 +54,7 @@ class BufferedWindow(MapWindow, wx.Window):
     def __init__(self, parent, giface, Map, frame,
     def __init__(self, parent, giface, Map, frame,
                  id = wx.ID_ANY, tree = None, lmgr = None,
                  id = wx.ID_ANY, tree = None, lmgr = None,
                  style = wx.NO_FULL_REPAINT_ON_RESIZE, **kwargs):
                  style = wx.NO_FULL_REPAINT_ON_RESIZE, **kwargs):
-        MapWindow.__init__(self, parent = parent, giface = giface, id = id, Map = Map,
+        MapWindow.__init__(self, parent = parent, giface = giface, Map = Map,
                            frame = frame, tree = tree, lmgr = lmgr, **kwargs)
                            frame = frame, tree = tree, lmgr = lmgr, **kwargs)
         wx.Window.__init__(self, parent = parent, id = id, style = style, **kwargs)
         wx.Window.__init__(self, parent = parent, id = id, style = style, **kwargs)
         
         
@@ -1174,7 +1174,7 @@ class BufferedWindow(MapWindow, wx.Window):
                          message = _("Querying is not implemented in standalone mode of Map Display"))
                          message = _("Querying is not implemented in standalone mode of Map Display"))
                 return
                 return
 
 
-            layers = self.GetSelectedLayer(type = 'item', multi = True)
+            layers = self.tree.GetSelectedLayer(multi = True, checkedOnly = True)
 
 
             self.frame.Query(self.mouse['begin'][0],self.mouse['begin'][1], layers)
             self.frame.Query(self.mouse['begin'][0],self.mouse['begin'][1], layers)
         
         
@@ -1579,8 +1579,9 @@ class BufferedWindow(MapWindow, wx.Window):
         @param render True to re-render display
         @param render True to re-render display
         """
         """
         if not layers:
         if not layers:
-            layers = self.GetSelectedLayer(multi = True)
-        
+            layers = self.tree.GetSelectedLayer(multi = True, checkedOnly = False)
+            layers = [self.tree.GetLayerInfo(layer, key = 'maplayer') for layer in layers]
+
         if not layers:
         if not layers:
             return
             return
         
         

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

@@ -358,8 +358,9 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
                 self.lmgr.nviz.UpdatePage('cplane')
                 self.lmgr.nviz.UpdatePage('cplane')
                 self.lmgr.nviz.UpdatePage('decoration')
                 self.lmgr.nviz.UpdatePage('decoration')
                 self.lmgr.nviz.UpdatePage('animation')
                 self.lmgr.nviz.UpdatePage('animation')
-                layer = self.GetSelectedLayer()
+                layer = self.tree.GetSelectedLayer(multi = False, checkedOnly = True)
                 if layer:
                 if layer:
+                    layer = self.tree.GetLayerInfo(layer, key = 'maplayer')
                     if layer.type ==  'raster':
                     if layer.type ==  'raster':
                         self.lmgr.nviz.UpdatePage('surface')
                         self.lmgr.nviz.UpdatePage('surface')
                         self.lmgr.nviz.UpdatePage('fringe')
                         self.lmgr.nviz.UpdatePage('fringe')
@@ -766,7 +767,7 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
                          message = _("Querying is not implemented in standalone mode of Map Display"))
                          message = _("Querying is not implemented in standalone mode of Map Display"))
                 return
                 return
 
 
-            layers = self.GetSelectedLayer(type = 'item', multi = True)
+            layers = self.tree.GetSelectedLayer(multi = True, checkedOnly = True)
 
 
             self.frame.Query(self.mouse['begin'][0],self.mouse['begin'][1], layers)
             self.frame.Query(self.mouse['begin'][0],self.mouse['begin'][1], layers)
 
 
@@ -1512,7 +1513,7 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
         
         
         # update tools window
         # update tools window
         if hasattr(self.lmgr, "nviz") and \
         if hasattr(self.lmgr, "nviz") and \
-                item ==  self.GetSelectedLayer(type = 'item'):
+                item == self.tree.GetSelectedLayer(multi = False, checkedOnly = True):
             toolWin = self.lmgr.nviz
             toolWin = self.lmgr.nviz
             if layer.type ==  'raster':
             if layer.type ==  'raster':
                 win = toolWin.FindWindowById( \
                 win = toolWin.FindWindowById( \
@@ -1695,7 +1696,7 @@ class GLWindow(MapWindow, glcanvas.GLCanvas):
         
         
         # update tools window
         # update tools window
         if hasattr(self.lmgr, "nviz") and \
         if hasattr(self.lmgr, "nviz") and \
-                item ==  self.GetSelectedLayer(type = 'item'):
+                item ==  self.tree.GetSelectedLayer(multi = False, checkedOnly = True):
             toolWin = self.lmgr.nviz
             toolWin = self.lmgr.nviz
             
             
             toolWin.UpdatePage('vector')
             toolWin.UpdatePage('vector')

+ 2 - 1
gui/wxpython/nviz/tools.py

@@ -126,7 +126,8 @@ class NvizToolWindow(FN.FlatNotebook):
     def SetInitialMaps(self):
     def SetInitialMaps(self):
         """!Set initial raster and vector map"""
         """!Set initial raster and vector map"""
         for l_type in ('raster', 'vector', '3d-raster'):
         for l_type in ('raster', 'vector', '3d-raster'):
-            selectedLayer = self.mapWindow.GetSelectedLayer()
+            selectedLayer = self.parent.GetLayerTree().GetSelectedLayer(multi = False, checkedOnly = True)
+            selectedLayer = self.parent.GetLayerTree().GetLayerInfo(selectedLayer, key = 'maplayer')
             layers = self.mapWindow.Map.GetListOfLayers(l_type = l_type, l_active = True)
             layers = self.mapWindow.Map.GetListOfLayers(l_type = l_type, l_active = True)
             if selectedLayer in layers:
             if selectedLayer in layers:
                 selection = selectedLayer.GetName()
                 selection = selectedLayer.GetName()