Author: erijo
Date: Sat Sep 16 01:59:41 2006
New Revision: 4609

URL: http://svn.licq.org/viewvc/licq?rev=4609&view=rev
Log:
Updated kimiface.h from KDE 3.5.4

Modified:
    branches/qt-gui-no-qt2/src/kimiface.h

Modified: branches/qt-gui-no-qt2/src/kimiface.h
URL: 
http://svn.licq.org/viewvc/licq/branches/qt-gui-no-qt2/src/kimiface.h?rev=4609&r1=4608&r2=4609&view=diff
==============================================================================
--- branches/qt-gui-no-qt2/src/kimiface.h (original)
+++ branches/qt-gui-no-qt2/src/kimiface.h Sat Sep 16 01:59:41 2006
@@ -1,7 +1,7 @@
 /*
     kimiface.h - KDE Instant Messenger DCOP Interface
 
-       Copyright (c) 2004    Will Stephenson    <[EMAIL PROTECTED]>
+    Copyright (c) 2004-5 Will Stephenson   <[EMAIL PROTECTED]>
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
@@ -15,8 +15,8 @@
 
     You should have received a copy of the GNU Library General Public License
     along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-    Boston, MA 02111-1307, USA.
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
 */
 
 #ifndef KIMIFACE_H
@@ -28,14 +28,56 @@
 #include <kurl.h>
 
 /**
- * Generic DCOP interface for KDE instant messenger applications
- * Note one omission of this interface is the lack of control over the range 
of values used for protocols' names.
- *
- * If you are implementing this interface, note that your application must 
have the following information in its
- * desktop file, so that it can be identified as providing KIMIface at runtime:
- * X-DCOP-ServiceName=\<application name\>
+ * @brief Generic DCOP interface for KDE instant messenger applications
+ *
+ * The interface has two parts:
+ * - methods to get information about IM-contacts, such as their reachability
+ *   or their presence status (if the are online or away, etc)
+ * - methods to initiate communication with IM-contacts, e.g. sending messages
+ *
+ * @note If you are looking for a information about accessing application's
+ * that implement this interface, have a look at the KIMProxy class.
+ *
+ * Contacts are identified using unique identifier strings (UID) used by
+ * KABC, the KDE address book library.
+ * The UID generation is handled by KABC::Addressee so the your application
+ * will either have to access the address book or provide a possibility
+ * for associating a contact of your application with an entry of the address
+ * book.
+ *
+ * @note one omission of this interface is the lack of control over the range
+ * of values used for protocols' names.
+ *
+ * If you are implementing this interface, note that your application must
+ * have the following information in its desktop file, so that it can be
+ * identified as providing KIMIface at runtime:
+ * @code
+ * X-DCOP-ServiceName=<application-name>
  * ServiceTypes=DCOP/InstantMessenger
- * and the class implementing KIMIface must pass "KIMIface" to the DCOPObject 
constructor.
+ * @endcode
+ * and the class implementing KIMIface must pass "KIMIface" to the DCOPObject 
constructor:
+ * @code
+ * // just need QObject inheritance and Q_OBJECT if you want signals and slots
+ * // no need to use K_DCOP macro again
+ *
+ * class MyIMIface : public QObject, public KIMIface
+ * {
+ *     Q_OBJECT
+ * public:
+ *    MyIMIface(QObject* parent = 0, const char* name) :
+ *        DCOPObject("KIMIface"), // <-- passing the interface name as required
+ *        QObject(parent, name) {}
+ * };
+ * @endcode
+ *
+ * The DCOP part of the interface needs to be processed by the DCOP IDL
+ * compiler. The KDE autotools framework will do this automatically, all
+ * you have to do is add kimiface.skel and kimiface.stub to the
+ * @c SOURCES list in your @c Makefile.am
+ *
+ * @see KIMProxy
+ * @see KABC::AddressBook
+ * @see KABC::Addressee
  *
  * @since 3.3
  * @author Will Stephenson <[EMAIL PROTECTED]>
@@ -48,125 +90,353 @@
 // ACCESSORS
 // contact list
        /**
-        * Obtain a list of IM-contactable entries in the KDE
-        * address book.
-        * @return a list of KABC uids.
+        * @brief Obtain a list of IM-contacts that are known to the application
+        *
+        * Return a list of KABC UIDs of all the contacts you have such IDs for.
+        *
+        * @return a list of KABC UIDs known to the application
+        *
+        * @see reachableContacts()
+        * @see onlineContacts()
+        * @see fileTransferContacts()
+        * @see isPresent()
+        * @see KABC::Addressee::uid()
         */
        virtual QStringList allContacts() = 0;
