element-editor: add rotation-functions to "text" and "dynamic_text"

This commit is contained in:
plc-user
2025-02-16 15:42:33 +01:00
parent 2aeae1fe46
commit da109b1522
5 changed files with 48 additions and 5 deletions

View File

@@ -547,6 +547,14 @@ void RotateElementsCommand::undo()
PartPolygon* poly = qgraphicsitem_cast<PartPolygon*>(item); PartPolygon* poly = qgraphicsitem_cast<PartPolygon*>(item);
poly->setRotation(-90); poly->setRotation(-90);
} }
else if (item->type() == PartText::Type) {
PartText* text = qgraphicsitem_cast<PartText*>(item);
text->setRotation(-90);
}
else if (item->type() == PartDynamicTextField::Type) {
PartDynamicTextField* dyntext = qgraphicsitem_cast<PartDynamicTextField*>(item);
dyntext->setRotation(-90);
}
else { else {
item->setRotation(item->rotation()-90); item->setRotation(item->rotation()-90);
} }
@@ -584,6 +592,14 @@ void RotateElementsCommand::redo()
PartPolygon* poly = qgraphicsitem_cast<PartPolygon*>(item); PartPolygon* poly = qgraphicsitem_cast<PartPolygon*>(item);
poly->setRotation(+90); poly->setRotation(+90);
} }
else if (item->type() == PartText::Type) {
PartText* text = qgraphicsitem_cast<PartText*>(item);
text->setRotation(+90);
}
else if (item->type() == PartDynamicTextField::Type) {
PartDynamicTextField* dyntext = qgraphicsitem_cast<PartDynamicTextField*>(item);
dyntext->setRotation(+90);
}
else { else {
item->setRotation(item->rotation()+90); item->setRotation(item->rotation()+90);
} }

View File

