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 )