[qet] [4533] Remove unused classes

[ Thread Index | Date Index | More lists.tuxfamily.org/qet Archives ]


Revision: 4533
Author:   blacksun
Date:     2016-05-28 14:59:01 +0200 (Sat, 28 May 2016)
Log Message:
-----------
Remove unused classes

Modified Paths:
--------------
    trunk/sources/elementscollectioncache.cpp
    trunk/sources/elementscollectioncache.h
    trunk/sources/elementspanelwidget.cpp
    trunk/sources/qetgraphicsitem/customelement.cpp

Removed Paths:
-------------
    trunk/sources/elementdefinition.cpp
    trunk/sources/elementdefinition.h
    trunk/sources/elementscategory.cpp
    trunk/sources/elementscategory.h
    trunk/sources/elementscollection.cpp
    trunk/sources/elementscollection.h
    trunk/sources/elementscollectionitem.h
    trunk/sources/fileelementdefinition.cpp
    trunk/sources/fileelementdefinition.h
    trunk/sources/fileelementscategory.cpp
    trunk/sources/fileelementscategory.h
    trunk/sources/fileelementscollection.cpp
    trunk/sources/fileelementscollection.h
    trunk/sources/moveelementsdescription.cpp
    trunk/sources/moveelementsdescription.h
    trunk/sources/moveelementshandler.h

Deleted: trunk/sources/elementdefinition.cpp
===================================================================
--- trunk/sources/elementdefinition.cpp	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/elementdefinition.cpp	2016-05-28 12:59:01 UTC (rev 4533)
@@ -1,503 +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 <http://www.gnu.org/licenses/>.
-*/
-#include "elementdefinition.h"
-#include "elementscollection.h"
-#include "moveelementshandler.h"
-#include "moveelementsdescription.h"
-
-/**
-	@return true si l'element est rattache a une collection d'elements
-	Un element appartenant a une collection a forcement un chemin virtuel.
-*/
-bool ElementDefinition::hasParentCategory() {
-	return(parent_category_);
-}
-
-/**
- * @brief ElementDefinition::uuid
- * @return The uuid of this element definition.
- * If uuid can't be found, return a null QUuid.
- */
-QUuid ElementDefinition::uuid()
-{
-	if (!m_uuid.isNull()) return m_uuid;
-
-		//Get the uuid of element
-	QList<QDomElement>  list_ = QET::findInDomElement(xml(), "uuid");
-
-	if (!list_.isEmpty())
-		m_uuid = QUuid(list_.first().attribute("uuid"));
-	else
-		qDebug() << "The element : " << filePath() << "haven't got an uuid, please edit and save this element with element editor to create an uuid";
-
-	return m_uuid;
-
-}
-
-ElementsCategory *ElementDefinition::parentCategory() {
-	return(parent_category_);
-}
-
-/**
-	@return la liste des categories parentes de cet item.
-*/
-QList<ElementsCategory *> ElementDefinition::parentCategories() {
-	QList<ElementsCategory *> cat_list;
-	if (ElementsCategory *par_cat = parentCategory()) {
-		cat_list << par_cat -> parentCategories() << par_cat;
-	}
-	return(cat_list);
-}
-
-/**
-	@return true si l'element est rattache a une collection d'elements
-	Un element appartenant a une collection a forcement un chemin virtuel.
-*/
-bool ElementDefinition::hasParentCollection() {
-	return(parent_collection_);
-}
-
-/**
-	@param other_item Autre item
-	@return true si other_item est parent (direct ou indirect) de cet item, false sinon
-*/
-bool ElementDefinition::isChildOf(ElementsCollectionItem *other_item) {
-	// soit l'autre item est le parent direct de cet element
-	if (ElementsCategory *other_item_cat = other_item -> toCategory()) {
-		if (other_item_cat == parentCategory()) {
-			return(true);
-		}
-	}
-	
-	// soit il est un parent indirect, auquel cas, on peut demander a la categorie parente de repondre a la question
-	if (ElementsCategory *parent_cat = parentCategory()) {
-		return(parent_cat -> isChildOf(other_item));
-	}
-	
-	// arrive ici, l'autre item n'est pas parent de cet item
-	return(false);
-}
-
-/**
-	@return la collection d'element a laquelle appartient cet element
-*/
-ElementsCollection *ElementDefinition::parentCollection() {
-	return(parent_collection_);
-}
-
-/**
-	@return le projet auquel appartient cette categorie, si celle-ci
-	appartient a une collection.
-*/
-QETProject *ElementDefinition::project() {
-	if (hasParentCollection()) {
-		return(parentCollection() -> project());
-	}
-	return(0);
-}
-
-/**
-	Ne fait rien ; le projet doit etre defini au niveau d'une collection
-*/
-void ElementDefinition::setProject(QETProject *) {
-}
-
-/**
-	@return le protocole utilise par la collection a laquelle appartient cet element
-*/
-QString ElementDefinition::protocol() {
-	// il n'est pas possible d'avoir un protocole sans appartenir a une collection
-	if (!hasParentCollection()) return(QString());
-	
-	return(parentCollection() -> protocol());
-}
-
-/**
-	Ne fait rien
-*/
-void ElementDefinition::setProtocol(const QString &) {
-}
-
-/**
-	@return le chemin virtuel complet de cet element (protocole + chemin)
-*/
-QString ElementDefinition::fullVirtualPath() {
-	// il n'est pas possible d'avoir un chemin virtuel sans appartenir a une collection
-	if (!hasParentCollection()) return(QString());
-	
-	return(protocol() + "://" + virtualPath());
-}
-
-/**
-	@return l'emplacement de l'element
-*/
-ElementsLocation ElementDefinition::location() {
-	return(ElementsLocation(fullVirtualPath(), project()));
-}
-
-/**
-	@return une liste vide - un element ne possede pas de categorie
-*/
-QList<ElementsCategory *> ElementDefinition::categories() {
-	return(QList<ElementsCategory *>());
-}
-
-/**
-	@return toujours 0 - un element ne possede pas de categorie
-*/
-ElementsCategory *ElementDefinition::category(const QString &) {
-	return(0);
-}
-
-/**
-	@return toujours 0 - un element ne possede pas de categorie
-*/
-ElementsCategory *ElementDefinition::createCategory(const QString &) {
-	return(0);
-}
-
-/**
-	@return une liste contenant seulement cet element
-*/
-QList<ElementDefinition *> ElementDefinition::elements() {
-	return(QList<ElementDefinition *>() << this);
-}
-
-/**
-	@return cet element si path est vide, 0 sinon
-*/
-ElementDefinition *ElementDefinition::element(const QString &path) {
-	if (path.isEmpty()) return(this);
-	return(0);
-}
-
-/**
-	@return toujours 0 - un element n'en cree pas d'autre
-*/
-ElementDefinition *ElementDefinition::createElement(const QString &) {
-	return(0);
-}
-
-/**
-	@return always true - an element contains nothing but itself
-*/
-bool ElementDefinition::isEmpty() {
-	return(false);
-}
-
-/**
-	@return always 1
-*/
-int ElementDefinition::count() {
-	return(1);
-}
-
-/**
-	@return toujours 0 - un element n'est pas une collection
-*/
-ElementsCollection *ElementDefinition::toCollection() {
-	return(0);
-}
-
-/**
-	@return la categorie parente de cet element
-*/
-ElementsCategory *ElementDefinition::toCategory() {
-	return(parentCategory());
-}
-
-/**
-	@return toujours 0 - un element n'est pas une categorie
-*/
-ElementsCategory *ElementDefinition::toPureCategory() {
-	return(0);
-}
-
-/**
-	@return un pointeur ElementDefinition * sur cet element
-*/
-ElementDefinition *ElementDefinition::toElement() {
-	return(this);
-}
-
-/**
- * @brief ElementDefinition::equals
- * @param other : ElementDefinition to compare with this
- * @return true if this element definition and other element definition is the same, else false
- */
-bool ElementDefinition::equals(ElementDefinition &other)
-{
-		//Compare the uuid of the elements
-	QList <QDomElement> this_uuid_dom = QET::findInDomElement(xml(), "uuid");
-	QList <QDomElement> other_uuid_dom = QET::findInDomElement(other.xml(), "uuid");
-	if ((this_uuid_dom.size() == 1) && (other_uuid_dom.size() == 1))
-		return this_uuid_dom.first().attribute("uuid") == other_uuid_dom.first().attribute("uuid") ? true : false;
-
-		//********
-		//The code below is used to keep compatibility with previous version of qet
-		//The uuid store in .elmt file, to compare two elements was created at version svn 4032
-		///@TODO remove this code at version 0.6 or 0.7 (all users should already used the version with uuid)
-		//********
-		//Compare the xml definition transformed in QString. This method can return a false positive (notably with Qt5,
-		//because the attributes of the xml isn't at the same order,with two instance of qet, for the same element)
-	QDomDocument this_xml_document;
-	this_xml_document.appendChild(this_xml_document.importNode(xml(), true));
-	QString this_text = this_xml_document.toString(0);
-	
-	QDomDocument other_xml_document;
-	other_xml_document.appendChild(other_xml_document.importNode(other.xml(), true));
-	QString other_text = other_xml_document.toString(0);
-	
-	return(other_text == this_text);
-}
-
-/**
-	@param target_category Categorie cible pour la copie ; elle doit exister
-	@param handler Gestionnaire d'erreurs a utiliser pour effectuer la copie
-	@param deep_copy Argument ignore - une copie "recursive" n'a pas de sens pour un element
-	@return La copie de l'element ou 0 si le processus a echoue
-*/
-ElementsCollectionItem *ElementDefinition::copy(ElementsCategory *target_category, MoveElementsHandler *handler, bool deep_copy) {
-	Q_UNUSED(deep_copy);
-	if (!target_category) return(0);
-	
-	// echec si le path name de cet element est vide
-	QString elmt_name(pathName());
-	if (elmt_name.isEmpty()) return(0);
-	
-	// cree une description du mouvement a effectuer
-	MoveElementsDescription mvt_desc;
-	mvt_desc.setDestinationParentCategory(target_category);
-	// on tente une copie avec le meme nom interne
-	mvt_desc.setOriginalDestinationInternalName(pathName());
-	mvt_desc.setFinalDestinationInternalName(pathName());
-	mvt_desc.setHandler(handler);
-	
-	copy(&mvt_desc);
-	return(mvt_desc.createdItem());
-}
-
-/**
-	Methode privee effectuant une copie de cet element a partir d'une
-	description du mouvement.
-	@param mvt_desc Description du mouvement
-*/
-void ElementDefinition::copy(MoveElementsDescription *mvt_desc) {
-	// quelques pointeurs pour simplifier l'ecriture de la methode
-	MoveElementsHandler *handler = mvt_desc -> handler();
-	ElementsCategory *target_category = mvt_desc -> destinationParentCategory();
-	
-	ElementDefinition *element_copy = 0;
-	
-	// verifie que la categorie parente cible est accessible en lecture
-	if (!target_category -> isReadable()) {
-		if (!handler) {
-			return;
-		} else {
-			do {
-				QET::Action todo = handler -> categoryIsNotReadable(target_category);
-				
-				// on agit en fonction de la reponse du handler
-				if (todo == QET::Abort) {
-					mvt_desc -> abort();
-					return;
-				} else if (todo == QET::Ignore || todo == QET::Managed) {
-					return;
-				} else if (todo == QET::Retry || todo == QET::Erase) {
-					// reessayer = repasser dans la boucle
-				} else if (todo == QET::Rename) {
-					// cas non gere
-				}
-			} while (!target_category -> isReadable());
-		}
-	}
-	
-	// verifie que la categorie parente cible est accessible en ecriture
-	if (!target_category -> isWritable()) {
-		if (!handler) {
-			return;
-		} else {
-			do {
-				QET::Action todo = handler -> categoryIsNotWritable(target_category);
-				
-				// on agit en fonction de la reponse du handler
-				if (todo == QET::Abort) {
-					mvt_desc -> abort();
-					return;
-				} else if (todo == QET::Ignore || todo == QET::Managed) {
-					return;
-				} else if (todo == QET::Retry || todo == QET::Erase) {
-					// reessayer = repasser dans la boucle
-				} else if (todo == QET::Rename) {
-					// cas non gere
-				}
-			} while (!target_category -> isWritable());
-		}
-	}
-	
-	// verifie que la cible n'existe pas deja
-	if ((element_copy = target_category -> element(mvt_desc -> finalDestinationInternalName()))) {
-		if (!handler) {
-			return;
-		} else {
-			do {
-				// la cible existe deja : on demande au Handler ce qu'on doit faire
-				QET::Action todo = handler -> elementAlreadyExists(this, element_copy);
-				
-				// on agit en fonction de la reponse du handler
-				if (todo == QET::Abort) {
-					mvt_desc -> abort();
-					return;
-				} else if (todo == QET::Ignore || todo == QET::Managed) {
-					return;
-				} else if (todo == QET::Erase) {
-					break;
-				} else if (todo == QET::Rename) {
-					mvt_desc -> setFinalDestinationInternalName(handler -> nameForRenamingOperation());
-				}
-			} while ((element_copy = target_category -> element(mvt_desc -> finalDestinationInternalName())));
-		}
-	}
-	
-	/*
-		A ce stade, on peut creer l'element cible : soit il n'existe pas, soit
-		on a l'autorisation de l'ecraser
-	*/
-	
-	// si la cible existe deja, verifie qu'elle est accessible en ecriture
-	element_copy = target_category -> element(mvt_desc -> finalDestinationInternalName());
-	if (element_copy && !element_copy -> isWritable()) {
-		if (!handler) {
-			return;
-		} else {
-			do {
-				// la cible n'est pas accessible en ecriture : on demande au Handler ce qu'on doit faire
-				QET::Action todo = handler -> elementIsNotWritable(element_copy);
-				
-				// on agit en fonction de la reponse du handler
-				if (todo == QET::Abort) {
-					mvt_desc -> abort();
-					return;
-				} else if (todo == QET::Ignore || todo == QET::Managed) {
-					return;
-				} else if (todo == QET::Retry || todo == QET::Erase) {
-					// reessayer = repasser dans la boucle
-				} else if (todo == QET::Rename) {
-					// cas non gere
-				}
-			} while (!element_copy -> isWritable());
-		}
-	}
-	
-	// cree l'element cible
-	element_copy = target_category -> createElement(mvt_desc -> finalDestinationInternalName());
-	if (!element_copy) {
-		if (handler) {
-			handler -> errorWithAnElement(this, tr("L'élément cible n'a pu être créé."));
-		}
-		return;
-	}
-	
-	// recopie la definition de l'element
-	element_copy -> setXml(xml());
-	element_copy -> write();
-	mvt_desc -> setCreatedItem(element_copy);
-}
-
-/**
-	@param target_category Categorie cible pour le deplacement ; elle doit exister
-	@param handler Gestionnaire d'erreurs a utiliser pour effectuer le deplacement
-	@return L'element apres deplacement ou 0 si le processus a echoue
-	
-*/
-ElementsCollectionItem *ElementDefinition::move(ElementsCategory *target_category, MoveElementsHandler *handler) {
-	if (!target_category) return(0);
-	
-	// echec si le path name de cet element est vide
-	QString elmt_name(pathName());
-	if (elmt_name.isEmpty()) return(0);
-	
-	// cree une description du mouvement a effectuer
-	MoveElementsDescription mvt_desc;
-	mvt_desc.setDestinationParentCategory(target_category);
-	// on tente un deplacement avec le meme nom interne
-	mvt_desc.setOriginalDestinationInternalName(pathName());
-	mvt_desc.setFinalDestinationInternalName(pathName());
-	mvt_desc.setHandler(handler);
-	
-	move(&mvt_desc);
-	return(mvt_desc.createdItem());
-}
-
-/**
-	Methode privee effectuant un delacement de cet element a partir d'une
-	description du mouvement.
-	Pour etre plus exact, cette methode effectue d'abord une copie de l'element,
-	puis, si celle-ci a reussi, il supprime l'element d'origine.
-	@param mvt_desc Description du mouvement
-*/
-void ElementDefinition::move(MoveElementsDescription *mvt_desc) {
-	// effectue une copie de l'element
-	copy(mvt_desc);
-	ElementsCollectionItem *item_copy = mvt_desc -> createdItem();
-	if (!item_copy) return;
-	ElementDefinition *element_copy = item_copy -> toElement();
-	if (!element_copy) return;
-	
-	// supprime cet element
-	MoveElementsHandler *handler = mvt_desc -> handler();
-	
-	// cet element doit etre accessible en ecriture pour etre supprime
-	if (!isWritable()) {
-		if (!handler) {
-			return;
-		} else {
-			do {
-				// on demande au Handler ce qu'on doit faire
-				QET::Action todo = handler -> elementIsNotWritable(this);
-				
-				// on agit en fonction de la reponse du handler
-				if (todo == QET::Abort) {
-					mvt_desc -> abort();
-					return;
-				} else if (todo == QET::Ignore || todo == QET::Managed) {
-					return;
-				} else if (todo == QET::Retry || todo == QET::Erase) {
-					// reessayer = repasser dans la boucle
-				} else if (todo == QET::Rename) {
-					// cas non gere
-				}
-			} while (!isWritable());
-		}
-	}
-	
-	// supprime cet element (sinon il ne s'agirait que d'une copie, pas d'un deplacement)
-	bool element_deletion = remove();
-	mvt_desc -> setSourceItemDeleted(element_deletion);
-	if (!element_deletion && handler) {
-		handler -> errorWithAnElement(this, tr("La suppression de cet élément a échoué."));
-	}
-}
-
-/**
-	Cette methode n'a aucun effet
-	@return toujours true
-*/
-bool ElementDefinition::removeContent() {
-	return(true);
-}

