Mercurial > projects > qtd
comparison 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 |
comparison
equal
deleted
inserted
replaced
269:cc9080066035 | 270:49bfc86ff583 |
---|---|
982 // The actual function | 982 // The actual function |
983 if (!(d_function->isEmptyFunction() || d_function->isNormal() || d_function->isSignal())) | 983 if (!(d_function->isEmptyFunction() || d_function->isNormal() || d_function->isSignal())) |
984 option = Option(option | SkipReturnType); | 984 option = Option(option | SkipReturnType); |
985 writeFunctionAttributes(s, d_function, included_attributes, excluded_attributes, option); | 985 writeFunctionAttributes(s, d_function, included_attributes, excluded_attributes, option); |
986 | 986 |
987 if(d_function->isSignal()) | |
988 functionName += "_emit"; | |
989 | |
987 s << functionName << "("; | 990 s << functionName << "("; |
988 writeFunctionArguments(s, d_function, argument_count, option); | 991 writeFunctionArguments(s, d_function, argument_count, option); |
989 s << ")"; | 992 s << ")"; |
990 | 993 |
991 return result; | 994 return result; |
1744 | 1747 |
1745 QString arg_ptr = QString("args[%1]").arg(argument->argumentIndex() + 1); | 1748 QString arg_ptr = QString("args[%1]").arg(argument->argumentIndex() + 1); |
1746 | 1749 |
1747 if (type->isContainer()) { | 1750 if (type->isContainer()) { |
1748 s << INDENT << translateType(type, signal->implementingClass(), BoxedPrimitive) << " " << arg_name << ";" << endl | 1751 s << INDENT << translateType(type, signal->implementingClass(), BoxedPrimitive) << " " << arg_name << ";" << endl |
1749 << INDENT << fromCppContainerName(d_class, type) << "(" << arg_ptr << ", &" << arg_name << ");" << endl; | 1752 << INDENT << cppContainerConversionName(d_class, type, FromCpp) << "(" << arg_ptr << ", &" << arg_name << ");" << endl; |
1750 } else if (type->isTargetLangString()) { | 1753 } else if (type->isTargetLangString()) { |
1751 s << INDENT << "auto " << arg_name << "_ptr = " << arg_ptr << ";" << endl | 1754 s << INDENT << "auto " << arg_name << "_ptr = " << arg_ptr << ";" << endl |
1752 << INDENT << "string " << arg_name << " = QString.toNativeString(" << arg_name << "_ptr);"; | 1755 << INDENT << "string " << arg_name << " = QString.toNativeString(" << arg_name << "_ptr);"; |
1753 } else if(type->isPrimitive() || type->isEnum() || type->isFlags() || type->typeEntry()->isStructInD()) { | 1756 } else if(type->isPrimitive() || type->isEnum() || type->isFlags() || type->typeEntry()->isStructInD()) { |
1754 QString type_name = argument->type()->typeEntry()->qualifiedTargetLangName(); | 1757 QString type_name = argument->type()->typeEntry()->qualifiedTargetLangName(); |
2150 { | 2153 { |
2151 AbstractMetaFunctionList signal_funcs = signalFunctions(d_class, false); | 2154 AbstractMetaFunctionList signal_funcs = signalFunctions(d_class, false); |
2152 writeSignalSignatures(s, d_class, signal_funcs); | 2155 writeSignalSignatures(s, d_class, signal_funcs); |
2153 | 2156 |
2154 foreach (AbstractMetaFunction *signal, signal_funcs) | 2157 foreach (AbstractMetaFunction *signal, signal_funcs) |
2158 { | |
2155 writeSignal(s, signal); | 2159 writeSignal(s, signal); |
2160 if(!signal->isPrivate()) | |
2161 writeFunction(s, signal); | |
2162 } | |
2156 } | 2163 } |
2157 | 2164 |
2158 // Class has subclasses but also only private constructors | 2165 // Class has subclasses but also only private constructors |
2159 if (!d_class->isFinalInTargetLang() && d_class->isFinalInCpp()) { | 2166 if (!d_class->isFinalInTargetLang() && d_class->isFinalInCpp()) { |
2160 s << endl << INDENT << "/**" << endl | 2167 s << endl << INDENT << "/**" << endl |
2501 | 2508 |
2502 if (d_class->hasConstructors() && !d_class->isQObject()) | 2509 if (d_class->hasConstructors() && !d_class->isQObject()) |
2503 s << "extern (C) void qtd_" << d_class->name() << "_destructor(void *ptr);" << endl << endl; | 2510 s << "extern (C) void qtd_" << d_class->name() << "_destructor(void *ptr);" << endl << endl; |
2504 | 2511 |
2505 // qtd | 2512 // qtd |
2513 | |
2514 s << endl << "// C wrappers for signal emitters" << endl; | |
2515 | |
2516 if (d_class->isQObject()) | |
2517 { | |
2518 AbstractMetaFunctionList signal_funcs = signalFunctions(d_class, false); | |
2519 | |
2520 foreach (AbstractMetaFunction *signal, signal_funcs) | |
2521 if(!signal->isPrivate()) | |
2522 writePrivateNativeFunction(s, signal); | |
2523 } | |
2524 | |
2506 s << endl << "// C wrappers" << endl; | 2525 s << endl << "// C wrappers" << endl; |
2507 d_funcs = d_class->functionsInTargetLang(); | 2526 d_funcs = d_class->functionsInTargetLang(); |
2508 if (!d_class->isInterface()) | 2527 if (!d_class->isInterface()) |
2509 for (int i=0; i<d_funcs.size(); ++i) { | 2528 for (int i=0; i<d_funcs.size(); ++i) { |
2510 AbstractMetaFunction *function = d_funcs.at(i); | 2529 AbstractMetaFunction *function = d_funcs.at(i); |
2800 | 2819 |
2801 s << INDENT << "mixin Signal!(\"" << d_function->name() << "\""; | 2820 s << INDENT << "mixin Signal!(\"" << d_function->name() << "\""; |
2802 | 2821 |
2803 if (sz > 0) { | 2822 if (sz > 0) { |
2804 for (int i=0; i<sz; ++i) { | 2823 for (int i=0; i<sz; ++i) { |
2805 s << ", "; | 2824 s << ", "; |
2806 | 2825 |
2807 QString modifiedType = d_function->typeReplaced(i+1); | 2826 QString modifiedType = d_function->typeReplaced(i+1); |
2808 | 2827 |
2809 if (modifiedType.isEmpty()) | 2828 if (modifiedType.isEmpty()) |
2810 s << translateType(arguments.at(i)->type(), d_function->implementingClass(), BoxedPrimitive); | 2829 s << translateType(arguments.at(i)->type(), d_function->implementingClass(), BoxedPrimitive); |