[qet] [1090] Il est desormais possible de pivoter les champs de texte statique. |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
Revision: 1090
Author: xavier
Date: 2010-07-25 17:29:58 +0200 (Sun, 25 Jul 2010)
Log Message:
-----------
Il est desormais possible de pivoter les champs de texte statique.
Modified Paths:
--------------
branches/0.3/sources/customelement.cpp
branches/0.3/sources/editor/parttext.cpp
branches/0.3/sources/editor/parttext.h
branches/0.3/sources/editor/texteditor.cpp
branches/0.3/sources/editor/texteditor.h
branches/0.3/sources/elementtextitem.cpp
Modified: branches/0.3/sources/customelement.cpp
===================================================================
--- branches/0.3/sources/customelement.cpp 2010-07-25 14:43:06 UTC (rev 1089)
+++ branches/0.3/sources/customelement.cpp 2010-07-25 15:29:58 UTC (rev 1090)
@@ -558,6 +558,13 @@
text_document.setDefaultFont(used_font);
text_document.setPlainText(e.attribute("text"));
+ // Pivote le systeme de coordonnees du QPainter pour effectuer le rendu
+ // dans le bon sens
+ qreal default_rotation_angle = 0.0;
+ if (QET::attributeIsAReal(e, "rotation", &default_rotation_angle)) {
+ qp.rotate(default_rotation_angle);
+ }
+
/*
Deplace le systeme de coordonnees du QPainter pour effectuer le rendu au
bon endroit ; note : on soustrait l'ascent() de la police pour
Modified: branches/0.3/sources/editor/parttext.cpp
===================================================================
--- branches/0.3/sources/editor/parttext.cpp 2010-07-25 14:43:06 UTC (rev 1089)
+++ branches/0.3/sources/editor/parttext.cpp 2010-07-25 15:29:58 UTC (rev 1090)
@@ -41,6 +41,11 @@
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
#endif
setPlainText(QObject::tr("T", "default text when adding a text in the element editor"));
+
+ 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
@@ -58,11 +63,16 @@
setFont(QETApp::diagramTextsFont(font_size));
setPlainText(xml_element.attribute("text"));
+
+ qreal default_rotation_angle = 0.0;
+ if (QET::attributeIsAReal(xml_element, "rotation", &default_rotation_angle)) {
+ setRotationAngle(default_rotation_angle);
+ }
+
setPos(
xml_element.attribute("x").toDouble(),
xml_element.attribute("y").toDouble()
);
- known_position_ = pos();
}
/**
@@ -76,36 +86,28 @@
xml_element.setAttribute("y", QString("%1").arg(pos().y()));
xml_element.setAttribute("text", toPlainText());
xml_element.setAttribute("size", font().pointSize());
+ // angle de rotation du champ de texte
+ if (rotationAngle()) {
+ xml_element.setAttribute("rotation", QString("%1").arg(rotationAngle()));
+ }
return(xml_element);
}
/**
- Retourne la position du texte, l'origine etant le point a gauche du texte,
- sur la baseline de la premiere ligne
- @return la position du texte
+ @return l'angle de rotation de ce champ de texte
*/
-QPointF PartText::pos() const {
- return(QGraphicsTextItem::pos() + margin());
+qreal PartText::rotationAngle() const {
+ return(rotation());
}
/**
- Specifie la position du texte statique
- @param left_corner_pos Nouvelle position
+ @param angle Le nouvel angle de rotation de ce champ de texte
*/
-void PartText::setPos(const QPointF &left_corner_pos) {
- QGraphicsTextItem::setPos(left_corner_pos - margin());
+void PartText::setRotationAngle(const qreal &angle) {
+ setRotation(QET::correctAngle(angle));
}
/**
- Specifie la position du texte statique
- @param x abscisse de la nouvelle position
- @param y ordonnee de la nouvelle position
-*/
-void PartText::setPos(qreal x, qreal y) {
- QGraphicsTextItem::setPos(QPointF(x, y) - margin());
-}
-
-/**
@return Les coordonnees du point situe en bas a gauche du texte.
*/
QPointF PartText::margin() const {
@@ -176,6 +178,7 @@
* y : ordonnee de la position
* size : taille du texte
* text : texte
+ * "rotation angle" : amgle de rotation
@param value Valeur a attribuer a la propriete
*/
void PartText::setProperty(const QString &property, const QVariant &value) {
@@ -188,9 +191,10 @@
} 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") {
+ setRotationAngle(value.toDouble());
}
update();
}
@@ -202,17 +206,20 @@
* y : ordonnee de la position
* size : taille du texte
* text : texte
+ * "rotation angle" : amgle de rotation
@return La valeur de la propriete property
*/
QVariant PartText::property(const QString &property) {
if (property == "x") {
- return((scenePos() + margin()).x());
+ return(pos().x());
} else if (property == "y") {
- return((scenePos() + margin()).y());
+ return(pos().y());
} else if (property == "size") {
return(font().pointSize());
} else if (property == "text") {
return(toPlainText());
+ } else if (property == "rotation angle") {
+ return(rotation());
}
return(QVariant());
}
@@ -224,9 +231,6 @@
*/
QVariant PartText::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) {
@@ -284,7 +288,12 @@
*/
void PartText::adjustItemPosition(int new_block_count) {
Q_UNUSED(new_block_count);
- setPos(known_position_);
+ QPointF origin_offset = margin();
+
+ QTransform base_translation;
+ base_translation.translate(-origin_offset.x(), -origin_offset.y());
+ setTransform(base_translation, false);
+ setTransformOriginPoint(origin_offset);
}
#ifdef QET_DEBUG_EDITOR_TEXTS
Modified: branches/0.3/sources/editor/parttext.h
===================================================================
--- branches/0.3/sources/editor/parttext.h 2010-07-25 14:43:06 UTC (rev 1089)
+++ branches/0.3/sources/editor/parttext.h 2010-07-25 15:29:58 UTC (rev 1090)
@@ -25,6 +25,8 @@
dessin d'un element dans l'editeur d'element.
*/
class PartText : public QGraphicsTextItem, public CustomElementPart {
+ Q_OBJECT
+
// constructeurs, destructeur
public:
PartText(QETElementEditor *, QGraphicsItem * = 0, ElementScene * = 0);
@@ -45,16 +47,15 @@
virtual QString xmlName() const { return(QString("text")); }
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 &);
virtual void setProperty(const QString &, const QVariant &);
virtual QVariant property(const QString &);
virtual bool isUseless() const;
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget * = 0 );
public slots:
- void adjustItemPosition(int);
+ void adjustItemPosition(int = 0);
protected:
virtual void focusOutEvent(QFocusEvent *);
@@ -68,6 +69,5 @@
void drawPoint(QPainter *, const QPointF &);
#endif
QString previous_text;
- QPointF known_position_;
};
#endif
Modified: branches/0.3/sources/editor/texteditor.cpp
===================================================================
--- branches/0.3/sources/editor/texteditor.cpp 2010-07-25 14:43:06 UTC (rev 1089)
+++ branches/0.3/sources/editor/texteditor.cpp 2010-07-25 15:29:58 UTC (rev 1090)
@@ -17,6 +17,8 @@
*/
#include "texteditor.h"
#include "parttext.h"
+#include "qetapp.h"
+#include "qtextorientationspinboxwidget.h"
/**
Constructeur
@@ -33,6 +35,9 @@
qle_text = new QLineEdit();
font_size = new QSpinBox();
font_size -> setRange(0, 144);
+ QLabel *rotation_angle_label = new QLabel(tr("Angle de rotation : "));
+ rotation_angle_label -> setWordWrap(true);
+ rotation_angle_ = QETApp::createTextOrientationSpinBoxWidget();
qle_x -> setValidator(new QDoubleValidator(qle_x));
qle_y -> setValidator(new QDoubleValidator(qle_y));
@@ -55,7 +60,13 @@
QHBoxLayout *t = new QHBoxLayout();
t -> addWidget(new QLabel(tr("Texte : ")));
t -> addWidget(qle_text);
+
+ QHBoxLayout *rotation_angle_layout = new QHBoxLayout();
+ rotation_angle_layout -> addWidget(rotation_angle_label);
+ rotation_angle_layout -> addWidget(rotation_angle_);
+
main_layout -> addLayout(t);
+ main_layout -> addLayout(rotation_angle_layout);
main_layout -> addStretch();
setLayout(main_layout);
@@ -115,6 +126,8 @@
void TextEditor::updateTextT() { addChangePartCommand(tr("contenu"), part, "text", qle_text -> text()); }
/// Met a jour la taille du texte et cree un objet d'annulation
void TextEditor::updateTextS() { addChangePartCommand(tr("taille"), part, "size", font_size -> value()); }
+/// Met a jour l'angle de rotation du champ de texte et cree un objet d'annulation
+void TextEditor::updateTextRotationAngle() { addChangePartCommand(tr("angle de rotation"), part, "rotation angle", rotation_angle_ -> value()); }
/**
Met a jour le formulaire a partir du champ de texte
@@ -126,6 +139,7 @@
qle_y -> setText(part -> property("y").toString());
qle_text -> setText(part -> property("text").toString());
font_size -> setValue(part -> property("size").toInt());
+ rotation_angle_ -> setValue(part -> property("rotation angle").toDouble());
activeConnections(true);
}
@@ -135,10 +149,12 @@
connect(qle_y, SIGNAL(editingFinished()), this, SLOT(updateTextY()));
connect(qle_text, SIGNAL(editingFinished()), this, SLOT(updateTextT()));
connect(font_size, SIGNAL(editingFinished()), this, SLOT(updateTextS()));
+ connect(rotation_angle_, SIGNAL(editingFinished()), this, SLOT(updateTextRotationAngle()));
} else {
disconnect(qle_x, SIGNAL(editingFinished()), this, SLOT(updateTextX()));
disconnect(qle_y, SIGNAL(editingFinished()), this, SLOT(updateTextY()));
disconnect(qle_text, SIGNAL(editingFinished()), this, SLOT(updateTextT()));
disconnect(font_size, SIGNAL(editingFinished()), this, SLOT(updateTextS()));
+ disconnect(rotation_angle_, SIGNAL(editingFinished()), this, SLOT(updateTextRotationAngle()));
}
}
Modified: branches/0.3/sources/editor/texteditor.h
===================================================================
--- branches/0.3/sources/editor/texteditor.h 2010-07-25 14:43:06 UTC (rev 1089)
+++ branches/0.3/sources/editor/texteditor.h 2010-07-25 15:29:58 UTC (rev 1090)
@@ -20,6 +20,7 @@
#include <QtGui>
#include "elementitemeditor.h"
class PartText;
+class QTextOrientationSpinBoxWidget;
/**
Cette classe represente un editeur de champ de texte non editable
Elle permet d'editer a travers une interface graphique les
@@ -39,6 +40,7 @@
PartText *part;
QLineEdit *qle_x, *qle_y, *qle_text;
QSpinBox *font_size;
+ QTextOrientationSpinBoxWidget *rotation_angle_;
// methodes
public:
@@ -51,6 +53,7 @@
void updateTextY();
void updateTextT();
void updateTextS();
+ void updateTextRotationAngle();
void updateForm();
private:
Modified: branches/0.3/sources/elementtextitem.cpp
===================================================================
--- branches/0.3/sources/elementtextitem.cpp 2010-07-25 14:43:06 UTC (rev 1089)
+++ branches/0.3/sources/elementtextitem.cpp 2010-07-25 15:29:58 UTC (rev 1090)
@@ -184,9 +184,9 @@
/**
Cette methode s'assure que la position de l'ElementTextItem est coherente
en ajustant :
- * la transformation de base qui permet de considerer que l'origine
+ * la transformation de base qui permet de considerer que l'origine
correspond au milieu du bord gauche du champ de texte
- * l'origine utilisee lors des appels a setRotation et setScale
+ * l'origine utilisee lors des appels a setRotation et setScale
@param new_block_count Nombre de blocs dans l'ElementTextItem
*/
void ElementTextItem::adjustItemPosition(int new_block_count) {