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) :
|
||||
m_element(terminal)
|
||||
{
|
||||
if (terminal) {
|
||||
static_cast<TerminalElement *>(terminal)->setRealTerminal(sharedRef());
|
||||
}
|
||||
}
|
||||
{}
|
||||
|
||||
RealTerminal::~RealTerminal()
|
||||
{
|
||||
if (m_physical_terminal) {
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* @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
|
||||
* @param parent_document
|
||||
@ -115,7 +78,6 @@ 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(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;
|
||||
}
|
||||
|
||||
|
@ -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<RealTerminal> sharedRef();
|
||||
QSharedPointer<RealTerminal> sharedRef() const;
|
||||
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);
|
||||
|
||||
public:
|
||||
~RealTerminal();
|
||||
TerminalStrip *parentStrip() const;
|
||||
|
||||
QDomElement toXml(QDomDocument &parent_document) const;
|
||||
|
||||
int level() const;
|
||||
QString label() const;
|
||||
QString Xref() const;
|
||||
|
@ -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<TerminalElement *>(terminal);
|
||||
m_real_terminals.append(casted_->realTerminal());
|
||||
|
||||
//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());
|
||||
|
||||
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);
|
||||
|
@ -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<RealTerminal> &real_t) {
|
||||
m_real_terminal = real_t;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalElement::realTerminal
|
||||
* @return the real terminal of this terminal element.
|
||||
|
@ -36,7 +36,6 @@ class TerminalElement : public Element
|
||||
~TerminalElement() override;
|
||||
void initLink(QETProject *project) override;
|
||||
|
||||
void setRealTerminal(const QSharedPointer<RealTerminal> &real_t);
|
||||
QSharedPointer<RealTerminal> realTerminal() const;
|
||||
void setParentTerminalStrip(TerminalStrip *strip);
|
||||
TerminalStrip *parentTerminalStrip() const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user