root/gaphor/tags/gaphor-0.12.0/gaphor/services/actionmanager.py

Revision 1861, 2.4 kB (checked in by arj..@yirdis.nl, 1 year ago)

Changed !camelCase method to underscore notation, according to coding guidelines.

Line 
1 """
2 """
3
4 import gtk
5 from zope import interface, component
6 from gaphor.core import inject
7 from gaphor.interfaces import IService, IActionProvider
8 from gaphor.event import ServiceInitializedEvent, ActionExecuted
9
10
11 class ActionManager(object):
12     """
13     This service is responsible for maintaining actions.
14     """
15
16     interface.implements(IService)
17
18     def __init__(self):
19         pass
20
21     def init(self, app):
22         self._app = app
23         self.ui_manager = gtk.UIManager()
24         log.info('Loading not yet registered action provider services')
25         for name, service in component.getUtilitiesFor(IService):
26             if IActionProvider.providedBy(service):
27                 log.debug('Loading already registered service %s' % str(service))
28                 self.register_action_provider(service)
29
30         app.register_handler(self._service_initialized_handler)
31
32     def shutdown(self):
33         self._app.unregister_handler(self._service_initialized_handler)
34
35     def execute(self, action_id, active=None):
36         a = self.get_action(action_id)
37         if a:
38             a.activate()
39             component.handle(ActionExecuted(action_id, a))
40         else:
41             log.warning('Unknown action: %s' % action_id)
42
43     def update_actions(self):
44         self.ui_manager.ensure_update()
45
46     def get_action(self, action_id):
47         for g in self.ui_manager.get_action_groups():
48             a = g.get_action(action_id)
49             if a: return a
50
51     def register_action_provider(self, action_provider):
52         action_provider = IActionProvider(action_provider)
53         try:
54             # Check if the action provider is not already registered
55             action_provider.__ui_merge_id
56         except AttributeError:
57             log.debug('Registering actions for %s' % str(action_provider))
58            
59             assert action_provider.action_group
60             self.ui_manager.insert_action_group(action_provider.action_group, -1)
61             if action_provider.menu_xml:
62                 action_provider.__ui_merge_id = \
63                         self.ui_manager.add_ui_from_string(action_provider.menu_xml)
64
65     @component.adapter(ServiceInitializedEvent)
66     def _service_initialized_handler(self, event):
67         if IActionProvider.providedBy(event.service):
68             log.debug('Loading registered service %s' % str(event.service))
69             self.register_action_provider(event.service)
70
71
72 # vim:sw=4:et:ai
Note: See TracBrowser for help on using the browser.