Pārlūkot izejas kodu

wxGUI: fix layer selection -- trac https://trac.osgeo.org/grass/ticket/371
(merge from devbr6, https://trac.osgeo.org/grass/changeset/34424)


git-svn-id: https://svn.osgeo.org/grass/grass/trunk@34425 15284696-431f-4ddb-bdfa-cd5b030d7da7

Martin Landa 16 gadi atpakaļ
vecāks
revīzija
5fae3b9cc7

+ 2 - 2
gui/wxpython/gui_modules/gselect.py

@@ -446,12 +446,12 @@ class LayerSelect(wx.Choice):
         
     def InsertLayers(self, vector):
         """Insert layers for a vector into the layer combobox"""
-        layerchoices = VectorDBInfo(vector).layers.keys()
+        layerchoices = utils.GetVectorNumberOfLayers(vector)
         
         if self.all:
             layerchoices.insert(0, '-1')
         if len(layerchoices) > 1:
-            self.SetItems(map(str, layerchoices))
+            self.SetItems(layerchoices)
             self.SetStringSelection('1')
         else:
             self.SetItems(['1'])

+ 21 - 0
gui/wxpython/gui_modules/utils.py

@@ -239,6 +239,27 @@ def ListSortLower(list):
     """Sort list items (not case-sensitive)"""
     list.sort(cmp=lambda x, y: cmp(x.lower(), y.lower()))
 
+def GetVectorNumberOfLayers(vector):
+    """Get list of vector layers"""
+    cmdlist = ['v.category',
+               'input=%s' % vector,
+               'option=report']
+    
+    layers = []
+    for line in gcmd.Command(cmdlist).ReadStdOutput():
+        if not 'Layer' in line:
+            continue
+        
+        value = line.split(':')[1].strip()
+        if '/' in value: # value/name
+            layers.append(value.split('/')[0])
+        else:
+            layers.append(value)
+    
+    print layers
+    
+    return layers
+
 def reexec_with_pythonw():
     """Re-execute Python on Mac OS"""
     if sys.platform == 'darwin' and \

+ 3 - 3
vector/v.category/main.c

@@ -406,11 +406,11 @@ int main(int argc, char *argv[])
 	    }
 	    else {
 		if (freps[i]->table != '\0') {
-		    G_message("%s: %d/%s", _("Layer/table"),
-			      freps[i]->field, freps[i]->table);
+		    fprintf(stdout, "%s: %d/%s\n", _("Layer/table"),
+			    freps[i]->field, freps[i]->table);
 		}
 		else {
-		    G_message("%s: %d", _("Layer"), freps[i]->field);
+		    fprintf(stdout, "%s: %d\n", _("Layer"), freps[i]->field);
 		}
 		fprintf(stdout, "type       count        min        max\n");
 		fprintf(stdout, "point    %7d %10d %10d\n",