瀏覽代碼

wxGUI: add optionally records for each category on add layer
(merge from devbr6, https://trac.osgeo.org/grass/changeset/34830)


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

Martin Landa 16 年之前
父節點
當前提交
22ea49b061
共有 1 個文件被更改,包括 56 次插入16 次删除
  1. 56 16
      gui/wxpython/gui_modules/dbm.py

+ 56 - 16
gui/wxpython/gui_modules/dbm.py

@@ -1609,7 +1609,10 @@ class AttributeManager(wx.Frame):
         
         if event.GetSelection() == 0 and id:
             win = self.FindWindowById(id)
-            self.log.write(_("Number of loaded records: %d") % win.GetItemCount())
+            if win:
+                self.log.write(_("Number of loaded records: %d") % win.GetItemCount())
+            else:
+                self.log.write("")
         else:
             self.log.write("")
         
@@ -2160,7 +2163,12 @@ class LayerBook(wx.Notebook):
                                     (wx.StaticText(parent=self.addPanel, id=wx.ID_ANY,
                                                    label='%s:' % _("Key column")),
                                      wx.Choice(parent=self.addPanel, id=wx.ID_ANY, size=(200, -1),
-                                               choices=self.defaultColumns))}
+                                               choices=self.defaultColumns)),
+                                'addCat':
+                                    (wx.CheckBox(parent=self.addPanel, id=wx.ID_ANY,
+                                                 label=_("Insert record for each category into table")),
+                                     None),
+                                }
         
         # set default values for widgets
         self.addLayerWidgets['driver'][1].SetStringSelection(self.defaultConnect['driver'])
@@ -2172,6 +2180,9 @@ class LayerBook(wx.Notebook):
         self.addLayerWidgets['database'][1].Bind(wx.EVT_TEXT_ENTER, self.OnDatabaseChanged)
         self.addLayerWidgets['table'][1].Bind(wx.EVT_CHOICE, self.OnTableChanged)
 
+        # tooltips
+        self.addLayerWidgets['addCat'][0].SetToolTipString(_("You need to add categories "
+                                                             "by v.category module."))
         #
         # list of table widgets
         #
@@ -2215,19 +2226,33 @@ class LayerBook(wx.Notebook):
         layerSizer = wx.StaticBoxSizer(layerBox, wx.VERTICAL)
 
         # data area
-        dataSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
+        dataSizer = wx.GridBagSizer(hgap=5, vgap=5)
         dataSizer.AddGrowableCol(1)
-        for key in ('layer', 'driver', 'database', 'table', 'key'):
+        row = 0
+        for key in ('layer', 'driver', 'database', 'table', 'key', 'addCat'):
             label, value = self.addLayerWidgets[key]
+            if not value:
+                span = (1, 2)
+            else:
+                span = (1, 1)
             dataSizer.Add(item=label,
-                          flag=wx.ALIGN_CENTER_VERTICAL)
+                          flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, 0),
+                          span=span)
+            
+            if not value:
+                row += 1
+                continue
+
             if label.GetLabel() == "Layer:":
-                dataSizer.Add(item=value,
-                              flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
+                style = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT
             else:
-                dataSizer.Add(item=value,
-                              flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
-
+                style = wx.ALIGN_CENTER_VERTICAL | wx.EXPAND
+            
+            dataSizer.Add(item=value,
+                          flag=style, pos=(row, 1))
+            
+            row += 1
+        
         layerSizer.Add(item=dataSizer,
                        proportion=1,
                        flag=wx.ALL | wx.EXPAND,
@@ -2239,7 +2264,7 @@ class LayerBook(wx.Notebook):
                      flag=wx.ALL | wx.ALIGN_LEFT,
                      border=5)
 
-        btnSizer.Add(item=(5,5),
+        btnSizer.Add(item=(5, 5),
                      proportion=1,
                      flag=wx.ALL | wx.EXPAND,
                      border=5)
@@ -2283,12 +2308,12 @@ class LayerBook(wx.Notebook):
 
 
         pageSizer.Add(item=layerSizer,
-                      proportion=1,
+                      proportion=3,
                       flag=wx.ALL | wx.EXPAND,
                       border=5)
 
         pageSizer.Add(item=tableSizer,
-                      proportion=1,
+                      proportion=2,
                       flag=wx.ALL | wx.EXPAND,
                       border=5)
 
@@ -2297,7 +2322,7 @@ class LayerBook(wx.Notebook):
     def __createDeletePage(self):
         """Delete layer"""
         self.deletePanel = wx.Panel(parent=self, id=wx.ID_ANY)
-        self.AddPage(page=self.deletePanel, text=_("Delete selected layer"))
+        self.AddPage(page=self.deletePanel, text=_("Delete layer"))
 
         label = wx.StaticText(parent=self.deletePanel, id=wx.ID_ANY,
                               label='%s:' % _("Layer to detele"))
@@ -2365,7 +2390,7 @@ class LayerBook(wx.Notebook):
     def __createModifyPage(self):
         """Modify layer"""
         self.modifyPanel = wx.Panel(parent=self, id=wx.ID_ANY)
-        self.AddPage(page=self.modifyPanel, text=_("Modify selected layer"))
+        self.AddPage(page=self.modifyPanel, text=_("Modify layer"))
 
         #
         # list of layer widgets (label, value)
@@ -2626,6 +2651,7 @@ class LayerBook(wx.Notebook):
                           caption=_("Error"), style=wx.OK | wx.ICON_ERROR | wx.CENTRE)
             return
 
+        # add new layer
         connectCmd = gcmd.Command(['v.db.connect',
                                    '--q',
                                    'map=%s' % self.mapDBInfo.map,
@@ -2635,6 +2661,16 @@ class LayerBook(wx.Notebook):
                                    'key=%s' % key,
                                    'layer=%d' % layer])
         
+        # insert records into table if required
+        if self.addLayerWidgets['addCat'][0].IsChecked():
+            gcmd.Command(['v.to.db',
+                          '--q',
+                          'map=%s' % self.mapDBInfo.map,
+                          'layer=%d' % layer,
+                          'qlayer=%d' % layer,
+                          'option=cat',
+                          'columns=%s' % key])
+
         if connectCmd.returncode == 0:
             # update dialog (only for new layer)
             self.parentDialog.UpdateDialog(layer=layer) 
@@ -2652,7 +2688,6 @@ class LayerBook(wx.Notebook):
             
     def OnDeleteLayer(self, event):
         """Delete layer"""
-
         try:
             layer = int(self.deleteLayer.GetValue())
         except:
@@ -2676,6 +2711,11 @@ class LayerBook(wx.Notebook):
                           'database=%s' % database],
                          stdin=sql)
 
+            # update list of tables
+            tableList = self.addLayerWidgets['table'][1]
+            tableList.SetItems(self.__getTables(driver, database))
+            tableList.SetStringSelection(table)
+        
         # update dialog
         self.parentDialog.UpdateDialog(layer=layer) 
         # update db info