Ejemplo n.º 1
0
class TriggerManager(object):
    '''
    Auto disconnected trigger manager
    
    Wraps SCRIBES.TriggerManager and calls remove_triggers on object deletion 
    '''
    def __init__(self, editor):
        self.manager = CoreTriggerManager(editor)
        self.triggers = {}

    def __del__(self):
        self.triggers.clear()
        self.manager.remove_triggers()
    
    def connect_triggers(self, obj):
        '''
        Connects object methods marked by trigger decorator  
        '''
        for attr, value in obj.__class__.__dict__.iteritems():
            for trigger, connect_params in getattr(value, 'triggers_to_connect', ()):
                self.connect(trigger, obj, attr, **connect_params)
        
    def connect(self, trigger, obj, attr, after, idle):
        if trigger.name not in self.triggers:
            self.triggers[trigger.name] = trigger.create(self.manager)
    
        weak_connect(self.triggers[trigger.name], 'activate', obj, attr, after=after, idle=idle)