Deleted: trunk/sources/elementdefinition.h
===================================================================
--- trunk/sources/elementdefinition.h	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/elementdefinition.h	2016-05-28 12:59:01 UTC (rev 4533)
@@ -1,131 +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 <http://www.gnu.org/licenses/>.
-*/
-#ifndef ELEMENT_DEFINITION_H
-#define ELEMENT_DEFINITION_H
-#include <QtXml>
-#include "elementscategory.h"
-class ElementsCollection;
-class MoveElementsHandler;
-/**
-	This abstract class represents a way to access the XML definition of an
-	element, be it from a .elmt file or from a QET project file.
-*/
-class ElementDefinition : public ElementsCollectionItem {
-	Q_OBJECT
-	
-	public:
-	/**
-		Constructor
-	*/
-	ElementDefinition(ElementsCategory *category = 0, ElementsCollection *collection = 0) :
-		ElementsCollectionItem(category),
-		parent_category_(category),
-		parent_collection_(collection)
-	{};
-
-	virtual ~ElementDefinition() {};
-	
-	/**
-		@return the XML definition of a particular element
-	*/
-	virtual QDomElement xml() = 0;
-	virtual QUuid uuid();
-	
-	/**
-		Specify the XML definition of a particular element
-		@param xml_element New XML definition
-		@return true if everything went well, false otherwise
-	*/
-	virtual bool setXml(const QDomElement &xml_element) = 0;
-	
-	/**
-		@return true if the definition is not available
-	*/
-	virtual bool isNull() const = 0;
-	
-	virtual ElementsCategory *parentCategory();
-	virtual QList<ElementsCategory *> parentCategories();
-	virtual bool hasParentCategory();
-	
-	/**
-		@return whether the element is attached to an elements collection
-		An elemet which belongs to a collection always has a virtual path.
-	*/
-	virtual bool hasParentCollection();
-	virtual bool isChildOf(ElementsCollectionItem *);
-	
-	/**
-		@return the elements collections this element belongs to
-	*/
-	virtual ElementsCollection *parentCollection();
-	
-	virtual QETProject *project();
-	virtual void setProject(QETProject *);
-	/**
-		@return the "protocol" used by the parent collection
-	*/
-	virtual QString protocol();
-	/**
-		Has no effect.
-	*/
-	virtual void setProtocol(const QString &);
-	
-	/**
-		@return the full virtual path for this element (i.e. "protocol" + path)
-	*/
-	virtual QString fullVirtualPath();
-	
-	/**
-		@return the location of this element, as an ElementsLocation object.
-		@see ElementsLocation
-	*/
-	virtual ElementsLocation location();
-	
-	virtual QList<ElementsCategory *> categories();
-	virtual ElementsCategory *category(const QString &);
-	virtual ElementsCategory *createCategory(const QString &);
-	
-	virtual QList<ElementDefinition *> elements();
-	virtual ElementDefinition *element(const QString &);
-	virtual ElementDefinition *createElement(const QString &);
-	virtual bool isEmpty();
-	virtual int count();
-	virtual ElementsCollectionItem *copy(ElementsCategory *, MoveElementsHandler *, bool = true);
-	virtual ElementsCollectionItem *move(ElementsCategory *, MoveElementsHandler *);
-	
-	virtual bool isCollection()   const { return(false); } ///< @return always false
-	virtual bool isRootCategory() const { return(false); } ///< @return always false
-	virtual bool isCategory()     const { return(false); } ///< @return always false
-	virtual bool isElement()      const { return(true ); } ///< @return always  true
-	virtual ElementsCollection *toCollection();
-	virtual ElementsCategory *toCategory();
-	virtual ElementsCategory *toPureCategory();
-	virtual ElementDefinition *toElement();
-	virtual bool equals(ElementDefinition &);
-	virtual bool removeContent();
-	virtual QDateTime modificationTime() const = 0;
-	void copy(MoveElementsDescription *);
-	void move(MoveElementsDescription *);
-	
-	// attributes
-	private:
-	ElementsCategory *parent_category_;
-	ElementsCollection *parent_collection_;
-	QUuid m_uuid;
-};
-#endif

