mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-12-19 14:50:53 +01:00
Merge pull request #361 from plc-user/master
element-editor: add mirror and flip for "text"
This commit is contained in:
@@ -250,7 +250,7 @@ bool TerminalStrip::addTerminal(Element *terminal)
|
||||
}
|
||||
}
|
||||
|
||||
if (terminal->elementData().m_type != ElementData::Terminale) {
|
||||
if (terminal->elementData().m_type != ElementData::Terminal) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -458,8 +458,8 @@ void projectDataBase::populateElementTable()
|
||||
for (auto diagram : m_project->diagrams())
|
||||
{
|
||||
const ElementProvider ep(diagram);
|
||||
const auto elmt_vector = ep.find(ElementData::Simple | ElementData::Terminale | ElementData::Master | ElementData::Thumbnail);
|
||||
//Insert all value into the database
|
||||
const auto elmt_vector = ep.find(ElementData::Simple | ElementData::Terminal | ElementData::Master | ElementData::Thumbnail);
|
||||
//Insert all values into the database
|
||||
for (const auto &elmt : elmt_vector)
|
||||
{
|
||||
const auto elmt_data = elmt->elementData();
|
||||
@@ -487,9 +487,9 @@ void projectDataBase::populateElementInfoTable()
|
||||
for (const auto &diagram : m_project->diagrams())
|
||||
{
|
||||
const ElementProvider ep(diagram);
|
||||
const auto elmt_vector = ep.find(ElementData::Simple | ElementData::Terminale | ElementData::Master | ElementData::Thumbnail);
|
||||
const auto elmt_vector = ep.find(ElementData::Simple | ElementData::Terminal | ElementData::Master | ElementData::Thumbnail);
|
||||
|
||||
//Insert all value into the database
|
||||
//Insert all values into the database
|
||||
for (const auto &elmt : elmt_vector)
|
||||
{
|
||||
m_insert_element_info_query.bindValue(QStringLiteral(":uuid"), elmt->uuid().toString());
|
||||
|
||||
@@ -171,7 +171,7 @@ void ElementQueryWidget::setQuery(const QString &query)
|
||||
if (ui->m_simple_cb->isChecked()) {
|
||||
++c;
|
||||
}
|
||||
ui->m_terminal_cb->setChecked (str_type.contains(ElementData::typeToString(ElementData::Terminale)) ? true : false);
|
||||
ui->m_terminal_cb->setChecked (str_type.contains(ElementData::typeToString(ElementData::Terminal)) ? true : false);
|
||||
if (ui->m_terminal_cb->isChecked()) {
|
||||
++c;
|
||||
}
|
||||
@@ -340,7 +340,7 @@ QString ElementQueryWidget::queryStr() const
|
||||
bool b = false;
|
||||
if (ui->m_terminal_cb->isChecked()) {
|
||||
if (b) where +=" OR";
|
||||
where += QStringLiteral(" element_type = '") += ElementData::typeToString(ElementData::Terminale) += "'";
|
||||
where += QStringLiteral(" element_type = '") += ElementData::typeToString(ElementData::Terminal) += "'";
|
||||
b = true;
|
||||
}
|
||||
if (ui->m_thumbnail_cb->isChecked()) {
|
||||
|
||||
@@ -220,7 +220,7 @@ bool DiagramEventAddElement::buildElement()
|
||||
|
||||
/**
|
||||
@brief DiagramEventAddElement::addElement
|
||||
Add an element at the current pos en current rotation,
|
||||
Add an element at the current pos and current rotation,
|
||||
if project autoconductor option is enable, and the element can be wired, we do it.
|
||||
*/
|
||||
void DiagramEventAddElement::addElement()
|
||||
|
||||
@@ -686,7 +686,7 @@ void MirrorElementsCommand::redo()
|
||||
foreach (auto *item, m_items) {
|
||||
if (item->type() == PartText::Type) {
|
||||
PartText* staticText = qgraphicsitem_cast<PartText*>(item);
|
||||
//staticText->mirror();
|
||||
staticText->mirror();
|
||||
} else if (item->type() == PartDynamicTextField::Type) {
|
||||
PartDynamicTextField* dyntext = qgraphicsitem_cast<PartDynamicTextField*>(item);
|
||||
dyntext->mirror();
|
||||
@@ -734,7 +734,7 @@ void FlipElementsCommand::redo()
|
||||
foreach (auto *item, m_items) {
|
||||
if (item->type() == PartText::Type) {
|
||||
PartText* staticText = qgraphicsitem_cast<PartText*>(item);
|
||||
//staticText->flip();
|
||||
staticText->flip();
|
||||
} else if (item->type() == PartDynamicTextField::Type) {
|
||||
PartDynamicTextField* dyntext = qgraphicsitem_cast<PartDynamicTextField*>(item);
|
||||
dyntext->flip();
|
||||
|
||||
@@ -463,15 +463,14 @@ const QDomDocument ElementScene::toXml(bool all_parts)
|
||||
auto type_ = m_element_data.m_type;
|
||||
if (type_ == ElementData::Slave ||
|
||||
type_ == ElementData::Master ||
|
||||
type_ == ElementData::Terminale ||
|
||||
type_ == ElementData::Thumbnail)
|
||||
type_ == ElementData::Terminal)
|
||||
{
|
||||
root.appendChild(m_element_data.kindInfoToXml(xml_document));
|
||||
}
|
||||
|
||||
if (type_ == ElementData::Simple ||
|
||||
type_ == ElementData::Master ||
|
||||
type_ == ElementData::Terminale ||
|
||||
type_ == ElementData::Terminal ||
|
||||
type_ == ElementData::Thumbnail)
|
||||
{
|
||||
QDomElement element_info = xml_document.createElement("elementInformations");
|
||||
|
||||
@@ -216,7 +216,7 @@ void PartDynamicTextField::fromXml(const QDomElement &dom_elmt) {
|
||||
setFont(font_);
|
||||
}
|
||||
else if (dom_elmt.hasAttribute("font_size")) {
|
||||
// plc-user: for convenience - to support font-size from old 'input' ?")
|
||||
// to support font-size from old 'input'
|
||||
setFont(QETApp::dynamicTextsItemFont(dom_elmt.attribute("font_size", QString::number(9)).toInt()));
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -72,6 +72,39 @@ void PartText::setRotation(qreal angle) {
|
||||
setPos(QTransform().rotate(angle).map(pos()));
|
||||
}
|
||||
|
||||
void PartText::mirror() {
|
||||
// at first: rotate the text:
|
||||
QGraphicsObject::setRotation(QET::correctAngle((360-rotation()), true));
|
||||
// then see, where we need to re-position depending on text, font ...
|
||||
QFontMetrics qfm(font());
|
||||
qreal textwidth = qfm.horizontalAdvance(toPlainText());
|
||||
// ... and angle!!!
|
||||
qreal rot = qRound(QET::correctAngle(rotation(), true));
|
||||
qreal c = qCos(qDegreesToRadians(rot));
|
||||
qreal s = qSin(qDegreesToRadians(rot));
|
||||
// Now: Move!
|
||||
qreal x = (-1) * pos().x() - c * (textwidth);
|
||||
qreal y = pos().y() - s * (textwidth);
|
||||
setPos(x, y);
|
||||
}
|
||||
|
||||
void PartText::flip() {
|
||||
// at first: rotate the text:
|
||||
QGraphicsObject::setRotation(QET::correctAngle((360-rotation()), true));
|
||||
// then see, where we need to re-position depending on text, font ...
|
||||
QFontMetrics qfm(font());
|
||||
qreal textheight = realSize() - qfm.descent();
|
||||
// ... and angle!!!
|
||||
qreal rot = qRound(QET::correctAngle(rotation(), true));
|
||||
qreal c = qCos(qDegreesToRadians(rot));
|
||||
qreal s = qSin(qDegreesToRadians(rot));
|
||||
// Now: Move!
|
||||
qreal x = pos().x() - s * (textheight);
|
||||
qreal y = (-1) * pos().y() + c * (textheight);
|
||||
setPos(x, y);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Importe les proprietes d'un texte statique depuis un element XML
|
||||
@param xml_element Element XML a lire
|
||||
|
||||
@@ -62,6 +62,8 @@ class PartText : public QGraphicsTextItem, public CustomElementPart {
|
||||
void fromXml(const QDomElement &) override;
|
||||
const QDomElement toXml(QDomDocument &) const override;
|
||||
void setRotation(qreal angle);
|
||||
void mirror();
|
||||
void flip();
|
||||
bool isUseless() const override;
|
||||
QRectF sceneGeometricRect() const override;
|
||||
void startUserTransformation(const QRectF &) override;
|
||||
|
||||
@@ -98,7 +98,7 @@ void ElementPropertiesEditorWidget::upDateInterface()
|
||||
ui->m_master_type_cb->setCurrentIndex(
|
||||
ui->m_master_type_cb->findData (
|
||||
m_data.m_master_type));
|
||||
} else if (m_data.m_type == ElementData::Terminale) {
|
||||
} else if (m_data.m_type == ElementData::Terminal) {
|
||||
ui->m_terminal_type_cb->setCurrentIndex(
|
||||
ui->m_terminal_type_cb->findData(
|
||||
m_data.m_terminal_type));
|
||||
@@ -121,7 +121,7 @@ void ElementPropertiesEditorWidget::setUpInterface()
|
||||
ui->m_base_type_cb->addItem (tr("Esclave"), ElementData::Slave);
|
||||
ui->m_base_type_cb->addItem (tr("Renvoi de folio suivant"), ElementData::NextReport);
|
||||
ui->m_base_type_cb->addItem (tr("Renvoi de folio précédent"), ElementData::PreviousReport);
|
||||
ui->m_base_type_cb->addItem (tr("Bornier"), ElementData::Terminale);
|
||||
ui->m_base_type_cb->addItem (tr("Bornier"), ElementData::Terminal);
|
||||
ui->m_base_type_cb->addItem (tr("Vignette"), ElementData::Thumbnail);
|
||||
|
||||
// Slave option
|
||||
@@ -181,7 +181,7 @@ void ElementPropertiesEditorWidget::updateTree()
|
||||
case ElementData::Slave:
|
||||
ui->m_tree->setDisabled(true);
|
||||
break;
|
||||
case ElementData::Terminale:
|
||||
case ElementData::Terminal:
|
||||
ui->m_tree->setEnabled(true);
|
||||
break;
|
||||
default:
|
||||
@@ -227,7 +227,7 @@ void ElementPropertiesEditorWidget::on_m_buttonBox_accepted()
|
||||
else if (m_data.m_type == ElementData::Master) {
|
||||
m_data.m_master_type = ui->m_master_type_cb->currentData().value<ElementData::MasterType>();
|
||||
}
|
||||
else if (m_data.m_type == ElementData::Terminale)
|
||||
else if (m_data.m_type == ElementData::Terminal)
|
||||
{
|
||||
m_data.m_terminal_type = ui->m_terminal_type_cb->currentData().value<ElementData::TerminalType>();
|
||||
m_data.m_terminal_function = ui->m_terminal_func_cb->currentData().value<ElementData::TerminalFunction>();
|
||||
@@ -260,7 +260,7 @@ void ElementPropertiesEditorWidget::on_m_base_type_cb_currentIndexChanged(int in
|
||||
slave = true;
|
||||
else if (type_ == ElementData::Master)
|
||||
master = true;
|
||||
else if (type_ == ElementData::Terminale)
|
||||
else if (type_ == ElementData::Terminal)
|
||||
terminal = true;
|
||||
|
||||
ui->m_slave_gb->setVisible(slave);
|
||||
|
||||
@@ -204,7 +204,7 @@ QVector<TerminalElement *> ElementProvider::freeTerminal() const
|
||||
|
||||
for (const auto element : elmt_list)
|
||||
{
|
||||
if (element->elementData().m_type == ElementData::Terminale)
|
||||
if (element->elementData().m_type == ElementData::Terminal)
|
||||
{
|
||||
const auto te{static_cast<TerminalElement *>(element)};
|
||||
if (!te->parentTerminalStrip()) {
|
||||
|
||||
@@ -102,7 +102,7 @@ QDomElement ElementData::kindInfoToXml(QDomDocument &document)
|
||||
|
||||
returned_elmt.appendChild(xml_count);
|
||||
}
|
||||
else if (m_type == ElementData::Terminale)
|
||||
else if (m_type == ElementData::Terminal)
|
||||
{
|
||||
//type
|
||||
auto xml_type = document.createElement(QStringLiteral("kindInformation"));
|
||||
@@ -233,7 +233,7 @@ bool ElementData::operator==(const ElementData &data) const
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (data.m_type == ElementData::Terminale) {
|
||||
else if (data.m_type == ElementData::Terminal) {
|
||||
//Check terminal type or overrided terminal type
|
||||
if (data.m_terminal_type_is_override != m_terminal_type_is_override) {
|
||||
return false;
|
||||
@@ -309,7 +309,7 @@ QString ElementData::typeToString(ElementData::Type type)
|
||||
return QStringLiteral("master");
|
||||
case ElementData::Slave :
|
||||
return QStringLiteral("slave");
|
||||
case ElementData::Terminale :
|
||||
case ElementData::Terminal :
|
||||
return QStringLiteral("terminal");
|
||||
case ElementData::Thumbnail:
|
||||
return QStringLiteral("thumbnail");
|
||||
@@ -333,7 +333,7 @@ ElementData::Type ElementData::typeFromString(const QString &string)
|
||||
} else if (string == QLatin1String("slave")) {
|
||||
return ElementData::Slave;
|
||||
} else if (string == QLatin1String("terminal")) {
|
||||
return ElementData::Terminale;
|
||||
return ElementData::Terminal;
|
||||
} else if (string == QLatin1String("thumbnail")) {
|
||||
return ElementData::Thumbnail;
|
||||
}
|
||||
@@ -548,7 +548,7 @@ void ElementData::kindInfoFromXml(const QDomElement &xml_element)
|
||||
{
|
||||
if (m_type == ElementData::Master ||
|
||||
m_type == ElementData::Slave ||
|
||||
m_type == ElementData::Terminale)
|
||||
m_type == ElementData::Terminal)
|
||||
{
|
||||
auto xml_kind = xml_element.firstChildElement(QStringLiteral("kindInformations"));
|
||||
for (const auto &dom_elmt : QETXML::findInDomElement(xml_kind, QStringLiteral("kindInformation")))
|
||||
@@ -571,7 +571,7 @@ void ElementData::kindInfoFromXml(const QDomElement &xml_element)
|
||||
m_contact_count = dom_elmt.text().toInt();
|
||||
}
|
||||
}
|
||||
else if (m_type == ElementData::Terminale) {
|
||||
else if (m_type == ElementData::Terminal) {
|
||||
if (name == QLatin1String("type")) {
|
||||
m_terminal_type = terminalTypeFromString(dom_elmt.text());
|
||||
} else if (name == QLatin1String("function")) {
|
||||
|
||||
@@ -40,7 +40,7 @@ class ElementData : public PropertiesInterface
|
||||
AllReport = 6,
|
||||
Master = 8,
|
||||
Slave = 16,
|
||||
Terminale = 32,
|
||||
Terminal = 32,
|
||||
Thumbnail = 64};
|
||||
Q_ENUM(Type)
|
||||
Q_DECLARE_FLAGS(Types, Type)
|
||||
|
||||
@@ -590,7 +590,7 @@ void QETDiagramEditor::setUpActions()
|
||||
m_rotate_texts = m_selection_actions_group.addAction( QET::Icons::ObjectRotateRight, tr("Orienter les textes") );
|
||||
m_find_element = m_selection_actions_group.addAction( QET::Icons::ZoomDraw, tr("Retrouver dans le panel") );
|
||||
m_edit_selection = m_selection_actions_group.addAction( QET::Icons::ElementEdit, tr("Éditer l'item sélectionné") );
|
||||
m_group_selected_texts = m_selection_actions_group.addAction(QET::Icons::textGroup, tr("Grouper les textes sélectionnés"));
|
||||
m_group_selected_texts = m_selection_actions_group.addAction( QET::Icons::textGroup, tr("Grouper les textes sélectionnés"));
|
||||
|
||||
m_delete_selection->setShortcut(Qt::Key_Delete);
|
||||
m_rotate_selection->setShortcut(Qt::Key_Space);
|
||||
|
||||
@@ -632,8 +632,8 @@ DynamicElementTextItem *Element::parseDynamicText(
|
||||
const QDomElement &dom_element)
|
||||
{
|
||||
DynamicElementTextItem *deti = new DynamicElementTextItem(this);
|
||||
//Because the xml description of a .elmt file is the same as how a dynamic text field is save to xml in a .qet file
|
||||
//wa call fromXml, we just change the tagg name (.elmt = dynamic_text, .qet = dynamic_elmt_text)
|
||||
//Because the xml description of a .elmt file is the same as how a dynamic text field is saved to xml in a .qet file
|
||||
//we call fromXml, we just change the tagg name (.elmt = dynamic_text, .qet = dynamic_elmt_text)
|
||||
//and the uuid (because the uuid, is the uuid of the description and not the uuid of instantiated dynamic text field)
|
||||
|
||||
QDomElement dom(dom_element.cloneNode(true).toElement());
|
||||
@@ -845,7 +845,7 @@ bool Element::fromXml(QDomElement &e,
|
||||
QStringLiteral("elementInformation"));
|
||||
|
||||
//Load override properties (For now, only used when the element is a terminal)
|
||||
if (m_data.m_type == ElementData::Terminale)
|
||||
if (m_data.m_type == ElementData::Terminal)
|
||||
{
|
||||
|
||||
auto elmt_type_list = QETXML::subChild(e, QStringLiteral("properties"), QStringLiteral("element_type"));
|
||||
@@ -976,7 +976,7 @@ QDomElement Element::toXml(
|
||||
}
|
||||
|
||||
//Save override properties (For now, only used when the element is a terminal)
|
||||
if (m_data.m_type == ElementData::Terminale)
|
||||
if (m_data.m_type == ElementData::Terminal)
|
||||
{
|
||||
QDomElement properties = document.createElement(QStringLiteral("properties"));
|
||||
QDomElement element_type = document.createElement(QStringLiteral("element_type"));
|
||||
|
||||
@@ -179,7 +179,7 @@ void ElementInfoWidget::disableLiveEdit()
|
||||
void ElementInfoWidget::buildInterface()
|
||||
{
|
||||
QStringList keys;
|
||||
if (m_element.data()->elementData().m_type == ElementData::Terminale) {
|
||||
if (m_element.data()->elementData().m_type == ElementData::Terminal) {
|
||||
keys = QETInformation::terminalElementInfoKeys();
|
||||
} else {
|
||||
keys = QETInformation::elementInfoKeys();
|
||||
|
||||
Reference in New Issue
Block a user