From a929c9a3b465db8b7e17b9b39936c612c2621a7c Mon Sep 17 00:00:00 2001 From: "John (J5) Palmieri" Date: Fri, 14 Jul 2006 16:20:12 +0000 Subject: * Remove all bindings --- qt/tools/dbusidl2cpp.cpp | 972 ----------------------------------------------- 1 file changed, 972 deletions(-) delete mode 100644 qt/tools/dbusidl2cpp.cpp (limited to 'qt/tools/dbusidl2cpp.cpp') diff --git a/qt/tools/dbusidl2cpp.cpp b/qt/tools/dbusidl2cpp.cpp deleted file mode 100644 index ab61e672..00000000 --- a/qt/tools/dbusidl2cpp.cpp +++ /dev/null @@ -1,972 +0,0 @@ -/* -*- C++ -*- - * - * Copyright (C) 2006 Trolltech AS. All rights reserved. - * Author: Thiago Macieira - * - * 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 of the License, 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 -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include "../src/qdbusmetaobject_p.h" -#include "../src/qdbusintrospection_p.h" - -#define PROGRAMNAME "dbusidl2cpp" -#define PROGRAMVERSION "0.5" -#define PROGRAMCOPYRIGHT "Copyright (C) 2006 Trolltech AS. All rights reserved." - -#define ANNOTATION_NO_WAIT "org.freedesktop.DBus.Method.NoReply" - -static const char cmdlineOptions[] = "a:c:hmNp:vV"; -static const char *globalClassName; -static const char *proxyFile; -static const char *adaptorFile; -static const char *inputFile; -static bool skipNamespaces; -static bool verbose; -static bool includeMocs; -static QStringList wantedInterfaces; - -static const char help[] = - "Usage: " PROGRAMNAME " [options...] [idl-or-xml-file] [interfaces...]\n" - "Produces the C++ code to implement the interfaces defined in the input file.\n" - "If no options are given, the code is written to the standard output.\n" - "\n" - "Options:\n" - " -a Write the adaptor code to \n" - " -c Use as the class name for the generated classes\n" - " -h Show this information\n" - " -m Generate #include \"filename.moc\" statements in the .cpp files\n" - " -N Don't use namespaces\n" - " -p Write the proxy code to \n" - " -v Be verbose.\n" - " -V Show the program version and quit.\n" - "\n" - "If the file name given to the options -a and -p does not end in .cpp or .h, the\n" - "program will automatically append the suffixes and produce both files.\n" - "You can also use a colon (:) to separate the header name from the source file\n" - "name, as in '-a filename_p.h:filename.cpp'.\n"; - -static const char includeList[] = - "#include \n" - "#include \n" - "#include \n" - "#include \n" - "#include \n" - "#include \n"; - -static const char forwardDeclarations[] = - "class QByteArray;\n" - "template class QList;\n" - "template class QMap;\n" - "class QString;\n" - "class QStringList;\n" - "class QVariant;\n"; - -static void showHelp() -{ - printf("%s", help); - exit(0); -} - -static void showVersion() -{ - printf("%s version %s\n", PROGRAMNAME, PROGRAMVERSION); - printf("D-Bus binding tool for Qt\n"); - exit(0); -} - -static void parseCmdLine(int argc, char **argv) -{ - int c; - opterr = true; - while ((c = getopt(argc, argv, cmdlineOptions)) != -1) - switch (c) - { - case 'a': - adaptorFile = optarg; - break; - - case 'c': - globalClassName = optarg; - break; - - case 'v': - verbose = true; - break; - - case 'm': - includeMocs = true; - break; - - case 'N': - skipNamespaces = true; - break; - - case 'h': - showHelp(); - break; - - case 'V': - showVersion(); - break; - - case 'p': - proxyFile = optarg; - break; - - case '?': - exit(1); - default: - abort(); - } - - if (optind != argc) - inputFile = argv[optind++]; - - while (optind != argc) - wantedInterfaces << QString::fromLocal8Bit(argv[optind++]); -} - -static QDBusIntrospection::Interfaces readInput() -{ - QFile input(QFile::decodeName(inputFile)); - if (inputFile && qstrcmp(inputFile, "-") != 0) - input.open(QIODevice::ReadOnly); - else - input.open(stdin, QIODevice::ReadOnly); - - QByteArray data = input.readAll(); - - // check if the input is already XML - data = data.trimmed(); - if (data.startsWith("") << endl - << " *" << endl - << " * " PROGRAMNAME " is " PROGRAMCOPYRIGHT << endl - << " *" << endl - << " * This is an auto-generated file." << endl; - - if (changesWillBeLost) - ts << " * Do not edit! All changes made to it will be lost." << endl; - - ts << " */" << endl - << endl; - - return ts; -} - -enum ClassType { Proxy, Adaptor }; -static QString classNameForInterface(const QString &interface, ClassType classType) -{ - if (globalClassName) - return QLatin1String(globalClassName); - - QStringList parts = interface.split(QLatin1Char('.')); - - QString retval; - if (classType == Proxy) - foreach (QString part, parts) { - part[0] = part[0].toUpper(); - retval += part; - } - else { - retval = parts.last(); - retval[0] = retval[0].toUpper(); - } - - if (classType == Proxy) - retval += QLatin1String("Interface"); - else - retval += QLatin1String("Adaptor"); - - return retval; -} - -static QByteArray qtTypeName(const QString &signature) -{ - QVariant::Type type = QDBusUtil::signatureToType(signature); - if (type == QVariant::Invalid) - qFatal("Got unknown type `%s'", qPrintable(signature)); - - return QVariant::typeToName(type); -} - -static QString nonConstRefArg(const QByteArray &arg) -{ - return QLatin1String(arg + " &"); -} - -static QString templateArg(const QByteArray &arg) -{ - if (!arg.endsWith('>')) - return QLatin1String(arg); - - return QLatin1String(arg + ' '); -} - -static QString constRefArg(const QByteArray &arg) -{ - if (!arg.startsWith('Q')) - return QLatin1String(arg + ' '); - else - return QString( QLatin1String("const %1 &") ).arg( QLatin1String(arg) ); -} - -static QStringList makeArgNames(const QDBusIntrospection::Arguments &inputArgs, - const QDBusIntrospection::Arguments &outputArgs = - QDBusIntrospection::Arguments()) -{ - QStringList retval; - for (int i = 0; i < inputArgs.count(); ++i) { - const QDBusIntrospection::Argument &arg = inputArgs.at(i); - QString name = arg.name; - if (name.isEmpty()) - name = QString( QLatin1String("in%1") ).arg(i); - while (retval.contains(name)) - name += QLatin1String("_"); - retval << name; - } - for (int i = 0; i < outputArgs.count(); ++i) { - const QDBusIntrospection::Argument &arg = outputArgs.at(i); - QString name = arg.name; - if (name.isEmpty()) - name = QString( QLatin1String("out%1") ).arg(i); - while (retval.contains(name)) - name += QLatin1String("_"); - retval << name; - } - return retval; -} - -static void writeArgList(QTextStream &ts, const QStringList &argNames, - const QDBusIntrospection::Arguments &inputArgs, - const QDBusIntrospection::Arguments &outputArgs = QDBusIntrospection::Arguments()) -{ - // input args: - bool first = true; - int argPos = 0; - for (int i = 0; i < inputArgs.count(); ++i) { - const QDBusIntrospection::Argument &arg = inputArgs.at(i); - QString type = constRefArg(qtTypeName(arg.type)); - - if (!first) - ts << ", "; - ts << type << argNames.at(argPos++); - first = false; - } - - argPos++; - - // output args - // yes, starting from 1 - for (int i = 1; i < outputArgs.count(); ++i) { - const QDBusIntrospection::Argument &arg = outputArgs.at(i); - QString name = arg.name; - - if (!first) - ts << ", "; - ts << nonConstRefArg(qtTypeName(arg.type)) << argNames.at(argPos++); - first = false; - } -} - -static QString propertyGetter(const QDBusIntrospection::Property &property) -{ - QString getter = property.annotations.value(QLatin1String("com.trolltech.QtDBus.propertyGetter")); - if (getter.isEmpty()) { - getter = property.name; - getter[0] = getter[0].toLower(); - } - return getter; -} - -static QString propertySetter(const QDBusIntrospection::Property &property) -{ - QString setter = property.annotations.value(QLatin1String("com.trolltech.QtDBus.propertySetter")); - if (setter.isEmpty()) { - setter = QLatin1String("set") + property.name; - setter[3] = setter[3].toUpper(); - } - return setter; -} - -static QString stringify(const QString &data) -{ - QString retval; - int i; - for (i = 0; i < data.length(); ++i) { - retval += QLatin1Char('\"'); - for ( ; i < data.length() && data[i] != QLatin1Char('\n'); ++i) - if (data[i] == QLatin1Char('\"')) - retval += QLatin1String("\\\""); - else - retval += data[i]; - retval += QLatin1String("\\n\"\n"); - } - return retval; -} - -static void writeProxy(const char *filename, const QDBusIntrospection::Interfaces &interfaces) -{ - // open the file - QString headerName = header(filename); - QFile file(headerName); - if (!headerName.isEmpty()) - file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text); - else - file.open(stdout, QIODevice::WriteOnly | QIODevice::Text); - QTextStream hs(&file); - - QString cppName = cpp(filename); - QByteArray cppData; - QTextStream cs(&cppData); - - // write the header: - writeHeader(hs, true); - - // include guards: - QString includeGuard; - if (!headerName.isEmpty()) { - includeGuard = headerName.toUpper().replace(QLatin1Char('.'), QLatin1Char('_')); - int pos = includeGuard.lastIndexOf(QLatin1Char('/')); - if (pos != -1) - includeGuard = includeGuard.mid(pos + 1); - } else { - includeGuard = QLatin1String("QDBUSIDL2CPP_PROXY"); - } - includeGuard = QString(QLatin1String("%1_%2%3")) - .arg(includeGuard) - .arg(getpid()) - .arg(QDateTime::currentDateTime().toTime_t()); - hs << "#ifndef " << includeGuard << endl - << "#define " << includeGuard << endl - << endl; - - // include our stuff: - hs << "#include " << endl - << includeList - << "#include " << endl - << endl; - - if (cppName != headerName) { - writeHeader(cs, false); - cs << "#include \"" << headerName << "\"" << endl - << endl; - } - - foreach (const QDBusIntrospection::Interface *interface, interfaces) { - QString className = classNameForInterface(interface->name, Proxy); - - // comment: - hs << "/*" << endl - << " * Proxy class for interface " << interface->name << endl - << " */" << endl; - cs << "/*" << endl - << " * Implementation of interface class " << className << endl - << " */" << endl - << endl; - - // class header: - hs << "class " << className << ": public QDBusAbstractInterface" << endl - << "{" << endl - << " Q_OBJECT" << endl; - - // the interface name - hs << "public:" << endl - << " static inline const char *staticInterfaceName()" << endl - << " { return \"" << interface->name << "\"; }" << endl - << endl; - - // constructors/destructors: - hs << "public:" << endl - << " explicit " << className << "(QDBusAbstractInterfacePrivate *p);" << endl - << endl - << " ~" << className << "();" << endl - << endl; - cs << className << "::" << className << "(QDBusAbstractInterfacePrivate *p)" << endl - << " : QDBusAbstractInterface(p)" << endl - << "{" << endl - << "}" << endl - << endl - << className << "::~" << className << "()" << endl - << "{" << endl - << "}" << endl - << endl; - - // properties: - foreach (const QDBusIntrospection::Property &property, interface->properties) { - QByteArray type = qtTypeName(property.type); - QString templateType = templateArg(type); - QString constRefType = constRefArg(type); - QString getter = propertyGetter(property); - QString setter = propertySetter(property); - - hs << " Q_PROPERTY(" << type << " " << property.name; - - // getter: - if (property.access != QDBusIntrospection::Property::Write) - // it's readble - hs << " READ " << getter; - - // setter - if (property.access != QDBusIntrospection::Property::Read) - // it's writeable - hs << " WRITE " << setter; - - hs << ")" << endl; - - // getter: - if (property.access != QDBusIntrospection::Property::Write) { - hs << " inline " << type << " " << getter << "() const" << endl; - if (type != "QVariant") - hs << " { return qvariant_cast< " << type << " >(internalPropGet(\"" - << property.name << "\")); }" << endl; - else - hs << " { return internalPropGet(\"" << property.name << "\"); }" << endl; - } - - // setter: - if (property.access != QDBusIntrospection::Property::Read) { - hs << " inline void " << setter << "(" << constRefArg(type) << "value)" << endl - << " { internalPropSet(\"" << property.name - << "\", qVariantFromValue(value)); }" << endl; - } - - hs << endl; - } - - // methods: - hs << "public Q_SLOTS: // METHODS" << endl; - foreach (const QDBusIntrospection::Method &method, interface->methods) { - bool isAsync = - method.annotations.value(QLatin1String(ANNOTATION_NO_WAIT)) == QLatin1String("true"); - if (isAsync && !method.outputArgs.isEmpty()) { - fprintf(stderr, "warning: method %s in interface %s is marked 'async' but has output arguments.\n", - qPrintable(method.name), qPrintable(interface->name)); - continue; - } - - hs << " inline "; - - if (method.annotations.value(QLatin1String("org.freedesktop.DBus.Deprecated")) == QLatin1String("true")) - hs << "Q_DECL_DEPRECATED "; - - if (isAsync) - hs << "Q_ASYNC void "; - else if (method.outputArgs.isEmpty()) - hs << "QDBusReply "; - else { - hs << "QDBusReply<" << templateArg(qtTypeName(method.outputArgs.first().type)) << "> "; - } - - hs << method.name << "("; - - QStringList argNames = makeArgNames(method.inputArgs, method.outputArgs); - writeArgList(hs, argNames, method.inputArgs, method.outputArgs); - - hs << ")" << endl - << " {" << endl; - - if (method.outputArgs.count() > 1) - hs << " QDBusMessage reply = call(QLatin1String(\""; - else if (!isAsync) - hs << " return call(QLatin1String(\""; - else - hs << " call(NoWaitForReply, QLatin1String(\""; - - // rebuild the method input signature: - QString signature = QLatin1String("."); - foreach (const QDBusIntrospection::Argument &arg, method.inputArgs) - signature += arg.type; - if (signature.length() == 1) - signature.clear(); - hs << method.name << signature << "\")"; - - int argPos = 0; - for (int i = 0; i < method.inputArgs.count(); ++i) - hs << ", " << argNames.at(argPos++); - - // close the QDBusIntrospection::call call - hs << ");" << endl; - - argPos++; - if (method.outputArgs.count() > 1) { - hs << " if (reply.type() == QDBusMessage::ReplyMessage) {" << endl; - - // yes, starting from 1 - for (int i = 1; i < method.outputArgs.count(); ++i) - hs << " " << argNames.at(argPos++) << " = qvariant_cast<" - << templateArg(qtTypeName(method.outputArgs.at(i).type)) - << ">(reply.at(" << i << "));" << endl; - hs << " }" << endl - << " return reply;" << endl; - } - - // close the function: - hs << " }" << endl - << endl; - } - - hs << "Q_SIGNALS: // SIGNALS" << endl; - foreach (const QDBusIntrospection::Signal &signal, interface->signals_) { - hs << " "; - if (signal.annotations.value(QLatin1String("org.freedesktop.DBus.Deprecated")) == - QLatin1String("true")) - hs << "Q_DECL_DEPRECATED "; - - hs << "void " << signal.name << "("; - - QStringList argNames = makeArgNames(signal.outputArgs); - writeArgList(hs, argNames, signal.outputArgs); - - hs << ");" << endl; // finished for header - } - - // close the class: - hs << "};" << endl - << endl; - } - - if (!skipNamespaces) { - QStringList last; - QDBusIntrospection::Interfaces::ConstIterator it = interfaces.constBegin(); - do - { - QStringList current; - QString name; - if (it != interfaces.constEnd()) { - current = it->constData()->name.split(QLatin1Char('.')); - name = current.takeLast(); - } - - int i = 0; - while (i < current.count() && i < last.count() && current.at(i) == last.at(i)) - ++i; - - // i parts matched - // close last.count() - i namespaces: - for (int j = i; j < last.count(); ++j) - hs << QString((last.count() - j - 1 + i) * 2, QLatin1Char(' ')) << "}" << endl; - - // open current.count() - i namespaces - for (int j = i; j < current.count(); ++j) - hs << QString(j * 2, QLatin1Char(' ')) << "namespace " << current.at(j) << " {" << endl; - - // add this class: - if (!name.isEmpty()) { - hs << QString(current.count() * 2, QLatin1Char(' ')) - << "typedef ::" << classNameForInterface(it->constData()->name, Proxy) - << " " << name << ";" << endl; - } - - if (it == interfaces.constEnd()) - break; - ++it; - last = current; - } while (true); - } - - // close the include guard - hs << "#endif" << endl; - - if (includeMocs) - cs << endl - << "#include \"" << filename << ".moc\"" << endl; - - cs.flush(); - hs.flush(); - if (headerName == cppName) - file.write(cppData); - else { - // write to cpp file - QFile f(cppName); - f.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text); - f.write(cppData); - } -} - -static void writeAdaptor(const char *filename, const QDBusIntrospection::Interfaces &interfaces) -{ - // open the file - QString headerName = header(filename); - QFile file(headerName); - if (!headerName.isEmpty()) - file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text); - else - file.open(stdout, QIODevice::WriteOnly | QIODevice::Text); - QTextStream hs(&file); - - QString cppName = cpp(filename); - QByteArray cppData; - QTextStream cs(&cppData); - - // write the headers - writeHeader(hs, false); - - // include guards: - QString includeGuard; - if (!headerName.isEmpty()) { - includeGuard = headerName.toUpper().replace(QLatin1Char('.'), QLatin1Char('_')); - int pos = includeGuard.lastIndexOf(QLatin1Char('/')); - if (pos != -1) - includeGuard = includeGuard.mid(pos + 1); - } else { - includeGuard = QLatin1String("QDBUSIDL2CPP_ADAPTOR"); - } - includeGuard = QString(QLatin1String("%1_%2%3")) - .arg(includeGuard) - .arg(getpid()) - .arg(QDateTime::currentDateTime().toTime_t()); - hs << "#ifndef " << includeGuard << endl - << "#define " << includeGuard << endl - << endl; - - // include our stuff: - hs << "#include " << endl; - if (cppName == headerName) - hs << "#include " << endl - << "#include " << endl; - hs << "#include " << endl; - - if (cppName != headerName) { - writeHeader(cs, false); - cs << "#include \"" << headerName << "\"" << endl - << "#include " << endl - << includeList - << endl; - hs << forwardDeclarations; - } else { - hs << includeList; - } - - hs << endl; - - foreach (const QDBusIntrospection::Interface *interface, interfaces) { - QString className = classNameForInterface(interface->name, Adaptor); - - // comment: - hs << "/*" << endl - << " * Adaptor class for interface " << interface->name << endl - << " */" << endl; - cs << "/*" << endl - << " * Implementation of adaptor class " << className << endl - << " */" << endl - << endl; - - // class header: - hs << "class " << className << ": public QDBusAbstractAdaptor" << endl - << "{" << endl - << " Q_OBJECT" << endl - << " Q_CLASSINFO(\"D-Bus Interface\", \"" << interface->name << "\")" << endl - << " Q_CLASSINFO(\"D-Bus Introspection\", \"\"" << endl - << stringify(interface->introspection) - << " \"\")" << endl - << "public:" << endl - << " " << className << "(QObject *parent);" << endl - << " virtual ~" << className << "();" << endl - << endl; - - // constructor/destructor - cs << className << "::" << className << "(QObject *parent)" << endl - << " : QDBusAbstractAdaptor(parent)" << endl - << "{" << endl - << " // constructor" << endl - << " setAutoRelaySignals(true);" << endl - << "}" << endl - << endl - << className << "::~" << className << "()" << endl - << "{" << endl - << " // destructor" << endl - << "}" << endl - << endl; - - hs << "public: // PROPERTIES" << endl; - foreach (const QDBusIntrospection::Property &property, interface->properties) { - QByteArray type = qtTypeName(property.type); - QString constRefType = constRefArg(type); - QString getter = propertyGetter(property); - QString setter = propertySetter(property); - - hs << " Q_PROPERTY(" << type << " " << property.name; - if (property.access != QDBusIntrospection::Property::Write) - hs << " READ " << getter; - if (property.access != QDBusIntrospection::Property::Read) - hs << " WRITE " << setter; - hs << ")" << endl; - - // getter: - if (property.access != QDBusIntrospection::Property::Write) { - hs << " " << type << " " << getter << "() const;" << endl; - cs << type << " " - << className << "::" << getter << "() const" << endl - << "{" << endl - << " // get the value of property " << property.name << endl - << " return qvariant_cast< " << type <<" >(parent()->property(\"" << property.name << "\"));" << endl - << "}" << endl - << endl; - } - - // setter - if (property.access != QDBusIntrospection::Property::Read) { - hs << " void " << setter << "(" << constRefType << "value);" << endl; - cs << "void " << className << "::" << setter << "(" << constRefType << "value)" << endl - << "{" << endl - << " // set the value of property " << property.name << endl - << " parent()->setProperty(\"" << property.name << "\", value);" << endl - << "}" << endl - << endl; - } - - hs << endl; - } - - hs << "public Q_SLOTS: // METHODS" << endl; - foreach (const QDBusIntrospection::Method &method, interface->methods) { - bool isAsync = - method.annotations.value(QLatin1String(ANNOTATION_NO_WAIT)) == QLatin1String("true"); - if (isAsync && !method.outputArgs.isEmpty()) { - fprintf(stderr, "warning: method %s in interface %s is marked 'async' but has output arguments.\n", - qPrintable(method.name), qPrintable(interface->name)); - continue; - } - - hs << " "; - if (method.annotations.value(QLatin1String("org.freedesktop.DBus.Deprecated")) == - QLatin1String("true")) - hs << "Q_DECL_DEPRECATED "; - - QByteArray returnType; - if (isAsync) { - hs << "Q_ASYNC void "; - cs << "void "; - } else if (method.outputArgs.isEmpty()) { - hs << "void "; - cs << "void "; - } else { - returnType = qtTypeName(method.outputArgs.first().type); - hs << returnType << " "; - cs << returnType << " "; - } - - QString name = method.name; - hs << name << "("; - cs << className << "::" << name << "("; - - QStringList argNames = makeArgNames(method.inputArgs, method.outputArgs); - writeArgList(hs, argNames, method.inputArgs, method.outputArgs); - writeArgList(cs, argNames, method.inputArgs, method.outputArgs); - - hs << ");" << endl; // finished for header - cs << ")" << endl - << "{" << endl - << " // handle method call " << interface->name << "." << method.name << endl; - - // create the return type - int j = method.inputArgs.count(); - if (!returnType.isEmpty()) - cs << " " << returnType << " " << argNames.at(j) << ";" << endl; - - // make the call - if (method.inputArgs.count() <= 10 && method.outputArgs.count() <= 1) { - // we can use QMetaObject::invokeMethod - static const char invoke[] = " QMetaObject::invokeMethod(parent(), \""; - cs << invoke << name << "\""; - - if (!method.outputArgs.isEmpty()) - cs << ", Q_RETURN_ARG(" - << qtTypeName(method.outputArgs.at(0).type) - << ", " - << argNames.at(method.inputArgs.count()) - << ")"; - - for (int i = 0; i < method.inputArgs.count(); ++i) - cs << ", Q_ARG(" - << qtTypeName(method.inputArgs.at(i).type) - << ", " - << argNames.at(i) - << ")"; - - cs << ");" << endl; - } - - cs << endl - << " // Alternative:" << endl - << " //"; - if (!method.outputArgs.isEmpty()) - cs << argNames.at(method.inputArgs.count()) << " = "; - cs << "static_cast(parent())->" << name << "("; - - int argPos = 0; - bool first = true; - for (int i = 0; i < method.inputArgs.count(); ++i) { - cs << (first ? "" : ", ") << argNames.at(argPos++); - first = false; - } - ++argPos; // skip retval, if any - for (int i = 1; i < method.outputArgs.count(); ++i) { - cs << (first ? "" : ", ") << argNames.at(argPos++); - first = false; - } - - cs << ");" << endl; - if (!method.outputArgs.isEmpty()) - cs << " return " << argNames.at(method.inputArgs.count()) << ";" << endl; - cs << "}" << endl - << endl; - } - - hs << "Q_SIGNALS: // SIGNALS" << endl; - foreach (const QDBusIntrospection::Signal &signal, interface->signals_) { - hs << " "; - if (signal.annotations.value(QLatin1String("org.freedesktop.DBus.Deprecated")) == - QLatin1String("true")) - hs << "Q_DECL_DEPRECATED "; - - hs << "void " << signal.name << "("; - - QStringList argNames = makeArgNames(signal.outputArgs); - writeArgList(hs, argNames, signal.outputArgs); - - hs << ");" << endl; // finished for header - } - - // close the class: - hs << "};" << endl - << endl; - } - - // close the include guard - hs << "#endif" << endl; - - if (includeMocs) - cs << endl - << "#include \"" << filename << ".moc\"" << endl; - - cs.flush(); - hs.flush(); - if (headerName == cppName) - file.write(cppData); - else { - // write to cpp file - QFile f(cppName); - f.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text); - f.write(cppData); - } -} - -int main(int argc, char **argv) -{ - parseCmdLine(argc, argv); - - QDBusIntrospection::Interfaces interfaces = readInput(); - cleanInterfaces(interfaces); - - if (proxyFile || (!proxyFile && !adaptorFile)) - writeProxy(proxyFile, interfaces); - - if (adaptorFile) - writeAdaptor(adaptorFile, interfaces); - - return 0; -} - -/*! - \page dbusidl2cpp.html - \title QtDBus IDL compiler (dbusidl2cpp) - - The QtDBus IDL compiler is a tool that can be used to parse interface descriptions and produce - static code representing those interfaces, which can then be used to make calls to remote - objects or implement said interfaces. - - \c dbusidl2dcpp has two modes of operation, that correspond to the two possible outputs it can - produce: the interface (proxy) class or the adaptor class.The latter consists of both a C++ - header and a source file, which are meant to be edited and adapted to your needs. - - The \c dbusidl2dcpp tool is not meant to be run every time you compile your - application. Instead, it's meant to be used when developing the code or when the interface - changes. - - The adaptor classes generated by \c dbusidl2cpp are just a skeleton that must be completed. It - generates, by default, calls to slots with the same name on the object the adaptor is attached - to. However, you may modify those slots or the property accessor functions to suit your needs. -*/ -- cgit