23 #include <QGraphicsSceneMouseEvent> 28 QGraphicsTextItem(parent),
30 m_uuid(QUuid::createUuid())
32 setDefaultTextColor(Qt::black);
35 setRotation(settings.value(
"diagrameditor/dynamic_text_rotation", 0).toInt());
36 setTextWidth(settings.value(
"diagrameditor/dynamic_text_width", -1).toInt());
39 setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemSendsGeometryChanges | QGraphicsItem::ItemIsMovable);
43 QTextOption option = document()->defaultTextOption();
44 option.setAlignment(Qt::AlignHCenter);
45 option.setWrapMode(QTextOption::WordWrap);
46 document()->setDefaultTextOption(option);
51 return tr(
"Champ de texte dynamique",
"element part name");
56 return QString(
"dynamic_text");
67 Q_UNUSED(initial_selection_rect)
79 QPointF new_pos =
mapPoints(initial_selection_rect, new_selection_rect, QList<QPointF>() <<
m_saved_point).first();
90 QDomElement root_element = dom_doc.createElement(
xmlName());
92 root_element.setAttribute(
"x", QString::number(pos().x()));
93 root_element.setAttribute(
"y", QString::number(pos().y()));
94 root_element.setAttribute(
"z", QString::number(zValue()));
95 root_element.setAttribute(
"rotation", QString::number(
QET::correctAngle(rotation())));
96 root_element.setAttribute(
"font",
font().toString());
97 root_element.setAttribute(
"uuid",
m_uuid.toString());
98 root_element.setAttribute(
"frame",
m_frame?
"true" :
"false");
99 root_element.setAttribute(
"text_width", QString::number(
m_text_width));
103 root_element.setAttribute(
"text_from", me.valueToKey(
m_text_from));
105 me = QMetaEnum::fromType<Qt::Alignment>();
107 root_element.setAttribute(
"Halignment", me.valueToKey(Qt::AlignRight));
108 else if(this->
alignment() &Qt::AlignLeft)
109 root_element.setAttribute(
"Halignment", me.valueToKey(Qt::AlignLeft));
110 else if(this->
alignment() &Qt::AlignHCenter)
111 root_element.setAttribute(
"Halignment", me.valueToKey(Qt::AlignHCenter));
114 root_element.setAttribute(
"Valignment", me.valueToKey(Qt::AlignBottom));
115 else if(this->
alignment() & Qt::AlignTop)
116 root_element.setAttribute(
"Valignment", me.valueToKey(Qt::AlignTop));
117 else if(this->
alignment() &Qt::AlignVCenter)
118 root_element.setAttribute(
"Valignment", me.valueToKey(Qt::AlignVCenter));
120 QDomElement dom_text = dom_doc.createElement(
"text");
121 dom_text.appendChild(dom_doc.createTextNode(toPlainText()));
122 root_element.appendChild(dom_text);
127 QDomElement dom_info_name = dom_doc.createElement(
"info_name");
128 dom_info_name.appendChild(dom_doc.createTextNode(
m_info_name));
129 root_element.appendChild(dom_info_name);
135 QDomElement dom_comp_text = dom_doc.createElement(
"composite_text");
137 root_element.appendChild(dom_comp_text);
141 if(
color() != QColor(Qt::black))
143 QDomElement dom_color = dom_doc.createElement(
"color");
144 dom_color.appendChild(dom_doc.createTextNode(
color().
name()));
145 root_element.appendChild(dom_color);
157 if (dom_elmt.tagName() !=
xmlName()) {
158 qDebug() <<
"PartDynamicTextField::fromXml : Wrong tagg name";
162 QGraphicsTextItem::setPos(dom_elmt.attribute(
"x", QString::number(0)).toDouble(),
163 dom_elmt.attribute(
"y", QString::number(0)).toDouble());
164 setZValue(dom_elmt.attribute(
"z", QString::number(zValue())).toDouble());
165 QGraphicsTextItem::setRotation(dom_elmt.attribute(
"rotation", QString::number(0)).toDouble());
167 if (dom_elmt.hasAttribute(
"font"))
170 font_.fromString(dom_elmt.attribute(
"font"));
176 m_uuid = QUuid(dom_elmt.attribute(
"uuid", QUuid::createUuid().toString()));
177 setFrame(dom_elmt.attribute(
"frame",
"false") ==
"true"? true :
false);
178 setTextWidth(dom_elmt.attribute(
"text_width", QString::number(-1)).toDouble());
183 me = QMetaEnum::fromType<Qt::Alignment>();
184 if(dom_elmt.hasAttribute(
"Halignment"))
185 setAlignment(Qt::Alignment(me.keyToValue(dom_elmt.attribute(
"Halignment").toStdString().data())));
186 if(dom_elmt.hasAttribute((
"Valignment")))
187 setAlignment(Qt::Alignment(me.keyToValue(dom_elmt.attribute(
"Valignment").toStdString().data())) | this->
alignment());
190 QDomElement dom_text = dom_elmt.firstChildElement(
"text");
191 if (!dom_text.isNull())
200 QDomElement dom_info_name = dom_elmt.firstChildElement(
"info_name");
201 if(!dom_info_name.isNull())
205 QDomElement dom_comp_text = dom_elmt.firstChildElement(
"composite_text");
206 if(!dom_comp_text.isNull())
210 QDomElement dom_color = dom_elmt.firstChildElement(
"color");
211 if(!dom_color.isNull())
222 if(dom_element.tagName() !=
"input")
227 if(dom_element.attribute(
"tagg",
"none") ==
"none")
230 setText(dom_element.attribute(
"text",
"_"));
235 setInfoName(dom_element.attribute(
"tagg",
"label"));
238 QGraphicsTextItem::setRotation(dom_element.attribute(
"rotation",
"0").toDouble());
243 QTransform transform;
245 transform.rotate(dom_element.attribute(
"rotation",
"0").toDouble());
246 QPointF pos = transform.map(QPointF(0, -boundingRect().height()/2));
249 transform.translate(dom_element.attribute(
"x", QString::number(0)).toDouble(),
250 dom_element.attribute(
"y", QString::number(0)).toDouble());
251 QGraphicsTextItem::setPos(transform.map(pos));
350 setDefaultTextColor(
color);
359 return defaultTextColor();
376 this->document()->setTextWidth(width);
379 if(width > 0 && document()->size().width() > width)
380 document()->setTextWidth(document()->idealWidth());
388 if(toPlainText() ==
text)
392 QGraphicsTextItem::setPlainText(
text);
402 document()->setTextWidth(document()->idealWidth());
425 QGraphicsTextItem::setFont(
font);
436 if((event->buttons() & Qt::LeftButton) && (flags() & QGraphicsItem::ItemIsMovable))
438 QPointF pos =
event->scenePos() + (
m_origine_pos -
event->buttonDownScenePos(Qt::LeftButton));
439 event->modifiers() == Qt::ControlModifier ? setPos(pos) : setPos(
elementScene()->snapToGrid(pos));
442 QGraphicsObject::mouseMoveEvent(event);
451 if(event->button() == Qt::LeftButton)
454 QGraphicsObject::mousePressEvent(event);
463 if((event->button() & Qt::LeftButton) && (flags() & QGraphicsItem::ItemIsMovable) &&
m_origine_pos != pos())
466 undo->setText(
tr(
"Déplacer un champ texte"));
471 QGraphicsObject::mouseReleaseEvent(event);
482 if (change == QGraphicsItem::ItemPositionHasChanged || change == QGraphicsItem::ItemSceneHasChanged)
485 if(change == QGraphicsItem::ItemSceneHasChanged &&
493 else if ((change == QGraphicsItem::ItemSelectedHasChanged) && (value.toBool() ==
true))
496 return(QGraphicsTextItem::itemChange(change, value));
501 QGraphicsTextItem::paint(painter, option, widget);
506 painter->setFont(this->
font());
510 if(this->
font().pointSize() >= 5)
512 w = this->
font().pointSizeF()*0.1;
518 pen.setColor(
color());
520 painter->setPen(pen);
521 painter->setRenderHint(QPainter::Antialiasing);
524 QSizeF size = document()->size();
525 size.setWidth(document()->idealWidth());
527 size.rheight() -= document()->documentMargin()*2;
528 size.rwidth() -= document()->documentMargin()*2;
534 QPointF pos = boundingRect().center();
535 pos.rx() -= size.width()/2;
536 pos.ry() -= size.height()/2;
539 qreal
ro = this->
font().pointSizeF()/3;
540 painter->drawRoundedRect(QRectF(pos, size),
ro,
ro);
571 QTransform transform;
572 transform.rotate(this->rotation());
580 xa = boundingRect().right();
585 xa = boundingRect().center().x();
591 ya = boundingRect().bottom();
596 ya = boundingRect().center().y();
599 QPointF p = transform.map(QPointF(x,y));
600 QPointF pa = transform.map(QPointF(xa,ya));
603 setPos(this->pos() - diff);
The QPropertyUndoCommand class This undo command manage QProperty of a QObject. This undo command can...
void setInfoName(const QString &info_name)
QVariant itemChange(GraphicsItemChange change, const QVariant &value) override
PartDynamicTextField::itemChange.
void elementInfoChanged()
void setFont(const QFont &font)
DynamicElementTextItem::TextFrom textFrom() const
void setTextWidth(qreal width)
void handleUserTransformation(const QRectF &initial_selection_rect, const QRectF &new_selection_rect) override
PartDynamicTextField::handleUserTransformation.
void compositeTextChanged(QString text)
void colorChanged(QColor color)
void setColor(const QColor &color)
PartDynamicTextField::setColor.
Qt::Alignment alignment() const
QString xmlName() const override
void textChanged(QString text)
void fromTextFieldXml(const QDomElement &dom_element)
PartDynamicTextField::fromTextFieldXml Setup this text from the xml definition of a text field (The x...
void setAlignment(Qt::Alignment alignment)
void setTextFrom(DynamicElementTextItem::TextFrom text_from)
PartDynamicTextField::setTextFrom Set the final text is created from.
void enableAnimation(bool animate=true)
QPropertyUndoCommand::enableAnimation True to enable animation.
void setText(const QString &text)
PartDynamicTextField::setText Set the text of this text.
void mousePressEvent(QGraphicsSceneMouseEvent *event) override
PartDynamicTextField::mousePressEvent.
QList< QPointF > mapPoints(const QRectF &, const QRectF &, const QList< QPointF > &)
void fontChanged(QFont font)
qreal correctAngle(const qreal &)
void fromXml(const QDomElement &dom_elmt) override
PartDynamicTextField::fromXml.
static QMetaEnum textFromMetaEnum()
DynamicElementTextItem::textFromMetaEnum.
void setCompositeText(const QString &text)
PartDynamicTextField::setCompositeText Set the composite text of this text item to ...
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
void alignmentChanged(Qt::Alignment alignment)
void textWidthChanged(qreal width)
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
PartDynamicTextField::mouseMoveEvent.
static QFont dynamicTextsItemFont(qreal=-1.0)
QETApp::dynamicTextsFont the defaukt font of dynamic element text item.
DynamicElementTextItem::TextFrom m_text_from
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
PartDynamicTextField::mouseReleaseEvent.
void textFromChanged(DynamicElementTextItem::TextFrom text_from)
virtual void updateCurrentPartEditor() const
void setPlainText(const QString &text)
void infoNameChanged(QString info)
void elementInfoChanged()
PartDynamicTextField::elementInfoChanged Used to up to date this text field, when the element informa...
PartDynamicTextField(QETElementEditor *editor, QGraphicsItem *parent=nullptr)
static QFont diagramTextsFont(qreal=-1.0)
QETApp::diagramTextsFont The font to use By default the font is "sans Serif" and size 9...
virtual ElementScene * elementScene() const
QString compositeText() const
void frameChanged(bool frame)
void startUserTransformation(const QRectF &initial_selection_rect) override
PartDynamicTextField::startUserTransformation.
QString name() const override
Qt::Alignment m_alignment
const QDomElement toXml(QDomDocument &dom_doc) const override
PartDynamicTextField::toXml.
void setFrame(bool frame)
static QString replaceVariable(const QString &formula, const DiagramContext &dc)
AssignVariables::replaceVariable Replace the variables in in form %{my-var} to the corresponding val...