From ce4a32fe52ef09d8f5ff1dd22c001110902b60a2 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- dcop/dcopsignals.h | 158 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 dcop/dcopsignals.h (limited to 'dcop/dcopsignals.h') diff --git a/dcop/dcopsignals.h b/dcop/dcopsignals.h new file mode 100644 index 000000000..142d713cb --- /dev/null +++ b/dcop/dcopsignals.h @@ -0,0 +1,158 @@ +/* +Copyright (c) 2000 Waldo Bastian + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#ifndef DCOPSIGNALS_H +#define DCOPSIGNALS_H "$Id$" + +#include +#include +#include +#include +#include "kdelibs_export.h" + +class DCOPConnection; + +/** \internal + * This requires: + * DCOPSignalConnectionList * DCOPConnection::signalConnectionList() +*/ +class DCOP_EXPORT DCOPSignalConnection +{ +public: + QCString sender; // Sender client, empty means any client + DCOPConnection *senderConn; //Sender client. + QCString senderObj; // Object that sends the signal. + QCString signal; // Signal name. Connections are sorted on signal name. + + DCOPConnection *recvConn; // Client that wants to receive the signal + QCString recvObj; // Object that wants to receive the signal + QCString slot; // Function to send to in the object. +}; + +/** \internal */ +class DCOP_EXPORT DCOPSignalConnectionList : public QPtrList +{ +public: + DCOPSignalConnectionList() { }; +}; + +/** + * @internal + */ +class DCOP_EXPORT DCOPSignals +{ +public: + DCOPSignals(); + + /** + * Client "conn" emits the signal "fun" with "data" as arguments. + * conn is 0L if the dcopserver sends the signal itself + * + * The emitting object is encoded in "fun". + * + * If "excludeSelf" is true, signal is never send to "conn" itself. + */ + void emitSignal( DCOPConnection *conn, const QCString &fun, const QByteArray &data, bool excludeSelf); + + /** + * Connects "signal" of the client named "sender" with the "slot" of + * "receiverObj" in the "conn" client. + * + * If "Volatile" is true the connection will be removed when either + * "sender" or "conn" unregisters. + * + * If "Volatile" is false the connection will only be removed when + * "conn" unregisters. + * + * Returns true if succesfull. False on failure. + * An attempt to create a Volatile connection to a non-existing client + * results in a failure. + */ + bool connectSignal( const QCString &sender, const QCString &senderObj, + const QCString &signal, + DCOPConnection *conn, const QCString &receiverObj, + const QCString &slot, bool Volatile); + + /** + * Disconnects "signal" of the client named "sender" from the "slot" of + * "receiverObj" in the "conn" client. + * + * If "receiverObj" is empty, every object is disconnected. + * If "slot" is empty, every slot is disconnected. + * + * Returns true if successful, false if no connection was found. + */ + bool disconnectSignal( const QCString &sender, const QCString &senderObj, + const QCString &signal, + DCOPConnection *conn, const QCString &receiverObj, + const QCString &slot); + + /** + * Removes all connections related to the "conn" client. + * This means: + * All connections for which "conn" is the receiver. + * All volatile connections for which "conn" is the sender. + */ + void removeConnections(DCOPConnection *conn, const QCString &obj=0); + + + /* + * The administration. + * + * All connections are sorted by "signal" and then inserted in the + * administration as a list. + * + * connections[signal] gives a list of all connections related to + * a given signal. The connections in this list may specify different + * senders and receiving clients/objects. + */ + QAsciiDict connections; +}; + +// +// connectSignal: +// +// Check whether signal and slot match wrt arguments. +// A slot may ignore arguments from the signal. +// +// If volatile +// then lookup senderConn... +// If not found? +// then return false +// Create DCOPSignalConnection. +// Add DCOPSignalConnection to "connections". +// Add DCOPSignalConnection to conn->connectionList() +// If volatile +// then Add DCOPSignalConnection to senderConn->connectionList() +// Return true + + +// removeConnections: +// +// For each DCOPSignalConnection in conn->connectionList +// if DCOPSignalConnection->sender == conn->appId +// then remove DCOPSignalConnection from DCOPSIgnalConnection->conn +// if DCOPSignalConnection->conn == conn +// then.. this is ugly.. remove DCOPSignalConnection from DCOPSignalConnection->sender +// WARNING: Take care when sender and conn are the same client! +// Remove DCOPSignalConnection from connections[DCOPSignalConnection->signal] + +#endif -- cgit v1.2.1