Changeset 1362
- Timestamp:
- 06/12/07 01:00:25 (1 year ago)
- Files:
-
- gaphor/trunk/gaphor/application.py (modified) (5 diffs)
- gaphor/trunk/gaphor/services/actionmanager.py (modified) (2 diffs)
- gaphor/trunk/gaphor/services/copyservice.py (modified) (1 diff)
- gaphor/trunk/gaphor/services/undomanager.py (modified) (3 diffs)
- gaphor/trunk/gaphor/tests/test_application.py (modified) (1 diff)
- gaphor/trunk/gaphor/ui/diagramtoolbox.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
gaphor/trunk/gaphor/application.py
r1301 r1362 18 18 19 19 class _Application(object): 20 """ 21 The Gaphor application is started from the Application instance. It behaves 22 as a singleton in many ways. 23 24 The Application is responsible for loading services and plugins. Services 25 are registered as "utilities" in a global registry. 26 27 Methods are provided that wrap zope.component's handle, adapter and 28 subscription registrations. In addition to registration methods also 29 unregister methods are provided. This way services can be properly 30 unregistered on shutdown for example. 31 """ 20 32 21 33 # interface.implements(IApplication) … … 23 35 def __init__(self): 24 36 self._uninitialized_services = {} 37 self.globalSiteManager = component.getGlobalSiteManager() 25 38 26 39 def init(self, services=None): … … 65 78 log.info('initializing service service.%s' % name) 66 79 srv.init(self) 67 component.provideUtility(srv, IService, name)68 component.handle(ServiceInitializedEvent(name, srv))80 self.globalSiteManager.registerUtility(srv, IService, name) 81 self.handle(ServiceInitializedEvent(name, srv)) 69 82 return srv 70 83 … … 74 87 def get_service(self, name): 75 88 try: 76 return component.getUtility(IService, name)89 return self.globalSiteManager.getUtility(IService, name) 77 90 except component.ComponentLookupError: 78 91 return self.init_service(name) … … 83 96 84 97 def shutdown(self): 85 for name, srv in component.getUtilitiesFor(IService):98 for name, srv in self.globalSiteManager.getUtilitiesFor(IService): 86 99 srv.shutdown() 87 component.handle(ServiceShutdownEvent(name, srv)) 100 self.handle(ServiceShutdownEvent(name, srv)) 101 self.globalSiteManager.unregisterUtility(srv, IService, name) 88 102 89 103 # Re-initialize Zope's global site manager 90 104 # (cleanup adapters and utilities): 91 105 try: 92 from zope.component import globalSiteManager 93 globalSiteManager.__init__('base') 106 self.globalSiteManager.__init__('base') 94 107 except Exception, e: 95 108 log.error('Re-initialization of the Zope SiteManager failed', e) 96 109 self.__init__() 110 111 # Wrap zope.component's SiteManager methods 112 113 def registerAdapter(self, factory, adapts=None, provides=None, name=''): 114 """ 115 Register an adapter (factory) that adapts objects to a specific 116 interface. A name can be used to distinguish between different adapters 117 that adapt to the same interfaces. 118 """ 119 self.globalSiteManager.registerAdapter(factory, adapts, provides, 120 name, event=False) 121 122 def unregisterAdapter(self, factory=None, 123 required=None, provided=None, name=u''): 124 """ 125 Unregister a previously registered adapter. 126 """ 127 self.globalSiteManager.unregisterAdapter(factory, 128 required, provided, name) 129 130 def registerSubscriptionAdapter(self, factory, adapts=None, provides=None): 131 """ 132 Register a subscription adapter. See registerAdapter(). 133 """ 134 self.globalSiteManager.registerSubscriptionAdapter(factory, adapts, 135 provides, event=False) 136 137 def unregisterSubscriptionAdapter(self, factory=None, 138 required=None, provided=None, name=u''): 139 """ 140 Unregister a previously registered subscription adapter. 141 """ 142 self.globalSiteManager.unregisterSubscriptionAdapter(factory, 143 required, provided, name) 144 145 def registerHandler(self, factory, adapts=None): 146 """ 147 Register a handler. Handlers are triggered (executed) when specific 148 events are emited through the handle() method. 149 """ 150 self.globalSiteManager.registerHandler(factory, adapts, event=False) 151 152 def unregisterHandler(self, factory=None, required=None): 153 """ 154 Unregister a previously registered handler. 155 """ 156 self.globalSiteManager.unregisterHandler(factory, required) 157 158 def handle(self, *objects): 159 """ 160 Send event notifications to registered handlers. 161 """ 162 self.globalSiteManager.handle(*objects) 97 163 98 164 # Make sure there is only one! gaphor/trunk/gaphor/services/actionmanager.py
r1301 r1362 20 20 21 21 def init(self, app): 22 self._app = app 22 23 self.ui_manager = gtk.UIManager() 23 24 log.info('Loading not yet registered action provider services') … … 27 28 self.register_action_provider(service) 28 29 29 component.provideHandler(self._service_initialized_handler)30 app.registerHandler(self._service_initialized_handler) 30 31 31 32 def shutdown(self): 32 pass33 self._app.unregisterHandler(self._service_initialized_handler) 33 34 34 35 def execute(self, action_id, active=None): gaphor/trunk/gaphor/services/copyservice.py
r1301 r1362 50 50 51 51 def init(self, app): 52 self._app = app 52 53 self.action_group.get_action('edit-copy').props.sensitive = False 53 54 self.action_group.get_action('edit-paste').props.sensitive = False 54 55 55 component.provideHandler(self._update)56 app.registerHandler(self._update) 56 57 57 58 def shutdown(self): 58 59 self.copy_buffer = set() 60 self._app.unregisterHandler(self._update) 59 61 60 62 @component.adapter(IDiagramSelectionChange) gaphor/trunk/gaphor/services/undomanager.py
r1301 r1362 108 108 self._current_transaction = None 109 109 self._transaction_depth = 0 110 self.action_group = build_action_group(self) 110 111 111 112 def init(self, app): 112 113 self._app = app 113 component.provideHandler(self.begin_transaction) 114 component.provideHandler(self.commit_transaction) 115 component.provideHandler(self.rollback_transaction) 116 component.provideHandler(self._action_executed) 117 self._provide_undo_handlers() 118 self.action_group = build_action_group(self) 114 app.registerHandler(self.begin_transaction) 115 app.registerHandler(self.commit_transaction) 116 app.registerHandler(self.rollback_transaction) 117 app.registerHandler(self._action_executed) 118 self._register_undo_handlers() 119 119 self._action_executed(None) 120 120 121 121 def shutdown(self): 122 pass 122 self._app.unregisterHandler(self.begin_transaction) 123 self._app.unregisterHandler(self.commit_transaction) 124 self._app.unregisterHandler(self.rollback_transaction) 125 self._app.unregisterHandler(self._action_executed) 126 self._unregister_undo_handlers() 123 127 124 128 def clear_undo_stack(self): … … 254 258 ## 255 259 256 def _provide_undo_handlers(self): 257 component.provideHandler(self.undo_create_event) 258 component.provideHandler(self.undo_delete_event) 259 component.provideHandler(self.undo_attribute_change_event) 260 component.provideHandler(self.undo_association_set_event) 261 component.provideHandler(self.undo_association_add_event) 262 component.provideHandler(self.undo_association_delete_event) 260 def _undo_handler(self, event): 261 self.add_undo_action(lambda: state.saveapply(*event)); 262 263 def _register_undo_handlers(self): 264 self._app.registerHandler(self.undo_create_event) 265 self._app.registerHandler(self.undo_delete_event) 266 self._app.registerHandler(self.undo_attribute_change_event) 267 self._app.registerHandler(self.undo_association_set_event) 268 self._app.registerHandler(self.undo_association_add_event) 269 self._app.registerHandler(self.undo_association_delete_event) 263 270 264 271 # … … 267 274 state.observers.add(state.revert_handler) 268 275 269 def _undo_handler(event): 270 self.add_undo_action(lambda: state.saveapply(*event)); 271 272 state.subscribers.add(_undo_handler) 273 276 state.subscribers.add(self._undo_handler) 277 278 def _unregister_undo_handlers(self): 279 self._app.unregisterHandler(self.undo_create_event) 280 self._app.unregisterHandler(self.undo_delete_event) 281 self._app.unregisterHandler(self.undo_attribute_change_event) 282 self._app.unregisterHandler(self.undo_association_set_event) 283 self._app.unregisterHandler(self.undo_association_add_event) 284 self._app.unregisterHandler(self.undo_association_delete_event) 285 286 from gaphas import state 287 state.observers.discard(state.revert_handler) 288 289 state.subscribers.discard(self._undo_handler) 274 290 275 291 @component.adapter(IElementCreateEvent) gaphor/trunk/gaphor/tests/test_application.py
r1247 r1362 22 22 Application.load_services() 23 23 assert Application.get_service('undo_manager') 24 assert Application.get_service(' plugin_manager')24 assert Application.get_service('file_manager') 25 25 26 26 # After that, services are also available as Utilities: 27 27 assert component.queryUtility(IService, 'undo_manager') 28 assert component.queryUtility(IService, ' plugin_manager')28 assert component.queryUtility(IService, 'file_manager') 29 29 30 30 gaphor/trunk/gaphor/ui/diagramtoolbox.py
r1293 r1362 95 95 """ 96 96 tool = list(itemiter(TOOLBOX_ACTIONS))[id][0] 97 log.info('Selected item %d: %s' % (id, tool))98 97 getattr(self, tool.replace('-', '_'))() 99 98
