[qet] [1286] Titleblock templates values and labels can now be translated. |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
Revision: 1286
Author: xavier
Date: 2011-05-25 16:09:47 +0200 (Wed, 25 May 2011)
Log Message:
-----------
Titleblock templates values and labels can now be translated.
Modified Paths:
--------------
branches/0.3/sources/editor/elementscene.cpp
branches/0.3/sources/nameslist.cpp
branches/0.3/sources/nameslist.h
branches/0.3/sources/titleblocktemplate.cpp
branches/0.3/titleblocks/default.titleblock
Modified: branches/0.3/sources/editor/elementscene.cpp
===================================================================
--- branches/0.3/sources/editor/elementscene.cpp 2011-05-24 16:45:36 UTC (rev 1285)
+++ branches/0.3/sources/editor/elementscene.cpp 2011-05-25 14:09:47 UTC (rev 1286)
@@ -30,6 +30,7 @@
#include "hotspoteditor.h"
#include "editorcommands.h"
#include "elementcontent.h"
+#include "nameslist.h"
/**
Constructeur
Modified: branches/0.3/sources/nameslist.cpp
===================================================================
--- branches/0.3/sources/nameslist.cpp 2011-05-24 16:45:36 UTC (rev 1285)
+++ branches/0.3/sources/nameslist.cpp 2011-05-25 14:09:47 UTC (rev 1286)
@@ -102,23 +102,28 @@
return(hash_names.value(lang));
}
+
+
/**
Charge la liste de noms depuis un element XML. Cet element est sense etre
le parent d'un element "names", qui contient lui meme les "name".
Les noms precedemment contenus dans la liste ne sont pas effaces mais
peuvent etre ecrases.
@param xml_element L'element XML a analyser
+ @param xml_options A set of options related to XML parsing.
+ @see getXmlOptions()
*/
-void NamesList::fromXml(const QDomElement &xml_element) {
+void NamesList::fromXml(const QDomElement &xml_element, const QHash<QString, QString> &xml_options) {
+ QHash<QString, QString> xml_opt = getXmlOptions(xml_options);
// parcourt les enfants "names" de l'element XML
for (QDomNode node = xml_element.firstChild() ; !node.isNull() ; node = node.nextSibling()) {
QDomElement names = node.toElement();
- if (names.isNull() || names.tagName() != "names") continue;
+ if (names.isNull() || names.tagName() != xml_opt["ParentTagName"]) continue;
// parcourt les petits-enfants "name"
for (QDomNode n = names.firstChild() ; !n.isNull() ; n = n.nextSibling()) {
QDomElement name = n.toElement();
- if (name.isNull() || name.tagName() != "name") continue;
- addName(name.attribute("lang"), name.text());
+ if (name.isNull() || name.tagName() != xml_opt["TagName"]) continue;
+ addName(name.attribute(xml_opt["LanguageAttribute"]), name.text());
}
}
}
@@ -127,16 +132,18 @@
Exporte la liste des noms vers un element XML. Veillez a verifier que la
liste de noms n'est pas vide avant de l'exporter.
@param xml_document Le document XML dans lequel l'element XML sera insere
+ @param xml_options A set of options related to XML parsing.
@return L'element XML correspondant a la section "names"
@see count()
*/
-QDomElement NamesList::toXml(QDomDocument &xml_document) const {
- QDomElement names_elmt = xml_document.createElement("names");
+QDomElement NamesList::toXml(QDomDocument &xml_document, const QHash<QString, QString> &xml_options) const {
+ QHash<QString, QString> xml_opt = getXmlOptions(xml_options);
+ QDomElement names_elmt = xml_document.createElement(xml_opt["ParentTagName"]);
QHashIterator<QString, QString> names_iterator(hash_names);
while (names_iterator.hasNext()) {
names_iterator.next();
- QDomElement name_elmt = xml_document.createElement("name");
- name_elmt.setAttribute("lang", names_iterator.key());
+ QDomElement name_elmt = xml_document.createElement(xml_opt["TagName"]);
+ name_elmt.setAttribute(xml_opt["LanguageAttribute"], names_iterator.key());
name_elmt.appendChild(xml_document.createTextNode(names_iterator.value()));
names_elmt.appendChild(name_elmt);
}
@@ -144,6 +151,27 @@
}
/**
+ @param xml_options A set of options related to XML parsing. Available keys:
+ * ParentTagName (falls back to "names")
+ * TagName (falls back to "name")
+ * LanguageAttribute (falls back to "lang")
+ @return the same set, with at least all the known options
+*/
+QHash<QString, QString> NamesList::getXmlOptions(const QHash<QString, QString> &xml_options) const {
+ QHash<QString, QString> new_xml_options = xml_options;
+ if (!xml_options.contains("ParentTagName")) {
+ new_xml_options.insert("ParentTagName", "names");
+ }
+ if (!xml_options.contains("TagName")) {
+ new_xml_options.insert("TagName", "name");
+ }
+ if (!xml_options.contains("LanguageAttribute")) {
+ new_xml_options.insert("LanguageAttribute", "lang");
+ }
+ return new_xml_options;
+}
+
+/**
@param nl une autre liste de noms
@return true si les listes de noms sont differentes, false sinon
*/
Modified: branches/0.3/sources/nameslist.h
===================================================================
--- branches/0.3/sources/nameslist.h 2011-05-24 16:45:36 UTC (rev 1285)
+++ branches/0.3/sources/nameslist.h 2011-05-25 14:09:47 UTC (rev 1286)
@@ -53,7 +53,10 @@
QString name(const QString & = QString()) const;
// methodes relatives a XML
- void fromXml(const QDomElement &);
- QDomElement toXml(QDomDocument &) const;
+ void fromXml(const QDomElement &, const QHash<QString, QString> & = QHash<QString, QString>());
+ QDomElement toXml(QDomDocument &, const QHash<QString, QString> & = QHash<QString, QString>()) const;
+
+ protected:
+ QHash<QString, QString> getXmlOptions(const QHash<QString, QString> & = QHash<QString, QString>()) const;
};
#endif
Modified: branches/0.3/sources/titleblocktemplate.cpp
===================================================================
--- branches/0.3/sources/titleblocktemplate.cpp 2011-05-24 16:45:36 UTC (rev 1285)
+++ branches/0.3/sources/titleblocktemplate.cpp 2011-05-25 14:09:47 UTC (rev 1286)
@@ -18,6 +18,7 @@
#include "titleblocktemplate.h"
#include "qet.h"
#include "qetapp.h"
+#include "nameslist.h"
/**
Constructor
@@ -45,6 +46,9 @@
if (!template_file.open(QIODevice::ReadOnly | QIODevice::Text)) {
return(false);
}
+#ifdef TITLEBLOCK_TEMPLATE_DEBUG
+ qDebug() << Q_FUNC_INFO << filepath << "opened";
+#endif
// parses its content as XML
bool xml_parsing = xml_description_.setContent(&template_file);
@@ -52,7 +56,7 @@
return(false);
}
#ifdef TITLEBLOCK_TEMPLATE_DEBUG
- qDebug() << Q_FUNC_INFO << filepath << "opened";
+ qDebug() << Q_FUNC_INFO << filepath << "opened and parsed";
#endif
return(loadFromXmlElement(xml_description_.documentElement()));
}
@@ -264,12 +268,24 @@
if (cell_element.hasAttribute("name") && !cell_element.attribute("name").isEmpty()) {
loaded_cell -> value_name = cell_element.attribute("name");
}
- if (cell_element.hasAttribute("value") && !cell_element.attribute("value").isEmpty()) {
- loaded_cell -> value = cell_element.attribute("value");
+
+ QHash<QString, QString> names_options;
+ names_options["TagName"] = "translation";
+
+ names_options["ParentTagName"] = "value";
+ NamesList value_nameslist;
+ value_nameslist.fromXml(cell_element, names_options);
+ if (!value_nameslist.name().isEmpty()) {
+ loaded_cell -> value = value_nameslist.name();
}
- if (cell_element.hasAttribute("label") && !cell_element.attribute("label").isEmpty()) {
- loaded_cell -> label = cell_element.attribute("label");
+
+ names_options["ParentTagName"] = "label";
+ NamesList label_nameslist;
+ label_nameslist.fromXml(cell_element, names_options);
+ if (!label_nameslist.name().isEmpty()) {
+ loaded_cell -> label = label_nameslist.name();
}
+
if (cell_element.hasAttribute("displaylabel") && cell_element.attribute("displaylabel").compare("false", Qt::CaseInsensitive) == 0) {
loaded_cell -> display_label = false;
}
Modified: branches/0.3/titleblocks/default.titleblock
===================================================================
--- branches/0.3/titleblocks/default.titleblock 2011-05-24 16:45:36 UTC (rev 1285)
+++ branches/0.3/titleblocks/default.titleblock 2011-05-25 14:09:47 UTC (rev 1286)
@@ -2,10 +2,50 @@
<informations>Author: The QElectroTech team
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
<grid rows="25px;25px" cols="t22%;r100%;t22%">
- <field row="0" col="0" name="author" label="Auteur" displaylabel="true" align="left" rowspan="0" value="%author" />
- <field row="1" col="0" name="date" label="Date" displaylabel="true" align="left" rowspan="0" value="%date" />
- <field row="0" col="1" name="title" label="Titre" displaylabel="false" align="center" rowspan="1" value="%title" />
- <field row="0" col="2" name="file" label="Fichier" displaylabel="true" align="left" rowspan="0" value="%filename" />
- <field row="1" col="2" name="folio" label="Folio" displaylabel="true" align="left" rowspan="0" value="%{folio-id}/%{folio-total}" />
+ <field row="0" col="0" name="author" displaylabel="true" align="left" rowspan="0">
+ <label>
+ <translation lang="en">Author</translation>
+ <translation lang="fr">Auteur</translation>
+ </label>
+ <value>
+ <translation lang="en">%author</translation>
+ </value>
+ </field>
+ <field row="1" col="0" name="date" displaylabel="true" align="left" rowspan="0">
+ <label>
+ <translation lang="en">Date</translation>
+ <translation lang="fr">Date</translation>
+ </label>
+ <value>
+ <translation lang="en">%date</translation>
+ </value>
+ </field>
+ <field row="0" col="1" name="title" displaylabel="false" align="center" rowspan="1">
+ <label>
+ <translation lang="en">Title</translation>
+ <translation lang="fr">Titre</translation>
+ </label>
+ <value>
+ <translation lang="en">%title</translation>
+ </value>
+ </field>
+ <field row="0" col="2" name="file" displaylabel="true" align="left" rowspan="0">
+ <label>
+ <translation lang="en">File</translation>
+ <translation lang="fr">Fichier</translation>
+ </label>
+ <value>
+ <translation lang="en">%filename</translation>
+ </value>
+ </field>
+ <field row="1" col="2" name="folio" displaylabel="true" align="left" rowspan="0">
+ <label>
+ <translation lang="en">Folio</translation>
+ <translation lang="fr">Folio</translation>
+ </label>
+ <value>
+ <translation lang="en">%{folio-id}/%{folio-total}</translation>
+ </value>
+ </field>
</grid>
</titleblocktemplate>