#! /usr/bin/python # To change this template, choose Tools | Templates # and open the template in the editor. __author__="bjschuma" __date__ ="$Mar 14, 2010 9:52:10 PM$" import ocarina from et import xm from ct.call import write #from oGtk import * import gtk global parts parts = dict() global buildFunc buildFunc = None global window window = None def setPacking(old,newVals): for field in newVals: if (field=="expand") or (field=="fill"): if newVals[field]=="True": old[field] = True else: old[field] = False elif field=="padding": old[field] = int(newVals[field]) elif field=="pack": if newVals[field] == "Start": old[field] = gtk.PACK_START else: old[field] = gtk.PACK_END return old def buildTabs(node,tabs): global buildFunc for child in xm.children(node): if child.nodeName=="tab": label = None content = None for gchild in xm.children(child): if gchild.nodeName == "tablabel": for ggchild in xm.children(gchild): item = buildFunc(ggchild) if item != None: label = item elif gchild.nodeName == "tabcontent": for ggchild in xm.children(gchild): item = buildFunc(ggchild) if item != None: content = item if content != None: tabs.addpage(content,label) attrs = setPacking({"expand":False,"fill":False,"pack":gtk.PACK_START}, xm.attributes(child) ) tabs.set_tab_label_packing(content,attrs["expand"],attrs["fill"],attrs["pack"]) def buildMenu(node,menu): global buildFunc for child in xm.children(node): item = buildFunc(child) if item!=None: if node.nodeName == "menu-bar": menu.append(item) elif node.nodeName == "menuitem": menu.addSubMenu(item) def fill(node,container): global buildFunc pack = True packing = {"expand":False,"fill":False,"padding":0,"pack":gtk.PACK_START} for child in xm.children(node): viewport = False if child.nodeName == "add" or child.nodeName == "add-viewport": if child.nodeName == "add-viewport": write("We are adding to "+node.nodeName+" with a viewport",2) viewport = True else: write("We are adding to "+node.nodeName,2) pack = False for grandchild in xm.children(child): item = buildFunc(grandchild) if item != None: if viewport == False: container.add(item) else: container.add_with_viewport(item) elif child.nodeName == "pack": packing = setPacking( packing,xm.attributes(child) ) write("Now using packing: "+str(packing), 2) else: item = buildFunc(child) if item != None: if pack == False: container.add(item) else: if packing["pack"] == gtk.PACK_START: container.pack_start(item,packing["expand"],packing["fill"],packing["padding"]) else: container.pack_end(item,packing["expand"],packing["fill"],packing["padding"]) def build(node): global parts tag = node.nodeName if (tag in parts.keys()) == True: write("Creating part from tag: "+tag,2) part = parts[tag](xm.attributes(node)) if (tag=="hbox") or (tag=="vbox") or (tag=="window") or (tag=="scrolled-window") or (tag=="align"): fill(node,part) elif (tag=="menu-bar") or (tag=="menuitem"): buildMenu(node,part) elif (tag=="tabs"): buildTabs(node,part) return part else: write("Cannot make part: "+tag,3) def init(): global window if window != None: window.hide() write("Building gui from file: "+ocarina.vars.THEME,1) doc = xm.load(ocarina.vars.THEME) window = build( xm.child(doc) ) ocarina.events.start(ocarina.events.GUI_DONE) window.show() buildFunc = build ocarina.events.invite(ocarina.events.OCARINA_START,init,50) ocarina.events.invite(ocarina.events.OCARINA_QUIT,gtk.main_quit)