diff generator/dgenerator.cpp @ 270:49bfc86ff583

true emit of Qt signals.
author eldar
date Thu, 24 Sep 2009 12:59:48 +0000
parents 073b9153ed8a
children 519befd5a5d1
line wrap: on
line diff
--- a/generator/dgenerator.cpp	Sun Sep 20 10:23:48 2009 +0000
+++ b/generator/dgenerator.cpp	Thu Sep 24 12:59:48 2009 +0000
@@ -984,6 +984,9 @@
         option = Option(option | SkipReturnType);
     writeFunctionAttributes(s, d_function, included_attributes, excluded_attributes, option);
 
+    if(d_function->isSignal())
+        functionName += "_emit";
+
     s << functionName << "(";
     writeFunctionArguments(s, d_function, argument_count, option);
     s << ")";
@@ -1746,7 +1749,7 @@
 
                 if (type->isContainer()) {
                     s << INDENT << translateType(type, signal->implementingClass(), BoxedPrimitive) << " " << arg_name << ";" << endl
-                      << INDENT << fromCppContainerName(d_class, type) << "(" << arg_ptr << ", &" << arg_name << ");" << endl;
+                      << INDENT << cppContainerConversionName(d_class, type, FromCpp) << "(" << arg_ptr << ", &" << arg_name << ");" << endl;
                 } else if (type->isTargetLangString()) {
                     s << INDENT << "auto " << arg_name << "_ptr = " << arg_ptr << ";" << endl
                       << INDENT << "string " << arg_name << " = QString.toNativeString(" << arg_name << "_ptr);";
@@ -2152,7 +2155,11 @@
         writeSignalSignatures(s, d_class, signal_funcs);
    
         foreach (AbstractMetaFunction *signal, signal_funcs)
+        {
             writeSignal(s, signal);
+            if(!signal->isPrivate())
+                writeFunction(s, signal);
+        }
     }
 
     // Class has subclasses but also only private constructors
@@ -2503,6 +2510,18 @@
         s << "extern (C) void qtd_" << d_class->name() << "_destructor(void *ptr);" << endl << endl;
 
     // qtd
+
+    s << endl << "// C wrappers for signal emitters" << endl;
+
+    if (d_class->isQObject())
+    {
+        AbstractMetaFunctionList signal_funcs = signalFunctions(d_class, false);
+
+        foreach (AbstractMetaFunction *signal, signal_funcs)
+            if(!signal->isPrivate())
+                writePrivateNativeFunction(s, signal);
+    }
+
     s << endl << "// C wrappers" << endl;
     d_funcs = d_class->functionsInTargetLang();
     if (!d_class->isInterface())
@@ -2802,7 +2821,7 @@
 
     if (sz > 0) {
         for (int i=0; i<sz; ++i) {
-                s << ", ";
+            s << ", ";
 
             QString modifiedType = d_function->typeReplaced(i+1);