@@ -33,7 +33,7 @@ PartDynamicTextField::PartDynamicTextField(QETElementEditor *editor, QGraphicsIt
setDefaultTextColor(Qt::black); setDefaultTextColor(Qt::black);
setFont(QETApp::dynamicTextsItemFont()); setFont(QETApp::dynamicTextsItemFont());
QSettings settings; QSettings settings;
setRotation(settings.value("diagrameditor/dynamic_text_rotation", 0).toInt()); QGraphicsObject::setRotation(QET::correctAngle(settings.value("diagrameditor/dynamic_text_rotation", 0).toInt()));
setTextWidth(settings.value("diagrameditor/dynamic_text_width", -1).toInt()); setTextWidth(settings.value("diagrameditor/dynamic_text_width", -1).toInt());
setText("_"); setText("_");
setTextFrom(DynamicElementTextItem::UserText); setTextFrom(DynamicElementTextItem::UserText);
@@ -60,6 +60,18 @@ QString PartDynamicTextField::xmlName() const
return QString("dynamic_text"); return QString("dynamic_text");
} }
/**
Redefines setRotation
@param angle
*/
void PartDynamicTextField::setRotation(qreal angle) {
QGraphicsObject::setRotation(QET::correctAngle(rotation()+angle, true));
setPos(QTransform().rotate(angle).map(pos()));
}
/** /**
@brief PartDynamicTextField::startUserTransformation @brief PartDynamicTextField::startUserTransformation
@param initial_selection_rect @param initial_selection_rect
@@ -172,7 +184,7 @@ void PartDynamicTextField::fromXml(const QDomElement &dom_elmt) {
dom_elmt.attribute("y", QString::number(0)).toDouble() dom_elmt.attribute("y", QString::number(0)).toDouble()
); );
setZValue(dom_elmt.attribute("z", QString::number(zValue())).toDouble()); setZValue(dom_elmt.attribute("z", QString::number(zValue())).toDouble());
QGraphicsTextItem::setRotation(dom_elmt.attribute("rotation", QString::number(0)).toDouble()); QGraphicsObject::setRotation(QET::correctAngle(dom_elmt.attribute("rotation", QString::number(0)).toDouble()));
setKeepVisualRotation(dom_elmt.attribute("keep_visual_rotation", "true") == "true"? true : false); setKeepVisualRotation(dom_elmt.attribute("keep_visual_rotation", "true") == "true"? true : false);
if (dom_elmt.hasAttribute("font")) { if (dom_elmt.hasAttribute("font")) {
@@ -255,7 +267,7 @@ void PartDynamicTextField::fromTextFieldXml(const QDomElement &dom_element)
setInfoName(dom_element.attribute("tagg", "label")); setInfoName(dom_element.attribute("tagg", "label"));
} }
QGraphicsTextItem::setRotation(dom_element.attribute("rotation", "0").toDouble()); QGraphicsObject::setRotation(QET::correctAngle(dom_element.attribute("rotation", "0").toDouble()));
//the origin transformation point of PartDynamicTextField is the top left corner, no matter the font size //the origin transformation point of PartDynamicTextField is the top left corner, no matter the font size
//The origin transformation point of PartTextField is the middle of left edge, and so by definition, change with the size of the font //The origin transformation point of PartTextField is the middle of left edge, and so by definition, change with the size of the font

View File

@@ -101,6 +101,9 @@ class PartDynamicTextField : public QGraphicsTextItem, public CustomElementPart
void setKeepVisualRotation(const bool &keep); void setKeepVisualRotation(const bool &keep);
bool keepVisualRotation() const; bool keepVisualRotation() const;
void setRotation(qreal angle);
protected: protected:
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
void mousePressEvent(QGraphicsSceneMouseEvent *event) override; void mousePressEvent(QGraphicsSceneMouseEvent *event) override;

View File

@@ -63,6 +63,15 @@ PartText::~PartText()
{ {
} }
/**
Redefines setRotation
@param angle
*/
void PartText::setRotation(qreal angle) {
QGraphicsObject::setRotation(QET::correctAngle(rotation()+angle, true));
setPos(QTransform().rotate(angle).map(pos()));
}
/** /**
Importe les proprietes d'un texte statique depuis un element XML Importe les proprietes d'un texte statique depuis un element XML
@param xml_element Element XML a lire @param xml_element Element XML a lire
@@ -89,7 +98,7 @@ void PartText::fromXml(const QDomElement &xml_element) {
setPlainText(xml_element.attribute("text")); setPlainText(xml_element.attribute("text"));
setPos(xml_element.attribute("x").toDouble(), setPos(xml_element.attribute("x").toDouble(),
xml_element.attribute("y").toDouble()); xml_element.attribute("y").toDouble());
setRotation(xml_element.attribute("rotation", QString::number(0)).toDouble()); QGraphicsObject::setRotation(QET::correctAngle(xml_element.attribute("rotation", QString::number(0)).toDouble()));
} }
/** /**
@@ -116,6 +125,7 @@ const QDomElement PartText::toXml(QDomDocument &xml_document) const
/** /**
@return Les coordonnees du point situe en bas a gauche du texte. @return Les coordonnees du point situe en bas a gauche du texte.
The coordinates of the point at the bottom left of the text.
*/ */
QPointF PartText::margin() const QPointF PartText::margin() const
{ {
@@ -124,8 +134,10 @@ QPointF PartText::margin() const
qreal document_margin = document() -> documentMargin(); qreal document_margin = document() -> documentMargin();
QPointF margin( QPointF margin(
// margin around the text
// marge autour du texte // marge autour du texte
document_margin, document_margin,
// margin above the text + distance between the top of the text and the baseline
// marge au-dessus du texte + distance entre le plafond du texte et la baseline // marge au-dessus du texte + distance entre le plafond du texte et la baseline
document_margin + qfm.ascent() document_margin + qfm.ascent()
); );

View File

@@ -61,7 +61,7 @@ class PartText : public QGraphicsTextItem, public CustomElementPart {
QString xmlName() const override { return(QString("text")); } QString xmlName() const override { return(QString("text")); }
void fromXml(const QDomElement &) override; void fromXml(const QDomElement &) override;
const QDomElement toXml(QDomDocument &) const override; const QDomElement toXml(QDomDocument &) const override;
void setRotation(qreal angle) {(QGraphicsObject::setRotation(QET::correctAngle(angle)));} void setRotation(qreal angle);
bool isUseless() const override; bool isUseless() const override;
QRectF sceneGeometricRect() const override; QRectF sceneGeometricRect() const override;
void startUserTransformation(const QRectF &) override; void startUserTransformation(const QRectF &) override;