瀏覽代碼

wxGUI: avoid getting list of columns more then once

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@35474 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 16 年之前
父節點
當前提交
28a6a48da0
共有 1 個文件被更改,包括 37 次插入25 次删除
  1. 37 25
      gui/wxpython/gui_modules/menuform.py

+ 37 - 25
gui/wxpython/gui_modules/menuform.py

@@ -1517,8 +1517,10 @@ class cmdPanel(wx.Panel):
         event.Skip()
         event.Skip()
         
         
     def OnUpdateSelection(self, event):
     def OnUpdateSelection(self, event):
-        """Update list of available layers, tables, columns for
-        vector map layer"""
+        """
+        Update dialog (layers, tables, columns, etc.)
+        """
+        # get widget id
         if not event:
         if not event:
             id = None
             id = None
             for p in self.task.params:
             for p in self.task.params:
@@ -1538,11 +1540,13 @@ class cmdPanel(wx.Panel):
         if not p or \
         if not p or \
                 not p.has_key('wxId-bind'):
                 not p.has_key('wxId-bind'):
             return
             return
-        
+
+        # get widget prompt
         pType = p.get('prompt', '')
         pType = p.get('prompt', '')
         if not pType:
         if not pType:
             return
             return
 
 
+        # check for map/input parameter
         pMap = self.task.get_param('map', raiseError=False)
         pMap = self.task.get_param('map', raiseError=False)
         if not pMap:
         if not pMap:
             pMap = self.task.get_param('input', raiseError=False)
             pMap = self.task.get_param('input', raiseError=False)
@@ -1552,6 +1556,10 @@ class cmdPanel(wx.Panel):
         else:
         else:
             map = None
             map = None
         
         
+        # avoid multiple updating
+        columns = []
+        
+        # update reference widgets
         for uid in p['wxId-bind']:
         for uid in p['wxId-bind']:
             win = self.FindWindowById(uid)
             win = self.FindWindowById(uid)
             name = win.GetName()
             name = win.GetName()
@@ -1571,30 +1579,34 @@ class cmdPanel(wx.Panel):
                 win.InsertTables(driver, db)
                 win.InsertTables(driver, db)
             
             
             elif name == 'ColumnSelect':
             elif name == 'ColumnSelect':
-                pLayer = self.task.get_param('layer', element='element', raiseError=False)
-                if pLayer:
-                    if pLayer.get('value', '') != '':
-                        layer = int(pLayer.get('value', 1))
+                if not columns:
+                    print 'c'
+                    pLayer = self.task.get_param('layer', element='element', raiseError=False)
+                    if pLayer:
+                        if pLayer.get('value', '') != '':
+                            layer = int(pLayer.get('value', 1))
+                        else:
+                            layer = int(pLayer.get('default', 1))
                     else:
                     else:
-                        layer = int(pLayer.get('default', 1))
+                        layer = 1
+                        
+                    if map:
+                        win.InsertColumns(map, layer)
+                        columns = win.GetItems()
+                    else: # table
+                        pDriver = self.task.get_param('dbdriver', element='prompt', raiseError=False)
+                        if pDriver:
+                            driver = pDriver.get('value', None)
+                        pDb = self.task.get_param('dbname', element='prompt', raiseError=False)
+                        if pDb:
+                            db = pDb.get('value', None)
+                        pTable = self.task.get_param('dbtable', element='element', raiseError=False)
+                        if pTable and \
+                                pTable.get('value', '') != '':
+                            win.InsertTableColumns(pTable.get('value'), driver, db)
+                            columns = win.GetItems()
                 else:
                 else:
-                    layer = 1
-                if map:
-                    win.InsertColumns(map, layer)
-                else: # table
-                    pDriver = self.task.get_param('dbdriver', element='prompt', raiseError=False)
-                    if pDriver:
-                        driver = pDriver.get('value', None)
-                    pDb = self.task.get_param('dbname', element='prompt', raiseError=False)
-                    if pDb:
-                        db = pDb.get('value', None)
-                    pTable = self.task.get_param('dbtable', element='element', raiseError=False)
-                    if pTable and \
-                            pTable.get('value', '') != '':
-                        win.InsertTableColumns(pTable.get('value'), driver, db)
-                
-        if event:
-            event.Skip()
+                   win.SetItems(columns) 
         
         
     def createCmd( self, ignoreErrors = False ):
     def createCmd( self, ignoreErrors = False ):
         """
         """