X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/510bb7480c5138dd5127ed3d8b1d9cbab39983c9..1f780e48af479e7bf9a07eaaa1ab6b41f1ffb17b:/wxPython/samples/ide/activegrid/util/dependencymgr.py diff --git a/wxPython/samples/ide/activegrid/util/dependencymgr.py b/wxPython/samples/ide/activegrid/util/dependencymgr.py new file mode 100644 index 0000000000..272e8ebb0e --- /dev/null +++ b/wxPython/samples/ide/activegrid/util/dependencymgr.py @@ -0,0 +1,145 @@ +#---------------------------------------------------------------------------- +# Name: dependencymgr.py +# Purpose: Dependency Manager +# +# Author: Jeff Norton +# +# Created: 01/28/05 +# CVS-ID: $Id$ +# Copyright: (c) 2004-2005 ActiveGrid, Inc. +#---------------------------------------------------------------------------- + +DM_NO_ID = 0 +DM_ID_ATTR = "_DependencyMgr__ID" + +##class ManageableObject(object): +## +## def __init__(self): +## self.__id = DM_NO_ID +## +## def __repr__(self): +## return "" % self.__id +## +## def __getID(self): +## return self.__id +## +## def __setID(self, value): +## if (self.__id != DM_NO_ID): +## raise DependencyMgrException("Cannot set the dependency ID on object %s to \"%s\" because it already has one (\"%s\")." % (repr(self), value, self.__id)) +## self.__id = value +## +## _DependencyMgr__ID = property(__getID, __setID) + +class DependencyMgr(object): + + def __init__(self): + self.clear() + + def clear(self): + self.__dependencies = {} + self.__lastID = DM_NO_ID + + def addDependency(self, parent, child): + pid = self._initObjectID(parent) + try: + parentCollection = self.__dependencies[pid] + except KeyError: + parentCollection = self._newDependencyCollection() + self.__dependencies[pid] = parentCollection + if (child not in parentCollection): + parentCollection.append(child) + + def removeDependency(self, parent, child): + pid = self._getObjectID(parent) + if (pid != DM_NO_ID): + try: + parentCollection = self.__dependencies[pid] + parentCollection.remove(child) + if (len(parentCollection) == 0): + del self.__dependencies[pid] + except KeyError, ValueError: + pass + + def clearDependencies(self, parent): + "Returns a list of objects or an empty list if no dependencies exist as for getDependencies, and then removes the dependency list." + pid = self._getObjectID(parent) + try: + deps = self.__dependencies[pid] + del self.__dependencies[pid] + return deps + except KeyError: + return [] + + def hasDependency(self, parent): + "Returns a boolean" + return (self._getObjectID(parent) in self.__dependencies) + + def getDependencies(self, parent): + "Returns a list of objects or an empty list if no dependencies exist." + try: + return self.__dependencies[self._getObjectID(parent)] + except KeyError: + return [] + + def dumpState(self, out): + "Writes the state of the dependency manager (as reported by getState) to out" + for line in self.getState(): + print >> out, line + + def getState(self): + "Returns the state of the dependency manager including all managed objects as a list of strings" + out = [] + out.append("DependencyMgr %s has %i parent objects, last id assigned is %i" % (repr(self), len(self.__dependencies), self.__lastID)) + for key, val in self.__dependencies.iteritems(): + out.append("Object %s has dependents: %s " % (repr(key), ", ".join([repr(d) for d in val]))) + return out + + def _initObjectID(self, obj): + try: + id = getattr(obj, DM_ID_ATTR) + except AttributeError: + id = DM_NO_ID + if (id == DM_NO_ID): + id = self._newID() + setattr(obj, DM_ID_ATTR, id) + return id + + def _getObjectID(self, obj): + try: + id = getattr(obj, DM_ID_ATTR) + except AttributeError: + id = DM_NO_ID + return id + + def _newID(self): + self.__lastID += 1 + return self.__lastID + + def _newDependencyCollection(self): + return [] + +globalDM = DependencyMgr() + +def addDependency(parent, child): + getGlobalDM().addDependency(parent, child) + +def removeDependency(parent, child): + getGlobalDM().removeDependency(parent, child) + +def clearDependencies(parent): + return getGlobalDM().clearDependencies(parent) + +def hasDependency(parent): + return getGlobalDM().hasDependency(parent) + +def getDependencies(parent): + return getGlobalDM().getDependencies(parent) + +def getState(): + return getGlobalDM().getState() + +def dumpState(out): + getGlobalDM().dumpState(out) + +def getGlobalDM(): + return globalDM