Deleted: trunk/sources/elementscategory.cpp
===================================================================
--- trunk/sources/elementscategory.cpp	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/elementscategory.cpp	2016-05-28 12:59:01 UTC (rev 4533)
@@ -1,618 +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 <http://www.gnu.org/licenses/>.
-*/
-#include "elementscategory.h"
-#include "elementscollection.h"
-#include "elementdefinition.h"
-#include "moveelementshandler.h"
-#include "moveelementsdescription.h"
-#include "qet.h"
-#include "qetproject.h"
-
-/**
-	Constructeur
-*/
-ElementsCategory::ElementsCategory(ElementsCategory *parent, ElementsCollection *collection) :
-	ElementsCollectionItem(parent),
-	parent_collection_(collection),
-	parent_category_(parent)
-{
-}
-
-/**
-	Destructeur
-*/
-ElementsCategory::~ElementsCategory() {
-}
-
-/**
-	@return le projet auquel appartient cette categorie, si celle-ci
-	appartient a une collection.
-*/
-QETProject *ElementsCategory::project() {
-	if (parent_collection_) {
-		return(parent_collection_ -> project());
-	}
-	return(0);
-}
-
-/**
-	Ne fait rien ; le projet doit etre defini au niveau d'une collection
-*/
-void ElementsCategory::setProject(QETProject *) {
-}
-
-/**
-	@return le protocole utilise pour designer la collection a laquelle
-	appartient cette categorie
-*/
-QString ElementsCategory::protocol() {
-	// il n'est pas possible d'avoir un protocole sans appartenir a une collection
-	if (!hasParentCollection()) return(QString());
-	
-	return(parentCollection() -> protocol());
-}
-
-/**
-	Ne fait rien
-*/
-void ElementsCategory::setProtocol(const QString &) {
-}
-
-/**
-	@return la categorie parente de cette categorie, ou 0 si celle-ci n'en possede
-*/
-ElementsCategory *ElementsCategory::parentCategory() {
-	return(parent_category_);
-}
-
-/**
-	@return la liste des categories parentes de cet item.
-	Cette liste peut etre vide s'il s'agit d'une categorie racine
-*/
-QList<ElementsCategory *> ElementsCategory::parentCategories() {
-	QList<ElementsCategory *> cat_list;
-	if (ElementsCategory *par_cat = parentCategory()) {
-		cat_list << par_cat -> parentCategories() << par_cat;
-	}
-	return(cat_list);
-}
-
-/**
-	@return true si cette categorie possede une categorie parente
-*/
-bool ElementsCategory::hasParentCategory() {
-	return(parent_category_);
-}
-
-/**
-	@return la collection a laquelle appartient la categorie
-*/
-ElementsCollection *ElementsCategory::parentCollection() {
-	return(parent_collection_);
-}
-
-/**
-	@return true si la categorie appartient a une collection
-*/
-bool ElementsCategory::hasParentCollection() {
-	return(parent_collection_);
-}
-
-/**
-	@param other_item Un autre item
-	@return true si other_item est parent (direct ou indirect) de cet item, false sinon
-*/
-bool ElementsCategory::isChildOf(ElementsCollectionItem *other_item) {
-	// verifie si l'autre item n'est pas la collection a laquelle cette categorie appartient
-	if (ElementsCollection *other_item_coll = other_item -> toCollection()) {
-		if (other_item_coll == parentCollection()) {
-			return(true);
-		}
-	}
-	
-	// remonte les categories parentes pour voir si l'une d'entre elles correspond a cet autre item
-	ElementsCategory *parent_cat = this;
-	while ((parent_cat = parent_cat -> parentCategory())) {
-		if (parent_cat == other_item) {
-			return(true);
-		}
-	}
-	
-	// arrive ici, l'autre item n'est pas parent de cet item
-	return(false);
-}
-
-/**
-	@return le chemin virtuel de la categorie, avec le protocole
-*/
-QString ElementsCategory::fullVirtualPath() {
-	// il n'est pas possible d'avoir un chemin virtuel sans appartenir a une collection
-	if (!hasParentCollection()) return(QString());
-	
-	return(protocol() + "://" + virtualPath());
-}
-
-/**
-	@return l'emplacement de la categorie
-*/
-ElementsLocation ElementsCategory::location() {
-	return(ElementsLocation(fullVirtualPath(), project()));
-}
-
-/**
-	@return true si cette categorie est la categorie racine de la collection
-	a laquelle elle appartient, false sinon
-*/
-bool ElementsCategory::isRootCategory() const {
-	// il faut appartenir a une collection pour etre categorie racine
-	if (!parent_collection_) return(false);
-	
-	return(this == parent_collection_ -> rootCategory());
-}
-
-/**
-	@return toujours false
-*/
-bool ElementsCategory::isCollection() const {
-	return(false);
-}
-
-/**
-	@return toujours true
-*/
-bool ElementsCategory::isCategory() const {
-	return(true);
-}
-
-/**
-	@return toujours false
-*/
-bool ElementsCategory::isElement() const {
-	return(false);
-}
-
-/**
-	@return toujours 0 - une categorie n'est pas une collection
-*/
-ElementsCollection *ElementsCategory::toCollection() {
-	return(0);
-}
-
-/**
-	@return un pointeur ElementsCategory * sur cette categorie
-*/
-ElementsCategory *ElementsCategory::toCategory() {
-	return(this);
-}
-
-/**
-	@return un pointeur ElementsCategory * sur cette categorie
-*/
-ElementsCategory *ElementsCategory::toPureCategory() {
-	return(this);
-}
-
-/**
-	@return toujours 0 - une categorie n'est pas un element
-*/
-ElementDefinition *ElementsCategory::toElement() {
-	return(0);
-}
-
-/**
-	@param target_category Categorie cible pour la copie ; cette categorie
-	sera copiee en tant que sous-categorie de la categorie cible
-	@param handler Gestionnaire d'erreurs a utiliser pour effectuer la copie
-	Si handler vaut 0, les erreurs, problemes et questions sont purement et
-	simplement ignores.
-	@param deep_copy true pour copier recursivement le contenu (elements et
-	sous-categories) de cette categorie, false sinon
-	@return La copie de la categorie, ou 0 si le processus a echoue.
-*/
-ElementsCollectionItem *ElementsCategory::copy(ElementsCategory *target_category, MoveElementsHandler *handler, bool deep_copy) {
-	if (!target_category) return(0);
-	
-	// echec si le path name de cette categorie est vide
-	QString cat_name(pathName());
-	if (cat_name.isEmpty()) return(0);
-	
-	// cree une description du mouvement a effectuer
-	MoveElementsDescription mvt_desc;
-	mvt_desc.setDestinationParentCategory(target_category);
-	// on tente une copie avec le meme nom interne
-	mvt_desc.setOriginalDestinationInternalName(cat_name);
-	mvt_desc.setFinalDestinationInternalName(cat_name);
-	mvt_desc.setHandler(handler);
-	mvt_desc.setRecursive(deep_copy);
-	
-	// effectue le mouvement
-	copy(&mvt_desc);
-	return(mvt_desc.createdItem());
-}
-
-/**
-	Methode privee effectuant une copie de cette categorie a partir d'une
-	description du mouvement
-*/
-void ElementsCategory::copy(MoveElementsDescription *mvt_desc) {
-	// quelques pointeurs pour simplifier l'ecriture de la methode
-	MoveElementsHandler *handler = mvt_desc -> handler();
-	ElementsCategory *target_category = mvt_desc -> destinationParentCategory();
-	
-	// verifie que la categorie parente cible est accessible en lecture
-	if (!target_category -> isReadable()) {
-		if (!handler) {
-			return;
-		} else {
-			do {
-				QET::Action todo = handler -> categoryIsNotReadable(target_category);
-				
-				// on agit en fonction de la reponse du handler
-				if (todo == QET::Abort) {
-					mvt_desc -> abort();
-					return;
-				} else if (todo == QET::Ignore || todo == QET::Managed) {
-					return;
-				} else if (todo == QET::Retry || todo == QET::Erase) {
-					// reessayer = repasser dans la boucle
-				} else if (todo == QET::Rename) {
-					// cas non gere
-				}
-			} while (!target_category -> isReadable());
-		}
-	}
-	
-	// verifie que la source et la destination ne sont pas identiques
-	if (target_category == this || target_category -> isChildOf(this)) {
-		if (handler) {
-			handler -> errorWithACategory(this, tr("La copie d'une catégorie vers elle-même ou vers l'une de ses sous-catégories n\'est pas gérée."));
-		}
-		return;
-	}
-	
-	// verifie que la categorie parente cible est accessible en ecriture
-	if (!target_category -> isWritable()) {
-		if (!handler) {
-			return;
-		} else {
-			do {
-				QET::Action todo = handler -> categoryIsNotWritable(target_category);
-				
-				// on agit en fonction de la reponse du handler
-				if (todo == QET::Abort) {
-					mvt_desc -> abort();
-					return;
-				} else if (todo == QET::Ignore || todo == QET::Managed) {
-					return;
-				} else if (todo == QET::Retry || todo == QET::Erase) {
-					// reessayer = repasser dans la boucle
-				} else if (todo == QET::Rename) {
-					// cas non gere
-				}
-			} while (!target_category -> isWritable());
-		}
-	}
-	
-	ElementsCategory *category_copy = 0;
-	
-	// verifie que la cible n'existe pas deja
-	if ((category_copy = target_category -> category(mvt_desc -> finalDestinationInternalName()))) {
-		if (!handler) {
-			return;
-		} else {
-			do {
-				// la cible existe deja : on demande au Handler ce qu'on doit faire
-				QET::Action todo = handler -> categoryAlreadyExists(this, category_copy);
-				
-				// on agit en fonction de la reponse du handler
-				if (todo == QET::Abort) {
-					mvt_desc -> abort();
-					return;
-				} else if (todo == QET::Ignore || todo == QET::Managed) {
-					return;
-				} else if (todo == QET::Erase) {
-					break;
-				} else if (todo == QET::Rename) {
-					mvt_desc -> setFinalDestinationInternalName(handler -> nameForRenamingOperation());
-				}
-			} while ((category_copy = target_category -> category(mvt_desc -> finalDestinationInternalName())));
-		}
-	}
-	
-	/*
-		A ce stade, on peut creer la categorie cible : soit elle n'existe pas,
-		soit on a l'autorisation de l'ecraser
-	*/
-	
-	// si la cible existe deja, verifie qu'elle est accessible en ecriture
-	category_copy = target_category -> category(mvt_desc -> finalDestinationInternalName());
-	if (category_copy && !category_copy -> isWritable()) {
-		if (!handler) {
-			return;
-		} else {
-			do {
-				// la cible n'est pas accessible en ecriture : on demande au Handler ce qu'on doit faire
-				QET::Action todo = handler -> categoryIsNotWritable(category_copy);
-				
-				// on agit en fonction de la reponse du handler
-				if (todo == QET::Abort) {
-					mvt_desc -> abort();
-					return;
-				} else if (todo == QET::Ignore || todo == QET::Managed) {
-					return;
-				} else if (todo == QET::Retry || todo == QET::Erase) {
-					// reessayer = repasser dans la boucle
-				} else if (todo == QET::Rename) {
-					// cas non gere
-				}
-			} while (!category_copy -> isWritable());
-		}
-	}
-	
-	// memorise la liste des sous-categories et elements directs
-	QList<ElementsCategory  *> categories_list = categories();
-	QList<ElementDefinition *> elements_list   = elements();
-	
-	// cree la categorie cible
-	category_copy = target_category -> createCategory(mvt_desc -> finalDestinationInternalName());
-	if (!category_copy) {
-		/// @todo la creation a echoue : gerer ce cas
-		return;
-	}
-	
-	// recopie les noms de la categorie
-	category_copy -> category_names = category_names;
-	category_copy -> write();
-	mvt_desc -> setCreatedItem(category_copy);
-	
-	// copie recursive
-	if (mvt_desc -> isRecursive()) {
-		// copie les sous-categories
-		foreach(ElementsCategory *sub_category, categories_list) {
-			// cree une description du mouvement a effectuer
-			MoveElementsDescription sub_category_mvt_desc;
-			sub_category_mvt_desc.setDestinationParentCategory(category_copy);
-			// on tente une copie avec le meme nom interne
-			sub_category_mvt_desc.setOriginalDestinationInternalName(sub_category -> pathName());
-			sub_category_mvt_desc.setFinalDestinationInternalName(sub_category -> pathName());
-			sub_category_mvt_desc.setHandler(handler);
-			sub_category_mvt_desc.setRecursive(true);
-			
-			// effectue la copie
-			sub_category -> copy(&sub_category_mvt_desc);
-			
-			// abort si besoin
-			if (sub_category_mvt_desc.mustAbort()) {
-				mvt_desc -> abort();
-				return;
-			}
-		}
-		
-		// copie les elements
-		foreach(ElementDefinition *element, elements_list) {
-			// cree une description du mouvement a effectuer
-			MoveElementsDescription element_mvt_desc;
-			element_mvt_desc.setDestinationParentCategory(category_copy);
-			// on tente une copie avec le meme nom interne
-			element_mvt_desc.setOriginalDestinationInternalName(element -> pathName());
-			element_mvt_desc.setFinalDestinationInternalName(element -> pathName());
-			element_mvt_desc.setHandler(handler);
-			
-			element -> copy(&element_mvt_desc);
-			
-			// abort si besoin
-			if (element_mvt_desc.mustAbort()) {
-				mvt_desc -> abort();
-				return;
-			}
-		}
-	}
-}
-
-/**
-	Cette methode copie la categorie recursivement puis la supprime, ce qui
-	equivaut a un deplacement. Elle cree donc un nouvel objet representant la
-	categorie, qu'elle retourne ensuite.
-	@param target_category Categorie cible pour le deplacement ; cette categorie
-	sera deplacee de faon a devenir une sous-categorie de la categorie cible
-	@param handler Gestionnaire d'erreurs a utiliser pour effectuer le
-	deplacement. Si handler vaut 0, les erreurs, problemes et questions sont
-	purement et simplement ignores.
-	@return Un pointeur vers la categorie apres le deplacement, ou 0 si le
-	processus a echoue.
-*/
-ElementsCollectionItem *ElementsCategory::move(ElementsCategory *target_category, MoveElementsHandler *handler) {
-	if (!target_category) return(0);
-	
-	// echec si le path name de cette categorie est vide
-	QString cat_name(pathName());
-	if (cat_name.isEmpty()) return(0);
-	
-	// cree une description du mouvement a effectuer
-	MoveElementsDescription mvt_desc;
-	mvt_desc.setDestinationParentCategory(target_category);
-	// on tente une copie avec le meme nom interne
-	mvt_desc.setOriginalDestinationInternalName(cat_name);
-	mvt_desc.setFinalDestinationInternalName(cat_name);
-	mvt_desc.setHandler(handler);
-	mvt_desc.setRecursive(true);  // un deplacement est forcement recursif
-	
-	// effectue le mouvement
-	move(&mvt_desc);
-	return(mvt_desc.createdItem());
-}
-
-/**
-	Methode privee effectuant le deplacement de cette categorie a partir d'une
-	description du mouvement
-	@param mvt_desc Description du mouvement
-*/
-void ElementsCategory::move(MoveElementsDescription *mvt_desc) {
-	// quelques pointeurs pour simplifier l'ecriture de la methode
-	MoveElementsHandler *handler = mvt_desc -> handler();
-	ElementsCategory *target_category = mvt_desc -> destinationParentCategory();
-	
-	// empeche le deplacement s'il s'agit d'une categorie racine
-	if (isRootCategory()) {
-		if (handler) handler -> errorWithACategory(this, tr("Il n'est pas possible de déplacer une collection."));
-		return;
-	}
-	
-	// empeche le deplacement de la categorie dans une sous-categorie
-	if (target_category == this || target_category -> isChildOf(this)) {
-		if (handler) handler -> errorWithACategory(this, tr("Le déplacement d'une catégorie dans une de ses sous-catégories n'est pas possible."));
-		return;
-	}
-	
-	// effectue une copie non recursive de cette categorie
-	ElementsCollectionItem *item_copy = copy(target_category, handler, false);
-	if (!item_copy) return;
-	ElementsCategory *category_copy = item_copy -> toCategory();
-	if (!category_copy) return;
-	
-	// memorise la liste des sous-categories et elements directs
-	QList<ElementsCategory  *> categories_list = categories();
-	QList<ElementDefinition *> elements_list   = elements();
-	
-	// booleen indiquant si on pourra tenter de supprimer la categorie apres la copie
-	bool remove_category = true;
-	
-	// tente de deplacer les sous-categories
-	foreach(ElementsCategory *sub_category, categories_list) {
-		// cree une description du mouvement a effectuer
-		MoveElementsDescription sub_category_mvt_desc;
-		sub_category_mvt_desc.setDestinationParentCategory(category_copy);
-		// on tente un deplacement avec le meme nom interne
-		sub_category_mvt_desc.setOriginalDestinationInternalName(sub_category -> pathName());
-		sub_category_mvt_desc.setFinalDestinationInternalName(sub_category -> pathName());
-		sub_category_mvt_desc.setHandler(handler);
-		sub_category_mvt_desc.setRecursive(true);
-		
-		// effectue le deplacement
-		sub_category -> move(&sub_category_mvt_desc);
-		
-		// abort si besoin
-		if (sub_category_mvt_desc.mustAbort()) {
-			mvt_desc -> abort();
-			return;
-		}
-		
-		// si la sous-categorie n'a pas ete supprimee, on ne supprimera pas cette categorie
-		if (remove_category) remove_category = sub_category_mvt_desc.sourceItemWasDeleted();
-		
-		// si la sous-categorie n'a pas ete supprimee, ...
-		if (!sub_category_mvt_desc.sourceItemWasDeleted()) {
-			// on ne supprimera pas cette categorie
-			if (remove_category) remove_category = false;
-		}
-	}
-	
-	// tente de deplacer les elements
-	foreach(ElementDefinition *element, elements_list) {
-		// cree une description du mouvement a effectuer
-		MoveElementsDescription element_mvt_desc;
-		element_mvt_desc.setDestinationParentCategory(category_copy);
-		// on tente une copie avec le meme nom interne
-		element_mvt_desc.setOriginalDestinationInternalName(element -> pathName());
-		element_mvt_desc.setFinalDestinationInternalName(element -> pathName());
-		element_mvt_desc.setHandler(handler);
-		
-		element -> move(&element_mvt_desc);
-		
-		// abort si besoin
-		if (element_mvt_desc.mustAbort()) {
-			mvt_desc -> abort();
-			return;
-		}
-		
-		// si l'element n'a pas ete supprime, ...
-		if (!element_mvt_desc.sourceItemWasDeleted()) {
-			// on ne supprimera pas cette categorie
-			if (remove_category) remove_category = false;
-		}
-	}
-	
-	// supprime cette categorie (sinon il ne s'agirait que d'une copie, pas d'un deplacement)
-	if (remove_category) {
-		reload();
-		bool category_deletion = remove();
-		mvt_desc -> setSourceItemDeleted(category_deletion);
-		if (!category_deletion && handler) {
-			handler -> errorWithACategory(this, tr("La suppression de cette catégorie a échoué."));
-		}
-	}
-}
-
-/**
-	@return true si cette collection est vide (pas de sous-categorie, pas
-	d'element), false sinon.
-*/
-bool ElementsCategory::isEmpty() {
-	return(categories().count() || elements().count());
-}
-
-/**
-	@return the count of categories and elements within this collection
-*/
-int ElementsCategory::count() {
-	int items_count = elements().count();
-	foreach(ElementsCategory *category, categories()) {
-		items_count += category -> count();
-	}
-	return(items_count);
-}
-
-/**
-	Methode permettant d'obtenir le nom affichable de cette categorie.
-	@return Le nom affichable de la categorie
-*/
-QString ElementsCategory::name() const {
-	return(category_names.name(pathName()));
-}
-
-/**
-	@return La liste des differents noms possibles pour la categorie
-*/
-NamesList ElementsCategory::categoryNames() const {
-	return(category_names);
-}
-
-/**
-	Vide la liste des noms de la categorie
-*/
-void ElementsCategory::clearNames() {
-	category_names.clearNames();
-}
-
-/**
-	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
-*/
-void ElementsCategory::addName(const QString &lang, const QString &value) {
-	category_names.addName(lang, value);
-}
-
-/**
-	Specifie les noms de la categorie.
-	Tous les noms precedemment connus sont perdus
-*/
-void ElementsCategory::setNames(const NamesList &names_list) {
-	category_names = names_list;
-}

