Classes "Schema" et "SchemaVue" renommees en "Diagram" et "DiagramView"

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@44 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavierqet
2007-01-29 00:41:12 +00:00
parent 647a0a8985
commit 2140671394
17 changed files with 275 additions and 273 deletions

View File

@@ -1,5 +1,5 @@
#include "borne.h" #include "borne.h"
#include "schema.h" #include "diagram.h"
#include "element.h" #include "element.h"
#include "conducteur.h" #include "conducteur.h"
@@ -48,7 +48,7 @@ void Borne::initialise(QPointF pf, Borne::Orientation o) {
*/ */
Borne::Borne() : QGraphicsItem(0, 0) { Borne::Borne() : QGraphicsItem(0, 0) {
initialise(QPointF(0.0, 0.0), Borne::Sud); initialise(QPointF(0.0, 0.0), Borne::Sud);
schema_scene = 0; diagram_scene = 0;
} }
/** /**
@@ -58,9 +58,9 @@ Borne::Borne() : QGraphicsItem(0, 0) {
@param e Element auquel cette borne appartient @param e Element auquel cette borne appartient
@param s Scene sur laquelle figure cette borne @param s Scene sur laquelle figure cette borne
*/ */
Borne::Borne(QPointF pf, Borne::Orientation o, Element *e, Schema *s) : QGraphicsItem(e, s) { Borne::Borne(QPointF pf, Borne::Orientation o, Element *e, Diagram *s) : QGraphicsItem(e, s) {
initialise(pf, o); initialise(pf, o);
schema_scene = s; diagram_scene = s;
} }
/** /**
@@ -71,7 +71,7 @@ Borne::Borne(QPointF pf, Borne::Orientation o, Element *e, Schema *s) : QGraphic
@param e Element auquel cette borne appartient @param e Element auquel cette borne appartient
@param s Scene sur laquelle figure cette borne @param s Scene sur laquelle figure cette borne
*/ */
Borne::Borne(qreal pf_x, qreal pf_y, Borne::Orientation o, Element *e, Schema *s) : QGraphicsItem(e, s) { Borne::Borne(qreal pf_x, qreal pf_y, Borne::Orientation o, Element *e, Diagram *s) : QGraphicsItem(e, s) {
initialise(QPointF(pf_x, pf_y), o); initialise(QPointF(pf_x, pf_y), o);
} }
@@ -222,7 +222,7 @@ void Borne::hoverLeaveEvent(QGraphicsSceneHoverEvent *) {
@param e L'evenement souris correspondant @param e L'evenement souris correspondant
*/ */
void Borne::mousePressEvent(QGraphicsSceneMouseEvent *e) { void Borne::mousePressEvent(QGraphicsSceneMouseEvent *e) {
if (Schema *s = qobject_cast<Schema *>(scene())) { if (Diagram *s = qobject_cast<Diagram *>(scene())) {
s -> setDepart(mapToScene(QPointF(amarrage_conducteur))); s -> setDepart(mapToScene(QPointF(amarrage_conducteur)));
s -> setArrivee(e -> scenePos()); s -> setArrivee(e -> scenePos());
s -> poseConducteur(true); s -> poseConducteur(true);
@@ -246,8 +246,8 @@ void Borne::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
borne_precedente -> update(); borne_precedente -> update();
} }
// si la scene est un Schema, on actualise le poseur de conducteur // si la scene est un Diagram, on actualise le poseur de conducteur
if (Schema *s = qobject_cast<Schema *>(scene())) s -> setArrivee(e -> scenePos()); if (Diagram *s = qobject_cast<Diagram *>(scene())) s -> setArrivee(e -> scenePos());
// on recupere la liste des qgi sous le pointeur // on recupere la liste des qgi sous le pointeur
QList<QGraphicsItem *> qgis = scene() -> items(e -> scenePos()); QList<QGraphicsItem *> qgis = scene() -> items(e -> scenePos());
@@ -306,8 +306,8 @@ void Borne::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
setCursor(Qt::ArrowCursor); setCursor(Qt::ArrowCursor);
borne_precedente = NULL; borne_precedente = NULL;
couleur_hovered = couleur_neutre; couleur_hovered = couleur_neutre;
// verifie que la scene est bien un Schema // verifie que la scene est bien un Diagram
if (Schema *s = qobject_cast<Schema *>(scene())) { if (Diagram *s = qobject_cast<Diagram *>(scene())) {
// on arrete de dessiner l'apercu du conducteur // on arrete de dessiner l'apercu du conducteur
s -> poseConducteur(false); s -> poseConducteur(false);
// on recupere l'element sous le pointeur lors du MouseReleaseEvent // on recupere l'element sous le pointeur lors du MouseReleaseEvent

10
borne.h
View File

@@ -5,7 +5,7 @@
#include <QtXml> #include <QtXml>
class Conducteur; class Conducteur;
class Element; class Element;
class Schema; class Diagram;
/** /**
Classe modelisant la « borne » d'un appareil, c'est-a-dire un Classe modelisant la « borne » d'un appareil, c'est-a-dire un
branchement possible pour un Conducteur. branchement possible pour un Conducteur.
@@ -21,8 +21,8 @@
// constructeurs // constructeurs
Borne(); Borne();
Borne(QPointF, Borne::Orientation, Element * = 0, Schema * = 0); Borne(QPointF, Borne::Orientation, Element * = 0, Diagram * = 0);
Borne(qreal, qreal, Borne::Orientation, Element * = 0, Schema * = 0); Borne(qreal, qreal, Borne::Orientation, Element * = 0, Diagram * = 0);
// destructeur // destructeur
~Borne(); ~Borne();
@@ -57,8 +57,8 @@
void mouseReleaseEvent(QGraphicsSceneMouseEvent *); void mouseReleaseEvent(QGraphicsSceneMouseEvent *);
private: private:
// pointeur vers la QGraphicsScene de type Schema (evite quelques casts en interne) // pointeur vers la QGraphicsScene de type Diagram (evite quelques casts en interne)
Schema *schema_scene; Diagram *diagram_scene;
// coordonnees des points d'amarrage // coordonnees des points d'amarrage
QPointF amarrage_conducteur; QPointF amarrage_conducteur;
QPointF amarrage_elmt; QPointF amarrage_elmt;

View File

@@ -1,13 +1,13 @@
#include <math.h> #include <math.h>
#include "conducteur.h" #include "conducteur.h"
#include "elementperso.h" #include "elementperso.h"
#include "schema.h" #include "diagram.h"
/** /**
Constructeur Constructeur
@param parent Le QObject parent du schema @param parent Le QObject parent du schema
*/ */
Schema::Schema(QObject *parent) : QGraphicsScene(parent) { Diagram::Diagram(QObject *parent) : QGraphicsScene(parent) {
setBackgroundBrush(Qt::white); setBackgroundBrush(Qt::white);
poseur_de_conducteur = new QGraphicsLineItem(0, 0); poseur_de_conducteur = new QGraphicsLineItem(0, 0);
poseur_de_conducteur -> setZValue(1000000); poseur_de_conducteur -> setZValue(1000000);
@@ -26,7 +26,7 @@ Schema::Schema(QObject *parent) : QGraphicsScene(parent) {
@param p Le QPainter a utiliser pour dessiner @param p Le QPainter a utiliser pour dessiner
@param r Le rectangle de la zone a dessiner @param r Le rectangle de la zone a dessiner
*/ */
void Schema::drawBackground(QPainter *p, const QRectF &r) { void Diagram::drawBackground(QPainter *p, const QRectF &r) {
p -> save(); p -> save();
// desactive tout antialiasing // desactive tout antialiasing
@@ -66,18 +66,18 @@ void Schema::drawBackground(QPainter *p, const QRectF &r) {
Exporte le schema vers une image Exporte le schema vers une image
@return Une QImage representant le schema @return Une QImage representant le schema
*/ */
QImage Schema::toImage(int width, int height, bool respectRatio) { QImage Diagram::toImage(int width, int height, bool respectRatio) {
// determine le contenu du schema // determine le contenu du schema
QRectF schema_content = itemsBoundingRect(); QRectF diagram_content = itemsBoundingRect();
// calcule la marge = 5 % de la longueur necessaire // calcule la marge = 5 % de la longueur necessaire
qreal margin = 0.05 * schema_content.width(); qreal margin = 0.05 * diagram_content.width();
// en deduit la zone source utilisee pour l'image // en deduit la zone source utilisee pour l'image
QRectF source_area = schema_content; QRectF source_area = diagram_content;
source_area.translate(-margin, -margin); source_area.translate(-margin, -margin);
source_area.setWidth(schema_content.width() + 2.0 * margin); source_area.setWidth(diagram_content.width() + 2.0 * margin);
source_area.setHeight(schema_content.height() + 2.0 * margin); source_area.setHeight(diagram_content.height() + 2.0 * margin);
// si les dimensions ne sont pas precisees, l'image est exportee a l'echelle 1:1 // si les dimensions ne sont pas precisees, l'image est exportee a l'echelle 1:1
QSize image_size = (width == -1 && height == -1) ? source_area.size().toSize() : QSize(width, height); QSize image_size = (width == -1 && height == -1) ? source_area.size().toSize() : QSize(width, height);
@@ -113,18 +113,18 @@ QImage Schema::toImage(int width, int height, bool respectRatio) {
Permet de connaitre les dimensions qu'aura l'image generee par la methode toImage() Permet de connaitre les dimensions qu'aura l'image generee par la methode toImage()
@return La taille de l'image generee par toImage() @return La taille de l'image generee par toImage()
*/ */
QSize Schema::imageSize() const { QSize Diagram::imageSize() const {
// determine le contenu du schema // determine le contenu du schema
QRectF schema_content = itemsBoundingRect(); QRectF diagram_content = itemsBoundingRect();
// calcule la marge = 5 % de la longueur necessaire // calcule la marge = 5 % de la longueur necessaire
qreal margin = 0.05 * schema_content.width(); qreal margin = 0.05 * diagram_content.width();
// en deduit la zone source utilisee pour l'image // en deduit la zone source utilisee pour l'image
QRectF source_area = schema_content; QRectF source_area = diagram_content;
source_area.translate(-margin, -margin); source_area.translate(-margin, -margin);
source_area.setWidth(schema_content.width() + 2.0 * margin); source_area.setWidth(diagram_content.width() + 2.0 * margin);
source_area.setHeight(schema_content.height() + 2.0 * margin); source_area.setHeight(diagram_content.height() + 2.0 * margin);
// renvoie la taille de la zone source // renvoie la taille de la zone source
return(source_area.size().toSize()); return(source_area.size().toSize());
@@ -136,15 +136,15 @@ QSize Schema::imageSize() const {
representer tout le schema ou seulement les elements selectionnes representer tout le schema ou seulement les elements selectionnes
@return Un Document XML (QDomDocument) @return Un Document XML (QDomDocument)
*/ */
QDomDocument Schema::toXml(bool schema) { QDomDocument Diagram::toXml(bool diagram) {
// document // document
QDomDocument document; QDomDocument document;
// racine de l'arbre XML // racine de l'arbre XML
QDomElement racine = document.createElement("schema"); QDomElement racine = document.createElement("diagram");
// proprietes du schema // proprietes du schema
if (schema) { if (diagram) {
if (!border_and_inset.author().isNull()) racine.setAttribute("auteur", border_and_inset.author()); if (!border_and_inset.author().isNull()) racine.setAttribute("auteur", border_and_inset.author());
if (!border_and_inset.date().isNull()) racine.setAttribute("date", border_and_inset.date().toString("yyyyMMdd")); if (!border_and_inset.date().isNull()) racine.setAttribute("date", border_and_inset.date().toString("yyyyMMdd"));
if (!border_and_inset.title().isNull()) racine.setAttribute("titre", border_and_inset.title()); if (!border_and_inset.title().isNull()) racine.setAttribute("titre", border_and_inset.title());
@@ -164,11 +164,11 @@ QDomDocument Schema::toXml(bool schema) {
// Determine les elements a « XMLiser » // Determine les elements a « XMLiser »
foreach(QGraphicsItem *qgi, items()) { foreach(QGraphicsItem *qgi, items()) {
if (Element *elmt = qgraphicsitem_cast<Element *>(qgi)) { if (Element *elmt = qgraphicsitem_cast<Element *>(qgi)) {
if (schema) liste_elements << elmt; if (diagram) liste_elements << elmt;
else if (elmt -> isSelected()) liste_elements << elmt; else if (elmt -> isSelected()) liste_elements << elmt;
} else if (Conducteur *f = qgraphicsitem_cast<Conducteur *>(qgi)) { } else if (Conducteur *f = qgraphicsitem_cast<Conducteur *>(qgi)) {
if (schema) liste_conducteurs << f; if (diagram) liste_conducteurs << f;
// lorsqu'on n'exporte pas tout le schema, il faut retirer les conducteurs non selectionnes // lorsqu'on n'exporte pas tout le diagram, il faut retirer les conducteurs non selectionnes
// et pour l'instant, les conducteurs non selectionnes sont les conducteurs dont un des elements n'est pas relie // et pour l'instant, les conducteurs non selectionnes sont les conducteurs dont un des elements n'est pas relie
else if (f -> borne1 -> parentItem() -> isSelected() && f -> borne2 -> parentItem() -> isSelected()) liste_conducteurs << f; else if (f -> borne1 -> parentItem() -> isSelected() && f -> borne2 -> parentItem() -> isSelected()) liste_conducteurs << f;
} }
@@ -234,19 +234,21 @@ QDomDocument Schema::toXml(bool schema) {
} }
/** /**
Importe le schema decrit dans un document XML. Si une position est Importe le diagram decrit dans un document XML. Si une position est
precisee, les elements importes sont positionnes de maniere a ce que le precisee, les elements importes sont positionnes de maniere a ce que le
coin superieur gauche du plus petit rectangle pouvant les entourant tous coin superieur gauche du plus petit rectangle pouvant les entourant tous
(le bounding rect) soit a cette position. (le bounding rect) soit a cette position.
@param document Le document XML a analyser @param document Le document XML a analyser
@param position La position du schema importe @param position La position du diagram importe
@param consider_informations Si vrai, les informations complementaires (auteur, titre, ...) seront prises en compte @param consider_informations Si vrai, les informations complementaires (auteur, titre, ...) seront prises en compte
@return true si l'import a reussi, false sinon @return true si l'import a reussi, false sinon
*/ */
bool Schema::fromXml(QDomDocument &document, QPointF position, bool consider_informations) { bool Diagram::fromXml(QDomDocument &document, QPointF position, bool consider_informations) {
QDomElement racine = document.documentElement(); QDomElement racine = document.documentElement();
// le premier element doit etre un schema // le premier element doit etre un schema
/// @todo renommer schema en diagram
if (racine.tagName() != "schema") return(false); if (racine.tagName() != "schema") return(false);
// lecture des attributs de ce schema // lecture des attributs de ce schema
if (consider_informations) { if (consider_informations) {
border_and_inset.setAuthor(racine.attribute("auteur")); border_and_inset.setAuthor(racine.attribute("auteur"));
@@ -329,10 +331,6 @@ bool Schema::fromXml(QDomDocument &document, QPointF position, bool consider_inf
bool cia = ((Element *)p2 -> parentItem()) -> connexionsInternesAcceptees(); bool cia = ((Element *)p2 -> parentItem()) -> connexionsInternesAcceptees();
if (!cia) foreach(QGraphicsItem *item, p2 -> parentItem() -> children()) if (item == p1) peut_poser_conducteur = false; if (!cia) foreach(QGraphicsItem *item, p2 -> parentItem() -> children()) if (item == p1) peut_poser_conducteur = false;
if (peut_poser_conducteur) new Conducteur(table_adr_id.value(id_p1), table_adr_id.value(id_p2), 0, this); if (peut_poser_conducteur) new Conducteur(table_adr_id.value(id_p1), table_adr_id.value(id_p2), 0, this);
/*if (peut_poser_conducteur) {
Conducteur *nc = new Conducteur(table_adr_id.value(id_p1), table_adr_id.value(id_p2), 0, this);
nc -> setFlags(QGraphicsItem::ItemIsSelectable);
}*/
} }
} else qDebug() << "Le chargement du conducteur" << id_p1 << id_p2 << "a echoue"; } else qDebug() << "Le chargement du conducteur" << id_p1 << id_p2 << "a echoue";
} }
@@ -346,7 +344,7 @@ bool Schema::fromXml(QDomDocument &document, QPointF position, bool consider_inf
@param table_id_adr Table de correspondance entre les entiers et les bornes @param table_id_adr Table de correspondance entre les entiers et les bornes
@return true si l'ajout a parfaitement reussi, false sinon @return true si l'ajout a parfaitement reussi, false sinon
*/ */
Element *Schema::elementFromXml(QDomElement &e, QHash<int, Borne *> &table_id_adr) { Element *Diagram::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 = QETApp::realPath(type); QString chemin_fichier = QETApp::realPath(type);
@@ -376,7 +374,7 @@ Element *Schema::elementFromXml(QDomElement &e, QHash<int, Borne *> &table_id_ad
Verifie si la liste des elements selectionnes a change. Si oui, le signal Verifie si la liste des elements selectionnes a change. Si oui, le signal
selectionChanged() est emis. selectionChanged() est emis.
*/ */
void Schema::slot_checkSelectionChange() { void Diagram::slot_checkSelectionChange() {
static QList<QGraphicsItem *> cache_selecteditems = QList<QGraphicsItem *>(); static QList<QGraphicsItem *> cache_selecteditems = QList<QGraphicsItem *>();
QList<QGraphicsItem *> selecteditems = selectedItems(); QList<QGraphicsItem *> selecteditems = selectedItems();
if (cache_selecteditems != selecteditems) emit(selectionChanged()); if (cache_selecteditems != selecteditems) emit(selectionChanged());
@@ -386,7 +384,7 @@ void Schema::slot_checkSelectionChange() {
/** /**
@return Le rectangle (coordonnees par rapport a la scene) delimitant le bord du schema @return Le rectangle (coordonnees par rapport a la scene) delimitant le bord du schema
*/ */
QRectF Schema::border() const { QRectF Diagram::border() const {
return( return(
QRectF( QRectF(
MARGIN, MARGIN,

View File

@@ -9,10 +9,10 @@
#include "borderinset.h" #include "borderinset.h"
class Element; class Element;
class Borne; class Borne;
class Schema : public QGraphicsScene { class Diagram : public QGraphicsScene {
Q_OBJECT Q_OBJECT
public: public:
Schema(QObject * = 0); Diagram(QObject * = 0);
void drawBackground(QPainter *, const QRectF &); void drawBackground(QPainter *, const QRectF &);
inline void poseConducteur(bool pf) { inline void poseConducteur(bool pf) {
if (pf) { if (pf) {

View File

@@ -1,14 +1,14 @@
#include "schemavue.h" #include "diagramview.h"
#include "schema.h" #include "diagram.h"
#include "elementperso.h" #include "elementperso.h"
/** /**
Initialise le SchemaVue Initialise le DiagramView
*/ */
void SchemaVue::initialise() { void DiagramView::initialise() {
setInteractive(true); setInteractive(true);
setAntialiasing(true); setAntialiasing(true);
setScene(scene = new Schema(this)); setScene(scene = new Diagram(this));
setDragMode(RubberBandDrag); setDragMode(RubberBandDrag);
setAcceptDrops(true); setAcceptDrops(true);
setWindowTitle(tr("Nouveau sch\351ma") + "[*]"); setWindowTitle(tr("Nouveau sch\351ma") + "[*]");
@@ -22,7 +22,7 @@ void SchemaVue::initialise() {
/** /**
Constructeur par defaut Constructeur par defaut
*/ */
SchemaVue::SchemaVue() : QGraphicsView() { DiagramView::DiagramView() : QGraphicsView() {
initialise(); initialise();
} }
@@ -30,23 +30,23 @@ SchemaVue::SchemaVue() : QGraphicsView() {
Constructeur Constructeur
@param parent Le QWidegt parent de cette vue de schema @param parent Le QWidegt parent de cette vue de schema
*/ */
SchemaVue::SchemaVue(QWidget *parent) : QGraphicsView(parent) { DiagramView::DiagramView(QWidget *parent) : QGraphicsView(parent) {
initialise(); initialise();
} }
/** /**
Permet de savoir si le rendu graphique du SchemaVue est antialiase ou non. Permet de savoir si le rendu graphique du DiagramView est antialiase ou non.
@return Un booleen indiquant si le SchemaVue est antialiase @return Un booleen indiquant si le DiagramView est antialiase
*/ */
bool SchemaVue::antialiased() const { bool DiagramView::antialiased() const {
return(antialiasing); return(antialiasing);
} }
/** /**
Active ou desactive l'antialiasing pour le rendu graphique du SchemaVue. Active ou desactive l'antialiasing pour le rendu graphique du DiagramView.
@param aa un booleen indiquant si le SchemaVue doit etre antialiase ou non @param aa un booleen indiquant si le DiagramView doit etre antialiase ou non
*/ */
void SchemaVue::setAntialiasing(bool aa) { void DiagramView::setAntialiasing(bool aa) {
antialiasing = aa; antialiasing = aa;
setRenderHint(QPainter::Antialiasing, aa); setRenderHint(QPainter::Antialiasing, aa);
setRenderHint(QPainter::TextAntialiasing, aa); setRenderHint(QPainter::TextAntialiasing, aa);
@@ -57,7 +57,7 @@ void SchemaVue::setAntialiasing(bool aa) {
/** /**
appelle la methode select sur tous les elements de la liste d'elements appelle la methode select sur tous les elements de la liste d'elements
*/ */
void SchemaVue::selectAll() { void DiagramView::selectAll() {
if (scene -> items().isEmpty()) return; if (scene -> items().isEmpty()) return;
foreach (QGraphicsItem *item, scene -> items()) item -> setSelected(true); foreach (QGraphicsItem *item, scene -> items()) item -> setSelected(true);
} }
@@ -65,7 +65,7 @@ void SchemaVue::selectAll() {
/** /**
appelle la methode deselect sur tous les elements de la liste d'elements appelle la methode deselect sur tous les elements de la liste d'elements
*/ */
void SchemaVue::selectNothing() { void DiagramView::selectNothing() {
if (scene -> items().isEmpty()) return; if (scene -> items().isEmpty()) return;
foreach (QGraphicsItem *item, scene -> items()) item -> setSelected(false); foreach (QGraphicsItem *item, scene -> items()) item -> setSelected(false);
} }
@@ -73,7 +73,7 @@ void SchemaVue::selectNothing() {
/** /**
Inverse l'etat de selection de tous les elements de la liste d'elements Inverse l'etat de selection de tous les elements de la liste d'elements
*/ */
void SchemaVue::selectInvert() { void DiagramView::selectInvert() {
if (scene -> items().isEmpty()) return; if (scene -> items().isEmpty()) return;
foreach (QGraphicsItem *item, scene -> items()) item -> setSelected(!item -> isSelected()); foreach (QGraphicsItem *item, scene -> items()) item -> setSelected(!item -> isSelected());
} }
@@ -81,7 +81,7 @@ void SchemaVue::selectInvert() {
/** /**
Supprime les composants selectionnes Supprime les composants selectionnes
*/ */
void SchemaVue::supprimer() { void DiagramView::supprimer() {
QList<QGraphicsItem *> garbage_elmt; QList<QGraphicsItem *> garbage_elmt;
QList<QGraphicsItem *> garbage_conducteurs; QList<QGraphicsItem *> garbage_conducteurs;
@@ -131,7 +131,7 @@ void SchemaVue::supprimer() {
Envoie un item vers le "garbage" pour qu'il soit supprime plus tard Envoie un item vers le "garbage" pour qu'il soit supprime plus tard
@param qgi L'item a supprimer @param qgi L'item a supprimer
*/ */
void SchemaVue::throwToGarbage(QGraphicsItem *qgi) { void DiagramView::throwToGarbage(QGraphicsItem *qgi) {
// pas de doublon dans le garbage (sinon ca va sentir la segfault) // pas de doublon dans le garbage (sinon ca va sentir la segfault)
bool qgi_deja_dans_le_garbage = false; bool qgi_deja_dans_le_garbage = false;
foreach(QGraphicsItem *gbg_qgi, garbage) { foreach(QGraphicsItem *gbg_qgi, garbage) {
@@ -146,7 +146,7 @@ void SchemaVue::throwToGarbage(QGraphicsItem *qgi) {
/** /**
Supprime tous les elements du "garbage" Supprime tous les elements du "garbage"
*/ */
void SchemaVue::flushGarbage() { void DiagramView::flushGarbage() {
foreach(QGraphicsItem *qgi, garbage) { foreach(QGraphicsItem *qgi, garbage) {
delete(qgi); delete(qgi);
garbage.removeAll(qgi); garbage.removeAll(qgi);
@@ -156,7 +156,7 @@ void SchemaVue::flushGarbage() {
/** /**
Pivote les composants selectionnes Pivote les composants selectionnes
*/ */
void SchemaVue::pivoter() { void DiagramView::pivoter() {
if (scene -> selectedItems().isEmpty()) return; if (scene -> selectedItems().isEmpty()) return;
foreach (QGraphicsItem *item, scene -> selectedItems()) { foreach (QGraphicsItem *item, scene -> selectedItems()) {
if (Element *elt = qgraphicsitem_cast<Element *>(item)) { if (Element *elt = qgraphicsitem_cast<Element *>(item)) {
@@ -170,7 +170,7 @@ void SchemaVue::pivoter() {
accepte ou refuse le drag'n drop en fonction du type de donnees entrant accepte ou refuse le drag'n drop en fonction du type de donnees entrant
@param e le QDragEnterEvent correspondant au drag'n drop tente @param e le QDragEnterEvent correspondant au drag'n drop tente
*/ */
void SchemaVue::dragEnterEvent(QDragEnterEvent *e) { void DiagramView::dragEnterEvent(QDragEnterEvent *e) {
if (e -> mimeData() -> hasFormat("text/plain")) e -> acceptProposedAction(); if (e -> mimeData() -> hasFormat("text/plain")) e -> acceptProposedAction();
else e-> ignore(); else e-> ignore();
} }
@@ -179,22 +179,22 @@ void SchemaVue::dragEnterEvent(QDragEnterEvent *e) {
gere les dragleaveevent gere les dragleaveevent
@param e le QDragEnterEvent correspondant au drag'n drop sortant @param e le QDragEnterEvent correspondant au drag'n drop sortant
*/ */
void SchemaVue::dragLeaveEvent(QDragLeaveEvent *) {} void DiagramView::dragLeaveEvent(QDragLeaveEvent *) {}
/** /**
accepte ou refuse le drag'n drop en fonction du type de donnees entrant accepte ou refuse le drag'n drop en fonction du type de donnees entrant
@param e le QDragMoveEvent correspondant au drag'n drop tente @param e le QDragMoveEvent correspondant au drag'n drop tente
*/ */
void SchemaVue::dragMoveEvent(QDragMoveEvent *e) { void DiagramView::dragMoveEvent(QDragMoveEvent *e) {
if (e -> mimeData() -> hasFormat("text/plain")) e -> acceptProposedAction(); if (e -> mimeData() -> hasFormat("text/plain")) e -> acceptProposedAction();
else e-> ignore(); else e-> ignore();
} }
/** /**
gere les depots (drop) acceptes sur le Schema gere les depots (drop) acceptes sur le Diagram
@param e le QDropEvent correspondant au drag'n drop effectue @param e le QDropEvent correspondant au drag'n drop effectue
*/ */
void SchemaVue::dropEvent(QDropEvent *e) { void DiagramView::dropEvent(QDropEvent *e) {
QString fichier = e -> mimeData() -> text(); QString fichier = e -> mimeData() -> text();
int etat; int etat;
Element *el = new ElementPerso(fichier, 0, 0, &etat); Element *el = new ElementPerso(fichier, 0, 0, &etat);
@@ -207,17 +207,17 @@ void SchemaVue::dropEvent(QDropEvent *e) {
} }
/** /**
Passe le Schema en mode visualisation Passe le Diagram en mode visualisation
*/ */
void SchemaVue::setVisualisationMode() { void DiagramView::setVisualisationMode() {
setDragMode(ScrollHandDrag); setDragMode(ScrollHandDrag);
emit(modeChanged()); emit(modeChanged());
} }
/** /**
Passe le Schema en mode Selection Passe le Diagram en mode Selection
*/ */
void SchemaVue::setSelectionMode() { void DiagramView::setSelectionMode() {
setDragMode(RubberBandDrag); setDragMode(RubberBandDrag);
viewport() -> setCursor(Qt::ArrowCursor); viewport() -> setCursor(Qt::ArrowCursor);
emit(modeChanged()); emit(modeChanged());
@@ -226,14 +226,14 @@ void SchemaVue::setSelectionMode() {
/** /**
Agrandit le schema (+33% = inverse des -25 % de zoomMoins()) Agrandit le schema (+33% = inverse des -25 % de zoomMoins())
*/ */
void SchemaVue::zoomPlus() { void DiagramView::zoomPlus() {
scale(4.0/3.0, 4.0/3.0); scale(4.0/3.0, 4.0/3.0);
} }
/** /**
Retrecit le schema (-25% = inverse des +33 % de zoomPlus()) Retrecit le schema (-25% = inverse des +33 % de zoomPlus())
*/ */
void SchemaVue::zoomMoins() { void DiagramView::zoomMoins() {
scale(0.75, 0.75); scale(0.75, 0.75);
} }
@@ -242,7 +242,7 @@ void SchemaVue::zoomMoins() {
schema soient visibles a l'ecran. S'il n'y a aucun element sur le schema, schema soient visibles a l'ecran. S'il n'y a aucun element sur le schema,
le zoom est reinitialise le zoom est reinitialise
*/ */
void SchemaVue::zoomFit() { void DiagramView::zoomFit() {
if (scene -> items().isEmpty()) { if (scene -> items().isEmpty()) {
zoomReset(); zoomReset();
return; return;
@@ -259,14 +259,14 @@ void SchemaVue::zoomFit() {
/** /**
Reinitialise le zoom Reinitialise le zoom
*/ */
void SchemaVue::zoomReset() { void DiagramView::zoomReset() {
resetMatrix(); resetMatrix();
} }
/** /**
copie les elements selectionnes du schema dans le presse-papier puis les supprime copie les elements selectionnes du schema dans le presse-papier puis les supprime
*/ */
void SchemaVue::couper() { void DiagramView::couper() {
copier(); copier();
supprimer(); supprimer();
} }
@@ -274,7 +274,7 @@ void SchemaVue::couper() {
/** /**
copie les elements selectionnes du schema dans le presse-papier copie les elements selectionnes du schema dans le presse-papier
*/ */
void SchemaVue::copier() { void DiagramView::copier() {
QClipboard *presse_papier = QApplication::clipboard(); QClipboard *presse_papier = QApplication::clipboard();
QString contenu_presse_papier = scene -> toXml(false).toString(4); QString contenu_presse_papier = scene -> toXml(false).toString(4);
if (presse_papier -> supportsSelection()) presse_papier -> setText(contenu_presse_papier, QClipboard::Selection); if (presse_papier -> supportsSelection()) presse_papier -> setText(contenu_presse_papier, QClipboard::Selection);
@@ -284,7 +284,7 @@ void SchemaVue::copier() {
/** /**
importe les elements contenus dans le presse-papier dans le schema importe les elements contenus dans le presse-papier dans le schema
*/ */
void SchemaVue::coller() { void DiagramView::coller() {
QString texte_presse_papier; QString texte_presse_papier;
QDomDocument document_xml; QDomDocument document_xml;
if ((texte_presse_papier = QApplication::clipboard() -> text()) == QString()) return; if ((texte_presse_papier = QApplication::clipboard() -> text()) == QString()) return;
@@ -295,7 +295,7 @@ void SchemaVue::coller() {
/** /**
gere les clics et plus particulierement le clic du milieu (= coller pour X11) gere les clics et plus particulierement le clic du milieu (= coller pour X11)
*/ */
void SchemaVue::mousePressEvent(QMouseEvent *e) { void DiagramView::mousePressEvent(QMouseEvent *e) {
if (e -> buttons() == Qt::MidButton) { if (e -> buttons() == Qt::MidButton) {
QString texte_presse_papier; QString texte_presse_papier;
QDomDocument document_xml; QDomDocument document_xml;
@@ -307,12 +307,12 @@ void SchemaVue::mousePressEvent(QMouseEvent *e) {
} }
/** /**
Ouvre un fichier *.qet dans cette SchemaVue Ouvre un fichier *.qet dans cette DiagramView
@param nom_fichier Nom du fichier a ouvrir @param nom_fichier Nom du fichier a ouvrir
@param erreur Si le pointeur est specifie, cet entier est mis a 0 en cas de reussite de l'ouverture, 1 si le fichier n'existe pas, 2 si le fichier n'est pas lisible, 3 si le fichier n'est pas un element XML, 4 si l'ouverture du fichier a echoue pour une autre raison (c'est pas ca qui manque ^^) @param erreur Si le pointeur est specifie, cet entier est mis a 0 en cas de reussite de l'ouverture, 1 si le fichier n'existe pas, 2 si le fichier n'est pas lisible, 3 si le fichier n'est pas un element XML, 4 si l'ouverture du fichier a echoue pour une autre raison (c'est pas ca qui manque ^^)
@return true si l'ouverture a reussi, false sinon @return true si l'ouverture a reussi, false sinon
*/ */
bool SchemaVue::ouvrir(QString n_fichier, int *erreur) { bool DiagramView::ouvrir(QString n_fichier, int *erreur) {
// verifie l'existence du fichier // verifie l'existence du fichier
if (!QFileInfo(n_fichier).exists()) { if (!QFileInfo(n_fichier).exists()) {
if (erreur != NULL) *erreur = 1; if (erreur != NULL) *erreur = 1;
@@ -348,11 +348,11 @@ bool SchemaVue::ouvrir(QString n_fichier, int *erreur) {
} }
} }
void SchemaVue::slot_selectionChanged() { void DiagramView::slot_selectionChanged() {
emit(selectionChanged()); emit(selectionChanged());
} }
void SchemaVue::closeEvent(QCloseEvent *event) { void DiagramView::closeEvent(QCloseEvent *event) {
// demande d'abord a l'utilisateur s'il veut enregistrer le schema en cours // demande d'abord a l'utilisateur s'il veut enregistrer le schema en cours
QMessageBox::StandardButton reponse = QMessageBox::question( QMessageBox::StandardButton reponse = QMessageBox::question(
this, this,
@@ -376,7 +376,7 @@ void SchemaVue::closeEvent(QCloseEvent *event) {
Si aucun nom de fichier n'est connu, cette methode appelle la methode enregistrer_sous Si aucun nom de fichier n'est connu, cette methode appelle la methode enregistrer_sous
@return true si l'enregistrement a reussi, false sinon @return true si l'enregistrement a reussi, false sinon
*/ */
bool SchemaVue::enregistrer() { bool DiagramView::enregistrer() {
if (nom_fichier == QString()) return(enregistrer_sous()); if (nom_fichier == QString()) return(enregistrer_sous());
else return(private_enregistrer(nom_fichier)); else return(private_enregistrer(nom_fichier));
} }
@@ -389,13 +389,13 @@ bool SchemaVue::enregistrer() {
Sinon, faux est renvoye. Sinon, faux est renvoye.
@return true si l'enregistrement a reussi, false sinon @return true si l'enregistrement a reussi, false sinon
*/ */
bool SchemaVue::enregistrer_sous() { bool DiagramView::enregistrer_sous() {
// demande un nom de fichier a l'utilisateur pour enregistrer le schema // demande un nom de fichier a l'utilisateur pour enregistrer le schema
QString n_fichier = QFileDialog::getSaveFileName( QString n_fichier = QFileDialog::getSaveFileName(
this, this,
tr("Enregistrer sous"), tr("Enregistrer sous"),
QDir::homePath(), QDir::homePath(),
tr("Schema QelectroTech (*.qet)") tr("Diagram QelectroTech (*.qet)")
); );
// si aucun nom n'est entre, renvoie faux. // si aucun nom n'est entre, renvoie faux.
if (n_fichier == "") return(false); if (n_fichier == "") return(false);
@@ -419,7 +419,7 @@ bool SchemaVue::enregistrer_sous() {
@param nom_fichier Nom du fichier dans lequel l'arbre XML doit etre ecrit @param nom_fichier Nom du fichier dans lequel l'arbre XML doit etre ecrit
@return true si l'enregistrement a reussi, false sinon @return true si l'enregistrement a reussi, false sinon
*/ */
bool SchemaVue::private_enregistrer(QString &n_fichier) { bool DiagramView::private_enregistrer(QString &n_fichier) {
QFile fichier(n_fichier); QFile fichier(n_fichier);
if (!fichier.open(QIODevice::WriteOnly | QIODevice::Text)) { if (!fichier.open(QIODevice::WriteOnly | QIODevice::Text)) {
QMessageBox::warning(this, tr("Erreur"), tr("Impossible d'ecrire dans ce fichier")); QMessageBox::warning(this, tr("Erreur"), tr("Impossible d'ecrire dans ce fichier"));

View File

@@ -1,22 +1,22 @@
#ifndef SCHEMAVUE_H #ifndef DIAGRAMVIEW_H
#define SCHEMAVUE_H #define DIAGRAMVIEW_H
#include <QtGui> #include <QtGui>
class Schema; class Diagram;
#include "element.h" #include "element.h"
#include "conducteur.h" #include "conducteur.h"
#define TAILLE_GRILLE 10 #define TAILLE_GRILLE 10
/** /**
Classe representant graphiquement un schema electrique Classe representant graphiquement un schema electrique
*/ */
class SchemaVue : public QGraphicsView { class DiagramView : public QGraphicsView {
Q_OBJECT Q_OBJECT
public: public:
// constructeurs // constructeurs
SchemaVue(); DiagramView();
SchemaVue(QWidget * = 0); DiagramView(QWidget * = 0);
// nouveaux attributs // nouveaux attributs
Schema *scene; Diagram *scene;
// methodes publiques // methodes publiques
bool antialiased() const; bool antialiased() const;
@@ -30,7 +30,7 @@
private: private:
bool private_enregistrer(QString &); bool private_enregistrer(QString &);
void initialise(); void initialise();
bool antialiasing; // booleen indiquant s'il faut effectuer un antialiasing sur le rendu graphique du SchemaVue bool antialiasing; // booleen indiquant s'il faut effectuer un antialiasing sur le rendu graphique du DiagramView
QList<QGraphicsItem *> garbage; QList<QGraphicsItem *> garbage;
void throwToGarbage(QGraphicsItem *); void throwToGarbage(QGraphicsItem *);

View File

@@ -1,5 +1,5 @@
#include "element.h" #include "element.h"
#include "schema.h" #include "diagram.h"
#include <QtDebug> #include <QtDebug>
/*** Methodes publiques ***/ /*** Methodes publiques ***/
@@ -7,7 +7,7 @@
/** /**
Constructeur pour un element sans scene ni parent Constructeur pour un element sans scene ni parent
*/ */
Element::Element(QGraphicsItem *parent, Schema *scene) : QGraphicsItem(parent, scene) { Element::Element(QGraphicsItem *parent, Diagram *scene) : QGraphicsItem(parent, scene) {
peut_relier_ses_propres_bornes = false; peut_relier_ses_propres_bornes = false;
setZValue(10); setZValue(10);
} }
@@ -191,12 +191,12 @@ void Element::updatePixmap() {
/** /**
Change la position de l'element en veillant a ce que l'element Change la position de l'element en veillant a ce que l'element
reste sur la grille du Schema auquel il appartient. reste sur la grille du Diagram auquel il appartient.
@param p Nouvelles coordonnees de l'element @param p Nouvelles coordonnees de l'element
*/ */
void Element::setPos(const QPointF &p) { void Element::setPos(const QPointF &p) {
if (p == pos()) return; if (p == pos()) return;
// pas la peine de positionner sur la grille si l'element n'est pas sur un Schema // pas la peine de positionner sur la grille si l'element n'est pas sur un Diagram
if (scene()) { if (scene()) {
// arrondit l'abscisse a 10 px pres // arrondit l'abscisse a 10 px pres
int p_x = qRound(p.x() / 10.0) * 10; int p_x = qRound(p.x() / 10.0) * 10;
@@ -208,7 +208,7 @@ void Element::setPos(const QPointF &p) {
/** /**
Change la position de l'element en veillant a ce que l'element Change la position de l'element en veillant a ce que l'element
reste sur la grille du Schema auquel il appartient. reste sur la grille du Diagram auquel il appartient.
@param x Nouvelle abscisse de l'element @param x Nouvelle abscisse de l'element
@param y Nouvelle ordonnee de l'element @param y Nouvelle ordonnee de l'element
*/ */

View File

@@ -2,12 +2,12 @@
#define ELEMENT_H #define ELEMENT_H
#include <QtGui> #include <QtGui>
#include "borne.h" #include "borne.h"
class Schema; class Diagram;
class Element : public QGraphicsItem { class Element : public QGraphicsItem {
public: public:
enum { Type = UserType + 1000 }; enum { Type = UserType + 1000 };
virtual int type() const { return Type; } virtual int type() const { return Type; }
Element(QGraphicsItem * = 0, Schema * = 0); Element(QGraphicsItem * = 0, Diagram * = 0);
virtual int nbBornes() const = 0; virtual int nbBornes() const = 0;
virtual int nbBornesMin() const = 0; virtual int nbBornesMin() const = 0;

View File

@@ -2,7 +2,7 @@
/** /**
Constructeur Constructeur
*/ */
ElementFixe::ElementFixe(QGraphicsItem *parent, Schema *scene) : Element(parent, scene) { ElementFixe::ElementFixe(QGraphicsItem *parent, Diagram *scene) : Element(parent, scene) {
} }
/** /**

View File

@@ -3,7 +3,7 @@
#include "element.h" #include "element.h"
class ElementFixe : public Element { class ElementFixe : public Element {
public: public:
ElementFixe(QGraphicsItem * = 0, Schema * = 0); ElementFixe(QGraphicsItem * = 0, Diagram * = 0);
int nbBornesMin() const; int nbBornesMin() const;
int nbBornesMax() const; int nbBornesMax() const;
virtual bool fromXml(QDomElement &, QHash<int, Borne *>&); virtual bool fromXml(QDomElement &, QHash<int, Borne *>&);

View File

@@ -7,7 +7,7 @@
en parametre. en parametre.
@param nom_fichier Le chemin du fichier XML decrivant l'element @param nom_fichier Le chemin du fichier XML decrivant l'element
@param qgi Le QGraphicsItem parent de cet element @param qgi Le QGraphicsItem parent de cet element
@param s Le Schema affichant cet element @param s Le Diagram affichant cet element
@param etat Un pointeur facultatif vers un entier. La valeur de cet entier @param etat Un pointeur facultatif vers un entier. La valeur de cet entier
sera changee de maniere a refleter le deroulement de l'instanciation : sera changee de maniere a refleter le deroulement de l'instanciation :
- 0 : L'instanciation a reussi - 0 : L'instanciation a reussi
@@ -20,7 +20,7 @@
- 7 : L'analyse d'un element XML decrivant une partie du dessin de l'element a echoue - 7 : L'analyse d'un element XML decrivant une partie du dessin de l'element a echoue
- 8 : Aucune partie du dessin n'a pu etre chargee - 8 : Aucune partie du dessin n'a pu etre chargee
*/ */
ElementPerso::ElementPerso(QString &nom_fichier, QGraphicsItem *qgi, Schema *s, int *etat) : ElementFixe(qgi, s) { ElementPerso::ElementPerso(QString &nom_fichier, QGraphicsItem *qgi, Diagram *s, int *etat) : ElementFixe(qgi, s) {
nomfichier = nom_fichier; nomfichier = nom_fichier;
nb_bornes = 0; nb_bornes = 0;
// pessimisme inside : par defaut, ca foire // pessimisme inside : par defaut, ca foire
@@ -162,7 +162,7 @@ int ElementPerso::nbBornes() const {
} }
/** /**
Dessine le composant sur le Schema Dessine le composant sur le Diagram
@param qp Le QPainter a utiliser pour dessiner l'element @param qp Le QPainter a utiliser pour dessiner l'element
@param qsogi Les options graphiques @param qsogi Les options graphiques
*/ */
@@ -183,7 +183,7 @@ void ElementPerso::paint(QPainter *qp, const QStyleOptionGraphicsItem *) {
@param s Le schema sur lequel sera affiche l'element perso @param s Le schema sur lequel sera affiche l'element perso
@return true si l'analyse reussit, false sinon @return true si l'analyse reussit, false sinon
*/ */
bool ElementPerso::parseElement(QDomElement &e, QPainter &qp, Schema *s) { bool ElementPerso::parseElement(QDomElement &e, QPainter &qp, Diagram *s) {
if (e.tagName() == "borne") return(parseBorne(e, s)); if (e.tagName() == "borne") return(parseBorne(e, s));
else if (e.tagName() == "ligne") return(parseLigne(e, qp)); else if (e.tagName() == "ligne") return(parseLigne(e, qp));
else if (e.tagName() == "ellipse") return(parseEllipse(e, qp)); else if (e.tagName() == "ellipse") return(parseEllipse(e, qp));
@@ -345,7 +345,7 @@ bool ElementPerso::parsePolygone(QDomElement &e, QPainter &qp) {
@param s Le schema sur lequel l'element perso sera affiche @param s Le schema sur lequel l'element perso sera affiche
@return true si l'analyse reussit, false sinon @return true si l'analyse reussit, false sinon
*/ */
bool ElementPerso::parseBorne(QDomElement &e, Schema *s) { bool ElementPerso::parseBorne(QDomElement &e, Diagram *s) {
// verifie la presence et la validite des attributs obligatoires // verifie la presence et la validite des attributs obligatoires
double bornex, borney; double bornex, borney;
Borne::Orientation borneo; Borne::Orientation borneo;

View File

@@ -4,7 +4,7 @@
#include <QtGui> #include <QtGui>
class ElementPerso : public ElementFixe { class ElementPerso : public ElementFixe {
public: public:
ElementPerso(QString &, QGraphicsItem * = 0, Schema * = 0, int * = NULL); ElementPerso(QString &, QGraphicsItem * = 0, Diagram * = 0, int * = NULL);
virtual int nbBornes() const; virtual int nbBornes() const;
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *); virtual void paint(QPainter *, const QStyleOptionGraphicsItem *);
inline QString typeId() { return(nomfichier); } inline QString typeId() { return(nomfichier); }
@@ -18,13 +18,13 @@
QString priv_nom; QString priv_nom;
QString nomfichier; QString nomfichier;
QPicture dessin; QPicture dessin;
bool parseElement(QDomElement &, QPainter &, Schema *); bool parseElement(QDomElement &, QPainter &, Diagram *);
bool parseLigne(QDomElement &, QPainter &); bool parseLigne(QDomElement &, QPainter &);
bool parseEllipse(QDomElement &, QPainter &); bool parseEllipse(QDomElement &, QPainter &);
bool parseCercle(QDomElement &, QPainter &); bool parseCercle(QDomElement &, QPainter &);
bool parseArc(QDomElement &, QPainter &); bool parseArc(QDomElement &, QPainter &);
bool parsePolygone(QDomElement &, QPainter &); bool parsePolygone(QDomElement &, QPainter &);
bool parseBorne(QDomElement &, Schema *); bool parseBorne(QDomElement &, Diagram *);
void setQPainterAntiAliasing(QPainter &, bool); void setQPainterAntiAliasing(QPainter &, bool);
bool attributeIsAnInteger(QDomElement &, QString, int * = NULL); bool attributeIsAnInteger(QDomElement &, QString, int * = NULL);
bool attributeIsAReal(QDomElement &, QString, double * = NULL); bool attributeIsAReal(QDomElement &, QString, double * = NULL);

View File

@@ -5,7 +5,7 @@
@param dia Le schema a exporter @param dia Le schema a exporter
@param parent Le Widget parent de ce dialogue @param parent Le Widget parent de ce dialogue
*/ */
ExportDialog::ExportDialog(Schema &dia, QWidget *parent) : QDialog(parent) { ExportDialog::ExportDialog(Diagram &dia, QWidget *parent) : QDialog(parent) {
// recupere le schema a exporter, sa taille et ses proportions // recupere le schema a exporter, sa taille et ses proportions
diagram = &dia; diagram = &dia;
diagram_size = diagram -> imageSize(); diagram_size = diagram -> imageSize();

View File

@@ -1,7 +1,7 @@
#ifndef EXPORTDIALOG_H #ifndef EXPORTDIALOG_H
#define EXPORTDIALOG_H #define EXPORTDIALOG_H
#include <QtGui> #include <QtGui>
#include "schema.h" #include "diagram.h"
/** /**
Cette classe represente le dialogue permettant d'exporter un schema Cette classe represente le dialogue permettant d'exporter un schema
sous forme d'image selon les desirs de l'utilisateur sous forme d'image selon les desirs de l'utilisateur
@@ -9,7 +9,7 @@
class ExportDialog : public QDialog { class ExportDialog : public QDialog {
Q_OBJECT Q_OBJECT
public: public:
ExportDialog(Schema &, QWidget * = 0); ExportDialog(Diagram &, QWidget * = 0);
private: private:
// elements graphiques // elements graphiques
@@ -28,7 +28,7 @@
bool dontchangeheight; bool dontchangeheight;
// elements relatifs au traitement effectue par le dialogue // elements relatifs au traitement effectue par le dialogue
Schema *diagram; Diagram *diagram;
QSize diagram_size; QSize diagram_size;
QString diagram_path; QString diagram_path;
qreal diagram_ratio; qreal diagram_ratio;

View File

@@ -18,8 +18,8 @@ HEADERS += aboutqet.h \
exportdialog.h \ exportdialog.h \
panelappareils.h \ panelappareils.h \
qetapp.h \ qetapp.h \
schema.h \ diagram.h \
schemavue.h diagramview.h
SOURCES += aboutqet.cpp \ SOURCES += aboutqet.cpp \
borderinset.cpp \ borderinset.cpp \
borne.cpp \ borne.cpp \
@@ -31,8 +31,8 @@ SOURCES += aboutqet.cpp \
main.cpp \ main.cpp \
panelappareils.cpp \ panelappareils.cpp \
qetapp.cpp \ qetapp.cpp \
schema.cpp \ diagram.cpp \
schemavue.cpp diagramview.cpp
RESOURCES += qelectrotech.qrc RESOURCES += qelectrotech.qrc
TRANSLATIONS += lang/qet_en.ts lang/qt_fr.ts TRANSLATIONS += lang/qet_en.ts lang/qt_fr.ts
QT += xml QT += xml

View File

@@ -1,10 +1,9 @@
#include "qetapp.h" #include "qetapp.h"
#include "schemavue.h" #include "diagramview.h"
#include "schema.h" #include "diagram.h"
#include "panelappareils.h" #include "panelappareils.h"
#include "aboutqet.h" #include "aboutqet.h"
#include "exportdialog.h" #include "exportdialog.h"
// #include "borderinset.h"
/** /**
constructeur constructeur
@@ -21,27 +20,27 @@ QETApp::QETApp(QWidget *parent) : QMainWindow(parent) {
QStringList args = QCoreApplication::arguments(); QStringList args = QCoreApplication::arguments();
// recupere les chemins de fichiers parmi les arguments // recupere les chemins de fichiers parmi les arguments
QStringList fichiers; QStringList files;
for (int i = 1 ; i < args.size() ; ++ i) { for (int i = 1 ; i < args.size() ; ++ i) {
if (QFileInfo(args.at(i)).exists()) fichiers << args.at(i); if (QFileInfo(args.at(i)).exists()) files << args.at(i);
} }
// si des chemins de fichiers valides sont passes en arguments // si des chemins de fichiers valides sont passes en arguments
QList<SchemaVue *> schema_vues; QList<DiagramView *> diagram_views;
if (fichiers.size()) { if (files.size()) {
// alors on ouvre ces fichiers // alors on ouvre ces fichiers
foreach(QString fichier, fichiers) { foreach(QString file, files) {
SchemaVue *sv = new SchemaVue(this); DiagramView *sv = new DiagramView(this);
if (sv -> ouvrir(fichier)) schema_vues << sv; if (sv -> ouvrir(file)) diagram_views << sv;
else delete sv; else delete sv;
} }
} }
// si aucun schema n'a ete ouvert jusqu'a maintenant, on ouvre un nouveau schema // si aucun schema n'a ete ouvert jusqu'a maintenant, on ouvre un nouveau schema
if (!schema_vues.size()) schema_vues << new SchemaVue(this); if (!diagram_views.size()) diagram_views << new DiagramView(this);
// ajout de tous les SchemaVue necessaires // ajout de tous les DiagramView necessaires
foreach (SchemaVue *sv, schema_vues) addSchemaVue(sv); foreach (DiagramView *sv, diagram_views) addDiagramView(sv);
// titre de la fenetre // titre de la fenetre
setWindowTitle(tr("QElectroTech")); setWindowTitle(tr("QElectroTech"));
@@ -75,7 +74,7 @@ QETApp::QETApp(QWidget *parent) : QMainWindow(parent) {
qsti -> setToolTip(tr("QElectroTech")); qsti -> setToolTip(tr("QElectroTech"));
connect(qsti, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(systray(QSystemTrayIcon::ActivationReason))); connect(qsti, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(systray(QSystemTrayIcon::ActivationReason)));
menu_systray = new QMenu(tr("QElectroTech")); menu_systray = new QMenu(tr("QElectroTech"));
menu_systray -> addAction(masquer_appli); menu_systray -> addAction(reduce_appli);
menu_systray -> addAction(quitter_qet); menu_systray -> addAction(quitter_qet);
qsti -> setContextMenu(menu_systray); qsti -> setContextMenu(menu_systray);
qsti -> show(); qsti -> show();
@@ -95,9 +94,9 @@ QETApp::QETApp(QWidget *parent) : QMainWindow(parent) {
Gere les evenements relatifs au QSystemTrayIcon Gere les evenements relatifs au QSystemTrayIcon
@param raison un entier representant l'evenement survenu sur le systray @param raison un entier representant l'evenement survenu sur le systray
*/ */
void QETApp::systray(QSystemTrayIcon::ActivationReason raison) { void QETApp::systray(QSystemTrayIcon::ActivationReason reason) {
if (!QSystemTrayIcon::isSystemTrayAvailable()) return; if (!QSystemTrayIcon::isSystemTrayAvailable()) return;
switch(raison) { switch(reason) {
case QSystemTrayIcon::Context: case QSystemTrayIcon::Context:
// affichage du menu // affichage du menu
(qsti -> contextMenu()) -> show(); (qsti -> contextMenu()) -> show();
@@ -105,7 +104,7 @@ void QETApp::systray(QSystemTrayIcon::ActivationReason raison) {
case QSystemTrayIcon::DoubleClick: case QSystemTrayIcon::DoubleClick:
case QSystemTrayIcon::Trigger: case QSystemTrayIcon::Trigger:
// reduction ou restauration de l'application // reduction ou restauration de l'application
if (isVisible()) systrayReduire(); else systrayRestaurer(); if (isVisible()) systrayReduce(); else systrayRestore();
break; break;
case QSystemTrayIcon::Unknown: case QSystemTrayIcon::Unknown:
default: // ne rien faire default: // ne rien faire
@@ -116,27 +115,27 @@ void QETApp::systray(QSystemTrayIcon::ActivationReason raison) {
/** /**
Reduit l'application dans le systray Reduit l'application dans le systray
*/ */
void QETApp::systrayReduire() { void QETApp::systrayReduce() {
// on sauvegarde la position et les dimensions de l'application // on sauvegarde la position et les dimensions de l'application
wg = saveGeometry(); wg = saveGeometry();
// on cache l'application // on cache l'application
hide(); hide();
// on ajoute le menu "Restaurer" et on enlève le menu "Masquer" // on ajoute le menu "Restaurer" et on enleve le menu "Masquer"
menu_systray -> insertAction(masquer_appli, restaurer_appli); menu_systray -> insertAction(reduce_appli, restore_appli);
menu_systray -> removeAction(masquer_appli); menu_systray -> removeAction(reduce_appli);
} }
/** /**
Restaure l'application reduite dans le systray Restaure l'application reduite dans le systray
*/ */
void QETApp::systrayRestaurer() { void QETApp::systrayRestore() {
// on restaure la position et les dimensions de l'application // on restaure la position et les dimensions de l'application
restoreGeometry(wg); restoreGeometry(wg);
// on affiche l'application // on affiche l'application
show(); show();
// on ajoute le menu "Masquer" et on enlève le menu "Restaurer" // on ajoute le menu "Masquer" et on enleve le menu "Restaurer"
menu_systray -> insertAction(restaurer_appli, masquer_appli); menu_systray -> insertAction(restore_appli, reduce_appli);
menu_systray -> removeAction(restaurer_appli); menu_systray -> removeAction(restore_appli);
} }
/** /**
@@ -144,20 +143,20 @@ void QETApp::systrayRestaurer() {
@param qce Le QCloseEvent correspondant a l'evenement de fermeture @param qce Le QCloseEvent correspondant a l'evenement de fermeture
*/ */
void QETApp::closeEvent(QCloseEvent *qce) { void QETApp::closeEvent(QCloseEvent *qce) {
quitter(qce); quit(qce);
} }
/** /**
Gere la sortie de l'application Gere la sortie de l'application
@param e Le QCloseEvent correspondant a l'evenement de fermeture @param e Le QCloseEvent correspondant a l'evenement de fermeture
*/ */
void QETApp::quitter(QCloseEvent *e) { void QETApp::quit(QCloseEvent *e) {
// quitte directement s'il n'y a aucun schema ouvert // quitte directement s'il n'y a aucun schema ouvert
bool peut_quitter = true; bool peut_quitter = true;
if (schemaEnCours()) { if (diagramEnCours()) {
// sinon demande la permission de fermer chaque schema // sinon demande la permission de fermer chaque schema
foreach(QWidget *fenetre, workspace.windowList()) { foreach(QWidget *fenetre, workspace.windowList()) {
if (qobject_cast<SchemaVue *>(fenetre)) { if (qobject_cast<DiagramView *>(fenetre)) {
workspace.setActiveWindow(fenetre); workspace.setActiveWindow(fenetre);
if (!fermer()) { if (!fermer()) {
peut_quitter = false; peut_quitter = false;
@@ -181,10 +180,10 @@ void QETApp::toggleFullScreen() {
} }
/** /**
Active ou desactive l'antialiasing sur le rendu graphique du Schema Active ou desactive l'antialiasing sur le rendu graphique du Diagram
*/ */
void QETApp::toggleAntialiasing() { void QETApp::toggleAntialiasing() {
SchemaVue *sv = schemaEnCours(); DiagramView *sv = diagramEnCours();
if (!sv) return; if (!sv) return;
sv -> setAntialiasing(!sv -> antialiased()); sv -> setAntialiasing(!sv -> antialiased());
toggle_aa -> setText(sv -> antialiased() ? tr("D\351sactiver l'&antialiasing") : tr("Activer l'&antialiasing")); toggle_aa -> setText(sv -> antialiased() ? tr("D\351sactiver l'&antialiasing") : tr("Activer l'&antialiasing"));
@@ -227,7 +226,7 @@ void QETApp::actions() {
sel_inverse = new QAction( tr("Inverser la s\351lection"), this); sel_inverse = new QAction( tr("Inverser la s\351lection"), this);
supprimer = new QAction(QIcon(":/ico/delete.png"), tr("Supprimer"), this); supprimer = new QAction(QIcon(":/ico/delete.png"), tr("Supprimer"), this);
pivoter = new QAction(QIcon(":/ico/pivoter.png"), tr("Pivoter"), this); pivoter = new QAction(QIcon(":/ico/pivoter.png"), tr("Pivoter"), this);
infos_schema = new QAction(QIcon(":/ico/info.png"), tr("Informations sur le sch\351ma"), this); infos_diagram = new QAction(QIcon(":/ico/info.png"), tr("Informations sur le sch\351ma"), this);
add_column = new QAction( tr("Ajouter une colonne"), this); add_column = new QAction( tr("Ajouter une colonne"), this);
remove_column = new QAction( tr("Enlever une colonne"), this); remove_column = new QAction( tr("Enlever une colonne"), this);
@@ -246,19 +245,19 @@ void QETApp::actions() {
f_mosaique = new QAction( tr("&Mosa\357que"), this); f_mosaique = new QAction( tr("&Mosa\357que"), this);
f_cascade = new QAction( tr("&Cascade"), this); f_cascade = new QAction( tr("&Cascade"), this);
f_reorganise = new QAction( tr("Arranger les fen\352tres réduites"),this); f_reorganise = new QAction( tr("Arranger les fen\352tres r\351duites"), this);
f_suiv = new QAction( tr("Fen\352tre suivante"), this); f_suiv = new QAction( tr("Fen\352tre suivante"), this);
f_prec = new QAction( tr("Fen\352tre pr\351c\351dente"), this); f_prec = new QAction( tr("Fen\352tre pr\351c\351dente"), this);
a_propos_de_qet = new QAction(QIcon(":/ico/qet.png"), tr("\300 &propos de QElectroTech"), this); a_propos_de_qet = new QAction(QIcon(":/ico/qet.png"), tr("\300 &propos de QElectroTech"), this);
a_propos_de_qt = new QAction(QIcon(":/ico/qt.png"), tr("\300 propos de &Qt"), this); a_propos_de_qt = new QAction(QIcon(":/ico/qt.png"), tr("\300 propos de &Qt"), this);
masquer_appli = new QAction(QIcon(":/ico/masquer.png"), tr("&Masquer"), this); reduce_appli = new QAction(QIcon(":/ico/masquer.png"), tr("&Masquer"), this);
restaurer_appli = new QAction(QIcon(":/ico/restaurer.png"), tr("&Restaurer"), this); restore_appli = new QAction(QIcon(":/ico/restaurer.png"), tr("&Restaurer"), this);
// info-bulles // info-bulles
masquer_appli -> setToolTip(tr("Reduire QElectroTech dans le systray")); reduce_appli -> setToolTip(tr("Reduire QElectroTech dans le systray"));
restaurer_appli -> setToolTip(tr("Restaurer QElectroTech")); restore_appli -> setToolTip(tr("Restaurer QElectroTech"));
// raccourcis clavier // raccourcis clavier
nouveau_fichier -> setShortcut(QKeySequence::New); nouveau_fichier -> setShortcut(QKeySequence::New);
@@ -310,7 +309,7 @@ void QETApp::actions() {
sel_inverse -> setStatusTip(tr("D\351s\351lectionne les \351l\351ments s\351lectionn\351s et s\351lectionne les \351l\351ments non s\351lectionn\351s")); sel_inverse -> setStatusTip(tr("D\351s\351lectionne les \351l\351ments s\351lectionn\351s et s\351lectionne les \351l\351ments non s\351lectionn\351s"));
supprimer -> setStatusTip(tr("Enl\350ve les \351l\351ments s\351lectionn\351s du sch\351ma")); supprimer -> setStatusTip(tr("Enl\350ve les \351l\351ments s\351lectionn\351s du sch\351ma"));
pivoter -> setStatusTip(tr("Pivote les \351l\351ments s\351lectionn\351s")); pivoter -> setStatusTip(tr("Pivote les \351l\351ments s\351lectionn\351s"));
infos_schema -> setStatusTip(tr("\311dite les informations affich\351es par le cartouche")); infos_diagram -> setStatusTip(tr("\311dite les informations affich\351es par le cartouche"));
add_column -> setStatusTip(tr("Ajoute une colonne au sch\351ma")); add_column -> setStatusTip(tr("Ajoute une colonne au sch\351ma"));
remove_column -> setStatusTip(tr("Enl\350ve une colonne au sch\351ma")); remove_column -> setStatusTip(tr("Enl\350ve une colonne au sch\351ma"));
@@ -329,7 +328,7 @@ void QETApp::actions() {
f_mosaique -> setStatusTip(tr("Dispose les fen\352tres en mosa\357que")); f_mosaique -> setStatusTip(tr("Dispose les fen\352tres en mosa\357que"));
f_cascade -> setStatusTip(tr("Dispose les fen\352tres en cascade")); f_cascade -> setStatusTip(tr("Dispose les fen\352tres en cascade"));
f_reorganise -> setStatusTip(tr("Aligne les fen\352tres réduites")); f_reorganise -> setStatusTip(tr("Aligne les fen\352tres r\351duites"));
f_suiv -> setStatusTip(tr("Active la fen\352tre suivante")); f_suiv -> setStatusTip(tr("Active la fen\352tre suivante"));
f_prec -> setStatusTip(tr("Active la fen\352tre pr\351c\351dente")); f_prec -> setStatusTip(tr("Active la fen\352tre pr\351c\351dente"));
@@ -347,7 +346,7 @@ void QETApp::actions() {
grp_visu_sel -> setExclusive(true); grp_visu_sel -> setExclusive(true);
// connexion a des slots // connexion a des slots
connect(quitter_qet, SIGNAL(triggered()), this, SLOT(quitter()) ); connect(quitter_qet, SIGNAL(triggered()), this, SLOT(quit()) );
connect(sel_tout, SIGNAL(triggered()), this, SLOT(slot_selectAll()) ); connect(sel_tout, SIGNAL(triggered()), this, SLOT(slot_selectAll()) );
connect(sel_rien, SIGNAL(triggered()), this, SLOT(slot_selectNothing()) ); connect(sel_rien, SIGNAL(triggered()), this, SLOT(slot_selectNothing()) );
connect(sel_inverse, SIGNAL(triggered()), this, SLOT(slot_selectInvert()) ); connect(sel_inverse, SIGNAL(triggered()), this, SLOT(slot_selectInvert()) );
@@ -359,8 +358,8 @@ void QETApp::actions() {
connect(mode_visualise, SIGNAL(triggered()), this, SLOT(slot_setVisualisationMode())); connect(mode_visualise, SIGNAL(triggered()), this, SLOT(slot_setVisualisationMode()));
connect(a_propos_de_qet, SIGNAL(triggered()), this, SLOT(aPropos()) ); connect(a_propos_de_qet, SIGNAL(triggered()), this, SLOT(aPropos()) );
connect(a_propos_de_qt, SIGNAL(triggered()), qApp, SLOT(aboutQt()) ); connect(a_propos_de_qt, SIGNAL(triggered()), qApp, SLOT(aboutQt()) );
connect(masquer_appli, SIGNAL(triggered()), this, SLOT(systrayReduire ()) ); connect(reduce_appli, SIGNAL(triggered()), this, SLOT(systrayReduce()) );
connect(restaurer_appli, SIGNAL(triggered()), this, SLOT(systrayRestaurer()) ); connect(restore_appli, SIGNAL(triggered()), this, SLOT(systrayRestore()) );
connect(zoom_avant, SIGNAL(triggered()), this, SLOT(slot_zoomPlus()) ); connect(zoom_avant, SIGNAL(triggered()), this, SLOT(slot_zoomPlus()) );
connect(zoom_arriere, SIGNAL(triggered()), this, SLOT(slot_zoomMoins()) ); connect(zoom_arriere, SIGNAL(triggered()), this, SLOT(slot_zoomMoins()) );
connect(zoom_adapte, SIGNAL(triggered()), this, SLOT(slot_zoomFit()) ); connect(zoom_adapte, SIGNAL(triggered()), this, SLOT(slot_zoomFit()) );
@@ -381,7 +380,7 @@ void QETApp::actions() {
connect(f_reorganise, SIGNAL(triggered()), &workspace, SLOT(arrangeIcons()) ); connect(f_reorganise, SIGNAL(triggered()), &workspace, SLOT(arrangeIcons()) );
connect(f_suiv, SIGNAL(triggered()), &workspace, SLOT(activateNextWindow()) ); connect(f_suiv, SIGNAL(triggered()), &workspace, SLOT(activateNextWindow()) );
connect(f_prec, SIGNAL(triggered()), &workspace, SLOT(activatePreviousWindow()) ); connect(f_prec, SIGNAL(triggered()), &workspace, SLOT(activatePreviousWindow()) );
connect(infos_schema, SIGNAL(activated()), this, SLOT(editInfos()) ); connect(infos_diagram, SIGNAL(activated()), this, SLOT(editInfos()) );
connect(add_column, SIGNAL(activated()), this, SLOT(slot_addColumn()) ); connect(add_column, SIGNAL(activated()), this, SLOT(slot_addColumn()) );
connect(remove_column, SIGNAL(activated()), this, SLOT(slot_removeColumn()) ); connect(remove_column, SIGNAL(activated()), this, SLOT(slot_removeColumn()) );
} }
@@ -435,7 +434,7 @@ void QETApp::menus() {
menu_edition -> addAction(supprimer); menu_edition -> addAction(supprimer);
menu_edition -> addAction(pivoter); menu_edition -> addAction(pivoter);
menu_edition -> addSeparator(); menu_edition -> addSeparator();
menu_edition -> addAction(infos_schema); menu_edition -> addAction(infos_diagram);
menu_edition -> addAction(add_column); menu_edition -> addAction(add_column);
menu_edition -> addAction(remove_column); menu_edition -> addAction(remove_column);
@@ -465,7 +464,7 @@ void QETApp::menus() {
menu_config -> addAction(entrer_pe); menu_config -> addAction(entrer_pe);
menu_config -> addAction(configurer); menu_config -> addAction(configurer);
// menu Fenêtres // menu Fenetres
slot_updateMenuFenetres(); slot_updateMenuFenetres();
// menu Aide // menu Aide
@@ -514,7 +513,7 @@ void QETApp::dialogue_imprimer() {
if (qpd.exec() == QDialog::Accepted) { if (qpd.exec() == QDialog::Accepted) {
QPainter qp(&qprin); QPainter qp(&qprin);
Schema *sc = schemaEnCours() -> scene; Diagram *sc = diagramEnCours() -> scene;
sc -> setAffichageGrille(false); sc -> setAffichageGrille(false);
sc -> render(&qp); sc -> render(&qp);
sc -> setAffichageGrille(true); sc -> setAffichageGrille(true);
@@ -525,7 +524,7 @@ void QETApp::dialogue_imprimer() {
Gere l'export de schema vers un autre format (PNG pour le moment) Gere l'export de schema vers un autre format (PNG pour le moment)
*/ */
void QETApp::dialogue_exporter() { void QETApp::dialogue_exporter() {
Schema *sc = schemaEnCours() -> scene; Diagram *sc = diagramEnCours() -> scene;
ExportDialog ed(*sc); ExportDialog ed(*sc);
ed.exec(); ed.exec();
} }
@@ -536,8 +535,8 @@ void QETApp::dialogue_exporter() {
@return true si l'enregistrement a reussi, false sinon @return true si l'enregistrement a reussi, false sinon
*/ */
bool QETApp::enregistrer() { bool QETApp::enregistrer() {
if (!schemaEnCours()) return(false); if (!diagramEnCours()) return(false);
return(schemaEnCours() -> enregistrer()); return(diagramEnCours() -> enregistrer());
} }
/** /**
@@ -550,8 +549,8 @@ bool QETApp::enregistrer() {
@todo detecter le chemin du bureau automatiquement @todo detecter le chemin du bureau automatiquement
*/ */
bool QETApp::dialogue_enregistrer_sous() { bool QETApp::dialogue_enregistrer_sous() {
if (!schemaEnCours()) return(false); if (!diagramEnCours()) return(false);
return(schemaEnCours() -> enregistrer_sous()); return(diagramEnCours() -> enregistrer_sous());
} }
/** /**
@@ -559,7 +558,7 @@ bool QETApp::dialogue_enregistrer_sous() {
@return true si tout s'est bien passe ; false si vous executez cette fonction dans un univers non cartesien (en fait y'a pas de return(false) :p) @return true si tout s'est bien passe ; false si vous executez cette fonction dans un univers non cartesien (en fait y'a pas de return(false) :p)
*/ */
bool QETApp::nouveau() { bool QETApp::nouveau() {
addSchemaVue(new SchemaVue(this)); addDiagramView(new DiagramView(this));
return(true); return(true);
} }
@@ -573,14 +572,14 @@ bool QETApp::ouvrir() {
this, this,
tr("Ouvrir un fichier"), tr("Ouvrir un fichier"),
QDir::homePath(), QDir::homePath(),
tr("Schema QelectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*)") tr("Diagram QelectroTech (*.qet);;Fichiers XML (*.xml);;Tous les fichiers (*)")
); );
if (nom_fichier == "") return(false); if (nom_fichier == "") return(false);
// verifie que le fichier n'est pas deja ouvert // verifie que le fichier n'est pas deja ouvert
QString chemin_fichier = QFileInfo(nom_fichier).canonicalFilePath(); QString chemin_fichier = QFileInfo(nom_fichier).canonicalFilePath();
foreach (QWidget *fenetre, workspace.windowList()) { foreach (QWidget *fenetre, workspace.windowList()) {
SchemaVue *fenetre_en_cours = qobject_cast<SchemaVue *>(fenetre); DiagramView *fenetre_en_cours = qobject_cast<DiagramView *>(fenetre);
if (QFileInfo(fenetre_en_cours -> nom_fichier).canonicalFilePath() == chemin_fichier) { if (QFileInfo(fenetre_en_cours -> nom_fichier).canonicalFilePath() == chemin_fichier) {
workspace.setActiveWindow(fenetre); workspace.setActiveWindow(fenetre);
return(false); return(false);
@@ -588,10 +587,10 @@ bool QETApp::ouvrir() {
} }
// ouvre le fichier // ouvre le fichier
SchemaVue *sv = new SchemaVue(this); DiagramView *sv = new DiagramView(this);
int code_erreur; int code_erreur;
if (sv -> ouvrir(nom_fichier, &code_erreur)) { if (sv -> ouvrir(nom_fichier, &code_erreur)) {
addSchemaVue(sv); addDiagramView(sv);
return(true); return(true);
} else { } else {
QString message_erreur; QString message_erreur;
@@ -613,123 +612,123 @@ bool QETApp::ouvrir() {
@todo detecter les modifications et ne demander que si besoin est @todo detecter les modifications et ne demander que si besoin est
*/ */
bool QETApp::fermer() { bool QETApp::fermer() {
SchemaVue *sv = schemaEnCours(); DiagramView *sv = diagramEnCours();
if (!sv) return(false); if (!sv) return(false);
bool fermeture_schema = sv -> close(); bool fermeture_diagram = sv -> close();
if (fermeture_schema) delete sv; if (fermeture_diagram) delete sv;
return(fermeture_schema); return(fermeture_diagram);
} }
/** /**
@return Le SchemaVue qui a le focus dans l'interface MDI @return Le DiagramView qui a le focus dans l'interface MDI
*/ */
SchemaVue *QETApp::schemaEnCours() { DiagramView *QETApp::diagramEnCours() {
return(qobject_cast<SchemaVue *>(workspace.activeWindow())); return(qobject_cast<DiagramView *>(workspace.activeWindow()));
} }
/** /**
Effectue l'action "couper" sur le schema en cours Effectue l'action "couper" sur le schema en cours
*/ */
void QETApp::slot_couper() { void QETApp::slot_couper() {
if(schemaEnCours()) schemaEnCours() -> couper(); if(diagramEnCours()) diagramEnCours() -> couper();
} }
/** /**
Effectue l'action "copier" sur le schema en cours Effectue l'action "copier" sur le diagram en cours
*/ */
void QETApp::slot_copier() { void QETApp::slot_copier() {
if(schemaEnCours()) schemaEnCours() -> copier(); if(diagramEnCours()) diagramEnCours() -> copier();
} }
/** /**
Effectue l'action "coller" sur le schema en cours Effectue l'action "coller" sur le schema en cours
*/ */
void QETApp::slot_coller() { void QETApp::slot_coller() {
if(schemaEnCours()) schemaEnCours() -> coller(); if(diagramEnCours()) diagramEnCours() -> coller();
} }
/** /**
Effectue l'action "zoom avant" sur le schema en cours Effectue l'action "zoom avant" sur le diagram en cours
*/ */
void QETApp::slot_zoomPlus() { void QETApp::slot_zoomPlus() {
if(schemaEnCours()) schemaEnCours() -> zoomPlus(); if(diagramEnCours()) diagramEnCours() -> zoomPlus();
} }
/** /**
Effectue l'action "zoom arriere" sur le schema en cours Effectue l'action "zoom arriere" sur le schema en cours
*/ */
void QETApp::slot_zoomMoins() { void QETApp::slot_zoomMoins() {
if(schemaEnCours()) schemaEnCours() -> zoomMoins(); if(diagramEnCours()) diagramEnCours() -> zoomMoins();
} }
/** /**
Effectue l'action "zoom arriere" sur le schema en cours Effectue l'action "zoom arriere" sur le diagram en cours
*/ */
void QETApp::slot_zoomFit() { void QETApp::slot_zoomFit() {
if(schemaEnCours()) schemaEnCours() -> zoomFit(); if(diagramEnCours()) diagramEnCours() -> zoomFit();
} }
/** /**
Effectue l'action "zoom par defaut" sur le schema en cours Effectue l'action "zoom par defaut" sur le schema en cours
*/ */
void QETApp::slot_zoomReset() { void QETApp::slot_zoomReset() {
if(schemaEnCours()) schemaEnCours() -> zoomReset(); if(diagramEnCours()) diagramEnCours() -> zoomReset();
} }
/** /**
Effectue l'action "selectionner tout" sur le schema en cours Effectue l'action "selectionner tout" sur le schema en cours
*/ */
void QETApp::slot_selectAll() { void QETApp::slot_selectAll() {
if(schemaEnCours()) schemaEnCours() -> selectAll(); if(diagramEnCours()) diagramEnCours() -> selectAll();
} }
/** /**
Effectue l'action "deselectionenr tout" sur le schema en cours Effectue l'action "deselectionenr tout" sur le schema en cours
*/ */
void QETApp::slot_selectNothing() { void QETApp::slot_selectNothing() {
if(schemaEnCours()) schemaEnCours() -> selectNothing(); if(diagramEnCours()) diagramEnCours() -> selectNothing();
} }
/** /**
Effectue l'action "inverser la selection" sur le schema en cours Effectue l'action "inverser la selection" sur le schema en cours
*/ */
void QETApp::slot_selectInvert() { void QETApp::slot_selectInvert() {
if(schemaEnCours()) schemaEnCours() -> selectInvert(); if(diagramEnCours()) diagramEnCours() -> selectInvert();
} }
/** /**
Effectue l'action "supprimer" sur le schema en cours Effectue l'action "supprimer" sur le schema en cours
*/ */
void QETApp::slot_supprimer() { void QETApp::slot_supprimer() {
if(schemaEnCours()) schemaEnCours() -> supprimer(); if(diagramEnCours()) diagramEnCours() -> supprimer();
} }
/** /**
Effectue l'action "pivoter" sur le schema en cours Effectue l'action "pivoter" sur le schema en cours
*/ */
void QETApp::slot_pivoter() { void QETApp::slot_pivoter() {
if(schemaEnCours()) schemaEnCours() -> pivoter(); if(diagramEnCours()) diagramEnCours() -> pivoter();
} }
/** /**
Effectue l'action "mode selection" sur le schema en cours Effectue l'action "mode selection" sur le schema en cours
*/ */
void QETApp::slot_setSelectionMode() { void QETApp::slot_setSelectionMode() {
if(schemaEnCours()) schemaEnCours() -> setSelectionMode(); if(diagramEnCours()) diagramEnCours() -> setSelectionMode();
} }
/** /**
Effectue l'action "mode visualisation" sur le schema en cours Effectue l'action "mode visualisation" sur le schema en cours
*/ */
void QETApp::slot_setVisualisationMode() { void QETApp::slot_setVisualisationMode() {
if(schemaEnCours()) schemaEnCours() -> setVisualisationMode(); if(diagramEnCours()) diagramEnCours() -> setVisualisationMode();
} }
/** /**
gere les actions ayant besoin d'un document ouvert gere les actions ayant besoin d'un document ouvert
*/ */
void QETApp::slot_updateActions() { void QETApp::slot_updateActions() {
SchemaVue *sv = schemaEnCours(); DiagramView *sv = diagramEnCours();
bool document_ouvert = (sv != 0); bool document_ouvert = (sv != 0);
// actions ayant juste besoin d'un document ouvert // actions ayant juste besoin d'un document ouvert
@@ -747,7 +746,7 @@ void QETApp::slot_updateActions() {
zoom_adapte -> setEnabled(document_ouvert); zoom_adapte -> setEnabled(document_ouvert);
zoom_reset -> setEnabled(document_ouvert); zoom_reset -> setEnabled(document_ouvert);
toggle_aa -> setEnabled(document_ouvert); toggle_aa -> setEnabled(document_ouvert);
infos_schema -> setEnabled(document_ouvert); infos_diagram -> setEnabled(document_ouvert);
// actions ayant aussi besoin d'un historique des actions // actions ayant aussi besoin d'un historique des actions
annuler -> setEnabled(document_ouvert); annuler -> setEnabled(document_ouvert);
@@ -797,15 +796,21 @@ void QETApp::slot_updateActions() {
/** /**
Ajoute un schema dans l'espace de travail Ajoute un schema dans l'espace de travail
@param sv L'objet SchemaVue a ajouter a l'espace de travail @param sv L'objet DiagramView a ajouter a l'espace de travail
*/ */
void QETApp::addSchemaVue(SchemaVue *sv) { void QETApp::addDiagramView(DiagramView *sv) {
if (!sv) return; if (!sv) return;
SchemaVue *s_v = schemaEnCours();
// on maximise la nouvelle fenetre si la fenetre en cours est inexistante ou bien maximisee
DiagramView *s_v = diagramEnCours();
bool maximise = ((!s_v) || (s_v -> windowState() & Qt::WindowMaximized)); bool maximise = ((!s_v) || (s_v -> windowState() & Qt::WindowMaximized));
// ajoute la fenetre
QWidget *p = workspace.addWindow(sv); QWidget *p = workspace.addWindow(sv);
connect(sv, SIGNAL(selectionChanged()), this, SLOT(slot_updateActions())); connect(sv, SIGNAL(selectionChanged()), this, SLOT(slot_updateActions()));
connect(sv, SIGNAL(modeChanged()), this, SLOT(slot_updateActions())); connect(sv, SIGNAL(modeChanged()), this, SLOT(slot_updateActions()));
// affiche la fenetre
if (maximise) p -> showMaximized(); if (maximise) p -> showMaximized();
else p -> show(); else p -> show();
} }
@@ -836,12 +841,12 @@ void QETApp::slot_updateMenuFenetres() {
QList<QWidget *> fenetres = workspace.windowList(); QList<QWidget *> fenetres = workspace.windowList();
if (!fenetres.isEmpty()) menu_fenetres -> addSeparator(); if (!fenetres.isEmpty()) menu_fenetres -> addSeparator();
for (int i = 0 ; i < fenetres.size() ; ++ i) { for (int i = 0 ; i < fenetres.size() ; ++ i) {
SchemaVue *sv = qobject_cast<SchemaVue *>(fenetres.at(i)); DiagramView *sv = qobject_cast<DiagramView *>(fenetres.at(i));
QString sv_titre = sv -> windowTitle().left(sv -> windowTitle().length() - 3); QString sv_titre = sv -> windowTitle().left(sv -> windowTitle().length() - 3);
QAction *action = menu_fenetres -> addAction(sv_titre); QAction *action = menu_fenetres -> addAction(sv_titre);
action -> setStatusTip(tr("Active la fen\352tre ") + sv_titre); action -> setStatusTip(tr("Active la fen\352tre ") + sv_titre);
action -> setCheckable(true); action -> setCheckable(true);
action -> setChecked(sv == schemaEnCours()); action -> setChecked(sv == diagramEnCours());
connect(action, SIGNAL(triggered()), &windowMapper, SLOT(map())); connect(action, SIGNAL(triggered()), &windowMapper, SLOT(map()));
windowMapper.setMapping(action, sv); windowMapper.setMapping(action, sv);
} }
@@ -871,7 +876,7 @@ QString QETApp::customElementsDir() {
lequel QET lira les informations de configuration et de personnalisation lequel QET lira les informations de configuration et de personnalisation
propres a l'utilisateur courant. Ce dossier est generalement propres a l'utilisateur courant. Ce dossier est generalement
C:\Documents And Settings\utilisateur\Application Data\qet sous Windows et C:\Documents And Settings\utilisateur\Application Data\qet sous Windows et
~/.qet sous les systèmes type UNIX. ~/.qet sous les systemes type UNIX.
@return Le chemin du dossier de configuration de QElectroTech @return Le chemin du dossier de configuration de QElectroTech
*/ */
QString QETApp::configDir() { QString QETApp::configDir() {
@@ -929,7 +934,7 @@ QString QETApp::languagesPath() {
void QETApp::editInfos() { void QETApp::editInfos() {
// ne fait rien s'il n'y a pas de schema ouvert // ne fait rien s'il n'y a pas de schema ouvert
SchemaVue *sv = schemaEnCours(); DiagramView *sv = diagramEnCours();
if (!sv) return; if (!sv) return;
// recupere le cartouche du schema // recupere le cartouche du schema
@@ -942,9 +947,9 @@ void QETApp::editInfos() {
QLineEdit *titre = new QLineEdit(inset -> title(), &popup); QLineEdit *titre = new QLineEdit(inset -> title(), &popup);
QLineEdit *auteur = new QLineEdit(inset -> author(), &popup); QLineEdit *auteur = new QLineEdit(inset -> author(), &popup);
QDate date_schema = QDate(inset -> date()); QDate date_diagram = QDate(inset -> date());
if (date_schema.isNull() || !date_schema.isValid()) date_schema = QDate::currentDate(); if (date_diagram.isNull() || !date_diagram.isValid()) date_diagram = QDate::currentDate();
QDateEdit *date = new QDateEdit(date_schema, &popup); QDateEdit *date = new QDateEdit(date_diagram, &popup);
date -> setCalendarPopup(true); date -> setCalendarPopup(true);
QLineEdit *fichier = new QLineEdit(inset -> fileName(), &popup); QLineEdit *fichier = new QLineEdit(inset -> fileName(), &popup);
QLineEdit *folio = new QLineEdit(inset -> folio(), &popup); QLineEdit *folio = new QLineEdit(inset -> folio(), &popup);
@@ -980,7 +985,7 @@ void QETApp::editInfos() {
} }
void QETApp::slot_addColumn() { void QETApp::slot_addColumn() {
SchemaVue *sv = schemaEnCours(); DiagramView *sv = diagramEnCours();
if (!sv) return; if (!sv) return;
// ajoute la colonne // ajoute la colonne
@@ -996,7 +1001,7 @@ void QETApp::slot_addColumn() {
} }
void QETApp::slot_removeColumn() { void QETApp::slot_removeColumn() {
SchemaVue *sv = schemaEnCours(); DiagramView *sv = diagramEnCours();
if (!sv) return; if (!sv) return;
sv -> scene -> border_and_inset.removeColumn(); sv -> scene -> border_and_inset.removeColumn();

View File

@@ -1,21 +1,21 @@
#ifndef QETAPP_H #ifndef QETAPP_H
#define QETAPP_H #define QETAPP_H
#include <QtGui> #include <QtGui>
class SchemaVue; class DiagramView;
class PanelAppareils; class PanelAppareils;
/** /**
Cette classe represente la fenetre principale de QElectroTech et, Cette classe represente la fenetre principale de QElectroTech et,
ipso facto, la plus grande partie de l'interface graphique de QElectroTech. ipso facto, la plus grande partie de l'interface graphique de QElectroTech.
Il s'agit d'un objet QMainWindow avec un QWorkSpace contenant des objets Il s'agit d'un objet QMainWindow avec un QWorkSpace contenant des objets
« Schema » en guise de widget central et un « Panel d'Appareils » en guise « Diagram » en guise de widget central et un « Panel d'Appareils » en guise
de widget « Dock ». de widget « Dock ».
*/ */
class QETApp : public QMainWindow { class QETApp : public QMainWindow {
Q_OBJECT Q_OBJECT
public: public:
QETApp(QWidget *parent=0); QETApp(QWidget * = 0);
void closeEvent(QCloseEvent * event ); void closeEvent(QCloseEvent *);
void addSchemaVue(SchemaVue *); void addDiagramView(DiagramView *);
static QString commonElementsDir(); static QString commonElementsDir();
static QString customElementsDir(); static QString customElementsDir();
static QString configDir(); static QString configDir();
@@ -23,10 +23,10 @@
static QString realPath(QString &); static QString realPath(QString &);
static QString symbolicPath(QString &); static QString symbolicPath(QString &);
public slots: public slots:
void systray(QSystemTrayIcon::ActivationReason raison); void systray(QSystemTrayIcon::ActivationReason);
void systrayReduire(); void systrayReduce();
void systrayRestaurer(); void systrayRestore();
void quitter(QCloseEvent * = NULL); void quit(QCloseEvent * = NULL);
void toggleFullScreen(); void toggleFullScreen();
void toggleAntialiasing(); void toggleAntialiasing();
void aPropos(); void aPropos();
@@ -63,12 +63,12 @@
QAction *supprimer; QAction *supprimer;
QAction *selectionner; QAction *selectionner;
QAction *pivoter; QAction *pivoter;
QAction *infos_schema; QAction *infos_diagram;
QAction *add_column; QAction *add_column;
QAction *remove_column; QAction *remove_column;
QAction *poser_fil; QAction *poser_fil;
QAction *masquer_appli; QAction *reduce_appli;
QAction *restaurer_appli; QAction *restore_appli;
QAction *zoom_avant; QAction *zoom_avant;
QAction *zoom_arriere; QAction *zoom_arriere;
QAction *zoom_adapte; QAction *zoom_adapte;
@@ -91,7 +91,7 @@
private: private:
QWorkspace workspace; QWorkspace workspace;
SchemaVue *schemaEnCours(); DiagramView *diagramEnCours();
QSignalMapper windowMapper; QSignalMapper windowMapper;
/// Dock pour le Panel d'Appareils /// Dock pour le Panel d'Appareils
QDockWidget *qdw_pa; QDockWidget *qdw_pa;
@@ -101,7 +101,6 @@
QMenu *menu_systray; QMenu *menu_systray;
QAction *systray_masquer; QAction *systray_masquer;
QAction * config_fullscreen; QAction * config_fullscreen;
QAction *systray_quitter;
QMenu *menu_fenetres; QMenu *menu_fenetres;
/// Icone dans le systray /// Icone dans le systray
QSystemTrayIcon *qsti; QSystemTrayIcon *qsti;