mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-18 13:30:34 +01:00
Introduction de la nouvelle classe NamesList
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@88 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
@@ -57,17 +57,7 @@ void ElementsCategory::loadNames() {
|
|||||||
QDomElement root = document.documentElement();
|
QDomElement root = document.documentElement();
|
||||||
if (root.tagName() != "qet-directory") return;
|
if (root.tagName() != "qet-directory") return;
|
||||||
|
|
||||||
// parcourt les "names"
|
category_names.fromXml(root);
|
||||||
for (QDomNode node = root.firstChild() ; !node.isNull() ; node = node.nextSibling()) {
|
|
||||||
QDomElement names = node.toElement();
|
|
||||||
if (names.isNull() || names.tagName() != "names") continue;
|
|
||||||
// parcourt les "name"
|
|
||||||
for (QDomNode n = names.firstChild() ; !n.isNull() ; n = n.nextSibling()) {
|
|
||||||
QDomElement name = n.toElement();
|
|
||||||
if (name.isNull() || name.tagName() != "name") continue;
|
|
||||||
category_names.insert(name.attribute("lang"), name.text());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ferme le fichier
|
// ferme le fichier
|
||||||
directory_conf.close();
|
directory_conf.close();
|
||||||
@@ -98,7 +88,7 @@ QString ElementsCategory::name() const {
|
|||||||
/**
|
/**
|
||||||
@return La liste des differents noms possibles pour la categorie
|
@return La liste des differents noms possibles pour la categorie
|
||||||
*/
|
*/
|
||||||
QHash<QString, QString> ElementsCategory::categoryNames() const {
|
NamesList ElementsCategory::categoryNames() const {
|
||||||
return(category_names);
|
return(category_names);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,7 +96,7 @@ QHash<QString, QString> ElementsCategory::categoryNames() const {
|
|||||||
Vide la liste des noms de la categorie
|
Vide la liste des noms de la categorie
|
||||||
*/
|
*/
|
||||||
void ElementsCategory::clearNames() {
|
void ElementsCategory::clearNames() {
|
||||||
category_names.clear();
|
category_names.clearNames();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -116,7 +106,7 @@ void ElementsCategory::clearNames() {
|
|||||||
@param value Le nom
|
@param value Le nom
|
||||||
*/
|
*/
|
||||||
void ElementsCategory::addName(const QString &lang, const QString &value) {
|
void ElementsCategory::addName(const QString &lang, const QString &value) {
|
||||||
category_names.insert(lang, value);
|
category_names.addName(lang, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -132,15 +122,7 @@ bool ElementsCategory::write() const {
|
|||||||
QDomDocument document;
|
QDomDocument document;
|
||||||
QDomElement root = document.createElement("qet-directory");
|
QDomElement root = document.createElement("qet-directory");
|
||||||
document.appendChild(root);
|
document.appendChild(root);
|
||||||
QDomElement names = document.createElement("names");
|
root.appendChild(category_names.toXml(document));
|
||||||
root.appendChild(names);
|
|
||||||
foreach(QString lang, category_names.keys()) {
|
|
||||||
QDomElement name = document.createElement("name");
|
|
||||||
name.setAttribute("lang", lang);
|
|
||||||
QDomText name_value = document.createTextNode(category_names[lang]);
|
|
||||||
name.appendChild(name_value);
|
|
||||||
names.appendChild(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
// repere le chemin du fichier de configuration de la categorie
|
// repere le chemin du fichier de configuration de la categorie
|
||||||
QFile directory_conf(canonicalPath() + "/qet_directory");
|
QFile directory_conf(canonicalPath() + "/qet_directory");
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#ifndef ELEMENTS_CATEGORY_H
|
#ifndef ELEMENTS_CATEGORY_H
|
||||||
#define ELEMENTS_CATEGORY_H
|
#define ELEMENTS_CATEGORY_H
|
||||||
#include <QtCore>
|
#include <QtCore>
|
||||||
|
#include "nameslist.h"
|
||||||
/**
|
/**
|
||||||
Cette classe represente une categorie d'elements.
|
Cette classe represente une categorie d'elements.
|
||||||
Une categorie d'elements est en fait un dossier avec un fichier
|
Une categorie d'elements est en fait un dossier avec un fichier
|
||||||
@@ -17,12 +18,12 @@ class ElementsCategory : public QDir {
|
|||||||
|
|
||||||
// attributs
|
// attributs
|
||||||
private:
|
private:
|
||||||
QHash<QString, QString> category_names;
|
NamesList category_names;
|
||||||
|
|
||||||
// methodes
|
// methodes
|
||||||
public:
|
public:
|
||||||
QString name() const;
|
QString name() const;
|
||||||
QHash<QString, QString> categoryNames() const;
|
NamesList categoryNames() const;
|
||||||
void clearNames();
|
void clearNames();
|
||||||
void addName(const QString &, const QString &);
|
void addName(const QString &, const QString &);
|
||||||
bool write() const;
|
bool write() const;
|
||||||
|
|||||||
@@ -18,15 +18,14 @@ ElementsCategoryEditor::ElementsCategoryEditor(const QString &category_path, boo
|
|||||||
connect(buttons, SIGNAL(accepted()), this, SLOT(acceptUpdate()));
|
connect(buttons, SIGNAL(accepted()), this, SLOT(acceptUpdate()));
|
||||||
|
|
||||||
// edition de categorie = affichage des noms deja existants
|
// edition de categorie = affichage des noms deja existants
|
||||||
QHash<QString, QString> cat_names = category -> categoryNames();
|
names_list -> setNames(category -> categoryNames());
|
||||||
names_list -> setNames(cat_names);
|
|
||||||
} else {
|
} else {
|
||||||
setWindowTitle(tr("Cr\351er une nouvelle cat\351gorie"));
|
setWindowTitle(tr("Cr\351er une nouvelle cat\351gorie"));
|
||||||
connect(buttons, SIGNAL(accepted()), this, SLOT(acceptCreation()));
|
connect(buttons, SIGNAL(accepted()), this, SLOT(acceptCreation()));
|
||||||
|
|
||||||
// nouvelle categorie = une ligne pre-machee
|
// nouvelle categorie = une ligne pre-machee
|
||||||
QHash<QString, QString> cat_names;
|
NamesList cat_names;
|
||||||
cat_names.insert(QLocale::system().name().left(2), tr("Nom de la nouvelle cat\351gorie"));
|
cat_names.addName(QLocale::system().name().left(2), tr("Nom de la nouvelle cat\351gorie"));
|
||||||
names_list -> setNames(cat_names);
|
names_list -> setNames(cat_names);
|
||||||
//names_list -> openPersistentEditor(qtwi, 1);
|
//names_list -> openPersistentEditor(qtwi, 1);
|
||||||
}
|
}
|
||||||
@@ -66,13 +65,13 @@ void ElementsCategoryEditor::acceptCreation() {
|
|||||||
|
|
||||||
// chargement des noms
|
// chargement des noms
|
||||||
category -> clearNames();
|
category -> clearNames();
|
||||||
QHash<QString, QString> names = names_list -> names();
|
NamesList names = names_list -> names();
|
||||||
foreach(QString lang, names.keys()) {
|
foreach(QString lang, names.langs()) {
|
||||||
category -> addName(lang, names[lang]);
|
category -> addName(lang, names[lang]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// cree un nom de dossier a partir du 1er nom de la categorie
|
// cree un nom de dossier a partir du 1er nom de la categorie
|
||||||
QString dirname = names[names.keys().first()].toLower().replace(" ", "_");
|
QString dirname = names[names.langs().first()].toLower().replace(" ", "_");
|
||||||
category -> setPath(category -> path() + "/" + dirname);
|
category -> setPath(category -> path() + "/" + dirname);
|
||||||
category -> write();
|
category -> write();
|
||||||
|
|
||||||
@@ -89,8 +88,8 @@ void ElementsCategoryEditor::acceptUpdate() {
|
|||||||
|
|
||||||
// chargement des noms
|
// chargement des noms
|
||||||
category -> clearNames();
|
category -> clearNames();
|
||||||
QHash<QString, QString> names = names_list -> names();
|
NamesList names = names_list -> names();
|
||||||
foreach(QString lang, names.keys()) {
|
foreach(QString lang, names.langs()) {
|
||||||
category -> addName(lang, names[lang]);
|
category -> addName(lang, names[lang]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
128
nameslist.cpp
Normal file
128
nameslist.cpp
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
#include "nameslist.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Constructeur
|
||||||
|
@param parent QObject parent
|
||||||
|
*/
|
||||||
|
NamesList::NamesList() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Constructeur de copie
|
||||||
|
@param other La NamesList a copie
|
||||||
|
*/
|
||||||
|
NamesList::NamesList(const NamesList &other) : hash_names(other.hash_names) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Destructeur
|
||||||
|
*/
|
||||||
|
NamesList::~NamesList() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Ajoute un nom a la liste
|
||||||
|
@param lang Sigle de deux lettres representant une langue. Si cela n'est
|
||||||
|
pas respecte, l'insertion n'est pas effectuee.
|
||||||
|
@param name Nom lui-meme. Ce ne doit pas etre une chaine de caractere vide.
|
||||||
|
Si cela n'est pas respecte, l'insertion n'est pas effectuee.
|
||||||
|
*/
|
||||||
|
void NamesList::addName(const QString &lang, const QString &name) {
|
||||||
|
if (lang.length() != 2) return;
|
||||||
|
hash_names.insert(lang, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Enleve le nom dont une langue donnee
|
||||||
|
@param lang la langue pour laquelle il faut supprimer le nom
|
||||||
|
*/
|
||||||
|
void NamesList::removeName(const QString &lang) {
|
||||||
|
hash_names.remove(lang);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Supprime tous les noms
|
||||||
|
*/
|
||||||
|
void NamesList::clearNames() {
|
||||||
|
hash_names.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return La liste de toutes les langues disponibles
|
||||||
|
*/
|
||||||
|
QList<QString> NamesList::langs() const {
|
||||||
|
return(hash_names.keys());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return true si la liste de noms est vide, false sinon
|
||||||
|
*/
|
||||||
|
bool NamesList::isEmpty() const {
|
||||||
|
return(hash_names.isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return Le nombre de noms dans la liste
|
||||||
|
*/
|
||||||
|
int NamesList::count() const {
|
||||||
|
return(hash_names.count());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@param lang une langue
|
||||||
|
@return Le nom dans la langue donnee ou QString() si ce nom n'est pas
|
||||||
|
defini
|
||||||
|
*/
|
||||||
|
QString &NamesList::operator[](const QString &lang) {
|
||||||
|
return(hash_names[lang]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@param lang une langue
|
||||||
|
@return Le nom dans la langue donnee ou QString() si ce nom n'est pas
|
||||||
|
defini
|
||||||
|
*/
|
||||||
|
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
|
||||||
|
*/
|
||||||
|
void NamesList::fromXml(const QDomElement &xml_element) {
|
||||||
|
// 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;
|
||||||
|
// 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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
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
|
||||||
|
@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");
|
||||||
|
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());
|
||||||
|
name_elmt.appendChild(xml_document.createTextNode(names_iterator.value()));
|
||||||
|
names_elmt.appendChild(name_elmt);
|
||||||
|
}
|
||||||
|
return(names_elmt);
|
||||||
|
}
|
||||||
31
nameslist.h
Normal file
31
nameslist.h
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#ifndef NAMES_LIST_H
|
||||||
|
#define NAMES_LIST_H
|
||||||
|
#include <QtXml>
|
||||||
|
class NamesList {
|
||||||
|
// constructeurs, destructeur
|
||||||
|
public:
|
||||||
|
NamesList();
|
||||||
|
NamesList(const NamesList &);
|
||||||
|
virtual ~NamesList();
|
||||||
|
|
||||||
|
// attributs
|
||||||
|
private:
|
||||||
|
QHash<QString, QString> hash_names;
|
||||||
|
|
||||||
|
// methodes
|
||||||
|
public:
|
||||||
|
// methodes relatives a la gestion de la liste
|
||||||
|
void addName(const QString &, const QString &);
|
||||||
|
void removeName(const QString &);
|
||||||
|
void clearNames();
|
||||||
|
QList<QString> langs() const;
|
||||||
|
bool isEmpty() const;
|
||||||
|
int count() const;
|
||||||
|
QString &operator[](const QString &);
|
||||||
|
const QString operator[](const QString &) const;
|
||||||
|
|
||||||
|
// methodes relatives a XML
|
||||||
|
void fromXml(const QDomElement &);
|
||||||
|
QDomElement toXml(QDomDocument &) const;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
@@ -42,7 +42,7 @@ void NamesListWidget::addLine() {
|
|||||||
*/
|
*/
|
||||||
bool NamesListWidget::checkOneName() {
|
bool NamesListWidget::checkOneName() {
|
||||||
updateHash();
|
updateHash();
|
||||||
if (!hash_names.size()) {
|
if (!hash_names.count()) {
|
||||||
QMessageBox::critical(
|
QMessageBox::critical(
|
||||||
this,
|
this,
|
||||||
tr("La cat\351gorie doit avoir au moins un nom."),
|
tr("La cat\351gorie doit avoir au moins un nom."),
|
||||||
@@ -57,12 +57,12 @@ bool NamesListWidget::checkOneName() {
|
|||||||
Lit les noms valides dans hash_names
|
Lit les noms valides dans hash_names
|
||||||
*/
|
*/
|
||||||
void NamesListWidget::updateHash() {
|
void NamesListWidget::updateHash() {
|
||||||
hash_names.clear();
|
hash_names.clearNames();
|
||||||
int names_count = tree_names -> topLevelItemCount();
|
int names_count = tree_names -> topLevelItemCount();
|
||||||
for (int i = 0 ; i < names_count ; ++ i) {
|
for (int i = 0 ; i < names_count ; ++ i) {
|
||||||
QString lang = tree_names -> topLevelItem(i) -> text(0);
|
QString lang = tree_names -> topLevelItem(i) -> text(0);
|
||||||
QString value = tree_names -> topLevelItem(i) -> text(1);
|
QString value = tree_names -> topLevelItem(i) -> text(1);
|
||||||
if (lang != "" && value != "") hash_names.insert(lang, value);
|
hash_names.addName(lang, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,19 +84,14 @@ void NamesListWidget::clean() {
|
|||||||
/**
|
/**
|
||||||
@return Les noms entres dans la Names List
|
@return Les noms entres dans la Names List
|
||||||
*/
|
*/
|
||||||
QHash<QString, QString> NamesListWidget::names() {
|
NamesList NamesListWidget::names() {
|
||||||
updateHash();
|
updateHash();
|
||||||
return(hash_names);
|
return(hash_names);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
void NamesListWidget::setNames(const NamesList &provided_names) {
|
||||||
Specifie les noms que la liste doit afficher
|
foreach(QString lang, provided_names.langs()) {
|
||||||
@param provided_names Hash des noms a afficher
|
|
||||||
*/
|
|
||||||
void NamesListWidget::setNames(QHash<QString, QString> &provided_names) {
|
|
||||||
foreach(QString lang, provided_names.keys()) {
|
|
||||||
QString value = provided_names[lang];
|
QString value = provided_names[lang];
|
||||||
if (lang == "" || value == "") continue;
|
|
||||||
QStringList values;
|
QStringList values;
|
||||||
values << lang << value;
|
values << lang << value;
|
||||||
QTreeWidgetItem *qtwi = new QTreeWidgetItem(values);
|
QTreeWidgetItem *qtwi = new QTreeWidgetItem(values);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#ifndef NAMES_LIST_WIDGET_H
|
#ifndef NAMES_LIST_WIDGET_H
|
||||||
#define NAMES_LIST_WIDGET_H
|
#define NAMES_LIST_WIDGET_H
|
||||||
#include <QtGui>
|
#include <QtGui>
|
||||||
|
#include "nameslist.h"
|
||||||
/**
|
/**
|
||||||
Cette classe represente une interface permettant de saisir les noms des
|
Cette classe represente une interface permettant de saisir les noms des
|
||||||
categories et elements.
|
categories et elements.
|
||||||
@@ -20,13 +21,13 @@ class NamesListWidget : public QWidget {
|
|||||||
private:
|
private:
|
||||||
QTreeWidget *tree_names;
|
QTreeWidget *tree_names;
|
||||||
QPushButton *button_add_line;
|
QPushButton *button_add_line;
|
||||||
QHash<QString, QString> hash_names;
|
NamesList hash_names;
|
||||||
|
|
||||||
// methodes
|
// methodes
|
||||||
public:
|
public:
|
||||||
bool checkOneName();
|
bool checkOneName();
|
||||||
QHash<QString, QString> names();
|
NamesList names();
|
||||||
void setNames(QHash<QString, QString> &);
|
void setNames(const NamesList &);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void clean();
|
void clean();
|
||||||
|
|||||||
@@ -175,8 +175,8 @@ void NewElementWizard::buildStep3() {
|
|||||||
explication -> setWordWrap(true);
|
explication -> setWordWrap(true);
|
||||||
step3_layout -> addWidget(explication);
|
step3_layout -> addWidget(explication);
|
||||||
element_names = new NamesListWidget();
|
element_names = new NamesListWidget();
|
||||||
QHash<QString, QString> hash_name;
|
NamesList hash_name;
|
||||||
hash_name.insert(QLocale::system().name().left(2), tr("Nom du nouvel \351l\351ment"));
|
hash_name.addName(QLocale::system().name().left(2), tr("Nom du nouvel \351l\351ment"));
|
||||||
element_names -> setNames(hash_name);
|
element_names -> setNames(hash_name);
|
||||||
step3_layout -> addWidget(element_names);
|
step3_layout -> addWidget(element_names);
|
||||||
step3 -> setLayout(step3_layout);
|
step3 -> setLayout(step3_layout);
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ HEADERS += aboutqet.h \
|
|||||||
elementtextitem.h \
|
elementtextitem.h \
|
||||||
exportdialog.h \
|
exportdialog.h \
|
||||||
fixedelement.h \
|
fixedelement.h \
|
||||||
|
nameslist.h \
|
||||||
nameslistwidget.h \
|
nameslistwidget.h \
|
||||||
newelementwizard.h \
|
newelementwizard.h \
|
||||||
qetapp.h \
|
qetapp.h \
|
||||||
@@ -47,6 +48,7 @@ SOURCES += aboutqet.cpp \
|
|||||||
exportdialog.cpp \
|
exportdialog.cpp \
|
||||||
fixedelement.cpp \
|
fixedelement.cpp \
|
||||||
main.cpp \
|
main.cpp \
|
||||||
|
nameslist.cpp \
|
||||||
nameslistwidget.cpp \
|
nameslistwidget.cpp \
|
||||||
newelementwizard.cpp \
|
newelementwizard.cpp \
|
||||||
qetapp.cpp \
|
qetapp.cpp \
|
||||||
|
|||||||
Reference in New Issue
Block a user