diff --git a/sources/TerminalStrip/terminalstrip.cpp b/sources/TerminalStrip/terminalstrip.cpp index 65442e2e2..8eb21588d 100644 --- a/sources/TerminalStrip/terminalstrip.cpp +++ b/sources/TerminalStrip/terminalstrip.cpp @@ -68,6 +68,32 @@ class RealTerminal return m_element.data(); } + /** + * @brief label + * @return the label of this real terminal + */ + QString label() const { + if (!m_element.isNull()) { + return m_element->actualLabel(); + } else { + return QStringLiteral(""); + } + } + + /** + * @brief elementUuid + * @return if this real terminal is an element + * in a folio, return the uuid of the element + * else return a null uuid. + */ + QUuid elementUuid() const { + if (!m_element.isNull()) { + return m_element->uuid(); + } else { + return QUuid(); + } + } + private : QPointer m_element; QPointer m_parent_terminal_strip; @@ -276,6 +302,36 @@ bool TerminalStrip::haveTerminal(Element *terminal) { return m_terminal_elements_vector.contains(terminal); } +/** + * @brief TerminalStrip::physicalTerminalCount + * @return the number of physical terminal. + * A physical terminal is the representation of a real electrical terminal. + * Notice that a physical terminal can have level (like in real life) + */ +int TerminalStrip::physicalTerminalCount() const { + return m_physical_terminals.size(); +} + +TerminalStripIndex TerminalStrip::index(int index) +{ + TerminalStripIndex tsi_; + + if (index < 0 || + index >= m_physical_terminals.size()) { + return tsi_; + } + + auto phy_term = m_physical_terminals.at(index); + + for(auto &real_term : phy_term->terminals()) { + tsi_.m_label.append(real_term->label()); + tsi_.m_uuid.append(real_term->elementUuid()); + } + + tsi_.m_valid = true; + return tsi_; +} + /** * @brief TerminalStrip::realTerminal * @param terminal @@ -286,14 +342,9 @@ QSharedPointer TerminalStrip::realTerminal(Element *terminal) { shared_real_terminal rt; - if (m_terminal_elements_vector.contains(terminal)) - { - for (auto &real : qAsConst(m_real_terminals)) - { - if (real->element() == terminal) { - rt = real; - break; - } + for (auto &real : qAsConst(m_real_terminals)) { + if (real->element() == terminal) { + return real; } } @@ -321,3 +372,38 @@ QSharedPointer TerminalStrip::physicalTerminal(QSharedPointer< return pt; } + +/************************************************************************************/ +/************************************************************************************/ +/************************************************************************************/ +/************************************************************************************/ +/************************************************************************************/ + + + + + +bool TerminalStripIndex::isValid() const +{ + return m_valid; +} + +QString TerminalStripIndex::label(int level) const +{ + if (level<0 || + level >= m_label.size()) { + return QStringLiteral(""); + } + + return m_label.at(level); +} + +QUuid TerminalStripIndex::uuid(int level) const +{ + if (level<0 || + level >= m_uuid.size()) { + return QUuid(); + } + + return m_uuid.at(level); +} diff --git a/sources/TerminalStrip/terminalstrip.h b/sources/TerminalStrip/terminalstrip.h index 62313e00d..b43d7460f 100644 --- a/sources/TerminalStrip/terminalstrip.h +++ b/sources/TerminalStrip/terminalstrip.h @@ -26,6 +26,7 @@ class Element; class RealTerminal; class QETProject; class PhysicalTerminal; +class TerminalStripIndex; class TerminalStrip : public QObject { @@ -50,9 +51,12 @@ class TerminalStrip : public QObject QString description() const {return m_data.m_description;} QUuid uuid() const {return m_data.m_uuid;} - bool addTerminal(Element *terminal); - bool removeTerminal(Element *terminal); - bool haveTerminal(Element *terminal); + bool addTerminal (Element *terminal); + bool removeTerminal (Element *terminal); + bool haveTerminal (Element *terminal); + + int physicalTerminalCount() const; + TerminalStripIndex index(int index = 0); private: QSharedPointer realTerminal(Element *terminal); @@ -66,8 +70,23 @@ class TerminalStrip : public QObject QVector> m_physical_terminals; }; +class TerminalStripIndex +{ + friend class TerminalStrip; + private : + TerminalStripIndex () {} + TerminalStripIndex (TerminalStripIndex *) {} + public: + bool isValid() const; + QString label(int level = 0) const; + QUuid uuid(int level = 0) const; + private: + QVector m_label; + QVector m_uuid; + bool m_valid = false; +}; #endif // TERMINALSTRIP_H diff --git a/sources/TerminalStrip/ui/terminalstripeditor.cpp b/sources/TerminalStrip/ui/terminalstripeditor.cpp index b2c46c7e7..29fedb1ff 100644 --- a/sources/TerminalStrip/ui/terminalstripeditor.cpp +++ b/sources/TerminalStrip/ui/terminalstripeditor.cpp @@ -1,4 +1,4 @@ -/* +/* Copyright 2006-2021 The QElectroTech Team This file is part of QElectroTech. @@ -41,6 +41,7 @@ TerminalStripEditor::TerminalStripEditor(QETProject *project, QWidget *parent) : { ui->setupUi(this); buildTree(); + ui->m_terminal_strip_tw->expandRecursively(ui->m_terminal_strip_tw->rootIndex()); setUpUndoConnections(); } @@ -51,7 +52,6 @@ TerminalStripEditor::~TerminalStripEditor() { delete ui; } -#include void TerminalStripEditor::setUpUndoConnections() { connect(ui->m_terminal_strip_tw, &TerminalStripTreeWidget::terminalAddedToStrip, @@ -164,16 +164,22 @@ QTreeWidgetItem* TerminalStripEditor::addTerminalStrip(TerminalStrip *terminal_s //Add the terminal strip QStringList name{terminal_strip->name()}; - auto item = new QTreeWidgetItem(loc_qtwi, name, TerminalStripTreeWidget::Strip); - item->setData(0, TerminalStripTreeWidget::UUID_USER_ROLE, terminal_strip->uuid()); - item->setIcon(0, QET::Icons::TerminalStrip); + auto strip_item = new QTreeWidgetItem(loc_qtwi, name, TerminalStripTreeWidget::Strip); + strip_item->setData(0, TerminalStripTreeWidget::UUID_USER_ROLE, terminal_strip->uuid()); + strip_item->setIcon(0, QET::Icons::TerminalStrip); - //Add terminal owned by the strip - //for (auto terminal : terminal_strip->ter) + //Add child terminal of the strip + for (auto i=0 ; iphysicalTerminalCount() ; ++i) + { + auto index = terminal_strip->index(i); + auto term_item = new QTreeWidgetItem(strip_item, QStringList(index.label()), TerminalStripTreeWidget::Terminal); + term_item->setData(0, TerminalStripTreeWidget::UUID_USER_ROLE, index.uuid().toString()); + term_item->setIcon(0, QET::Icons::ElementTerminal); + } - m_item_strip_H.insert(item, terminal_strip); + m_item_strip_H.insert(strip_item, terminal_strip); m_uuid_strip_H.insert(terminal_strip->uuid(), terminal_strip); - return item; + return strip_item; } /**