diff --git a/sources/elementscategorieswidget.cpp b/sources/elementscategorieswidget.cpp deleted file mode 100644 index c9122ab18..000000000 --- a/sources/elementscategorieswidget.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/* - Copyright 2006-2016 The QElectroTech Team - This file is part of QElectroTech. - - QElectroTech is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - QElectroTech is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with QElectroTech. If not, see . -*/ -#include "elementscategorieswidget.h" -#include "elementscategorieslist.h" -#include "elementscategoryeditor.h" -#include "elementscategorydeleter.h" -#include "elementscategory.h" -#include "qeticons.h" - -/** - Constructeur - @param parent Le QWidget parent -*/ -ElementsCategoriesWidget::ElementsCategoriesWidget(QWidget *parent) : QWidget(parent) { - // initialise la liste des categories - elementscategorieslist = new ElementsCategoriesList(false, QET::All, this); - - // actions - action_reload = new QAction(QET::Icons::ViewRefresh, tr("Recharger les catégories"), this); - action_new = new QAction(QET::Icons::FolderNew, tr("Nouvelle catégorie"), this); - action_open = new QAction(QET::Icons::FolderEdit, tr("Éditer la catégorie"), this); - action_delete = new QAction(QET::Icons::FolderDelete, tr("Supprimer la catégorie"), this); - - // initialise la barre d'outils - toolbar = new QToolBar(this); - toolbar -> setMovable(false); - toolbar -> addAction(action_reload); - toolbar -> addAction(action_new); - toolbar -> addAction(action_open); - toolbar -> addAction(action_delete); - - connect(action_reload, SIGNAL(triggered()), elementscategorieslist, SLOT(reload()) ); - connect(action_new, SIGNAL(triggered()), this, SLOT(newCategory()) ); - connect(action_open, SIGNAL(triggered()), this, SLOT(editCategory()) ); - connect(action_delete, SIGNAL(triggered()), this, SLOT(removeCategory())); - connect(elementscategorieslist, SIGNAL(itemSelectionChanged()), this, SLOT(updateButtons()) ); - - updateButtons(); - - // disposition verticale - QVBoxLayout *vlayout = new QVBoxLayout(this); - vlayout -> setMargin(0); - vlayout -> setSpacing(0); - vlayout -> addWidget(toolbar); - vlayout -> addWidget(elementscategorieslist); - vlayout -> setStretchFactor(elementscategorieslist, 75000); - setLayout(vlayout); -} - -/** - Destructeur -*/ -ElementsCategoriesWidget::~ElementsCategoriesWidget() { -} - -/** - Lance un editeur de categorie en mode "creation de categorie" -*/ -void ElementsCategoriesWidget::newCategory() { - // recupere le chemin virtuel de la categorie selectionnee - ElementsLocation s_c_path = elementscategorieslist -> selectedLocation(); - if (s_c_path.isNull()) return; - - // lance un editeur de categorie - ElementsCategoryEditor *editor = new ElementsCategoryEditor(s_c_path, false, this); - int result = editor -> exec(); - - // recharge la collection si besoin - if (result == QDialog::Accepted) { - elementscategorieslist -> reload(); - } -} - -/** - Lance un editeur de categorie en mode "edition de categorie" -*/ -void ElementsCategoriesWidget::editCategory() { - ElementsLocation s_c_path = elementscategorieslist -> selectedLocation(); - if (s_c_path.isNull()) return; - (new ElementsCategoryEditor(s_c_path, true, this)) -> exec(); - elementscategorieslist -> reload(); -} - -/** - Supprime la categorie selectionnee -*/ -void ElementsCategoriesWidget::removeCategory() { - // recupere le chemin de la categorie - ElementsLocation s_c_path = elementscategorieslist -> selectedLocation(); - if (s_c_path.isNull()) return; - - // supprime la categorie - ElementsCategoryDeleter cat_deleter(s_c_path, this); - cat_deleter.exec(); - - // recharge la liste des categories - elementscategorieslist -> reload(); -} - -/** - Met a jour l'etat (active / desactive) des boutons en fonction de ce qui - est selectionne. -*/ -void ElementsCategoriesWidget::updateButtons() { - QList sel_items = elementscategorieslist -> selectedItems(); - bool sel_items_empty = !sel_items.isEmpty(); - bool is_top_lvl_item = sel_items_empty && (elementscategorieslist -> indexOfTopLevelItem(sel_items.at(0)) != -1); - action_new -> setEnabled(sel_items_empty); - action_open -> setEnabled(sel_items_empty && !is_top_lvl_item); - action_delete -> setEnabled(sel_items_empty && !is_top_lvl_item); -} diff --git a/sources/elementscategorieswidget.h b/sources/elementscategorieswidget.h deleted file mode 100644 index 72f5ded0f..000000000 --- a/sources/elementscategorieswidget.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - Copyright 2006-2016 The QElectroTech Team - This file is part of QElectroTech. - - QElectroTech is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - QElectroTech is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with QElectroTech. If not, see . -*/ -#ifndef ELEMENTS_CATEGORIES_WIDGET_H -#define ELEMENTS_CATEGORIES_WIDGET_H -#include -class ElementsCategoriesList; -/** - This class provides a widget listing available elements categories along - with buttons to add, change or create categories. -*/ -class ElementsCategoriesWidget : public QWidget { - Q_OBJECT - - // Constructors, destructor - public: - ElementsCategoriesWidget(QWidget * = 0); - virtual ~ElementsCategoriesWidget(); - - private: - ElementsCategoriesWidget(const ElementsCategoriesWidget &); - - // attributes - private: - ElementsCategoriesList *elementscategorieslist; - QToolBar *toolbar; - QAction *action_reload; - QAction *action_new; - QAction *action_open; - QAction *action_delete; - - // methods - public: - ElementsCategoriesList &elementsCategoriesList() const; - - public slots: - void newCategory(); - void editCategory(); - void removeCategory(); - void updateButtons(); -}; - -/** - @return The ElementsCategoriesList embedded within this widget. -*/ -inline ElementsCategoriesList &ElementsCategoriesWidget::elementsCategoriesList() const { - return(*elementscategorieslist); -} - -#endif diff --git a/sources/elementspanelwidget.cpp b/sources/elementspanelwidget.cpp index b47d32c1b..d41930b6b 100644 --- a/sources/elementspanelwidget.cpp +++ b/sources/elementspanelwidget.cpp @@ -17,7 +17,6 @@ */ #include "elementspanelwidget.h" #include "newelementwizard.h" -#include "elementscategorieswidget.h" #include "elementscollectionitem.h" #include "qetelementeditor.h" #include "elementdeleter.h" @@ -395,9 +394,6 @@ void ElementsPanelWidget::newCategory() { if (new_category_dialog.exec() == QDialog::Accepted) { elements_panel -> reload(); } - } else { - launchCategoriesManager(); - elements_panel -> reload(); } } @@ -472,31 +468,6 @@ void ElementsPanelWidget::setElementsActionEnabled(bool enable) { delete_element -> setEnabled(enable); } -/** - Lance le gestionnaire de categories. Il s'agit d'un petit dialogue listant - les categories accessibles en ecriture et permettant de les editer, de les - supprimer et d'en creer de nouvelles. -*/ -int ElementsPanelWidget::launchCategoriesManager() { - QDialog new_category_dialog(this); - new_category_dialog.setMinimumSize(480, 280); - new_category_dialog.setWindowTitle(tr("Gestionnaire de catégories", "window title")); - - QVBoxLayout *layout = new QVBoxLayout(&new_category_dialog); - QLabel *explication = new QLabel(tr("Vous pouvez utiliser ce gestionnaire pour ajouter, supprimer ou modifier les catégories.")); - explication -> setAlignment(Qt::AlignJustify | Qt::AlignVCenter); - explication -> setWordWrap(true); - layout -> addWidget(explication); - - layout -> addWidget(new ElementsCategoriesWidget()); - - QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Close); - connect(buttons, SIGNAL(rejected()), &new_category_dialog, SLOT(accept())); - layout -> addWidget(buttons); - - return(new_category_dialog.exec()); -} - /** Gere le menu contextuel du panel d'elements @param pos Position ou le menu contextuel a ete demande diff --git a/sources/elementspanelwidget.h b/sources/elementspanelwidget.h index e538d41dd..dfad4d494 100644 --- a/sources/elementspanelwidget.h +++ b/sources/elementspanelwidget.h @@ -96,7 +96,6 @@ class ElementsPanelWidget : public QWidget { void deleteElement(); void updateButtons(); void setElementsActionEnabled(bool); - int launchCategoriesManager(); void handleContextMenu(const QPoint &); void handleCollectionRequest(const ElementsLocation &); void collectionsRead(); diff --git a/sources/qetproject.h b/sources/qetproject.h index cfc4c64ac..9c1ebb5f0 100644 --- a/sources/qetproject.h +++ b/sources/qetproject.h @@ -30,7 +30,6 @@ class Diagram; class ElementsLocation; class QETResult; class TitleBlockTemplate; -class XmlElementsCollection; class MoveTitleBlockTemplatesHandler; class NumerotationContext; class QUndoStack; diff --git a/sources/xmlelementdefinition.cpp b/sources/xmlelementdefinition.cpp deleted file mode 100644 index 2586155cf..000000000 --- a/sources/xmlelementdefinition.cpp +++ /dev/null @@ -1,231 +0,0 @@ -/* - Copyright 2006-2016 The QElectroTech Team - This file is part of QElectroTech. - - QElectroTech is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - QElectroTech is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with QElectroTech. If not, see . -*/ -#include "xmlelementdefinition.h" -#include "xmlelementscategory.h" -#include "xmlelementscollection.h" -#include "qet.h" -#include "qetproject.h" - -/** - Construit une definition d'element vide -*/ -XmlElementDefinition::XmlElementDefinition(const QString &name, XmlElementsCategory *category, XmlElementsCollection *collection) : - ElementDefinition(category, collection), - parent_category_(category) -{ - name_ = name; - QDomElement new_elmt = xml_element_.createElement("element"); - new_elmt.setAttribute("name", name_); - xml_element_.appendChild(new_elmt); - element_definition_ = xml_element_.createElement("definition"); - new_elmt.appendChild(element_definition_); -} - -/** - Construit une definition d'element a partir de sa representation XML -*/ -XmlElementDefinition::XmlElementDefinition(const QDomElement &xml_element, XmlElementsCategory *category, XmlElementsCollection *collection) : - ElementDefinition(category, collection), - parent_category_(category) -{ - xml_element_.appendChild(xml_element_.importNode(xml_element, true)); - reload(); -} - -/** - Destructeur -*/ -XmlElementDefinition::~XmlElementDefinition() { -} - -/** - @return la definition XML de l'element -*/ -QDomElement XmlElementDefinition::xml() { - return(element_definition_); -} - -/** - Change la definition XML de l'element - @param xml_element Nouvelle definition XML de l'element - @return true si l'operation s'est bien passee, false sinon -*/ -bool XmlElementDefinition::setXml(const QDomElement &xml_element) { - // oublie toute la structure XML - xml_element_.clear(); - - // cree la structure XML contenant le nom de l'element - QDomElement new_elmt = xml_element_.createElement("element"); - new_elmt.setAttribute("name", name_); - xml_element_.appendChild(new_elmt); - - // importe la nouvelle definition XML de l'element - element_definition_ = xml_element_.importNode(xml_element, true).toElement(); - new_elmt.appendChild(element_definition_); - is_null_ = false; - return(true); -} - -bool XmlElementDefinition::write() { - /* - Contrairement a un schema, cet objet ne contient pas deux versions de - l'element (element avant edition et element edite) Cette methode ne - fait donc rien d'autre qu'emettre le signal written(), le travail ayant - deja ete fait par la methode setXml(). - */ - emit(written()); - return(true); -} - -/** - @return true si l'element n'est pas exploitable (definition ou nom non - trouve) -*/ -bool XmlElementDefinition::isNull() const { - return(name_.isEmpty() || is_null_); -} - -/** - @return Le nom de cet element dans l'arborescence -*/ -QString XmlElementDefinition::pathName() const { - return(name_); -} - -/** - @return le chemin virtuel de cet element -*/ -QString XmlElementDefinition::virtualPath() { - // il n'est pas possible d'avoir un chemin virtuel sans appartenir a une collection - if (!hasParentCollection() || name_.isEmpty()) return(QString()); - - if (parent_category_) { - QString tmp(parent_category_ -> virtualPath()); - if (!tmp.isEmpty()) tmp += "/"; - return(tmp + name_); - } else { - return(name_); - } -} - -/** - Recharge le contenu de l'element -*/ -void XmlElementDefinition::reload() { - is_null_ = true; - - // on recupere le nom de l'element - QDomElement doc_elmt = xml_element_.documentElement(); - name_ = doc_elmt.attribute("name"); - if (name_.isEmpty()) return; - - // on recupere la definition de l'element - for (QDomNode node = doc_elmt.firstChild() ; !node.isNull() ; node = node.nextSibling()) { - if (!node.isElement()) continue; - QDomElement current_element = node.toElement(); - if (current_element.tagName() == "definition" && current_element.attribute("type") == "element") { - element_definition_ = current_element; - break; - } - } - - // l'element est nul si aucune definition n'a ete trouvee - is_null_ = (element_definition_.isNull()); -} - -/** - @return true si l'element existe, false sinon -*/ -bool XmlElementDefinition::exists() { - // la seule raison qu'un element aurait de ne pas exister est l'absence - // de nom - return(!name_.isEmpty()); -} - -/** - @return true si la categorie est accessible en lecture, false sinon -*/ -bool XmlElementDefinition::isReadable() { - // une categorie XML n'a aucune raison de ne pas etre accessible en lecture - return(true); -} - -/** - @return true si la categorie est accessible en ecriture, false sinon -*/ -bool XmlElementDefinition::isWritable() { - // une categorie XML peut etre en lecture seule si le projet auquel elle - // appartient l'est - if (QETProject *parent_project = project()) { - return(!parent_project -> isReadOnly()); - } else { - return(true); - } -} - -/** - Supprime l'element - @return true si l'operation s'est bien passee, false sinon -*/ -bool XmlElementDefinition::remove() { - removeContent(); - emit(removed(name_)); - return(true); -} - -/** - @return toujours false, car un element XML n'a pas de chemin de type - fichier -*/ -bool XmlElementDefinition::hasFilePath() { - // une categorie XML n'a pas de chemin de type fichier - return(false); -} - -/** - @return une chaine vide, car un element XML n'a pas de chemin de type - fichier -*/ -QString XmlElementDefinition::filePath() { - // une categorie XML n'a pas de chemin de type fichier - return(QString()); -} - -/** - Ne fait rien, car un element XML n'a pas de chemin de type fichier -*/ -void XmlElementDefinition::setFilePath(const QString &) { - // une categorie XML n'a pas de chemin de type fichier -} - -/** - @return a null QDateTime object since an XML element does not have a - modification time. -*/ -/** - @return the time of the last modification (mtime) for this element file -*/ -QDateTime XmlElementDefinition::modificationTime() const { - return QDateTime(); -} - -QDomElement XmlElementDefinition::writeXml(QDomDocument &xml_doc) const { - QDomElement element_elmt = xml_element_.documentElement(); - QDomNode new_node = xml_doc.importNode(element_elmt, true); - return(new_node.toElement()); -} diff --git a/sources/xmlelementdefinition.h b/sources/xmlelementdefinition.h deleted file mode 100644 index 6aa127143..000000000 --- a/sources/xmlelementdefinition.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright 2006-2016 The QElectroTech Team - This file is part of QElectroTech. - - QElectroTech is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - QElectroTech is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with QElectroTech. If not, see . -*/ -#ifndef XML_ELEMENT_DEFINITION -#define XML_ELEMENT_DEFINITION -#include -#include "elementdefinition.h" -class XmlElementsCategory; -class XmlElementsCollection; -/** - This class represents an element definition stored within an XML document - (e.g. the embedded collection of a QET project). -*/ -class XmlElementDefinition : public ElementDefinition { - Q_OBJECT - - public: - XmlElementDefinition(const QString &, XmlElementsCategory * = 0, XmlElementsCollection * = 0); - XmlElementDefinition(const QDomElement &, XmlElementsCategory * = 0, XmlElementsCollection * = 0); - virtual ~XmlElementDefinition(); - - private: - XmlElementDefinition(const XmlElementDefinition &); - - // methods - public: - virtual QDomElement xml(); - virtual bool setXml(const QDomElement &); - virtual bool write(); - virtual bool isNull() const; - virtual QString pathName() const; - virtual QString virtualPath(); - virtual void reload(); - virtual bool exists(); - virtual bool isReadable(); - virtual bool isWritable(); - virtual bool remove(); - virtual bool hasFilePath(); - virtual QString filePath(); - virtual void setFilePath(const QString &); - virtual QDateTime modificationTime() const; - virtual QDomElement writeXml(QDomDocument &) const; - - signals: - void written(); - void removed(const QString &); - - // attributes - private: - bool is_null_; - QString name_; - XmlElementsCategory *parent_category_; - QDomDocument xml_element_; - QDomElement element_definition_; -}; -#endif diff --git a/sources/xmlelementscategory.cpp b/sources/xmlelementscategory.cpp deleted file mode 100644 index 80896fd7e..000000000 --- a/sources/xmlelementscategory.cpp +++ /dev/null @@ -1,487 +0,0 @@ -/* - Copyright 2006-2016 The QElectroTech Team - This file is part of QElectroTech. - - QElectroTech is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - QElectroTech is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with QElectroTech. If not, see . -*/ -#include "xmlelementscategory.h" -#include "xmlelementscollection.h" -#include "xmlelementdefinition.h" -#include "qetproject.h" - -/** - Cree une categorie XML vide - @param parent Categorie parente - @param collection Collection a laquelle cette categorie appartient -*/ -XmlElementsCategory::XmlElementsCategory(XmlElementsCategory *parent, XmlElementsCollection *collection) : - ElementsCategory(parent, collection), - xml_parent_collection_(collection), - xml_parent_category_(parent) -{ -} - -/** - Cree une categorie XML a partir d'un element XML - @param xml_element Element XML a analyser - @param parent Categorie parente - @param collection Collection a laquelle cette categorie appartient -*/ -XmlElementsCategory::XmlElementsCategory(const QDomElement &xml_element, XmlElementsCategory *parent, XmlElementsCollection *collection) : - ElementsCategory(parent, collection), - xml_parent_collection_(collection), - xml_parent_category_(parent) -{ - loadContent(xml_element); -} - -/** - Destructeur -*/ -XmlElementsCategory::~XmlElementsCategory() { - deleteContent(); -} - -/** - @return le nom de la categorie utilisable dans un chemin (virtuel ou reel) -*/ -QString XmlElementsCategory::pathName() const { - return(name_); -} - -/** - @return le chemin virtuel de la categorie, sans le protocole -*/ -QString XmlElementsCategory::virtualPath() { - // il n'est pas possible d'avoir un chemin virtuel sans appartenir a une collection - if (!hasParentCollection() || name_.isEmpty()) return(QString()); - - if (parent_category_) { - QString tmp(parent_category_ -> virtualPath()); - if (!tmp.isEmpty()) tmp += "/"; - return(tmp + name_); - } else { - return(name_); - } -} - -/** - @return toujours false, car une categorie XML n'a pas de chemin de type - fichier -*/ -bool XmlElementsCategory::hasFilePath() { - // une categorie XML n'a pas de chemin de type fichier - return(false); -} - -/** - @return une chaine vide, car une categorie XML n'a pas de chemin de type - fichier -*/ -QString XmlElementsCategory::filePath() { - // une categorie XML n'a pas de chemin de type fichier - return(QString()); -} - -/** - Ne fait rien, car une categorie XML n'a pas de chemin de type fichier -*/ -void XmlElementsCategory::setFilePath(const QString &) { - // une categorie XML n'a pas de chemin de type fichier -} - -/** - @return la liste des sous-categories de la categorie -*/ -QList XmlElementsCategory::categories() { - QList cat_list; - - QList keys(categories_.keys()); - qSort(keys.begin(), keys.end()); - foreach(QString key, keys) cat_list << categories_[key]; - return(cat_list); -} - -/** - @return la categorie correspondant au chemin virtuel cat_path, ou 0 en cas d'echec - @param cat_path Chemin virtuel de la categorie voulue -*/ -ElementsCategory *XmlElementsCategory::category(const QString &cat_path) { - // recupere les differentes parties du chemin - QString cat_path_(cat_path); - QStringList path_parts = cat_path_.split(QChar('/'), QString::SkipEmptyParts, Qt::CaseInsensitive); - - if (!path_parts.count()) { - return(this); - } else { - // a-t-on la premiere sous-categorie ? - if (!categories_.contains(path_parts.first())) { - return(0); - } - - // on a la premiere sous-categorie - ElementsCategory *first_sub_cat = categories_.value(path_parts.first()); - - if (path_parts.count() == 1) return(first_sub_cat); - - // on demande a la premiere sous-categorie de fournir la categorie finale - path_parts.removeFirst(); - return(first_sub_cat -> category(path_parts.join("/"))); - } -} - -/** - Cree une categorie. La categorie parente doit exister. - @param path chemin d'une categorie a creer sous la forme d'une adresse - virtuelle comme common://cat1/cat2/cat3 - @return la nouvelle categorie demandee, ou 0 en cas d'echec -*/ -ElementsCategory *XmlElementsCategory::createCategory(const QString &path) { - // on ne doit pas etre en lecture seule - if (!isWritable()) return(0); - - // recupere les differentes parties du chemin - QString cat_path_(path); - QStringList path_parts = cat_path_.split(QChar('/'), QString::SkipEmptyParts, Qt::CaseInsensitive); - - if (!path_parts.count()) { - // le chemin est vide, on renvoie 0 - return(0); - } else if (path_parts.count() == 1) { - // il n'y a plus qu'une categorie dans le chemin : il faut la creer ici - - // on verifie si la categorie n'existe pas deja - if (categories_.contains(path_parts[0])) { - return(categories_.value(path_parts[0])); - } - - // on cree un objet - XmlElementsCategory *new_category = new XmlElementsCategory( - this, - xml_parent_collection_ - ); - new_category -> name_ = path_parts[0]; - - // on l'integre dans la liste des sous-categories connues - categories_.insert(path_parts[0], new_category); - connect(new_category, SIGNAL(written()), this, SLOT(componentWritten())); - connect(new_category, SIGNAL(removed(const QString &)), this, SLOT(componentRemoved(const QString &))); - - // on le renvoie - return(new_category); - } else { - // il y a plusieurs categories dans le chemin : - // on delegue le travail a la premiere sous-categorie - - // a-t-on la premiere sous-categorie ? - if (!categories_.contains(path_parts.first())) { - return(0); - } - - // on a la premiere sous-categorie - ElementsCategory *first_sub_cat = categories_.value(path_parts.first()); - - // on demande a la premiere sous-categorie de fournir la categorie finale - path_parts.removeFirst(); - return(first_sub_cat -> category(path_parts.join("/"))); - } -} - -/** - @return la liste des elements de la categorie -*/ -QList XmlElementsCategory::elements() { - QList elmt_list; - - QList keys(elements_.keys()); - qSort(keys.begin(), keys.end()); - foreach(QString key, keys) elmt_list << elements_[key]; - return(elmt_list); -} - -/** - @return l'element correspondant au chemin virtuel elmt_path, ou 0 en cas d'echec - @param elmt_path Chemin virtuel de l'element voulu -*/ -ElementDefinition *XmlElementsCategory::element(const QString &elmt_path) { - // recupere les differentes parties du chemin - QString elmt_path_(elmt_path); - QStringList path_parts = elmt_path_.split(QChar('/'), QString::SkipEmptyParts, Qt::CaseInsensitive); - - if (!path_parts.count()) { - // chemin vide - return(0); - } else if (path_parts.count() == 1) { - // seulement le nom de fichier - QString element_filename = path_parts.takeLast(); - if (!elements_.contains(element_filename)) { - return(0); - } else { - return(elements_.value(element_filename)); - } - } else { - // separe le nom de fichier du chemin de la categorie et recupere celle-ci - QString element_filename = path_parts.takeLast(); - ElementsCategory *elmt_cat = category(path_parts.join("/")); - if (!elmt_cat) { - return(0); - } else { - return(elmt_cat -> element(element_filename)); - } - } -} - -/** - Cree un element. La categorie parente doit exister. - @param path chemin d'un element a creer sous la forme d'une adresse - virtuelle comme common://cat1/cat2/cat3/dog.elmt - @return le nouvel element demande, ou 0 en cas d'echec -*/ -ElementDefinition *XmlElementsCategory::createElement(const QString &path) { - // on ne doit pas etre en lecture seule - if (!isWritable()) return(0); - - // recupere les differentes parties du chemin - QString cat_path_(path); - QStringList path_parts = cat_path_.split(QChar('/'), QString::SkipEmptyParts, Qt::CaseInsensitive); - - if (!path_parts.count()) { - // le chemin est vide, on renvoie 0 - return(0); - } else if (path_parts.count() == 1) { - // il n'y a plus que l'element dans le chemin : il faut le creer ici - - // on verifie si l'element n'existe pas deja - if (elements_.contains(path_parts[0])) { - return(elements_.value(path_parts[0])); - } - - // on cree un objet - XmlElementDefinition *new_element = new XmlElementDefinition( - path_parts[0], - this, - xml_parent_collection_ - ); - - // on l'integre dans la liste des elements connus - elements_.insert(path_parts[0], new_element); - connect(new_element, SIGNAL(written()), this, SLOT(componentWritten())); - connect(new_element, SIGNAL(removed(const QString &)), this, SLOT(componentRemoved(const QString &))); - - // on le renvoie - return(new_element); - } else { - // il y a plusieurs categories dans le chemin : - // on delegue le travail a la premiere sous-categorie - - // a-t-on la premiere sous-categorie ? - if (!categories_.contains(path_parts.first())) { - return(0); - } - - // on a la premiere sous-categorie - ElementsCategory *first_sub_cat = categories_.value(path_parts.first()); - - // on demande a la premiere sous-categorie de fournir la categorie finale - path_parts.removeFirst(); - return(first_sub_cat -> createElement(path_parts.join("/"))); - } -} - -/** - @return true si la categorie existe, false sinon -*/ -bool XmlElementsCategory::exists() { - // la seule raison qu'une categorie aurait de ne pas exister est l'absence - // de nom - return(!name_.isEmpty()); -} - -/** - @return true si la categorie est accessible en lecture, false sinon -*/ -bool XmlElementsCategory::isReadable() { - // une categorie XML n'a aucune raison de ne pas etre accessible en lecture - return(true); -} - -/** - @return true si la categorie est accessible en ecriture, false sinon -*/ -bool XmlElementsCategory::isWritable() { - // une categorie XML peut etre en lecture seule si le projet auquel elle - // appartient l'est - if (QETProject *parent_project = project()) { - return(!parent_project -> isReadOnly()); - } else { - return(true); - } -} - -/** - Cette methode ne fait rien. Recharger une categorie XML n'a pas vraiment de - sens. -*/ -void XmlElementsCategory::reload() { -} - -/** - Supprime la categorie et son contenu -*/ -bool XmlElementsCategory::remove() { - removeContent(); - emit(removed(name_)); - write(); - return(true); -} - -/** - Supprime le contenu de la categorie sans supprimer la categorie elle-meme. -*/ -bool XmlElementsCategory::removeContent() { - // suppression des sous-categories - foreach(QString cat_name, categories_.keys()) { - ElementsCategory *cat = categories_.value(cat_name); - if (cat -> remove()) { - categories_.take(cat_name); - delete cat; - } else { - return(false); - } - } - - // suppression des elements - foreach(QString elmt_name, elements_.keys()) { - ElementDefinition *elmt = elements_.value(elmt_name); - if (elmt -> remove()) { - elements_.take(elmt_name); - delete elmt; - } else { - return(false); - } - } - write(); - return(true); -} - -/** - Ecrit la categorie. - Comme il s'agit d'une categorie embarquee, cette methode emet simplement le - signal written pour indiquer qu'il faut enregistrer la collection / le - projet. -*/ -bool XmlElementsCategory::write() { - // indique que la categorie a ete changee - emit(written()); - return(true); -} - -/** - @return un Element XML decrivant la categorie et son contenu - @param xml_doc Document XML a utiliser pour creer l'element XML -*/ -QDomElement XmlElementsCategory::writeXml(QDomDocument &xml_doc) const { - QDomElement category_elmt = xml_doc.createElement("category"); - if (!isRootCategory()) { - category_elmt.setAttribute("name", name_); - category_elmt.appendChild(category_names.toXml(xml_doc)); - } - - foreach(XmlElementsCategory *subcat, categories_) { - category_elmt.appendChild(subcat -> writeXml(xml_doc)); - } - - foreach(XmlElementDefinition *elmt, elements_) { - category_elmt.appendChild(elmt -> writeXml(xml_doc)); - } - - return(category_elmt); -} - -/** - Gere le fait qu'une sous-categorie ou un element ait ete enregistre -*/ -void XmlElementsCategory::componentWritten() { - write(); -} - -/** - Gere le fait qu'une sous-categorie ou un element ait ete supprime - @param path Chemin de l'element ou de la categorie supprime(e) -*/ -void XmlElementsCategory::componentRemoved(const QString &path) { - if (elements_.contains(path)) { - elements_.remove(path); - write(); - } else if (categories_.contains(path)) { - categories_.remove(path); - write(); - } -} - -/** - Supprime le contenu de la categorie en memoire -*/ -void XmlElementsCategory::deleteContent() { - // suppression des elements - foreach(QString elmt_name, elements_.keys()) { - XmlElementDefinition *elmt = elements_.take(elmt_name); - delete elmt; - } - - // suppression des categories - foreach(QString cat_name, categories_.keys()) { - XmlElementsCategory *cat = categories_.take(cat_name); - delete cat; - } -} - -/** - Charge dans cet objet le contenu de la categorie a partir d'un element XML. - @param xml_element element XML a analyser -*/ -void XmlElementsCategory::loadContent(const QDomElement &xml_element) { - deleteContent(); - name_.clear(); - category_names.clearNames(); - - // charge le nom de la categorie pour son chemin virtuel - name_ = xml_element.attribute("name"); - - // charge les noms affiches de la categorie - category_names.fromXml(xml_element); - - // charge les categories et elements - QDomElement current_element; - for (QDomNode node = xml_element.firstChild() ; !node.isNull() ; node = node.nextSibling()) { - if (!node.isElement()) continue; - current_element = node.toElement(); - - // les sous-categories et elements sans nom sont ignores - if (!current_element.hasAttribute("name")) continue; - - if (current_element.tagName() == "category") { - XmlElementsCategory *new_category = new XmlElementsCategory(current_element, this, xml_parent_collection_); - categories_.insert(current_element.attribute("name"), new_category); - connect(new_category, SIGNAL(written()), this, SLOT(componentWritten())); - connect(new_category, SIGNAL(removed(const QString &)), this, SLOT(componentRemoved(const QString &))); - } else if (current_element.tagName() == "element") { - - XmlElementDefinition *new_element = new XmlElementDefinition(current_element, this, xml_parent_collection_); - elements_.insert(current_element.attribute("name"), new_element); - connect(new_element, SIGNAL(written()), this, SLOT(componentWritten())); - connect(new_element, SIGNAL(removed(const QString &)), this, SLOT(componentRemoved(const QString &))); - } - } -} diff --git a/sources/xmlelementscategory.h b/sources/xmlelementscategory.h deleted file mode 100644 index fc596e868..000000000 --- a/sources/xmlelementscategory.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - Copyright 2006-2016 The QElectroTech Team - This file is part of QElectroTech. - - QElectroTech is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - QElectroTech is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with QElectroTech. If not, see . -*/ -#ifndef XML_ELEMENTS_CATEGORY -#define XML_ELEMENTS_CATEGORY -#include -#include "elementscategory.h" -class XmlElementsCollection; -class XmlElementDefinition; -/** - This class represents an elements category stored within an XML document - (e.g. the embedded collection of a QET project). -*/ -class XmlElementsCategory : public ElementsCategory { - Q_OBJECT - - // constructors, destructor - public: - XmlElementsCategory(XmlElementsCategory * = 0, XmlElementsCollection * = 0); - XmlElementsCategory(const QDomElement &, XmlElementsCategory * = 0, XmlElementsCollection * = 0); - virtual ~XmlElementsCategory(); - - private: - XmlElementsCategory(const XmlElementsCategory &); - - // methods - public: - virtual QString pathName() const; - virtual QString virtualPath(); - - virtual QString filePath(); - virtual bool hasFilePath(); - virtual void setFilePath(const QString &); - - virtual QList categories(); - virtual ElementsCategory *category(const QString &); - virtual ElementsCategory *createCategory(const QString &); - - virtual QList elements(); - virtual ElementDefinition *element(const QString &); - virtual ElementDefinition *createElement(const QString &); - - virtual bool exists(); - virtual bool isReadable(); - virtual bool isWritable(); - - virtual void reload(); - virtual bool remove(); - virtual bool removeContent(); - virtual bool write(); - - virtual QDomElement writeXml(QDomDocument &) const; - - public slots: - void componentWritten(); - void componentRemoved(const QString &path); - - signals: - void written(); - void removed(const QString &); - - private: - void deleteContent(); - void loadContent(const QDomElement &); - - // attributes - protected: - /// Parent collection - XmlElementsCollection *xml_parent_collection_; - /// Parent category - XmlElementsCategory *xml_parent_category_; - /// Child categories - QHash categories_; - /// Child elements - QHash elements_; - /// Nae of this category within the tree - QString name_; -}; -#endif diff --git a/sources/xmlelementscollection.cpp b/sources/xmlelementscollection.cpp deleted file mode 100644 index deda48c73..000000000 --- a/sources/xmlelementscollection.cpp +++ /dev/null @@ -1,173 +0,0 @@ -/* - Copyright 2006-2016 The QElectroTech Team - This file is part of QElectroTech. - - QElectroTech is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - QElectroTech is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with QElectroTech. If not, see . -*/ -#include "xmlelementscollection.h" -#include "xmlelementscategory.h" -#include "qetproject.h" -#include "qetapp.h" - -/** - Construit une collection vide - @param parent Item parent -*/ -XmlElementsCollection::XmlElementsCollection(ElementsCollectionItem *parent) : - ElementsCollection(parent) -{ - protocol_ = "unknown"; - project_ = 0; - // cree une categorie racine vide - root = new XmlElementsCategory(0, this); - connect(root, SIGNAL(written()), this, SLOT(componentWritten())); -} - -/** - Construit une collection a partir d'un element XML suppose la decrire - @param xml_element Element XML decrivant la collection - @param parent Item parent -*/ -XmlElementsCollection::XmlElementsCollection(const QDomElement &xml_element, ElementsCollectionItem *parent) : - ElementsCollection(parent) -{ - protocol_ = "unknown"; - project_ = 0; - // cree sa categorie racine a partir de l'element XML - root = new XmlElementsCategory(xml_element, 0, this); - connect(root, SIGNAL(written()), this, SLOT(componentWritten())); -} - -/** - Destructeur -*/ -XmlElementsCollection::~XmlElementsCollection() { - deleteContent(); -} - -QString XmlElementsCollection::title() const { - if (!title_.isEmpty()) return(title_); - - // if the title attribute is empty, we generate a suitable one using the - // parent project - QString final_title; - if (project_) { - QString project_title = project_ -> title(); - if (project_title.isEmpty()) { - final_title = QString( - tr( - "Collection du projet sans titre (id %1)", - "Elements collection title when the parent project has an empty title -- %1 is the project internal id" - ) - ); - final_title = final_title.arg(QETApp::projectId(project_)); - } else { - final_title = QString( - tr( - "Collection du projet \"%1\"", - "Elements collection title when the project has a suitable title -- %1 is the project title" - ) - ); - final_title = final_title.arg(project_title); - } - } - return(final_title); -} - -ElementsCategory *XmlElementsCollection::rootCategory() { - return(root); -} - -/** - @return toujours false ; une collection XML n'est representee nul part sur - le systeme de fichiers. -*/ -bool XmlElementsCollection::hasFilePath() { - return(false); -} - -/** - @return le chemin du repertoire representant cette collection -*/ -QString XmlElementsCollection::filePath() { - return(QString()); -} - -/** - Ne fait rien - une collection XML n'est representee nul part sur le systeme - de fichiers. -*/ -void XmlElementsCollection::setFilePath(const QString &) { -} - -void XmlElementsCollection::reload() { - if (root) root -> reload(); -} - -/** - @return toujours true -*/ -bool XmlElementsCollection::exists() { - return(true); -} - -/** - @return true si la collection est accessible en lecture -*/ -bool XmlElementsCollection::isReadable() { - // une collection XML n'a aucune raison de ne pas etre accessible en lecture - return(true); -} - -bool XmlElementsCollection::isWritable() { - // une collection XML peut etre en lecture seule si le projet auquel elle - // appartient l'est - if (QETProject *parent_project = project()) { - return(!parent_project -> isReadOnly()); - } else { - return(true); - } -} - -bool XmlElementsCollection::write() { - emit(written()); - return(true); -} - -/** - @return always false, since an XMl-based elements collection should never - be cached. -*/ -bool XmlElementsCollection::isCacheable() const { - return(false); -} - -QDomElement XmlElementsCollection::writeXml(QDomDocument &xml_doc) const { - QDomElement collection_elmt = root -> writeXml(xml_doc); - collection_elmt.setTagName("collection"); - xml_doc.appendChild(collection_elmt); - return(collection_elmt); -} - -void XmlElementsCollection::componentWritten() { - write(); -} - -/** - Supprime le contenu en memoire de cette collection -*/ -void XmlElementsCollection::deleteContent() { - delete root; - root = 0; -} diff --git a/sources/xmlelementscollection.h b/sources/xmlelementscollection.h deleted file mode 100644 index a16b5da0a..000000000 --- a/sources/xmlelementscollection.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - Copyright 2006-2016 The QElectroTech Team - This file is part of QElectroTech. - - QElectroTech is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - QElectroTech is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with QElectroTech. If not, see . -*/ -#ifndef XML_ELEMENTS_COLLECTION -#define XML_ELEMENTS_COLLECTION -#include -#include "elementscollection.h" -class XmlElementsCategory; -/** - This class represents an elements collection stored within an XML document - (e.g. the embedded collection of a QET project). -*/ -class XmlElementsCollection : public ElementsCollection { - Q_OBJECT - public: - // constructors, destructor - XmlElementsCollection(ElementsCollectionItem * = 0); - XmlElementsCollection(const QDomElement &, ElementsCollectionItem * = 0); - virtual ~XmlElementsCollection(); - - private: - XmlElementsCollection(const XmlElementsCollection &); - - // methods - public: - virtual QString title() const; - virtual ElementsCategory *rootCategory(); - virtual bool hasFilePath(); - virtual QString filePath(); - virtual void setFilePath(const QString &); - virtual void reload(); - virtual bool exists(); - virtual bool isReadable(); - virtual bool isWritable(); - virtual bool write(); - virtual bool isCacheable() const; - - virtual QDomElement writeXml(QDomDocument &) const; - - public slots: - void componentWritten(); - - signals: - void written(); - - private: - void deleteContent(); - - // attributes - private: - XmlElementsCategory *root; -}; -#endif