Terminal strip bridge are now save in .qet file

This commit is contained in:
joshua
2022-01-31 18:11:21 +01:00
parent bd635b8e43
commit c02238cab8
5 changed files with 93 additions and 9 deletions

View File

@@ -66,12 +66,12 @@ bool RealTerminal::fromXml(QDomElement xml_element, const QVector<TerminalElemen
return true;
}
auto is_draw = xml_element.attribute(QStringLiteral("is_draw")) == QLatin1String("true")
? true : false;
m_uuid = QUuid(xml_element.attribute(QStringLiteral("uuid")));
QUuid uuid_(xml_element.attribute(QStringLiteral("uuid")));
if (xml_element.hasAttribute(QStringLiteral("element_uuid")))
{
QUuid uuid_(xml_element.attribute(QStringLiteral("element_uuid")));
if (is_draw) {
for (auto terminal : terminal_vector) {
if (terminal->uuid() == uuid_)
{
@@ -79,8 +79,6 @@ bool RealTerminal::fromXml(QDomElement xml_element, const QVector<TerminalElemen
break;
}
}
} else {
m_uuid = uuid_;
}
return true;
@@ -94,9 +92,9 @@ bool RealTerminal::fromXml(QDomElement xml_element, const QVector<TerminalElemen
QDomElement RealTerminal::toXml(QDomDocument &parent_document) const
{
auto root_elmt = parent_document.createElement(this->xmlTagName());
root_elmt.setAttribute("is_draw", m_element ? "true" : "false");
root_elmt.setAttribute("uuid", m_element ? m_element->uuid().toString() :
m_uuid.toString());
root_elmt.setAttribute(QStringLiteral("uuid"), m_uuid.toString());
if (m_element)
root_elmt.setAttribute(QStringLiteral("element_uuid"), m_element->uuid().toString());
return root_elmt;
}

View File

@@ -246,6 +246,22 @@ QSharedPointer<RealTerminal> TerminalStrip::realTerminal(Element *terminal) cons
return shared_real_terminal();
}
/**
* @brief TerminalStrip::realTerminalForUuid
* @param uuid
* @return the real terminal with uuid @a uuid or a null QSharedPointer if not found
*/
QSharedPointer<RealTerminal> TerminalStrip::realTerminalForUuid(const QUuid &uuid) const
{
for (const auto &t : qAsConst(m_real_terminals)) {
if (t->uuid() == uuid) {
return t;
}
}
return QSharedPointer<RealTerminal>();
}
/**
* @brief TerminalStrip::setSortedTo
@@ -764,6 +780,10 @@ QDomElement TerminalStrip::toXml(QDomDocument &parent_document)
}
root_elmt.appendChild(xml_layout);
for (const auto &bridge_ : qAsConst(m_bridge)) {
root_elmt.appendChild(bridge_->toXml(parent_document));
}
return root_elmt;
}
@@ -818,6 +838,16 @@ bool TerminalStrip::fromXml(QDomElement &xml_element)
}
//Read bridges
const auto bridge_vector = QETXML::directChild(xml_element, TerminalStripBridge::xmlTagName());
for (const auto &xml_bridge : bridge_vector)
{
auto bridge_ = new TerminalStripBridge(this);
auto shared_bridge = bridge_->sharedRef();
shared_bridge->fromXml(xml_bridge);
m_bridge.append(shared_bridge);
}
return true;
}

View File

@@ -86,6 +86,7 @@ class TerminalStrip : public QObject
QSharedPointer<PhysicalTerminal> physicalTerminal (const QSharedPointer<RealTerminal> &real_terminal) const;
QVector<QSharedPointer<PhysicalTerminal>> physicalTerminal() const;
QSharedPointer<RealTerminal> realTerminal(Element *terminal) const;
QSharedPointer<RealTerminal> realTerminalForUuid(const QUuid &uuid) const;
bool setOrderTo(const QVector<QSharedPointer<PhysicalTerminal>> &sorted_vector);
bool groupTerminals(const QSharedPointer<PhysicalTerminal> &receiver_terminal, const QVector<QSharedPointer<RealTerminal>> &added_terminals);

View File

@@ -18,6 +18,7 @@
#include "terminalstripbridge.h"
#include "realterminal.h"
#include "terminalstrip.h"
#include "../qetxml.h"
TerminalStripBridge::TerminalStripBridge(TerminalStrip *parent_strip) :
m_strip(parent_strip)
@@ -70,6 +71,55 @@ QVector<QSharedPointer<RealTerminal> > TerminalStripBridge::realTerminals() cons
return m_real_terminals;
}
/**
* @brief TerminalStripBridge::toXml
* Save this bridge into a QDomElement and return it.
* @param parent_document
* @return
*/
QDomElement TerminalStripBridge::toXml(QDomDocument &parent_document) const
{
auto root_elmt = parent_document.createElement(xmlTagName());
root_elmt.setAttribute(QStringLiteral("uuid"), m_uuid.toString());
root_elmt.setAttribute(QStringLiteral("color"), m_color.name());
auto terminals_elmt = parent_document.createElement(QStringLiteral("real_terminals"));
for (const auto &real_t : qAsConst(m_real_terminals))
{
if (real_t)
{
auto terminal_elmt = parent_document.createElement(QStringLiteral("real_terminal"));
terminal_elmt.setAttribute(QStringLiteral("uuid"), real_t->uuid().toString());
terminals_elmt.appendChild(terminal_elmt);
}
}
root_elmt.appendChild(terminals_elmt);
return root_elmt;
}
void TerminalStripBridge::fromXml(const QDomElement &dom_element)
{
if (dom_element.tagName() != xmlTagName() || !m_strip) {
return;
}
m_uuid.fromString(dom_element.attribute(QStringLiteral("uuid"), m_uuid.toString()));
m_color.setNamedColor(dom_element.attribute(QStringLiteral("color")));
const auto real_t_vector = QETXML::subChild(dom_element,
QStringLiteral("real_terminals"),
QStringLiteral("real_terminal"));
for (const auto &xml_real_t : real_t_vector)
{
auto real_t = m_strip->realTerminalForUuid(QUuid(xml_real_t.attribute(QStringLiteral("uuid"))));
if (real_t) {
m_real_terminals.append(real_t);
}
}
}
/**
* @brief TerminalStripBridge::addTerminals
* @param real_terminals

View File

@@ -22,6 +22,7 @@
#include <QUuid>
#include <QPointer>
#include <QColor>
#include <QDomDocument>
class RealTerminal;
class TerminalStrip;
@@ -41,6 +42,10 @@ class TerminalStripBridge
void setColor(const QColor &color);
QVector<QSharedPointer<RealTerminal>> realTerminals() const;
static QString xmlTagName() {return QStringLiteral("terminal_strip_bridge");}
QDomElement toXml(QDomDocument &parent_document) const;
void fromXml(const QDomElement &dom_element);
private:
bool addTerminals(const QVector<QSharedPointer<RealTerminal>> &real_terminals);
void removeTerminals(const QVector<QSharedPointer<RealTerminal>> &real_terminals);