/* This file is part of the KDE project Copyright (C) 1999 Simon Hausmann This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "kdcopactionproxy.h" #include #include #include #include #include #include class KDCOPActionProxy::KDCOPActionProxyPrivate { public: KDCOPActionProxyPrivate() { } ~KDCOPActionProxyPrivate() { } TDEActionCollection *m_actionCollection; DCOPObject *m_parent; TQCString m_prefix; int m_pos; }; KDCOPActionProxy::KDCOPActionProxy( TDEActionCollection *actionCollection, DCOPObject *parent ) { init( actionCollection, parent ); } KDCOPActionProxy::KDCOPActionProxy( DCOPObject *parent ) { init( 0, parent ); } void KDCOPActionProxy::init( TDEActionCollection *collection, DCOPObject *parent ) { d = new KDCOPActionProxyPrivate; d->m_actionCollection = collection; d->m_parent = parent; d->m_prefix = parent->objId() + "/action/"; d->m_pos = d->m_prefix.length(); } KDCOPActionProxy::~KDCOPActionProxy() { delete d; } TQValueListKDCOPActionProxy::actions() const { if ( !d->m_actionCollection ) return TQValueList(); return d->m_actionCollection->actions(); } TDEAction *KDCOPActionProxy::action( const char *name ) const { if ( !d->m_actionCollection ) return 0; return d->m_actionCollection->action( name ); } TQCString KDCOPActionProxy::actionObjectId( const TQCString &name ) const { return d->m_prefix + name; } TQMap KDCOPActionProxy::actionMap( const TQCString &appId ) const { TQMap res; TQCString id = appId; if ( id.isEmpty() ) id = kapp->dcopClient()->appId(); TQValueList lst = actions(); TQValueList::ConstIterator it = lst.begin(); TQValueList::ConstIterator end = lst.end(); for (; it != end; ++it ) res.insert( (*it)->name(), DCOPRef( id, actionObjectId( (*it)->name() ) ) ); return res; } bool KDCOPActionProxy::process( const TQCString &obj, const TQCString &fun, const TQByteArray &data, TQCString &replyType, TQByteArray &replyData ) { if ( obj.left( d->m_pos ) != d->m_prefix ) return false; TDEAction *act = action( obj.mid( d->m_pos ) ); if ( !act ) return false; return processAction( obj, fun, data, replyType, replyData, act ); } bool KDCOPActionProxy::processAction( const TQCString &, const TQCString &fun, const TQByteArray &data, TQCString &replyType, TQByteArray &replyData, TDEAction *action ) { if ( fun == "activate()" ) { replyType = "void"; action->activate(); return true; } if ( fun == "isPlugged()" ) { replyType = "bool"; TQDataStream reply( replyData, IO_WriteOnly ); reply << (TQ_INT8)action->isPlugged(); return true; } if ( fun == "functions()" ) { TQValueList res; res << "QCStringList functions()"; res << "void activate()"; res << "bool isPlugged()"; res += KDCOPPropertyProxy::functions( action ); replyType = "QCStringList"; TQDataStream reply( replyData, IO_WriteOnly ); reply << res; return true; } return KDCOPPropertyProxy::processPropertyRequest( fun, data, replyType, replyData, action ); } void KDCOPActionProxy::virtual_hook( int id, void* data ) { DCOPObjectProxy::virtual_hook( id, data ); }