diff --git a/sources/qetgraphicsitem/elementtextitem.cpp b/sources/qetgraphicsitem/elementtextitem.cpp index df18666e1..549e28bef 100644 --- a/sources/qetgraphicsitem/elementtextitem.cpp +++ b/sources/qetgraphicsitem/elementtextitem.cpp @@ -174,23 +174,42 @@ void ElementTextItem::adjustItemPosition(int new_block_count) { } /** - Effetue la rotation du texte en elle-meme - Pour les ElementTextItem, la rotation s'effectue autour du milieu du bord - gauche du champ de texte. - @param angle Angle de la rotation a effectuer -*/ -void ElementTextItem::applyRotation(const qreal &angle) { - QGraphicsTextItem::setRotation(QGraphicsTextItem::rotation() + angle); + * @brief ElementTextItem::mouseDoubleClickEvent + * @param event + */ +void ElementTextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) { + //If parent is linked, show the linked element + if (parent_element_ -> linkType() & (Element::AllReport | Element::Slave) && !parent_element_ -> isFree()) { + //Unselect and ungrab mouse to prevent unwanted + //move when linked element is in the same scene of this. + setSelected(false); + ungrabMouse(); + + //Show and select the linked element + Element *linked = parent_element_ -> linkedElements().first(); + if (scene() != linked -> scene()) linked -> diagram() -> showMe(); + linked -> setSelected(true); + + //Zoom to the linked element + foreach(QGraphicsView *view, linked -> diagram() -> views()) { + QRectF fit = linked -> sceneBoundingRect(); + fit.adjust(-200, -200, 200, 200); + view -> fitInView(fit, Qt::KeepAspectRatioByExpanding); + } + } + else { + DiagramTextItem::mouseDoubleClickEvent(event); + } } /** * @brief ElementTextItem::mouseMoveEvent * @param e */ -void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) { +void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { if (textInteractionFlags() & Qt::TextEditable) { - DiagramTextItem::mouseMoveEvent(e); - } else if ((flags() & QGraphicsItem::ItemIsMovable) && (e -> buttons() & Qt::LeftButton)) { + DiagramTextItem::mouseMoveEvent(event); + } else if ((flags() & QGraphicsItem::ItemIsMovable) && (event -> buttons() & Qt::LeftButton)) { QPointF old_pos = pos(); /* @@ -199,7 +218,7 @@ void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) { * Instead of this, we apply to the actual pos, * the vector defined by the movement of cursor since the last pos clicked by left button */ - QPointF movement = e -> pos() - e -> buttonDownPos(Qt::LeftButton); + QPointF movement = event -> pos() - event -> buttonDownPos(Qt::LeftButton); /* * the method pos() and setPos() always work with coordinate of parent item @@ -207,7 +226,7 @@ void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) { * before applyRotation */ QPointF new_pos = pos() + mapMovementToParent(movement); - e -> modifiers() == Qt::ControlModifier ? setPos(new_pos) : setPos(Diagram::snapToGrid(new_pos)); + event -> modifiers() == Qt::ControlModifier ? setPos(new_pos) : setPos(Diagram::snapToGrid(new_pos)); Diagram *diagram_ptr = diagram(); if (diagram_ptr) { @@ -233,7 +252,7 @@ void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) { // on applique le mouvement subi aux autres textes a deplacer diagram_ptr -> continueMoveElementTexts(scene_effective_movement); } - } else e -> ignore(); + } else event -> ignore(); if (m_first_move) { m_first_move = false; @@ -244,7 +263,7 @@ void ElementTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) { * @brief ElementTextItem::mouseReleaseEvent * @param e */ -void ElementTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) { +void ElementTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if (Diagram *diagram_ptr = diagram()) { if (parent_element_) { if (parent_element_ -> isHighlighted()) { @@ -254,7 +273,47 @@ void ElementTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) { diagram_ptr -> endMoveElementTexts(); } - if (!(e -> modifiers() & Qt::ControlModifier)) { - QGraphicsTextItem::mouseReleaseEvent(e); + if (!(event -> modifiers() & Qt::ControlModifier)) { + QGraphicsTextItem::mouseReleaseEvent(event); } } + +/** + * @brief ElementTextItem::hoverEnterEvent + * @param event + */ +void ElementTextItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { + if (parent_element_ -> linkType() & (Element::AllReport | Element::Slave) && !parent_element_->isFree()) { + setDefaultTextColor(Qt::blue); + + //Also color the child text if parent is a slave and linked + if (parent_element_-> linkType() == Element::Slave && !parent_element_ -> isFree()) { + foreach (QGraphicsItem *qgi, childItems()) { + if (QGraphicsTextItem *qgti = qgraphicsitem_cast (qgi)) + qgti->setDefaultTextColor(Qt::blue); + } + } + } + else { + DiagramTextItem::hoverEnterEvent(event); + } +} + +/** + * @brief ElementTextItem::hoverLeaveEvent + * @param event + */ +void ElementTextItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { + if (defaultTextColor() != Qt::black) + setDefaultTextColor(Qt::black); + + //Also color the child text if parent is a slave and linked + if (parent_element_-> linkType() == Element::Slave && !parent_element_ -> isFree()) { + foreach (QGraphicsItem *qgi, childItems()) { + if (QGraphicsTextItem *qgti = qgraphicsitem_cast (qgi)) + qgti->setDefaultTextColor(Qt::black); + } + } + + DiagramTextItem::hoverLeaveEvent(event); +} diff --git a/sources/qetgraphicsitem/elementtextitem.h b/sources/qetgraphicsitem/elementtextitem.h index 881c52a37..6d8c20705 100644 --- a/sources/qetgraphicsitem/elementtextitem.h +++ b/sources/qetgraphicsitem/elementtextitem.h @@ -30,52 +30,51 @@ class Element; */ class ElementTextItem : public DiagramTextItem { Q_OBJECT - // constructors, destructor + // constructors, destructor public: - ElementTextItem(Element * = 0, Diagram * = 0); - ElementTextItem(const QString &, Element * = 0, Diagram * = 0); - virtual ~ElementTextItem(); + ElementTextItem(Element * = 0, Diagram * = 0); + ElementTextItem(const QString &, Element * = 0, Diagram * = 0); + virtual ~ElementTextItem(); - // attributes + // attributes public: - enum { Type = UserType + 1003 }; + enum { Type = UserType + 1003 }; + virtual int type () const { return Type; } private: - Element *parent_element_; - bool follow_parent_rotations; - QPointF original_position; - qreal original_rotation_angle_; - QString tagg_; + Element *parent_element_; + bool follow_parent_rotations; + QPointF original_position; + qreal original_rotation_angle_; + QString tagg_; - // methods - public: - virtual int type() const { return Type; } - Element *parentElement() const; - /// @return the rectangle defining the bounds of this text item - virtual QRectF boundingRect() const { return(QGraphicsTextItem::boundingRect().adjusted(0.0, -1.1, 0.0, 0.0)); } - bool followParentRotations() const; - void setFollowParentRotations(bool); - void fromXml(const QDomElement &); - QDomElement toXml(QDomDocument &) const; - void setOriginalPos(const QPointF &); - QPointF originalPos() const; - void setOriginalRotationAngle(const qreal &); - qreal originalRotationAngle() const; - virtual void setFont(const QFont &); - void setTagg(const QString &str) {tagg_ = str;} - QString tagg() const {return tagg_;} + // methods + public: + Element *parentElement () const; + void fromXml ( const QDomElement & ); + QDomElement toXml ( QDomDocument & ) const; + void setOriginalPos ( const QPointF & ); + QPointF originalPos () const; + void setOriginalRotationAngle ( const qreal & ); + qreal originalRotationAngle () const; + virtual void setFont ( const QFont & ); + void setTagg ( const QString &str ) {tagg_ = str;} + QString tagg () const {return tagg_;} + void setFollowParentRotations ( bool fpr); + bool followParentRotations () const; public slots: - void adjustItemPosition(int = 0); + void adjustItemPosition(int = 0); protected: - virtual void applyRotation(const qreal &); - - virtual void mouseMoveEvent (QGraphicsSceneMouseEvent *e); - virtual void mouseReleaseEvent (QGraphicsSceneMouseEvent *e); + virtual void mouseDoubleClickEvent ( QGraphicsSceneMouseEvent *event ); + virtual void mouseMoveEvent ( QGraphicsSceneMouseEvent *event ); + virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent *event ); + virtual void hoverEnterEvent ( QGraphicsSceneHoverEvent *event ); + virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent *event ); private: - void build(); + void build (); }; /**