test_config = """
"""
test_modules = {"g.gisenv":"""
""","r.to.vect.area":"""
""","r.to.vect.line":"""
""","v.surf.idw":"""
"""
}
import xml.dom.minidom
import menuform
class handleQgisGrass:
def __init__(self, qgisgrass):
modules = qgisgrass.childNodes[0].GetElementsByTagName('modules')[0]
for child in modules.childNodes:
if child.localName == 'grass':
self.handleGrass( child )
elif child.localName == 'section':
self.handleSection( child )
def handleSection( self,section ):
for child in section.GetElementsByTagName('grass'):
self.handleGrass( child )
def handleGrass( self, grass ):
raise NotImplementedError
class printQgisGrass( handleQgisGrass ):
def __init__(self, qgisgrass):
print "in qgisgrass"
handleQgisGrass.__init__( self, qgisgrass )
def handleSection( self,section ):
print "Section:",section.getAttribute('label')
handleQgisGrass.handleSection( self, section )
def handleGrass( self, grass ):
print "Command:",grass.getAttribute('name')
class wxQgisGrass( handleQgisGrass ):
pass
class handleQgisGrassModule:
def __init__( self, qgisgrassmodule):
qgisgrassm = qgisgrassmodule.GetElementsByTagName( "qgisgrassmodule" )[0]
self.handleAttributes( qgisgrassm )
for inner in qgisgrassm.childNodes:
it = inner.localName
if it == 'option':
self.handleOption( inner )
elif it == 'flag':
self.handleFlag( inner )
elif it is not None:
self.handleOther( inner )
def handleAttributes( self, node ):
for (l,a) in node.attributes.items():
self.handleAttribute( l, a, node )
def handleAttribute( self, label, value, parent ):
raise NotImplementedError
def handleOption( self, option ):
self.handleAttributes( option )
def handleFlag( self, flag ):
self.handleAttributes( flag )
def handleOther( self, other ):
self.handleAttributes( other )
class printQgisGrassModule( handleQgisGrassModule ):
def __init__( self, qgisgrassmodule):
self.handleOption = self.printHandler
self.handleFlag = self.printHandler
self.handleOther = self.printHandler
print "in qgisgrassmodule"
handleQgisGrassModule.__init__( self, qgisgrassmodule )
def printHandler( self, opt ):
print opt.localName
handleQgisGrassModule.handleOther( self, opt )
print
def handleAttribute( self, label, value, option ):
print "%s:%s" % (label, value)
class wxQgisGrassModule( handleQgisGrassModule ):
def __init__(self, qgisgrassmodule, label='' ):
"""qgisGrassModule is a string containing the .qgm xml file"""
self.task = None
self.label = label
self.description = ''
handleQgisGrassModule.__init__( self, qgisgrassmodule )
self.task.description = self.description
menuform.GrassGUIApp( self.task ).MainLoop()
def handleOption( self, opt, getit = menuform.grassTask.get_param, **other ):
a = dict(opt.attributes.items())
p = getit( self.task, a['key'] )
# visibility:
p['guisection'] = _( 'Main' ) # this should be the only tab present
p['hidden'] = 'no' # unhide params ...
if a.get('hidden','no') == 'yes': p['hidden'] = 'yes' # ...except when explicitly hidden
# overrides:
if a.has_key( 'answer' ): p['value'] = a['answer']
if a.has_key( 'label' ): p['description'] = a['label']
for (k,i) in other.items():
p[k] = i
# exclusions:
if a.has_key('exclude'):
vals = p['value'].split(',')
exclusions = a['exclude'].split( ',' )
for excluded in exclusions:
if excluded in vals:
idx = vals.index(excluded)
vals[ idx:idx+1 ] = []
p['value'] = ','.join( vals )
if p.get('default','') in exclusions: p['default'] = ''
def handleOther( self, opt ):
tag = opt.localName
att = dict( opt.attributes.items() )
if tag == 'field':
pass
elif tag == 'file':
filters = dict(opt.attributes.items()).get('filters','(*.*)')
try:
glob = re.match(r'\((.+)\)').groups(0)
except KeyError:
glob = '*.*'
self.handleOption( opt, gisprompt=True, element='file', filemask=glob )
elif tag == 'selection':
pass
def handleFlag( self, flag ):
self.handleOption( flag, getit = menuform.grassTask.get_flag )
def handleAttribute( self, label, value, option ):
if option.localName == 'qgisgrassmodule':
if label=='module':
self.task = menuform.grassTask( grassModule = value )
for pf in self.task.params + self.task.flags:
pf['hidden'] = 'yes' # hide eveything initially
if label=='label':
self.description = value
from sys import argv
if __name__ == '__main__':
if len( argv ) != 2:
print "Usage: %s " % sys.argv[0]
else:
the_module = argv[1]
if the_module != 'test':
qgm = open( the_module ).read()
x = wxQgisGrassModule( xml.dom.minidom.parseString( qgm ), label = the_module )
else:
# self test
config = xml.dom.minidom.parseString( test_config )
printQgisGrass( config )
print
for m in test_modules.keys():
print m
module = xml.dom.minidom.parseString( test_modules[m] )
printQgisGrassModule( module )
print "----------------"
m = "r.to.vect.area"
x = wxQgisGrassModule( xml.dom.minidom.parseString( test_modules[ m ] ), label = m )