mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-09-13 20:23:04 +02:00
RealTerminal is created by the TerminalElement itself
This commit is contained in:
parent
70f50ff362
commit
c037d3ea0a
@ -27,20 +27,13 @@
|
|||||||
*/
|
*/
|
||||||
RealTerminal::RealTerminal(Element *terminal) :
|
RealTerminal::RealTerminal(Element *terminal) :
|
||||||
m_element(terminal)
|
m_element(terminal)
|
||||||
{
|
{}
|
||||||
if (terminal) {
|
|
||||||
static_cast<TerminalElement *>(terminal)->setRealTerminal(sharedRef());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RealTerminal::~RealTerminal()
|
RealTerminal::~RealTerminal()
|
||||||
{
|
{
|
||||||
if (m_physical_terminal) {
|
if (m_physical_terminal) {
|
||||||
m_physical_terminal->removeTerminal(sharedRef());
|
m_physical_terminal->removeTerminal(sharedRef());
|
||||||
}
|
}
|
||||||
if (m_element) {
|
|
||||||
static_cast<TerminalElement *>(m_element.data())->setRealTerminal(QSharedPointer<RealTerminal>());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -77,36 +70,6 @@ QWeakPointer<RealTerminal> RealTerminal::weakRef() {
|
|||||||
return m_this_weak;
|
return m_this_weak;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief fromXml
|
|
||||||
* @param xml_element
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
bool RealTerminal::fromXml(QDomElement xml_element, const QVector<TerminalElement *> &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<TerminalElement *>(terminal)->setRealTerminal(sharedRef());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief toXml
|
* @brief toXml
|
||||||
* @param parent_document
|
* @param parent_document
|
||||||
@ -115,7 +78,6 @@ bool RealTerminal::fromXml(QDomElement xml_element, const QVector<TerminalElemen
|
|||||||
QDomElement RealTerminal::toXml(QDomDocument &parent_document) const
|
QDomElement RealTerminal::toXml(QDomDocument &parent_document) const
|
||||||
{
|
{
|
||||||
auto root_elmt = parent_document.createElement(this->xmlTagName());
|
auto root_elmt = parent_document.createElement(this->xmlTagName());
|
||||||
root_elmt.setAttribute(QStringLiteral("uuid"), m_uuid.toString());
|
|
||||||
if (m_element)
|
if (m_element)
|
||||||
root_elmt.setAttribute(QStringLiteral("element_uuid"), m_element->uuid().toString());
|
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
|
* @return the uuid of this real terminal
|
||||||
*/
|
*/
|
||||||
QUuid RealTerminal::uuid() const {
|
QUuid RealTerminal::uuid() const {
|
||||||
|
return elementUuid();
|
||||||
return m_uuid;
|
return m_uuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,24 +41,24 @@ class TerminalStripBridge;
|
|||||||
*/
|
*/
|
||||||
class RealTerminal
|
class RealTerminal
|
||||||
{
|
{
|
||||||
friend class TerminalStrip;
|
friend class TerminalElement;
|
||||||
friend class PhysicalTerminal;
|
friend class PhysicalTerminal;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RealTerminal(Element *element = nullptr);
|
RealTerminal(Element *element);
|
||||||
|
|
||||||
QSharedPointer<RealTerminal> sharedRef();
|
QSharedPointer<RealTerminal> sharedRef();
|
||||||
QSharedPointer<RealTerminal> sharedRef() const;
|
QSharedPointer<RealTerminal> sharedRef() const;
|
||||||
QWeakPointer<RealTerminal> weakRef();
|
QWeakPointer<RealTerminal> weakRef();
|
||||||
|
|
||||||
bool fromXml(QDomElement xml_element, const QVector<TerminalElement *> &terminal_vector);
|
|
||||||
QDomElement toXml(QDomDocument &parent_document) const;
|
|
||||||
|
|
||||||
void setPhysicalTerminal(const QSharedPointer<PhysicalTerminal> &phy_t);
|
void setPhysicalTerminal(const QSharedPointer<PhysicalTerminal> &phy_t);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
~RealTerminal();
|
~RealTerminal();
|
||||||
TerminalStrip *parentStrip() const;
|
TerminalStrip *parentStrip() const;
|
||||||
|
|
||||||
|
QDomElement toXml(QDomDocument &parent_document) const;
|
||||||
|
|
||||||
int level() const;
|
int level() const;
|
||||||
QString label() const;
|
QString label() const;
|
||||||
QString Xref() const;
|
QString Xref() const;
|
||||||
|
@ -113,13 +113,11 @@ bool TerminalStrip::addTerminal(Element *terminal)
|
|||||||
|
|
||||||
m_terminal_elements_vector.append(terminal);
|
m_terminal_elements_vector.append(terminal);
|
||||||
|
|
||||||
//Create the real terminal
|
auto casted_ = static_cast<TerminalElement *>(terminal);
|
||||||
auto raw_real_ptr = new RealTerminal(terminal);
|
m_real_terminals.append(casted_->realTerminal());
|
||||||
auto real_terminal = raw_real_ptr->sharedRef();
|
|
||||||
m_real_terminals.append(real_terminal);
|
|
||||||
|
|
||||||
//Create a new single level physical terminal
|
//Create a new single level physical terminal
|
||||||
auto raw_phy_ptr = new PhysicalTerminal(this, QVector<QSharedPointer<RealTerminal>>{real_terminal});
|
auto raw_phy_ptr = new PhysicalTerminal(this, QVector<QSharedPointer<RealTerminal>>{casted_->realTerminal()});
|
||||||
m_physical_terminals.append(raw_phy_ptr->sharedRef());
|
m_physical_terminals.append(raw_phy_ptr->sharedRef());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -811,7 +809,7 @@ bool TerminalStrip::fromXml(QDomElement &xml_element)
|
|||||||
{
|
{
|
||||||
//Get all free elements terminal of the project
|
//Get all free elements terminal of the project
|
||||||
const ElementProvider ep(m_project);
|
const ElementProvider ep(m_project);
|
||||||
const auto free_terminals = ep.freeTerminal();
|
auto free_terminals = ep.freeTerminal();
|
||||||
|
|
||||||
//Read each physical terminal
|
//Read each physical terminal
|
||||||
for(auto &xml_physical : QETXML::findInDomElement(xml_layout, PhysicalTerminal::xmlTagName()))
|
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
|
//Read each real terminal of the current physical terminal of the loop
|
||||||
for (auto &xml_real : QETXML::findInDomElement(xml_physical, RealTerminal::xmlTagName()))
|
for (auto &xml_real : QETXML::findInDomElement(xml_physical, RealTerminal::xmlTagName()))
|
||||||
{
|
{
|
||||||
auto raw_ptr = new RealTerminal();
|
const auto uuid_ = QUuid(xml_real.attribute(QStringLiteral("element_uuid")));
|
||||||
auto real_t = raw_ptr->sharedRef();
|
for (auto terminal_elmt : qAsConst(free_terminals))
|
||||||
real_t->fromXml(xml_real, free_terminals);
|
|
||||||
if(real_t->isElement())
|
|
||||||
{
|
{
|
||||||
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);
|
auto raw_ptr = new PhysicalTerminal(this, real_t_vector);
|
||||||
|
@ -28,7 +28,10 @@
|
|||||||
TerminalElement::TerminalElement(const ElementsLocation &location,
|
TerminalElement::TerminalElement(const ElementsLocation &location,
|
||||||
QGraphicsItem *qgi, int *state) :
|
QGraphicsItem *qgi, int *state) :
|
||||||
Element(location, qgi, state, Element::Terminale)
|
Element(location, qgi, state, Element::Terminale)
|
||||||
{}
|
{
|
||||||
|
auto rt = new RealTerminal(this);
|
||||||
|
m_real_terminal = rt->sharedRef();
|
||||||
|
}
|
||||||
|
|
||||||
TerminalElement::~TerminalElement()
|
TerminalElement::~TerminalElement()
|
||||||
{}
|
{}
|
||||||
@ -41,15 +44,6 @@ void TerminalElement::initLink(QETProject *project) {
|
|||||||
Element::initLink(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<RealTerminal> &real_t) {
|
|
||||||
m_real_terminal = real_t;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief TerminalElement::realTerminal
|
* @brief TerminalElement::realTerminal
|
||||||
* @return the real terminal of this terminal element.
|
* @return the real terminal of this terminal element.
|
||||||
|
@ -36,7 +36,6 @@ class TerminalElement : public Element
|
|||||||
~TerminalElement() override;
|
~TerminalElement() override;
|
||||||
void initLink(QETProject *project) override;
|
void initLink(QETProject *project) override;
|
||||||
|
|
||||||
void setRealTerminal(const QSharedPointer<RealTerminal> &real_t);
|
|
||||||
QSharedPointer<RealTerminal> realTerminal() const;
|
QSharedPointer<RealTerminal> realTerminal() const;
|
||||||
void setParentTerminalStrip(TerminalStrip *strip);
|
void setParentTerminalStrip(TerminalStrip *strip);
|
||||||
TerminalStrip *parentTerminalStrip() const;
|
TerminalStrip *parentTerminalStrip() const;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user