Changeset 2219

Show
Ignore:
Timestamp:
02/22/08 08:04:36 (3 months ago)
Author:
arj..@yirdis.nl
Message:

Propagate events as (class, event). This should avoid some overhead (#102).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gaphor/trunk/gaphor/UML/elementfactory.py

    r2208 r2219  
    5757    def init(self, app): 
    5858        self._app = app 
     59        app.register_handler(self._element_notify) 
    5960        app.register_handler(self._element_deleted) 
    6061 
    6162    def shutdown(self): 
    6263        # unregister after flush: the handler is needed to empty the _elements 
     64        self._app.unregister_handler(self._element_notify) 
    6365        self.flush() 
    6466        self._app.unregister_handler(self._element_deleted) 
     
    189191        self._app.handle(ModelFactoryEvent(self)) 
    190192 
     193    @component.adapter(IElementChangeEvent) 
     194    def _element_notify(self, event): 
     195        """ 
     196        Dispatch IElementChangeEvent events to interested adapters registered 
     197        by (class, event). 
     198        """ 
     199        self._app.handle(event.element, event) 
     200 
    191201    @component.adapter(IElementDeleteEvent) 
    192202    def _element_deleted(self, event): 
  • gaphor/trunk/gaphor/UML/tests/test_elementfactory.py

    r2207 r2219  
    113113        self.assertTrue(IFlushFactoryEvent.providedBy(last_event) ) 
    114114 
     115    def test_element_event(self): 
     116        ef = self.factory 
    115117 
    116 # vim:sw=4:et 
     118        events = [] 
     119        @component.adapter(Class, IElementChangeEvent) 
     120        def handler(element, event, events=events): 
     121            assert element is event.element 
     122            events.append(event) 
     123 
     124        Application.register_handler(handler) 
     125 
     126        try: 
     127            c = Class() 
     128            c.name = 'name' 
     129            assert len(events) == 1, events 
     130            assert events[0].new_value == 'name' 
     131        finally: 
     132            Application.unregister_handler(handler) 
     133 
     134 
     135# vim:sw=4:et:ai