2007-01-30 22:32:21 +00:00
|
|
|
|
#include "elementspanel.h"
|
2007-04-05 01:13:14 +00:00
|
|
|
|
#include "elementscategory.h"
|
2007-06-30 17:41:07 +00:00
|
|
|
|
#include "elementscategoryeditor.h"
|
2007-08-28 21:17:11 +00:00
|
|
|
|
#include "elementscategorydeleter.h"
|
|
|
|
|
#include "elementdeleter.h"
|
2007-06-30 17:41:07 +00:00
|
|
|
|
#include "customelement.h"
|
2007-08-25 03:43:05 +00:00
|
|
|
|
#include "qetelementeditor.h"
|
2006-10-27 15:47:22 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
Constructeur
|
|
|
|
|
@param parent Le QWidget parent du panel d'appareils
|
|
|
|
|
*/
|
2007-01-30 22:32:21 +00:00
|
|
|
|
ElementsPanel::ElementsPanel(QWidget *parent) : QTreeWidget(parent) {
|
2006-10-27 15:47:22 +00:00
|
|
|
|
|
|
|
|
|
// selection unique
|
|
|
|
|
setSelectionMode(QAbstractItemView::SingleSelection);
|
2006-10-28 19:39:43 +00:00
|
|
|
|
setColumnCount(1);
|
2006-10-29 17:52:57 +00:00
|
|
|
|
header() -> hide();
|
2006-10-27 15:47:22 +00:00
|
|
|
|
|
|
|
|
|
// drag'n drop autorise
|
|
|
|
|
setDragEnabled(true);
|
|
|
|
|
setAcceptDrops(false);
|
|
|
|
|
setDropIndicatorShown(false);
|
|
|
|
|
|
2006-10-28 19:39:43 +00:00
|
|
|
|
// taille des elements
|
2006-10-27 15:47:22 +00:00
|
|
|
|
setIconSize(QSize(50, 50));
|
|
|
|
|
|
2007-02-26 22:42:46 +00:00
|
|
|
|
// charge les collections
|
|
|
|
|
reload();
|
2006-11-11 18:25:42 +00:00
|
|
|
|
|
|
|
|
|
// force du noir sur une alternance de blanc (comme le schema) et de gris
|
|
|
|
|
// clair, avec du blanc sur bleu pas trop fonce pour la selection
|
2006-10-27 15:47:22 +00:00
|
|
|
|
QPalette qp = palette();
|
2007-02-01 01:07:26 +00:00
|
|
|
|
qp.setColor(QPalette::Text, Qt::black);
|
|
|
|
|
qp.setColor(QPalette::Base, Qt::white);
|
|
|
|
|
qp.setColor(QPalette::AlternateBase, QColor("#e8e8e8"));
|
|
|
|
|
qp.setColor(QPalette::Highlight, QColor("#678db2"));
|
2006-11-11 18:25:42 +00:00
|
|
|
|
qp.setColor(QPalette::HighlightedText, Qt::white);
|
2006-10-27 15:47:22 +00:00
|
|
|
|
setPalette(qp);
|
2007-06-30 17:41:07 +00:00
|
|
|
|
|
|
|
|
|
// double-cliquer sur un element permet de l'editer
|
|
|
|
|
connect(this, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(slot_doubleClick(QTreeWidgetItem *, int)));
|
2006-10-27 15:47:22 +00:00
|
|
|
|
}
|
|
|
|
|
|
2007-04-12 03:13:13 +00:00
|
|
|
|
/**
|
|
|
|
|
Destructeur
|
|
|
|
|
*/
|
|
|
|
|
ElementsPanel::~ElementsPanel() {
|
|
|
|
|
}
|
|
|
|
|
|
2007-08-28 21:17:11 +00:00
|
|
|
|
/// @return true si un element est selectionne, false sinon
|
|
|
|
|
bool ElementsPanel::selectedItemIsAnElement() const {
|
|
|
|
|
QFileInfo infos_file = selectedFile();
|
|
|
|
|
if (!infos_file.exists()) return(false);
|
|
|
|
|
return(infos_file.isFile());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// @return true si une categorie est selectionnee, false sinon
|
|
|
|
|
bool ElementsPanel::selectedItemIsACategory() const {
|
|
|
|
|
QFileInfo infos_file = selectedFile();
|
|
|
|
|
if (!infos_file.exists()) return(false);
|
|
|
|
|
return(infos_file.isDir());
|
|
|
|
|
}
|
|
|
|
|
|
2006-10-27 15:47:22 +00:00
|
|
|
|
/**
|
|
|
|
|
Gere le mouvement lors d'un drag'n drop
|
|
|
|
|
*/
|
2007-01-30 22:32:21 +00:00
|
|
|
|
void ElementsPanel::dragMoveEvent(QDragMoveEvent */*e*/) {
|
2006-10-27 15:47:22 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
Gere le depot lors d'un drag'n drop
|
|
|
|
|
*/
|
2007-01-30 22:32:21 +00:00
|
|
|
|
void ElementsPanel::dropEvent(QDropEvent */*e*/) {
|
2006-10-27 15:47:22 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
Gere le debut des drag'n drop
|
|
|
|
|
@param supportedActions Les actions supportees
|
|
|
|
|
@todo virer les lignes type <EFBFBD>if ("tel appareil") construire TelAppareil<EFBFBD> => trouver un moyen d'automatiser ca
|
|
|
|
|
*/
|
2007-01-30 22:32:21 +00:00
|
|
|
|
void ElementsPanel::startDrag(Qt::DropActions /*supportedActions*/) {
|
2006-10-28 19:39:43 +00:00
|
|
|
|
// recupere le nom du fichier decrivant l'element
|
|
|
|
|
QString nom_fichier = currentItem() -> data(0, 42).toString();
|
|
|
|
|
if (nom_fichier == QString()) return;
|
|
|
|
|
|
2006-10-27 15:47:22 +00:00
|
|
|
|
// objet QDrag pour realiser le drag'n drop
|
|
|
|
|
QDrag *drag = new QDrag(this);
|
|
|
|
|
|
|
|
|
|
// donnees qui seront transmises par le drag'n drop
|
|
|
|
|
QMimeData *mimeData = new QMimeData();
|
|
|
|
|
|
|
|
|
|
// appareil temporaire pour fournir un apercu
|
|
|
|
|
int etat;
|
2007-01-30 22:32:21 +00:00
|
|
|
|
Element *appar = new CustomElement(nom_fichier, 0, 0, &etat);
|
2006-10-27 15:47:22 +00:00
|
|
|
|
if (etat != 0) {
|
|
|
|
|
delete appar;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mimeData -> setText(nom_fichier);
|
|
|
|
|
drag -> setMimeData(mimeData);
|
|
|
|
|
|
|
|
|
|
// accrochage d'une pixmap representant l'appareil au pointeur
|
|
|
|
|
drag -> setPixmap(appar -> pixmap());
|
|
|
|
|
drag -> setHotSpot(appar -> hotspot());
|
|
|
|
|
|
|
|
|
|
// realisation du drag'n drop
|
|
|
|
|
drag -> start(Qt::CopyAction);
|
|
|
|
|
|
|
|
|
|
// suppression de l'appareil temporaire
|
|
|
|
|
delete appar;
|
|
|
|
|
}
|
2006-10-28 19:39:43 +00:00
|
|
|
|
|
2006-11-11 18:25:42 +00:00
|
|
|
|
/**
|
|
|
|
|
Methode privee permettant d'ajouter un dossier au panel d'appareils
|
|
|
|
|
@param qtwi_parent QTreeWidgetItem parent sous lequel sera insere l'element
|
|
|
|
|
@param dossier Chemin absolu du dossier a inserer
|
|
|
|
|
@param nom Parametre facultatif permettant de forcer le nom du dossier.
|
|
|
|
|
S'il n'est pas precise, la fonction ouvre le fichier qet_directory situe
|
|
|
|
|
dans le dossier et y lit le nom du dossier ; si ce fichier n'existe pas ou
|
|
|
|
|
est invalide, la fonction utilise le nom du dossier.
|
|
|
|
|
*/
|
2007-02-01 01:07:26 +00:00
|
|
|
|
void ElementsPanel::addDir(QTreeWidgetItem *qtwi_parent, QString adr_dossier, QString nom) {
|
2007-04-05 01:13:14 +00:00
|
|
|
|
ElementsCategory category(adr_dossier);
|
|
|
|
|
if (!category.exists()) return;
|
2006-11-11 18:25:42 +00:00
|
|
|
|
|
|
|
|
|
// recupere le nom de la categorie
|
2007-04-05 01:13:14 +00:00
|
|
|
|
QString nom_categorie = (nom != QString()) ? nom : category.name();
|
2006-11-11 18:25:42 +00:00
|
|
|
|
|
|
|
|
|
// creation du QTreeWidgetItem representant le dossier
|
|
|
|
|
QTreeWidgetItem *qtwi_dossier = new QTreeWidgetItem(qtwi_parent, QStringList(nom_categorie));
|
|
|
|
|
QLinearGradient t(0, 0, 200, 0);
|
|
|
|
|
t.setColorAt(0, QColor("#e8e8e8"));
|
|
|
|
|
t.setColorAt(1, QColor("#ffffff"));
|
|
|
|
|
qtwi_dossier -> setBackground(0, QBrush(t));
|
|
|
|
|
qtwi_dossier -> setExpanded(true);
|
2007-06-30 17:41:07 +00:00
|
|
|
|
qtwi_dossier -> setData(0, 42, adr_dossier);
|
2006-11-11 18:25:42 +00:00
|
|
|
|
|
|
|
|
|
// ajout des sous-categories / sous-dossiers
|
2007-04-05 01:13:14 +00:00
|
|
|
|
QStringList dossiers = category.entryList(QStringList(), QDir::AllDirs | QDir::NoSymLinks | QDir::NoDotAndDotDot, QDir::Name);
|
|
|
|
|
foreach(QString dossier, dossiers) addDir(qtwi_dossier, adr_dossier + dossier + "/");
|
2006-11-11 18:25:42 +00:00
|
|
|
|
|
|
|
|
|
// ajout des elements / fichiers
|
2007-04-05 01:13:14 +00:00
|
|
|
|
QStringList fichiers = category.entryList(QStringList("*.elmt"), QDir::Files, QDir::Name);
|
2007-02-01 01:07:26 +00:00
|
|
|
|
foreach(QString fichier, fichiers) addFile(qtwi_dossier, adr_dossier + fichier);
|
2006-11-11 18:25:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
2006-10-28 19:39:43 +00:00
|
|
|
|
/**
|
|
|
|
|
Methode privee permettant d'ajouter un element au panel d'appareils
|
|
|
|
|
@param qtwi_parent QTreeWidgetItem parent sous lequel sera insere l'element
|
|
|
|
|
@param fichier Chemin absolu du fichier XML decrivant l'element a inserer
|
|
|
|
|
*/
|
2007-02-01 01:07:26 +00:00
|
|
|
|
void ElementsPanel::addFile(QTreeWidgetItem *qtwi_parent, QString fichier) {
|
2006-10-28 19:39:43 +00:00
|
|
|
|
QString whats_this = tr("Ceci est un \351l\351ment que vous pouvez ins\351rer dans votre sch\351ma par cliquer-d\351placer");
|
|
|
|
|
QString tool_tip = tr("Cliquer-d\351posez cet \351l\351ment sur le sch\351ma pour ins\351rer un \351l\351ment ");
|
|
|
|
|
int etat;
|
2007-01-30 22:32:21 +00:00
|
|
|
|
CustomElement *elmt_perso = new CustomElement(fichier, 0, 0, &etat);
|
2006-10-28 19:39:43 +00:00
|
|
|
|
if (etat != 0) {
|
|
|
|
|
qDebug() << "Le chargement du composant" << fichier << "a echoue avec le code d'erreur" << etat;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
QTreeWidgetItem *qtwi = new QTreeWidgetItem(qtwi_parent, QStringList(elmt_perso -> nom()));
|
|
|
|
|
qtwi -> setStatusTip(0, tool_tip + "\253 " + elmt_perso -> nom() + " \273");
|
|
|
|
|
qtwi -> setToolTip(0, elmt_perso -> nom());
|
|
|
|
|
qtwi -> setWhatsThis(0, whats_this);
|
|
|
|
|
qtwi -> setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
|
|
|
|
|
qtwi -> setIcon(0, QIcon(elmt_perso -> pixmap()));
|
|
|
|
|
qtwi -> setData(0, 42, fichier);
|
|
|
|
|
}
|
2006-11-19 22:04:15 +00:00
|
|
|
|
|
2007-02-26 22:42:46 +00:00
|
|
|
|
/**
|
|
|
|
|
Recharge l'arbre des elements
|
|
|
|
|
*/
|
|
|
|
|
void ElementsPanel::reload() {
|
|
|
|
|
// vide l'arbre
|
|
|
|
|
while (takeTopLevelItem(0));
|
|
|
|
|
|
|
|
|
|
// chargement des elements de la collection QET
|
2007-09-21 12:35:28 +00:00
|
|
|
|
addDir(invisibleRootItem(), QETDiagramEditor::commonElementsDir(), tr("Collection QET"));
|
2007-02-26 22:42:46 +00:00
|
|
|
|
|
|
|
|
|
// chargement des elements de la collection utilisateur
|
2007-09-21 12:35:28 +00:00
|
|
|
|
addDir(invisibleRootItem(), QETDiagramEditor::customElementsDir(), tr("Collection utilisateur"));
|
2007-02-26 22:42:46 +00:00
|
|
|
|
}
|
2007-06-30 17:41:07 +00:00
|
|
|
|
|
2007-08-28 21:17:11 +00:00
|
|
|
|
void ElementsPanel::editCategory() {
|
|
|
|
|
QFileInfo infos_file = selectedFile();
|
|
|
|
|
if (!infos_file.exists() || !infos_file.isDir()) return;
|
|
|
|
|
lauchCategoryEditor(infos_file.absoluteFilePath());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ElementsPanel::editElement() {
|
|
|
|
|
QFileInfo infos_file = selectedFile();
|
|
|
|
|
if (!infos_file.exists() || !infos_file.isFile()) return;
|
|
|
|
|
launchElementEditor(infos_file.absoluteFilePath());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ElementsPanel::deleteCategory() {
|
|
|
|
|
QFileInfo infos_file = selectedFile();
|
|
|
|
|
if (!infos_file.exists() || !infos_file.isDir()) return;
|
|
|
|
|
|
|
|
|
|
// supprime la categorie
|
|
|
|
|
ElementsCategoryDeleter cat_deleter(infos_file.absoluteFilePath(), this);
|
|
|
|
|
cat_deleter.exec();
|
|
|
|
|
|
|
|
|
|
// recharge la liste des categories
|
|
|
|
|
reload();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
supprime l'element selectionne
|
|
|
|
|
*/
|
|
|
|
|
void ElementsPanel::deleteElement() {
|
|
|
|
|
QFileInfo infos_file = selectedFile();
|
|
|
|
|
if (!infos_file.exists() || !infos_file.isFile()) return;
|
2007-06-30 17:41:07 +00:00
|
|
|
|
|
2007-08-28 21:17:11 +00:00
|
|
|
|
// supprime l'element
|
|
|
|
|
ElementDeleter elmt_deleter(infos_file.absoluteFilePath(), this);
|
|
|
|
|
elmt_deleter.exec();
|
|
|
|
|
|
|
|
|
|
// recharge la liste des categories
|
|
|
|
|
reload();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ElementsPanel::slot_doubleClick(QTreeWidgetItem *, int) {
|
2007-06-30 17:41:07 +00:00
|
|
|
|
// le fichier doit exister
|
2007-08-28 21:17:11 +00:00
|
|
|
|
QFileInfo infos_file = selectedFile();
|
2007-06-30 17:41:07 +00:00
|
|
|
|
if (!infos_file.exists()) return;
|
|
|
|
|
|
|
|
|
|
if (infos_file.isFile()) {
|
|
|
|
|
// il s'agit d'un element
|
2007-08-28 21:17:11 +00:00
|
|
|
|
launchElementEditor(infos_file.absoluteFilePath());
|
2007-06-30 17:41:07 +00:00
|
|
|
|
} else if (infos_file.isDir()) {
|
|
|
|
|
// il s'agit d'une categorie
|
2007-08-28 21:17:11 +00:00
|
|
|
|
lauchCategoryEditor(infos_file.absoluteFilePath());
|
2007-06-30 17:41:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2007-08-28 21:17:11 +00:00
|
|
|
|
|
|
|
|
|
/// @return un QFileInfo decrivant le fichier ou le dossier correspondant au QTreeWidgetItem selectionne
|
|
|
|
|
QFileInfo ElementsPanel::selectedFile() const {
|
|
|
|
|
QTreeWidgetItem *current_qtwi = currentItem();
|
|
|
|
|
if(!current_qtwi) return(QFileInfo());
|
|
|
|
|
return(QFileInfo(currentItem() -> data(0, 42).toString()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ElementsPanel::launchElementEditor(const QString &filename) {
|
|
|
|
|
QETElementEditor *editor = new QETElementEditor();
|
|
|
|
|
editor -> fromFile(filename);
|
|
|
|
|
editor -> show();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ElementsPanel::lauchCategoryEditor(const QString &filename) {
|
|
|
|
|
ElementsCategoryEditor ece(filename, true);
|
|
|
|
|
if (ece.exec() == QDialog::Accepted) reload();
|
|
|
|
|
}
|