Deleted: trunk/sources/elementscategory.h
===================================================================
--- trunk/sources/elementscategory.h	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/elementscategory.h	2016-05-28 12:59:01 UTC (rev 4533)
@@ -1,88 +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 <http://www.gnu.org/licenses/>.
-*/
-#ifndef ELEMENTS_CATEGORY_H
-#define ELEMENTS_CATEGORY_H
-#include "elementscollectionitem.h"
-#include "nameslist.h"
-#include "elementslocation.h"
-class ElementDefinition;
-class ElementsCollection;
-class MoveElementsHandler;
-class MoveElementsDescription;
-/**
-	This abstract class represents an elements category, i.e. a kind of
-	subfolder within elements collections.
-*/
-class ElementsCategory : public ElementsCollectionItem {
-	Q_OBJECT
-	
-	// constructors, destructor
-	public:
-	ElementsCategory(ElementsCategory * = 0, ElementsCollection * = 0);
-	virtual ~ElementsCategory();
-	
-	private:
-	ElementsCategory(const ElementsCategory &);
-	
-	// Implementations of pure virtual methods from parent classes
-	public:
-	virtual QETProject *project();
-	virtual void setProject(QETProject *);
-	virtual QString protocol();
-	virtual void setProtocol(const QString &);
-	virtual ElementsCategory *parentCategory();
-	virtual QList<ElementsCategory *> parentCategories();
-	virtual bool hasParentCategory();
-	virtual ElementsCollection *parentCollection();
-	virtual bool hasParentCollection();
-	virtual bool isChildOf(ElementsCollectionItem *);
-	virtual QString fullVirtualPath();
-	virtual ElementsLocation location();
-	virtual bool isRootCategory() const;
-	virtual bool isCollection() const;
-	virtual bool isCategory() const;
-	virtual bool isElement() const;
-	virtual ElementsCollection *toCollection();
-	virtual ElementsCategory *toCategory();
-	virtual ElementsCategory *toPureCategory();
-	virtual ElementDefinition *toElement();
-	virtual ElementsCollectionItem *copy(ElementsCategory *, MoveElementsHandler *, bool = true);
-	virtual ElementsCollectionItem *move(ElementsCategory *, MoveElementsHandler *);
-	virtual bool isEmpty();
-	virtual int count();
-	
-	// Methods specific to the ElementsCategory class
-	public:
-	virtual QString name() const;
-	virtual NamesList categoryNames() const;
-	virtual void clearNames();
-	virtual void addName(const QString &, const QString &);
-	virtual void setNames(const NamesList &);
-	void copy(MoveElementsDescription *);
-	void move(MoveElementsDescription *);
-	
-	// attributes
-	protected:
-	/// parent collection
-	ElementsCollection *parent_collection_;
-	/// parent category
-	ElementsCategory   *parent_category_;
-	/// names list for this category
-	NamesList           category_names;
-};
-#endif

Deleted: trunk/sources/elementscollection.cpp
===================================================================
--- trunk/sources/elementscollection.cpp	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/elementscollection.cpp	2016-05-28 12:59:01 UTC (rev 4533)
@@ -1,462 +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 <http://www.gnu.org/licenses/>.
-*/
-#include "elementscollection.h"
-#include "elementscategory.h"
-#include "elementdefinition.h"
-#include "moveelementshandler.h"
-
-/**
-	Constructeur
-	@param parent Item parent
-*/
-ElementsCollection::ElementsCollection(ElementsCollectionItem *parent) :
-	ElementsCollectionItem(parent),
-	cache_(0)
-{
-}
-
-/**
-	Destructeur
-*/
-ElementsCollection::~ElementsCollection() {
-}
-
-/**
-	@return the title for this collection
-*/
-QString ElementsCollection::title() const {
-	return(title_);
-}
-
-/**
-	@param title New title for this collection
-*/
-void ElementsCollection::setTitle(const QString &title) {
-	if (title_ == title) return;
-	title_ = title;
-	emit(elementsCollectionChanged(this));
-}
-
-/**
-	@return the icon for this collection
-*/
-QIcon ElementsCollection::icon() const {
-	return(icon_);
-}
-
-/**
-	@param icon the icon for this collection
-*/
-void ElementsCollection::setIcon(const QIcon &icon) {
-	if (icon_.cacheKey() == icon.cacheKey()) return;
-	icon_ = icon;
-	emit(elementsCollectionChanged(this));
-}
-
-/**
-	@return toujours true
-*/
-bool ElementsCollection::isCollection() const {
-	return(true );
-}
-
-/**
-	@return toujours false
-*/
-bool ElementsCollection::isRootCategory() const {
-	return(false);
-}
-
-/**
-	@return toujours false
-*/
-bool ElementsCollection::isCategory()  const {
-	return(false);
-}
-
-/**
-	@return toujours false
-*/
-bool ElementsCollection::isElement() const {
-	return(false);
-}
-
-/**
-	@return un pointeur ElementsCollection * sur cette collection
-*/
-ElementsCollection *ElementsCollection::toCollection() {
-	return(this);
-}
-
-/**
-	@return un pointeur vers la categorie racine de cette collection
-*/
-ElementsCategory *ElementsCollection::toCategory() {
-	return(rootCategory());
-}
-
-/**
-	@return toujours 0 - une collection n'est pas a proprement parler une
-	categorie
-*/
-ElementsCategory *ElementsCollection::toPureCategory() {
-	return(0);
-}
-
-/**
-	@return toujours 0 - une collection n'est pas un element
-*/
-ElementDefinition *ElementsCollection::toElement() {
-	return(0);
-}
-
-/**
-	@param target_category Categorie cible pour la copie ; la categorie racine
-	de cette collection sera copiee en tant que sous-categorie de la categorie
-	cible
-	@param handler Gestionnaire d'erreurs a utiliser pour effectuer la copie
-	@param deep_copy true pour copier recursivement le contenu (elements et
-	sous-categories) de la categorie racine, false sinon
-	@return La copie de la categorie, ou 0 si le processus a echoue.
-*/
-ElementsCollectionItem *ElementsCollection::copy(ElementsCategory *target_category, MoveElementsHandler *handler, bool deep_copy) {
-	if (ElementsCategory *root = rootCategory()) {
-		return(root -> copy(target_category, handler, deep_copy));
-	}
-	return(0);
-}
-
-/**
-	Il n'est pas possible de deplacer une collection. Cette methode demande
-	simplement au gestionnaire d'erreur handler d'afficher un message.
-*/
-ElementsCollectionItem *ElementsCollection::move(ElementsCategory *, MoveElementsHandler *handler) {
-	if (ElementsCategory *root = rootCategory()) {
-		if (handler) {
-			handler -> errorWithACategory(root, tr("Il n'est pas possible de déplacer une collection."));
-		}
-	}
-	return(0);
-}
-
-
-/**
-	Vide la collection de son contenu sans la supprimer
-	@return true si l'operation a reussi, false sinon
-*/
-bool ElementsCollection::removeContent() {
-	if (!rootCategory()) return(true);
-	
-	// demande a la categorie racine de supprimer son contenu
-	return(rootCategory() -> removeContent());
-}
-
-/**
-	Vide la collection de son contenu sans la supprimer
-	@return true si l'operation a reussi, false sinon
-*/
-bool ElementsCollection::remove() {
-	return(removeContent());
-}
-
-/**
-	@return le projet auquel est rattachee cette collection ou 0 si
-	celle-ci n'est pas liee a un projet.
-*/
-QETProject *ElementsCollection::project() {
-	return(project_);
-}
-
-/**
-	@param project le nouveau projet auquel est rattachee cette collection
-	Indiquer 0 pour que cette collection ne soit plus liee a un projet.
-*/
-void ElementsCollection::setProject(QETProject *project) {
-	project_ = project;
-}
-
-/**
-	@return le protocole utilise par cette collection ; exemples :
-	"common" pour la collection commune qui utilise des URLs en common://
-	"custom" pour la collection perso qui utilise des URLs en custom://
-	"embed" pour une collection embarquee qui utilise des URLs en embed://
-*/
-QString ElementsCollection::protocol() {
-	return(protocol_);
-}
-
-/**
-	Definit le protocole de cette collection
-	@param p Nouveau protocole de cette collection
-*/
-void ElementsCollection::setProtocol(const QString &p) {
-	if (!p.isEmpty()) protocol_ = p;
-}
-
-/**
-	@return toujours 0 - une collection n'a pas de categorie parente. En
-	revanche, elle peut posseder un projet parent.
-	@see project()
-*/
-ElementsCategory *ElementsCollection::parentCategory() {
-	return(0);
-}
-
-/**
-	@return toujours une liste vide - une collection n'a pas de categorie
-	parente. En revanche, elle peut posseder un projet parent.
-	@see project()
-*/
-QList<ElementsCategory *> ElementsCollection::parentCategories() {
-	return(QList<ElementsCategory *>());
-}
-
-/**
-	@return toujours false0 - une collection n'a pas de categorie parente. En
-	revanche, elle peut posseder un projet parent.
-	@see project()
-*/
-bool ElementsCollection::hasParentCategory() {
-	return(false);
-}
-
-/**
-	@return toujours 0 - une collection n'a pas de collection parente. En
-	revanche, elle peut posseder un projet parent.
-	@see project()
-*/
-ElementsCollection *ElementsCollection::parentCollection() {
-	return(0);
-}
-
-/**
-	@return toujours false - une collection n'a pas de collection parente. En
-	revanche, elle peut posseder un projet parent.
-	@see project()
-*/
-bool ElementsCollection::hasParentCollection() {
-	return(false);
-}
-
-/**
-	@return toujours false - une collection ne peut etre l'enfant de quoi que ce
-	soit.
-*/
-bool ElementsCollection::isChildOf(ElementsCollectionItem *) {
-	return(false);
-}
-
-/**
-	@return toujours une chaine vide
-*/
-QString ElementsCollection::pathName() const {
-	return(QString());
-}
-
-/**
-	@return toujours une chaine vide
-*/
-QString ElementsCollection::virtualPath() {
-	return(QString());
-}
-
-/**
-	@return le protocole suivi de :// ou une chaine vide si cette collection
-	n'a pas de protocole defini.
-*/
-QString ElementsCollection::fullVirtualPath() {
-	if (protocol().isEmpty()) return(QString());
-	return(protocol() + "://");
-}
-
-/**
-	@return l'emplacement de cette collection
-*/
-ElementsLocation ElementsCollection::location() {
-	return(ElementsLocation(fullVirtualPath(), project()));
-}
-
-/**
-	@return une liste ne contenant que la categorie racine de la collection
-*/
-QList<ElementsCategory *> ElementsCollection::categories() {
-	QList<ElementsCategory *> result;
-	if (ElementsCategory *root = rootCategory()) {
-		result << root;
-	}
-	return(result);
-}
-
-/**
-	@param cat_path chemin d'une categorie sous la forme d'une adresse
-	virtuelle comme common://cat1/cat2/cat3
-	@return la categorie demandee, ou 0 si celle-ci n'a pas ete trouvee
-*/
-ElementsCategory *ElementsCollection::category(const QString &cat_path) {
-	ElementsCategory *root = rootCategory();
-	// on doit avoir une categorie racine
-	if (!root) return(0);
-	
-	// le protocole de l'adresse virtuelle doit correspondre
-	if (!cat_path.startsWith(protocol_ + "://", Qt::CaseInsensitive)) return(0);
-	
-	// on enleve le protocole
-	QString cat_path_(cat_path);
-	cat_path_.remove(QRegExp("^" + protocol_ + ":\\/\\/", Qt::CaseInsensitive));
-	
-	// on fait appel a la categorie racine pour le reste du traitement
-	return(root -> category(cat_path_));
-}
-
-/**
-	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 *ElementsCollection::createCategory(const QString &path) {
-	ElementsCategory *root = rootCategory();
-	// on doit avoir une categorie racine
-	if (!root) return(0);
-	
-	// on ne doit pas etre en lecture seule
-	if (!isWritable()) return(0);
-	
-	// le protocole de l'adresse virtuelle doit correspondre
-	if (!path.startsWith(protocol_ + "://", Qt::CaseInsensitive)) return(0);
-	
-	// on enleve le protocole
-	QString path_(path);
-	path_.remove(QRegExp("^" + protocol_ + ":\\/\\/", Qt::CaseInsensitive));
-	
-	// on fait appel a la categorie racine pour le reste du traitement
-	return(root -> createCategory(path_));
-}
-
-/**
-	@return une liste vide
-*/
-QList<ElementDefinition *> ElementsCollection::elements() {
-	return(QList<ElementDefinition *>());
-}
-
-/**
-	@param elmt_path chemin d'un element sous la forme d'une adresse
-	virtuelle comme common://cat1/cat2/cat3/dog.elmt
-	@return l'element demande, ou 0 si celui-ci n'a pas ete trouve
-*/
-ElementDefinition *ElementsCollection::element(const QString &elmt_path) {
-	ElementsCategory *root = rootCategory();
-	// on doit avoir une categorie racine
-	if (!root) return(0);
-	
-	// le protocole de l'adresse virtuelle doit correspondre
-	if (!elmt_path.startsWith(protocol_ + "://", Qt::CaseInsensitive)) return(0);
-	
-	// on enleve le protocole
-	QString elmt_path_(elmt_path);
-	elmt_path_.remove(QRegExp("^" + protocol_ + ":\\/\\/", Qt::CaseInsensitive));
-	
-	// on fait appel a la categorie racine pour le reste du traitement
-	return(root -> element(elmt_path_));
-}
-
-/**
-	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 *ElementsCollection::createElement(const QString &path) {
-	ElementsCategory *root = rootCategory();
-	// on doit avoir une categorie racine
-	if (!rootCategory()) return(0);
-	
-	// on ne doit pas etre en lecture seule
-	if (!isWritable()) return(0);
-	
-	// le protocole de l'adresse virtuelle doit correspondre
-	if (!path.startsWith(protocol_ + "://", Qt::CaseInsensitive)) return(0);
-	
-	// on enleve le protocole
-	QString path_(path);
-	path_.remove(QRegExp("^" + protocol_ + ":\\/\\/", Qt::CaseInsensitive));
-	
-	// on fait appel a la categorie racine pour le reste du traitement
-	return(root -> createElement(path_));
-}
-
-/**
-	@return true si cette collection est vide (pas de sous-categorie, pas
-	d'element), false sinon.
-*/
-bool ElementsCollection::isEmpty() {
-	ElementsCategory *root_category = rootCategory();
-	if (!root_category) return(true);
-	return(root_category -> isEmpty());
-}
-
-/**
-	@return the count of categories and elements within this collection
-*/
-int ElementsCollection::count() {
-	ElementsCategory *root_category = rootCategory();
-	if (!root_category) return(0);
-	return(root_category -> count());
-}
-
-/**
-	@param item_path chemin d'un item sous la forme d'une adresse
-	virtuelle comme common://cat1/cat2/cat3
-	@param prefer_collections true pour renvoyer la collection lorsque le
-	chemin correspond aussi bien a une collection qu'a sa categorie racine
-	@return l'item demande, ou 0 si celui-ci n'a pas ete trouve
-*/
-ElementsCollectionItem *ElementsCollection::item(const QString &item_path, bool prefer_collections) {
-	ElementsCollectionItem *result = 0;
-	
-	// essaye de trouver l'item en tant que categorie
-	result = category(item_path);
-	// si la categorie est trouvee, ...
-	if (result) {
-		// ... qu'il s'agit d'une categorie racine et que l'utilisateur prefere les collections
-		if (prefer_collections && result -> isRootCategory()) {
-			// ... alors on renvoie la collection et non la categorie
-			result = this;
-		}
-	}
-	
-	// sinon essaye de trouver l'item en tant qu'element
-	if (!result) result = element(item_path);
-	
-	return(result);
-}
-
-/**
-	@return The cache used by this collection, or 0 if this collection does not have any
-*/
-ElementsCollectionCache *ElementsCollection::cache() const {
-	return(cache_);
-}
-
-/**
-	@param cache The cache to be used by this collection
-*/
-void ElementsCollection::setCache(ElementsCollectionCache *cache) {
-	cache_ = cache;
-}

