[qet] [3380] Text item : minor improvement |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
Revision: 3380
Author: blacksun
Date: 2014-10-18 14:25:16 +0200 (Sat, 18 Oct 2014)
Log Message:
-----------
Text item : minor improvement
Modified Paths:
--------------
trunk/sources/qetgraphicsitem/conductortextitem.cpp
trunk/sources/qetgraphicsitem/conductortextitem.h
trunk/sources/qetgraphicsitem/diagramtextitem.cpp
trunk/sources/qetgraphicsitem/diagramtextitem.h
trunk/sources/qetgraphicsitem/elementtextitem.cpp
trunk/sources/qetgraphicsitem/elementtextitem.h
Modified: trunk/sources/qetgraphicsitem/conductortextitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/conductortextitem.cpp 2014-10-17 21:30:42 UTC (rev 3379)
+++ trunk/sources/qetgraphicsitem/conductortextitem.cpp 2014-10-18 12:25:16 UTC (rev 3380)
@@ -29,12 +29,8 @@
DiagramTextItem(parent_conductor, parent_diagram),
parent_conductor_(parent_conductor),
moved_by_user_(false),
- rotate_by_user_(false),
- first_move_(true)
-{
- // par defaut, les DiagramTextItem sont Selectable et Movable
- // cela nous convient, on ne touche pas a ces flags
-}
+ rotate_by_user_(false)
+{}
/**
Constructeur
@@ -46,12 +42,8 @@
DiagramTextItem(text, parent_conductor, parent_diagram),
parent_conductor_(parent_conductor),
moved_by_user_(false),
- rotate_by_user_(false),
- first_move_(true)
-{
- // par defaut, les DiagramTextItem sont Selectable et Movable
- // cela nous convient, on ne touche pas a ces flags
-}
+ rotate_by_user_(false)
+{}
/**
Destructeur
@@ -149,65 +141,54 @@
}
/**
- Gere les clics de souris lies au champ de texte
- @param e Objet decrivant l'evenement souris
-*/
-void ConductorTextItem::mousePressEvent(QGraphicsSceneMouseEvent *e) {
- if ((flags() & QGraphicsItem::ItemIsMovable) && (e -> buttons() & Qt::LeftButton)) {
- before_mov_pos_ = pos();
- }
- first_move_ = true;
- DiagramTextItem::mousePressEvent(e);
+ * @brief ConductorTextItem::mousePressEvent
+ * @param event
+ */
+void ConductorTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event) {
+ before_mov_pos_ = pos();
+ DiagramTextItem::mousePressEvent(event);
}
/**
- Gere les mouvements de souris lies au champ de texte
- @param e Objet decrivant l'evenement souris
-*/
-void ConductorTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) {
- if (textInteractionFlags() & Qt::TextEditable) {
- QGraphicsTextItem::mouseMoveEvent(e);
- } else if ((flags() & QGraphicsItem::ItemIsMovable) && (e -> buttons() & Qt::LeftButton)) {
- if (first_move_) {
- mouse_to_origin_movement_ = before_mov_pos_ - mapToParent(e -> buttonDownPos(Qt::LeftButton));
- }
-
- QPointF intended_pos = mapToParent(e -> pos()) + mouse_to_origin_movement_;
- // si ce texte est attache a un conducteur, alors ses mouvements seront
- // limites a une certaine distance du trace de ce conducteur
+ * @brief ConductorTextItem::mouseMoveEvent
+ * @param event
+ */
+void ConductorTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) {
+ if (textInteractionFlags() & Qt::TextEditable) QGraphicsTextItem::mouseMoveEvent(event);
+
+ else if ((flags() & QGraphicsItem::ItemIsMovable) && (event -> buttons() & Qt::LeftButton)) {
+
+ QPointF intended_pos = event ->scenePos() + m_mouse_to_origin_movement;
+
if (parent_conductor_) {
if (parent_conductor_ -> isNearConductor(intended_pos)) {
- setPos(intended_pos);
+ event->modifiers() == Qt::ControlModifier ? setPos(intended_pos) : setPos(Diagram::snapToGrid(intended_pos));
parent_conductor_ -> setHighlighted(Conductor::Normal);
} else {
parent_conductor_ -> setHighlighted(Conductor::Alert);
}
}
- } else e -> ignore();
-
- if (first_move_) {
- first_move_ = false;
}
+
+ else event -> ignore();
}
/**
- Gere le relachement de souris
- Cette methode cree un objet d'annulation pour le deplacement
- @param e Objet decrivant l'evenement souris
-*/
+ * @brief ConductorTextItem::mouseReleaseEvent
+ * @param e
+ */
void ConductorTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *e) {
if (flags() & QGraphicsItem::ItemIsMovable) {
+
if (Diagram *diagram_ptr = diagram()) {
- // on cree un objet d'annulation correspondant au deplacement qui s'acheve
QPointF applied_movement = pos() - before_mov_pos_;
if (!applied_movement.isNull()) {
- // on cree un objet d'annulation seulement pour ce champ de texte
+ //Create an undo object
MoveConductorsTextsCommand *undo_object = new MoveConductorsTextsCommand(diagram_ptr);
undo_object -> addTextMovement(this, before_mov_pos_, pos(), moved_by_user_);
-
- // on active le flag indiquant que ce champ de texte a ete explicitement repositionne par l'utilisateur
+
moved_by_user_ = true;
diagram_ptr -> undoStack().push(undo_object);
Modified: trunk/sources/qetgraphicsitem/conductortextitem.h
===================================================================
--- trunk/sources/qetgraphicsitem/conductortextitem.h 2014-10-17 21:30:42 UTC (rev 3379)
+++ trunk/sources/qetgraphicsitem/conductortextitem.h 2014-10-18 12:25:16 UTC (rev 3380)
@@ -53,9 +53,9 @@
virtual void forceRotateByUser(bool);
protected:
- virtual void mousePressEvent(QGraphicsSceneMouseEvent *);
- virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *);
- virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *);
+ virtual void mousePressEvent (QGraphicsSceneMouseEvent *event);
+ virtual void mouseMoveEvent (QGraphicsSceneMouseEvent *event);
+ virtual void mouseReleaseEvent (QGraphicsSceneMouseEvent *event);
// attributes
private:
@@ -63,7 +63,5 @@
bool moved_by_user_;
bool rotate_by_user_;
QPointF before_mov_pos_;
- bool first_move_;
- QPointF mouse_to_origin_movement_;
};
#endif
Modified: trunk/sources/qetgraphicsitem/diagramtextitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/diagramtextitem.cpp 2014-10-17 21:30:42 UTC (rev 3379)
+++ trunk/sources/qetgraphicsitem/diagramtextitem.cpp 2014-10-18 12:25:16 UTC (rev 3380)
@@ -32,16 +32,7 @@
rotation_angle_(0.0),
m_first_move (true)
{
- //set Zvalue at 10 to be upper than the DiagramImageItem
- setZValue(10);
- setDefaultTextColor(Qt::black);
- setFont(QETApp::diagramTextsFont());
- setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);
- setNoEditable(false);
-#if QT_VERSION >= 0x040600
- setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
-#endif
- connect(this, SIGNAL(lostFocus()), this, SLOT(setNonFocusable()));
+ build();
}
/**
@@ -55,22 +46,31 @@
previous_text_(text),
rotation_angle_(0.0)
{
+ build();
+}
+
+/// Destructeur
+DiagramTextItem::~DiagramTextItem() {
+}
+
+/**
+ * @brief DiagramTextItem::build
+ * Build this item with default value
+ */
+void DiagramTextItem::build() {
//set Zvalue at 10 to be upper than the DiagramImageItem
setZValue(10);
setDefaultTextColor(Qt::black);
setFont(QETApp::diagramTextsFont());
setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);
setNoEditable(false);
+ setToolTip(tr("Maintenir ctrl pour un d\351placer librement"));
#if QT_VERSION >= 0x040600
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
#endif
connect(this, SIGNAL(lostFocus()), this, SLOT(setNonFocusable()));
}
-/// Destructeur
-DiagramTextItem::~DiagramTextItem() {
-}
-
/**
@return le Diagram auquel ce texte appartient, ou 0 si ce texte n'est
rattache a aucun schema
@@ -111,25 +111,6 @@
}
/**
- Traduit en coordonnees de la scene un mouvement / vecteur initialement
- exprime en coordonnees locales.
- @param movement Vecteur exprime en coordonnees locales
- @return le meme vecteur, exprime en coordonnees de la scene
-*/
-QPointF DiagramTextItem::mapMovementToScene(const QPointF &movement) const {
- // on definit deux points en coordonnees locales
- QPointF local_origin(0.0, 0.0);
- QPointF local_movement_point(movement);
-
- // on les mappe sur la scene
- QPointF scene_origin(mapToScene(local_origin));
- QPointF scene_movement_point(mapToScene(local_movement_point));
-
- // on calcule le vecteur represente par ces deux points
- return(scene_movement_point - scene_origin);
-}
-
-/**
Traduit en coordonnees locales un mouvement / vecteur initialement
exprime en coordonnees de la scene.
@param movement Vecteur exprime en coordonnees de la scene
@@ -167,25 +148,6 @@
return(parent_movement_point - parent_origin);
}
-/**
- Traduit en coordonnees locales un mouvement / vecteur initialement
- exprime en coordonnees du parent.
- @param movement Vecteur exprime en coordonnees du parent
- @return le meme vecteur, exprime en coordonnees locales
-*/
-QPointF DiagramTextItem::mapMovementFromParent(const QPointF &movement) const {
- // on definit deux points sur le parent
- QPointF parent_origin(0.0, 0.0);
- QPointF parent_movement_point(movement);
-
- // on les mappe sur ce QGraphicsItem
- QPointF local_origin(mapFromParent(parent_origin));
- QPointF local_movement_point(mapFromParent(parent_movement_point));
-
- // on calcule le vecteur represente par ces deux points
- return(local_movement_point - local_origin);
-}
-
void DiagramTextItem::setFontSize(int &s) {
setFont(QETApp::diagramTextsFont(s));
}
@@ -269,6 +231,8 @@
if (event -> modifiers() & Qt::ControlModifier) {
setSelected(!isSelected());
}
+ //Save the pos of item at the beggining of the movement
+ m_mouse_to_origin_movement = pos() - event->scenePos();
QGraphicsTextItem::mousePressEvent(event);
}
@@ -288,13 +252,11 @@
QPointF old_pos = pos();
- //Save the pos of item at the beggining of the movement
- if (m_first_move)
- m_mouse_to_origin_movement = old_pos - event->buttonDownScenePos(Qt::LeftButton);
-
//Set the actual pos
- setPos(event->scenePos() + m_mouse_to_origin_movement);
+ QPointF new_pos = event->scenePos() + m_mouse_to_origin_movement;
+ event->modifiers() == Qt::ControlModifier ? setPos(new_pos) : setPos(Diagram::snapToGrid(new_pos));
+
//Update the actual movement for other selected item
if (diagram_)
diagram_ -> continueMoveElements(pos() - old_pos);
@@ -328,33 +290,6 @@
setRotation(QET::correctAngle(rotation()+angle));
}
-/**
- Change la position du champ de texte en veillant a ce qu'il
- reste sur la grille du schema auquel il appartient.
- @param p Nouvelles coordonnees de l'element
-*/
-void DiagramTextItem::setPos(const QPointF &p) {
- if (p == pos()) return;
- // pas la peine de positionner sur la grille si l'element n'est pas sur un Diagram
- if (scene()) {
- // arrondit l'abscisse a 10 px pres
- int p_x = qRound(p.x() / (Diagram::xGrid * 1.0)) * Diagram::xGrid;
- // arrondit l'ordonnee a 10 px pres
- int p_y = qRound(p.y() / (Diagram::yGrid * 1.0)) * Diagram::yGrid;
- QGraphicsTextItem::setPos(p_x, p_y);
- } else QGraphicsTextItem::setPos(p);
-}
-
-/**
- Change la position du champ de texte en veillant a ce que l'il
- reste sur la grille du schema auquel il appartient.
- @param x Nouvelle abscisse de l'element
- @param y Nouvelle ordonnee de l'element
-*/
-void DiagramTextItem::setPos(qreal x, qreal y) {
- setPos(QPointF(x, y));
-}
-
/// Rend le champ de texte non focusable
void DiagramTextItem::setNonFocusable() {
setFlag(QGraphicsTextItem::ItemIsFocusable, false);
Modified: trunk/sources/qetgraphicsitem/diagramtextitem.h
===================================================================
--- trunk/sources/qetgraphicsitem/diagramtextitem.h 2014-10-17 21:30:42 UTC (rev 3379)
+++ trunk/sources/qetgraphicsitem/diagramtextitem.h 2014-10-18 12:25:16 UTC (rev 3380)
@@ -36,6 +36,9 @@
DiagramTextItem(QGraphicsItem * = 0, Diagram * = 0);
DiagramTextItem(const QString &, QGraphicsItem * = 0, Diagram * = 0);
virtual ~DiagramTextItem();
+
+ private:
+ void build();
// attributes
public:
@@ -52,16 +55,12 @@
Diagram *diagram() const;
virtual void fromXml(const QDomElement &) = 0;
virtual QDomElement toXml(QDomDocument &) const = 0;
- virtual void setPos(const QPointF &);
- virtual void setPos(qreal, qreal);
qreal rotationAngle() const;
void setRotationAngle(const qreal &);
void rotateBy(const qreal &);
void edit();
- QPointF mapMovementToScene(const QPointF &) const;
QPointF mapMovementFromScene(const QPointF &) const;
QPointF mapMovementToParent(const QPointF &) const;
- QPointF mapMovementFromParent(const QPointF &) const;
void setFontSize(int &s);
void setNoEditable(bool e = true) {no_editable = e;}
Modified: trunk/sources/qetgraphicsitem/elementtextitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/elementtextitem.cpp 2014-10-17 21:30:42 UTC (rev 3379)
+++ trunk/sources/qetgraphicsitem/elementtextitem.cpp 2014-10-18 12:25:16 UTC (rev 3380)
@@ -63,23 +63,6 @@
}
/**
- Modifie la position du champ de texte
- @param pos La nouvelle position du champ de texte
-*/
-void ElementTextItem::setPos(const QPointF &pos) {
- QGraphicsTextItem::setPos(pos);
-}
-
-/**
- Modifie la position du champ de texte
- @param x La nouvelle abscisse du champ de texte
- @param y La nouvelle ordonnee du champ de texte
-*/
-void ElementTextItem::setPos(qreal x, qreal y) {
- setPos(QPointF(x, y));
-}
-
-/**
Permet de lire le texte a mettre dans le champ a partir d'un element XML.
Cette methode se base sur la position du champ pour assigner ou non la
valeur a ce champ.
Modified: trunk/sources/qetgraphicsitem/elementtextitem.h
===================================================================
--- trunk/sources/qetgraphicsitem/elementtextitem.h 2014-10-17 21:30:42 UTC (rev 3379)
+++ trunk/sources/qetgraphicsitem/elementtextitem.h 2014-10-18 12:25:16 UTC (rev 3380)
@@ -57,8 +57,6 @@
void setFollowParentRotations(bool);
void fromXml(const QDomElement &);
QDomElement toXml(QDomDocument &) const;
- void setPos(const QPointF &);
- void setPos(qreal, qreal);
void setOriginalPos(const QPointF &);
QPointF originalPos() const;
void setOriginalRotationAngle(const qreal &);