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.
tdebase/kdcop/kdcoplistview.cpp

158 lines
3.4 KiB

/*
* Copyright (C) 2000 by Ian Reinhart Geiser <geiseri@kde.org>
*
* Licensed under the Artistic License.
*/
#include "kdcoplistview.h"
#include "kdcoplistview.moc"
#include <kdebug.h>
#include <tqdragobject.h>
#include <tqstringlist.h>
#include <tqregexp.h>
KDCOPListView::KDCOPListView ( TQWidget *parent, const char *name)
: KListView(parent, name)
{
kdDebug() << "Building new list." << endl;
setDragEnabled(true);
}
KDCOPListView::~KDCOPListView ()
{
}
TQDragObject *KDCOPListView::dragObject()
{
kdDebug() << "Drag object called... " << endl;
if(!currentItem())
return 0;
else
return new TQTextDrag(encode(this->selectedItem()), this);
}
void KDCOPListView::setMode( const TQString &theMode )
{
mode = theMode;
}
TQString KDCOPListView::encode(TQListViewItem *theCode)
{
DCOPBrowserItem * item = static_cast<DCOPBrowserItem *>(theCode);
if (item->type() != DCOPBrowserItem::Function)
return "";
DCOPBrowserFunctionItem * fitem =
static_cast<DCOPBrowserFunctionItem *>(item);
TQString function = TQString::fromUtf8(fitem->function());
TQString application = TQString::fromUtf8(fitem->app());
TQString object = TQString::fromUtf8(fitem->object());
kdDebug() << function << endl;
TQString returnType = function.section(' ', 0,0);
TQString returnCode = "";
TQString normalisedSignature;
TQStringList types;
TQStringList names;
TQString unNormalisedSignature(function);
int s = unNormalisedSignature.find(' ');
if ( s < 0 )
s = 0;
else
s++;
unNormalisedSignature = unNormalisedSignature.mid(s);
int left = unNormalisedSignature.find('(');
int right = unNormalisedSignature.findRev(')');
if (-1 == left)
{
// Fucked up function signature.
return "";
}
if (left > 0 && left + 1 < right - 1)
{
types = TQStringList::split
(',', unNormalisedSignature.mid(left + 1, right - left - 1));
for (TQStringList::Iterator it = types.begin(); it != types.end(); ++it)
{
(*it) = (*it).stripWhiteSpace();
int s = (*it).find(' ');
if (-1 != s)
{
names.append((*it).mid(s + 1));
(*it) = (*it).left(s);
}
}
}
if ( mode == "C++")
{
TQString args;
for( unsigned int i = 0; i < names.count(); i++)
{
args += types[i] + " " + names[i] + ";\n";
}
TQString dcopRef = "DCOPRef m_" + application + object
+ "(\""+ application + "\",\"" + object +"\");\n";
TQString stringNames = names.join(",");
TQString stringTypes = types.join(",");
if( returnType != "void")
returnType += " return" + returnType + " =";
else
returnType = "";
returnCode = args
+ dcopRef
+ returnType
+ "m_" + application + object
+ ".call(\"" + unNormalisedSignature.left(left)
+ "(" + stringTypes + ")\"";
if(!stringNames.isEmpty())
returnCode += ", ";
returnCode += stringNames + ");\n";
}
else if (mode == "Shell")
{
returnCode = "dcop " + application + " " + object + " "
+ unNormalisedSignature.left(left) + " " + names.join(" ");
}
else if (mode == "Python")
{
TQString setup;
setup = "m_"
+ application + object
+ " = dcop.DCOPObject( \""
+ application + "\",\""
+ object + "\")\n";
for( unsigned int i = 0; i < names.count(); i++)
{
setup += names[i] + " #set value here.\n";
}
returnCode = setup
+ "reply"
+ returnType
+ " = m_"
+ application + object + "."
+ unNormalisedSignature.left(left)
+ "(" + names.join(",") + ")\n";
}
return returnCode;
}
TQString KDCOPListView::getCurrentCode() const
{
// fixing warning
return TQString::null;
}