kdeui
kdcopactionproxy.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "kdcopactionproxy.h"
00021
00022 #include <dcopclient.h>
00023 #include <kapplication.h>
00024 #include <kaction.h>
00025 #include <kdebug.h>
00026 #include <kdcoppropertyproxy.h>
00027
00028 #include <ctype.h>
00029
00030 class KDCOPActionProxy::KDCOPActionProxyPrivate
00031 {
00032 public:
00033 KDCOPActionProxyPrivate()
00034 {
00035 }
00036 ~KDCOPActionProxyPrivate()
00037 {
00038 }
00039
00040 KActionCollection *m_actionCollection;
00041 DCOPObject *m_parent;
00042 QCString m_prefix;
00043 int m_pos;
00044 };
00045
00046 KDCOPActionProxy::KDCOPActionProxy( KActionCollection *actionCollection, DCOPObject *parent )
00047 {
00048 init( actionCollection, parent );
00049 }
00050
00051 KDCOPActionProxy::KDCOPActionProxy( DCOPObject *parent )
00052 {
00053 init( 0, parent );
00054 }
00055
00056 void KDCOPActionProxy::init( KActionCollection *collection, DCOPObject *parent )
00057 {
00058 d = new KDCOPActionProxyPrivate;
00059 d->m_actionCollection = collection;
00060 d->m_parent = parent;
00061 d->m_prefix = parent->objId() + "/action/";
00062 d->m_pos = d->m_prefix.length();
00063 }
00064
00065 KDCOPActionProxy::~KDCOPActionProxy()
00066 {
00067 delete d;
00068 }
00069
00070 QValueList<KAction *>KDCOPActionProxy::actions() const
00071 {
00072 if ( !d->m_actionCollection )
00073 return QValueList<KAction *>();
00074
00075 return d->m_actionCollection->actions();
00076 }
00077
00078 KAction *KDCOPActionProxy::action( const char *name ) const
00079 {
00080 if ( !d->m_actionCollection )
00081 return 0;
00082
00083 return d->m_actionCollection->action( name );
00084 }
00085
00086 QCString KDCOPActionProxy::actionObjectId( const QCString &name ) const
00087 {
00088 return d->m_prefix + name;
00089 }
00090
00091 QMap<QCString,DCOPRef> KDCOPActionProxy::actionMap( const QCString &appId ) const
00092 {
00093 QMap<QCString,DCOPRef> res;
00094
00095 QCString id = appId;
00096 if ( id.isEmpty() )
00097 id = kapp->dcopClient()->appId();
00098
00099 QValueList<KAction *> lst = actions();
00100 QValueList<KAction *>::ConstIterator it = lst.begin();
00101 QValueList<KAction *>::ConstIterator end = lst.end();
00102 for (; it != end; ++it )
00103 res.insert( (*it)->name(), DCOPRef( id, actionObjectId( (*it)->name() ) ) );
00104
00105 return res;
00106 }
00107
00108 bool KDCOPActionProxy::process( const QCString &obj, const QCString &fun, const QByteArray &data,
00109 QCString &replyType, QByteArray &replyData )
00110 {
00111 if ( obj.left( d->m_pos ) != d->m_prefix )
00112 return false;
00113
00114 KAction *act = action( obj.mid( d->m_pos ) );
00115 if ( !act )
00116 return false;
00117
00118 return processAction( obj, fun, data, replyType, replyData, act );
00119 }
00120
00121 bool KDCOPActionProxy::processAction( const QCString &, const QCString &fun, const QByteArray &data,
00122 QCString &replyType, QByteArray &replyData, KAction *action )
00123 {
00124 if ( fun == "activate()" )
00125 {
00126 replyType = "void";
00127 action->activate();
00128 return true;
00129 }
00130
00131 if ( fun == "isPlugged()" )
00132 {
00133 replyType = "bool";
00134 QDataStream reply( replyData, IO_WriteOnly );
00135 reply << (Q_INT8)action->isPlugged();
00136 return true;
00137 }
00138
00139 if ( fun == "functions()" )
00140 {
00141 QValueList<QCString> res;
00142 res << "QCStringList functions()";
00143 res << "void activate()";
00144 res << "bool isPlugged()";
00145
00146 res += KDCOPPropertyProxy::functions( action );
00147
00148 replyType = "QCStringList";
00149 QDataStream reply( replyData, IO_WriteOnly );
00150 reply << res;
00151 return true;
00152 }
00153
00154 return KDCOPPropertyProxy::processPropertyRequest( fun, data, replyType, replyData, action );
00155 }
00156
00157 void KDCOPActionProxy::virtual_hook( int id, void* data )
00158 { DCOPObjectProxy::virtual_hook( id, data ); }
00159