mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-09-13 20:23:04 +02:00
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/branches/0.3@793 bfdf4180-ca20-0410-9c96-a3a8aa849046
208 lines
7.6 KiB
C++
208 lines
7.6 KiB
C++
/*
|
|
Copyright 2006-2009 Xavier Guerrin
|
|
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 "elementscategorieslist.h"
|
|
#include "qetapp.h"
|
|
#include "customelement.h"
|
|
#include "elementscollection.h"
|
|
#include "elementscategory.h"
|
|
#include "elementdefinition.h"
|
|
#include "qeticons.h"
|
|
|
|
/**
|
|
Constructeur
|
|
@param display_elements true pour afficher les elements, false sinon
|
|
@param selectables Types selectionnables
|
|
@see QET::ItemType
|
|
@param parent QWidget parent de ce widget
|
|
*/
|
|
ElementsCategoriesList::ElementsCategoriesList(bool display_elements, uint selectables, QWidget *parent) :
|
|
QTreeWidget(parent),
|
|
display_elements_(display_elements),
|
|
selectables_(selectables),
|
|
first_load(true)
|
|
{
|
|
// selection unique
|
|
setSelectionMode(QAbstractItemView::SingleSelection);
|
|
setColumnCount(1);
|
|
header() -> hide();
|
|
|
|
// charge les categories
|
|
reload();
|
|
|
|
connect(this, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), this, SLOT(selectionChanged(QTreeWidgetItem *, QTreeWidgetItem *)));
|
|
}
|
|
|
|
/**
|
|
Destructeur
|
|
*/
|
|
ElementsCategoriesList::~ElementsCategoriesList() {
|
|
}
|
|
|
|
/**
|
|
Recharge l'arbre des categories
|
|
*/
|
|
void ElementsCategoriesList::reload() {
|
|
// vide l'arbre
|
|
clear();
|
|
|
|
foreach(ElementsCollection *collection, QETApp::availableCollections()) {
|
|
if (collection == QETApp::commonElementsCollection()) continue;
|
|
if (collection == QETApp::customElementsCollection()) continue;
|
|
addCollection(invisibleRootItem(), collection, tr("Collection projet"));
|
|
}
|
|
|
|
// chargement des elements de la collection commune si droits d'ecriture
|
|
if (QETApp::commonElementsCollection() -> isWritable()) {
|
|
if (!first_load) QETApp::commonElementsCollection() -> reload();
|
|
addCollection(invisibleRootItem(), QETApp::commonElementsCollection(), tr("Collection QET"), QET::Icons::QETLogo);
|
|
}
|
|
|
|
// chargement des elements de la collection utilisateur
|
|
if (!first_load) QETApp::customElementsCollection() -> reload();
|
|
addCollection(invisibleRootItem(), QETApp::customElementsCollection(), tr("Collection utilisateur"), QET::Icons::Home);
|
|
|
|
if (first_load) first_load = false;
|
|
}
|
|
|
|
/**
|
|
Methode privee permettant d'ajouter une collection d'elements
|
|
@param qtwi_parent QTreeWidgetItem parent sous lequel sera insere la collection d'elements
|
|
@param collection Collection a inserer dans le panel d'elements
|
|
@param coll_name Nom a utiliser pour la collection
|
|
@param icon Icone a utiliser pour l'affichage de la collection
|
|
@return Le QTreeWidgetItem insere le plus haut
|
|
*/
|
|
QTreeWidgetItem *ElementsCategoriesList::addCollection(QTreeWidgetItem *qtwi_parent, ElementsCollection *collection, const QString &coll_name, const QIcon &icon) {
|
|
QTreeWidgetItem *qtwi_coll = addCategory(qtwi_parent, collection -> rootCategory(), coll_name, icon);
|
|
qtwi_coll -> setExpanded(true);
|
|
Qt::ItemFlags flags_coll = Qt::ItemIsEnabled;
|
|
if (selectables_ & QET::Collection) flags_coll |= Qt::ItemIsSelectable;
|
|
qtwi_coll -> setFlags(flags_coll);
|
|
return(qtwi_coll);
|
|
}
|
|
|
|
/**
|
|
Methode privee permettant d'ajouter une categorie
|
|
@param qtwi_parent QTreeWidgetItem parent sous lequel sera insere la categorie
|
|
@param category Categorie d'elements a inserer
|
|
@param cat_name Parametre facultatif permettant de forcer le nom affiche
|
|
S'il n'est pas precise, la methode utilise le nom declare par la categorie.
|
|
@param icon Icone a utiliser pour l'affichage de la categorie
|
|
Si elle n'est pas precisee, une icone par defaut est utilisee
|
|
@return Le QTreeWidgetItem insere le plus haut
|
|
*/
|
|
QTreeWidgetItem *ElementsCategoriesList::addCategory(QTreeWidgetItem *qtwi_parent, ElementsCategory *category, const QString &cat_name, const QIcon &icon) {
|
|
// recupere le nom de la categorie
|
|
QString final_name(cat_name.isEmpty() ? category -> name() : cat_name);
|
|
QIcon final_icon(icon.isNull() ? QET::Icons::Folder : icon);
|
|
|
|
// creation du QTreeWidgetItem representant le dossier
|
|
QTreeWidgetItem *qtwi_category = new QTreeWidgetItem(qtwi_parent, QStringList(final_name));
|
|
qtwi_category -> setIcon(0, final_icon);
|
|
locations_.insert(qtwi_category, category -> location());
|
|
Qt::ItemFlags flags_category = Qt::ItemIsEnabled;
|
|
if (selectables_ & QET::Category) flags_category |= Qt::ItemIsSelectable;
|
|
qtwi_category -> setFlags(flags_category);
|
|
|
|
// ajout des sous-categories
|
|
foreach(ElementsCategory *sub_cat, category -> categories()) addCategory(qtwi_category, sub_cat);
|
|
|
|
if (display_elements_) {
|
|
foreach(ElementDefinition *elmt, category -> elements()) addElement(qtwi_category, elmt);
|
|
}
|
|
|
|
return(qtwi_category);
|
|
}
|
|
|
|
/**
|
|
Methode privee permettant d'ajouter un element
|
|
@param qtwi_parent QTreeWidgetItem parent sous lequel sera insere l'element
|
|
@param element Element a inserer
|
|
@param elmt_name Parametre facultatif permettant de forcer le nom affiche
|
|
S'il n'est pas precise, la methode utilise le nom declare par la categorie.
|
|
@param icon Icone a utiliser pour l'affichage de l'element
|
|
@return Le QTreeWidgetItem insere
|
|
*/
|
|
QTreeWidgetItem *ElementsCategoriesList::addElement(QTreeWidgetItem *qtwi_parent, ElementDefinition *element, const QString &elmt_name, const QIcon &icon) {
|
|
int state;
|
|
CustomElement custom_elmt(element -> xml(), 0, 0, &state);
|
|
if (state) {
|
|
qDebug() << "ElementsCategoriesList::addElement() : Le chargement du composant" << qPrintable(element -> location().toString()) << "a echoue avec le code d'erreur" << state;
|
|
return(0);
|
|
}
|
|
QString final_name(elmt_name.isEmpty() ? custom_elmt.name() : elmt_name);
|
|
QTreeWidgetItem *qtwi = new QTreeWidgetItem(qtwi_parent, QStringList(final_name));
|
|
qtwi -> setToolTip(0, custom_elmt.name());
|
|
Qt::ItemFlags flags_element = Qt::ItemIsEnabled;
|
|
if (selectables_ & QET::Element) flags_element |= Qt::ItemIsSelectable;
|
|
qtwi -> setFlags(flags_element);
|
|
qtwi -> setIcon(0, icon);
|
|
locations_.insert(qtwi, element -> location());
|
|
|
|
return(qtwi);
|
|
}
|
|
|
|
/**
|
|
@return Le nom de la categorie selectionnee
|
|
*/
|
|
QString ElementsCategoriesList::selectedCategoryName() const {
|
|
QTreeWidgetItem *qtwi = currentItem();
|
|
if (qtwi) return(qtwi -> data(0, Qt::DisplayRole).toString());
|
|
else return(QString());
|
|
}
|
|
|
|
/**
|
|
@return l'emplacement correspondant au QTreeWidgetItem selectionne
|
|
*/
|
|
ElementsLocation ElementsCategoriesList::selectedLocation() const {
|
|
if (QTreeWidgetItem *current_qtwi = currentItem()) {
|
|
return(locations_[current_qtwi]);
|
|
} else {
|
|
return(ElementsLocation());
|
|
}
|
|
}
|
|
|
|
/**
|
|
Selectionne un element dans la liste a partir de son emplacement
|
|
@see ElementsLocation
|
|
@param location Emplacement a selectionner
|
|
@return true si la selection a pu etre effectuee, false sinon
|
|
*/
|
|
bool ElementsCategoriesList::selectLocation(const ElementsLocation &location) {
|
|
if (QTreeWidgetItem *qtwi = locations_.key(location)) {
|
|
setCurrentItem(qtwi);
|
|
return(true);
|
|
}
|
|
return(false);
|
|
}
|
|
|
|
/**
|
|
Recupere le chemin virtuel de l'element selectionne et emet le signal
|
|
virtualPathChanged.
|
|
@param current QTreeWidgetItem selectionne
|
|
@param previous QTreeWidgetItem precedemment selectionne
|
|
*/
|
|
void ElementsCategoriesList::selectionChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) {
|
|
Q_UNUSED(previous);
|
|
ElementsLocation emited_location;
|
|
if (current) {
|
|
emited_location = locations_[current];
|
|
}
|
|
emit(locationChanged(emited_location));
|
|
}
|