Display terminals owned by terminal strip in the tree view

This commit is contained in:
joshua
2021-04-29 20:31:53 +02:00
parent b158984464
commit 2572e1c25d
3 changed files with 131 additions and 20 deletions

View File

@@ -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<Element> m_element;
QPointer<TerminalStrip> 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<RealTerminal> 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<PhysicalTerminal> 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);
}

View File

@@ -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> realTerminal(Element *terminal);
@@ -66,8 +70,23 @@ class TerminalStrip : public QObject
QVector<QSharedPointer<PhysicalTerminal>> 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<QString> m_label;
QVector<QUuid> m_uuid;
bool m_valid = false;
};
#endif // TERMINALSTRIP_H

View File

@@ -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 <QHashIterator>
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 ; i<terminal_strip->physicalTerminalCount() ; ++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;
}
/**