localized enum strings
authorkonrad <konrad@6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33>
Wed, 30 Dec 2009 11:21:38 +0000 (11:21 +0000)
committerkonrad <konrad@6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33>
Wed, 30 Dec 2009 11:21:38 +0000 (11:21 +0000)
made l10n of wobs easier

git-svn-id: https://silmor.de/svn/softmagic/smoke/trunk@377 6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33

woc/qtout.cpp

index b59687d..487c594 100644 (file)
@@ -201,6 +201,20 @@ void WocQtClientOut::classEnums(const WocClass&cls,QFile&hdr,QFile&src,QString c
                        scd+="\tif(e=="+ev[j].name+")return \""+ev[j].name+"\";\n";
                }
                scd+="\treturn \"\";\n}\n";
+               //localized string converters
+               hcd+="\tstatic "+k[i]+" locstr2"+k[i]+"(QString,bool*ok=0);\n";
+               hcd+="\tstatic QString "+k[i]+"2locstr("+k[i]+");\n";
+               scd+=cn+"::"+k[i]+" "+cn+"::locstr2"+k[i]+"(QString s,bool*ok)\n{\n";
+               scd+="\ts=s.toLower();if(ok)*ok=true;\n";
+               for(int j=0;j<ev.size();j++){
+                       scd+="\tif(s==QCoreApplication::translate(\""+cn+"\",\""+ev[j].name+"\").toLower())return "+ev[j].name+";\n";
+               }
+               scd+="\tif(ok)*ok=false;\n\treturn "+ev[0].name+";\n}\n";
+               scd+="QString "+cn+"::"+k[i]+"2locstr("+k[i]+" e)\n{\n";
+               for(int j=0;j<ev.size();j++){
+                       scd+="\tif(e=="+ev[j].name+")return QCoreApplication::translate(\""+cn+"\",\""+ev[j].name+"\");\n";
+               }
+               scd+="\treturn \"\";\n}\n";
        }
        hdr.write(hcd.toAscii());
        src.write(scd.toAscii());
@@ -281,7 +295,7 @@ void WocQtClientOut::classDeserializer(const WocClass&cls,QFile&hdr,QFile&src,QS
                        if(cls.propertyIsInt(k[i])){
                                scd+="\t\tbool b;\n\t\tint ct=el.text().toInt(&b);\n";
                                scd+="\t\tif(b)add"+k[i]+"(ct);\n";
-                               scd+="\t\telse throw WDeserializerException(QCoreApplication::translate(\""+cn+"\",\"Class "+cn+" property "+k[i]+" is integer list, but non-integer was found.\"));\n";
+                               scd+="\t\telse throw WDeserializerException(QCoreApplication::translate(\"WobTransaction\",\"Class '%1' property '%2' is integer list, but non-integer was found.\").arg(\""+cn+"\").arg(\""+k[i]+"\"));\n";
                        }else
                        if(cls.propertyIsBool(k[i])){
                                scd+="\t\tadd"+k[i]+"(el.text()==\"yes\");\n";
@@ -297,7 +311,7 @@ void WocQtClientOut::classDeserializer(const WocClass&cls,QFile&hdr,QFile&src,QS
                                QString pt=cls.propertyPlainType(k[i]);
                                scd+="\t\t"+pt+" ct=str2"+pt+"(root.attribute(\""+k[i]+"\"),&b);\n";
                                scd+="\t\tif(b)add"+k[i]+"(ct);\n";
-                               scd+="\t\telse throw WDeserializerException(QCoreApplication::translate(\""+cn+"\",\"Class "+cn+" property "+k[i]+" is enum list, invalid value was found.\"));\n";
+                               scd+="\t\telse throw WDeserializerException(QCoreApplication::translate(\"WobTransaction\",\"Class '%1' property '%2' is enum list, invalid value was found.\").arg(\""+cn+"\").arg(\""+k[i]+"\"));\n";
                        }else
                        if(cls.propertyIsObject(k[i])){
                                scd+="\t\tadd"+k[i]+"("+m_prefix+"O"+cls.propertyPlainType(k[i])+"(el));\n";
@@ -316,7 +330,7 @@ void WocQtClientOut::classDeserializer(const WocClass&cls,QFile&hdr,QFile&src,QS
                                if(cls.propertyIsInt(k[i])){
                                        scd+="\t\tbool b;\n\t\tint ct=root.attribute(\""+k[i]+"\").toInt(&b);\n";
                                        scd+="\t\tif(b)set"+k[i]+"(ct);\n";
-                                       scd+="\t\telse throw WDeserializerException(QCoreApplication::translate(\""+cn+"\",\"Class "+cn+" property "+k[i]+" is integer, but non-integer was found.\"));\n";
+                                       scd+="\t\telse throw WDeserializerException(QCoreApplication::translate(\"WobTransaction\",\"Class '%1' property '%2' is integer, but non-integer was found.\").arg(\""+cn+"\").arg(\""+k[i]+"\"));\n";
                                }else
                                if(cls.propertyIsBool(k[i])){
                                        scd+="\t\tset"+k[i]+"(root.attribute(\""+k[i]+"\")==\"yes\");\n";
@@ -329,7 +343,7 @@ void WocQtClientOut::classDeserializer(const WocClass&cls,QFile&hdr,QFile&src,QS
                                        QString pt=cls.propertyPlainType(k[i]);
                                        scd+="\t\t"+pt+" ct=str2"+pt+"(root.attribute(\""+k[i]+"\"),&b);\n";
                                        scd+="\t\tif(b)set"+k[i]+"(ct);\n";
-                                       scd+="\t\telse throw WDeserializerException(QCoreApplication::translate(\""+cn+"\",\"Class "+cn+" property "+k[i]+" is enum, invalid value was found.\"));\n";
+                                       scd+="\t\telse throw WDeserializerException(QCoreApplication::translate(\"WobTransaction\",\"Class '%1' property '%2' is enum, invalid value was found.\").arg(\""+cn+"\").arg(\""+k[i]+"\"));\n";
                                }else{
                                        scd+="#error \"Internal Generator error.\"\n";
                                        qDebug("Error: unable to generate code for property %s of type %s.",k[i].toAscii().data(),cls.propertyType(k[i]).toAscii().data());