[GRASS-SVN] r33250 - grass/trunk/gui/wxpython/gui_modules
svn_grass at osgeo.org
svn_grass at osgeo.org
Thu Sep 4 09:58:52 EDT 2008
Author: martinl
Date: 2008-09-04 09:58:52 -0400 (Thu, 04 Sep 2008)
New Revision: 33250
Modified:
grass/trunk/gui/wxpython/gui_modules/dbm.py
grass/trunk/gui/wxpython/gui_modules/goutput.py
grass/trunk/gui/wxpython/gui_modules/mapdisp.py
Log:
wxGUI: trac #277 - Query vector map (edit mode): does not work
querying areas fixed
(merge from devbr6, r33249)
Modified: grass/trunk/gui/wxpython/gui_modules/dbm.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/dbm.py 2008-09-04 13:54:16 UTC (rev 33249)
+++ grass/trunk/gui/wxpython/gui_modules/dbm.py 2008-09-04 13:58:52 UTC (rev 33250)
@@ -1666,7 +1666,7 @@
win.SetValue("SELECT * FROM %s" % self.mapDBInfo.layers[self.layer]['table'])
cols = None
where = None
- print cols, where
+
if cols or where:
try:
keyColumn = listWin.LoadData(self.layer, columns=cols,
@@ -2721,17 +2721,18 @@
style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
pos=wx.DefaultPosition,
action="add"):
-
self.parent = parent # mapdisplay.BufferedWindow
self.map = map
self.action = action
- # id of selected line
- self.line = None
+ # ids/cats of selected features
+ self.line = {}
+ self.line['id'] = None
+ self.line['cats'] = None
# get layer/table/column information
self.mapDBInfo = VectorDBInfo(self.map)
-
+
layers = self.mapDBInfo.layers.keys() # get available layers
# check if db connection / layer exists
@@ -2762,7 +2763,7 @@
label=_("Close dialog on submit"))
self.closeDialog.SetValue(True)
- self.UpdateDialog(query, cats, line)
+ self.UpdateDialog(query=query, cats=cats, line=line)
# set title
if self.action == "update":
@@ -2898,8 +2899,12 @@
for name in columns.keys():
type = columns[name]['type']
value = columns[name]['values'][idx]
- id = columns[name]['ids'][idx]
- if name != key:
+ try:
+ id = columns[name]['ids'][idx]
+ except IndexError:
+ id = wx.NOT_FOUND
+
+ if name != key and id != wx.NOT_FOUND:
self.FindWindowById(id).SetValue(str(value))
def OnCancel(self, event):
@@ -2928,16 +2933,29 @@
if self.closeDialog.IsChecked():
self.OnCancel(event)
- def GetLine(self):
- """Get id of selected vector object or 'None' if nothing selected"""
- return self.line
+ def GetLine(self, id=True):
+ """Get id of selected vector object or 'None' if nothing selected
- def UpdateDialog(self, query=None, cats=None, line=None):
+ @param id if true return ids otherwise cats
+ """
+ if id:
+ return self.line['id']
+
+ return self.line['cats']
+
+ def UpdateDialog(self, map=None, query=None, cats=None, line=None):
"""Update dialog
Return True if updated otherwise False
"""
- self.line = line
+ if map:
+ self.map = map
+ # get layer/table/column information
+ self.mapDBInfo = VectorDBInfo(self.map)
+
+ self.line['id'] = (line, )
+ self.line['cats'] = None
+
if not self.mapDBInfo:
return False
@@ -2947,8 +2965,27 @@
# id of selected line
if query: # select by position
- self.line, nselected = self.mapDBInfo.SelectByPoint(query[0],
- query[1])
+ data = self.mapDBInfo.SelectByPoint(query[0],
+ query[1])
+ if data and data.has_key('Layer'):
+ self.line['id'] = (-1,)
+ self.line['cats'] = {}
+ idx = 0
+ for l in data['Layer']:
+ layer = int(l)
+ if not self.line['cats'].has_key(layer):
+ self.line['cats'][layer] = []
+
+ self.line['cats'][layer].append(int(data['Category'][idx]))
+ idx += 1
+
+ nselected = len(self.line['cats'].keys())
+
+ else:
+ self.line['id'] = None
+ self.line['cats'] = None
+ nselected = 0
+
# reset notebook
self.notebook.DeleteAllPages()
@@ -3092,33 +3129,37 @@
(float(queryCoords[0]), float(queryCoords[1])),
'distance=%f' % qdist], stderr=None)
+ data = {}
if cmdWhat.returncode == 0:
- read = False
+ readAttrb = False
for item in cmdWhat.ReadStdOutput():
- litem = item.lower()
- if read:
+ if len(item) < 1:
+ continue
+
+ key, value = item.split(':')
+
+ if key == 'Layer' and readAttrb:
+ readAttrb = False
+
+ if readAttrb:
name, value = item.split(':')
name = name.strip()
# append value to the column
- try:
- # casting ...
- value = self.tables[table][name]['ctype'] (value.strip())
- self.tables[table][name]['values'].append(value)
- except:
- read = False
-
- if "id:" in litem: # get line id
- line = int(item.split(':')[1].strip())
- elif "key column:" in litem: # start reading attributes
- read = True
- nselected = nselected + 1
- elif "layer:" in litem: # get layer id
- layer = int(item.split(':')[1].strip())
- table = self.layers[layer]["table"] # get table desc
- read = False
-
- return (line, nselected)
-
+ value = self.tables[table][name]['ctype'] (value.strip())
+ self.tables[table][name]['values'].append(value)
+ else:
+ if not data.has_key(key):
+ data[key] = []
+ data[key].append(value.strip())
+
+ if key == 'Table':
+ table = value.strip()
+
+ if key == 'Key column': # skip attributes
+ readAttrb = True
+
+ return data
+
def SelectFromTable(self, layer, cols='*', where=None):
"""Select records from the table
Modified: grass/trunk/gui/wxpython/gui_modules/goutput.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/goutput.py 2008-09-04 13:54:16 UTC (rev 33249)
+++ grass/trunk/gui/wxpython/gui_modules/goutput.py 2008-09-04 13:58:52 UTC (rev 33250)
@@ -193,7 +193,7 @@
"""
if Debug.get_level() == 0:
# don't redirect when debugging is enabled
- sys.stdout = self.cmd_stdout
+ # sys.stdout = self.cmd_stdout
sys.stderr = self.cmd_stderr
return True
Modified: grass/trunk/gui/wxpython/gui_modules/mapdisp.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/mapdisp.py 2008-09-04 13:54:16 UTC (rev 33249)
+++ grass/trunk/gui/wxpython/gui_modules/mapdisp.py 2008-09-04 13:58:52 UTC (rev 33250)
@@ -31,6 +31,7 @@
import glob
import math
import tempfile
+import copy
import wx
import wx.aui
@@ -3396,31 +3397,35 @@
east, north = self.MapWindow.Pixel2Cell((x, y))
mapName = self.tree.GetPyData(self.tree.layer_selected)[0]['maplayer'].name
-
+
if self.dialogs['attributes'] is None:
self.dialogs['attributes'] = dbm.DisplayAttributesDialog(parent=self.MapWindow,
- map=mapName,
- query=((east, north), qdist),
- pos=posWindow,
- action="update")
+ map=mapName,
+ query=((east, north), qdist),
+ pos=posWindow,
+ action="update")
else:
- # update currently open dialog
- self.dialogs['attributes'].UpdateDialog(query=((east, north), qdist))
+ # selection changed?
+ if not self.dialogs['attributes'].mapDBInfo or \
+ self.dialogs['attributes'].mapDBInfo.map != mapName:
+ self.dialogs['attributes'].UpdateDialog(map=mapName, query=((east, north), qdist))
+ else:
+ self.dialogs['attributes'].UpdateDialog(query=((east, north), qdist))
- line = self.dialogs['attributes'].GetLine()
+ cats = self.dialogs['attributes'].GetLine(id=False)
try:
qlayer = self.Map.GetListOfLayers(l_name=globalvar.QUERYLAYER)[0]
except IndexError:
qlayer = None
-
- if self.dialogs['attributes'].mapDBInfo and line:
+
+ if self.dialogs['attributes'].mapDBInfo and cats:
# highlight feature & re-draw map
if qlayer:
- qlayer.SetCmd(self.AddTmpVectorMapLayer(mapName, line,
- useId=True,
+ qlayer.SetCmd(self.AddTmpVectorMapLayer(mapName, cats,
+ useId=False,
addLayer=False))
else:
- self.AddTmpVectorMapLayer(mapName, line, useId=True)
+ self.AddTmpVectorMapLayer(mapName, cats, useId=False)
self.MapWindow.UpdateMap(render=False, renderVector=False)
# digitClass.driver.SetSelected([line])
@@ -3480,26 +3485,36 @@
str(color[1]) + ":" + \
str(color[2])
- cmd = ["d.vect",
- "map=%s" % name,
- "color=%s" % colorStr,
- "fcolor=%s" % colorStr,
- "width=%d" % UserSettings.Get(group='atm', key='highlight', subkey='width')]
+ pattern = ["d.vect",
+ "map=%s" % name,
+ "color=%s" % colorStr,
+ "fcolor=%s" % colorStr,
+ "width=%d" % UserSettings.Get(group='atm', key='highlight', subkey='width')]
if useId:
+ cmd = pattern
cmd.append('-i')
cmd.append('cats=%s' % str(cats))
else:
- cmd.append("cats=%s" % utils.ListOfCatsToRange(cats))
-
+ cmd = []
+ for layer in cats.keys():
+ cmd.append(copy.copy(pattern))
+ lcats = cats[layer]
+ cmd[-1].append("layer=%d" % layer)
+ cmd[-1].append("cats=%s" % utils.ListOfCatsToRange(lcats))
+
# if self.icon:
# cmd.append("icon=%s" % (self.icon))
# if self.pointsize:
# cmd.append("size=%s" % (self.pointsize))
if addLayer:
- return self.Map.AddLayer(type='vector', name=globalvar.QUERYLAYER, command=cmd,
- l_active=True, l_hidden=True, l_opacity=1.0)
+ if useId:
+ return self.Map.AddLayer(type='vector', name=globalvar.QUERYLAYER, command=cmd,
+ l_active=True, l_hidden=True, l_opacity=1.0)
+ else:
+ return self.Map.AddLayer(type='command', name=globalvar.QUERYLAYER, command=cmd,
+ l_active=True, l_hidden=True, l_opacity=1.0)
else:
return cmd
More information about the grass-commit
mailing list