-       /**
-        * Obtain a list of KDE address book entries who are
-        * currently reachable.
-        * @return a list of KABC uids who can receive a message, even if 
offline.
+
+       /**
+        * @brief Obtain a list of IM-contacts that are currently reachable
+        *
+        * Return a list of KABC UIDs of the contacts that are reachable in the
+        * sense that you are connected to the IM-service they are
+        * associated with.
+        *
+        * For example if your application supports ICQ and AIM and the ICQ 
account is
+        * active but the AIM account isn't, return just the ICQ contacts.
+        *
+        * @return a list of KABC UIDs who can receive a message, even if 
offline
+        *
+        * @see allContacts()
+        * @see onlineContacts()
+        * @see fileTransferContacts()
+        * @see messageContact()
+        * @see KABC::Addressee::uid()
         */
        virtual QStringList reachableContacts() = 0;
-       /**
-        * Obtain a list of KDE address book entries who are
-        * currently online.
-        * @return a list of KABC uids who are online with unspecified presence.
+
+       /**
+        * @brief Obtain a list of IM-contacts that are currently online
+        *
+        * Return a list of KABC UIDs of the contacts you have any presence
+        * information for that indicates that they are connected to the
+        * IM-service they are associated with.
+        *
+        * @return a list of KABC UIDs who are online with unspecified presence
+        *
+        * @see allContacts()
+        * @see reachableContacts()
+        * @see fileTransferContacts()
+        * @see messageContact()
+        * @see chatWithContact()
+        * @see KABC::Addressee::uid()
         */
        virtual QStringList onlineContacts() = 0;
-       /**
-        * Obtain a list of KDE address book entries who may
-        * receive file transfers.
-        * @return a list of KABC uids capable of file transfer.
+
+       /**
+        * @brief Obtain a list of IM-contacts who may receive file transfers
+        *
+        * Return a list of KABC UIDs of the contacts that are capable of
+        * receiving file transfers based on the IM-service they are associated
+        * with, i.e. if it is technically able to provide this, on their online
+        * state, i.e. can likely not receive files while offline, and perhaps 
even
+        * information your application has additionally, e.g. a user config 
that
+        * tells you that the contact is behind a firewall.
+        *
+        * The simplest implementation is to return the same list as
+        * onlineContacts(), provided all the IM-services that are currently 
used
+        * support it.
+        *
+        * @return a list of KABC UIDs capable of file transfer
+        *
+        * @see allContacts()
+        * @see reachableContacts()
+        * @see onlineContacts()
+        * @see canReceiveFiles()
+        * @see sendFile()
+        * @see KABC::Addressee::uid()
         */
        virtual QStringList fileTransferContacts() = 0;
 
 // individual
        /**
-        * Confirm if a given contact is known to the IM application
-        * @param uid the KABC uid you are interested in.
-        * @return whether the program knows of this KABC uid.
+        * @brief Confirm if a given contact is known to the IM application
+        *
+        * Check if you can map the given KABC UID to one if the IM-contacts, 
e.g.
+        * the would be part of the list returned by allContacts()
+        *
+        * @param uid the KABC UID you are interested in
+        * @return whether the program knows of this KABC UID
+        *
+        * @see allContacts()
+        * @see presenceString()
+        * @see presenceStatus()
+        * @see KABC::Addressee::uid()
         */
        virtual bool isPresent( const QString & uid ) = 0;
-       /**
-        * Obtain the IM app's idea of the contact's display name
-        * Useful if KABC lookups may be too slow
-        * @param uid the KABC uid you are interested in.
-        * @return the corresponding display name.
+
+       /**
+        * @brief Obtain the IM app's idea of the contact's display name
+        *
+        * Useful if KABC lookups may be too slow. Should return whatever
+        * the application uses in its contact list or similar GUI, e.g.
+        * a nick name, a user configured name string, etc.
+        *
+        * @param uid the KABC UID you are interested in
+        * @return the corresponding display name or QString:null if the
+        *         UID is unknown
+        *
+        * @see isPresent()
+        * @see presenceString()
+        * @see presenceStatus()
+        * @see KABC::Addressee::uid()
         */
        virtual QString displayName( const QString & uid ) = 0;
