2007-04-05 01:13:14 +00:00
|
|
|
#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;
|
|
|
|
|
2007-04-13 15:48:00 +00:00
|
|
|
category_names.fromXml(root);
|
2007-04-05 01:13:14 +00:00
|
|
|
|
|
|
|
// 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
|
|
|
|
*/
|
2007-04-13 15:48:00 +00:00
|
|
|
NamesList ElementsCategory::categoryNames() const {
|
2007-04-05 01:13:14 +00:00
|
|
|
return(category_names);
|
|
|
|
}
|
|
|
|
|
2007-04-09 02:56:47 +00:00
|
|
|
/**
|
|
|
|
Vide la liste des noms de la categorie
|
|
|
|
*/
|
2007-04-05 01:13:14 +00:00
|
|
|
void ElementsCategory::clearNames() {
|
2007-04-13 15:48:00 +00:00
|
|
|
category_names.clearNames();
|
2007-04-05 01:13:14 +00:00
|
|
|
}
|
|
|
|
|
2007-04-09 02:56:47 +00:00
|
|
|
/**
|
|
|
|
Ajoute un nom a la categorie.
|
|
|
|
Si la langue existe deja, le nom pour cette langue est remplace.
|
|
|
|
@param lang La langue pour laquelle le nom est utilisable
|
|
|
|
@param value Le nom
|
|
|
|
*/
|
2007-04-05 01:13:14 +00:00
|
|
|
void ElementsCategory::addName(const QString &lang, const QString &value) {
|
2007-04-13 15:48:00 +00:00
|
|
|
category_names.addName(lang, value);
|
2007-04-05 01:13:14 +00:00
|
|
|
}
|
|
|
|
|
2007-04-09 02:56:47 +00:00
|
|
|
/**
|
|
|
|
Cree la categorie
|
|
|
|
@return true si la creation a reussi, false sinon
|
|
|
|
*/
|
2007-04-05 01:13:14 +00:00
|
|
|
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);
|
2007-04-13 15:48:00 +00:00
|
|
|
root.appendChild(category_names.toXml(document));
|
2007-04-05 01:13:14 +00:00
|
|
|
|
|
|
|
// 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()));
|
|
|
|
}
|
|
|
|
|