mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-19 06:20:53 +01:00
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@78 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
157
elementscategory.cpp
Normal file
157
elementscategory.cpp
Normal file
@@ -0,0 +1,157 @@
|
||||
#include "elementscategory.h"
|
||||
#include <QtXml>
|
||||
|
||||
/**
|
||||
Constructeur
|
||||
@param path Chemin du dossier de la categorie
|
||||
*/
|
||||
ElementsCategory::ElementsCategory(const QString &path) : QDir(path) {
|
||||
if (path != QString()) loadNames();
|
||||
}
|
||||
|
||||
/**
|
||||
Destructeur
|
||||
*/
|
||||
ElementsCategory::~ElementsCategory() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
Supprime un repertoire recursivement.
|
||||
@return true si la suppression a reussie, false sinon
|
||||
*/
|
||||
bool ElementsCategory::rmdir(const QString &path) const {
|
||||
QDir directory(path);
|
||||
|
||||
// supprime les dossiers, recursivement
|
||||
foreach (QString file, directory.entryList(QDir::AllDirs | QDir::NoDotAndDotDot)) {
|
||||
if (!rmdir(directory.absolutePath() + "/" + file)) return(false);
|
||||
}
|
||||
|
||||
// supprime les fichiers
|
||||
foreach (QString file, directory.entryList(QDir::Files | QDir::NoDotAndDotDot)) {
|
||||
if (!directory.remove(file)) return(false);
|
||||
}
|
||||
|
||||
// supprime le dossier lui-meme
|
||||
return(directory.rmdir(path));
|
||||
}
|
||||
|
||||
/**
|
||||
Charge la liste des noms possibles pour la categorie
|
||||
*/
|
||||
void ElementsCategory::loadNames() {
|
||||
// repere le chemin du fichier de configuration de la categorie
|
||||
QFile directory_conf(canonicalPath() + "/qet_directory");
|
||||
|
||||
// verifie l'existence du fichier
|
||||
if (!directory_conf.exists()) return;
|
||||
|
||||
// ouvre le fichier
|
||||
if (!directory_conf.open(QIODevice::ReadOnly | QIODevice::Text)) return;
|
||||
|
||||
// lit le contenu du fichier dans un QDomDocument XML
|
||||
QDomDocument document;
|
||||
if (!document.setContent(&directory_conf)) return;
|
||||
|
||||
// verifie la racine
|
||||
QDomElement root = document.documentElement();
|
||||
if (root.tagName() != "qet-directory") return;
|
||||
|
||||
// parcourt les "names"
|
||||
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
|
||||
directory_conf.close();
|
||||
}
|
||||
|
||||
/**
|
||||
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 La liste des differents noms possibles pour la categorie
|
||||
*/
|
||||
QHash<QString, QString> ElementsCategory::categoryNames() const {
|
||||
return(category_names);
|
||||
}
|
||||
|
||||
void ElementsCategory::clearNames() {
|
||||
category_names.clear();
|
||||
}
|
||||
|
||||
void ElementsCategory::addName(const QString &lang, const QString &value) {
|
||||
category_names.insert(lang, value);
|
||||
}
|
||||
|
||||
bool ElementsCategory::write() const {
|
||||
|
||||
// cree le dossier de la categorie
|
||||
if (!mkpath(path())) return(false);
|
||||
|
||||
// prepare la structure XML
|
||||
QDomDocument document;
|
||||
QDomElement root = document.createElement("qet-directory");
|
||||
document.appendChild(root);
|
||||
QDomElement names = document.createElement("names");
|
||||
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
|
||||
QFile directory_conf(canonicalPath() + "/qet_directory");
|
||||
|
||||
// ouvre le fichier
|
||||
if (!directory_conf.open(QIODevice::Text | QIODevice::WriteOnly)) return(false);
|
||||
|
||||
// ecrit le fichier
|
||||
QTextStream out(&directory_conf);
|
||||
out.setCodec("UTF-8");
|
||||
out << document.toString(4);
|
||||
|
||||
// ferme le fichier
|
||||
directory_conf.close();
|
||||
|
||||
return(true);
|
||||
}
|
||||
|
||||
/**
|
||||
Supprime la categorie
|
||||
@return true si la suppression a reussie, false sinon
|
||||
*/
|
||||
bool ElementsCategory::remove() const {
|
||||
return(rmdir(absolutePath()));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user