Element editor: make element text option "keep visual rotation" editable.

This commit is contained in:
joshua
2021-05-08 22:14:15 +02:00
parent 222c86f550
commit 74dcf96e4b
5 changed files with 210 additions and 151 deletions

View File

@@ -105,6 +105,7 @@ const QDomElement PartDynamicTextField::toXml(QDomDocument &dom_doc) const
root_element.setAttribute("uuid", m_uuid.toString()); root_element.setAttribute("uuid", m_uuid.toString());
root_element.setAttribute("frame", m_frame? "true" : "false"); root_element.setAttribute("frame", m_frame? "true" : "false");
root_element.setAttribute("text_width", QString::number(m_text_width)); 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(); QMetaEnum me = DynamicElementTextItem::textFromMetaEnum();
root_element.setAttribute("text_from", me.valueToKey(m_text_from)); 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()); setZValue(dom_elmt.attribute("z", QString::number(zValue())).toDouble());
QGraphicsTextItem::setRotation(dom_elmt.attribute("rotation", QString::number(0)).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")) { if (dom_elmt.hasAttribute("font")) {
QFont font_; QFont font_;
@@ -430,6 +432,20 @@ void PartDynamicTextField::setFont(const QFont &font) {
emit fontChanged(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 @brief PartDynamicTextField::mouseMoveEvent
@param event @param event

View File

@@ -43,6 +43,7 @@ class PartDynamicTextField : public QGraphicsTextItem, public CustomElementPart
Q_PROPERTY(qreal textWidth READ textWidth WRITE setTextWidth NOTIFY textWidthChanged) Q_PROPERTY(qreal textWidth READ textWidth WRITE setTextWidth NOTIFY textWidthChanged)
Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment NOTIFY alignmentChanged) Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment NOTIFY alignmentChanged)
Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged) Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
Q_PROPERTY(bool keepVisualRotation READ keepVisualRotation WRITE setKeepVisualRotation NOTIFY keepVisualRotationChanged)
public: public:
///PROPERTY ///PROPERTY
@@ -60,6 +61,7 @@ class PartDynamicTextField : public QGraphicsTextItem, public CustomElementPart
void textWidthChanged(qreal width); void textWidthChanged(qreal width);
void alignmentChanged(Qt::Alignment alignment); void alignmentChanged(Qt::Alignment alignment);
void fontChanged(QFont font); void fontChanged(QFont font);
void keepVisualRotationChanged(bool keep);
public: public:
PartDynamicTextField(QETElementEditor *editor, QGraphicsItem *parent = nullptr); PartDynamicTextField(QETElementEditor *editor, QGraphicsItem *parent = nullptr);
@@ -96,6 +98,8 @@ class PartDynamicTextField : public QGraphicsTextItem, public CustomElementPart
void setAlignment(Qt::Alignment alignment); void setAlignment(Qt::Alignment alignment);
Qt::Alignment alignment() const; Qt::Alignment alignment() const;
void setFont(const QFont &font); void setFont(const QFont &font);
void setKeepVisualRotation(const bool &keep);
bool keepVisualRotation() const;
protected: protected:
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
@@ -119,7 +123,8 @@ class PartDynamicTextField : public QGraphicsTextItem, public CustomElementPart
QUuid m_uuid; QUuid m_uuid;
bool m_frame = false, bool m_frame = false,
m_first_add = true, m_first_add = true,
m_block_alignment = false; m_block_alignment = false,
m_keep_visual_rotation = false;
qreal m_text_width = -1; qreal m_text_width = -1;
Qt::Alignment m_alignment = Qt::AlignTop|Qt::AlignLeft; Qt::Alignment m_alignment = Qt::AlignTop|Qt::AlignLeft;
QRectF m_alignment_rect; QRectF m_alignment_rect;

View File

@@ -139,6 +139,7 @@ void DynamicTextFieldEditor::updateForm()
ui -> m_frame_cb -> setChecked(m_text_field.data() -> frame()); ui -> m_frame_cb -> setChecked(m_text_field.data() -> frame());
ui -> m_user_text_le -> setText(m_text_field.data() -> text()); ui -> m_user_text_le -> setText(m_text_field.data() -> text());
ui -> m_size_sb -> setValue(m_text_field.data() -> font().pointSize()); 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 #ifdef BUILD_WITHOUT_KF5
#else #else
m_color_kpb -> setColor(m_text_field.data() -> color()); m_color_kpb -> setColor(m_text_field.data() -> color());
@@ -176,7 +177,7 @@ void DynamicTextFieldEditor::setupWidget()
connect(m_color_kpb, &KColorButton::changed, connect(m_color_kpb, &KColorButton::changed,
this, &DynamicTextFieldEditor::on_m_color_kpb_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 #endif
} }
@@ -204,6 +205,8 @@ void DynamicTextFieldEditor::setUpConnections()
[this](){this -> updateForm();}); [this](){this -> updateForm();});
m_connection_list << connect(m_text_field.data(), &PartDynamicTextField::compositeTextChanged, m_connection_list << connect(m_text_field.data(), &PartDynamicTextField::compositeTextChanged,
[this](){this -> updateForm();}); [this](){this -> updateForm();});
m_connection_list << connect(m_text_field.data(), &PartDynamicTextField::keepVisualRotationChanged,
[this](){this -> updateForm();});
} }
void DynamicTextFieldEditor::disconnectConnections() 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);
}
}
}

View File

