diff --git a/customelement.cpp b/customelement.cpp index 69ed6a62a..614ce098c 100644 --- a/customelement.cpp +++ b/customelement.cpp @@ -94,33 +94,15 @@ CustomElement::CustomElement(QString &nom_fichier, QGraphicsItem *qgi, Diagram * t.setJoinStyle(Qt::MiterJoin); qp.setPen(t); - // recupere les deux premiers caracteres de la locale en cours du systeme - QString system_language = QLocale::system().name().left(2); + // extrait les noms de la definition XML + names.fromXml(racine); - // au depart, le nom de l'element est celui du fichier le decrivant - bool name_found = false; - QString name_elmt = infos_file.baseName(); - - // parcours des enfants de la definition : noms et parties du dessin + // parcours des enfants de la definition : parties du dessin int nb_elements_parses = 0; for (QDomNode node = racine.firstChild() ; !node.isNull() ; node = node.nextSibling()) { QDomElement elmts = node.toElement(); if (elmts.isNull()) continue; - if (elmts.tagName() == "names") { - // gestion des noms de l'element - if (name_found) continue; - for (QDomNode n = node.firstChild() ; !n.isNull() ; n = n.nextSibling()) { - QDomElement qde = n.toElement(); - if (qde.isNull() || qde.tagName() != "name" || !qde.hasAttribute("lang")) continue; - if (qde.attribute("lang") == system_language) { - name_elmt = qde.text(); - name_found = true; - break; - } else if (qde.attribute("lang") == "en") { - name_elmt = qde.text(); - } - } - } else if (elmts.tagName() == "description") { + if (elmts.tagName() == "description") { // gestion de la description graphique de l'element // = parcours des differentes parties du dessin for (QDomNode n = node.firstChild() ; !n.isNull() ; n = n.nextSibling()) { @@ -136,9 +118,6 @@ CustomElement::CustomElement(QString &nom_fichier, QGraphicsItem *qgi, Diagram * } } - // on garde le nom trouve - priv_nom = name_elmt; - // fin du dessin qp.end(); diff --git a/customelement.h b/customelement.h index a06c5bd11..be1fd2163 100644 --- a/customelement.h +++ b/customelement.h @@ -2,6 +2,7 @@ #define ELEMENTPERSO_H #include "fixedelement.h" #include +#include "nameslist.h" /** Cette classe represente un element electrique. Elle est utilisable comme un element fixe. La difference est que l'element perso lit @@ -20,7 +21,7 @@ class CustomElement : public FixedElement { // attributs private: int elmt_etat; // contient le code d'erreur si l'instanciation a echoue ou 0 si l'instanciation s'est bien passe - QString priv_nom; + NamesList names; QString nomfichier; QPicture dessin; int nb_terminals; @@ -96,7 +97,7 @@ inline int CustomElement::etat() const { @return Le nom de l'element */ inline QString CustomElement::nom() const { - return(priv_nom); + return(names.name(QFileInfo(nomfichier).baseName())); } #endif diff --git a/elementscategory.cpp b/elementscategory.cpp index 7a127229a..d5d6e6dc3 100644 --- a/elementscategory.cpp +++ b/elementscategory.cpp @@ -65,24 +65,10 @@ void ElementsCategory::loadNames() { /** Methode permettant d'obtenir le nom affichable de cette categorie. - Par ordre de preference, on prendra : - - le nom dans la langue du systeme - - le nom en anglais - - le nom du dossier @return Le nom affichable de la categorie */ QString ElementsCategory::name() const { - // recupere les deux premiers caracteres de la locale en cours du systeme - QString system_language = QLocale::system().name().left(2); - QString category_name; - if (category_names[system_language] != QString()) { - category_name = category_names[system_language]; - } else if (category_names["en"] != QString()) { - category_name = category_names["en"]; - } else { - category_name = dirName(); - } - return(category_name); + return(category_names.name(dirName())); } /** diff --git a/nameslist.cpp b/nameslist.cpp index 6d66b4678..096f63837 100644 --- a/nameslist.cpp +++ b/nameslist.cpp @@ -126,3 +126,26 @@ QDomElement NamesList::toXml(QDomDocument &xml_document) const { } return(names_elmt); } + +/** + Retourne le nom approprie en fonction de la langue du systeme + Par ordre de preference, on prendra : + - le nom dans la langue du systeme + - le nom en anglais + - le nom du dossier + @param fallback_name Le nom a retourner si aucun nom approprie n'est trouve + @return Le nom approprie en fonction de la langue du systeme +*/ +const QString &NamesList::name(const QString &fallback_name) const { + // recupere les deux premiers caracteres de la locale en cours du systeme + QString system_language = QLocale::system().name().left(2); + QString *returned_name; + if (hash_names[system_language] != QString()) { + returned_name = new QString(hash_names[system_language]); + } else if (hash_names["en"] != QString()) { + returned_name = new QString(hash_names["en"]); + } else { + returned_name = new QString(fallback_name); + } + return(*returned_name); +} diff --git a/nameslist.h b/nameslist.h index 40b8eb125..6d704e4d9 100644 --- a/nameslist.h +++ b/nameslist.h @@ -23,6 +23,7 @@ class NamesList { int count() const; QString &operator[](const QString &); const QString operator[](const QString &) const; + const QString &name(const QString & = QString()) const; // methodes relatives a XML void fromXml(const QDomElement &);