mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-09-14 20:33:05 +02:00
Gestion de deux dossiers distincts pour les descriptions XML des elements ; amelioration du panel d'appareils.
git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@6 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
parent
60fe06f126
commit
f0c4be6a43
@ -7,8 +7,6 @@ ElementPerso::ElementPerso(QString &nom_fichier, QGraphicsItem *qgi, Schema *s,
|
|||||||
elmt_etat = -1;
|
elmt_etat = -1;
|
||||||
|
|
||||||
// le fichier doit exister
|
// le fichier doit exister
|
||||||
QString chemin_elements = "elements/";
|
|
||||||
nomfichier = chemin_elements + nom_fichier;
|
|
||||||
if (!QFileInfo(nomfichier).exists()) {
|
if (!QFileInfo(nomfichier).exists()) {
|
||||||
if (etat != NULL) *etat = 1;
|
if (etat != NULL) *etat = 1;
|
||||||
elmt_etat = 1;
|
elmt_etat = 1;
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
<!-- orientation : 4 lettres = nord/sud/est/ouest avec d = default, y = yes et n = no -->
|
|
||||||
<definition type="element" nom="contacteur" width="15" height="70" hotspot_x="10" hotspot_y="5" orientation="dnny">
|
<definition type="element" nom="contacteur" width="15" height="70" hotspot_x="10" hotspot_y="5" orientation="dnny">
|
||||||
<ligne x1="-5" y1="19" x2="0" y2="40" antialias="true" style="normal" />
|
<ligne x1="-5" y1="19" x2="0" y2="40" antialias="true" style="normal" />
|
||||||
<ligne x1="0" y1="0" x2="0" y2="20" antialias="false" style="normal" />
|
<ligne x1="0" y1="0" x2="0" y2="20" antialias="false" style="normal" />
|
||||||
|
@ -4,51 +4,33 @@
|
|||||||
/**
|
/**
|
||||||
Constructeur
|
Constructeur
|
||||||
@param parent Le QWidget parent du panel d'appareils
|
@param parent Le QWidget parent du panel d'appareils
|
||||||
@todo : definir une classe heritant de QListWidgetItem et automatiser tout ca
|
|
||||||
*/
|
*/
|
||||||
PanelAppareils::PanelAppareils(QWidget *parent) : QListWidget(parent) {
|
PanelAppareils::PanelAppareils(QWidget *parent) : QTreeWidget(parent) {
|
||||||
|
|
||||||
// selection unique
|
// selection unique
|
||||||
setSelectionMode(QAbstractItemView::SingleSelection);
|
setSelectionMode(QAbstractItemView::SingleSelection);
|
||||||
|
setColumnCount(1);
|
||||||
|
setHeaderLabel("Elements");
|
||||||
|
|
||||||
// drag'n drop autorise
|
// drag'n drop autorise
|
||||||
setDragEnabled(true);
|
setDragEnabled(true);
|
||||||
setAcceptDrops(false);
|
setAcceptDrops(false);
|
||||||
setDropIndicatorShown(false);
|
setDropIndicatorShown(false);
|
||||||
|
|
||||||
// style, mouvement et taille des elements
|
// taille des elements
|
||||||
setIconSize(QSize(50, 50));
|
setIconSize(QSize(50, 50));
|
||||||
setMovement(QListView::Free);
|
|
||||||
setViewMode(QListView::ListMode);
|
|
||||||
|
|
||||||
// donnees
|
QTreeWidgetItem *elmts_qet = new QTreeWidgetItem(this, QStringList(tr("Collection QET")));
|
||||||
/*Element *del = new DEL(0,0);
|
QTreeWidgetItem *elmts_perso = new QTreeWidgetItem(this, QStringList(tr("Collection utilisateur")));
|
||||||
Element *contacteur = new Contacteur(0,0);
|
|
||||||
Element *entree = new Entree(0, 0);*/
|
|
||||||
|
|
||||||
QListWidgetItem *qlwi;
|
|
||||||
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 ");
|
|
||||||
|
|
||||||
// remplissage de la liste
|
// remplissage de la liste
|
||||||
QDir dossier_elements("elements/");
|
QDir dossier_elmts_qet(QETApp::commonElementsDir());
|
||||||
QStringList filtres;
|
QDir dossier_elmts_perso(QETApp::customElementsDir());
|
||||||
filtres << "*.elmt";
|
QStringList filtres("*.elmt");
|
||||||
QStringList fichiers = dossier_elements.entryList(filtres, QDir::Files, QDir::Name);
|
QStringList fichiers1 = dossier_elmts_qet.entryList(filtres, QDir::Files, QDir::Name);
|
||||||
foreach(QString fichier, fichiers) {
|
foreach(QString fichier, fichiers1) ajouterFichier(elmts_qet, QETApp::commonElementsDir()+fichier);
|
||||||
int etat;
|
QStringList fichiers2 = dossier_elmts_perso.entryList(filtres, QDir::Files, QDir::Name);
|
||||||
ElementPerso *elmt_perso = new ElementPerso(fichier, 0, 0, &etat);
|
foreach(QString fichier, fichiers2) ajouterFichier(elmts_perso, QETApp::customElementsDir()+fichier);
|
||||||
if (etat != 0) {
|
|
||||||
qDebug() << "Le chargement du composant" << fichier << "a echoue avec le code d'erreur" << etat;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
qlwi = new QListWidgetItem(QIcon(elmt_perso -> pixmap()), elmt_perso -> nom(), this);
|
|
||||||
qlwi -> setStatusTip(tool_tip + "\253 " + elmt_perso -> nom() + " \273");
|
|
||||||
qlwi -> setToolTip(elmt_perso -> nom());
|
|
||||||
qlwi -> setWhatsThis(whats_this);
|
|
||||||
qlwi -> setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
|
|
||||||
qlwi -> setData(42, fichier);
|
|
||||||
}
|
|
||||||
|
|
||||||
// force du noir sur une alternance de blanc (comme le schema) et de bleu clair
|
// force du noir sur une alternance de blanc (comme le schema) et de bleu clair
|
||||||
QPalette qp = palette();
|
QPalette qp = palette();
|
||||||
@ -77,6 +59,10 @@ void PanelAppareils::dropEvent(QDropEvent */*e*/) {
|
|||||||
@todo virer les lignes type «if ("tel appareil") construire TelAppareil» => trouver un moyen d'automatiser ca
|
@todo virer les lignes type «if ("tel appareil") construire TelAppareil» => trouver un moyen d'automatiser ca
|
||||||
*/
|
*/
|
||||||
void PanelAppareils::startDrag(Qt::DropActions /*supportedActions*/) {
|
void PanelAppareils::startDrag(Qt::DropActions /*supportedActions*/) {
|
||||||
|
// recupere le nom du fichier decrivant l'element
|
||||||
|
QString nom_fichier = currentItem() -> data(0, 42).toString();
|
||||||
|
if (nom_fichier == QString()) return;
|
||||||
|
|
||||||
// objet QDrag pour realiser le drag'n drop
|
// objet QDrag pour realiser le drag'n drop
|
||||||
QDrag *drag = new QDrag(this);
|
QDrag *drag = new QDrag(this);
|
||||||
|
|
||||||
@ -84,10 +70,8 @@ void PanelAppareils::startDrag(Qt::DropActions /*supportedActions*/) {
|
|||||||
QMimeData *mimeData = new QMimeData();
|
QMimeData *mimeData = new QMimeData();
|
||||||
|
|
||||||
// appareil temporaire pour fournir un apercu
|
// appareil temporaire pour fournir un apercu
|
||||||
Element *appar;
|
|
||||||
int etat;
|
int etat;
|
||||||
QString nom_fichier = currentItem() -> data(42).toString();
|
Element *appar = new ElementPerso(nom_fichier, 0, 0, &etat);
|
||||||
appar = new ElementPerso(nom_fichier, 0, 0, &etat);
|
|
||||||
if (etat != 0) {
|
if (etat != 0) {
|
||||||
delete appar;
|
delete appar;
|
||||||
return;
|
return;
|
||||||
@ -106,3 +90,26 @@ void PanelAppareils::startDrag(Qt::DropActions /*supportedActions*/) {
|
|||||||
// suppression de l'appareil temporaire
|
// suppression de l'appareil temporaire
|
||||||
delete appar;
|
delete appar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
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
|
||||||
|
*/
|
||||||
|
void PanelAppareils::ajouterFichier(QTreeWidgetItem *qtwi_parent, QString fichier) {
|
||||||
|
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;
|
||||||
|
ElementPerso *elmt_perso = new ElementPerso(fichier, 0, 0, &etat);
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
#ifndef PANELAPPAREILS_H
|
#ifndef PANELAPPAREILS_H
|
||||||
#define PANELAPPAREILS_H
|
#define PANELAPPAREILS_H
|
||||||
#include <QtGui>
|
#include <QtGui>
|
||||||
|
#include "qetapp.h"
|
||||||
/**
|
/**
|
||||||
Cette classe represente le panel d'appareils (en tant qu'element
|
Cette classe represente le panel d'appareils (en tant qu'element
|
||||||
graphique) dans lequel l'utilisateur choisit les composants de
|
graphique) dans lequel l'utilisateur choisit les composants de
|
||||||
son choix et les depose sur le schema par drag'n drop.
|
son choix et les depose sur le schema par drag'n drop.
|
||||||
*/
|
*/
|
||||||
class PanelAppareils : public QListWidget {
|
class PanelAppareils : public QTreeWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
PanelAppareils(QWidget * = 0);
|
PanelAppareils(QWidget * = 0);
|
||||||
@ -14,5 +15,7 @@
|
|||||||
void dragMoveEvent(QDragMoveEvent *);
|
void dragMoveEvent(QDragMoveEvent *);
|
||||||
void dropEvent(QDropEvent *);
|
void dropEvent(QDropEvent *);
|
||||||
void startDrag(Qt::DropActions);
|
void startDrag(Qt::DropActions);
|
||||||
|
private:
|
||||||
|
void ajouterFichier(QTreeWidgetItem *, QString);
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
22
qetapp.cpp
22
qetapp.cpp
@ -732,3 +732,25 @@ void QETApp::slot_updateMenuFenetres() {
|
|||||||
windowMapper.setMapping(action, sv);
|
windowMapper.setMapping(action, sv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return Le chemin du dossier dans lequel QET doit chercher les definitions XML des elements communs
|
||||||
|
*/
|
||||||
|
QString QETApp::commonElementsDir() {
|
||||||
|
return(QDir::current().path() + "/elements/");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@return Le chemin du dossier dans lequel QET doit chercher les definitions XML des elements propres a l'utilisateur
|
||||||
|
*/
|
||||||
|
QString QETApp::customElementsDir() {
|
||||||
|
return(QETApp::configDir() + "elements/");
|
||||||
|
}
|
||||||
|
|
||||||
|
QString QETApp::configDir() {
|
||||||
|
#ifdef Q_OS_WIN32
|
||||||
|
return(QDir::homePath() + "\Application Data\qet\\");
|
||||||
|
#else
|
||||||
|
return(QDir::homePath() + "/.qet/");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
4
qetapp.h
4
qetapp.h
@ -15,7 +15,9 @@
|
|||||||
QETApp(QWidget *parent=0);
|
QETApp(QWidget *parent=0);
|
||||||
void closeEvent(QCloseEvent * event );
|
void closeEvent(QCloseEvent * event );
|
||||||
void addSchemaVue(SchemaVue *);
|
void addSchemaVue(SchemaVue *);
|
||||||
|
static QString commonElementsDir();
|
||||||
|
static QString customElementsDir();
|
||||||
|
static QString QETApp::configDir();
|
||||||
public slots:
|
public slots:
|
||||||
void systray(QSystemTrayIcon::ActivationReason raison);
|
void systray(QSystemTrayIcon::ActivationReason raison);
|
||||||
void systrayReduire();
|
void systrayReduire();
|
||||||
|
20
schema.cpp
20
schema.cpp
@ -135,11 +135,17 @@ QDomDocument Schema::toXml(bool schema) {
|
|||||||
// table de correspondance entre les adresses des bornes et leurs ids
|
// table de correspondance entre les adresses des bornes et leurs ids
|
||||||
QHash<Borne *, int> table_adr_id;
|
QHash<Borne *, int> table_adr_id;
|
||||||
QDomElement elements = document.createElement("elements");
|
QDomElement elements = document.createElement("elements");
|
||||||
|
QDir dossier_elmts_persos = QDir(QETApp::customElementsDir());
|
||||||
foreach(Element *elmt, liste_elements) {
|
foreach(Element *elmt, liste_elements) {
|
||||||
QDomElement element = document.createElement("element");
|
QDomElement element = document.createElement("element");
|
||||||
|
|
||||||
// type, position, selection et orientation
|
// type
|
||||||
element.setAttribute("type", QFileInfo(elmt -> typeId()).fileName());
|
QString chemin_elmt = elmt -> typeId();
|
||||||
|
QString type_elmt = QString("");
|
||||||
|
if (QFileInfo(chemin_elmt).dir() == dossier_elmts_persos) type_elmt = "perso://";
|
||||||
|
element.setAttribute("type", type_elmt + QFileInfo(chemin_elmt).fileName());
|
||||||
|
|
||||||
|
// position, selection et orientation
|
||||||
element.setAttribute("x", elmt -> pos().x());
|
element.setAttribute("x", elmt -> pos().x());
|
||||||
element.setAttribute("y", elmt -> pos().y());
|
element.setAttribute("y", elmt -> pos().y());
|
||||||
if (elmt -> isSelected()) element.setAttribute("selected", "selected");
|
if (elmt -> isSelected()) element.setAttribute("selected", "selected");
|
||||||
@ -291,13 +297,11 @@ bool Schema::fromXml(QDomDocument &document, QPointF position) {
|
|||||||
Element *Schema::elementFromXml(QDomElement &e, QHash<int, Borne *> &table_id_adr) {
|
Element *Schema::elementFromXml(QDomElement &e, QHash<int, Borne *> &table_id_adr) {
|
||||||
// cree un element dont le type correspond à l'id type
|
// cree un element dont le type correspond à l'id type
|
||||||
QString type = e.attribute("type");
|
QString type = e.attribute("type");
|
||||||
|
QString chemin_fichier;
|
||||||
|
if (type.startsWith("perso://")) chemin_fichier = QETApp::commonElementsDir() + type.right(type.size()-8);
|
||||||
|
else chemin_fichier = QETApp::commonElementsDir() + type;
|
||||||
int etat;
|
int etat;
|
||||||
Element *nvel_elmt = new ElementPerso(type, 0, 0, &etat);
|
Element *nvel_elmt = new ElementPerso(chemin_fichier, 0, 0, &etat);
|
||||||
/*switch(e.attribute("type").toInt()) {
|
|
||||||
case 0: nvel_elmt = new Contacteur(); break;
|
|
||||||
case 1: nvel_elmt = new DEL(); break;
|
|
||||||
case 2: nvel_elmt = new Entree(); break;
|
|
||||||
}*/
|
|
||||||
if (etat != 0) return(false);
|
if (etat != 0) return(false);
|
||||||
bool retour = nvel_elmt -> fromXml(e, table_id_adr);
|
bool retour = nvel_elmt -> fromXml(e, table_id_adr);
|
||||||
if (!retour) {
|
if (!retour) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user