[qet] [1089] Editeur d'elements : mise a jour de la gestion du positionnement et de la rotation des champs de texte dynamiques .

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


Revision: 1089
Author:   xavier
Date:     2010-07-25 16:43:06 +0200 (Sun, 25 Jul 2010)
Log Message:
-----------
Editeur d'elements : mise a jour de la gestion du positionnement et de la rotation des champs de texte dynamiques.

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

Modified: branches/0.3/sources/editor/parttextfield.cpp
===================================================================
--- branches/0.3/sources/editor/parttextfield.cpp	2010-07-25 14:28:17 UTC (rev 1088)
+++ branches/0.3/sources/editor/parttextfield.cpp	2010-07-25 14:43:06 UTC (rev 1089)
@@ -29,8 +29,7 @@
 PartTextField::PartTextField(QETElementEditor *editor, QGraphicsItem *parent, QGraphicsScene *scene) :
 	QGraphicsTextItem(parent, scene),
 	CustomElementPart(editor),
-	follow_parent_rotations(true),
-	rotation_angle_(0.0)
+	follow_parent_rotations(true)
 {
 	setDefaultTextColor(Qt::black);
 	setFont(QETApp::diagramTextsFont());
@@ -40,8 +39,10 @@
 #endif
 	setPlainText(QObject::tr("_", "default text when adding a textfield in the element editor"));
 	
-	// ajuste la position du champ de texte lorsqu'on lui ajoute/retire des lignes
+	adjustItemPosition(1);
+	// ajuste la position du champ de texte lorsqu'on lui ajoute/retire des lignes ou lorsqu'on change sa taille de police
 	connect(document(), SIGNAL(blockCountChanged(int)), this, SLOT(adjustItemPosition(int)));
+	connect(document(), SIGNAL(contentsChanged()),      this, SLOT(adjustItemPosition()));
 }
 
 /// Destructeur
@@ -69,7 +70,6 @@
 		xml_element.attribute("x").toDouble(),
 		xml_element.attribute("y").toDouble()
 	);
-	known_position_ = pos();
 	
 	follow_parent_rotations = (xml_element.attribute("rotate") == "true");
 }
@@ -97,57 +97,17 @@
 }
 
 /**
-	Retourne la position du texte, l'origine etant le milieu du bord gauche du
-	champ
-	@return la position du texte
-*/
-QPointF PartTextField::pos() const {
-	return(mapToScene(margin()));
-}
-
-/**
-	Specifie la position du champ de texte
-	@param new_pos Nouvelle position
-*/
-void PartTextField::setPos(const QPointF &new_pos) {
-	// annule toute transformation (rotation notamment)
-	resetTransform();
-	
-	// effectue le positionnement en lui-meme
-	QPointF m = margin();
-	QGraphicsTextItem::setPos(new_pos - m);
-	
-	// applique a nouveau la rotation du champ de texte
-	setTransform(QTransform().translate(m.x(), m.y()).rotate(rotation_angle_).translate(-m.x(), -m.y()));
-}
-
-/**
-	Specifie la position du champ de texte
-	@param x abscisse de la nouvelle position
-	@param y ordonnee de la nouvelle position
-*/
-void PartTextField::setPos(qreal x, qreal y) {
-	PartTextField::setPos(QPointF(x, y));
-}
-
-/**
 	@return l'angle de rotation de ce champ de texte
 */
 qreal PartTextField::rotationAngle() const {
-	return(rotation_angle_);
+	return(rotation());
 }
 
 /**
 	@param angle Le nouvel angle de rotation de ce champ de texte
 */
 void PartTextField::setRotationAngle(const qreal &angle) {
-	qreal applied_rotation = QET::correctAngle(angle);
-	
-	QPointF t = margin();
-	translate(t.x(), t.y());
-	rotate(applied_rotation - rotation_angle_);
-	rotation_angle_ = applied_rotation;
-	translate(-t.x(), -t.y());
+	setRotation(QET::correctAngle(angle));
 }
 
 /**
@@ -234,7 +194,6 @@
 	} 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") {
@@ -265,7 +224,7 @@
 	} else if (property == "text") {
 		return(toPlainText());
 	} else if (property == "rotation angle") {
-		return(rotation_angle_);
+		return(rotation());
 	} else if (property == "rotate") {
 		return(follow_parent_rotations);
 	}
@@ -279,9 +238,6 @@
 */
 QVariant PartTextField::itemChange(GraphicsItemChange change, const QVariant &value) {
 	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();
 		updateCurrentPartEditor();
 	} else if (change == QGraphicsItem::ItemSelectedHasChanged) {
 		if (value.toBool() == true) {
@@ -340,7 +296,12 @@
 */
 void PartTextField::adjustItemPosition(int new_block_count) {
 	Q_UNUSED(new_block_count);
-	setPos(known_position_);
+	qreal origin_offset = boundingRect().bottom() / 2.0;
+	
+	QTransform base_translation;
+	base_translation.translate(0.0, -origin_offset);
+	setTransform(base_translation, false);
+	setTransformOriginPoint(0.0, origin_offset);
 }
 
 #ifdef QET_DEBUG_EDITOR_TEXTS

Modified: branches/0.3/sources/editor/parttextfield.h
===================================================================
--- branches/0.3/sources/editor/parttextfield.h	2010-07-25 14:28:17 UTC (rev 1088)
+++ branches/0.3/sources/editor/parttextfield.h	2010-07-25 14:43:06 UTC (rev 1089)
@@ -40,7 +40,6 @@
 	
 	// attributs
 	bool follow_parent_rotations;
-	qreal rotation_angle_;
 	
 	// methodes
 	public:
@@ -54,9 +53,6 @@
 	virtual QString xmlName() const { return(QString("input")); }
 	void fromXml(const QDomElement &);
 	const QDomElement toXml(QDomDocument &) const;
-	QPointF pos() const;
-	void setPos(const QPointF &);
-	void setPos(qreal, qreal);
 	qreal rotationAngle() const;
 	void setRotationAngle(const qreal &);
 	bool followParentRotations();
@@ -67,7 +63,7 @@
 	virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget * = 0 );
 	
 	public slots:
-	void adjustItemPosition(int);
+	void adjustItemPosition(int = 0);
 	
 	protected:
 	virtual void focusOutEvent(QFocusEvent *);
@@ -81,6 +77,5 @@
 	void drawPoint(QPainter *, const QPointF &);
 #endif
 	QString previous_text;
-	QPointF known_position_;
 };
 #endif


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