diff --git a/sources/TerminalStrip/ui/terminalstripeditor.cpp b/sources/TerminalStrip/ui/terminalstripeditor.cpp index ba417e954..1323af644 100644 --- a/sources/TerminalStrip/ui/terminalstripeditor.cpp +++ b/sources/TerminalStrip/ui/terminalstripeditor.cpp @@ -20,6 +20,8 @@ #include "terminalstripcreatordialog.h" #include "../../qetproject.h" #include "../terminalstrip.h" +#include "../elementprovider.h" +#include "../qetgraphicsitem/terminalelement.h" #include @@ -54,16 +56,20 @@ void TerminalStripEditor::buildTree() auto title = m_project->title(); if (title.isEmpty()) { - title = tr("Projet : sans titre"); + title = tr("Projet sans titre"); } QStringList strl{title}; - new QTreeWidgetItem(ui->m_terminal_strip_tw, strl, TerminalStripEditor::Root); + new QTreeWidgetItem(ui->m_terminal_strip_tw, strl, TerminalStripEditor::Root); + + QStringList ftstrl(tr("Bornes indépendante")); + new QTreeWidgetItem(ui->m_terminal_strip_tw, ftstrl, TerminalStripEditor::FreeTerminal); const auto ts_vector = m_project->terminalStrip(); for (const auto ts : ts_vector) { addTerminalStrip(ts); } + addFreeTerminal(); } /** @@ -114,6 +120,34 @@ QTreeWidgetItem* TerminalStripEditor::addTerminalStrip(TerminalStrip *terminal_s return new QTreeWidgetItem(loc_qtwi, name, TerminalStripEditor::Strip); } +/** + * @brief TerminalStripEditor::addFreeTerminal + * Add free terminal (aka terminal which not belong to a terminal strip) + * in the tree widget + */ +void TerminalStripEditor::addFreeTerminal() +{ + ElementProvider ep(m_project); + auto vector_ = ep.freeTerminal(); + + if (vector_.isEmpty()) { + return; + } + + //Sort the terminal element by label + std::sort(vector_.begin(), vector_.end(), [](TerminalElement *a, TerminalElement *b) { + return a->actualLabel() < b->actualLabel(); + }); + + auto free_terminal_item = ui->m_terminal_strip_tw->topLevelItem(1); + + for (const auto terminal : qAsConst(vector_)) + { + QStringList strl{terminal->actualLabel()}; + new QTreeWidgetItem(free_terminal_item, strl, TerminalStripEditor::FreeTerminal); + } +} + /** * @brief TerminalStripEditor::on_m_add_terminal_strip_pb_clicked * Action when user click on add terminal strip button diff --git a/sources/TerminalStrip/ui/terminalstripeditor.h b/sources/TerminalStrip/ui/terminalstripeditor.h index 99312e0ba..a96cfef36 100644 --- a/sources/TerminalStrip/ui/terminalstripeditor.h +++ b/sources/TerminalStrip/ui/terminalstripeditor.h @@ -27,6 +27,7 @@ namespace Ui { class QETProject; class TerminalStrip; class QTreeWidgetItem; +class TerminalElement; /** * @brief The TerminalStripEditor class @@ -39,6 +40,7 @@ class TerminalStripEditor : public QDialog enum TreeWidgetType{ Root, + FreeTerminal, Inst, Loc, Strip @@ -51,6 +53,7 @@ class TerminalStripEditor : public QDialog private: void buildTree(); QTreeWidgetItem* addTerminalStrip(TerminalStrip *terminal_strip); + void addFreeTerminal(); private slots: void on_m_add_terminal_strip_pb_clicked(); diff --git a/sources/TerminalStrip/ui/terminalstripeditor.ui b/sources/TerminalStrip/ui/terminalstripeditor.ui index 9b0f2ffde..87c211cda 100644 --- a/sources/TerminalStrip/ui/terminalstripeditor.ui +++ b/sources/TerminalStrip/ui/terminalstripeditor.ui @@ -11,7 +11,7 @@ - Form + Gestionnaire de borniers diff --git a/sources/elementprovider.cpp b/sources/elementprovider.cpp index 83c98dab0..d530f32ae 100644 --- a/sources/elementprovider.cpp +++ b/sources/elementprovider.cpp @@ -20,6 +20,7 @@ #include "diagram.h" #include "qetgraphicsitem/ViewItem/qetgraphicstableitem.h" #include "qetgraphicsitem/element.h" +#include "qetgraphicsitem/terminalelement.h" #include "qetproject.h" #include @@ -181,3 +182,28 @@ QetGraphicsTableItem *ElementProvider::tableFromUuid(const QUuid &uuid) return nullptr; } + +/** + * @brief ElementProvider::freeTerminal + * @return a vector of every terminals element who doesn't + * belong to a terminal strip. + */ +QVector ElementProvider::freeTerminal() const +{ + QVector vector_; + + for (const auto diagram : m_diagram_list) { + DiagramContent dc(diagram, false); + for (const auto element : qAsConst(dc.m_elements)) { + if (element->elementData().m_type == ElementData::Terminale) + { + auto te = static_cast(element); + if (!te->parentTerminalStrip()) { + vector_.append(static_cast(element)); + } + } + } + } + + return vector_; +} diff --git a/sources/elementprovider.h b/sources/elementprovider.h index 15954dd45..9fbbabd4a 100644 --- a/sources/elementprovider.h +++ b/sources/elementprovider.h @@ -26,6 +26,7 @@ class QETProject; class Diagram; class Element; class QetGraphicsTableItem; +class TerminalElement; /** this class can search in the given diagram or project some kind of element @@ -43,6 +44,7 @@ class ElementProvider QList find(const int filter) const; QVector table(QetGraphicsTableItem *table = nullptr, QAbstractItemModel *model = nullptr); QetGraphicsTableItem *tableFromUuid(const QUuid &uuid); + QVector freeTerminal() const; private: QList m_diagram_list;