diff options
Diffstat (limited to 'dcoppython/lib/pydcop.py')
-rw-r--r-- | dcoppython/lib/pydcop.py | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/dcoppython/lib/pydcop.py b/dcoppython/lib/pydcop.py new file mode 100644 index 00000000..0333b742 --- /dev/null +++ b/dcoppython/lib/pydcop.py @@ -0,0 +1,122 @@ +import pcop + +def registeredApplications(): + """Return a list of current DCOP registered applications.""" + return pcop.app_list() + +def apps(): + """Return a list of current DCOP registered applications.""" + return pcop.app_list() + +def anyAppCalled(appName): + """Return any application instance called appName, or None if none currently registered.""" + for app in apps(): + if appName==app or appName+'-'==app[:len(appName)+1]: + return DCOPApplication(app) + return None + +def registerAs(appid, addpid=1): + """Register the application with DCOP and return the ID. This is needed in order to receive DCOP requests.""" + return pcop.register_as(appid,addpid) + +def processEvents(): + """Process any waiting QT events, then return.""" + pcop.process_events() + +def connectDCOPSignal(sender,senderObj,signal,receiverObj,slot,vol=1): + """Connect a dcop signal""" + return pcop.connect_dcop_signal(sender,senderObj,signal,receiverObj,slot,vol) + +def disconnectDCOPSignal(sender,senderObj,signal,receiverObj,slot): + """Connect a dcop signal""" + return pcop.disconnect_dcop_signal(sender,senderObj,signal,receiverObj,slot) + +class DCOPApplication(object): + def __init__( self, name ): + self.name = name + + def __getattr__( self, item ): + if item == "__repr__": + return object.__repr__ + if item == "__str__": + return object.__str__ + if item == "__call__": + return object.__call__ + if item == "_objects_": + return pcop.obj_list(self.name) + return DCOPObject( self.name, item ) + + def _object_(self, object): + return DCOPObject( self.name, object ) + +class DCOPObject(object): + def __init__( self, appname, name ): + self.appname = appname + self.name = name + + def __repr__( self ): + return "DCOPObject(%s,%s)" % ( self.appname, self.name ) + + def __str__( self ): + return "DCOPObject(%s,%s)" % ( self.appname, self.name ) + + def __getattr__( self, item ): + if item == "__repr__": + return object.__repr__ + if item == "__str__": + return object.__str__ + if item == "__call__": + return object.__call__ + if item == "_methods_": + return pcop.method_list( self.appname, self.name ) + return DCOPMethod( self.appname, self.name, item ) + + def _method_(self, method): + return DCOPMethod( self.appname, self.name, method ) + +class DCOPMethod(object): + def __init__( self, appname, objname, name ): + self.appname = appname + self.objname = objname + self.name = name + + def __repr__( self ): + return "DCOPMethod(%s,%s,%s)" % ( self.appname, self.objname, self.name ) + + def __str__( self ): + return "DCOPMethod(%s,%s,%s)" % ( self.appname, self.objname, self.name ) + + def __call__( self, *args ): + return pcop.dcop_call( self.appname, self.objname, self.name, args ) + +class DCOPServer(object): + def __init__( self, appid, addpid = 1): + self.app_id = pcop.register_as(appid, addpid) + + +class DCOPServerObject: + """Inherit from this class to DCOP enabled your object. + + Remember to call the base class constructor, and in your own constructor + you should called setMethods to set the methods to DCOP enable. + """ + + def __init__(self, objName=None): + """objName is the name of the object. If omitted, it will default to a hex + address. It is best to supply it.""" + if objName: + self.dcop_obj = pcop.create_dcop_object(self, objName) + else: + self.dcop_obj = pcop.create_dcop_object(self) + + def setMethods(self, methods): + """Set the method list for this object. + + methods is a list of tuple pairs. Each pair consists of the + method signature and the Python method that handles it. + + For example, setMethods([ ('QString cheeseType()', self.cheese_type), + ('void setGreatWines(bool perthPink, bool hobartMuddy, bool chateauChunder)') + """ + pcop.set_method_list(self.dcop_obj, methods) + |