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.
158 lines
3.4 KiB
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;
|
|
}
|