@@ -69,6 +69,8 @@ class DynamicTextFieldEditor : public ElementItemEditor {
void on_m_color_kpb_changed(const QColor &newColor); void on_m_color_kpb_changed(const QColor &newColor);
void on_m_keep_visual_rotation_cb_clicked();
private: private:
Ui::DynamicTextFieldEditor *ui; Ui::DynamicTextFieldEditor *ui;
QPointer<PartDynamicTextField> m_text_field; QPointer<PartDynamicTextField> m_text_field;

View File

@@ -6,15 +6,132 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>344</width> <width>354</width>
<height>285</height> <height>459</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string>Form</string>
</property> </property>
<layout class="QGridLayout" name="m_main_grid_layout"> <layout class="QGridLayout" name="m_main_grid_layout">
<item row="2" column="1" colspan="2"> <item row="5" column="2">
<widget class="QPushButton" name="m_font_pb">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<widget class="QDoubleSpinBox" name="m_y_sb">
<property name="minimum">
<double>-5000.000000000000000</double>
</property>
<property name="maximum">
<double>5000.000000000000000</double>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QSpinBox" name="m_size_sb"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Rotation</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="12" column="1" colspan="2">
<widget class="QPushButton" name="m_composite_text_pb">
<property name="text">
<string>Texte composé</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Y</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="10" column="1" colspan="2">
<widget class="QLineEdit" name="m_user_text_le"/>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="m_width_sb">
<property name="minimum">
<number>-1</number>
</property>
<property name="maximum">
<number>500</number>
</property>
</widget>
</item>
<item row="8" column="0" colspan="3">
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
<widget class="QDoubleSpinBox" name="m_x_sb">
<property name="minimum">
<double>-5000.000000000000000</double>
</property>
<property name="maximum">
<double>5000.000000000000000</double>
</property>
</widget>
</item>
<item row="11" column="1" colspan="2">
<widget class="QComboBox" name="m_elmt_info_cb"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Police</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QCheckBox" name="m_keep_visual_rotation_cb">
<property name="text">
<string>Conserver la rotation visuel</string>
</property>
</widget>
</item>
<item row="13" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="m_rotation_sb">
<property name="maximum">
<number>359</number>
</property>
</widget>
</item>
<item row="9" column="1" colspan="2">
<widget class="QComboBox" name="m_text_from_cb"> <widget class="QComboBox" name="m_text_from_cb">
<item> <item>
<property name="text"> <property name="text">
@@ -33,181 +150,84 @@
</item> </item>
</widget> </widget>
</item> </item>
<item row="7" column="0"> <item row="3" column="2">
<widget class="QLabel" name="label_3"> <widget class="QPushButton" name="m_alignment_pb">
<property name="text"> <property name="text">
<string>Couleur</string> <string>Alignement</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="1"> <item row="3" column="0">
<spacer name="verticalSpacer"> <widget class="QLabel" name="label_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="4" column="1" colspan="2">
<widget class="QComboBox" name="m_elmt_info_cb"/>
</item>
<item row="3" column="1" colspan="2">
<widget class="QLineEdit" name="m_user_text_le"/>
</item>
<item row="5" column="1" colspan="2">
<widget class="QPushButton" name="m_composite_text_pb">
<property name="text"> <property name="text">
<string>Texte composé</string> <string>Largeur</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>X</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="0"> <item row="6" column="0">
<widget class="QLabel" name="label"> <widget class="QLabel" name="label_3">
<property name="text"> <property name="text">
<string>Police</string> <string>Couleur</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="9" column="0">
<widget class="QLabel" name="label_4"> <widget class="QLabel" name="label_4">
<property name="text"> <property name="text">
<string>Source du texte</string> <string>Source du texte</string>
</property> </property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="4" column="0" colspan="3">
<spacer name="verticalSpacer_2"> <widget class="Line" name="line">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Horizontal</enum>
</property> </property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="0" colspan="3">
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="m_x_sb">
<property name="minimum">
<double>-5000.000000000000000</double>
</property>
<property name="maximum">
<double>5000.000000000000000</double>
</property>
</widget>
</item>
<item row="0" column="6">
<widget class="QCheckBox" name="m_frame_cb">
<property name="text">
<string>cadre</string>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QSpinBox" name="m_rotation_sb">
<property name="maximum">
<number>359</number>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Rotation</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>X</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QSpinBox" name="m_width_sb">
<property name="minimum">
<number>-1</number>
</property>
<property name="maximum">
<number>500</number>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Largeur</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Y</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="m_y_sb">
<property name="minimum">
<double>-5000.000000000000000</double>
</property>
<property name="maximum">
<double>5000.000000000000000</double>
</property>
</widget>
</item>
<item row="1" column="6">
<widget class="QPushButton" name="m_alignment_pb">
<property name="text">
<string>Alignement</string>
</property>
</widget>
</item>
</layout>
</widget> </widget>
</item> </item>
<item row="6" column="1"> <item row="7" column="1" colspan="2">
<widget class="QSpinBox" name="m_size_sb"/> <widget class="QCheckBox" name="m_frame_cb">
</item>
<item row="6" column="2">
<widget class="QPushButton" name="m_font_pb">
<property name="text"> <property name="text">
<string/> <string>Encadrer le texte</string>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
<tabstops>
<tabstop>m_x_sb</tabstop>
<tabstop>m_y_sb</tabstop>
<tabstop>m_rotation_sb</tabstop>
<tabstop>m_keep_visual_rotation_cb</tabstop>
<tabstop>m_width_sb</tabstop>
<tabstop>m_alignment_pb</tabstop>
<tabstop>m_size_sb</tabstop>
<tabstop>m_font_pb</tabstop>
<tabstop>m_frame_cb</tabstop>
<tabstop>m_text_from_cb</tabstop>
<tabstop>m_user_text_le</tabstop>
<tabstop>m_elmt_info_cb</tabstop>
<tabstop>m_composite_text_pb</tabstop>
</tabstops>
<resources/> <resources/>
<connections/> <connections/>
</ui> </ui>