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("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

View File

@@ -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;

View File

@@ -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);
}
}
}

View File

@@ -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<PartDynamicTextField> m_text_field;

View File

@@ -6,15 +6,132 @@
<rect>
<x>0</x>
<y>0</y>
<width>344</width>
<height>285</height>
<width>354</width>
<height>459</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<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">
<item>
<property name="text">
@@ -33,181 +150,84 @@
</item>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_3">
<item row="3" column="2">
<widget class="QPushButton" name="m_alignment_pb">
<property name="text">
<string>Couleur</string>
<string>Alignement</string>
</property>
</widget>
</item>
<item row="8" 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="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">
<item row="3" column="0">
<widget class="QLabel" name="label_2">
<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>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Police</string>
<string>Couleur</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="0">
<item row="9" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Source du texte</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer_2">
<item row="4" column="0" colspan="3">
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Horizontal</enum>
</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>
</item>
<item row="6" column="1">
<widget class="QSpinBox" name="m_size_sb"/>
</item>
<item row="6" column="2">
<widget class="QPushButton" name="m_font_pb">
<item row="7" column="1" colspan="2">
<widget class="QCheckBox" name="m_frame_cb">
<property name="text">
<string/>
<string>Encadrer le texte</string>
</property>
</widget>
</item>
</layout>
</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/>
<connections/>
</ui>