summaryrefslogtreecommitdiffstats
path: root/kdcop/kdcoplistview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdcop/kdcoplistview.cpp')
-rw-r--r--kdcop/kdcoplistview.cpp157
1 files changed, 157 insertions, 0 deletions
diff --git a/kdcop/kdcoplistview.cpp b/kdcop/kdcoplistview.cpp
new file mode 100644
index 000000000..eae4b0bfe
--- /dev/null
+++ b/kdcop/kdcoplistview.cpp
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2000 by Ian Reinhart Geiser <[email protected]>
+ *
+ * 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)
+ : TDEListView(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;
+}