From caa0df63dc9ced3d02cfaedc18e5d74640dabf07 Mon Sep 17 00:00:00 2001 From: xavier Date: Wed, 25 May 2011 14:09:47 +0000 Subject: [PATCH] Titleblock templates values and labels can now be translated. git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/branches/0.3@1286 bfdf4180-ca20-0410-9c96-a3a8aa849046 --- sources/editor/elementscene.cpp | 1 + sources/nameslist.cpp | 44 +++++++++++++++++++++++------ sources/nameslist.h | 7 +++-- sources/titleblocktemplate.cpp | 26 +++++++++++++---- titleblocks/default.titleblock | 50 +++++++++++++++++++++++++++++---- 5 files changed, 108 insertions(+), 20 deletions(-) diff --git a/sources/editor/elementscene.cpp b/sources/editor/elementscene.cpp index 58d91d35e..f7c602a1d 100644 --- a/sources/editor/elementscene.cpp +++ b/sources/editor/elementscene.cpp @@ -30,6 +30,7 @@ #include "hotspoteditor.h" #include "editorcommands.h" #include "elementcontent.h" +#include "nameslist.h" /** Constructeur diff --git a/sources/nameslist.cpp b/sources/nameslist.cpp index 76c42948e..e1def936c 100644 --- a/sources/nameslist.cpp +++ b/sources/nameslist.cpp @@ -102,23 +102,28 @@ const QString NamesList::operator[](const QString &lang) const { 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 &xml_options) { + QHash 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,22 +132,45 @@ void NamesList::fromXml(const QDomElement &xml_element) { 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 &xml_options) const { + QHash xml_opt = getXmlOptions(xml_options); + QDomElement names_elmt = xml_document.createElement(xml_opt["ParentTagName"]); QHashIterator 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); } return(names_elmt); } +/** + @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 NamesList::getXmlOptions(const QHash &xml_options) const { + QHash 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 diff --git a/sources/nameslist.h b/sources/nameslist.h index 1d5e687f0..2f748ef2b 100644 --- a/sources/nameslist.h +++ b/sources/nameslist.h @@ -53,7 +53,10 @@ class NamesList { QString name(const QString & = QString()) const; // methodes relatives a XML - void fromXml(const QDomElement &); - QDomElement toXml(QDomDocument &) const; + void fromXml(const QDomElement &, const QHash & = QHash()); + QDomElement toXml(QDomDocument &, const QHash & = QHash()) const; + + protected: + QHash getXmlOptions(const QHash & = QHash()) const; }; #endif diff --git a/sources/titleblocktemplate.cpp b/sources/titleblocktemplate.cpp index 75793dbeb..f1fbc0058 100644 --- a/sources/titleblocktemplate.cpp +++ b/sources/titleblocktemplate.cpp @@ -18,6 +18,7 @@ #include "titleblocktemplate.h" #include "qet.h" #include "qetapp.h" +#include "nameslist.h" /** Constructor @@ -45,6 +46,9 @@ bool TitleBlockTemplate::loadFromXmlFile(const QString &filepath) { 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 @@ bool TitleBlockTemplate::loadFromXmlFile(const QString &filepath) { 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 @@ bool TitleBlockTemplate::loadCells(const QDomElement &xml_element) { 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 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; } diff --git a/titleblocks/default.titleblock b/titleblocks/default.titleblock index 409fb0f84..7068cdef7 100644 --- a/titleblocks/default.titleblock +++ b/titleblocks/default.titleblock @@ -2,10 +2,50 @@ Author: The QElectroTech team License: see http://qelectrotech.org/wiki/doc/elements_license - - - - - + + + + %author + + + + + + %date + + + + + + %title + + + + + + %filename + + + + + + %{folio-id}/%{folio-total} + +