1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
import gtk; _gtk = gtk; del gtk
import _libglade
# enable gnome functionality if it is installed.
try:
import _gladegnome
except:
pass
class GladeXML(_gtk.GtkData):
def __init__(self, filename=None, root=None, domain=None, _obj=None):
if _obj: self._o = _obj; return
self._o = _libglade.glade_xml_new_with_domain(filename, root,
domain)
class __cnv:
def __init__(self, func):
self.func = func
def __call__(self, *args):
a = list(args)
for i in range(len(args)):
if type(args[i]) == _gtk._gtk.GtkObjectType:
a[i] = _gtk._obj2inst(args[i])
elif type(args[i]) == \
_gtk._gtk.GtkAccelGroupType:
a[i] = _gtk.GtkAccelGroup(_obj=args[i])
a = tuple(a)
ret = apply(self.func, a)
if hasattr(ret, '_o'): ret = ret._o
elif hasattr(ret, '_ag'): ret = ret._ag
elif hasattr(ret, '_im'): ret = ret._im
return ret
def signal_connect(self, handler_name, handler, *args):
_libglade.glade_xml_signal_connect(self._o, handler_name,
self.__cnv(handler).__call__,
args)
def signal_autoconnect(self, dict):
hdict = {}
for key, value in dict.items():
if type(value) == type(()) and len(value) >= 2:
hdict[key] = (self.__cnv(value[0]).__call__,
value[1:])
else:
hdict[key] = self.__cnv(value).__call__
_libglade.glade_xml_signal_autoconnect(self._o, hdict)
def get_widget(self, name):
wid = _libglade.glade_xml_get_widget(self._o, name)
if wid:
return _gtk._obj2inst(wid)
else:
return wid
def get_widget_by_longname(self, longname):
wid = _libglade.glade_xml_get_widget_by_long_name(self._o,
longname)
if wid:
return _gtk._obj2inst(wid)
else:
return wid
_gtk._name2cls['GladeXML'] = GladeXML
def get_widget_name(widget):
return _libglade.glade_get_widget_name(widget._o)
def get_widget_long_name(widget):
return _libglade.glade_get_widget_long_name(widget._o)
def get_widget_tree(widget):
xml = _libglade.glade_get_widget_tree(widget._o)
if xml:
return GladeXML(_obj=xml)
return xml
|