La classe CustomElement utilise desormais la classe NamesList pour gerer ses noms

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@93 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavierqet 2007-04-16 20:38:58 +00:00
parent 8cb3499469
commit 0472392977
5 changed files with 32 additions and 42 deletions

View File

@ -94,33 +94,15 @@ CustomElement::CustomElement(QString &nom_fichier, QGraphicsItem *qgi, Diagram *
t.setJoinStyle(Qt::MiterJoin); t.setJoinStyle(Qt::MiterJoin);
qp.setPen(t); qp.setPen(t);
// recupere les deux premiers caracteres de la locale en cours du systeme // extrait les noms de la definition XML
QString system_language = QLocale::system().name().left(2); names.fromXml(racine);
// au depart, le nom de l'element est celui du fichier le decrivant // parcours des enfants de la definition : parties du dessin
bool name_found = false;
QString name_elmt = infos_file.baseName();
// parcours des enfants de la definition : noms et parties du dessin
int nb_elements_parses = 0; int nb_elements_parses = 0;
for (QDomNode node = racine.firstChild() ; !node.isNull() ; node = node.nextSibling()) { for (QDomNode node = racine.firstChild() ; !node.isNull() ; node = node.nextSibling()) {
QDomElement elmts = node.toElement(); QDomElement elmts = node.toElement();
if (elmts.isNull()) continue; if (elmts.isNull()) continue;
if (elmts.tagName() == "names") { if (elmts.tagName() == "description") {
// 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") {
// gestion de la description graphique de l'element // gestion de la description graphique de l'element
// = parcours des differentes parties du dessin // = parcours des differentes parties du dessin
for (QDomNode n = node.firstChild() ; !n.isNull() ; n = n.nextSibling()) { 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 // fin du dessin
qp.end(); qp.end();

View File

@ -2,6 +2,7 @@
#define ELEMENTPERSO_H #define ELEMENTPERSO_H
#include "fixedelement.h" #include "fixedelement.h"
#include <QtGui> #include <QtGui>
#include "nameslist.h"
/** /**
Cette classe represente un element electrique. Elle est utilisable Cette classe represente un element electrique. Elle est utilisable
comme un element fixe. La difference est que l'element perso lit comme un element fixe. La difference est que l'element perso lit
@ -20,7 +21,7 @@ class CustomElement : public FixedElement {
// attributs // attributs
private: private:
int elmt_etat; // contient le code d'erreur si l'instanciation a echoue ou 0 si l'instanciation s'est bien passe 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; QString nomfichier;
QPicture dessin; QPicture dessin;
int nb_terminals; int nb_terminals;
@ -96,7 +97,7 @@ inline int CustomElement::etat() const {
@return Le nom de l'element @return Le nom de l'element
*/ */
inline QString CustomElement::nom() const { inline QString CustomElement::nom() const {
return(priv_nom); return(names.name(QFileInfo(nomfichier).baseName()));
} }
#endif #endif

View File

@ -65,24 +65,10 @@ void ElementsCategory::loadNames() {
/** /**
Methode permettant d'obtenir le nom affichable de cette categorie. 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 @return Le nom affichable de la categorie
*/ */
QString ElementsCategory::name() const { QString ElementsCategory::name() const {
// recupere les deux premiers caracteres de la locale en cours du systeme return(category_names.name(dirName()));
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);
} }
/** /**

View File

@ -126,3 +126,26 @@ QDomElement NamesList::toXml(QDomDocument &xml_document) const {
} }
return(names_elmt); 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);
}

View File

@ -23,6 +23,7 @@ class NamesList {
int count() const; int count() const;
QString &operator[](const QString &); QString &operator[](const QString &);
const QString operator[](const QString &) const; const QString operator[](const QString &) const;
const QString &name(const QString & = QString()) const;
// methodes relatives a XML // methodes relatives a XML
void fromXml(const QDomElement &); void fromXml(const QDomElement &);