diff --git a/sources/editor/graphicspart/partdynamictextfield.cpp b/sources/editor/graphicspart/partdynamictextfield.cpp index cac068fe4..25a17cad9 100644 --- a/sources/editor/graphicspart/partdynamictextfield.cpp +++ b/sources/editor/graphicspart/partdynamictextfield.cpp @@ -105,6 +105,7 @@ const QDomElement PartDynamicTextField::toXml(QDomDocument &dom_doc) const root_element.setAttribute("uuid", m_uuid.toString()); root_element.setAttribute("frame", m_frame? "true" : "false"); root_element.setAttribute("text_width", QString::number(m_text_width)); + root_element.setAttribute("keep_visual_rotation", m_keep_visual_rotation ? "true" : "false"); QMetaEnum me = DynamicElementTextItem::textFromMetaEnum(); root_element.setAttribute("text_from", me.valueToKey(m_text_from)); @@ -168,6 +169,7 @@ void PartDynamicTextField::fromXml(const QDomElement &dom_elmt) { ); setZValue(dom_elmt.attribute("z", QString::number(zValue())).toDouble()); QGraphicsTextItem::setRotation(dom_elmt.attribute("rotation", QString::number(0)).toDouble()); + setKeepVisualRotation(dom_elmt.attribute("keep_visual_rotation", "true") == "true"? true : false); if (dom_elmt.hasAttribute("font")) { QFont font_; @@ -430,6 +432,20 @@ void PartDynamicTextField::setFont(const QFont &font) { emit fontChanged(font); } +void PartDynamicTextField::setKeepVisualRotation(const bool &keep) +{ + if (keep == this->m_keep_visual_rotation) { + return; + } + + m_keep_visual_rotation = keep; + emit keepVisualRotationChanged(keep); +} + +bool PartDynamicTextField::keepVisualRotation() const { + return m_keep_visual_rotation; +} + /** @brief PartDynamicTextField::mouseMoveEvent @param event diff --git a/sources/editor/graphicspart/partdynamictextfield.h b/sources/editor/graphicspart/partdynamictextfield.h index 9fd02f594..45997ef32 100644 --- a/sources/editor/graphicspart/partdynamictextfield.h +++ b/sources/editor/graphicspart/partdynamictextfield.h @@ -43,6 +43,7 @@ class PartDynamicTextField : public QGraphicsTextItem, public CustomElementPart Q_PROPERTY(qreal textWidth READ textWidth WRITE setTextWidth NOTIFY textWidthChanged) Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment NOTIFY alignmentChanged) Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged) + Q_PROPERTY(bool keepVisualRotation READ keepVisualRotation WRITE setKeepVisualRotation NOTIFY keepVisualRotationChanged) public: ///PROPERTY @@ -60,6 +61,7 @@ class PartDynamicTextField : public QGraphicsTextItem, public CustomElementPart void textWidthChanged(qreal width); void alignmentChanged(Qt::Alignment alignment); void fontChanged(QFont font); + void keepVisualRotationChanged(bool keep); public: PartDynamicTextField(QETElementEditor *editor, QGraphicsItem *parent = nullptr); @@ -96,6 +98,8 @@ class PartDynamicTextField : public QGraphicsTextItem, public CustomElementPart void setAlignment(Qt::Alignment alignment); Qt::Alignment alignment() const; void setFont(const QFont &font); + void setKeepVisualRotation(const bool &keep); + bool keepVisualRotation() const; protected: void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; @@ -119,7 +123,8 @@ class PartDynamicTextField : public QGraphicsTextItem, public CustomElementPart QUuid m_uuid; bool m_frame = false, m_first_add = true, - m_block_alignment = false; + m_block_alignment = false, + m_keep_visual_rotation = false; qreal m_text_width = -1; Qt::Alignment m_alignment = Qt::AlignTop|Qt::AlignLeft; QRectF m_alignment_rect; diff --git a/sources/editor/ui/dynamictextfieldeditor.cpp b/sources/editor/ui/dynamictextfieldeditor.cpp index e9135d52e..213253622 100644 --- a/sources/editor/ui/dynamictextfieldeditor.cpp +++ b/sources/editor/ui/dynamictextfieldeditor.cpp @@ -139,6 +139,7 @@ void DynamicTextFieldEditor::updateForm() ui -> m_frame_cb -> setChecked(m_text_field.data() -> frame()); ui -> m_user_text_le -> setText(m_text_field.data() -> text()); ui -> m_size_sb -> setValue(m_text_field.data() -> font().pointSize()); + ui->m_keep_visual_rotation_cb->setChecked(m_text_field.data()->keepVisualRotation()); #ifdef BUILD_WITHOUT_KF5 #else m_color_kpb -> setColor(m_text_field.data() -> color()); @@ -176,7 +177,7 @@ void DynamicTextFieldEditor::setupWidget() connect(m_color_kpb, &KColorButton::changed, this, &DynamicTextFieldEditor::on_m_color_kpb_changed); - ui->m_main_grid_layout->addWidget(m_color_kpb, 7, 1, 1, 2); + ui->m_main_grid_layout->addWidget(m_color_kpb, 6, 1, 1, 2); #endif } @@ -204,6 +205,8 @@ void DynamicTextFieldEditor::setUpConnections() [this](){this -> updateForm();}); m_connection_list << connect(m_text_field.data(), &PartDynamicTextField::compositeTextChanged, [this](){this -> updateForm();}); + m_connection_list << connect(m_text_field.data(), &PartDynamicTextField::keepVisualRotationChanged, + [this](){this -> updateForm();}); } void DynamicTextFieldEditor::disconnectConnections() @@ -434,3 +437,16 @@ void DynamicTextFieldEditor::on_m_color_kpb_changed(const QColor &newColor) { } } } + +void DynamicTextFieldEditor::on_m_keep_visual_rotation_cb_clicked() +{ + bool keep = ui -> m_keep_visual_rotation_cb -> isChecked(); + + for (int i = 0; i < m_parts.length(); i++) { + if(keep != m_parts[i] -> keepVisualRotation()) { + QPropertyUndoCommand *undo = new QPropertyUndoCommand(m_parts[i], "keepVisualRotation", m_parts[i] -> frame(), keep); + undo -> setText(tr("Modifier la conservation de l'angle")); + undoStack().push(undo); + } + } +} diff --git a/sources/editor/ui/dynamictextfieldeditor.h b/sources/editor/ui/dynamictextfieldeditor.h index e84c20228..6a7229ca5 100644 --- a/sources/editor/ui/dynamictextfieldeditor.h +++ b/sources/editor/ui/dynamictextfieldeditor.h @@ -69,6 +69,8 @@ class DynamicTextFieldEditor : public ElementItemEditor { void on_m_color_kpb_changed(const QColor &newColor); + void on_m_keep_visual_rotation_cb_clicked(); + private: Ui::DynamicTextFieldEditor *ui; QPointer m_text_field; diff --git a/sources/editor/ui/dynamictextfieldeditor.ui b/sources/editor/ui/dynamictextfieldeditor.ui index 4e8cfbab7..c2aa0978f 100644 --- a/sources/editor/ui/dynamictextfieldeditor.ui +++ b/sources/editor/ui/dynamictextfieldeditor.ui @@ -6,15 +6,132 @@ 0 0 - 344 - 285 + 354 + 459 Form - + + + + + + + + + + + -5000.000000000000000 + + + 5000.000000000000000 + + + + + + + + + + Rotation + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Texte composé + + + + + + + Y + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + -1 + + + 500 + + + + + + + Qt::Horizontal + + + + + + + -5000.000000000000000 + + + 5000.000000000000000 + + + + + + + + + + Police + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Conserver la rotation visuel + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + 359 + + + + @@ -33,181 +150,84 @@ - - + + - Couleur + Alignement - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - + + - Texte composé + Largeur + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + X + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - + - Police + Couleur + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - + Source du texte + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + - - + + - Qt::Vertical + Qt::Horizontal - - - 20 - 40 - - - - - - - - QFrame::NoFrame - - - QFrame::Raised - - - - - - -5000.000000000000000 - - - 5000.000000000000000 - - - - - - - cadre - - - - - - - 359 - - - - - - - Rotation - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - X - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - -1 - - - 500 - - - - - - - Largeur - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Y - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - -5000.000000000000000 - - - 5000.000000000000000 - - - - - - - Alignement - - - - - - - - - + + - + Encadrer le texte + + m_x_sb + m_y_sb + m_rotation_sb + m_keep_visual_rotation_cb + m_width_sb + m_alignment_pb + m_size_sb + m_font_pb + m_frame_cb + m_text_from_cb + m_user_text_le + m_elmt_info_cb + m_composite_text_pb +