diff --git a/sources/diagram.cpp b/sources/diagram.cpp index 17a83e934..e9fd4e5a9 100644 --- a/sources/diagram.cpp +++ b/sources/diagram.cpp @@ -968,7 +968,7 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf qgi -> setPos( qgi -> pos() += pos_); } - // remplissage des listes facultatives + //Filling of optional lists if (content_ptr) { content_ptr -> elements = added_elements.toSet(); content_ptr -> conductorsToMove = added_conductors.toSet(); @@ -976,6 +976,12 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf content_ptr -> images = added_images.toSet(); content_ptr -> shapes = added_shapes.toSet(); } + + //Ensure the texts of conductor are inside the border of the folio + //and so don't cause the annoying margin on the left border of the folio. + for(Conductor *cond : added_conductors) + cond->textItem()->setPos(cond->textItem()->pos()); + adjustSceneRect(); return(true); } diff --git a/sources/qetgraphicsitem/conductortextitem.cpp b/sources/qetgraphicsitem/conductortextitem.cpp index fd3f45626..62a9160f8 100644 --- a/sources/qetgraphicsitem/conductortextitem.cpp +++ b/sources/qetgraphicsitem/conductortextitem.cpp @@ -137,7 +137,42 @@ void ConductorTextItem::forceRotateByUser(bool rotate_by_user) { rotate_by_user_ = rotate_by_user; if (!rotate_by_user && parent_conductor_) { parent_conductor_ -> calculateTextItemPosition(); - } + } +} + +/** + * @brief ConductorTextItem::setPos + * @param pos + */ +void ConductorTextItem::setPos(const QPointF &pos) +{ + /* + * In some condition the conductor text item is outside the border of folio in the left. + * They cause a margin on the left of folio and in most case this margin is unwanted and annoying the user. + * If the text is empty and the scene position is outside the border (left and top), + * we can say that this position, is unwanted by user. + * So we move this text item to the top left of the bounding rect of parent conductors, because we sure this position is wanted by user. + */ + DiagramTextItem::setPos(pos); + if(toPlainText().isEmpty() && (scenePos().x() < 0 || scenePos().y() < 0)) + { + Conductor *cond = parentConductor(); + if(cond) + DiagramTextItem::setPos(cond->boundingRect().topLeft()); + else + DiagramTextItem::setPos(0,0); + } +} + +/** + * @brief ConductorTextItem::setPos + * @param x + * @param y + */ +void ConductorTextItem::setPos(qreal x, qreal y) +{ + QPointF p(x,y); + setPos(p); } /** @@ -238,5 +273,5 @@ void ConductorTextItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *e) { */ void ConductorTextItem::hoverMoveEvent(QGraphicsSceneHoverEvent *e) { Q_UNUSED(e); - QGraphicsTextItem::hoverMoveEvent(e); + QGraphicsTextItem::hoverMoveEvent(e); } diff --git a/sources/qetgraphicsitem/conductortextitem.h b/sources/qetgraphicsitem/conductortextitem.h index 062058146..57b58d287 100644 --- a/sources/qetgraphicsitem/conductortextitem.h +++ b/sources/qetgraphicsitem/conductortextitem.h @@ -26,47 +26,44 @@ class Conductor; Its movements are however limited to a particular distance around its parent conductor. */ -class ConductorTextItem : public DiagramTextItem { +class ConductorTextItem : public DiagramTextItem +{ Q_OBJECT - // constructors, destructor + // constructors, destructor public: - ConductorTextItem(Conductor * = 0); - ConductorTextItem(const QString &, Conductor * = 0); - virtual ~ConductorTextItem(); + ConductorTextItem(Conductor * = 0); + ConductorTextItem(const QString &, Conductor * = 0); + virtual ~ConductorTextItem(); private: - ConductorTextItem(const ConductorTextItem &); - - // attributes - public: - enum { Type = UserType + 1006 }; - Conductor *parentConductor() const; - virtual void fromXml(const QDomElement &); - virtual void toXml (QDomElement &xml) const; - - // methods - public: - virtual int type() const { return Type; } - virtual bool wasMovedByUser() const; - virtual bool wasRotateByUser() const; - virtual void forceMovedByUser(bool); - virtual void forceRotateByUser(bool); - - protected: - virtual void mousePressEvent (QGraphicsSceneMouseEvent *event); - virtual void mouseMoveEvent (QGraphicsSceneMouseEvent *event); - virtual void mouseReleaseEvent (QGraphicsSceneMouseEvent *event); - - protected: - virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *); - virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *); - virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *); + ConductorTextItem(const ConductorTextItem &); - // attributes + public: + enum { Type = UserType + 1006 }; + Conductor *parentConductor() const; + virtual void fromXml(const QDomElement &); + virtual void toXml (QDomElement &xml) const; + virtual int type() const { return Type; } + virtual bool wasMovedByUser() const; + virtual bool wasRotateByUser() const; + virtual void forceMovedByUser(bool); + virtual void forceRotateByUser(bool); + virtual void setPos(const QPointF &pos); + virtual void setPos(qreal x, qreal y); + + protected: + virtual void mousePressEvent (QGraphicsSceneMouseEvent *event); + virtual void mouseMoveEvent (QGraphicsSceneMouseEvent *event); + virtual void mouseReleaseEvent (QGraphicsSceneMouseEvent *event); + virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *); + virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *); + virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *); + + // attributes private: - Conductor *parent_conductor_; - bool moved_by_user_; - bool rotate_by_user_; - QPointF before_mov_pos_; + Conductor *parent_conductor_; + bool moved_by_user_; + bool rotate_by_user_; + QPointF before_mov_pos_; }; #endif