-       /**
-        * Obtain the IM presence as a i18ned string for the specified contact
-        * @param uid the KABC uid you want the presence for.
-        * @return the i18ned string describing presence.
+
+       /**
+        * @brief Obtain the IM presence as a i18ned string for the specified
+        *        contact
+        *
+        * Return a translated string your application would use when displaying
+        * the contact's presence, e.g. i18n("Online"), i18n("Away")
+        *
+        * @param uid the KABC UID you want the presence for
+        * @return the i18ned string describing the contact's presence or
+        *         QString::null if the UID is unknown
+        *
+        * @see isPresent()
+        * @see presenceStatus()
+        * @see KABC::Addressee::uid()
         */
        virtual QString presenceString( const QString & uid ) = 0;
-       /**
-        * Obtain the IM presence as a number for the specified contact
-        * @param uid the KABC uid you want the presence for.
-        * @return a numeric representation of presence - currently one of 0 
(Unknown), 1 (Offline), 2 (Connecting), 3 (Away), 4 (Online)
+
+       /**
+        * @brief Obtain the IM presence as a number for the specified contact
+        *
+        * Return one of the following values depending on the given contact's
+        * presence:
+        * - 0 - @c Unknown: for contacts where you can not use any of the other
+        *   values
+        *
+        * - 1 - @c Offline: for contacts that are offline, i.e. not connected 
to
+        *   their IM-service. If the application itself or the IM-service for 
the
+        *   given contact is offline return @c Unknown instead
+        *
+        * - 2 - @c Connecting
+        *
+        * - 3 - @c Away: for contacts that are connected to their IM-service 
but
+        *   not @c Online
+        *
+        * - 4 - @c Online
+        *
+        * @param uid the KABC UID you want the presence for
+        * @return a numeric representation of presence - currently one of
+        *         0 (Unknown), 1 (Offline), 2 (Connecting), 3 (Away), 4 
(Online).
+        *         Returns 0 if the given UID is unknown
+        *
+        * @see isPresent()
+        * @see presenceString()
+        * @see KABC::Addressee::uid()
         */
        virtual int presenceStatus( const QString & uid ) = 0;
-       /**
-        * Indicate if a given contact can receive files
-        * @param uid the KABC uid you are interested in.
-        * @return whether the specified addressee can receive files.
+
+       /**
+        * @brief Indicate if a given contact can receive files
+        *
+        * @param uid the KABC UID you want to the file transfer capability for
+        * @return whether the specified contact can receive files
+        *
+        * @see fileTransferContacts()
+        * @see KABC::Addressee::uid()
         */
        virtual bool canReceiveFiles( const QString & uid ) = 0;
-       /**
-        * Some media are unidirectional (eg, sending SMS via a web interface).
-        * This refers to the contact's ability to respond as defined by the 
medium, not by their presence.
-        * Someone may appear offline (SMS has no presence) to you but in fact 
be able to respond.
-        * @param uid the KABC uid you are interested in.
-        * @return whether the specified contact can respond.
+
+       /**
+        * @brief Indicate if a given contact will be able to respond
+        *
+        * Some media are unidirectional (e.g., sending SMS via a web 
interface).
+        * This refers to the contact's ability to respond as defined by the
+        * medium, not by their presence.
+        *
+        * Someone may appear offline (SMS has no presence) to you but in fact 
be
+        * able to respond.
+        *
+        * @param uid the KABC UID you are interested in
+        * @return whether the specified contact can respond
+        *
+        * @see isPresent()
+        * @see KABC::Addressee::uid()
         */
        virtual bool canRespond( const QString & uid ) = 0;
