2006-10-27 15:47:22 +00:00
# ifndef BORNE_H
# define BORNE_H
# define TAILLE_BORNE 4
# include <QtGui>
# include <QtXml>
class Conducteur ;
class Element ;
2007-01-29 00:41:12 +00:00
class Diagram ;
2006-10-27 15:47:22 +00:00
/**
Classe modelisant la <EFBFBD> borne <EFBFBD> d ' un appareil , c ' est - a - dire un
branchement possible pour un Conducteur .
*/
class Borne : public QGraphicsItem {
public :
// enum definissant l'orientation de la borne
2006-11-09 19:19:51 +00:00
enum Orientation { Nord , Est , Sud , Ouest } ;
2006-10-27 15:47:22 +00:00
// permet de caster un QGraphicsItem en Borne avec qgraphicsitem_cast
enum { Type = UserType + 1002 } ;
virtual int type ( ) const { return Type ; }
// constructeurs
Borne ( ) ;
2007-01-29 00:41:12 +00:00
Borne ( QPointF , Borne : : Orientation , Element * = 0 , Diagram * = 0 ) ;
Borne ( qreal , qreal , Borne : : Orientation , Element * = 0 , Diagram * = 0 ) ;
2006-10-27 15:47:22 +00:00
// destructeur
~ Borne ( ) ;
// implementation des methodes virtuelles pures de QGraphicsItem
void paint ( QPainter * , const QStyleOptionGraphicsItem * , QWidget * ) ;
QRectF boundingRect ( ) const ;
// methodes de manipulation des conducteurs lies a cette borne
bool addConducteur ( Conducteur * ) ;
void removeConducteur ( Conducteur * ) ;
2007-01-20 18:11:42 +00:00
inline int nbConducteurs ( ) const { return ( liste_conducteurs . size ( ) ) ; }
2006-10-27 15:47:22 +00:00
// methodes de lecture
QList < Conducteur * > conducteurs ( ) const ;
Borne : : Orientation orientation ( ) const ;
inline QPointF amarrageConducteur ( ) const { return ( mapToScene ( amarrage_conducteur ) ) ; }
2006-11-30 18:05:02 +00:00
void updateConducteur ( QPointF = QPointF ( ) ) ;
2006-10-27 15:47:22 +00:00
// methodes relatives a l'import/export au format XML
static bool valideXml ( QDomElement & ) ;
bool fromXml ( QDomElement & ) ;
2007-01-20 18:11:42 +00:00
QDomElement toXml ( QDomDocument & ) const ;
2006-10-27 15:47:22 +00:00
2007-01-20 18:11:42 +00:00
protected :
2006-10-27 15:47:22 +00:00
// methodes de gestion des evenements
void hoverEnterEvent ( QGraphicsSceneHoverEvent * ) ;
void hoverMoveEvent ( QGraphicsSceneHoverEvent * ) ;
void hoverLeaveEvent ( QGraphicsSceneHoverEvent * ) ;
void mousePressEvent ( QGraphicsSceneMouseEvent * ) ;
void mouseMoveEvent ( QGraphicsSceneMouseEvent * ) ;
void mouseReleaseEvent ( QGraphicsSceneMouseEvent * ) ;
private :
2007-01-29 00:41:12 +00:00
// pointeur vers la QGraphicsScene de type Diagram (evite quelques casts en interne)
Diagram * diagram_scene ;
2006-10-27 15:47:22 +00:00
// coordonnees des points d'amarrage
QPointF amarrage_conducteur ;
QPointF amarrage_elmt ;
// orientation de la borne
Borne : : Orientation sens ;
// liste des conducteurs lies a cette borne
QList < Conducteur * > liste_conducteurs ;
// pointeur vers un rectangle correspondant au bounding rect ; permet de ne calculer le bounding rect qu'une seule fois ; le pointeur c'est parce que le compilo exige une methode const
QRectF * br ;
Borne * borne_precedente ;
bool hovered ;
// methode initialisant les differents membres de la borne
void initialise ( QPointF , Borne : : Orientation ) ;
// differentes couleurs utilisables pour l'effet "hover"
QColor couleur_hovered ;
QColor couleur_neutre ;
QColor couleur_autorise ;
QColor couleur_prudence ;
QColor couleur_interdit ;
} ;
# endif