Deleted: trunk/sources/elementscollection.h
===================================================================
--- trunk/sources/elementscollection.h	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/elementscollection.h	2016-05-28 12:59:01 UTC (rev 4533)
@@ -1,111 +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 <http://www.gnu.org/licenses/>.
-*/
-#ifndef ELEMENTS_COLLECTION_H
-#define ELEMENTS_COLLECTION_H
-#include <QtCore>
-#include <QIcon>
-#include "elementscollectionitem.h"
-class QETProject;
-class ElementsCategory;
-class ElementsCollectionCache;
-class ElementDefinition;
-class MoveElementsHandler;
-/**
-	This abstract class represents an elements collection. For instance, it may
-	represent the collection provided along with QElectroTech, users custom
-	collections or collections embedded within QET project files.
-*/
-class ElementsCollection : public ElementsCollectionItem {
-	Q_OBJECT
-	public:
-	// constructors, destructor
-	ElementsCollection(ElementsCollectionItem * = 0);
-	virtual ~ElementsCollection();
-	
-	private:
-	ElementsCollection(const ElementsCollection &);
-	
-	// Implementations of pure virtual methodes from parent classes
-	public:
-	virtual QString title() const;
-	virtual void setTitle(const QString &);
-	virtual QIcon icon() const;
-	virtual void setIcon(const QIcon &);
-	virtual bool isCollection() const;
-	virtual bool isRootCategory() const;
-	virtual bool isCategory()  const;
-	virtual bool isElement() const;
-	virtual ElementsCollection *toCollection();
-	virtual ElementsCategory *toCategory();
-	virtual ElementsCategory *toPureCategory();
-	virtual ElementDefinition *toElement();
-	virtual ElementsCollectionItem *copy(ElementsCategory *, MoveElementsHandler *, bool = true);
-	virtual ElementsCollectionItem *move(ElementsCategory *, MoveElementsHandler *);
-	virtual bool removeContent();
-	virtual bool remove();
-	virtual QETProject *project();
-	virtual void setProject(QETProject *);
-	virtual QString protocol();
-	virtual void setProtocol(const QString &);
-	virtual ElementsCategory *parentCategory();
-	virtual QList<ElementsCategory *> parentCategories();
-	virtual bool hasParentCategory();
-	virtual ElementsCollection *parentCollection();
-	virtual bool hasParentCollection();
-	virtual bool isChildOf(ElementsCollectionItem *);
-	virtual QString pathName() const;
-	virtual QString virtualPath();
-	virtual QString fullVirtualPath();
-	virtual ElementsLocation location();
-	virtual QList<ElementsCategory *> categories();
-	virtual ElementsCategory *category(const QString &);
-	virtual ElementsCategory *createCategory(const QString &);
-	virtual QList<ElementDefinition *> elements();
-	virtual ElementDefinition *element(const QString &);
-	virtual ElementDefinition *createElement(const QString &);
-	virtual bool isEmpty();
-	virtual int count();
-	
-	// Methods specific to the ElementsCollection class
-	public:
-	/**
-		@return the root category of this collection
-	*/
-	virtual ElementsCategory *rootCategory() = 0;
-	virtual ElementsCollectionItem *item(const QString &, bool = true);
-	virtual bool isCacheable() const = 0;
-	virtual ElementsCollectionCache *cache() const;
-	virtual void setCache(ElementsCollectionCache *);
-	
-	signals:
-	void elementsCollectionChanged(ElementsCollection *);
-	
-	// attributes
-	protected:
-	/// Title to be used when referring to this collection
-	QString title_;
-	/// Icon to be displayed when representing this collection
-	QIcon icon_;
-	/// "Protocol" used to access this collection
-	QString protocol_;
-	/// Project this collection belongs to, if any
-	QETProject *project_;
-	/// Optional cache used to improve performance
-	ElementsCollectionCache *cache_;
-};
-#endif

Modified: trunk/sources/elementscollectioncache.cpp
===================================================================
--- trunk/sources/elementscollectioncache.cpp	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/elementscollectioncache.cpp	2016-05-28 12:59:01 UTC (rev 4533)
@@ -16,9 +16,6 @@
 	along with QElectroTech.  If not, see <http://www.gnu.org/licenses/>.
 */
 #include "elementscollectioncache.h"
-#include "elementscollection.h"
-#include "elementscategory.h"
-#include "elementdefinition.h"
 #include "factory/elementfactory.h"
 #include "element.h"
 #include "qet.h"
