2006-10-27 15:47:22 +00:00
# ifndef BORNE_H
# define BORNE_H
# define TAILLE_BORNE 4
# include <QtGui>
# include <QtXml>
2007-01-29 20:32:38 +00:00
class Conducer ;
2006-10-27 15:47:22 +00:00
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 .
*/
2007-01-29 20:14:26 +00:00
class Terminal : public QGraphicsItem {
2006-10-27 15:47:22 +00:00
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
2007-01-29 20:14:26 +00:00
Terminal ( ) ;
Terminal ( QPointF , Terminal : : Orientation , Element * = 0 , Diagram * = 0 ) ;
Terminal ( qreal , qreal , Terminal : : Orientation , Element * = 0 , Diagram * = 0 ) ;
2006-10-27 15:47:22 +00:00
// destructeur
2007-01-29 20:14:26 +00:00
~ Terminal ( ) ;
2006-10-27 15:47:22 +00:00
// 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
2007-01-29 20:32:38 +00:00
bool addConducer ( Conducer * ) ;
void removeConducer ( Conducer * ) ;
inline int nbConducers ( ) const { return ( liste_conducers . size ( ) ) ; }
2006-10-27 15:47:22 +00:00
// methodes de lecture
2007-01-29 20:32:38 +00:00
QList < Conducer * > conducers ( ) const ;
2007-01-29 20:14:26 +00:00
Terminal : : Orientation orientation ( ) const ;
2007-01-29 20:32:38 +00:00
inline QPointF amarrageConducer ( ) const { return ( mapToScene ( amarrage_conducer ) ) ; }
void updateConducer ( 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
2007-01-29 20:32:38 +00:00
QPointF amarrage_conducer ;
2006-10-27 15:47:22 +00:00
QPointF amarrage_elmt ;
// orientation de la borne
2007-01-29 20:14:26 +00:00
Terminal : : Orientation sens ;
2007-01-29 20:32:38 +00:00
// liste des conducers lies a cette borne
QList < Conducer * > liste_conducers ;
2006-10-27 15:47:22 +00:00
// 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 ;
2007-01-29 20:14:26 +00:00
Terminal * terminal_precedente ;
2006-10-27 15:47:22 +00:00
bool hovered ;
// methode initialisant les differents membres de la borne
2007-01-29 20:14:26 +00:00
void initialise ( QPointF , Terminal : : Orientation ) ;
2006-10-27 15:47:22 +00:00
// differentes couleurs utilisables pour l'effet "hover"
QColor couleur_hovered ;
QColor couleur_neutre ;
QColor couleur_autorise ;
QColor couleur_prudence ;
QColor couleur_interdit ;
} ;
# endif