[GRASS-SVN] r37937 - in grass/trunk/gui/wxpython: . gui_modules xml
svn_grass at osgeo.org
svn_grass at osgeo.org
Thu Jun 18 17:57:17 EDT 2009
Author: martinl
Date: 2009-06-18 17:57:16 -0400 (Thu, 18 Jun 2009)
New Revision: 37937
Modified:
grass/trunk/gui/wxpython/gui_modules/mapdisp_window.py
grass/trunk/gui/wxpython/gui_modules/preferences.py
grass/trunk/gui/wxpython/gui_modules/vdigit.py
grass/trunk/gui/wxpython/gui_modules/workspace.py
grass/trunk/gui/wxpython/gui_modules/wxgui_utils.py
grass/trunk/gui/wxpython/wxgui.py
grass/trunk/gui/wxpython/xml/grass-gxw.dtd
Log:
wxGUI: move geometry attributes settings to the workspace
Modified: grass/trunk/gui/wxpython/gui_modules/mapdisp_window.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/mapdisp_window.py 2009-06-18 19:46:56 UTC (rev 37936)
+++ grass/trunk/gui/wxpython/gui_modules/mapdisp_window.py 2009-06-18 21:57:16 UTC (rev 37937)
@@ -1147,8 +1147,10 @@
action="add")
if not point:
- self.__geomAttrb(fid, addRecordDlg, 'area', digitClass)
- self.__geomAttrb(fid, addRecordDlg, 'perimeter', digitClass)
+ self.__geomAttrb(fid, addRecordDlg, 'area', digitClass,
+ digitToolbar.GetLayer())
+ self.__geomAttrb(fid, addRecordDlg, 'perimeter', digitClass,
+ digitToolbar.GetLayer())
if addRecordDlg.mapDBInfo and \
addRecordDlg.ShowModal() == wx.ID_OK:
@@ -1170,10 +1172,11 @@
self.polycoords.append(self.Pixel2Cell(event.GetPositionTuple()[:]))
self.DrawLines(pdc=self.pdcTmp)
- def __geomAttrb(self, fid, dialog, attrb, digit):
+ def __geomAttrb(self, fid, dialog, attrb, digit, mapLayer):
"""!Trac geometry attributes?"""
- if UserSettings.Get(group = 'vdigit', key = 'geomAttrb',
- subkey = [attrb, 'enabled'], internal = True):
+ item = self.tree.FindItemByData('maplayer', mapLayer)
+ vdigit = self.tree.GetPyData(item)[0]['vdigit']
+ if vdigit.has_key('geomAttr') and vdigit['geomAttr'].has_key(attrb):
val = -1
if attrb == 'length':
val = digit.GetLineLength(fid)
@@ -1184,8 +1187,7 @@
if val > 0:
layer = int(UserSettings.Get(group='vdigit', key="layer", subkey='value'))
- column = UserSettings.Get(group = 'vdigit', key = 'geomAttrb',
- subkey = [attrb, 'column'], internal = True)
+ column = vdigit['geomAttr'][attrb]
dialog.SetColumnValue(layer, column, val)
dialog.OnReset()
@@ -1960,7 +1962,6 @@
self.redrawAll = True
# add new record into atribute table
- print UserSettings.Get(group='vdigit', key="addRecord", subkey='enabled'), line, fid
if UserSettings.Get(group='vdigit', key="addRecord", subkey='enabled') and \
(line is True or \
(not line and fid > 0)):
@@ -1978,10 +1979,13 @@
pos=posWindow,
action="add")
- self.__geomAttrb(fid, addRecordDlg, 'length', digitClass)
+ self.__geomAttrb(fid, addRecordDlg, 'length', digitClass,
+ digitToolbar.GetLayer())
# auto-placing centroid
- self.__geomAttrb(fid, addRecordDlg, 'area', digitClass)
- self.__geomAttrb(fid, addRecordDlg, 'perimeter', digitClass)
+ self.__geomAttrb(fid, addRecordDlg, 'area', digitClass,
+ digitToolbar.GetLayer())
+ self.__geomAttrb(fid, addRecordDlg, 'perimeter', digitClass,
+ digitToolbar.GetLayer())
if addRecordDlg.mapDBInfo and \
addRecordDlg.ShowModal() == wx.ID_OK:
Modified: grass/trunk/gui/wxpython/gui_modules/preferences.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/preferences.py 2009-06-18 19:46:56 UTC (rev 37936)
+++ grass/trunk/gui/wxpython/gui_modules/preferences.py 2009-06-18 21:57:16 UTC (rev 37937)
@@ -34,7 +34,6 @@
import wx.lib.filebrowsebutton as filebrowse
import wx.lib.colourselect as csel
import wx.lib.mixins.listctrl as listmix
-from wx.lib.wordwrap import wordwrap
from grass.script import core as grass
import gcmd
@@ -554,13 +553,6 @@
_("histogram"))
self.internalSettings['vdigit']['bgmap'] = {}
self.internalSettings['vdigit']['bgmap']['value'] = ''
- self.internalSettings['vdigit']['geomAttrb'] = dict()
- self.internalSettings['vdigit']['geomAttrb']['length'] = { 'enabled' : False,
- 'column' : '' }
- self.internalSettings['vdigit']['geomAttrb']['area'] = { 'enabled' : False,
- 'column' : '' }
- self.internalSettings['vdigit']['geomAttrb']['perimeter'] = { 'enabled' : False,
- 'column' : '' }
def ReadSettingsFile(self, settings=None):
"""!Reads settings file (mapset, location, gisdbase)"""
Modified: grass/trunk/gui/wxpython/gui_modules/vdigit.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/vdigit.py 2009-06-18 19:46:56 UTC (rev 37936)
+++ grass/trunk/gui/wxpython/gui_modules/vdigit.py 2009-06-18 21:57:16 UTC (rev 37937)
@@ -33,6 +33,7 @@
import sys
import string
import copy
+import textwrap
from threading import Thread
@@ -1513,8 +1514,8 @@
box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
label = " %s " % _("Geometry attributes"))
sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
- flexSizer = wx.FlexGridSizer(cols=3, hgap=3, vgap=3)
- flexSizer.AddGrowableCol(0)
+ gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
+ gridSizer.AddGrowableCol(0)
self.geomAttrb = { 'length' : { 'label' : _('length') },
'area' : { 'label' : _('area') },
'perimeter' : { 'label' : _('perimeter') } }
@@ -1525,6 +1526,10 @@
except AttributeError:
vectorName = None # no vector selected for editing
layer = UserSettings.Get(group='vdigit', key="layer", subkey='value')
+ mapLayer = self.parent.toolbars['vdigit'].GetLayer()
+ tree = self.parent.tree
+ item = tree.FindItemByData('maplayer', mapLayer)
+ row = 0
for attrb in ['length', 'area', 'perimeter']:
# checkbox
check = wx.CheckBox(parent = panel, id = wx.ID_ANY,
@@ -1542,13 +1547,14 @@
choices = [_("map units")])
# default values
- check.SetValue(UserSettings.Get(group='vdigit', key='geomAttrb',
- subkey=[attrb, 'enabled'],
- internal=True))
- column.SetStringSelection(UserSettings.Get(group='vdigit', key='geomAttrb',
- subkey=[attrb, 'column'],
- internal=True))
+ check.SetValue(False)
+ if item and tree.GetPyData(item)[0]['vdigit'] and \
+ tree.GetPyData(item)[0]['vdigit'].has_key('geomAttr') and \
+ tree.GetPyData(item)[0]['vdigit']['geomAttr'].has_key(attrb):
+ check.SetValue(True)
+ column.SetStringSelection(tree.GetPyData(item)[0]['vdigit']['geomAttr'][attrb])
+
if not vectorName:
check.Enable(False)
column.Enable(False)
@@ -1560,12 +1566,23 @@
self.geomAttrb[attrb]['column'] = column.GetId()
self.geomAttrb[attrb]['units'] = units.GetId()
- flexSizer.Add(item = check, proportion = 0,
- flag = wx.ALIGN_CENTER_VERTICAL)
- flexSizer.Add(item = column, proportion = 0)
- flexSizer.Add(item = units, proportion = 0)
-
- sizer.Add(item=flexSizer, proportion=1,
+ gridSizer.Add(item = check,
+ flag = wx.ALIGN_CENTER_VERTICAL,
+ pos = (row, 0))
+ gridSizer.Add(item = column,
+ pos = (row, 1))
+ gridSizer.Add(item = units,
+ pos = (row, 2))
+ row += 1
+
+ note = '\n'.join(textwrap.wrap(_("Note: These settings are stored "
+ " in the workspace not in the vector digitizer "
+ "preferences."), 55))
+ gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
+ label = note),
+ pos = (3, 0), span=(1, 3))
+
+ sizer.Add(item=gridSizer, proportion=1,
flag=wx.ALL | wx.EXPAND, border=1)
border.Add(item=sizer, proportion=0,
flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=5)
@@ -1786,16 +1803,21 @@
UserSettings.Set(group='vdigit', key="delRecord", subkey='enabled',
value=self.deleteRecord.IsChecked())
- # geometry attributes
+ # geometry attributes (workspace)
+ mapLayer = self.parent.toolbars['vdigit'].GetLayer()
+ tree = self.parent.tree
+ item = tree.FindItemByData('maplayer', mapLayer)
for key, val in self.geomAttrb.iteritems():
checked = self.FindWindowById(val['check']).IsChecked()
column = self.FindWindowById(val['column']).GetValue()
- UserSettings.Set(group = 'vdigit', key = 'geomAttrb',
- subkey = [key, 'enabled'], value = checked,
- internal = True)
- UserSettings.Set(group = 'vdigit', key = 'geomAttrb',
- subkey = [key, 'column'], value = column,
- internal = True)
+ if not tree.GetPyData(item)[0]['vdigit']:
+ tree.GetPyData(item)[0]['vdigit'] = { 'geomAttr' : dict() }
+
+ if checked: # enable
+ tree.GetPyData(item)[0]['vdigit']['geomAttr'][key] = column
+ else:
+ if tree.GetPyData(item)[0]['vdigit']['geomAttr'].has_key(key):
+ del tree.GetPyData(item)[0]['vdigit']['geomAttr'][key]
# snapping threshold
self.parent.digit.threshold = self.parent.digit.driver.GetThreshold()
Modified: grass/trunk/gui/wxpython/gui_modules/workspace.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/workspace.py 2009-06-18 19:46:56 UTC (rev 37936)
+++ grass/trunk/gui/wxpython/gui_modules/workspace.py 2009-06-18 21:57:16 UTC (rev 37937)
@@ -166,8 +166,8 @@
"nviz" : None})
elif item.tag == 'layer':
- cmd, selected, nviz = self.__processLayer(item)
-
+ cmd, selected, vdigit, nviz = self.__processLayer(item)
+
self.layers.append( {
"type" : item.get('type', None),
"name" : item.get('name', None),
@@ -177,8 +177,9 @@
"group" : False, #### self.inTag['group'], # ???
"display" : self.displayIndex,
"selected" : selected,
+ "vdigit" : vdigit,
"nviz" : nviz } )
-
+
def __processLayer(self, layer):
"""!Process layer item
@@ -210,6 +211,15 @@
selected = False
#
+ # Vector digitizer settings
+ #
+ node_vdigit = layer.find('vdigit')
+ if node_vdigit is not None:
+ vdigit = self.__processLayerVdigit(node_vdigit)
+ else:
+ vdigit = None
+
+ #
# Nviz (3D settings)
#
node_nviz = layer.find('nviz')
@@ -218,8 +228,22 @@
else:
nviz = None
- return (cmd, selected, nviz)
+ return (cmd, selected, vdigit, nviz)
+ def __processLayerVdigit(self, node_vdigit):
+ """!Process vector digitizer layer settings
+
+ @param node_vdigit vdigit node
+ """
+ # init nviz layer properties
+ vdigit = dict()
+ for node in node_vdigit.findall('geometryAttribute'):
+ if not vdigit.has_key('geomAttr'):
+ vdigit['geomAttr'] = dict()
+ vdigit['geomAttr'][node.get('type')] = node.get('column')
+
+ return vdigit
+
def __processLayerNviz(self, node_nviz):
"""!Process 3D layer settings
@@ -741,16 +765,28 @@
self.file.write('%s</parameter>\n' % (' ' * self.indent));
self.indent -= 4
self.file.write('%s</task>\n' % (' ' * self.indent));
+ # vector digitizer
+ vdigit = mapTree.GetPyData(item)[0]['vdigit']
+ if vdigit:
+ self.file.write('%s<vdigit>\n' % (' ' * self.indent))
+ if vdigit.has_key('geomAttr'):
+ self.indent += 4
+ for type, column in vdigit['geomAttr'].iteritems():
+ self.file.write('%s<geometryAttribute type="%s" column="%s" />\n' % \
+ (' ' * self.indent, type, column))
+ self.indent -= 4
+ self.file.write('%s</vdigit>\n' % (' ' * self.indent))
+ # nviz
nviz = mapTree.GetPyData(item)[0]['nviz']
if nviz:
- self.file.write('%s<nviz>\n' % (' ' * self.indent));
+ self.file.write('%s<nviz>\n' % (' ' * self.indent))
if maplayer.type == 'raster':
self.__writeNvizSurface(nviz['surface'])
elif maplayer.type == 'vector':
self.__writeNvizVector(nviz['vector'])
- self.file.write('%s</nviz>\n' % (' ' * self.indent));
+ self.file.write('%s</nviz>\n' % (' ' * self.indent))
self.indent -= 4
- self.file.write('%s</layer>\n' % (' ' * self.indent));
+ self.file.write('%s</layer>\n' % (' ' * self.indent))
item = mapTree.GetNextSibling(item)
self.indent -= 4
Modified: grass/trunk/gui/wxpython/gui_modules/wxgui_utils.py
===================================================================
--- grass/trunk/gui/wxpython/gui_modules/wxgui_utils.py 2009-06-18 19:46:56 UTC (rev 37936)
+++ grass/trunk/gui/wxpython/gui_modules/wxgui_utils.py 2009-06-18 21:57:16 UTC (rev 37937)
@@ -1,4 +1,4 @@
-"""
+"""!
@package wxgui_utils.py
@brief Utility classes for GRASS wxPython GUI. Main functions include
@@ -605,7 +605,7 @@
self.EditLabel(self.layer_selected)
def AddLayer(self, ltype, lname=None, lchecked=None,
- lopacity=1.0, lcmd=None, lgroup=None, lnviz=None):
+ lopacity=1.0, lcmd=None, lgroup=None, lvdigit=None, lnviz=None):
"""!Add new item to the layer tree, create corresponding MapLayer instance.
Launch property dialog if needed (raster, vector, etc.)
@@ -615,9 +615,9 @@
@param lopacity layer opacity level
@param lcmd command (given as a list)
@param lgroup group name or None
+ @param lvdigit vector digitizer settings (eg. geometry attributes)
@param lnviz layer Nviz properties
"""
-
self.first = True
params = {} # no initial options parameters
@@ -758,14 +758,15 @@
ctrlId = None
# add a data object to hold the layer's command (does not apply to generic command layers)
- self.SetPyData(layer, ({'cmd': cmd,
- 'type' : ltype,
- 'ctrl' : ctrlId,
+ self.SetPyData(layer, ({'cmd' : cmd,
+ 'type' : ltype,
+ 'ctrl' : ctrlId,
'maplayer' : None,
- 'nviz' : lnviz,
- 'propwin' : None},
+ 'vdigit' : lvdigit,
+ 'nviz' : lnviz,
+ 'propwin' : None},
None))
-
+
# find previous map layer instance
prevItem = self.GetFirstChild(self.root)[0]
prevMapLayer = None
Modified: grass/trunk/gui/wxpython/wxgui.py
===================================================================
--- grass/trunk/gui/wxpython/wxgui.py 2009-06-18 19:46:56 UTC (rev 37936)
+++ grass/trunk/gui/wxpython/wxgui.py 2009-06-18 21:57:16 UTC (rev 37937)
@@ -670,7 +670,8 @@
lopacity=layer['opacity'],
lcmd=layer['cmd'],
lgroup=layer['group'],
- lnviz=layer['nviz'])
+ lnviz=layer['nviz'],
+ lvdigit=layer['vdigit'])
if layer.has_key('selected'):
if layer['selected']:
Modified: grass/trunk/gui/wxpython/xml/grass-gxw.dtd
===================================================================
--- grass/trunk/gui/wxpython/xml/grass-gxw.dtd 2009-06-18 19:46:56 UTC (rev 37936)
+++ grass/trunk/gui/wxpython/xml/grass-gxw.dtd 2009-06-18 21:57:16 UTC (rev 37937)
@@ -77,6 +77,18 @@
<!ELEMENT flag EMPTY>
<!ATTLIST flag name CDATA #REQUIRED>
+<!-- *********************** Vector digitizer *********************** -->
+
+<!-- vdigit layer properties
+-->
+<!ELEMENT vdigit (geometryAttribute?)>
+
+<!-- geometry attribute parameter
+-->
+<!ELEMENT geometryAttribute EMPTY>
+<!ATTLIST parameter type (length | area | perimeter) #REQUIRED>
+<!ATTLIST parameter column CDATA #REQUIRED>
+
<!-- *********************** Nviz *********************** -->
<!-- nviz layer properties
More information about the grass-commit
mailing list