[qet] [841] La position des textes dans l'editeur d' element est desormais ajustee lorsqu'on change leur taille de police.

[ Thread Index | Date Index | More lists.tuxfamily.org/qet Archives ]


Revision: 841
Author:   xavier
Date:     2010-01-17 17:09:46 +0100 (Sun, 17 Jan 2010)
Log Message:
-----------
La position des textes dans l'editeur d'element est desormais ajustee lorsqu'on change leur taille de police.

Modified Paths:
--------------
    branches/0.3/sources/editor/parttext.cpp
    branches/0.3/sources/editor/parttext.h
    branches/0.3/sources/editor/parttextfield.cpp

Modified: branches/0.3/sources/editor/parttext.cpp
===================================================================
--- branches/0.3/sources/editor/parttext.cpp	2010-01-10 20:22:52 UTC (rev 840)
+++ branches/0.3/sources/editor/parttext.cpp	2010-01-17 16:09:46 UTC (rev 841)
@@ -63,6 +63,7 @@
 		xml_element.attribute("x").toDouble(),
 		xml_element.attribute("y").toDouble()
 	);
+	known_position_ = pos();
 }
 
 /**
@@ -195,6 +196,7 @@
 	} else if (property == "size") {
 		if (!value.canConvert(QVariant::Int)) return;
 		setFont(QETApp::diagramTextsFont(value.toInt()));
+		adjustItemPosition(0);
 	} else if (property == "text") {
 		setPlainText(value.toString());
 	}
@@ -229,8 +231,13 @@
 	@param value Valeur numerique relative au changement
 */
 QVariant PartText::itemChange(GraphicsItemChange change, const QVariant &value) {
-	if (scene()) {
-		if (change == QGraphicsItem::ItemPositionChange || change == QGraphicsItem::ItemSelectedChange) {
+	if (change == QGraphicsItem::ItemPositionHasChanged || change == QGraphicsItem::ItemSceneHasChanged) {
+		// memorise la nouvelle position "officielle" du champ de texte
+		// cette information servira a le recentrer en cas d'ajout / retrait de lignes
+		known_position_ = pos();
+		infos -> updateForm();
+	} else if (change == QGraphicsItem::ItemSelectedHasChanged) {
+		if (value.toBool() == true) {
 			infos -> updateForm();
 		}
 	}
@@ -276,6 +283,18 @@
 #endif
 }
 
+/**
+	Cette methode s'assure que la position du champ de texte est coherente
+	en repositionnant son origine (c-a-d le milieu du bord gauche du champ de
+	texte) a la position originale. Cela est notamment utile lorsque le champ
+	de texte est agrandi ou retreci verticalement (ajout ou retrait de lignes).
+	@param new_block_count Nombre de blocs dans le PartText
+*/
+void PartText::adjustItemPosition(int new_block_count) {
+	Q_UNUSED(new_block_count);
+	setPos(known_position_);
+}
+
 #ifdef QET_DEBUG_EDITOR_TEXTS
 /**
 	Dessine deux petites fleches pour mettre un point en valeur

Modified: branches/0.3/sources/editor/parttext.h
===================================================================
--- branches/0.3/sources/editor/parttext.h	2010-01-10 20:22:52 UTC (rev 840)
+++ branches/0.3/sources/editor/parttext.h	2010-01-17 16:09:46 UTC (rev 841)
@@ -56,6 +56,9 @@
 	virtual bool isUseless() const;
 	virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget * = 0 );
 	
+	public slots:
+	void adjustItemPosition(int);
+	
 	protected:
 	virtual void focusOutEvent(QFocusEvent *);
 	virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *);
@@ -68,5 +71,6 @@
 	void drawPoint(QPainter *, const QPointF &);
 #endif
 	QString previous_text;
+	QPointF known_position_;
 };
 #endif

Modified: branches/0.3/sources/editor/parttextfield.cpp
===================================================================
--- branches/0.3/sources/editor/parttextfield.cpp	2010-01-10 20:22:52 UTC (rev 840)
+++ branches/0.3/sources/editor/parttextfield.cpp	2010-01-17 16:09:46 UTC (rev 841)
@@ -242,6 +242,7 @@
 	} else if (property == "size") {
 		if (!value.canConvert(QVariant::Int)) return;
 		setFont(QETApp::diagramTextsFont(value.toInt()));
+		adjustItemPosition(0);
 	} else if (property == "text") {
 		setPlainText(value.toString());
 	} else if (property == "rotation angle") {
@@ -343,7 +344,7 @@
 	en repositionnant son origine (c-a-d le milieu du bord gauche du champ de
 	texte) a la position originale. Cela est notamment utile lorsque le champ
 	de texte est agrandi ou retreci verticalement (ajout ou retrait de lignes).
-	@param new_bloc_count Nombre de blocs dans l'ElementTextItem
+	@param new_block_count Nombre de blocs dans le PartTextField
 */
 void PartTextField::adjustItemPosition(int new_block_count) {
 	Q_UNUSED(new_block_count);


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