@@ -152,73 +149,6 @@
 }
 
 /**
-	Indicate the cache a new collection is about to be browsed. This is mainly
-	used to delimit database transactions.
-	@param collection The elements collection about to be browsed.
-*/
-void ElementsCollectionCache::beginCollection(ElementsCollection *collection) {
-	bool use_cache = cache_db_.isOpen() && collection -> isCacheable();
-	if (use_cache) {
-		bool transaction_started = cache_db_.transaction();
-		qDebug() << (transaction_started ? "transaction began for " : "transaction not started for ") << collection -> protocol();
-	}
-}
-
-/**
-	Indicate the cache the currently browsed collection end has been reached. This
-	is mainly used to delimit database transactions.
-	@param collection The elements collection being browsed.
-*/
-void ElementsCollectionCache::endCollection(ElementsCollection *collection) {
-	bool use_cache = cache_db_.isOpen() && collection -> isCacheable();
-	if (use_cache) {
-		bool transaction_commited = cache_db_.commit();
-		if (transaction_commited) {
-			qDebug() << "transaction commited for " << collection -> protocol();
-		} else {
-			qDebug() << "transaction not commited for " << collection -> protocol() << ":" << cache_db_.lastError();
-		}
-	}
-}
-
-/**
-	Retrieve the data for a given element, using the cache if available,
-	filling it otherwise. Data are then available through pixmap() and name()
-	methods.
-	@param element The definition of an element.
-	@see pixmap()
-	@see name()
-	@return True if the retrieval succeeded, false otherwise.
-*/
-bool ElementsCollectionCache::fetchElement(ElementDefinition *element)
-{
-		// can we use the cache with this element?
-	bool use_cache = cache_db_.isOpen() && element -> parentCollection() -> isCacheable();
-	
-		// attempt to fetch the element name from the cache database
-	if (!use_cache)
-	{
-		return(fetchData(element -> location()));
-	}
-	else
-	{
-		QString element_path = element -> location().toString();
-		bool got_name   = fetchNameFromCache(element_path, element->uuid());
-		bool got_pixmap = fetchPixmapFromCache(element_path, element->uuid());
-		if (got_name && got_pixmap)
-		{
-			return(true);
-		}
-		if (fetchData(element -> location()))
-		{
-			cacheName(element_path, element->uuid());
-			cachePixmap(element_path, element->uuid());
-		}
-		return(true);
-	}
-}
-
-/**
  * @brief ElementsCollectionCache::fetchElement
  * Retrieve the data for a given element, using the cache if available,
  * filling it otherwise. Data are then available through pixmap() and name() methods.

Modified: trunk/sources/elementscollectioncache.h
===================================================================
--- trunk/sources/elementscollectioncache.h	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/elementscollectioncache.h	2016-05-28 12:59:01 UTC (rev 4533)
@@ -21,9 +21,6 @@
 #include <QSqlDatabase>
 #include "elementslocation.h"
 
-class ElementsCollection;
-class ElementsCategory;
-class ElementDefinition;
 /**
 	This class implements a SQLite cache for data related to elements
 	collections, mainly names and pixmaps. This avoids the cost of parsing XML
@@ -43,9 +40,6 @@
 	QString locale() const;
 	bool setPixmapStorageFormat(const QString &);
 	QString pixmapStorageFormat() const;
-	void beginCollection(ElementsCollection *);
-	void endCollection(ElementsCollection *);
-	bool fetchElement(ElementDefinition *);
 	bool fetchElement(ElementsLocation &location);
 	QString name() const;
 	QPixmap pixmap() const;

Deleted: trunk/sources/elementscollectionitem.h
===================================================================
--- trunk/sources/elementscollectionitem.h	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/elementscollectionitem.h	2016-05-28 12:59:01 UTC (rev 4533)
@@ -1,212 +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 <http://www.gnu.org/licenses/>.
-*/
-#ifndef ELEMENTS_COLLECTION_ITEM_H
-#define ELEMENTS_COLLECTION_ITEM_H
-#include <QtCore>
-#include "elementslocation.h"
-class ElementsCollection;
-class ElementsCategory;
-class ElementDefinition;
-class MoveElementsHandler;
-/**
-	This interface is the base class for all classes representing a part of an
-	elements collection.
-*/
-class ElementsCollectionItem : public QObject {
-	Q_OBJECT
-	
-	// constructors, destructor
-	public:
-	ElementsCollectionItem(ElementsCollectionItem *parent = 0) : QObject(parent) {};
-	virtual ~ElementsCollectionItem() {};
-	
-	private:
-	ElementsCollectionItem(const ElementsCollectionItem &);
-	
-	// methods
-	public:
-	/// @return whether the item is an elements collection
-	virtual bool isCollection() const = 0;
-	/// @return whether the item is an elements category
-	virtual bool isCategory() const = 0;
-	/// @return whether the item is the root category of a collection
-	virtual bool isRootCategory() const = 0;
-	/// @return whether the item is an element
-	virtual bool isElement() const = 0;
-	
-	/**
-		@return a pointer to this item as a collection object, or 0 if this item is not a collection.
-	*/
-	virtual ElementsCollection *toCollection() = 0;
-	/**
-		@return a pointer to this item as a category object.
-		If this item is a collection, return a valid pointer to its root category.
-		If this item is a category, return a valid pointer.
-		If this item is an element, return a valid pointer to its parent category.
-	*/
-	virtual ElementsCategory *toCategory() = 0;
-	/**
-		@return a pointer to this item as a category if and only if this object is a non-root elements category.
-		If this item is a collection, return 0.
-		If this item is a category, return a valid pointer.
-		If this item is an element, return 0.
-	*/
-	virtual ElementsCategory *toPureCategory() = 0;
-	/**
-		@return a pointer to this item as an element object.
-	*/
-	virtual ElementDefinition *toElement() = 0;
-	
-	/**
-		Copy this item to the specified target, using a specific strategy to handle
-		corner cases (errors, conflicts, confirmations, ...), recursively or not.
-	*/
-	virtual ElementsCollectionItem *copy(ElementsCategory *, MoveElementsHandler *, bool = true) = 0;
-	
-	/**
-		Move this item to the specified destination, using a specific strategy to
-		handle corner cases (errors, conflicts, confirmations, ...).
-	*/
-	virtual ElementsCollectionItem *move(ElementsCategory *, MoveElementsHandler *) = 0;
-	
-	/// Reload this item
-	virtual void reload() = 0;
-	/// @return whether the item really exists
-	virtual bool exists() = 0;
-	/// @return whether the item is readable
-	virtual bool isReadable() = 0;
-	/// @return whether the item is writable
-	virtual bool isWritable() = 0;
-	/**
-		Delete the item content (elements and subcategories) without deleting the item itself.
-		@return true if the operation succeeded, false otherwise
-	*/
-	virtual bool removeContent() = 0;
-	/**
-		Delete the item content (elements and categories) before deleting the item itself.
-		@return true if the operation succeeded, false otherwise
-	*/
-	virtual bool remove() = 0;
-	/**
-		Save the item.
-		@return true if the operation succeeded, false otherwise
-	*/
-	virtual bool write() = 0;
-	/**
-		@return the project this item belongs to
-	*/
-	virtual QETProject *project() = 0;
-	/**
-		Set the project this item belongs to.
-	*/
-	virtual void setProject(QETProject *) = 0;
-	/**
-		@return the protocol used to access the collection this item belongs to.
-	*/
-	virtual QString protocol() = 0;
-	/**
-		Set the protocol used to access the collection this item belongs to.
-	*/
-	virtual void setProtocol(const QString &) = 0;
-	/**
-		@return the parent category of this item, or 0 if it does not have any
-	*/
-	virtual ElementsCategory *parentCategory() = 0;
-	/**
-		@return the list of parent categories of this item
-	*/
-	virtual QList<ElementsCategory *> parentCategories() = 0;
-	/**
-		@return whether this item has a parent category
-	*/
-	virtual bool hasParentCategory() = 0;
-	/**
-		@return the parent collection of this item, or 0 if it does not have any
-	*/
-	virtual ElementsCollection *parentCollection() = 0;
-	/**
-		@return whether this item belongs to an elements collection
-	*/
-	virtual bool hasParentCollection() = 0;
-	/**
-		@param other_item other item
-		@return whether \a other_item is a direct or indirect parent of this item.
-	*/
-	virtual bool isChildOf(ElementsCollectionItem *other_item) = 0;
-	/**
-		@return the name of this item within the elements tree.
-	*/
-	virtual QString pathName() const = 0;
-	/**
-		@return the virtual path to this item within the elements tree, protocol excluded.
-	*/
-	virtual QString virtualPath() = 0;
-	/**
-		@return the virtual path to this item within the elements tree, protocol included.
-	*/
-	virtual QString fullVirtualPath() = 0;
-	/**
-		@return the location of this item
-	*/
-	virtual ElementsLocation location() = 0;
-	/**
-		@return whether this item is stored somewhere on the filesystem.
-	*/
-	virtual bool hasFilePath() = 0;
-	/**
-		@return the path of this item within the filesystem
-	*/
-	virtual QString filePath() = 0;
-	/**
-		Set the path to this item within the filesystem.
-	*/
-	virtual void setFilePath(const QString &) = 0;
-	/**
-		@return the list of direct child elements category within this item
-	*/
-	virtual QList<ElementsCategory *> categories() = 0;
-	/**
-		@return the specified category, provided its virtual path
-	*/
-	virtual ElementsCategory *category(const QString &) = 0;
-	/**
-		@return a new category, created from the spcified virtual path
-	*/
-	virtual ElementsCategory *createCategory(const QString &) = 0;
-	/**
-		@return the list of child elements within this item
-	*/
-	virtual QList<ElementDefinition *> elements() = 0;
-	/**
-		@return an element, provided its virtual path
-	*/
-	virtual ElementDefinition *element(const QString &) = 0;
-	/**
-		@return a new element, created from the specified virtual path
-	*/
-	virtual ElementDefinition *createElement(const QString &) = 0;
-	/**
-		@return whether the item is empty
-	*/
-	virtual bool isEmpty() = 0;
-	/**
-		@return the count of categories and elements within this item
-	*/
-	virtual int count() = 0;
-};
-#endif

Modified: trunk/sources/elementspanelwidget.cpp
===================================================================
--- trunk/sources/elementspanelwidget.cpp	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/elementspanelwidget.cpp	2016-05-28 12:59:01 UTC (rev 4533)
@@ -16,7 +16,6 @@
 	along with QElectroTech.  If not, see <http://www.gnu.org/licenses/>.
 */
 #include "elementspanelwidget.h"
-#include "elementscollectionitem.h"
 #include "qetelementeditor.h"
 #include "elementscategoryeditor.h"
 #include "qetapp.h"

Deleted: trunk/sources/fileelementdefinition.cpp
===================================================================
--- trunk/sources/fileelementdefinition.cpp	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/fileelementdefinition.cpp	2016-05-28 12:59:01 UTC (rev 4533)
@@ -1,224 +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 <http://www.gnu.org/licenses/>.
-*/
-#include "elementscollectioncache.h"
-#include "fileelementdefinition.h"
-#include "fileelementscategory.h"
-#include "fileelementscollection.h"
-#include "qetapp.h"
-#include "qet.h"
-
-/**
-	Constructeur
-	@param uri Chemin du fichier contenant la definition de l'element
-	@param category Categorie parente
-	@param collection collection parente
-*/
-FileElementDefinition::FileElementDefinition(const QString &uri, FileElementsCategory *category, FileElementsCollection *collection) :
-	ElementDefinition(category, collection),
-	is_null(true),
-	file_path(uri)
-{
-	reload();
-}
-
-/**
-	Destructeur
-*/
-FileElementDefinition::~FileElementDefinition() {
-}
-
-/**
-	@return la definition XML de l'element
-*/
-QDomElement FileElementDefinition::xml() {
-	// ouvre le fichier
-	QFile file(file_path);
-	
-	// charge le contenu du fichier en s'attendant a du XML
-	is_null = !xml_element_.setContent(&file);
-	if (is_null) {
-		return(QDomElement());
-	} else {
-		// l'ouverture de la definition a reussi
-		return(xml_element_.documentElement());
-	}
-}
-
-/**
-	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 FileElementDefinition::setXml(const QDomElement &xml_element) {
-	xml_element_.clear();
-	xml_element_.appendChild(xml_element_.importNode(xml_element, true));
-	is_null = false;
-	return(true);
-}
-
-/**
-	Enregistre la definition de l'element.
-	@return true si l'operation a reussi, false sinon
-*/
-bool FileElementDefinition::write() {
-	return(QET::writeXmlFile(xml_element_, file_path));
-}
-
-/**
-	@return true si la definition n'est pas disponible
-*/
-bool FileElementDefinition::isNull() const {
-	return(is_null);
-}
-
-/**
-	@return Le nom de cet element dans l'arborescence
-*/
-QString FileElementDefinition::pathName() const {
-	return(QFileInfo(file_path).fileName());
-}
-
-/**
-	@return le chemin virtuel de cet element
-*/
-QString FileElementDefinition::virtualPath() {
-	// il n'est pas possible d'avoir un chemin virtuel sans appartenir a une collection
-	if (!hasParentCollection()) return(QString());
-	// recupere le chemin absolu de la racine de la collection
-	QString root_abs_path(parentCollection() -> filePath());
-	
-	if (!file_path.startsWith(root_abs_path)) return(QString());
-	QString virtual_path(file_path);
-	virtual_path.remove(root_abs_path);
-	virtual_path.remove(QRegExp("^/"));
-	return(virtual_path);
-}
-
-/**
- * @brief FileElementDefinition::reload
- * Reload this file element definition
- */
-void FileElementDefinition::reload()
-{
-	if (file_path.isEmpty())
-	{
-		is_null = true;
-		return;
-	}
-	
-	// recupere le chemin du fichier *.elmt correspondant
-	QFileInfo file_info(file_path);
-	if (!file_info.exists() || !file_info.isReadable())
-	{
-		is_null = true;
-		return;
-	}
-	file_path = file_info.canonicalFilePath();
-	
-	if (parentCollection())
-	{
-		ElementsCollectionCache *cache = parentCollection() -> cache();
-		if (cache && cache -> fetchNameFromCache(location().toString(), uuid()))
-		{
-			// the element file has not been modified since the last time
-			// we put its name in cache: we do not need to load it.
-			is_null = false;
-			return;
-		}
-	}
-	
-	// we need to ensure this is a valid XML document
-	QFile file(file_path);
-	QDomDocument xml_document;
-	is_null = !xml_document.setContent(&file);
-	xml_document.clear();
-}
-
-/**
-	@return true si le fichier existe, false sinon
-*/
-bool FileElementDefinition::exists() {
-	if (isNull()) return(false);
-	return(QFileInfo(file_path).exists());
-}
-
-/**
-	@return true si le fichier representant l'element est accessible en
-	lecture.
-*/
-bool FileElementDefinition::isReadable() {
-	if (isNull()) return(false);
-	return(QFileInfo(file_path).isReadable());
-}
-
-/**
-	@return true si le fichier representant l'element est accessible en
-	ecriture.
-*/
-bool FileElementDefinition::isWritable() {
-	if (isNull()) return(false);
-	return(QFileInfo(file_path).isWritable());
-}
-
-/**
-	Supprime le fichier representant l'element
-	@return true si l'operation s'est bien passee, false sinon
-*/
-bool FileElementDefinition::remove() {
-	QFile elmt_file(file_path);
-	if (!elmt_file.exists()) return(true);
-	return(elmt_file.remove());
-}
-
-/**
-	@return true si cet element est represente quelque part sur le systeme de
-	fichiers
-*/
-bool FileElementDefinition::hasFilePath() {
-	return(!file_path.isEmpty());
-}
-
-/**
-	@return le fichier representant cet element sur le systeme de fichiers
-*/
-QString FileElementDefinition::filePath() {
-	return(file_path);
-}
-
-/**
-	Definit le nouveau chemin de cet element dans le systeme de fichiers
-*/
-void FileElementDefinition::setFilePath(const QString &path) {
-	// recupere le chemin du fichier *.elmt correspondant
-	QFileInfo file_info(path);
-	if (!file_info.exists() || !file_info.isReadable()) {
-		return;
-	}
-	file_path = file_info.canonicalFilePath();
-}
-
-/**
-	@return the time of the last modification (mtime) for this element file
-*/
-QDateTime FileElementDefinition::modificationTime() const {
-	QFileInfo file_info(file_path);
-	if (!file_info.exists() || !file_info.isReadable()) {
-		return QDateTime();
-	}
-	return(file_info.lastModified());
-}

Deleted: trunk/sources/fileelementdefinition.h
===================================================================
--- trunk/sources/fileelementdefinition.h	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/fileelementdefinition.h	2016-05-28 12:59:01 UTC (rev 4533)
@@ -1,59 +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 <http://www.gnu.org/licenses/>.
-*/
-#ifndef FILE_ELEMENT_DEFINITION
-#define FILE_ELEMENT_DEFINITION
-#include <QtCore>
-#include "elementdefinition.h"
-class FileElementsCategory;
-class FileElementsCollection;
-/**
-	This class represents an element definition stored into a file.
-*/
-class FileElementDefinition : public ElementDefinition {
-	public:
-	FileElementDefinition(const QString &, FileElementsCategory * = 0, FileElementsCollection * = 0);
-	virtual ~FileElementDefinition();
-	
-	private:
-	FileElementDefinition(const FileElementDefinition &);
-	
-	// 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;
-	
-	// attributes
-	private:
-	bool is_null;
-	QString file_path;
-	QDomDocument xml_element_;
-};
-#endif

