瀏覽代碼

wxGUI/mapswipe: add support for RGB maps - https://trac.osgeo.org/grass/ticket/2315 (merge from trunk, https://trac.osgeo.org/grass/changeset/60594,r60611,r60753)

git-svn-id: https://svn.osgeo.org/grass/grass/branches/releasebranch_7_0@60756 15284696-431f-4ddb-bdfa-cd5b030d7da7
Anna Petrášová 11 年之前
父節點
當前提交
fb7e089feb
共有 3 個文件被更改,包括 41 次插入10 次删除
  1. 6 3
      gui/wxpython/core/layerlist.py
  2. 32 4
      gui/wxpython/gui_core/simplelmgr.py
  3. 3 3
      gui/wxpython/mapswipe/dialogs.py

+ 6 - 3
gui/wxpython/core/layerlist.py

@@ -189,10 +189,11 @@ class Layer(object):
         self._hidden = False
         self._initialized = False
 
-        self._mapTypes = ['rast', 'vect', 'rast3d']
+        self._mapTypes = ['rast', 'vect', 'rast3d', 'rgb']
         self._internalTypes = {'rast': 'cell',
                                'vect': 'vector',
-                               'rast3d': 'grid3'}
+                               'rast3d': 'grid3',
+                               'rgb': 'rgb'}
 
     def GetName(self):
         return self._name
@@ -206,7 +207,7 @@ class Layer(object):
         """
         if not self.hidden:
             fullName = name.split('@')
-            if len(fullName) == 1:
+            if len(fullName) == 1 and self._mapType != 'rgb':  # skip checking rgb maps for now
                 if self._mapType is None:
                     raise ValueError("To set layer name, the type of layer must be specified.")
 
@@ -361,6 +362,8 @@ class LayerListToRendererConverter:
             mapType = 'vector'
         elif layer.mapType == 'rast3d':
             mapType = '3d-raster'
+        elif layer.mapType == 'rgb':
+            mapType = 'rgb'
         self._renderer.AddLayer(ltype=mapType, command=layer.cmd,
                                 name=layer.name, active=layer.active,
                                 hidden=False, opacity=layer.opacity,

+ 32 - 4
gui/wxpython/gui_core/simplelmgr.py

@@ -33,10 +33,12 @@ from core.layerlist import LayerList
 SIMPLE_LMGR_RASTER = 1
 SIMPLE_LMGR_VECTOR = 2
 SIMPLE_LMGR_RASTER3D = 4
-SIMPLE_LMGR_TB_TOP = 8
-SIMPLE_LMGR_TB_BOTTOM = 16
-SIMPLE_LMGR_TB_LEFT = 32
-SIMPLE_LMGR_TB_RIGHT = 64
+SIMPLE_LMGR_RGB = 8
+
+SIMPLE_LMGR_TB_TOP = 16
+SIMPLE_LMGR_TB_BOTTOM = 32
+SIMPLE_LMGR_TB_LEFT = 64
+SIMPLE_LMGR_TB_RIGHT = 128
 
 
 class SimpleLayerManager(wx.Panel):
@@ -193,6 +195,15 @@ class SimpleLayerManager(wx.Panel):
                                                    completed=(self.GetOptData, layer, ''))
         event.Skip()
 
+    def OnAddRGB(self, event):
+        """!Opens d.rgb dialog and adds layer.
+        Dummy layer is added first."""
+        cmd = ['d.rgb']
+        layer = self.AddRGB(name='', cmd=cmd, hidden=True, dialog=None)
+        GUI(parent=self, giface=None, modal=self._modal).ParseCommand(cmd=cmd,
+                                                    completed=(self.GetOptData, layer, ''))
+        event.Skip()
+
     def OnRemove(self, event):
         """!Removes selected layers from list."""
         layers = self._layerList.GetSelectedLayers(activeOnly=False)
@@ -278,6 +289,12 @@ class SimpleLayerManager(wx.Panel):
         items = []
         active = []
         selected = []
+
+        # remove hidden (temporary) layers first
+        for layer in reversed(self._layerList):
+            if layer.hidden:
+                self._layerList.RemoveLayer(layer)
+
         for layer in self._layerList:
             if layer.opacity < 1:
                 items.append("{name} (opacity {opacity}%)".format(name=layer.name,
@@ -343,6 +360,13 @@ class SimpleLayerManager(wx.Panel):
                                             cmd=cmd, hidden=hidden)
         return layer
 
+    def AddRGB(self, name, cmd, hidden, dialog):
+        """!Ads new vector layer."""
+        layer = self._layerList.AddNewLayer(name=name, mapType='rgb',
+                                            active=True,
+                                            cmd=cmd, hidden=hidden)
+        return layer
+
     def GetLayerInfo(self, layer, key):
         """!Just for compatibility, should be removed in the future"""
         value = getattr(layer, key)
@@ -396,6 +420,9 @@ class SimpleLmgrToolbar(BaseToolbar):
         if self._style & SIMPLE_LMGR_RASTER3D:
             data.insert(0, ('addRaster3d', icons['addRast3d'],
                             self.parent.OnAddRast3d))
+        if self._style & SIMPLE_LMGR_RGB:
+            data.insert(0, ('addRGB', icons['addRGB'],
+                            self.parent.OnAddRGB))
         if self._style & SIMPLE_LMGR_VECTOR:
             data.insert(0, ('addVector', BaseIcons['addVect'],
                             self.parent.OnAddVector))
@@ -425,6 +452,7 @@ icons = {
     'addRast3d': MetaIcon(img='layer-raster3d-add',
                           label=_("Add 3D raster map layer"),
                           desc=_("Add 3D raster map layer")),
+    'addRGB': MetaIcon(img='layer-rgb-add', label=_('Add RGB map layer'))
     }
 
 

+ 3 - 3
gui/wxpython/mapswipe/dialogs.py

@@ -28,7 +28,7 @@ from core.gcmd import GMessage
 from core.layerlist import LayerList
 from core.settings import UserSettings
 from gui_core.simplelmgr import SimpleLayerManager, SIMPLE_LMGR_RASTER, \
-   SIMPLE_LMGR_VECTOR, SIMPLE_LMGR_TB_LEFT, SIMPLE_LMGR_TB_RIGHT
+   SIMPLE_LMGR_VECTOR, SIMPLE_LMGR_RGB, SIMPLE_LMGR_TB_LEFT, SIMPLE_LMGR_TB_RIGHT
 
 from grass.pydispatch.signal import Signal
 
@@ -137,10 +137,10 @@ class SwipeMapDialog(wx.Dialog):
         sizer = wx.BoxSizer(wx.HORIZONTAL)
 
         self._firstLmgr = SimpleLayerManager(parent=panel, layerList=self._firstLayerList,
-                                             lmgrStyle=SIMPLE_LMGR_RASTER |
+                                             lmgrStyle=SIMPLE_LMGR_RASTER | SIMPLE_LMGR_RGB |
                                              SIMPLE_LMGR_VECTOR | SIMPLE_LMGR_TB_LEFT)
         self._secondLmgr = SimpleLayerManager(parent=panel, layerList=self._secondLayerList,
-                                              lmgrStyle=SIMPLE_LMGR_RASTER |
+                                              lmgrStyle=SIMPLE_LMGR_RASTER | SIMPLE_LMGR_RGB |
                                               SIMPLE_LMGR_VECTOR | SIMPLE_LMGR_TB_RIGHT)
         sizer.Add(self._firstLmgr, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
         sizer.Add(self._secondLmgr, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)