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/arts/kde/mcop-dcop/kmcop.cpp

172 lines
4.5 KiB

/*
Copyright (c) 2001 Nikolas Zimmermann <wildfox@kde.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include <kdebug.h>
#include <kuniqueapplication.h>
#include <kaboutdata.h>
#include <kcmdlineargs.h>
#include <klocale.h>
#include <dcopclient.h>
#include <qvaluelist.h>
#include <qcstring.h>
#include <kartsdispatcher.h>
#include <soundserver.h>
#include <dispatcher.h>
#include <object.h>
#include <core.h>
#include "mcopdcopobject.h"
#include "kmcop.moc"
using namespace Arts;
using namespace std;
class KMCOPPrivate
{
public:
MCOPInfo mcopInfo;
QPtrList<MCOPDCOPObject> list;
};
int main(int argc, char **argv)
{
KAboutData aboutdata("kmcop", I18N_NOOP("KMCOP"),
"0.1", I18N_NOOP("KDE MCOP-DCOP Bridge"),
KAboutData::License_GPL, "(C) 2001, Nikolas Zimmermann");
aboutdata.addAuthor("Nikolas Zimmermann", I18N_NOOP("Author"), "wildfox@kde.org");
KCmdLineArgs::init(argc, argv, &aboutdata);
KUniqueApplication::addCmdLineOptions();
if(!KUniqueApplication::start())
{
kdDebug() << "Running kmcop found" << endl;
return 0;
}
KUniqueApplication app;
app.disableSessionManagement();
KArtsDispatcher dispatcher;
KMCOP notify;
app.dcopClient()->setDefaultObject("arts");
app.dcopClient()->setDaemonMode(true);
return app.exec();
}
KMCOP::KMCOP() : QObject(), DCOPObject("arts")
{
d = new KMCOPPrivate();
d->mcopInfo = Reference("global:Arts_MCOPInfo");
d->list.setAutoDelete(true);
}
KMCOP::~KMCOP()
{
delete d;
}
int KMCOP::objectCount()
{
return d->mcopInfo.objectCount();
}
QCString KMCOP::correctType(const QCString &str)
{
if(str == "string")
return "QCString";
return str;
}
void KMCOP::addInterfacesHackHackHack()
{
for(int i = 0; i <= objectCount(); i++)
{
Arts::Object obj = d->mcopInfo.objectForNumber(i);
if(!obj.isNull())
{
QCString interfaceName = obj._interfaceName().c_str();
if(interfaceName != "Arts::TraderOffer")
{
Arts::InterfaceRepo ifaceRepo = Dispatcher::the()->interfaceRepo();
MCOPDCOPObject *interface = new MCOPDCOPObject(interfaceName);
d->list.append(interface);
InterfaceDef ifaceDef = ifaceRepo.queryInterface(string(interfaceName));
vector<MethodDef> ifaceMethods = ifaceDef.methods;
vector<MethodDef>::iterator ifaceMethodsIterator;
for(ifaceMethodsIterator = ifaceMethods.begin(); ifaceMethodsIterator != ifaceMethods.end(); ifaceMethodsIterator++)
{
QCString function, signature;
MCOPEntryInfo *entry = new MCOPEntryInfo();
MethodDef currentMethod = *ifaceMethodsIterator;
vector<ParamDef> currentParameters = currentMethod.signature;
QCString newType = correctType(QCString(currentMethod.type.c_str()));
entry->setFunctionType(newType);
entry->setFunctionName(QCString(currentMethod.name.c_str()));
function = entry->functionType() + QCString(" ") + entry->functionName() + QCString("(");
signature = QCString("(");
QCStringList signatureList;
vector<ParamDef>::iterator methodParametersIterator;
for(methodParametersIterator = currentParameters.begin(); methodParametersIterator != currentParameters.end(); methodParametersIterator++)
{
ParamDef parameter = *methodParametersIterator;
if(methodParametersIterator != currentParameters.begin())
{
function += QCString(", ");
signature += QCString(",");
}
QCString correctParameter = correctType(QCString(parameter.type.c_str()));
function += correctParameter;
signature += correctParameter;
signatureList.append(QCString(parameter.type.c_str()));
}
function += QCString(")");
signature += QCString(")");
entry->setSignature(signature);
entry->setSignatureList(signatureList);
interface->addDynamicFunction(function, entry);
}
}
}
}
}