import sys #: Dictionary of observers _observers = {} #: The current Navigator object. navigator = None #: The current application application = None #: The current project project = None #: The current workflow workflow = None #: A cfgparse/optparse options object. options = None def notify_observers(name): call = "%s_changed" % name for s in _observers.get(name, []): getattr(s, call)(getattr(sys.modules[__name__], name)) def _add_observer(name, observer): """Adds observer as an observer of the named object.""" if not _observers.has_key(name): _observers[name] = [] _observers[name].append(observer) def _remove_observer(name, observer): """Removes observer as an observer of the named object.""" if not _observers.has_key(name): return _observers.remove(observer) def add_navigator_observer(observer): _add_observer('navigator', observer) def add_project_observer(observer): _add_observer('project', observer) def add_workflow_observer(observer): _add_observer('workflow', observer) def add_application_observer(observer): _add_observer('application', observer) def remove_navigator_observer(observer): _remove_observer('navigator', observer) def remove_project_observer(observer): _remove_observer('project', observer) def remove_workflow_observer(observer): _remove_observer('workflow', observer) def remove_application_observer(observer): _remove_observer('application', observer) def remove_options_observer(observer): _remove_observer('options', observer) def set_navigator(nav): global navigator navigator = nav notify_observers('navigator') def set_application(app): global application application = app notify_observers('application') def set_project(p): global project project = p notify_observers('project') def set_workflow(wf): global workflow workflow = wf notify_observers('workflow') def set_options(opt): global options options = opt notify_observers('options')