You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdelibs/tdeui/kdcopactionproxy.cpp

160 lines
4.1 KiB

/* This file is part of the KDE project
Copyright (C) 1999 Simon Hausmann <hausmann@kde.org>
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 <dcopclient.h>
#include <kapplication.h>
#include <tdeaction.h>
#include <kdebug.h>
#include <kdcoppropertyproxy.h>
#include <ctype.h>
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;
}
TQValueList<TDEAction *>KDCOPActionProxy::actions() const
{
if ( !d->m_actionCollection )
return TQValueList<TDEAction *>();
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<TQCString,DCOPRef> KDCOPActionProxy::actionMap( const TQCString &appId ) const
{
TQMap<TQCString,DCOPRef> res;
TQCString id = appId;
if ( id.isEmpty() )
id = kapp->dcopClient()->appId();
TQValueList<TDEAction *> lst = actions();
TQValueList<TDEAction *>::ConstIterator it = lst.begin();
TQValueList<TDEAction *>::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<TQCString> 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 ); }