[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 &);


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/