diff --git a/sources/TerminalStrip/realterminal.cpp b/sources/TerminalStrip/realterminal.cpp index 5a69c8137..ffbe95599 100644 --- a/sources/TerminalStrip/realterminal.cpp +++ b/sources/TerminalStrip/realterminal.cpp @@ -27,20 +27,13 @@ */ RealTerminal::RealTerminal(Element *terminal) : m_element(terminal) -{ - if (terminal) { - static_cast(terminal)->setRealTerminal(sharedRef()); - } -} +{} RealTerminal::~RealTerminal() { if (m_physical_terminal) { m_physical_terminal->removeTerminal(sharedRef()); } - if (m_element) { - static_cast(m_element.data())->setRealTerminal(QSharedPointer()); - } } /** @@ -77,36 +70,6 @@ QWeakPointer RealTerminal::weakRef() { return m_this_weak; } -/** - * @brief fromXml - * @param xml_element - * @return - */ -bool RealTerminal::fromXml(QDomElement xml_element, const QVector &terminal_vector) -{ - if (xml_element.tagName() != xmlTagName()) { - return true; - } - - m_uuid = QUuid(xml_element.attribute(QStringLiteral("uuid"))); - - if (xml_element.hasAttribute(QStringLiteral("element_uuid"))) - { - QUuid uuid_(xml_element.attribute(QStringLiteral("element_uuid"))); - - for (auto terminal : terminal_vector) { - if (terminal->uuid() == uuid_) - { - m_element = terminal; - static_cast(terminal)->setRealTerminal(sharedRef()); - break; - } - } - } - - return true; -} - /** * @brief toXml * @param parent_document @@ -115,7 +78,6 @@ bool RealTerminal::fromXml(QDomElement xml_element, const QVectorxmlTagName()); - root_elmt.setAttribute(QStringLiteral("uuid"), m_uuid.toString()); if (m_element) root_elmt.setAttribute(QStringLiteral("element_uuid"), m_element->uuid().toString()); @@ -306,6 +268,7 @@ QUuid RealTerminal::elementUuid() const { * @return the uuid of this real terminal */ QUuid RealTerminal::uuid() const { + return elementUuid(); return m_uuid; } diff --git a/sources/TerminalStrip/realterminal.h b/sources/TerminalStrip/realterminal.h index 7a587c88c..e7d007db2 100644 --- a/sources/TerminalStrip/realterminal.h +++ b/sources/TerminalStrip/realterminal.h @@ -41,24 +41,24 @@ class TerminalStripBridge; */ class RealTerminal { - friend class TerminalStrip; + friend class TerminalElement; friend class PhysicalTerminal; private: - RealTerminal(Element *element = nullptr); + RealTerminal(Element *element); QSharedPointer sharedRef(); QSharedPointer sharedRef() const; QWeakPointer weakRef(); - bool fromXml(QDomElement xml_element, const QVector &terminal_vector); - QDomElement toXml(QDomDocument &parent_document) const; - void setPhysicalTerminal(const QSharedPointer &phy_t); public: ~RealTerminal(); TerminalStrip *parentStrip() const; + + QDomElement toXml(QDomDocument &parent_document) const; + int level() const; QString label() const; QString Xref() const; diff --git a/sources/TerminalStrip/terminalstrip.cpp b/sources/TerminalStrip/terminalstrip.cpp index 256ce83e4..ea53ac5d1 100644 --- a/sources/TerminalStrip/terminalstrip.cpp +++ b/sources/TerminalStrip/terminalstrip.cpp @@ -113,13 +113,11 @@ bool TerminalStrip::addTerminal(Element *terminal) m_terminal_elements_vector.append(terminal); - //Create the real terminal - auto raw_real_ptr = new RealTerminal(terminal); - auto real_terminal = raw_real_ptr->sharedRef(); - m_real_terminals.append(real_terminal); + auto casted_ = static_cast(terminal); + m_real_terminals.append(casted_->realTerminal()); //Create a new single level physical terminal - auto raw_phy_ptr = new PhysicalTerminal(this, QVector>{real_terminal}); + auto raw_phy_ptr = new PhysicalTerminal(this, QVector>{casted_->realTerminal()}); m_physical_terminals.append(raw_phy_ptr->sharedRef()); return true; @@ -811,7 +809,7 @@ bool TerminalStrip::fromXml(QDomElement &xml_element) { //Get all free elements terminal of the project const ElementProvider ep(m_project); - const auto free_terminals = ep.freeTerminal(); + auto free_terminals = ep.freeTerminal(); //Read each physical terminal for(auto &xml_physical : QETXML::findInDomElement(xml_layout, PhysicalTerminal::xmlTagName())) @@ -821,14 +819,19 @@ bool TerminalStrip::fromXml(QDomElement &xml_element) //Read each real terminal of the current physical terminal of the loop for (auto &xml_real : QETXML::findInDomElement(xml_physical, RealTerminal::xmlTagName())) { - auto raw_ptr = new RealTerminal(); - auto real_t = raw_ptr->sharedRef(); - real_t->fromXml(xml_real, free_terminals); - if(real_t->isElement()) + const auto uuid_ = QUuid(xml_real.attribute(QStringLiteral("element_uuid"))); + for (auto terminal_elmt : qAsConst(free_terminals)) { - m_terminal_elements_vector.append(real_t->element()); + if (terminal_elmt->uuid() == uuid_) + { + m_terminal_elements_vector.append(terminal_elmt); + real_t_vector.append(terminal_elmt->realTerminal()); + //Remove the actual terminal element from the vector, they dicrease the size + //of the vector and so each iteration have less terminal element to check + free_terminals.removeOne(terminal_elmt); + break; + } } - real_t_vector.append(real_t); } auto raw_ptr = new PhysicalTerminal(this, real_t_vector); diff --git a/sources/qetgraphicsitem/terminalelement.cpp b/sources/qetgraphicsitem/terminalelement.cpp index 536d9434c..21208ffdc 100644 --- a/sources/qetgraphicsitem/terminalelement.cpp +++ b/sources/qetgraphicsitem/terminalelement.cpp @@ -28,7 +28,10 @@ TerminalElement::TerminalElement(const ElementsLocation &location, QGraphicsItem *qgi, int *state) : Element(location, qgi, state, Element::Terminale) -{} +{ + auto rt = new RealTerminal(this); + m_real_terminal = rt->sharedRef(); +} TerminalElement::~TerminalElement() {} @@ -41,15 +44,6 @@ void TerminalElement::initLink(QETProject *project) { Element::initLink(project); } -/** - * @brief TerminalElement::setRealTerminal - * Set @a real_t as the real terminal for this terminal element - * @param real_t - */ -void TerminalElement::setRealTerminal(const QSharedPointer &real_t) { - m_real_terminal = real_t; -} - /** * @brief TerminalElement::realTerminal * @return the real terminal of this terminal element. diff --git a/sources/qetgraphicsitem/terminalelement.h b/sources/qetgraphicsitem/terminalelement.h index 657520efe..c2319d8f5 100644 --- a/sources/qetgraphicsitem/terminalelement.h +++ b/sources/qetgraphicsitem/terminalelement.h @@ -36,7 +36,6 @@ class TerminalElement : public Element ~TerminalElement() override; void initLink(QETProject *project) override; - void setRealTerminal(const QSharedPointer &real_t); QSharedPointer realTerminal() const; void setParentTerminalStrip(TerminalStrip *strip); TerminalStrip *parentTerminalStrip() const;