/usr/share/pyshared/wxglade/events_mixin.py is in python-wxglade 0.6.8-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | """
Mixin class for 'events' property
@copyright: 2002-2004 Alberto Griggio <agriggio@users.sourceforge.net>
@license: MIT (see license.txt) - THIS PROGRAM COMES WITH NO WARRANTY
"""
import wx
import wx.grid
import re
from widget_properties import GridProperty
from xml.sax.saxutils import escape, quoteattr
class EventsProperty(GridProperty):
def __init__(self, owner):
cols = [(_('Event'), GridProperty.STRING),
(_('Handler'), GridProperty.STRING)]
GridProperty.__init__(self, owner, 'events', None, cols,
len(owner.events), False, False, False, label=_('events'))
self._pos = {}
for index, name in enumerate(owner.events):
self._pos[name] = index
self.validator_re = re.compile(r'^\s*[\w-]+\s*$')
self.set_value([[name, ''] for name in owner.events])
def display(self, parent):
GridProperty.display(self, parent)
attr = wx.grid.GridCellAttr()
attr.SetReadOnly(True)
self.grid.SetColAttr(0, attr)
self.grid.AutoSizeColumn(0, False)
self.grid.AutoSizeColumn(1, False)
wx.grid.EVT_GRID_CELL_CHANGE(self.grid, self.on_change_val)
szr = self.panel.GetSizer()
szr.Show(self.btn_sizer, False)
szr.Layout()
def set_value_dict(self, values_dict):
val = self.get_value()
for row in val:
row[1] = values_dict.get(row[0], "")
self.set_value(val)
def write(self, outfile, tabs):
if self.getter:
handlers = self.getter()
else:
handlers = self.owner[self.name][0]()
if handlers:
written = False
write = outfile.write
#write(' ' * tabs + '<events>\n')
stab = ' ' * (tabs+1)
for event, handler in handlers:
if handler:
if not written:
written = True
write(' ' * tabs + '<events>\n')
write('%s<handler event=%s>%s</handler>\n' %
(stab, quoteattr(event), escape(handler.strip())))
if written:
write(' ' * tabs + '</events>\n')
def on_change_val(self, event):
val = self.get_value()
for i in range(len(val)):
handler = val[i][1].strip()
if handler and self.validator_re.match(handler) is None:
self.set_value(self.val)
return event.Skip()
GridProperty.on_change_val(self, event)
# end of class EventsProperty
class EventsPropertyHandler(object):
def __init__(self, owner):
#print 'EventsPropertyHandler', owner.name
self.owner = owner
self.handlers = {}
self.event_name = None
self.curr_handler = []
def start_elem(self, name, attrs):
if name == 'handler':
self.event_name = attrs['event']
def end_elem(self, name):
if name == 'handler':
if self.event_name and self.curr_handler:
self.handlers[self.event_name] = ''.join(self.curr_handler)
self.event_name = None
self.curr_handler = []
elif name == 'events':
self.owner.properties['events'].set_value_dict(self.handlers)
self.owner.set_events_dict(self.handlers)
return True # to remove this handler
def char_data(self, data):
data = data.strip()
if data:
self.curr_handler.append(data)
# end of class EventsPropertyHandler
default_events = []
class EventsMixin:
def __init__(self):
if not hasattr(self, 'events'):
self.events = default_events
self.handlers = {}
if self.events:
self.access_functions['events'] = self.get_events, self.set_events
self.properties['events'] = EventsProperty(self)
def get_events(self):
ret = []
for e in self.events:
ret.append([e, self.handlers.get(e, '')])
return ret
def set_events(self, handlers_list):
self.handlers = {}
for event, val in handlers_list:
if val.strip():
self.handlers[event] = val
def set_events_dict(self, handlers):
self.handlers = handlers
def create_events_property(self):
if not self.events:
return
panel = wx.Panel(self.notebook, -1)
self.properties['events'].display(panel)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.properties['events'].panel, 1, wx.ALL|wx.EXPAND, 5)
panel.SetSizerAndFit(sizer)
self.notebook.AddPage(panel, _('Events'))
def get_property_handler(self, name):
if name == 'events':
return EventsPropertyHandler(self)
return None
# end of class EventsMixin
|