Nettoyage

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@85 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavierqet
2007-04-12 03:13:13 +00:00
parent 7d25e6091f
commit 4135197421
38 changed files with 1004 additions and 721 deletions

View File

@@ -30,6 +30,12 @@ AboutQET::AboutQET(QWidget *parent) : QDialog(parent) {
setLayout(disposition); setLayout(disposition);
} }
/**
Destructeur
*/
AboutQET::~AboutQET() {
}
/** /**
@return Le titre QElectroTech avec son icone @return Le titre QElectroTech avec son icone
*/ */
@@ -58,7 +64,7 @@ QWidget *AboutQET::ongletAPropos() const {
QLabel *apropos = new QLabel( QLabel *apropos = new QLabel(
tr("QElectroTech, une application de r\351alisation de sch\351mas \351lectriques.") + tr("QElectroTech, une application de r\351alisation de sch\351mas \351lectriques.") +
"<br><br>" + "<br><br>" +
tr("\251 2006 Les d\351veloppeurs de QElectroTech") + tr("\251 2006-2007 Les d\351veloppeurs de QElectroTech") +
"<br><br>" "<br><br>"
"<a href=\"http://qelectrotech.tuxfamily.org/\">" "<a href=\"http://qelectrotech.tuxfamily.org/\">"
"http://qelectrotech.tuxfamily.org/</a>" "http://qelectrotech.tuxfamily.org/</a>"

View File

@@ -1,18 +1,26 @@
#ifndef ABOUTQET_H #ifndef ABOUTQET_H
#define ABOUTQET_H #define ABOUTQET_H
#include <QtGui> #include <QtGui>
/** /**
Cette classe represente la boite de dialogue Cette classe represente la boite de dialogue
« A propos de QElectroTech » « A propos de QElectroTech »
*/ */
class AboutQET : public QDialog { class AboutQET : public QDialog {
Q_OBJECT Q_OBJECT
public:
AboutQET(QWidget * = 0); // constructeurs, destructeur
private: public:
QWidget *titre() const; AboutQET(QWidget * = 0);
QWidget *ongletAPropos() const; virtual ~AboutQET();
QWidget *ongletAuteurs() const;
QWidget *ongletLicence() const; private:
}; AboutQET(AboutQET &);
// methodes
private:
QWidget *titre() const;
QWidget *ongletAPropos() const;
QWidget *ongletAuteurs() const;
QWidget *ongletLicence() const;
};
#endif #endif

View File

@@ -1,98 +1,108 @@
#ifndef BORDERINSET_H #ifndef BORDERINSET_H
#define BORDERINSET_H #define BORDERINSET_H
#include <QObject> #include <QObject>
#include <QRectF> #include <QRectF>
#include <QPainter> #include <QPainter>
#include <QDate> #include <QDate>
/** /**
Cette classe represente l'ensemble bordure + cartouche qui encadre le Cette classe represente l'ensemble bordure + cartouche qui encadre le
schema electrique. schema electrique.
*/ */
class BorderInset : public QObject { class BorderInset : public QObject {
Q_OBJECT Q_OBJECT
public:
BorderInset(QObject * = 0);
~BorderInset();
void draw(QPainter *, qreal = 0.0, qreal = 0.0);
// methodes d'acces en lecture aux dimensions // constructeurs, destructeur
int nbColumn() const { return(nb_columns); } public:
qreal columnsWidth() const { return(columns_width); } BorderInset(QObject * = 0);
qreal columnsHeaderHeight() const { return(columns_header_height); } virtual ~BorderInset();
qreal columnsHeight() const { return(columns_height); }
qreal borderWidth() const { return(nb_columns * columns_width); }
qreal borderHeight() const { return(columns_height + inset_height); }
qreal insetWidth() const { return(inset_width); }
qreal insetHeight() const { return(inset_height); }
qreal minColumnsHeight() const { return(min_columns_height); }
int minNbColumns() const { return(min_nb_columns); }
// methodes d'acces en lecture aux informations du cartouche private:
QString author() const { return(bi_author); } BorderInset(const BorderInset &);
QDate date() const { return(bi_date); }
QString title() const { return(bi_title); }
QString folio() const { return(bi_folio); }
QString fileName() const { return(bi_filename); }
// methodes d'acces en lecture aux options // methodes
bool insetIsDisplayed() const { return(display_inset); } public:
bool columnsAreDisplayed() const { return(display_columns); } void draw(QPainter *, qreal = 0.0, qreal = 0.0);
bool borderIsDisplayed() const { return(display_border); }
// methodes d'acces en ecriture aux dimensions // methodes d'acces en lecture aux dimensions
void addColumn (); int nbColumn() const { return(nb_columns); }
void removeColumn (); qreal columnsWidth() const { return(columns_width); }
void setNbColumns (int); qreal columnsHeaderHeight() const { return(columns_header_height); }
void setColumnsWidth (const qreal &); qreal columnsHeight() const { return(columns_height); }
void setColumnsHeaderHeight(const qreal &); qreal borderWidth() const { return(nb_columns * columns_width); }
void setColumnsHeight (const qreal &); qreal borderHeight() const { return(columns_height + inset_height); }
void setInsetWidth (const qreal &); qreal insetWidth() const { return(inset_width); }
void setInsetHeight (const qreal &); qreal insetHeight() const { return(inset_height); }
qreal minColumnsHeight() const { return(min_columns_height); }
int minNbColumns() const { return(min_nb_columns); }
// methodes d'acces en ecriture aux informations du cartouche // methodes d'acces en lecture aux informations du cartouche
void setAuthor (const QString &author) { bi_author = author; } QString author() const { return(bi_author); }
void setDate (const QDate &date) { bi_date = date; } QDate date() const { return(bi_date); }
void setTitle (const QString &title) { bi_title = title; } QString title() const { return(bi_title); }
void setFolio (const QString &folio) { bi_folio = folio; } QString folio() const { return(bi_folio); }
void setFileName (const QString &filename) { bi_filename = filename; } QString fileName() const { return(bi_filename); }
// methodes d'acces en ecriture aux options // methodes d'acces en lecture aux options
void displayInset (bool di) { display_inset = di; } bool insetIsDisplayed() const { return(display_inset); }
void displayColumns (bool dc) { display_columns = dc; } bool columnsAreDisplayed() const { return(display_columns); }
void displayBorder (bool db) { display_border = db; } bool borderIsDisplayed() const { return(display_border); }
private: // methodes d'acces en ecriture aux dimensions
// informations du cartouche void addColumn ();
QString bi_author; void removeColumn ();
QDate bi_date; void setNbColumns (int);
QString bi_title; void setColumnsWidth (const qreal &);
QString bi_folio; // vraiment necessaire ce truc ? void setColumnsHeaderHeight(const qreal &);
QString bi_filename; // meme remarque void setColumnsHeight (const qreal &);
void setInsetWidth (const qreal &);
void setInsetHeight (const qreal &);
// dimensions du cadre et du cartouche // methodes d'acces en ecriture aux informations du cartouche
int nb_columns; void setAuthor (const QString &author) { bi_author = author; }
int min_nb_columns; void setDate (const QDate &date) { bi_date = date; }
qreal columns_width; void setTitle (const QString &title) { bi_title = title; }
qreal columns_header_height; void setFolio (const QString &folio) { bi_folio = folio; }
qreal columns_height; void setFileName (const QString &filename) { bi_filename = filename; }
qreal min_columns_height;
qreal inset_width;
qreal inset_height;
// rectangles utilises pour le dessin // methodes d'acces en ecriture aux options
QRectF border; void displayInset (bool di) { display_inset = di; }
QRectF inset; void displayColumns (bool dc) { display_columns = dc; }
QRectF inset_author; void displayBorder (bool db) { display_border = db; }
QRectF inset_date;
QRectF inset_title;
QRectF inset_file;
QRectF inset_folio;
// booleens pour les options de dessin private:
bool display_inset; void updateRectangles();
bool display_columns;
bool display_border;
void updateRectangles(); // attributs
}; private:
// informations du cartouche
QString bi_author;
QDate bi_date;
QString bi_title;
QString bi_folio; // vraiment necessaire ce truc ?
QString bi_filename; // meme remarque
// dimensions du cadre et du cartouche
int nb_columns;
int min_nb_columns;
qreal columns_width;
qreal columns_header_height;
qreal columns_height;
qreal min_columns_height;
qreal inset_width;
qreal inset_height;
// rectangles utilises pour le dessin
QRectF border;
QRectF inset;
QRectF inset_author;
QRectF inset_date;
QRectF inset_title;
QRectF inset_file;
QRectF inset_folio;
// booleens pour les options de dessin
bool display_inset;
bool display_columns;
bool display_border;
};
#endif #endif

View File

@@ -51,6 +51,21 @@ Conducer::Conducer(Terminal *p1, Terminal* p2, Element *parent, QGraphicsScene *
calculateTextItemPosition(); calculateTextItemPosition();
} }
/**
Destructeur
Detruit le conducteur ainsi que ses segments. Il ne detruit pas les bornes
mais s'en detache
*/
Conducer::~Conducer() {
// qDebug() << "~Conducer()" << (void *)this;
// se detache des bornes
if (!isDestroyed()) destroy();
// supprime les segments
while (segments -> hasNextSegment()) delete segments -> nextSegment();
delete segments;
}
/** /**
Met a jour la representation graphique du conducteur. Met a jour la representation graphique du conducteur.
@param rect Rectangle a mettre a jour @param rect Rectangle a mettre a jour
@@ -632,7 +647,7 @@ qreal Conducer::conducer_bound(qreal tobound, qreal bound, bool positive) {
/** /**
@return Le nombre de segments composant le conducteur. @return Le nombre de segments composant le conducteur.
*/ */
int Conducer::nbSegments() { int Conducer::nbSegments() const {
if (segments == NULL) return(0); if (segments == NULL) return(0);
int nb_seg = 1; int nb_seg = 1;
ConducerSegment *segment = segments; ConducerSegment *segment = segments;
@@ -701,7 +716,7 @@ void Conducer::pointsToSegments(QList<QPointF> points_list) {
@param point point cliquable @param point point cliquable
@return true si l'on peut considerer que le point a ete clique, false sinon @return true si l'on peut considerer que le point a ete clique, false sinon
*/ */
bool Conducer::hasClickedOn(QPointF press_point, QPointF point) { bool Conducer::hasClickedOn(QPointF press_point, QPointF point) const {
return ( return (
press_point.x() >= point.x() - 5.0 &&\ press_point.x() >= point.x() - 5.0 &&\
press_point.x() < point.x() + 5.0 &&\ press_point.x() < point.x() + 5.0 &&\

View File

@@ -1,79 +1,88 @@
#ifndef CONDUCTEUR_H #ifndef CONDUCTEUR_H
#define CONDUCTEUR_H #define CONDUCTEUR_H
#include <QtGui> #include <QtGui>
#include "terminal.h" #include "terminal.h"
class ConducerSegment; class ConducerSegment;
class Element; class Element;
/** /**
Cette classe represente un conducteur. Un conducteur relie deux bornes d'element. Cette classe represente un conducteur. Un conducteur relie deux bornes d'element.
*/ */
class Conducer : public QGraphicsPathItem { class Conducer : public QGraphicsPathItem {
public:
enum { Type = UserType + 1001 };
virtual int type() const { return Type; }
Conducer(Terminal *, Terminal *, Element * = 0, QGraphicsScene * = 0);
//virtual ~Conducer();
void destroy(); // constructeurs, destructeur
bool isDestroyed() const { return(destroyed); } public:
void updateWithNewPos(const QRectF &, const Terminal *, const QPointF &); Conducer(Terminal *, Terminal *, Element * = 0, QGraphicsScene * = 0);
void update(const QRectF & = QRectF()); virtual ~Conducer();
void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
QRectF boundingRect() const;
virtual QPainterPath shape() const;
qreal length();
ConducerSegment *middleSegment();
static bool valideXml(QDomElement &);
bool fromXml(QDomElement &);
QDomElement toXml(QDomDocument &, QHash<Terminal *, int> &) const;
///Premiere borne a laquelle le fil est rattache private:
Terminal *terminal1; Conducer(const Conducer &);
///Deuxieme borne a laquelle le fil est rattache
Terminal *terminal2;
protected: // attributs
void mousePressEvent(QGraphicsSceneMouseEvent *); public:
void mouseMoveEvent(QGraphicsSceneMouseEvent *); enum { Type = UserType + 1001 };
void mouseReleaseEvent(QGraphicsSceneMouseEvent *); ///Premiere borne a laquelle le fil est rattache
void hoverMoveEvent(QGraphicsSceneHoverEvent *); Terminal *terminal1;
///Deuxieme borne a laquelle le fil est rattache
Terminal *terminal2;
private: private:
/// booleen indiquant si le fil est encore valide /// booleen indiquant si le fil est encore valide
bool destroyed; bool destroyed;
QGraphicsTextItem *text_item; QGraphicsTextItem *text_item;
ConducerSegment *segments; ConducerSegment *segments;
QList<qreal> moves_x; QList<qreal> moves_x;
QList<qreal> moves_y; QList<qreal> moves_y;
qreal orig_dist_2_terms_x; qreal orig_dist_2_terms_x;
qreal orig_dist_2_terms_y; qreal orig_dist_2_terms_y;
bool type_trajet_x; bool type_trajet_x;
QPointF press_point; QPointF press_point;
bool moving_point; bool moving_point;
bool moving_segment; bool moving_segment;
int moved_point; int moved_point;
qreal previous_z_value; qreal previous_z_value;
ConducerSegment *moved_segment; ConducerSegment *moved_segment;
bool modified_path; bool modified_path;
static QPen conducer_pen; static QPen conducer_pen;
static QBrush conducer_brush; static QBrush conducer_brush;
static bool pen_and_brush_initialized; static bool pen_and_brush_initialized;
void segmentsToPath(); // methodes
void updatePoints(); public:
void priv_calculeConducer(const QPointF &, Terminal::Orientation, const QPointF &, Terminal::Orientation); virtual int type() const { return Type; }
void priv_modifieConducer(const QPointF &, Terminal::Orientation, const QPointF &, Terminal::Orientation); void destroy();
int nbSegments(); bool isDestroyed() const { return(destroyed); }
void updateWithNewPos(const QRectF &, const Terminal *, const QPointF &);
void update(const QRectF & = QRectF());
void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
QRectF boundingRect() const;
virtual QPainterPath shape() const;
qreal length();
ConducerSegment *middleSegment();
static bool valideXml(QDomElement &);
bool fromXml(QDomElement &);
QDomElement toXml(QDomDocument &, QHash<Terminal *, int> &) const;
QList<QPointF> segmentsToPoints() const; protected:
void pointsToSegments(QList<QPointF>); void mousePressEvent(QGraphicsSceneMouseEvent *);
bool hasClickedOn(QPointF, QPointF); void mouseMoveEvent(QGraphicsSceneMouseEvent *);
void calculateTextItemPosition(); void mouseReleaseEvent(QGraphicsSceneMouseEvent *);
static QPointF extendTerminal(const QPointF &, Terminal::Orientation, qreal = 12.0); void hoverMoveEvent(QGraphicsSceneHoverEvent *);
static bool surLeMemeAxe(Terminal::Orientation, Terminal::Orientation);
static bool estHorizontale(Terminal::Orientation a); private:
static bool estVerticale(Terminal::Orientation a); void segmentsToPath();
static qreal conducer_bound(qreal tobound, qreal bound1, qreal bound2); void updatePoints();
static qreal conducer_bound(qreal tobound, qreal bound, bool positive); void priv_calculeConducer(const QPointF &, Terminal::Orientation, const QPointF &, Terminal::Orientation);
}; void priv_modifieConducer(const QPointF &, Terminal::Orientation, const QPointF &, Terminal::Orientation);
int nbSegments() const;
QList<QPointF> segmentsToPoints() const;
void pointsToSegments(QList<QPointF>);
bool hasClickedOn(QPointF, QPointF) const;
void calculateTextItemPosition();
static QPointF extendTerminal(const QPointF &, Terminal::Orientation, qreal = 12.0);
static bool surLeMemeAxe(Terminal::Orientation, Terminal::Orientation);
static bool estHorizontale(Terminal::Orientation a);
static bool estVerticale(Terminal::Orientation a);
static qreal conducer_bound(qreal tobound, qreal bound1, qreal bound2);
static qreal conducer_bound(qreal tobound, qreal bound, bool positive);
};
#endif #endif

View File

@@ -8,9 +8,15 @@
@param cs1 Le segment precedent @param cs1 Le segment precedent
@param cs2 Le segment suivant @param cs2 Le segment suivant
*/ */
ConducerSegment::ConducerSegment(QPointF p1, QPointF p2, ConducerSegment *cs1, ConducerSegment *cs2) { ConducerSegment::ConducerSegment(
setFirstPoint(p1); const QPointF &p1,
setSecondPoint(p2); const QPointF &p2,
ConducerSegment *cs1,
ConducerSegment *cs2
) :
point1(p1),
point2(p2)
{
setPreviousSegment(cs1); setPreviousSegment(cs1);
setNextSegment(cs2); setNextSegment(cs2);
} }
@@ -19,6 +25,7 @@ ConducerSegment::ConducerSegment(QPointF p1, QPointF p2, ConducerSegment *cs1, C
Destructeur - Relie le segment precedent au suivant Destructeur - Relie le segment precedent au suivant
*/ */
ConducerSegment::~ConducerSegment() { ConducerSegment::~ConducerSegment() {
//qDebug() << "~ConducerSegment()" << (void *)this;
if (hasPreviousSegment()) previousSegment() -> setNextSegment(nextSegment()); if (hasPreviousSegment()) previousSegment() -> setNextSegment(nextSegment());
if (hasNextSegment()) nextSegment() -> setPreviousSegment(previousSegment()); if (hasNextSegment()) nextSegment() -> setPreviousSegment(previousSegment());
} }
@@ -32,7 +39,7 @@ ConducerSegment::~ConducerSegment() {
@param possible_dx La valeur du mouvement possible (au maximum) @param possible_dx La valeur du mouvement possible (au maximum)
@return true si le mouvement est possible ; false s'il doit etre limite @return true si le mouvement est possible ; false s'il doit etre limite
*/ */
bool ConducerSegment::canMove1stPointX(qreal asked_dx, qreal &possible_dx) { bool ConducerSegment::canMove1stPointX(const qreal &asked_dx, qreal &possible_dx) const {
Q_ASSERT_X(isVertical(), "ConducerSegment::canMove1stPointX", "segment non vertical"); Q_ASSERT_X(isVertical(), "ConducerSegment::canMove1stPointX", "segment non vertical");
@@ -91,7 +98,7 @@ bool ConducerSegment::canMove1stPointX(qreal asked_dx, qreal &possible_dx) {
@param possible_dx La valeur du mouvement possible (au maximum) @param possible_dx La valeur du mouvement possible (au maximum)
@return true si le mouvement est possible ; false s'il doit etre limite @return true si le mouvement est possible ; false s'il doit etre limite
*/ */
bool ConducerSegment::canMove2ndPointX(qreal asked_dx, qreal &possible_dx) { bool ConducerSegment::canMove2ndPointX(const qreal &asked_dx, qreal &possible_dx) const {
Q_ASSERT_X(isVertical(), "ConducerSegment::canMove2ndPointX", "segment non vertical"); Q_ASSERT_X(isVertical(), "ConducerSegment::canMove2ndPointX", "segment non vertical");
@@ -150,7 +157,7 @@ bool ConducerSegment::canMove2ndPointX(qreal asked_dx, qreal &possible_dx) {
@param possible_dy La valeur du mouvement possible (au maximum) @param possible_dy La valeur du mouvement possible (au maximum)
@return true si le mouvement est possible ; false s'il doit etre limite @return true si le mouvement est possible ; false s'il doit etre limite
*/ */
bool ConducerSegment::canMove1stPointY(qreal asked_dy, qreal &possible_dy) { bool ConducerSegment::canMove1stPointY(const qreal &asked_dy, qreal &possible_dy) const {
Q_ASSERT_X(isHorizontal(), "ConducerSegment::canMove1stPointY", "segment non horizontal"); Q_ASSERT_X(isHorizontal(), "ConducerSegment::canMove1stPointY", "segment non horizontal");
@@ -209,7 +216,7 @@ bool ConducerSegment::canMove1stPointY(qreal asked_dy, qreal &possible_dy) {
@param possible_dy La valeur du mouvement possible (au maximum) @param possible_dy La valeur du mouvement possible (au maximum)
@return true si le mouvement est possible ; false s'il doit etre limite @return true si le mouvement est possible ; false s'il doit etre limite
*/ */
bool ConducerSegment::canMove2ndPointY(qreal asked_dy, qreal &possible_dy) { bool ConducerSegment::canMove2ndPointY(const qreal &asked_dy, qreal &possible_dy) const {
Q_ASSERT_X(isHorizontal(), "ConducerSegment::canMove2ndPointY", "segment non horizontal"); Q_ASSERT_X(isHorizontal(), "ConducerSegment::canMove2ndPointY", "segment non horizontal");
@@ -264,7 +271,7 @@ bool ConducerSegment::canMove2ndPointY(qreal asked_dy, qreal &possible_dy) {
Gere les mouvements sur l'axe horizontal Gere les mouvements sur l'axe horizontal
@param dx taille du deplacement en pixels @param dx taille du deplacement en pixels
*/ */
void ConducerSegment::moveX(qreal dx) { void ConducerSegment::moveX(const qreal &dx) {
if (isHorizontal()) return; if (isHorizontal()) return;
Q_ASSERT_X(isVertical(), "ConducerSegment::moveX", "segment non vertical"); Q_ASSERT_X(isVertical(), "ConducerSegment::moveX", "segment non vertical");
@@ -312,7 +319,7 @@ void ConducerSegment::moveX(qreal dx) {
Gere les mouvements sur l'axe vertical Gere les mouvements sur l'axe vertical
@param dx taille du deplacement en pixels @param dx taille du deplacement en pixels
*/ */
void ConducerSegment::moveY(qreal dy) { void ConducerSegment::moveY(const qreal &dy) {
if (isVertical()) return; if (isVertical()) return;
Q_ASSERT_X(isHorizontal(), "ConducerSegment::moveY", "segment non horizontal"); Q_ASSERT_X(isHorizontal(), "ConducerSegment::moveY", "segment non horizontal");
@@ -449,42 +456,42 @@ void ConducerSegment::setNextSegment(ConducerSegment *ns) {
/** /**
@return Le segment precedent @return Le segment precedent
*/ */
ConducerSegment *ConducerSegment::previousSegment() { ConducerSegment *ConducerSegment::previousSegment() const {
return(previous_segment); return(previous_segment);
} }
/** /**
@return Le segment suivant @return Le segment suivant
*/ */
ConducerSegment *ConducerSegment::nextSegment() { ConducerSegment *ConducerSegment::nextSegment() const {
return(next_segment); return(next_segment);
} }
/** /**
@return true si le segment est vertical, false sinon @return true si le segment est vertical, false sinon
*/ */
bool ConducerSegment::isVertical() { bool ConducerSegment::isVertical() const {
return(point1.x() == point2.x()); return(point1.x() == point2.x());
} }
/** /**
@return true si le segment est horizontal, false sinon @return true si le segment est horizontal, false sinon
*/ */
bool ConducerSegment::isHorizontal() { bool ConducerSegment::isHorizontal() const {
return(point1.y() == point2.y()); return(point1.y() == point2.y());
} }
/** /**
@return le premier point du segment @return le premier point du segment
*/ */
QPointF ConducerSegment::firstPoint() { QPointF ConducerSegment::firstPoint() const {
return(point1); return(point1);
} }
/** /**
@return le second point du segment @return le second point du segment
*/ */
QPointF ConducerSegment::secondPoint() { QPointF ConducerSegment::secondPoint() const {
return(point2); return(point2);
} }
@@ -492,7 +499,7 @@ QPointF ConducerSegment::secondPoint() {
Permet de changer la position du premier point du segment Permet de changer la position du premier point du segment
@param p La nouvelle position du premier point @param p La nouvelle position du premier point
*/ */
void ConducerSegment::setFirstPoint(QPointF p) { void ConducerSegment::setFirstPoint(const QPointF &p) {
point1 = p; point1 = p;
} }
@@ -500,28 +507,28 @@ void ConducerSegment::setFirstPoint(QPointF p) {
Permet de changer la position du second point du segment Permet de changer la position du second point du segment
@param p La nouvelle position du second point @param p La nouvelle position du second point
*/ */
void ConducerSegment::setSecondPoint(QPointF p) { void ConducerSegment::setSecondPoint(const QPointF &p) {
point2 = p; point2 = p;
} }
/** /**
@return true si le segment a un segment precedent, false sinon @return true si le segment a un segment precedent, false sinon
*/ */
bool ConducerSegment::hasPreviousSegment() { bool ConducerSegment::hasPreviousSegment() const {
return(previous_segment != NULL); return(previous_segment != NULL);
} }
/** /**
@return true si le segment a un segment suivant, false sinon @return true si le segment a un segment suivant, false sinon
*/ */
bool ConducerSegment::hasNextSegment() { bool ConducerSegment::hasNextSegment() const {
return(next_segment != NULL); return(next_segment != NULL);
} }
/** /**
@return Le centre du rectangle delimitant le conducteur @return Le centre du rectangle delimitant le conducteur
*/ */
QPointF ConducerSegment::middle() { QPointF ConducerSegment::middle() const {
return( return(
QPointF( QPointF(
(point1.x() + point2.x()) / 2.0, (point1.x() + point2.x()) / 2.0,
@@ -533,7 +540,7 @@ QPointF ConducerSegment::middle() {
/** /**
@return La longueur du conducteur @return La longueur du conducteur
*/ */
qreal ConducerSegment::length() { qreal ConducerSegment::length() const {
if (isHorizontal()) { if (isHorizontal()) {
return(secondPoint().x() - firstPoint().x()); return(secondPoint().x() - firstPoint().x());
} else { } else {

View File

@@ -1,43 +1,47 @@
#ifndef CONDUCER_SEGMENT_H #ifndef CONDUCER_SEGMENT_H
#define CONDUCER_SEGMENT_H #define CONDUCER_SEGMENT_H
#include <QPointF> #include <QPointF>
/** /**
Cette classe represente un segment de conducteur. Cette classe represente un segment de conducteur.
*/ */
class ConducerSegment { class ConducerSegment {
// constructeurs et destructeur
public:
ConducerSegment(QPointF, QPointF, ConducerSegment * = NULL, ConducerSegment * = NULL);
~ConducerSegment();
// attributs // constructeurs, destructeur
private: public:
ConducerSegment *previous_segment; ConducerSegment(const QPointF &, const QPointF &, ConducerSegment * = NULL, ConducerSegment * = NULL);
ConducerSegment *next_segment; virtual ~ConducerSegment();
QPointF point1;
QPointF point2;
// methodes private:
public: ConducerSegment(const ConducerSegment &);
void moveX(qreal);
void moveY(qreal); // attributs
ConducerSegment *previousSegment(); private:
ConducerSegment *nextSegment(); ConducerSegment *previous_segment;
bool hasPreviousSegment(); ConducerSegment *next_segment;
bool hasNextSegment(); QPointF point1;
void setPreviousSegment(ConducerSegment *); QPointF point2;
void setNextSegment(ConducerSegment *);
QPointF firstPoint(); // methodes
QPointF secondPoint(); public:
void setFirstPoint(QPointF); void moveX(const qreal &);
void setSecondPoint(QPointF); void moveY(const qreal &);
QPointF middle(); ConducerSegment *previousSegment() const;
bool isHorizontal(); ConducerSegment *nextSegment() const;
bool isVertical(); bool hasPreviousSegment() const;
qreal length(); bool hasNextSegment() const;
bool canMove1stPointX(qreal, qreal &); void setPreviousSegment(ConducerSegment *);
bool canMove2ndPointX(qreal, qreal &); void setNextSegment(ConducerSegment *);
bool canMove1stPointY(qreal, qreal &); QPointF firstPoint() const;
bool canMove2ndPointY(qreal, qreal &); QPointF secondPoint() const;
}; void setFirstPoint(const QPointF &);
void setSecondPoint(const QPointF &);
QPointF middle() const;
bool isHorizontal() const;
bool isVertical() const;
qreal length() const;
bool canMove1stPointX(const qreal &, qreal &) const;
bool canMove2ndPointX(const qreal &, qreal &) const;
bool canMove1stPointY(const qreal &, qreal &) const;
bool canMove2ndPointY(const qreal &, qreal &) const;
};
#endif #endif

View File

@@ -156,6 +156,12 @@ CustomElement::CustomElement(QString &nom_fichier, QGraphicsItem *qgi, Diagram *
elmt_etat = 0; elmt_etat = 0;
} }
/**
Destructeur
*/
CustomElement::~CustomElement() {
}
/** /**
@return Le nombre de bornes que l'element possede @return Le nombre de bornes que l'element possede
*/ */

View File

@@ -1,43 +1,102 @@
#ifndef ELEMENTPERSO_H #ifndef ELEMENTPERSO_H
#define ELEMENTPERSO_H #define ELEMENTPERSO_H
#include "fixedelement.h" #include "fixedelement.h"
#include <QtGui> #include <QtGui>
/** /**
Cette classe represente un element electrique. Elle est utilisable Cette classe represente un element electrique. Elle est utilisable
comme un element fixe. La difference est que l'element perso lit comme un element fixe. La difference est que l'element perso lit
sa description (noms, dessin, comportement) dans un fichier XML a fournir sa description (noms, dessin, comportement) dans un fichier XML a fournir
en parametre. en parametre.
*/ */
class CustomElement : public FixedElement { class CustomElement : public FixedElement {
public: // constructeurs, destructeur
CustomElement(QString &, QGraphicsItem * = 0, Diagram * = 0, int * = NULL); public:
virtual int nbTerminals() const; CustomElement(QString &, QGraphicsItem * = 0, Diagram * = 0, int * = NULL);
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *); virtual ~CustomElement();
inline QString typeId() const { return(nomfichier); }
inline QString fichier() const { return(nomfichier); } private:
inline bool isNull() const { return(elmt_etat != 0); } CustomElement(const CustomElement &);
inline int etat() const { return(elmt_etat); }
inline QString nom() const { return(priv_nom); } // attributs
private:
int elmt_etat; // contient le code d'erreur si l'instanciation a echoue ou 0 si l'instanciation s'est bien passe
QString priv_nom;
QString nomfichier;
QPicture dessin;
int nb_terminals;
// methodes
public:
virtual int nbTerminals() const;
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *);
QString typeId() const;
QString fichier() const;
bool isNull() const;
int etat() const;
QString nom() const;
private:
bool parseElement(QDomElement &, QPainter &, Diagram *);
bool parseLine(QDomElement &, QPainter &);
bool parseEllipse(QDomElement &, QPainter &);
bool parseCircle(QDomElement &, QPainter &);
bool parseArc(QDomElement &, QPainter &);
bool parsePolygon(QDomElement &, QPainter &);
bool parseText(QDomElement &, QPainter &);
bool parseInput(QDomElement &, Diagram *);
bool parseTerminal(QDomElement &, Diagram *);
void setQPainterAntiAliasing(QPainter &, bool);
bool attributeIsAnInteger(QDomElement &, QString, int * = NULL);
bool attributeIsAReal(QDomElement &, QString, double * = NULL);
bool validOrientationAttribute(QDomElement &);
void setPainterStyle(QDomElement &, QPainter &);
};
/**
@return L'ID du type de l'element ; pour un CustomElement, cela revient au
nom du fichier
@see fichier()
*/
inline QString CustomElement::typeId() const {
return(nomfichier);
}
/**
@return L'adresse du fichier contenant la description XML de cet element
*/
inline QString CustomElement::fichier() const {
return(nomfichier);
}
/**
@return true si cet element est nul, c'est-a-dire si le chargement de sa
description XML a echoue
*/
inline bool CustomElement::isNull() const {
return(elmt_etat != 0);
}
/**
@return Un entier representant l'etat de l'element :
- 0 : L'instanciation a reussi
- 1 : Le fichier n'existe pas
- 2 : Le fichier n'a pu etre ouvert
- 3 : Le fichier n'est pas un document XML
- 4 : Le document XML n'a pas une "definition" comme racine
- 5 : Les attributs de la definition ne sont pas presents et / ou valides
- 6 : La definition est vide
- 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
*/
inline int CustomElement::etat() const {
return(elmt_etat);
}
/**
@return Le nom de l'element
*/
inline QString CustomElement::nom() const {
return(priv_nom);
}
private:
int elmt_etat; // contient le code d'erreur si l'instanciation a echoue ou 0 si l'instanciation s'est bien passe
QString priv_nom;
QString nomfichier;
QPicture dessin;
bool parseElement(QDomElement &, QPainter &, Diagram *);
bool parseLine(QDomElement &, QPainter &);
bool parseEllipse(QDomElement &, QPainter &);
bool parseCircle(QDomElement &, QPainter &);
bool parseArc(QDomElement &, QPainter &);
bool parsePolygon(QDomElement &, QPainter &);
bool parseText(QDomElement &, QPainter &);
bool parseInput(QDomElement &, Diagram *);
bool parseTerminal(QDomElement &, Diagram *);
void setQPainterAntiAliasing(QPainter &, bool);
bool attributeIsAnInteger(QDomElement &, QString, int * = NULL);
bool attributeIsAReal(QDomElement &, QString, double * = NULL);
bool validOrientationAttribute(QDomElement &);
void setPainterStyle(QDomElement &, QPainter &);
int nb_terminals;
};
#endif #endif

View File

@@ -10,19 +10,25 @@
*/ */
Diagram::Diagram(QObject *parent) : QGraphicsScene(parent) { Diagram::Diagram(QObject *parent) : QGraphicsScene(parent) {
setBackgroundBrush(Qt::white); setBackgroundBrush(Qt::white);
poseur_de_conducer = new QGraphicsLineItem(0, 0); conducer_setter = new QGraphicsLineItem(0, 0);
poseur_de_conducer -> setZValue(1000000); conducer_setter -> setZValue(1000000);
QPen t; QPen t;
t.setColor(Qt::black); t.setColor(Qt::black);
t.setWidthF(1.5); t.setWidthF(1.5);
t.setStyle(Qt::DashLine); t.setStyle(Qt::DashLine);
poseur_de_conducer -> setPen(t); conducer_setter -> setPen(t);
poseur_de_conducer -> setLine(QLineF(QPointF(0.0, 0.0), QPointF(0.0, 0.0))); conducer_setter -> setLine(QLineF(QPointF(0.0, 0.0), QPointF(0.0, 0.0)));
draw_grid = true; draw_grid = true;
use_border = true; use_border = true;
connect(this, SIGNAL(changed(const QList<QRectF> &)), this, SLOT(slot_checkSelectionEmptinessChange())); connect(this, SIGNAL(changed(const QList<QRectF> &)), this, SLOT(slot_checkSelectionEmptinessChange()));
} }
/**
Destructeur
*/
Diagram::~Diagram() {
};
/** /**
Dessine l'arriere-plan du schema, cad la grille. Dessine l'arriere-plan du schema, cad la grille.
@param p Le QPainter a utiliser pour dessiner @param p Le QPainter a utiliser pour dessiner
@@ -41,7 +47,7 @@ void Diagram::drawBackground(QPainter *p, const QRectF &r) {
p -> setBrush(Qt::white); p -> setBrush(Qt::white);
p -> drawRect(r); p -> drawRect(r);
if (draw_grid) { if (draw_grid && r.width() < 2500 && r.height() < 2500) {
// dessine les points de la grille // dessine les points de la grille
p -> setPen(Qt::black); p -> setPen(Qt::black);
p -> setBrush(Qt::NoBrush); p -> setBrush(Qt::NoBrush);

View File

@@ -11,38 +11,50 @@ class Element;
class Terminal; class Terminal;
class Diagram : public QGraphicsScene { class Diagram : public QGraphicsScene {
Q_OBJECT Q_OBJECT
enum BorderOptions { EmptyBorder, Inset, Columns };
// constructeurs, destructeur
public: public:
Diagram(QObject * = 0); Diagram(QObject * = 0);
virtual ~Diagram();
private:
Diagram(const Diagram &diagram);
// attributs
public:
enum BorderOptions { EmptyBorder, Inset, Columns };
BorderInset border_and_inset;
private:
QGraphicsLineItem *conducer_setter;
bool draw_grid;
bool use_border;
// methodes
public:
void drawBackground(QPainter *, const QRectF &); void drawBackground(QPainter *, const QRectF &);
// fonctions relatives a la pose de conducteurs // fonctions relatives a la pose de conducteurs
void poseConducer(bool); void setConducer(bool);
void setConducerStart (QPointF);
void setDepart (QPointF); void setConducerStop(QPointF);
void setArrivee(QPointF);
// fonctions relatives a l'import / export XML // fonctions relatives a l'import / export XML
QDomDocument toXml(bool = true); QDomDocument toXml(bool = true);
bool fromXml(QDomDocument &, QPointF = QPointF(), bool = true); bool fromXml(QDomDocument &, QPointF = QPointF(), bool = true);
// fonctions relatives aux options graphiques // fonctions relatives aux options graphiques
void setAffichageGrille(bool); void setDisplayGrid(bool);
bool displayGrid(); bool displayGrid();
void setUseBorder(bool); void setUseBorder(bool);
bool useBorder(); bool useBorder();
void setBorderOptions(BorderOptions); void setBorderOptions(BorderOptions);
BorderOptions borderOptions(); BorderOptions borderOptions();
BorderInset border_and_inset;
QRectF border() const; QRectF border() const;
QImage toImage(int = -1, int = -1, Qt::AspectRatioMode = Qt::KeepAspectRatio); QImage toImage(int = -1, int = -1, Qt::AspectRatioMode = Qt::KeepAspectRatio);
QSize imageSize() const; QSize imageSize() const;
private:
QGraphicsLineItem *poseur_de_conducer;
bool draw_grid;
bool use_border;
private slots: private slots:
void slot_checkSelectionChange(); void slot_checkSelectionChange();
void slot_checkSelectionEmptinessChange(); void slot_checkSelectionEmptinessChange();
@@ -58,11 +70,11 @@ class Diagram : public QGraphicsScene {
bornes. bornes.
@param true pour ajouter le poseur de conducteur, false pour l'enlever @param true pour ajouter le poseur de conducteur, false pour l'enlever
*/ */
inline void Diagram::poseConducer(bool pf) { inline void Diagram::setConducer(bool pf) {
if (pf) { if (pf) {
if (!poseur_de_conducer -> scene()) addItem(poseur_de_conducer); if (!conducer_setter -> scene()) addItem(conducer_setter);
} else { } else {
if (poseur_de_conducer -> scene()) removeItem(poseur_de_conducer); if (conducer_setter -> scene()) removeItem(conducer_setter);
} }
} }
@@ -70,23 +82,23 @@ inline void Diagram::poseConducer(bool pf) {
Specifie les coordonnees du point de depart du poseur de conducteur Specifie les coordonnees du point de depart du poseur de conducteur
@param d Le nouveau point de depart du poseur de conducteur @param d Le nouveau point de depart du poseur de conducteur
*/ */
inline void Diagram::setDepart(QPointF d) { inline void Diagram::setConducerStart(QPointF d) {
poseur_de_conducer -> setLine(QLineF(d, poseur_de_conducer -> line().p2())); conducer_setter -> setLine(QLineF(d, conducer_setter -> line().p2()));
} }
/** /**
Specifie les coordonnees du point d'arrivee du poseur de conducteur Specifie les coordonnees du point d'arrivee du poseur de conducteur
@param d Le nouveau point d'arrivee du poseur de conducteur @param d Le nouveau point d'arrivee du poseur de conducteur
*/ */
inline void Diagram::setArrivee(QPointF a) { inline void Diagram::setConducerStop(QPointF a) {
poseur_de_conducer -> setLine(QLineF(poseur_de_conducer -> line().p1(), a)); conducer_setter -> setLine(QLineF(conducer_setter -> line().p1(), a));
} }
/** /**
Permet de specifier si la grille du schema doit etre dessinee ou non Permet de specifier si la grille du schema doit etre dessinee ou non
@param dg true pour afficher la grille, false pour ne pas l'afficher @param dg true pour afficher la grille, false pour ne pas l'afficher
*/ */
inline void Diagram::setAffichageGrille(bool dg) { inline void Diagram::setDisplayGrid(bool dg) {
draw_grid = dg; draw_grid = dg;
} }

View File

@@ -2,6 +2,7 @@
#include "diagram.h" #include "diagram.h"
#include "customelement.h" #include "customelement.h"
#include "exportdialog.h" #include "exportdialog.h"
#include "conducer.h"
/** /**
Initialise le DiagramView Initialise le DiagramView
@@ -40,6 +41,12 @@ DiagramView::DiagramView(QWidget *parent) : QGraphicsView(parent) {
initialise(); initialise();
} }
/**
Destructeur
*/
DiagramView::~DiagramView() {
}
/** /**
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
*/ */
@@ -443,9 +450,9 @@ void DiagramView::dialogPrint() {
if (qpd.exec() == QDialog::Accepted) { if (qpd.exec() == QDialog::Accepted) {
QPainter qp(&qprin); QPainter qp(&qprin);
scene -> setAffichageGrille(false); scene -> setDisplayGrid(false);
scene -> render(&qp); scene -> render(&qp);
scene -> setAffichageGrille(true); scene -> setDisplayGrid(true);
} }
} }

View File

@@ -1,75 +1,79 @@
#ifndef DIAGRAMVIEW_H #ifndef DIAGRAMVIEW_H
#define DIAGRAMVIEW_H #define DIAGRAMVIEW_H
#include <QtGui> #include <QtGui>
class Diagram; class Diagram;
#include "element.h" /**
#include "conducer.h" Classe representant graphiquement un schema electrique
/** */
Classe representant graphiquement un schema electrique class DiagramView : public QGraphicsView {
*/ Q_OBJECT
class DiagramView : public QGraphicsView {
Q_OBJECT
public:
// constructeurs
DiagramView();
DiagramView(QWidget * = 0);
// nouveaux attributs // constructeurs, destructeur
Diagram *scene; public:
DiagramView();
DiagramView(QWidget * = 0);
virtual ~DiagramView();
// methodes publiques private:
bool ouvrir(QString, int * = NULL); DiagramView(const DiagramView &);
void closeEvent(QCloseEvent *);
QString nom_fichier;
bool enregistrer();
bool enregistrer_sous();
void dialogExport();
void dialogEditInfos();
void dialogPrint();
void addColumn();
void removeColumn();
void adjustHeight(qreal);
void adjustSceneRect();
void expand();
void shrink();
Diagram *diagram() { return(scene); }
bool hasSelectedItems();
private: // attributs
bool private_enregistrer(QString &); private:
void initialise(); Diagram *scene;
QList<QGraphicsItem *> garbage; QList<QGraphicsItem *> garbage;
void throwToGarbage(QGraphicsItem *); // methodes
void mousePressEvent(QMouseEvent *); public:
void dragEnterEvent(QDragEnterEvent *); bool ouvrir(QString, int * = NULL);
void dragLeaveEvent(QDragLeaveEvent *); void closeEvent(QCloseEvent *);
void dragMoveEvent(QDragMoveEvent *); QString nom_fichier;
void dropEvent(QDropEvent *); bool enregistrer();
bool enregistrer_sous();
void dialogExport();
void dialogEditInfos();
void dialogPrint();
void addColumn();
void removeColumn();
void adjustHeight(qreal);
void adjustSceneRect();
void expand();
void shrink();
Diagram *diagram() { return(scene); }
bool hasSelectedItems();
signals: private:
void selectionChanged(); bool private_enregistrer(QString &);
void antialiasingChanged(); void initialise();
void modeChanged(); void throwToGarbage(QGraphicsItem *);
void mousePressEvent(QMouseEvent *);
void dragEnterEvent(QDragEnterEvent *);
void dragLeaveEvent(QDragLeaveEvent *);
void dragMoveEvent(QDragMoveEvent *);
void dropEvent(QDropEvent *);
public slots: signals:
void selectNothing(); void selectionChanged();
void selectAll(); void antialiasingChanged();
void selectInvert(); void modeChanged();
void supprimer();
void pivoter();
void setVisualisationMode();
void setSelectionMode();
void zoomPlus();
void zoomMoins();
void zoomFit();
void zoomReset();
void couper();
void copier();
void coller();
private slots: public slots:
void flushGarbage(); void selectNothing();
void slot_selectionChanged(); void selectAll();
}; void selectInvert();
void supprimer();
void pivoter();
void setVisualisationMode();
void setSelectionMode();
void zoomPlus();
void zoomMoins();
void zoomFit();
void zoomReset();
void couper();
void copier();
void coller();
private slots:
void flushGarbage();
void slot_selectionChanged();
};
#endif #endif

View File

@@ -3,8 +3,6 @@
#include "elementtextitem.h" #include "elementtextitem.h"
#include <QtDebug> #include <QtDebug>
/*** Methodes publiques ***/
/** /**
Constructeur pour un element sans scene ni parent Constructeur pour un element sans scene ni parent
*/ */
@@ -13,6 +11,12 @@ Element::Element(QGraphicsItem *parent, Diagram *scene) : QGraphicsItem(parent,
setZValue(10); setZValue(10);
} }
/**
Destructeur
*/
Element::~Element() {
}
/** /**
Methode principale de dessin de l'element Methode principale de dessin de l'element
@param painter Le QPainter utilise pour dessiner l'elment @param painter Le QPainter utilise pour dessiner l'elment
@@ -110,10 +114,6 @@ QVariant Element::itemChange(GraphicsItemChange change, const QVariant &value) {
foreach(QGraphicsItem *qgi, children()) { foreach(QGraphicsItem *qgi, children()) {
if (Terminal *p = qgraphicsitem_cast<Terminal *>(qgi)) p -> updateConducer(value.toPointF()); if (Terminal *p = qgraphicsitem_cast<Terminal *>(qgi)) p -> updateConducer(value.toPointF());
} }
} else if (change == QGraphicsItem::ItemSelectedChange) {
foreach(QGraphicsItem *qgi, children()) {
if (Terminal *p = qgraphicsitem_cast<Terminal *>(qgi)) p -> updateConducer();
}
} }
return(QGraphicsItem::itemChange(change, value)); return(QGraphicsItem::itemChange(change, value));
} }

107
element.h
View File

@@ -7,45 +7,20 @@
*/ */
class Diagram; class Diagram;
class Element : public QGraphicsItem { class Element : public QGraphicsItem {
// constructeurs, destructeur
public:
Element(QGraphicsItem * = 0, Diagram * = 0);
virtual ~Element();
private:
Element(const Element &);
// attributs
public: public:
enum { Type = UserType + 1000 }; enum { Type = UserType + 1000 };
virtual int type() const { return Type; }
Element(QGraphicsItem * = 0, Diagram * = 0);
virtual int nbTerminals() const = 0;
virtual int nbTerminalsMin() const = 0;
virtual int nbTerminalsMax() const = 0;
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *) = 0;
virtual QString typeId() const = 0;
virtual QString nom() const = 0;
void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
QRectF boundingRect() const;
QSize setSize(int, int);
QPoint setHotspot(QPoint);
QPoint hotspot() const;
void select();
void deselect();
QPixmap pixmap();
QVariant itemChange(GraphicsItemChange, const QVariant &);
void setPos(const QPointF &);
void setPos(qreal, qreal);
bool connexionsInternesAcceptees();
void setConnexionsInternesAcceptees(bool cia);
static bool valideXml(QDomElement &);
virtual bool fromXml(QDomElement &, QHash<int, Terminal *>&);
virtual QDomElement toXml (QDomDocument &, QHash<Terminal *, int>&) const;
// methodes d'acces aux possibilites d'orientation
Terminal::Orientation orientation() const;
bool acceptOrientation(Terminal::Orientation o) const;
Terminal::Orientation defaultOrientation() const;
Terminal::Orientation nextAcceptableOrientation() const;
Terminal::Orientation previousAcceptableOrientation() const;
bool setOrientation(Terminal::Orientation o);
protected: protected:
void drawAxes(QPainter *, const QStyleOptionGraphicsItem *);
void mouseMoveEvent(QGraphicsSceneMouseEvent *);
bool ori_n; bool ori_n;
bool ori_s; bool ori_s;
bool ori_e; bool ori_e;
@@ -53,6 +28,63 @@ class Element : public QGraphicsItem {
Terminal::Orientation ori_d; Terminal::Orientation ori_d;
Terminal::Orientation ori; Terminal::Orientation ori;
private:
QSize dimensions;
QPoint hotspot_coord;
QPixmap apercu;
QMenu menu;
// methodes
public:
virtual int type() const { return Type; }
// methodes virtuelles pures a definir dans les classes enfants
virtual int nbTerminals() const = 0;
virtual int nbTerminalsMin() const = 0;
virtual int nbTerminalsMax() const = 0;
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *) = 0;
virtual QString typeId() const = 0;
virtual QString nom() const = 0;
void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
QVariant itemChange(GraphicsItemChange, const QVariant &);
QRectF boundingRect() const;
QSize setSize(int, int);
QPixmap pixmap();
// methodes relatives au point de saisie
QPoint setHotspot(QPoint);
QPoint hotspot() const;
// methodes relatives a la selection
void select();
void deselect();
// methodes relatives a la position
void setPos(const QPointF &);
void setPos(qreal, qreal);
// methodes relatives aux connexions internes
bool connexionsInternesAcceptees();
void setConnexionsInternesAcceptees(bool cia);
// methodes relatives aux fichiers XML
static bool valideXml(QDomElement &);
virtual bool fromXml(QDomElement &, QHash<int, Terminal *>&);
virtual QDomElement toXml(QDomDocument &, QHash<Terminal *, int>&) const;
// methodes d'acces aux possibilites d'orientation
Terminal::Orientation orientation() const;
Terminal::Orientation defaultOrientation() const;
bool acceptOrientation(Terminal::Orientation o) const;
Terminal::Orientation nextAcceptableOrientation() const;
Terminal::Orientation previousAcceptableOrientation() const;
bool setOrientation(Terminal::Orientation o);
protected:
void drawAxes(QPainter *, const QStyleOptionGraphicsItem *);
void mouseMoveEvent(QGraphicsSceneMouseEvent *);
private: private:
bool peut_relier_ses_propres_terminals; bool peut_relier_ses_propres_terminals;
void drawSelection(QPainter *, const QStyleOptionGraphicsItem *); void drawSelection(QPainter *, const QStyleOptionGraphicsItem *);
@@ -60,11 +92,6 @@ class Element : public QGraphicsItem {
Terminal::Orientation nextOrientation(Terminal::Orientation o) const; Terminal::Orientation nextOrientation(Terminal::Orientation o) const;
Terminal::Orientation previousOrientation(Terminal::Orientation o) const; Terminal::Orientation previousOrientation(Terminal::Orientation o) const;
static QList<QDomElement> findInDomElement(QDomElement, QString, QString); static QList<QDomElement> findInDomElement(QDomElement, QString, QString);
QSize dimensions;
QPoint hotspot_coord;
QPixmap apercu;
QMenu menu;
}; };
/** /**

View File

@@ -21,7 +21,6 @@ ElementsCategoriesList::ElementsCategoriesList(QWidget *parent) : QTreeWidget(pa
Destructeur Destructeur
*/ */
ElementsCategoriesList::~ElementsCategoriesList() { ElementsCategoriesList::~ElementsCategoriesList() {
} }
/** /**

View File

@@ -7,23 +7,24 @@
*/ */
class ElementsCategoriesList : public QTreeWidget { class ElementsCategoriesList : public QTreeWidget {
Q_OBJECT Q_OBJECT
// Constructeur, destructeur
// Constructeurs, destructeur
public: public:
ElementsCategoriesList(QWidget * = 0); ElementsCategoriesList(QWidget * = 0);
~ElementsCategoriesList(); virtual ~ElementsCategoriesList();
// attributs
private:
ElementsCategoriesList(const ElementsCategoriesList &);
// methodes // methodes
private:
void addDir(QTreeWidgetItem *, QString, QString = QString());
QString categoryName(QDir &);
public: public:
QString selectedCategoryPath(); QString selectedCategoryPath();
QString selectedCategoryName(); QString selectedCategoryName();
private:
void addDir(QTreeWidgetItem *, QString, QString = QString());
QString categoryName(QDir &);
public slots: public slots:
void reload(); void reload();
}; };

View File

@@ -9,10 +9,14 @@
class ElementsCategoriesList; class ElementsCategoriesList;
class ElementsCategoriesWidget : public QWidget { class ElementsCategoriesWidget : public QWidget {
Q_OBJECT Q_OBJECT
// Constructeur, destructeur
// Constructeurs, destructeur
public: public:
ElementsCategoriesWidget(QWidget * = 0); ElementsCategoriesWidget(QWidget * = 0);
~ElementsCategoriesWidget(); virtual ~ElementsCategoriesWidget();
private:
ElementsCategoriesWidget(const ElementsCategoriesWidget &);
// attributs // attributs
private: private:
@@ -24,8 +28,6 @@ class ElementsCategoriesWidget : public QWidget {
QAction *action_delete; QAction *action_delete;
// methodes // methodes
bool rmdir(const QString &);
public: public:
ElementsCategoriesList &elementsCategoriesList() const; ElementsCategoriesList &elementsCategoriesList() const;

View File

@@ -13,7 +13,6 @@ ElementsCategory::ElementsCategory(const QString &path) : QDir(path) {
Destructeur Destructeur
*/ */
ElementsCategory::~ElementsCategory() { ElementsCategory::~ElementsCategory() {
} }
/** /**

View File

@@ -7,20 +7,19 @@
qet_directory contenant ses caracteristiques (pour le moment : ses noms). qet_directory contenant ses caracteristiques (pour le moment : ses noms).
*/ */
class ElementsCategory : public QDir { class ElementsCategory : public QDir {
// Constructeur, destructeur // constructeurs, destructeur
public: public:
ElementsCategory(const QString & = QString()); ElementsCategory(const QString & = QString());
~ElementsCategory(); virtual ~ElementsCategory();
private:
ElementsCategory(const ElementsCategory &);
// attributs // attributs
private: private:
QHash<QString, QString> category_names; QHash<QString, QString> category_names;
// methodes // methodes
private:
bool rmdir(const QString &) const;
void loadNames();
public: public:
QString name() const; QString name() const;
QHash<QString, QString> categoryNames() const; QHash<QString, QString> categoryNames() const;
@@ -29,5 +28,9 @@ class ElementsCategory : public QDir {
bool write() const; bool write() const;
bool remove() const; bool remove() const;
//bool move(const QString &new_parent); //bool move(const QString &new_parent);
private:
bool rmdir(const QString &) const;
void loadNames();
}; };
#endif #endif

View File

@@ -9,11 +9,15 @@ class ElementsCategory;
class NamesList; class NamesList;
class ElementsCategoryEditor : public QDialog { class ElementsCategoryEditor : public QDialog {
Q_OBJECT Q_OBJECT
//Constructeurs, destructeur
// constructeurs, destructeur
public: public:
ElementsCategoryEditor(QWidget * = 0); ElementsCategoryEditor(QWidget * = 0);
ElementsCategoryEditor(const QString &, bool = true, QWidget * = 0); ElementsCategoryEditor(const QString &, bool = true, QWidget * = 0);
~ElementsCategoryEditor(); virtual ~ElementsCategoryEditor();
private:
ElementsCategoryEditor(const ElementsCategoryEditor &);
// attributs // attributs
private: private:
@@ -29,6 +33,5 @@ class ElementsCategoryEditor : public QDialog {
public slots: public slots:
void acceptCreation(); void acceptCreation();
void acceptUpdate(); void acceptUpdate();
}; };
#endif #endif

View File

@@ -35,6 +35,12 @@ ElementsPanel::ElementsPanel(QWidget *parent) : QTreeWidget(parent) {
setPalette(qp); setPalette(qp);
} }
/**
Destructeur
*/
ElementsPanel::~ElementsPanel() {
}
/** /**
Gere le mouvement lors d'un drag'n drop Gere le mouvement lors d'un drag'n drop
*/ */

View File

@@ -1,24 +1,32 @@
#ifndef PANELAPPAREILS_H #ifndef PANELAPPAREILS_H
#define PANELAPPAREILS_H #define PANELAPPAREILS_H
#include <QtGui> #include <QtGui>
#include "qetapp.h" #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 ElementsPanel : public QTreeWidget { class ElementsPanel : public QTreeWidget {
Q_OBJECT Q_OBJECT
public:
ElementsPanel(QWidget * = 0); // constructeurs, destructeur
static QString categoryName(QDir &); public:
public slots: ElementsPanel(QWidget * = 0);
void dragMoveEvent(QDragMoveEvent *); virtual ~ElementsPanel();
void dropEvent(QDropEvent *);
void startDrag(Qt::DropActions); private:
void reload(); ElementsPanel(const ElementsPanel &);
private:
void addFile(QTreeWidgetItem *, QString); // methodes
void addDir(QTreeWidgetItem *, QString, QString = QString()); private:
}; void addFile(QTreeWidgetItem *, QString);
void addDir(QTreeWidgetItem *, QString, QString = QString());
public slots:
void dragMoveEvent(QDragMoveEvent *);
void dropEvent(QDropEvent *);
void startDrag(Qt::DropActions);
void reload();
};
#endif #endif

View File

@@ -25,6 +25,12 @@ ElementsPanelWidget::ElementsPanelWidget(QWidget *parent) : QWidget(parent) {
setLayout(vlayout); setLayout(vlayout);
} }
/**
Destructeur
*/
ElementsPanelWidget::~ElementsPanelWidget() {
}
/** /**
Appelle l'assistant de creation de nouvel element Appelle l'assistant de creation de nouvel element
*/ */

View File

@@ -10,9 +10,13 @@
class ElementsPanelWidget : public QWidget { class ElementsPanelWidget : public QWidget {
Q_OBJECT Q_OBJECT
// constructeurs // constructeurs, destructeur
public: public:
ElementsPanelWidget(QWidget * = 0); ElementsPanelWidget(QWidget * = 0);
virtual ~ElementsPanelWidget();
private:
ElementsPanelWidget(const ElementsPanelWidget &);
// attributs // attributs
private: private:
@@ -21,9 +25,17 @@ class ElementsPanelWidget : public QWidget {
// methodes // methodes
public: public:
inline ElementsPanel &elementsPanel() const { return(*elements_panel); } inline ElementsPanel &elementsPanel() const;
public slots: public slots:
void newElement(); void newElement();
}; };
/**
@return Le panel d'elements imbrique dans ce widget
*/
inline ElementsPanel &ElementsPanelWidget::elementsPanel() const {
return(*elements_panel);
}
#endif #endif

View File

@@ -21,6 +21,9 @@ ElementTextItem::ElementTextItem(const QString &text, QGraphicsItem *parent, QGr
setTextInteractionFlags(Qt::TextEditorInteraction); setTextInteractionFlags(Qt::TextEditorInteraction);
} }
ElementTextItem::~ElementTextItem() {
}
/** /**
Modifie la position du champ de texte Modifie la position du champ de texte
@param pos La nouvelle position du champ de texte @param pos La nouvelle position du champ de texte
@@ -55,7 +58,7 @@ QPointF ElementTextItem::pos() const {
valeur a ce champ. valeur a ce champ.
@param e L'element XML representant le champ de texte @param e L'element XML representant le champ de texte
*/ */
void ElementTextItem::fromXml(QDomElement &e) { void ElementTextItem::fromXml(const QDomElement &e) {
QPointF _pos = pos(); QPointF _pos = pos();
if (e.attribute("x").toDouble() == _pos.x() && e.attribute("y").toDouble() == _pos.y()) { if (e.attribute("x").toDouble() == _pos.x() && e.attribute("y").toDouble() == _pos.y()) {
setPlainText(e.attribute("text")); setPlainText(e.attribute("text"));
@@ -66,7 +69,7 @@ void ElementTextItem::fromXml(QDomElement &e) {
@param document Le document XML a utiliser @param document Le document XML a utiliser
@return L'element XML representant ce champ de texte @return L'element XML representant ce champ de texte
*/ */
QDomElement ElementTextItem::toXml(QDomDocument &document) { QDomElement ElementTextItem::toXml(QDomDocument &document) const {
QDomElement result = document.createElement("input"); QDomElement result = document.createElement("input");
result.setAttribute("x", pos().x()); result.setAttribute("x", pos().x());
result.setAttribute("y", pos().y()); result.setAttribute("y", pos().y());

View File

@@ -8,23 +8,26 @@
malgre les rotations de son element parent. malgre les rotations de son element parent.
*/ */
class ElementTextItem : public QGraphicsTextItem { class ElementTextItem : public QGraphicsTextItem {
// constructeurs // constructeurs, destructeur
public: public:
ElementTextItem(QGraphicsItem * = 0, QGraphicsScene * = 0); ElementTextItem(QGraphicsItem * = 0, QGraphicsScene * = 0);
ElementTextItem(const QString &, QGraphicsItem * = 0, QGraphicsScene * = 0); ElementTextItem(const QString &, QGraphicsItem * = 0, QGraphicsScene * = 0);
virtual ~ElementTextItem();
// attributs // attributs
public:
enum { Type = UserType + 1003 };
private: private:
bool follow_parent_rotations; bool follow_parent_rotations;
// methodes // methodes
public: public:
enum { Type = UserType + 1003 };
virtual int type() const { return Type; } virtual int type() const { return Type; }
bool followParentRotations() const; bool followParentRotations() const;
void setFollowParentRotations(bool); void setFollowParentRotations(bool);
void fromXml(QDomElement &); void fromXml(const QDomElement &);
QDomElement toXml(QDomDocument &); QDomElement toXml(QDomDocument &) const;
void setPos(const QPointF &); void setPos(const QPointF &);
void setPos(qreal, qreal); void setPos(qreal, qreal);
QPointF pos() const; QPointF pos() const;

View File

@@ -58,7 +58,6 @@ ExportDialog::ExportDialog(Diagram *dia, QWidget *parent) : QDialog(parent) {
Destructeur - ne fait rien Destructeur - ne fait rien
*/ */
ExportDialog::~ExportDialog() { ExportDialog::~ExportDialog() {
} }
/** /**
@@ -266,7 +265,7 @@ QImage ExportDialog::generateImage() {
// genere l'image // genere l'image
diagram -> setUseBorder(export_border -> isChecked()); diagram -> setUseBorder(export_border -> isChecked());
diagram -> setAffichageGrille(draw_grid -> isChecked()); diagram -> setDisplayGrid(draw_grid -> isChecked());
diagram -> border_and_inset.displayBorder(draw_border -> isChecked()); diagram -> border_and_inset.displayBorder(draw_border -> isChecked());
diagram -> border_and_inset.displayColumns(draw_columns -> isChecked()); diagram -> border_and_inset.displayColumns(draw_columns -> isChecked());
diagram -> border_and_inset.displayInset(draw_inset -> isChecked()); diagram -> border_and_inset.displayInset(draw_inset -> isChecked());
@@ -287,7 +286,7 @@ QImage ExportDialog::generateImage() {
diagram -> border_and_inset.displayBorder(state_drawBorder); diagram -> border_and_inset.displayBorder(state_drawBorder);
diagram -> border_and_inset.displayColumns(state_drawColumns); diagram -> border_and_inset.displayColumns(state_drawColumns);
diagram -> border_and_inset.displayInset(state_drawInset); diagram -> border_and_inset.displayInset(state_drawInset);
diagram -> setAffichageGrille(state_drawGrid); diagram -> setDisplayGrid(state_drawGrid);
diagram -> setUseBorder(state_useBorder); diagram -> setUseBorder(state_useBorder);
return(image); return(image);

View File

@@ -1,58 +1,66 @@
#ifndef EXPORTDIALOG_H #ifndef EXPORTDIALOG_H
#define EXPORTDIALOG_H #define EXPORTDIALOG_H
#include <QtGui> #include <QtGui>
#include "diagram.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
*/ */
class ExportDialog : public QDialog { class ExportDialog : public QDialog {
Q_OBJECT Q_OBJECT
public:
ExportDialog(Diagram *, QWidget * = 0);
~ExportDialog();
private: // constructeurs, destructeur
// elements graphiques public:
QLineEdit *filename; ExportDialog(Diagram *, QWidget * = 0);
QPushButton *button_browse; virtual ~ExportDialog();
QComboBox *format;
QSpinBox *width;
QSpinBox *height;
QCheckBox *keep_aspect_ratio;
QCheckBox *draw_grid;
QCheckBox *draw_border;
QCheckBox *draw_inset;
QCheckBox *draw_columns;
QCheckBox *keep_colors;
QRadioButton *export_elements;
QRadioButton *export_border;
QDialogButtonBox *buttons;
QGraphicsScene *preview_scene;
QGraphicsView *preview_view;
// booleens pour ne pas avoir de boucle lors de l'edition des dimensions de l'image private:
bool dontchangewidth; ExportDialog(const ExportDialog &);
bool dontchangeheight;
// elements relatifs au traitement effectue par le dialogue // attributs
Diagram *diagram; private:
QSize diagram_size; // elements graphiques
QString diagram_path; QLineEdit *filename;
qreal diagram_ratio; QPushButton *button_browse;
QComboBox *format;
QSpinBox *width;
QSpinBox *height;
QCheckBox *keep_aspect_ratio;
QCheckBox *draw_grid;
QCheckBox *draw_border;
QCheckBox *draw_inset;
QCheckBox *draw_columns;
QCheckBox *keep_colors;
QRadioButton *export_elements;
QRadioButton *export_border;
QDialogButtonBox *buttons;
QGraphicsScene *preview_scene;
QGraphicsView *preview_view;
QWidget *leftPart(); // booleens pour ne pas avoir de boucle lors de l'edition des dimensions de l'image
QWidget *rightPart(); bool dontchangewidth;
QGroupBox *setupDimensionsGroupBox(); bool dontchangeheight;
QGroupBox *setupOptionsGroupBox();
QImage generateImage();
public slots: // elements relatifs au traitement effectue par le dialogue
void slot_correctWidth(); Diagram *diagram;
void slot_correctHeight(); QSize diagram_size;
void slot_chooseAFile(); QString diagram_path;
void slot_check(); qreal diagram_ratio;
void slot_changeUseBorder();
void slot_refreshPreview(); // methodes
}; private:
QWidget *leftPart();
QWidget *rightPart();
QGroupBox *setupDimensionsGroupBox();
QGroupBox *setupOptionsGroupBox();
QImage generateImage();
public slots:
void slot_correctWidth();
void slot_correctHeight();
void slot_chooseAFile();
void slot_check();
void slot_changeUseBorder();
void slot_refreshPreview();
};
#endif #endif

View File

@@ -5,6 +5,12 @@
FixedElement::FixedElement(QGraphicsItem *parent, Diagram *scene) : Element(parent, scene) { FixedElement::FixedElement(QGraphicsItem *parent, Diagram *scene) : Element(parent, scene) {
} }
/**
Destructeur
*/
FixedElement::~FixedElement() {
}
/** /**
@return Le nombre minimal de bornes que l'element peut avoir @return Le nombre minimal de bornes que l'element peut avoir
*/ */

View File

@@ -1,14 +1,23 @@
#ifndef ELEMENTFIXE_H #ifndef ELEMENTFIXE_H
#define ELEMENTFIXE_H #define ELEMENTFIXE_H
#include "element.h" #include "element.h"
class FixedElement : public Element { /**
public: Cette classe represente un element avec un nombre fixe de bornes.
FixedElement(QGraphicsItem * = 0, Diagram * = 0); */
int nbTerminalsMin() const; class FixedElement : public Element {
int nbTerminalsMax() const;
virtual int nbTerminals() const = 0; // constructeurs, destructeur
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *) = 0; public:
virtual QString typeId() const = 0; FixedElement(QGraphicsItem * = 0, Diagram * = 0);
virtual QString nom() const = 0; virtual ~FixedElement();
};
// methodes
public:
int nbTerminalsMin() const;
int nbTerminalsMax() const;
virtual int nbTerminals() const = 0;
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *) = 0;
virtual QString typeId() const = 0;
virtual QString nom() const = 0;
};
#endif #endif

View File

@@ -25,7 +25,6 @@ NamesList::NamesList(QWidget *parent) : QWidget(parent) {
Destructeur Destructeur
*/ */
NamesList::~NamesList() { NamesList::~NamesList() {
} }
/** /**

View File

@@ -7,10 +7,14 @@
*/ */
class NamesList : public QWidget { class NamesList : public QWidget {
Q_OBJECT Q_OBJECT
//Constructeur, destructeur
// constructeurs, destructeur
public: public:
NamesList(QWidget * = 0); NamesList(QWidget * = 0);
~NamesList(); virtual ~NamesList();
private:
NamesList(const NamesList &);
// attributs // attributs
private: private:
@@ -23,6 +27,7 @@ class NamesList : public QWidget {
bool checkOneName(); bool checkOneName();
QHash<QString, QString> names(); QHash<QString, QString> names();
void setNames(QHash<QString, QString> &); void setNames(QHash<QString, QString> &);
private: private:
void clean(); void clean();
void updateHash(); void updateHash();

View File

@@ -17,10 +17,14 @@ class NamesList;
class Diagram; class Diagram;
class NewElementWizard : public QDialog { class NewElementWizard : public QDialog {
Q_OBJECT Q_OBJECT
// Constructeur, destructeur
// constructeurs, destructeur
public: public:
NewElementWizard(QWidget * = 0, Qt::WindowFlags = 0); NewElementWizard(QWidget * = 0, Qt::WindowFlags = 0);
~NewElementWizard(); virtual ~NewElementWizard();
private:
NewElementWizard(const NewElementWizard &);
// attributs // attributs
private: private:

View File

@@ -88,6 +88,12 @@ QETApp::QETApp(QWidget *parent) : QMainWindow(parent) {
connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(slot_updateActions())); connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(slot_updateActions()));
} }
/**
Destructeur
*/
QETApp::~QETApp() {
}
/** /**
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
@@ -604,7 +610,7 @@ bool QETApp::fermer() {
/** /**
@return Le DiagramView qui a le focus dans l'interface MDI @return Le DiagramView qui a le focus dans l'interface MDI
*/ */
DiagramView *QETApp::diagramEnCours() { DiagramView *QETApp::diagramEnCours() const {
return(qobject_cast<DiagramView *>(workspace.activeWindow())); return(qobject_cast<DiagramView *>(workspace.activeWindow()));
} }

268
qetapp.h
View File

@@ -1,134 +1,146 @@
#ifndef QETAPP_H #ifndef QETAPP_H
#define QETAPP_H #define QETAPP_H
#include <QtGui> #include <QtGui>
class DiagramView; class DiagramView;
class ElementsPanelWidget; class ElementsPanelWidget;
/** /**
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
« Diagram » 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:
QETApp(QWidget * = 0);
void closeEvent(QCloseEvent *);
void addDiagramView(DiagramView *);
static QString commonElementsDir();
static QString customElementsDir();
static QString configDir();
static QString languagesPath();
static QString realPath(QString &);
static QString symbolicPath(QString &);
public slots: // constructeurs, destructeur
void systray(QSystemTrayIcon::ActivationReason); public:
void systrayReduce(); QETApp(QWidget * = 0);
void systrayRestore(); virtual ~QETApp();
void quit(QCloseEvent * = NULL);
void toggleFullScreen();
void aPropos();
void dialog_print();
void dialog_export();
bool dialogue_enregistrer_sous();
bool enregistrer();
bool nouveau();
bool ouvrir();
bool fermer();
void slot_editInfos();
void slot_couper();
void slot_copier();
void slot_coller();
void slot_zoomPlus();
void slot_zoomMoins();
void slot_zoomFit();
void slot_zoomReset();
void slot_selectAll();
void slot_selectNothing();
void slot_selectInvert();
void slot_supprimer();
void slot_pivoter();
void slot_setSelectionMode();
void slot_setVisualisationMode();
void slot_updateActions();
void slot_updateMenuFenetres();
void slot_addColumn();
void slot_removeColumn();
void slot_expand();
void slot_shrink();
protected: private:
// Actions faisables au travers de menus dans l'application QElectroTech QETApp(const QETApp &);
QAction *mode_selection;
QAction *mode_visualise;
QAction *nouveau_fichier;
QAction *ouvrir_fichier;
QAction *fermer_fichier;
QAction *enr_fichier;
QAction *enr_fichier_sous;
QAction *importer;
QAction *exporter;
QAction *imprimer;
QAction *quitter_qet;
QAction *annuler;
QAction *refaire;
QAction *couper;
QAction *copier;
QAction *coller;
QAction *sel_tout;
QAction *sel_rien;
QAction *sel_inverse;
QAction *supprimer;
QAction *selectionner;
QAction *pivoter;
QAction *infos_diagram;
QAction *add_column;
QAction *remove_column;
QAction *expand_diagram;
QAction *shrink_diagram;
QAction *poser_fil;
QAction *reduce_appli;
QAction *restore_appli;
QAction *zoom_avant;
QAction *zoom_arriere;
QAction *zoom_adapte;
QAction *zoom_reset;
QAction *a_propos_de_qet;
QAction *a_propos_de_qt;
QAction *configurer;
QAction *entrer_pe;
QAction *sortir_pe;
QAction *f_mosaique;
QAction *f_cascade;
QAction *f_reorganise;
QAction *f_prec;
QAction *f_suiv;
void actions(); // methodes
// menus variables public:
QAction *menu_systray_masquer_restaurer; void closeEvent(QCloseEvent *);
void addDiagramView(DiagramView *);
static QString commonElementsDir();
static QString customElementsDir();
static QString configDir();
static QString languagesPath();
static QString realPath(QString &);
static QString symbolicPath(QString &);
private: protected:
QWorkspace workspace; void actions();
DiagramView *diagramEnCours();
QSignalMapper windowMapper; private:
/// Dock pour le Panel d'Appareils DiagramView *diagramEnCours() const;
QDockWidget *qdw_pa; void menus();
/// Panel d'Appareils void toolbar();
ElementsPanelWidget *pa;
/// Elements de menus pour l'icone du systray public slots:
QMenu *menu_systray; void systray(QSystemTrayIcon::ActivationReason);
QAction *systray_masquer; void systrayReduce();
QAction * config_fullscreen; void systrayRestore();
QMenu *menu_fenetres; void quit(QCloseEvent * = NULL);
/// Icone dans le systray void toggleFullScreen();
QSystemTrayIcon *qsti; void aPropos();
/// Geometrie de la fenetre principale void dialog_print();
QByteArray wg; void dialog_export();
void menus(); bool dialogue_enregistrer_sous();
void toolbar(); bool enregistrer();
QToolBar *barre_outils; bool nouveau();
}; bool ouvrir();
bool fermer();
void slot_editInfos();
void slot_couper();
void slot_copier();
void slot_coller();
void slot_zoomPlus();
void slot_zoomMoins();
void slot_zoomFit();
void slot_zoomReset();
void slot_selectAll();
void slot_selectNothing();
void slot_selectInvert();
void slot_supprimer();
void slot_pivoter();
void slot_setSelectionMode();
void slot_setVisualisationMode();
void slot_updateActions();
void slot_updateMenuFenetres();
void slot_addColumn();
void slot_removeColumn();
void slot_expand();
void slot_shrink();
// attributs
protected:
// Actions faisables au travers de menus dans l'application QElectroTech
QAction *mode_selection;
QAction *mode_visualise;
QAction *nouveau_fichier;
QAction *ouvrir_fichier;
QAction *fermer_fichier;
QAction *enr_fichier;
QAction *enr_fichier_sous;
QAction *importer;
QAction *exporter;
QAction *imprimer;
QAction *quitter_qet;
QAction *annuler;
QAction *refaire;
QAction *couper;
QAction *copier;
QAction *coller;
QAction *sel_tout;
QAction *sel_rien;
QAction *sel_inverse;
QAction *supprimer;
QAction *selectionner;
QAction *pivoter;
QAction *infos_diagram;
QAction *add_column;
QAction *remove_column;
QAction *expand_diagram;
QAction *shrink_diagram;
QAction *poser_fil;
QAction *reduce_appli;
QAction *restore_appli;
QAction *zoom_avant;
QAction *zoom_arriere;
QAction *zoom_adapte;
QAction *zoom_reset;
QAction *a_propos_de_qet;
QAction *a_propos_de_qt;
QAction *configurer;
QAction *entrer_pe;
QAction *sortir_pe;
QAction *f_mosaique;
QAction *f_cascade;
QAction *f_reorganise;
QAction *f_prec;
QAction *f_suiv;
QAction *menu_systray_masquer_restaurer;
private:
QWorkspace workspace;
QSignalMapper windowMapper;
/// Dock pour le Panel d'Appareils
QDockWidget *qdw_pa;
/// Panel d'Appareils
ElementsPanelWidget *pa;
/// Elements de menus pour l'icone du systray
QMenu *menu_systray;
QAction *systray_masquer;
QAction * config_fullscreen;
QMenu *menu_fenetres;
/// Icone dans le systray
QSystemTrayIcon *qsti;
/// Geometrie de la fenetre principale
QByteArray wg;
QToolBar *barre_outils;
};
#endif #endif

View File

@@ -77,8 +77,12 @@ Terminal::Terminal(qreal pf_x, qreal pf_y, Terminal::Orientation o, Element *e,
/** /**
Destructeur Destructeur
La destruction de la borne entraine la destruction des conducteurs
associes.
*/ */
Terminal::~Terminal() { Terminal::~Terminal() {
//qDebug() << "Terminal::~Terminal" << (void *)this;
foreach(Conducer *c, liste_conducers) delete c;
delete br; delete br;
} }
@@ -139,6 +143,7 @@ bool Terminal::addConducer(Conducer *f) {
@param f Conducteur a enlever @param f Conducteur a enlever
*/ */
void Terminal::removeConducer(Conducer *f) { void Terminal::removeConducer(Conducer *f) {
//qDebug() << "Terminal::removeConducer" << (void *)this;
int index = liste_conducers.indexOf(f); int index = liste_conducers.indexOf(f);
if (index == -1) return; if (index == -1) return;
liste_conducers.removeAt(index); liste_conducers.removeAt(index);
@@ -229,9 +234,9 @@ void Terminal::hoverLeaveEvent(QGraphicsSceneHoverEvent *) {
*/ */
void Terminal::mousePressEvent(QGraphicsSceneMouseEvent *e) { void Terminal::mousePressEvent(QGraphicsSceneMouseEvent *e) {
if (Diagram *s = qobject_cast<Diagram *>(scene())) { if (Diagram *s = qobject_cast<Diagram *>(scene())) {
s -> setDepart(mapToScene(QPointF(amarrage_conducer))); s -> setConducerStart(mapToScene(QPointF(amarrage_conducer)));
s -> setArrivee(e -> scenePos()); s -> setConducerStop(e -> scenePos());
s -> poseConducer(true); s -> setConducer(true);
setCursor(Qt::CrossCursor); setCursor(Qt::CrossCursor);
} }
} }
@@ -253,7 +258,7 @@ void Terminal::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
} }
// si la scene est un Diagram, on actualise le poseur de conducteur // si la scene est un Diagram, on actualise le poseur de conducteur
if (Diagram *s = qobject_cast<Diagram *>(scene())) s -> setArrivee(e -> scenePos()); if (Diagram *s = qobject_cast<Diagram *>(scene())) s -> setConducerStop(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());
@@ -315,7 +320,7 @@ void Terminal::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
// verifie que la scene est bien un Diagram // verifie que la scene est bien un Diagram
if (Diagram *s = qobject_cast<Diagram *>(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 -> poseConducer(false); s -> setConducer(false);
// on recupere l'element sous le pointeur lors du MouseReleaseEvent // on recupere l'element sous le pointeur lors du MouseReleaseEvent
QGraphicsItem *qgi = s -> itemAt(e -> scenePos()); QGraphicsItem *qgi = s -> itemAt(e -> scenePos());
// s'il n'y a rien, on arrete la // s'il n'y a rien, on arrete la

View File

@@ -4,28 +4,29 @@
#include <QtGui> #include <QtGui>
#include <QtXml> #include <QtXml>
class Conducer; class Conducer;
class Element;
class Diagram; class Diagram;
class Element;
/** /**
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.
*/ */
class Terminal : public QGraphicsItem { class Terminal : public QGraphicsItem {
// constructeurs, destructeur
public: public:
// enum definissant l'orientation de la borne
enum Orientation {Nord, Est, Sud, Ouest}; enum Orientation {Nord, Est, Sud, Ouest};
// permet de caster un QGraphicsItem en Borne avec qgraphicsitem_cast
enum { Type = UserType + 1002 };
virtual int type() const { return Type; }
// constructeurs
Terminal(); Terminal();
Terminal(QPointF, Terminal::Orientation, Element * = 0, Diagram * = 0); Terminal(QPointF, Terminal::Orientation, Element * = 0, Diagram * = 0);
Terminal(qreal, qreal, Terminal::Orientation, Element * = 0, Diagram * = 0); Terminal(qreal, qreal, Terminal::Orientation, Element * = 0, Diagram * = 0);
virtual ~Terminal();
// destructeur private:
~Terminal(); Terminal(const Terminal &);
// methodes
public:
// permet de caster un QGraphicsItem en Borne avec qgraphicsitem_cast
virtual int type() const { return Type; }
// implementation des methodes virtuelles pures de QGraphicsItem // implementation des methodes virtuelles pures de QGraphicsItem
void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *); void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
@@ -44,8 +45,8 @@ class Terminal : public QGraphicsItem {
// methodes relatives a l'import/export au format XML // methodes relatives a l'import/export au format XML
static bool valideXml(QDomElement &); static bool valideXml(QDomElement &);
bool fromXml (QDomElement &); bool fromXml (QDomElement &);
QDomElement toXml (QDomDocument &) const; QDomElement toXml (QDomDocument &) const;
protected: protected:
// methodes de gestion des evenements // methodes de gestion des evenements
@@ -56,6 +57,10 @@ class Terminal : public QGraphicsItem {
void mouseMoveEvent (QGraphicsSceneMouseEvent *); void mouseMoveEvent (QGraphicsSceneMouseEvent *);
void mouseReleaseEvent(QGraphicsSceneMouseEvent *); void mouseReleaseEvent(QGraphicsSceneMouseEvent *);
// attributs
public:
enum { Type = UserType + 1002 };
private: private:
// pointeur vers la QGraphicsScene de type Diagram (evite quelques casts en interne) // pointeur vers la QGraphicsScene de type Diagram (evite quelques casts en interne)
Diagram *diagram_scene; Diagram *diagram_scene;