[qet] [798] Il est desormais possible de pivoter les textes independants et les textes des conducteurs . |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
Revision: 798
Author: xavier
Date: 2009-11-29 22:56:48 +0100 (Sun, 29 Nov 2009)
Log Message:
-----------
Il est desormais possible de pivoter les textes independants et les textes des conducteurs.
Modified Paths:
--------------
branches/0.3/sources/conductor.cpp
branches/0.3/sources/diagram.cpp
branches/0.3/sources/diagramcommands.cpp
branches/0.3/sources/diagramcommands.h
branches/0.3/sources/diagramtextitem.cpp
branches/0.3/sources/diagramtextitem.h
branches/0.3/sources/diagramview.cpp
Modified: branches/0.3/sources/conductor.cpp
===================================================================
--- branches/0.3/sources/conductor.cpp 2009-11-24 16:34:45 UTC (rev 797)
+++ branches/0.3/sources/conductor.cpp 2009-11-29 21:56:48 UTC (rev 798)
@@ -874,6 +874,7 @@
// recupere la "configuration" du conducteur
properties_.fromXml(e);
readProperties();
+ text_item -> setRotationAngle(e.attribute("rotation").toDouble());
// parcourt les elements XML "segment" et en extrait deux listes de longueurs
// les segments non valides sont ignores
@@ -968,6 +969,9 @@
// exporte la "configuration" du conducteur
properties_.toXml(e);
+ if (text_item -> rotationAngle()) {
+ e.setAttribute("rotation", QString("%1").arg(text_item -> rotationAngle()));
+ }
return(e);
}
Modified: branches/0.3/sources/diagram.cpp
===================================================================
--- branches/0.3/sources/diagram.cpp 2009-11-24 16:34:45 UTC (rev 797)
+++ branches/0.3/sources/diagram.cpp 2009-11-29 21:56:48 UTC (rev 798)
@@ -1070,7 +1070,9 @@
*/
bool Diagram::canRotateSelection() const {
foreach(QGraphicsItem * qgi, selectedItems()) {
- if (Element *e = qgraphicsitem_cast<Element *>(qgi)) {
+ if (/*DiagramTextItem *dti = */qgraphicsitem_cast<DiagramTextItem *>(qgi)) {
+ return(true);
+ } else if (Element *e = qgraphicsitem_cast<Element *>(qgi)) {
// l'element est-il pivotable ?
if (e -> orientation().current() != e -> orientation().next()) {
return(true);
Modified: branches/0.3/sources/diagramcommands.cpp
===================================================================
--- branches/0.3/sources/diagramcommands.cpp 2009-11-24 16:34:45 UTC (rev 797)
+++ branches/0.3/sources/diagramcommands.cpp 2009-11-29 21:56:48 UTC (rev 798)
@@ -407,9 +407,10 @@
@param elements Elements a pivoter associes a leur orientation d'origine
@param parent QUndoCommand parent
*/
-RotateElementsCommand::RotateElementsCommand(const QHash<Element *, QET::Orientation> &elements, QUndoCommand *parent) :
+RotateElementsCommand::RotateElementsCommand(const QHash<Element *, QET::Orientation> &elements, const QList<DiagramTextItem *> &texts, QUndoCommand *parent) :
QUndoCommand(parent),
- elements_to_rotate(elements)
+ elements_to_rotate(elements),
+ texts_to_rotate(texts)
{
setText(
QString(
@@ -417,7 +418,7 @@
"pivoter %1",
"undo caption - %1 is a sentence listing the rotated content"
)
- ).arg(QET::ElementsAndConductorsSentence(elements.count(), 0))
+ ).arg(QET::ElementsAndConductorsSentence(elements.count(), 0, texts.count()))
);
}
@@ -430,6 +431,9 @@
foreach(Element *e, elements_to_rotate.keys()) {
e -> setOrientation(elements_to_rotate[e]);
}
+ foreach(DiagramTextItem *dti, texts_to_rotate) {
+ dti -> rotateBy(90.0);
+ }
}
/// refait le pivotement
@@ -438,6 +442,9 @@
e -> setOrientation(e -> orientation().next());
e -> update();
}
+ foreach(DiagramTextItem *dti, texts_to_rotate) {
+ dti -> rotateBy(-90.0);
+ }
}
/**
Modified: branches/0.3/sources/diagramcommands.h
===================================================================
--- branches/0.3/sources/diagramcommands.h 2009-11-24 16:34:45 UTC (rev 797)
+++ branches/0.3/sources/diagramcommands.h 2009-11-29 21:56:48 UTC (rev 798)
@@ -232,7 +232,7 @@
class RotateElementsCommand : public QUndoCommand {
// constructeurs, destructeur
public:
- RotateElementsCommand(const QHash<Element *, QET::Orientation> &elements, QUndoCommand * = 0);
+ RotateElementsCommand(const QHash<Element *, QET::Orientation> &elements, const QList<DiagramTextItem *> &, QUndoCommand * = 0);
virtual ~RotateElementsCommand();
private:
RotateElementsCommand(const RotateElementsCommand &);
@@ -246,6 +246,8 @@
private:
/// elements pivotes associes a leur ancienne orientation
QHash<Element *, QET::Orientation> elements_to_rotate;
+ /// textes a pivoter
+ QList<DiagramTextItem *> texts_to_rotate;
};
/**
Modified: branches/0.3/sources/diagramtextitem.cpp
===================================================================
--- branches/0.3/sources/diagramtextitem.cpp 2009-11-24 16:34:45 UTC (rev 797)
+++ branches/0.3/sources/diagramtextitem.cpp 2009-11-29 21:56:48 UTC (rev 798)
@@ -25,7 +25,8 @@
@param scene La scene a laquelle appartient le champ de texte
*/
DiagramTextItem::DiagramTextItem(QGraphicsItem *parent, QGraphicsScene *scene) :
- QGraphicsTextItem(parent, scene)
+ QGraphicsTextItem(parent, scene),
+ rotation_angle_(0.0)
{
setDefaultTextColor(Qt::black);
setFont(QETApp::diagramTextsFont());
@@ -41,7 +42,8 @@
*/
DiagramTextItem::DiagramTextItem(const QString &text, QGraphicsItem *parent, QGraphicsScene *scene) :
QGraphicsTextItem(text, parent, scene),
- previous_text(text)
+ previous_text(text),
+ rotation_angle_(0.0)
{
setDefaultTextColor(Qt::black);
setFont(QETApp::diagramTextsFont());
@@ -59,6 +61,42 @@
}
/**
+ @return l'angle de rotation actuel de ce texte
+*/
+qreal DiagramTextItem::rotationAngle() const {
+ return(rotation_angle_);
+}
+
+/**
+ Permet de tourner le texte a un angle donne. La rotation s'effectue par
+ rapport au point (0, 0) du texte.
+ @param rotation Nouvel angle de rotation de ce texte
+*/
+void DiagramTextItem::setRotationAngle(const qreal &rotation) {
+ // ramene l'angle demande entre -360.0 et +360.0 degres
+ qreal applied_rotation = rotation;
+ while (applied_rotation < -360.0) applied_rotation += 360.0;
+ while (applied_rotation > 360.0) applied_rotation -= 360.0;
+
+ rotate(applied_rotation - rotation_angle_);
+ rotation_angle_ = applied_rotation;
+}
+
+/**
+ Ajoute
+ @param added_rotation Angle a ajouter a la rotation actuelle
+*/
+void DiagramTextItem::rotateBy(const qreal &added_rotation) {
+ // ramene l'angle demande entre -360.0 et +360.0 degres
+ qreal applied_added_rotation = added_rotation;
+ while (applied_added_rotation < 360.0) applied_added_rotation += 360.0;
+ while (applied_added_rotation > 360.0) applied_added_rotation -= 360.0;
+
+ rotation_angle_ += applied_added_rotation;
+ rotate(applied_added_rotation);
+}
+
+/**
gere la perte de focus du champ de texte
*/
void DiagramTextItem::focusOutEvent(QFocusEvent *e) {
@@ -91,6 +129,7 @@
setPos(e.attribute("x").toDouble(), e.attribute("y").toDouble());
setPlainText(e.attribute("text"));
previous_text = e.attribute("text");
+ setRotationAngle(e.attribute("rotation").toDouble());
}
/**
@@ -102,6 +141,9 @@
result.setAttribute("x", QString("%1").arg(pos().x()));
result.setAttribute("y", QString("%1").arg(pos().y()));
result.setAttribute("text", toPlainText());
+ if (rotation_angle_) {
+ result.setAttribute("rotation", QString("%1").arg(rotation_angle_));
+ }
return(result);
}
Modified: branches/0.3/sources/diagramtextitem.h
===================================================================
--- branches/0.3/sources/diagramtextitem.h 2009-11-24 16:34:45 UTC (rev 797)
+++ branches/0.3/sources/diagramtextitem.h 2009-11-29 21:56:48 UTC (rev 798)
@@ -48,6 +48,9 @@
virtual QDomElement toXml(QDomDocument &) const;
virtual void setPos(const QPointF &);
virtual void setPos(qreal, qreal);
+ qreal rotationAngle() const;
+ void setRotationAngle(const qreal &);
+ void rotateBy(const qreal &);
protected:
virtual void focusOutEvent(QFocusEvent *);
@@ -66,5 +69,10 @@
// slots
public slots:
void setNonFocusable();
+
+ // attributs prives
+ private:
+ /// angle de rotation du champ de texte
+ qreal rotation_angle_;
};
#endif
Modified: branches/0.3/sources/diagramview.cpp
===================================================================
--- branches/0.3/sources/diagramview.cpp 2009-11-24 16:34:45 UTC (rev 797)
+++ branches/0.3/sources/diagramview.cpp 2009-11-29 21:56:48 UTC (rev 798)
@@ -23,6 +23,7 @@
#include "diagramcommands.h"
#include "diagramposition.h"
#include "conductorpropertieswidget.h"
+#include "elementtextitem.h"
#include "insetpropertieswidget.h"
#include "qetapp.h"
#include "qetproject.h"
@@ -114,14 +115,22 @@
*/
void DiagramView::rotateSelection() {
if (scene -> isReadOnly()) return;
+
+ // recupere les elements et les champs de texte a pivoter
QHash<Element *, QET::Orientation> elements_to_rotate;
+ QList<DiagramTextItem *> texts_to_rotate;
foreach (QGraphicsItem *item, scene -> selectedItems()) {
if (Element *e = qgraphicsitem_cast<Element *>(item)) {
elements_to_rotate.insert(e, e -> orientation().current());
- }
+ } else if (DiagramTextItem *dti = qgraphicsitem_cast<DiagramTextItem *>(item)) {
+ texts_to_rotate << dti;
+ } /*else if (ElementTextItem *eti = qgraphicsitem_cast<ElementTextItem *>(item)) {
+ }*/
}
- if (elements_to_rotate.isEmpty()) return;
- scene -> undoStack().push(new RotateElementsCommand(elements_to_rotate));
+
+ // effectue les rotations s'il y a quelque chose a pivoter
+ if (elements_to_rotate.isEmpty() && texts_to_rotate.isEmpty()) return;
+ scene -> undoStack().push(new RotateElementsCommand(elements_to_rotate, texts_to_rotate));
}
/**