-       /**
-        * Get the KABC uid corresponding to the supplied IM address
-        * @param contactId the protocol specific identifier for the contact, 
eg UIN for ICQ, screenname for AIM, nick for IRC.
-        * @param protocol the protocol, eg one of "AIMProtocol", 
"MSNProtocol", "ICQProtocol",
-        * @return a KABC uid or null if none found
+
+       /**
+        * @brief Obtain the KABC UID corresponding to the given IM address
+        *
+        * @param contactId the protocol specific identifier for the contact,
+        *        e.g. UIN for ICQ, screenname for AIM, nick for IRC
+        * @param protocol the IM protocol/service to check. See protocols()
+        * @return the KABC UID for the given contact or @c QString::null if not
+        *         found or either input stream was empty or the protocol is not
+        *         supported
+        *
+        * @see protocols()
+        * @see addContact()
+        * @see isPresent()
+        * @see KABC::Addressee::uid()
         */
        virtual QString locate( const QString & contactId, const QString & 
protocol ) = 0;
+
 // metadata
        /**
-        * Obtain the icon representing IM presence for the specified contact
-        * @param uid the KABC uid you want the presence for.
-        * @return a pixmap representing the uid's presence.
+        * @brief Obtain the icon representing the IM presence for the specified
+        *        contact
+        *
+        * Return the image the application would use to display a contact's 
presence.
+        * The size and other properties of the image are currently unspecified.
+        *
+        * @param uid the KABC UID you want the presence icon for
+        * @return a pixmap representing the contact's presence or a null pixmap
+        *         if the contact is unknown. See QPixmap::isNull()
+        *
+        * @see isPresent()
+        * @see presenceString()
+        * @see presenceStatus()
+        * @see KABC::Addressee::uid()
         */
        virtual QPixmap icon( const QString & uid ) = 0;
-       /**
-        * Get the supplied contact's current context (home, work, or any).
-        * @param uid the KABC uid you want the context for.
-        * @return a QString describing the context, or null if not supported.
+
+       /**
+        * @brief Obtain the given contact's current context (home, work, or 
any)
+        *
+        * Not all IM services/protocols support the concept of contexts. If the
+        * given UID maps to such a service, just return @c QString::null
+        *
+        * @param uid the KABC UID you want the context for
+        * @return a string describing the context, or @c QString::null if not
+        *         supported or if the contact is unknown
+        *
+        * @see isPresent()
+        * @see KABC::Addressee::uid()
         */
        virtual QString context( const QString & uid ) = 0;
+
 // App capabilities
        /**
-        * Discover what protocols the application supports
-        * @return the set of protocols that the application supports, ie a 
list of
-        * protocol names, eg "AIMProtocol", "MSNProtocol", "ICQProtocol", ...
+        * @brief Obtain a list of supported IM services/protocols
+        *
+        * Protocol names are currently of the form "protocol name" + "Protocol"
+        * for example:
+        * - AIMProtocol: AOL instant messenger protocol
+        * - MSNProtocol: Microsoft messanger protocol
+        * - ICQProtocol: AOL (Mirabilis) ICQ protocol
+        * - ....
+        *
+        * The string is currently just an identifier to use with methods such 
as
+        * locate(), addContact() or messageNewContact()
+        *
+        * @return the set of protocols that the application supports
+        *
+        * @see locate()
+        * @see addContact()
+        * @see messageNewContact
         */
        virtual QStringList protocols() = 0;
 
 // ACTORS
        /**
-        * Send a single message to the specified contact
+        * @brief Send a single message to the specified contact
+        *
         * Any response will be handled by the IM client as a normal
         * conversation.
-        * @param uid the KABC uid you want to send the message to.
-        * @param message the message to send them.
+        *
+        * Implementations might send the message silently, ask the user for
+        * permission or just prefill the usual message input GUI.
+        *
+        * @note As sending any text could potentially be a breach of the user's
+        * privacy it is recommended to let the user know about it.
+        *
+        * @param uid the KABC UID you want to send the message to
+        * @param message the message text to send to the contact
+        *
+        * @see messageNewContact()
+        * @see chatWithContact()
+        * @see sendFile()
+        * @see isPresent()
+        * @see reachableContacts()
+        * @see KABC::Addressee::uid()
         */
        virtual void messageContact( const QString &uid, const QString& message 
) = 0;
 
        /**
-        * Open a chat to a contact, and optionally set some initial text
+        * @brief Send a single message to a contact given only its protocol
+        *        specific identifier
+        *
+        * This could be used to send a message without having to know the KABC 
UID
+        * of the contact or without having to add it first.
+        * 
+        * @param contactId the protocol specific identifier for the contact,
+        *        e.g. UIN for ICQ, screenname for AIM, nick for IRC
+        * @param protocol the IM protocol/service to check. See protocols()
+        *
+        * @see messageContact()
+        * @see chatWithContact()
+        * @see sendFile()
+        * @see locate()
+        * @see protocols()
+        * @see addContact()
         */
        virtual void messageNewContact( const QString &contactId, const QString 
&protocol ) = 0;
 
        /**
-        * Start a chat session with the specified contact
-        * @param uid the KABC uid you want to chat with.
+        * @brief Start a chat session with the specified contact
+        *
+        * Applications that do not support a chat mode or when the IM-service
+        * of the given contact does not support it, this can also open
+        * a normal message input GUI.
+        *
+        * @param uid the KABC UID you want to chat with
+        *
+        * @see messageContact()
+        * @see messageNewContact()
+        * @see sendFile()
+        * @see isPresent()
+        * @see reachableContacts()
+        * @see KABC::Addressee::uid()
         */
        virtual void chatWithContact( const QString &uid ) = 0;
 
        /**
-        * Send a file to the contact
-        * @param uid the KABC uid you are sending to.
-        * @param sourceURL a @see KURL to send.
-        * @param altFileName an alternate filename describing the file
+        * @brief Send a file to the contact
+        *
+        * Initiates a file transfer with the given contact if possible.
+        *
+        * Implementations might start the transfer right away, ask the user's
+        * permission or just prefill the usual file transfer GUI.
+        *
+        * @note As sending any file could potentially be a breach of the user's
+        * privacy it is recommended to let the user know about it.
+        *
+        * @param uid the KABC UID you want to send to
+        * @param sourceURL a KURL pointing to the file to send
+        * @param altFileName an alternate filename describing the file or a
+        *        description or title
         * @param fileSize file size in bytes
+        *
+        * @see messageContact()
+        * @see messageNewContact()
+        * @see chatWithContact()
+        * @see isPresent()
+        * @see fileTransferContacts()
+        * @see KABC::Addressee::uid()
         */
        virtual void sendFile(const QString &uid, const KURL &sourceURL,
                const QString &altFileName = QString::null, uint fileSize = 0) 
