Mercurial > projects > qtd
diff generator/cppimplgenerator.cpp @ 35:5917a613d118
wrapping of QtXml
author | eldar |
---|---|
date | Sat, 16 May 2009 20:47:44 +0000 |
parents | 17cc45b32686 |
children | 8022ef40f110 |
line wrap: on
line diff
--- a/generator/cppimplgenerator.cpp Sat May 16 18:06:25 2009 +0000 +++ b/generator/cppimplgenerator.cpp Sat May 16 20:47:44 2009 +0000 @@ -598,6 +598,9 @@ if (java_class->package() == "qt.gui") s << "#include \"ArrayOps_qt_gui.h\"" << endl; + QString pkg_name = QString(java_class->package()).replace(".", "_"); + s << QString("#include \"ArrayOps_%1.h\"").arg(pkg_name) << endl; + s << endl; writeInterfaceCasts(s, java_class); @@ -1921,9 +1924,12 @@ if (nativeArgCount > 0) s << "," << endl << " "; // if QString argument we have to pass DArrat - if ((te && te->qualifiedCppName() == "QString") || d_type->isTargetLangString()) - s << "string " << arg_name; - else if (d_type->isContainer()) { + if ((te && te->qualifiedCppName() == "QString") || d_type->isTargetLangString()) { + if (d_export) + s << "string " << arg_name; + else + s << "DArray " << arg_name; + } else if (d_type->isContainer()) { const ContainerTypeEntry *cte = static_cast<const ContainerTypeEntry *>(te); if(isLinearContainer(cte)) @@ -3023,11 +3029,17 @@ << " = new QVariant(" << qt_name << ");" << endl; } else if (java_type->isTargetLangString()) { - -// if (option & BoxedPrimitive) - s << INDENT << "_d_toUtf8(" << qt_name << ".utf16(), " - << qt_name << ".size(), " << java_name << ");" << endl; - + if(java_type->typeEntry()->qualifiedCppName() == "QStringRef") { + s << INDENT << "const QString *str_ref = " << qt_name << ".string();" << endl + << INDENT << "if(str_ref)" << endl + << INDENT << " _d_toUtf8(str_ref->utf16(), str_ref->size(), " << java_name << ");" << endl + << INDENT << "else {" << endl + << INDENT << " QString empty_str;" << endl + << INDENT << " _d_toUtf8(empty_str.utf16(), empty_str.size(), " << java_name << ");" << endl + << INDENT << "}" << endl; + } else { + s << INDENT << QString("_d_toUtf8(%1.utf16(), %1.size(), %2);").arg(qt_name, java_name) << endl; + } } else if (java_type->isTargetLangChar()) { s << INDENT << "jchar " << java_name << " = " << qt_name << ".unicode();" << endl; @@ -3381,7 +3393,7 @@ { Indentation indent(INDENT); if(targ->isTargetLangString()) - s << INDENT << "string __d_element;" << endl + s << INDENT << "DArray __d_element;" << endl << INDENT << "qtd_get_string_from_array(" << java_name << ", i, &__d_element);" << endl; else { s << INDENT;