diff options
Diffstat (limited to 'qt/dbusidl2cpp.cpp')
-rw-r--r-- | qt/dbusidl2cpp.cpp | 112 |
1 files changed, 73 insertions, 39 deletions
diff --git a/qt/dbusidl2cpp.cpp b/qt/dbusidl2cpp.cpp index eb1a1b1e..8097a075 100644 --- a/qt/dbusidl2cpp.cpp +++ b/qt/dbusidl2cpp.cpp @@ -37,7 +37,7 @@ #include "qdbusintrospection_p.h" #define PROGRAMNAME "dbusidl2cpp" -#define PROGRAMVERSION "0.3" +#define PROGRAMVERSION "0.4" #define PROGRAMCOPYRIGHT "Copyright (C) 2006 Trolltech AS. All rights reserved." #define ANNOTATION_NO_WAIT "org.freedesktop.DBus.Method.NoReply" @@ -344,6 +344,26 @@ static void writeArgList(QTextStream &ts, const QStringList &argNames, } } +static QString propertyGetter(const QDBusIntrospection::Property &property) +{ + QString getter = property.annotations.value("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("com.trolltech.QtDBus.propertySetter"); + if (setter.isEmpty()) { + setter = "set" + property.name; + setter[3] = setter[3].toUpper(); + } + return setter; +} + static QString stringify(const QString &data) { QString retval; @@ -425,31 +445,6 @@ static void writeProxy(const char *proxyFile, const QDBusIntrospection::Interfac << "{" << endl << " Q_OBJECT" << endl; - // properties: - foreach (const QDBusIntrospection::Property &property, interface->properties) { - QByteArray type = qtTypeName(property.type); - QString templateType = templateArg(type); - QString constRefType = constRefArg(type); - QString getter = property.name; - QString setter = "set" + property.name; - getter[0] = getter[0].toLower(); - setter[3] = setter[3].toUpper(); - - 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; - } - // the interface name hs << "public:" << endl << " static inline const char *staticInterfaceName()" << endl @@ -472,9 +467,50 @@ static void writeProxy(const char *proxyFile, const QDBusIntrospection::Interfac << "}" << 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 slots: // METHODS" << endl; + hs << "public Q_SLOTS: // METHODS" << endl; foreach (const QDBusIntrospection::Method &method, interface->methods) { bool isAsync = method.annotations.value(ANNOTATION_NO_WAIT) == "true"; if (isAsync && !method.outputArgs.isEmpty()) { @@ -544,7 +580,7 @@ static void writeProxy(const char *proxyFile, const QDBusIntrospection::Interfac << endl; } - hs << "signals: // SIGNALS" << endl; + hs << "Q_SIGNALS: // SIGNALS" << endl; foreach (const QDBusIntrospection::Signal &signal, interface->signals_) { hs << " "; if (signal.annotations.value("org.freedesktop.DBus.Deprecated") == "true") @@ -720,12 +756,10 @@ static void writeAdaptor(const char *adaptorFile, const QDBusIntrospection::Inte foreach (const QDBusIntrospection::Property &property, interface->properties) { QByteArray type = qtTypeName(property.type); QString constRefType = constRefArg(type); - QString getter = property.name; - QString setter = "set" + property.name; - getter[0] = getter[0].toLower(); - setter[3] = setter[3].toUpper(); + QString getter = propertyGetter(property); + QString setter = propertySetter(property); - hs << " Q_PROPERTY(" << type << " " << property.name; + hs << " Q_PROPERTY(" << type << " " << property.name; if (property.access != QDBusIntrospection::Property::Write) hs << " READ " << getter; if (property.access != QDBusIntrospection::Property::Read) @@ -739,7 +773,7 @@ static void writeAdaptor(const char *adaptorFile, const QDBusIntrospection::Inte << className << "::" << getter << "() const" << endl << "{" << endl << " // get the value of property " << property.name << endl - << " return qvariant_cast< " << type <<" >(object()->property(\"" << getter << "\"));" << endl + << " return qvariant_cast< " << type <<" >(parent()->property(\"" << property.name << "\"));" << endl << "}" << endl << endl; } @@ -750,7 +784,7 @@ static void writeAdaptor(const char *adaptorFile, const QDBusIntrospection::Inte cs << "void " << className << "::" << setter << "(" << constRefType << "value)" << endl << "{" << endl << " // set the value of property " << property.name << endl - << " object()->setProperty(\"" << getter << "\", value);" << endl + << " parent()->setProperty(\"" << property.name << "\", value);" << endl << "}" << endl << endl; } @@ -758,7 +792,7 @@ static void writeAdaptor(const char *adaptorFile, const QDBusIntrospection::Inte hs << endl; } - hs << "public slots: // METHODS" << endl; + hs << "public Q_SLOTS: // METHODS" << endl; foreach (const QDBusIntrospection::Method &method, interface->methods) { bool isAsync = method.annotations.value(ANNOTATION_NO_WAIT) == "true"; if (isAsync && !method.outputArgs.isEmpty()) { @@ -805,7 +839,7 @@ static void writeAdaptor(const char *adaptorFile, const QDBusIntrospection::Inte // make the call if (method.inputArgs.count() <= 10 && method.outputArgs.count() <= 1) { // we can use QMetaObject::invokeMethod - static const char invoke[] = " QMetaObject::invokeMethod(object(), \""; + static const char invoke[] = " QMetaObject::invokeMethod(parent(), \""; cs << invoke << name << "\""; if (!method.outputArgs.isEmpty()) @@ -830,7 +864,7 @@ static void writeAdaptor(const char *adaptorFile, const QDBusIntrospection::Inte << " //"; if (!method.outputArgs.isEmpty()) cs << argNames.at(method.inputArgs.count()) << " = "; - cs << "static_cast<YourObjectType *>(object())->" << name << "("; + cs << "static_cast<YourObjectType *>(parent())->" << name << "("; int argPos = 0; bool first = true; @@ -851,7 +885,7 @@ static void writeAdaptor(const char *adaptorFile, const QDBusIntrospection::Inte << endl; } - hs << "signals: // SIGNALS" << endl; + hs << "Q_SIGNALS: // SIGNALS" << endl; foreach (const QDBusIntrospection::Signal &signal, interface->signals_) { hs << " "; if (signal.annotations.value("org.freedesktop.DBus.Deprecated") == "true") |