= 0;
@@ -174,20 +444,43 @@
 // MUTATORS
 // Contact list
        /**
-        * Add a contact to the contact list
-        * @param contactId the protocol specific identifier for the contact, 
eg UIN for ICQ, screenname for AIM, nick for IRC.
-        * @param protocol the protocol, eg one of "AIMProtocol", 
"MSNProtocol", "ICQProtocol", ...
-        * @return whether the add succeeded.  False may signal already 
present, protocol not supported, or add operation not supported.
-        * @see locate     
+        * @brief Add a new contact given its protocol specific identifier
+        *
+        * Implementations might add the contact silently, including sending an
+        * authorization request if necessary, ask the user for confirmation or
+        * just prefill the usual contact addingGUI.
+        *
+        * @param contactId the protocol specific identifier for the contact
+        *        e.g. UIN for ICQ, screenname for AIM, nick for IRC
+        * @param protocol the IM protocol/service to use. See protocols()
+        * @return whether the add succeeded. @c false may signal already 
present,
+        *         protocol not supported, or add operation not supported.
+        *
+        * @see locate()
+        * @see protocols()
+        * @see messageNewContact()
         */
        virtual bool addContact( const QString &contactId, const QString 
&protocol ) = 0;
+
 // SIGNALS
 k_dcop_signals:
        /**
-        * Indicates that a contact's presence has changed
-        * @param uid the KABC uid whose presence changed.
-        * @param appId the dcop application id of the program the signal 
originates from.
-        * @param presence the new numeric presence @ref presenceStatus
+        * @brief Indicates that a contact's presence has changed
+        *
+        * Notifies connected DCOP receivers about a change in a contact's
+        * presence.
+        *
+        * Implementations just have to call this method with the appropriate
+        * values to get the DCOP signal emitted.
+        *
+        * @param uid the KABC UID whose presence changed
+        * @param appId the DCOP application ID of the program the signal
+        *        originates from
+        * @param presence the new presence's numeric value. See 
presenceStatus()
+        *
+        * @see presenceStatus()
+        * @see KABC::Addressee::uid()
+        * @see DCOPClient::appId()
         */
        void contactPresenceChanged( QString uid, QCString appId, int presence 
);
 };


Reply via email to