2007-12-01 10:47:15 +00:00
/*
2009-04-03 19:30:25 +00:00
Copyright 2006 - 2009 Xavier Guerrin
2007-12-01 10:47:15 +00:00
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/>.
*/
2007-04-04 02:13:14 +00:00
# include "elementscategorieslist.h"
2007-09-21 13:22:18 +00:00
# include "qetapp.h"
2009-04-03 19:30:25 +00:00
# include "customelement.h"
# include "elementscollection.h"
2007-04-05 01:13:14 +00:00
# include "elementscategory.h"
2009-04-03 19:30:25 +00:00
# include "elementdefinition.h"
2009-05-01 14:41:33 +00:00
# include "qeticons.h"
2007-04-04 02:13:14 +00:00
/**
Constructeur
2009-04-03 19:30:25 +00:00
@ param display_elements true pour afficher les elements , false sinon
@ param selectables Types selectionnables
@ see QET : : ItemType
2007-04-04 02:13:14 +00:00
@ param parent QWidget parent de ce widget
*/
2009-04-03 19:30:25 +00:00
ElementsCategoriesList : : ElementsCategoriesList ( bool display_elements , uint selectables , QWidget * parent ) :
QTreeWidget ( parent ) ,
display_elements_ ( display_elements ) ,
selectables_ ( selectables ) ,
first_load ( true )
{
2007-04-04 02:13:14 +00:00
// selection unique
setSelectionMode ( QAbstractItemView : : SingleSelection ) ;
setColumnCount ( 1 ) ;
header ( ) - > hide ( ) ;
// charge les categories
reload ( ) ;
2009-04-03 19:30:25 +00:00
connect ( this , SIGNAL ( currentItemChanged ( QTreeWidgetItem * , QTreeWidgetItem * ) ) , this , SLOT ( selectionChanged ( QTreeWidgetItem * , QTreeWidgetItem * ) ) ) ;
2007-04-04 02:13:14 +00:00
}
/**
Destructeur
*/
ElementsCategoriesList : : ~ ElementsCategoriesList ( ) {
}
/**
Recharge l ' arbre des categories
*/
void ElementsCategoriesList : : reload ( ) {
// vide l'arbre
2009-04-03 19:30:25 +00:00
clear ( ) ;
foreach ( ElementsCollection * collection , QETApp : : availableCollections ( ) ) {
if ( collection = = QETApp : : commonElementsCollection ( ) ) continue ;
if ( collection = = QETApp : : customElementsCollection ( ) ) continue ;
addCollection ( invisibleRootItem ( ) , collection , tr ( " Collection projet " ) ) ;
}
2007-04-04 02:13:14 +00:00
2007-12-18 21:19:41 +00:00
// chargement des elements de la collection commune si droits d'ecriture
2009-04-03 19:30:25 +00:00
if ( QETApp : : commonElementsCollection ( ) - > isWritable ( ) ) {
if ( ! first_load ) QETApp : : commonElementsCollection ( ) - > reload ( ) ;
2009-05-01 14:41:33 +00:00
addCollection ( invisibleRootItem ( ) , QETApp : : commonElementsCollection ( ) , tr ( " Collection QET " ) , QET : : Icons : : QETLogo ) ;
2007-12-18 21:19:41 +00:00
}
2007-04-04 02:13:14 +00:00
// chargement des elements de la collection utilisateur
2009-04-03 19:30:25 +00:00
if ( ! first_load ) QETApp : : customElementsCollection ( ) - > reload ( ) ;
2009-05-01 14:41:33 +00:00
addCollection ( invisibleRootItem ( ) , QETApp : : customElementsCollection ( ) , tr ( " Collection utilisateur " ) , QET : : Icons : : Home ) ;
2009-04-03 19:30:25 +00:00
if ( first_load ) first_load = false ;
2007-04-04 02:13:14 +00:00
}
/**
2009-04-03 19:30:25 +00:00
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
2007-04-04 02:13:14 +00:00
*/
2009-04-03 19:30:25 +00:00
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
2009-11-22 16:12:22 +00:00
@ param cat_name Parametre facultatif permettant de forcer le nom affiche
2009-04-03 19:30:25 +00:00
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 ) {
2007-04-04 02:13:14 +00:00
// recupere le nom de la categorie
2009-04-03 19:30:25 +00:00
QString final_name ( cat_name . isEmpty ( ) ? category - > name ( ) : cat_name ) ;
2009-05-01 14:41:33 +00:00
QIcon final_icon ( icon . isNull ( ) ? QET : : Icons : : Folder : icon ) ;
2007-04-04 02:13:14 +00:00
// creation du QTreeWidgetItem representant le dossier
2009-04-03 19:30:25 +00:00
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 ) ;
}
2007-04-04 02:13:14 +00:00
2009-04-03 19:30:25 +00:00
return ( qtwi_category ) ;
2007-04-04 02:13:14 +00:00
}
/**
2009-04-03 19:30:25 +00:00
Methode privee permettant d ' ajouter un element
@ param qtwi_parent QTreeWidgetItem parent sous lequel sera insere l ' element
@ param element Element a inserer
2009-11-22 16:12:22 +00:00
@ param elmt_name Parametre facultatif permettant de forcer le nom affiche
2009-04-03 19:30:25 +00:00
S ' il n ' est pas precise , la methode utilise le nom declare par la categorie .
2009-11-22 16:12:22 +00:00
@ param icon Icone a utiliser pour l ' affichage de l ' element
2009-04-03 19:30:25 +00:00
@ return Le QTreeWidgetItem insere
2007-04-04 02:13:14 +00:00
*/
2009-04-03 19:30:25 +00:00
QTreeWidgetItem * ElementsCategoriesList : : addElement ( QTreeWidgetItem * qtwi_parent , ElementDefinition * element , const QString & elmt_name , const QIcon & icon ) {
2009-04-13 01:35:01 +00:00
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 ;
2009-04-03 19:30:25 +00:00
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 ) ;
2007-04-04 02:13:14 +00:00
}
/**
2009-04-03 19:30:25 +00:00
@ return Le nom de la categorie selectionnee
2007-04-04 02:13:14 +00:00
*/
2009-04-03 19:30:25 +00:00
QString ElementsCategoriesList : : selectedCategoryName ( ) const {
2007-04-04 02:13:14 +00:00
QTreeWidgetItem * qtwi = currentItem ( ) ;
if ( qtwi ) return ( qtwi - > data ( 0 , Qt : : DisplayRole ) . toString ( ) ) ;
2009-04-03 19:30:25 +00:00
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
*/
2009-11-22 16:12:22 +00:00
void ElementsCategoriesList : : selectionChanged ( QTreeWidgetItem * current , QTreeWidgetItem * previous ) {
Q_UNUSED ( previous ) ;
2009-04-03 19:30:25 +00:00
ElementsLocation emited_location ;
if ( current ) {
emited_location = locations_ [ current ] ;
}
emit ( locationChanged ( emited_location ) ) ;
2007-04-04 02:13:14 +00:00
}