ocarina/src/extra/guibuilder2.py

151 lines
3.6 KiB
Python

#! /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)