[Anygui-checkins] CVS: anygui/lib/anygui Events.py,1.28,1.29 References.py,1.6,1.7
Brought to you by:
mlh
From: Magnus L. H. <ml...@us...> - 2001-11-26 14:00:08
|
Update of /cvsroot/anygui/anygui/lib/anygui In directory usw-pr-cvs1:/tmp/cvs-serv19519/lib/anygui Modified Files: Events.py References.py Log Message: Index: Events.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/Events.py,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -r1.28 -r1.29 *** Events.py 2001/11/25 15:33:08 1.28 --- Events.py 2001/11/26 14:00:05 1.29 *************** *** 2,11 **** ''' Event framework for Anygui. For more information, see Anygui IRFC 0010 at http://anygui.sf.net/irfc. ''' ! # TODO: - Use some internal value instead of None for defaults ! # - Add tags ! # - Fix optional arguments ! # - loop arg should perhaps be in link? Or both? __all__ = ''' --- 2,16 ---- ''' Event framework for Anygui. For more information, see Anygui IRFC 0010 at http://anygui.sf.net/irfc. + + Magnus Lie Hetland 2001-11-26 + ''' + + TODO = ''' + - Add tags + - Fix optional arguments/use of kwdargs in place of positionals etc. ''' ! # NOTE: Current semantics (with default events vs. globbing etc.) is ! # not necessarily consistent. I'm working on it... [mlh20011126] __all__ = ''' *************** *** 22,36 **** import time ! from References import ref, RefKeyDictionary ! registry = RefKeyDictionary() source_stack = [] ! class Any: pass ! any = Any() ! def link(source, event, handler, weak=0): 'Link a source and event to an event handler.' s = ref(source, weak) h = ref(handler, weak) if not registry.has_key(s): registry[s] = {} --- 27,51 ---- import time ! from References import ref, mapping ! registry = mapping() source_stack = [] ! class Internal: pass ! any = Internal() ! void = Internal() ! #def link(source, event, handler, tag=void, weak=0, loop=0): ! def link(*args, **kwds): 'Link a source and event to an event handler.' + assert len(args) < 4, 'link takes only three positional arguments' + if len(args) == 2: + source, handler = args; event = 'default' + else: + source, event, handler = args + weak = kwds.get('weak', 0) + tag = kwds.get('tag', void) s = ref(source, weak) h = ref(handler, weak) + #if tag is not void: h.tag = tag if not registry.has_key(s): registry[s] = {} *************** *** 40,56 **** registry[s][event].append(h) ! def unlink(source, event, handler): ! 'Unlink an event handler from an event pattern.' h = ref(handler, weak=0) ! for lst in lookup(source, event): try: lst.remove(h) except (KeyError, ValueError): pass ! def set_time(args): ! if not args.has_key('time'): ! args['time'] = time.time() ! ! def lookup(source, event): source = ref(source, weak=0) lists = [] --- 55,74 ---- registry[s][event].append(h) ! #def unlink(source, event, handler, tag=void): ! def unlink(*args, **kwds): ! 'Unlink an event handler from a source and event.' ! assert len(args) < 4, 'link takes only three positional arguments' ! if len(args) == 2: ! source, handler = args; event = 'default' ! else: ! source, event, handler = args ! tag = kwds.get('tag', void) h = ref(handler, weak=0) ! for lst in lookup(source, event, tag): try: lst.remove(h) except (KeyError, ValueError): pass ! def lookup(source, event, tag=void): source = ref(source, weak=0) lists = [] *************** *** 62,71 **** for e in events: try: ! lists.append(registry[s][e]) except KeyError: pass return lists ! # TODO: Add defaults etc. ! def send(source, event, loop=0, **kw): 'Call the appropriate event handlers with the supplied arguments. \ As a side-effect, dead handlers are removed from the candidate lists.' --- 80,90 ---- for e in events: try: ! h = registry[s][e] ! if tag == void or getattr(h,'tag',void): ! lists.append(registry[s][e]) except KeyError: pass return lists ! def send(source, event='default', tag=void, loop=0, **kw): 'Call the appropriate event handlers with the supplied arguments. \ As a side-effect, dead handlers are removed from the candidate lists.' *************** *** 75,80 **** try: results = [] ! set_time(args) ! for handlers in lookup(source, event): live_handlers = [] for r in handlers: --- 94,99 ---- try: results = [] ! args.setdefault('time', time.time()) ! for handlers in lookup(source, event, tag): live_handlers = [] for r in handlers: *************** *** 112,145 **** unlinkHandler(attr) except: pass - - """ - class Event: - __frozen = 0 - def __init__(self, **kwds): - self.__dict__.update(kwds) - def __setattr__(self, name, value): - if not self.__frozen: - self.__dict__[name] = value - else: - raise TypeError, 'object has been frozen' - def freeze(self): - if not self.__frozen: - self.__frozen = 1 - - class CallbackAdapter: - def send(self, event): - ''' - If self has a proper callback, call it, then call global - send(). - ''' - if not hasattr(event, 'source'): - event.source = self - set_time(event) - event.freeze() - callback = getattr(self, event.type, None) - if callback: - result = callback(event) - results = send(event) - if results: return [result] + results - else: return result - """ --- 131,132 ---- Index: References.py =================================================================== RCS file: /cvsroot/anygui/anygui/lib/anygui/References.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** References.py 2001/11/25 14:32:35 1.6 --- References.py 2001/11/26 14:00:05 1.7 *************** *** 16,19 **** --- 16,21 ---- return StrongReference(obj) + def mapping(init={}): return RefKeyDictionary(init) + def is_callable(obj): if callable(obj): return 1 |