Deleted: trunk/sources/fileelementscategory.cpp
===================================================================
--- trunk/sources/fileelementscategory.cpp	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/fileelementscategory.cpp	2016-05-28 12:59:01 UTC (rev 4533)
@@ -1,484 +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 <http://www.gnu.org/licenses/>.
-*/
-#include "fileelementscategory.h"
-#include "fileelementscollection.h"
-#include "fileelementdefinition.h"
-#include "qet.h"
-
-/**
-	Constructeur
-	@param path Chemin du dossier de la categorie
-	@param parent Categorie parente
-	@param coll Collection parente
-*/
-FileElementsCategory::FileElementsCategory(const QString &path, FileElementsCategory *parent, FileElementsCollection *coll) :
-	ElementsCategory(parent, coll),
-	file_parent_collection_(coll),
-	file_parent_category_(parent),
-	cat_dir(path)
-{
-	reload();
-}
-
-/**
-	Destructeur
-*/
-FileElementsCategory::~FileElementsCategory() {
-	deleteContent();
-}
-
-/**
-	@return le nom de la categorie utilisable dans un chemin (virtuel ou reel)
-*/
-QString FileElementsCategory::pathName() const {
-	return(cat_dir.dirName());
-}
-
-/**
-	@return le chemin virtuel de la categorie, sans le protocole
-*/
-QString FileElementsCategory::virtualPath() {
-	
-	// il n'est pas possible d'avoir un chemin virtuel sans appartenir a une collection
-	if (!hasParentCollection()) return(QString());
-	
-	// recupere le chemin absolu de la racine de la collection
-	QString root_abs_path(parentCollection() -> filePath());
-	if (!filePath().startsWith(root_abs_path)) return(QString());
-	
-	QString virtual_path(filePath());
-	virtual_path.remove(root_abs_path);
-	virtual_path.remove(QRegExp("^/"));
-	return(virtual_path);
-}
-
-/**
-	@return true si la categorie possede un chemin sur un systeme de fichiers
-*/
-bool FileElementsCategory::hasFilePath() {
-	return(!filePath().isEmpty());
-}
-
-/**
-	@return le chemin sur le systeme de fichiers de la categorie
-*/
-QString FileElementsCategory::filePath() {
-	return(cat_dir.path());
-}
-
-/**
-	Definit le chemin du dossier representant la categorie
-	@param p nouveau chemin du dossier representant la categorie
-*/
-void FileElementsCategory::setFilePath(const QString &p) {
-	cat_dir.setPath(p);
-}
-
-/**
-	@return la liste des sous-categories de la categorie
-*/
-QList<ElementsCategory *> FileElementsCategory::categories() {
-	QList<ElementsCategory *> result;
-	
-	QList<QString> keys(categories_.keys());
-	qSort(keys.begin(), keys.end());
-	foreach(QString key, keys) result << categories_[key];
-	
-	return(result);
-}
-
-/**
-	@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 *FileElementsCategory::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 *FileElementsCategory::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
-		FileElementsCategory *new_category = new FileElementsCategory(
-			cat_dir.absolutePath() + "/" + path_parts[0],
-			this,
-			file_parent_collection_
-		);
-		
-		// on l'integre dans la liste des sous-categories connues
-		categories_.insert(path_parts[0], new_category);
-		
-		// 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<ElementDefinition *> FileElementsCategory::elements() {
-	QList<ElementDefinition *> result;
-	
-	QList<QString> keys(elements_.keys());
-	qSort(keys.begin(), keys.end());
-	foreach(QString key, keys) result << elements_[key];
-	
-	return(result);
-}
-
-/**
-	@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 *FileElementsCategory::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 *FileElementsCategory::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
-		FileElementDefinition *new_element = new FileElementDefinition(
-			cat_dir.absolutePath() + "/" + path_parts[0],
-			this,
-			file_parent_collection_
-		);
-		
-		// on l'integre dans la liste des elements connus
-		elements_.insert(path_parts[0], new_element);
-		
-		// 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 le dossier representant la categorie existe
-*/
-bool FileElementsCategory::exists() {
-	return(cat_dir.exists());
-}
-
-/**
-	@return true si la categorie est accessible en lecture
-	Cett methode retourne true a partir du moment ou le dossier representant
-	cette categorie est accessible en lecture. Il se peut que les elements ou
-	le fichier qet_directory a l'interieur ne soient pas accessibles en
-	ecriture.
-*/
-bool FileElementsCategory::isReadable() {
-	return(QFileInfo(cat_dir.absolutePath()).isReadable());
-}
-
-/**
-	@return true s'il est possible d'ecrire le fichier qet_directory dans la
-	categorie
-*/
-bool FileElementsCategory::isWritable() {
-	// informations sur le dossier de la categorie
-	QFileInfo category(cat_dir.absolutePath());
-	QFileInfo qet_directory(cat_dir.absolutePath() + "/qet_directory");
-	/*
-	soit qet_directory n'existe pas et le dossier est accessible en ecriture,
-	soit qet_directory existe et est accessible en ecriture
-	*/
-	return(
-		category.isWritable() &&           // le dossier lui-meme est accessible en ecriture
-		(
-			!qet_directory.exists() ||
-			(qet_directory.exists() && qet_directory.isWritable())
-		)                                  // le fichier qet_directory est accessible en ecriture
-	);
-}
-
-/**
-	Recharge le contenu et les noms de la categorie
-*/
-void FileElementsCategory::reload() {
-	// supprime l'ancien contenu
-	deleteContent();
-	category_names.clearNames();
-	
-	// la categorie doit exister
-	if (!cat_dir.exists()) return;
-	
-	// charge les noms de la categorie
-	loadNames();
-	
-	// charge les sous-categories
-	QStringList dirs = cat_dir.entryList(QStringList(), QDir::AllDirs | QDir::NoSymLinks | QDir::NoDotAndDotDot, QDir::Name);
-	foreach(QString dir, dirs) {
-		categories_.insert(dir, new FileElementsCategory(cat_dir.absoluteFilePath(dir), this, file_parent_collection_));
-	}
-	
-	// charge les elements
-	QStringList elmts = cat_dir.entryList(QStringList("*.elmt"), QDir::Files, QDir::Name);
-	foreach(QString elmt, elmts) {
-		elements_.insert(elmt, new FileElementDefinition(cat_dir.absoluteFilePath(elmt), this, file_parent_collection_));
-	}
-}
-
-/**
-	Supprime le contenu de la categorie puis la categorie elle-meme
-	@return true si l'operation s'est bien passee, false sinon
-*/
-bool FileElementsCategory::remove() {
-	// suppression du contenu de la categorie
-	if (!removeContent()) return(false);
-	
-	// une categorie racine ne se supprime pas elle-meme
-	if (isRootCategory()) return(true);
-	
-	// suppression du fichier de description de la categorie
-	if (cat_dir.exists("qet_directory")) {
-		if (!cat_dir.remove("qet_directory")) return(false);
-	}
-	
-	// suppression de la categorie elle-meme
-	return(cat_dir.rmdir(cat_dir.absolutePath()));
-}
-
-/**
-	Supprime le contenu de la categorie sans supprimer la categorie elle-meme.
-	@return true si l'operation s'est bien passee, false sinon
-*/
-bool FileElementsCategory::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);
-		}
-	}
-	return(true);
-}
-
-/**
-	Cree la categorie
-	@return true si la creation a reussi, false sinon
-*/
-bool FileElementsCategory::write() {
-	// cree le dossier de la categorie
-	if (!cat_dir.mkpath(cat_dir.path())) return(false);
-	
-	// prepare la structure XML
-	QDomDocument document;
-	QDomElement root = document.createElement("qet-directory");
-	document.appendChild(root);
-	root.appendChild(category_names.toXml(document));
-	
-	QString filepath = cat_dir.absolutePath() + "/qet_directory";
-	return(QET::writeXmlFile(document, filepath));
-}
-
-/**
-	Supprime un repertoire recursivement.
-	@return true si la suppression a reussie, false sinon
-*/
-bool FileElementsCategory::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 FileElementsCategory::loadNames() {
-	// repere le chemin du fichier de configuration de la categorie
-	QFile directory_conf(cat_dir.absolutePath() + "/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;
-	
-	category_names.fromXml(root);
-	
-	// ferme le fichier
-	directory_conf.close();
-}
-
-/**
-	Supprime le contenu de la categorie en memoire
-*/
-void FileElementsCategory::deleteContent() {
-	// suppression des elements
-	foreach(QString elmt_name, elements_.keys()) {
-		FileElementDefinition *elmt = elements_.take(elmt_name);
-		delete elmt;
-	}
-	
-	// suppression des categories
-	foreach(QString cat_name, categories_.keys()) {
-		FileElementsCategory *cat = categories_.take(cat_name);
-		delete cat;
-	}
-}

Deleted: trunk/sources/fileelementscategory.h
===================================================================
--- trunk/sources/fileelementscategory.h	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/fileelementscategory.h	2016-05-28 12:59:01 UTC (rev 4533)
@@ -1,82 +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 <http://www.gnu.org/licenses/>.
-*/
-#ifndef FILE_ELEMENTS_CATEGORY_H
-#define FILE_ELEMENTS_CATEGORY_H
-#include <QtCore>
-#include "elementscategory.h"
-class FileElementsCollection;
-class FileElementDefinition;
-/**
-	This class represents an elements category stored on a filesystem.
-*/
-class FileElementsCategory : public ElementsCategory {
-	Q_OBJECT
-	
-	// constructors, destructor
-	public:
-	FileElementsCategory(const QString & = QString(), FileElementsCategory * = 0, FileElementsCollection * = 0);
-	virtual ~FileElementsCategory();
-	
-	private:
-	FileElementsCategory(const FileElementsCategory &);
-	
-	// methods
-	public:
-	virtual QString pathName() const;
-	virtual QString virtualPath();
-	
-	virtual QString filePath();
-	virtual bool hasFilePath();
-	virtual void setFilePath(const QString &);
-	
-	virtual QList<ElementsCategory *> categories();
-	virtual ElementsCategory *category(const QString &);
-	virtual ElementsCategory *createCategory(const QString &);
-	
-	virtual QList<ElementDefinition *> 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();
-	
-	private:
-	bool rmdir(const QString &) const;
-	void loadNames();
-	void deleteContent();
-	
-	// attributes
-	protected:
-	/// Parent collection, stored on filesystem too
-	FileElementsCollection *file_parent_collection_;
-	/// Paremt Collection, stored on filesystem too
-	FileElementsCategory   *file_parent_category_;
-	/// Child sub-categories
-	QHash<QString, FileElementsCategory  *> categories_;
-	/// Child elements
-	QHash<QString, FileElementDefinition *> elements_;
-	/// Directory matching this category on filesystem
-	QDir cat_dir;
-};
-#endif

Deleted: trunk/sources/fileelementscollection.cpp
===================================================================
--- trunk/sources/fileelementscollection.cpp	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/fileelementscollection.cpp	2016-05-28 12:59:01 UTC (rev 4533)
@@ -1,133 +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 <http://www.gnu.org/licenses/>.
-*/
-#include "fileelementscollection.h"
-#include "fileelementscategory.h"
-
-/**
-	Constructeur
-	@param path Chemin du dossier racine de la collection
-	@param parent QObject parent de la collection
-*/
-FileElementsCollection::FileElementsCollection(const QString &path, ElementsCollectionItem *parent) :
-	ElementsCollection(parent),
-	coll_path(path)
-{
-	protocol_ = "unknown";
-	project_ = 0;
-	root = 0;
-}
-
-/**
-	Destructeur
-*/
-FileElementsCollection::~FileElementsCollection() {
-	deleteContent();
-}
-
-/**
-	@return la categorie racine de la collection
-*/
-ElementsCategory *FileElementsCollection::rootCategory() {
-	return(root);
-}
-
-/**
-	Recharge l'arborescence des categories et elements.
-*/
-void FileElementsCollection::reload() {
-	QMutexLocker reload_lock(&reload_mutex_);
-	// oublie l'arborescence precedente
-	deleteContent();
-	
-	// le dossier doit exister et etre lisible
-	QDir coll_dir(coll_path);
-	if (!coll_dir.exists() || !coll_dir.isReadable()) return;
-	coll_path = coll_dir.canonicalPath();
-	
-	root = new FileElementsCategory(coll_path, 0, this);
-}
-
-/**
-	@return true si cette collection est representee quelque part sur le
-	systeme de fichiers.
-*/
-bool FileElementsCollection::hasFilePath() {
-	return(!coll_path.isEmpty());
-}
-
-/**
-	@return le chemin du repertoire representant cette collection
-*/
-QString FileElementsCollection::filePath() {
-	return(coll_path);
-}
-
-/**
-	@param path Nouveau chemin de la collection
-	Cette methode ne recharge pas la collection
-*/
-void FileElementsCollection::setFilePath(const QString &path) {
-	coll_path = path;
-}
-
-/**
-	Supprime le contenu en memoire de cette collection
-*/
-void FileElementsCollection::deleteContent() {
-	delete root;
-	root = 0;
-}
-
-/**
-	@return ttrue si la categorie racine de la collection existe
-*/
-bool FileElementsCollection::exists() {
-	return(root && root -> exists());
-}
-
-/**
-	@return true si la collection est accessible en lecture
-*/
-bool FileElementsCollection::isReadable() {
-	// une collection est accessible en lecture si sa categorie racine l'est
-	return(root && root -> isReadable());
-}
-
-/**
-	@return true si la collection est accessible en ecriture
-*/
-bool FileElementsCollection::isWritable() {
-	// une collection est accessible en ecriture si sa categorie racine l'est
-	return(root && root -> isWritable());
-}
-
-/**
-	Ne fait rien
-	@return toujours true
-*/
-bool FileElementsCollection::write() {
-	return(true);
-}
-
-/**
-	@return always true, since a file-based elements collection can always be
-	cached.
-*/
-bool FileElementsCollection::isCacheable() const {
-	return(true);
-}

Deleted: trunk/sources/fileelementscollection.h
===================================================================
--- trunk/sources/fileelementscollection.h	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/fileelementscollection.h	2016-05-28 12:59:01 UTC (rev 4533)
@@ -1,61 +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 <http://www.gnu.org/licenses/>.
-*/
-#ifndef FILE_ELEMENTS_COLLECTION_H
-#define FILE_ELEMENTS_COLLECTION_H
-#include <QtCore>
-#include "elementscollection.h"
-class FileElementsCategory;
-/**
-	This class represents an elements collection stored on filesystem, like the
-	collection provided along with QET or users custom collection.
-*/
-class FileElementsCollection : public ElementsCollection {
-	Q_OBJECT
-	
-	// constructors, destructor
-	public:
-	FileElementsCollection(const QString &, ElementsCollectionItem *parent = 0);
-	virtual ~FileElementsCollection();
-	
-	private:
-	FileElementsCollection(const FileElementsCollection &);
-	
-	// methods
-	public:
-	virtual void reload();
-	virtual ElementsCategory *rootCategory();
-	
-	virtual bool hasFilePath();
-	virtual QString filePath();
-	virtual void setFilePath(const QString &);
-	virtual bool exists();
-	virtual bool isReadable();
-	virtual bool isWritable();
-	virtual bool write();
-	virtual bool isCacheable() const;
-	
-	private:
-	void deleteContent();
-	
-	// attributes
-	private:
-	QString coll_path;
-	FileElementsCategory *root;
-	QMutex reload_mutex_;       ///< Mutex used to avoid loading a collection twice at the same time
-};
-#endif

Deleted: trunk/sources/moveelementsdescription.cpp
===================================================================
--- trunk/sources/moveelementsdescription.cpp	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/moveelementsdescription.cpp	2016-05-28 12:59:01 UTC (rev 4533)
@@ -1,180 +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 <http://www.gnu.org/licenses/>.
-*/
-#include "moveelementsdescription.h"
-
-/**
-	Constructeur - construit une description ne comprenant aucun nom internem,
-	aucune destination, aucun handler. Par defaut, la recursivite est activee.
-	@param parent QObject parent
-*/
-MoveElementsDescription::MoveElementsDescription(QObject *parent) :
-	QObject(parent),
-	recursive_(true),
-	handler_(0),
-	destination_(0),
-	dest_internal_name_orig_(""),
-	dest_internal_name_final_(""),
-	created_item_(0),
-	src_deleted_(false),
-	abort_(false)
-{
-}
-
-/**
-	Destructeur
-*/
-MoveElementsDescription::~MoveElementsDescription() {
-}
-
-/**
-	@return true si le mouvement decrit est recursif (c'est-a-dire que la copie
-	d'une categorie entrainera la copie de ses sous-categories et de ses
-	elements)
-*/
-bool MoveElementsDescription::isRecursive() const {
-	return(recursive_);
-}
-
-/**
-	@param r true pour activer la recursivite, false sinon
-	@see isRecursive()
-*/
-void MoveElementsDescription::setRecursive(bool r) {
-	recursive_ = r;
-}
-
-/**
-	@return le MoveElementsHandler utilise pour gerer les erreurs lors de la
-	realisation de ce mouvement. Si aucun handler n'est specifie, cette methode
-	retourne 0.
-	@see MoveElementsHandler
-*/
-MoveElementsHandler *MoveElementsDescription::handler() const {
-	return(handler_);
-}
-
-/**
-	@param handler Le MoveElementHandler a utiliser pour gerer les erreurs lors
-	de la realisation de ce mouvement. Indiquer 0 pour enlever le
-	MoveElementsHandler.
-*/
-void MoveElementsDescription::setHandler(MoveElementsHandler *handler) {
-	handler_ = handler;
-}
-
-/**
-	@return la categorie de destination qui accueillera l'element cree par le
-	mouvement.
-*/
-ElementsCategory *MoveElementsDescription::destinationParentCategory() const {
-	return(destination_);
-}
-
-/**
-	@param destination la categorie de destination qui accueillera l'element
-	cree par le mouvement
-*/
-void MoveElementsDescription::setDestinationParentCategory(ElementsCategory *destination) {
-	destination_ = destination;
-}
-
-/**
-	@return Le nom interne souhaite pour l'item a creer.
-	Typiquement, il s'agit du meme nom que l'item d'origine. Il faut toutefois
-	le specifier explicitement.
-*/
-QString MoveElementsDescription::originalDestinationInternalName() const {
-	return(dest_internal_name_orig_);
-}
-
-/**
-	@param name Le nom interne souhaite pour l'item a creer.
-	Typiquement, il s'agit du meme nom que l'item d'origine. Il faut toutefois
-	le specifier explicitement.
-*/
-void MoveElementsDescription::setOriginalDestinationInternalName(const QString &name) {
-	dest_internal_name_orig_ = name;
-}
-
-/**
-	@return Le nom interne finalement retenu pour creer l'item.
-	Si le nom interne est deja pris dans la categorie de destination, il est
-	courant de changer le nom interne de destination (cette decision revient
-	typiquement au MoveElementsHandler).
-*/
-QString MoveElementsDescription::finalDestinationInternalName() const {
-	return(dest_internal_name_final_);
-}
-
-/**
-	@param name Le nom interne finalement retenu pour creer l'item.
-	Si le nom interne est deja pris dans la categorie de destination, il est
-	courant de changer le nom interne de destination (cette decision revient
-	typiquement au MoveElementsHandler).
-*/
-void MoveElementsDescription::setFinalDestinationInternalName(const QString &name) {
-	dest_internal_name_final_ = name;
-}
-
-/**
-	@return l'item cree par le mouvement, ou 0 si celui-ci n'as pas encore ete
-	cree ou ne sera pas cree.
-*/
-ElementsCollectionItem *MoveElementsDescription::createdItem() const {
-	return(created_item_);
-}
-
-/**
-	@param item l'item cree par le mouvement. Indiquer 0 si celui-ci n'as pas
-	encore ete cree ou ne sera pas cree.
-*/
-void MoveElementsDescription::setCreatedItem(ElementsCollectionItem *item) {
-	created_item_ = item;
-}
-
-/**
-	@return true si, dans le cadre normal du mouvement, l'item source a ete
-	supprime (exemple : deplacement) avec succes.
-*/
-bool MoveElementsDescription::sourceItemWasDeleted() const {
-	return(src_deleted_);
-}
-
-/**
-	@param deleted Definit si oui ou non l'item source a ete supprime avec
-	succes, et ce dans le cadre normal du mouvement (exemple : deplacement).
-*/
-void MoveElementsDescription::setSourceItemDeleted(bool deleted) {
-	src_deleted_ = deleted;
-}
-
-/**
-	@return true si le mouvement, ainsi que les mouvements qui suivent, doivent
-	etre annules.
-*/
-bool MoveElementsDescription::mustAbort() const {
-	return(abort_);
-}
-
-/**
-	Definit ce mouvement ainsi que les mouvements qui suivent comme etant a
-	annuler.
-*/
-void MoveElementsDescription::abort() {
-	abort_ = true;
-}

Deleted: trunk/sources/moveelementsdescription.h
===================================================================
--- trunk/sources/moveelementsdescription.h	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/moveelementsdescription.h	2016-05-28 12:59:01 UTC (rev 4533)
@@ -1,76 +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 <http://www.gnu.org/licenses/>.
-*/
-#ifndef MOVE_ELEMENTS_DESCRIPTION_H
-#define MOVE_ELEMENTS_DESCRIPTION_H
-#include <QObject>
-class ElementsCollectionItem;
-class ElementsCategory;
-class MoveElementsHandler;
-/**
-	This class describes the evolution of an elements item move (actually
-	either move or copy), i.e. whether the source was deleted, whether the
-	target changed and to what path, etc.
-*/
-class MoveElementsDescription : public QObject {
-	Q_OBJECT
-	
-	// constructors, destructor
-	public:
-	MoveElementsDescription(QObject * = 0);
-	virtual ~MoveElementsDescription();
-	private:
-	MoveElementsDescription(const MoveElementsDescription &);
-	
-	// methods
-	public:
-	bool isRecursive() const;
-	void setRecursive(bool);
-	
-	MoveElementsHandler *handler() const;
-	void setHandler(MoveElementsHandler *);
-	
-	ElementsCategory *destinationParentCategory() const;
-	void setDestinationParentCategory(ElementsCategory *);
-	
-	QString originalDestinationInternalName() const;
-	void setOriginalDestinationInternalName(const QString &);
-	
-	QString finalDestinationInternalName() const;
-	void setFinalDestinationInternalName(const QString &);
-	
-	ElementsCollectionItem *createdItem() const;
-	void setCreatedItem(ElementsCollectionItem *);
-	
-	bool sourceItemWasDeleted() const;
-	void setSourceItemDeleted(bool);
-	
-	bool mustAbort() const;
-	void abort();
-	
-	// attributes
-	private:
-	bool recursive_;
-	MoveElementsHandler *handler_;
-	ElementsCategory *destination_;
-	QString dest_internal_name_orig_;
-	QString dest_internal_name_final_;
-	ElementsCollectionItem *created_item_;
-	bool src_deleted_;
-	bool abort_;
-};
-#endif

Deleted: trunk/sources/moveelementshandler.h
===================================================================
--- trunk/sources/moveelementshandler.h	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/moveelementshandler.h	2016-05-28 12:59:01 UTC (rev 4533)
@@ -1,97 +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 <http://www.gnu.org/licenses/>.
-*/
-#ifndef MOVE_ELEMENTS_HANDLER_H
-#define MOVE_ELEMENTS_HANDLER_H
-#include <QObject>
-#include "qet.h"
-class ElementDefinition;
-class ElementsCategory;
-/**
-	This class defines the minimum interface required to implement an object able
-	to handle a move/copy operation among elements collections. This kind of
-	objects is typically useful in the move() and copy() method of the
-	ElementDefinition and ElementsCategory classes. These methods simply rely on
-	answers provided by an instance of this class as soon as they encounter
-	typical move/copy problems, such as conflicts or permission issues.
-	
-	For instance, when copying a particular element to a given category, that
-	element may already exist in the target category. It is then possible either
-	to erase the target element, change the target name or cancel the operation.
-	There is no systematic or calculable answer to this kind of questions, hence
-	the rational to delegate the decision process to a dedicated "Strategy" object.
-	
-	All we know from this object is the fact it implements the interface defined
-	below. It is then free to create complicated dialogs to ask a user what to do
-	or even to pick a random decision.
-	
-	@see ElementsCategory
-	@see ElementDefinition
-*/
-class MoveElementsHandler : public QObject {
-	Q_OBJECT
-	// constructors, destructor
-	public:
-	MoveElementsHandler(QObject * = 0) {};
-	virtual ~MoveElementsHandler() {};
-	private:
-	MoveElementsHandler(const MoveElementsHandler &);
-	
-	// methods
-	public:
-	/**
-		@return what to do if the target category already exists
-	*/
-	virtual QET::Action categoryAlreadyExists(ElementsCategory *src, ElementsCategory  *dst) = 0;
-	/**
-		@return what to do if the target element already exists
-	*/
-	virtual QET::Action elementAlreadyExists(ElementDefinition *src, ElementDefinition *dst) = 0;
-	
-	/**
-		@return what to do if a category is not readable
-	*/
-	virtual QET::Action categoryIsNotReadable(ElementsCategory *) = 0;
-	/**
-		@return what to do if an element is not readable
-	*/
-	virtual QET::Action elementIsNotReadable(ElementDefinition *) = 0;
-	
-	/**
-		@return what to do if the target category is not writable
-	*/
-	virtual QET::Action categoryIsNotWritable(ElementsCategory *) = 0;
-	/**
-		@return what to do if the target element is not writable
-	*/
-	virtual QET::Action elementIsNotWritable(ElementDefinition *) = 0;
-	
-	/**
-		@return what to do when an error, described by the provided QString, occurs in relation with the given elements category.
-	*/
-	virtual QET::Action errorWithACategory(ElementsCategory *, const QString &) = 0;
-	/**
-		@return what to do when an error, described by the provided QString, occurs in relation with the given element.
-	*/
-	virtual QET::Action errorWithAnElement(ElementDefinition *, const QString &) = 0;
-	
-	/**
-		@return the name to be used along with the latest QET::Rename answer
-	*/
-	virtual QString nameForRenamingOperation() = 0;
-};
-#endif

Modified: trunk/sources/qetgraphicsitem/customelement.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/customelement.cpp	2016-05-27 22:01:13 UTC (rev 4532)
+++ trunk/sources/qetgraphicsitem/customelement.cpp	2016-05-28 12:59:01 UTC (rev 4533)
@@ -20,7 +20,6 @@
 #include "diagram.h"
 #include "qetapp.h"
 #include "partline.h"
-#include "elementdefinition.h"
 #include <iostream>
 #include "terminal.h"
 #include "diagramposition.h"


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/