diff --git a/sources/TerminalStrip/UndoCommand/addterminaltostripcommand.cpp b/sources/TerminalStrip/UndoCommand/addterminaltostripcommand.cpp index f63afc516..7dcacb426 100644 --- a/sources/TerminalStrip/UndoCommand/addterminaltostripcommand.cpp +++ b/sources/TerminalStrip/UndoCommand/addterminaltostripcommand.cpp @@ -28,20 +28,36 @@ * @param parent : parent undo command */ AddTerminalToStripCommand::AddTerminalToStripCommand(QSharedPointer terminal, TerminalStrip *strip, QUndoCommand *parent) : - QUndoCommand(parent), - m_terminal(terminal), - m_new_strip(strip) + QUndoCommand{parent}, + m_terminal{terminal}, + m_new_strip{strip} { - auto t_label = terminal->label(); - auto ts_name = strip->name(); + const auto t_label = terminal->label(); + const auto ts_name = strip->name(); - auto str_1 = t_label.isEmpty() ? QObject::tr("Ajouter une borne") : + const auto str_1 = t_label.isEmpty() ? QObject::tr("Ajouter une borne") : QObject::tr("Ajouter la borne %1").arg(t_label); - auto str_2 = ts_name.isEmpty() ? QObject::tr("à un groupe de bornes") : + const auto str_2 = ts_name.isEmpty() ? QObject::tr("à un groupe de bornes") : QObject::tr("au groupe de bornes %1").arg(ts_name); - setText(str_1 + " " + str_2); + setText(str_1 + " " + str_2); +} + +AddTerminalToStripCommand::AddTerminalToStripCommand(QVector> terminals, TerminalStrip *strip, QUndoCommand *parent) : + QUndoCommand{parent}, + m_terminal{terminals}, + m_new_strip{strip} +{ + const auto ts_name = strip->name(); + + const auto str_1 = m_terminal.size() > 1 ? QObject::tr("Ajouter %1 bornes").arg(m_terminal.size()) : + QObject::tr("Ajouter une borne"); + + const auto str_2 = ts_name.isEmpty() ? QObject::tr("à un groupe de bornes") : + QObject::tr("au groupe de bornes %1").arg(ts_name); + + setText(str_1 + " " + str_2); } @@ -54,11 +70,9 @@ AddTerminalToStripCommand::~AddTerminalToStripCommand() */ void AddTerminalToStripCommand::undo() { - if (!m_terminal || - !m_new_strip) { - return; + if (m_new_strip) { + m_new_strip->removeTerminals(m_terminal); } - m_new_strip->removeTerminal(m_terminal); } /** @@ -67,11 +81,9 @@ void AddTerminalToStripCommand::undo() */ void AddTerminalToStripCommand::redo() { - if (!m_terminal || - !m_new_strip) { - return; + if (m_new_strip) { + m_new_strip->addTerminals(m_terminal); } - m_new_strip->addTerminal(m_terminal); } /** @@ -83,38 +95,29 @@ void AddTerminalToStripCommand::redo() RemoveTerminalFromStripCommand::RemoveTerminalFromStripCommand(QSharedPointer terminal, TerminalStrip *strip, QUndoCommand *parent) : - QUndoCommand(parent), - m_terminals(terminal->realTerminals()), - m_strip(strip) -{ - QString t_label; - for (const auto &real_t : m_terminals) { - if (!t_label.isEmpty()) - t_label.append(", "); - t_label.append(real_t->label()); + QUndoCommand{parent}, + m_strip{strip} +{ + m_terminals.append(terminal->realTerminals()); + setCommandTitle(); +} + +RemoveTerminalFromStripCommand::RemoveTerminalFromStripCommand(const QVector > &phy_t_vector, + TerminalStrip *strip, + QUndoCommand *parent): + QUndoCommand{parent}, + m_strip{strip} +{ + for (const auto &phy_t : phy_t_vector) { + m_terminals.append(phy_t->realTerminals()); } - - auto strip_name = strip->name(); - - auto str_1 = t_label.isEmpty() ? QObject::tr("Enlever une borne") : - QObject::tr("Enlever la borne %1").arg(t_label); - - auto str_2 = strip_name.isEmpty() ? QObject::tr("d'un groupe de bornes") : - QObject::tr("du groupe de bornes %1").arg(strip_name); - setText(str_1 + " " + str_2); + setCommandTitle(); } void RemoveTerminalFromStripCommand::undo() { - if (m_strip) - { - for (const auto &real_t : m_terminals) { - m_strip->addTerminal(real_t); - } - auto phy_t = m_terminals.first()->physicalTerminal(); - if (phy_t) { - m_strip->groupTerminals(phy_t, m_terminals); - } + if (m_strip) { + m_strip->addAndGroupTerminals(m_terminals); } } @@ -122,12 +125,27 @@ void RemoveTerminalFromStripCommand::redo() { if (m_strip) { - for (const auto & real_t : m_terminals) { - m_strip->removeTerminal(real_t); + QVector> real_t; + for (const auto &real_t_vector : qAsConst(m_terminals)) { + real_t.append(real_t_vector); } + + m_strip->removeTerminals(real_t); } } +void RemoveTerminalFromStripCommand::setCommandTitle() +{ + const auto strip_name = m_strip->name(); + + const auto str_1 = m_terminals.size()>1 ? QObject::tr("Enlever %1 bornes").arg(m_terminals.size()): + QObject::tr("Enlever une borne"); + + const auto str_2 = strip_name.isEmpty() ? QObject::tr("d'un groupe de bornes") : + QObject::tr("du groupe de bornes %1").arg(strip_name); + setText(str_1 + " " + str_2); +} + /** * @brief MoveTerminalCommand::MoveTerminalCommand * @param terminal @@ -137,10 +155,10 @@ void RemoveTerminalFromStripCommand::redo() */ MoveTerminalCommand::MoveTerminalCommand(QSharedPointer terminal, TerminalStrip *old_strip, TerminalStrip *new_strip, QUndoCommand *parent) : - QUndoCommand (parent), - m_terminal(terminal), - m_old_strip(old_strip), - m_new_strip(new_strip) + QUndoCommand {parent}, + m_terminal {terminal}, + m_old_strip {old_strip}, + m_new_strip {new_strip} { QString t_label; for (auto real_t : terminal->realTerminals()) { @@ -163,28 +181,45 @@ MoveTerminalCommand::MoveTerminalCommand(QSharedPointer termin setText(str_1 + " " + str_2 + " " + str_3); } +MoveTerminalCommand::MoveTerminalCommand(QVector> terminals, TerminalStrip *old_strip, + TerminalStrip *new_strip, QUndoCommand *parent) : + QUndoCommand {parent}, + m_terminal {terminals}, + m_old_strip {old_strip}, + m_new_strip {new_strip} + +{ + const auto strip_name = old_strip->name(); + const auto new_strip_name = new_strip->name(); + + const auto str_1 = m_terminal.size() > 1 ? QObject::tr("Déplacer des bornes") : + QObject::tr("Déplacer une borne"); + + const auto str_2 = strip_name.isEmpty() ? QObject::tr(" d'un groupe de bornes") : + QObject::tr(" du groupe de bornes %1").arg(strip_name); + + const auto str_3 = new_strip_name.isEmpty() ? QObject::tr("vers un groupe de bornes") : + QObject::tr("vers le groupe de bornes %1").arg(new_strip_name); + + setText(str_1 + " " + str_2 + " " + str_3); +} + void MoveTerminalCommand::undo() { - if (m_terminal) - { - if (m_new_strip) { - m_new_strip->removeTerminal(m_terminal); - } - if (m_old_strip) { - m_old_strip->addTerminal(m_terminal); - } + if (m_new_strip) { + m_new_strip->removeTerminals(m_terminal); + } + if (m_old_strip) { + m_old_strip->addTerminals(m_terminal); } } void MoveTerminalCommand::redo() { - if (m_terminal) - { - if (m_old_strip) { - m_old_strip->removeTerminal(m_terminal); - } - if (m_new_strip) { - m_new_strip->addTerminal(m_terminal); - } + if (m_old_strip) { + m_old_strip->removeTerminals(m_terminal); + } + if (m_new_strip) { + m_new_strip->addTerminals(m_terminal); } } diff --git a/sources/TerminalStrip/UndoCommand/addterminaltostripcommand.h b/sources/TerminalStrip/UndoCommand/addterminaltostripcommand.h index 1e93347d7..f44772e11 100644 --- a/sources/TerminalStrip/UndoCommand/addterminaltostripcommand.h +++ b/sources/TerminalStrip/UndoCommand/addterminaltostripcommand.h @@ -38,13 +38,14 @@ class AddTerminalToStripCommand : public QUndoCommand { public: AddTerminalToStripCommand(QSharedPointer terminal, TerminalStrip *strip, QUndoCommand *parent = nullptr); + AddTerminalToStripCommand(QVector> terminals, TerminalStrip *strip, QUndoCommand *parent = nullptr); ~AddTerminalToStripCommand() override; void undo() override; void redo() override; private: - QSharedPointer m_terminal; + QVector> m_terminal; QPointer m_new_strip; }; @@ -57,13 +58,17 @@ class RemoveTerminalFromStripCommand : public QUndoCommand { public: RemoveTerminalFromStripCommand (QSharedPointer terminal, TerminalStrip *strip, QUndoCommand *parent = nullptr); + RemoveTerminalFromStripCommand (const QVector> &phy_t_vector, TerminalStrip *strip, QUndoCommand *parent = nullptr); ~RemoveTerminalFromStripCommand() override {} void undo() override; void redo() override; private: - QVector> m_terminals; + void setCommandTitle(); + + private: + QVector>> m_terminals; QPointer m_strip; }; @@ -72,12 +77,14 @@ class MoveTerminalCommand : public QUndoCommand public: MoveTerminalCommand (QSharedPointer terminal, TerminalStrip *old_strip, TerminalStrip *new_strip, QUndoCommand *parent = nullptr); + MoveTerminalCommand (QVector> terminals, TerminalStrip *old_strip, + TerminalStrip *new_strip, QUndoCommand *parent = nullptr); void undo() override; void redo() override; private: - const QSharedPointer m_terminal; + const QVector> m_terminal; QPointer m_old_strip, m_new_strip; }; diff --git a/sources/TerminalStrip/realterminal.cpp b/sources/TerminalStrip/realterminal.cpp index b2774cea0..c2a761850 100644 --- a/sources/TerminalStrip/realterminal.cpp +++ b/sources/TerminalStrip/realterminal.cpp @@ -19,6 +19,7 @@ #include "terminalstrip.h" #include "../qetgraphicsitem/terminalelement.h" #include "physicalterminal.h" +#include "../qetgraphicsitem/conductor.h" /** * @brief RealTerminal @@ -175,6 +176,13 @@ QString RealTerminal::cableWire() const { * @return */ QString RealTerminal::conductor() const { + if (m_element) + { + const auto conductors_{m_element->conductors()}; + if (conductors_.size()) { + return conductors_.first()->properties().text; + } + } return QString(); } diff --git a/sources/TerminalStrip/terminalstrip.cpp b/sources/TerminalStrip/terminalstrip.cpp index ff0fb6262..629cd7be9 100644 --- a/sources/TerminalStrip/terminalstrip.cpp +++ b/sources/TerminalStrip/terminalstrip.cpp @@ -121,6 +121,62 @@ bool TerminalStrip::addTerminal(QSharedPointer real_t) return true; } +/** + * @brief TerminalStrip::addTerminals + * Add terminal in @a real_t_vector to this terminal + * @param real_t_vector + */ +void TerminalStrip::addTerminals(QVector> real_t_vector) +{ + bool added_{false}; + for (const auto &real_t : real_t_vector) + { + if (real_t->parentStrip()) { + continue; + } + + auto raw_phy_ptr = new PhysicalTerminal(this, QVector>{real_t}); + m_physical_terminals.append(raw_phy_ptr->sharedRef()); + added_ = true; + } + + if (added_) { + emit orderChanged(); + } +} + +/** + * @brief TerminalStrip::addAndGroupTerminals + * For each real terminals of second vector, add it to terminal strip and group + * them together + * @param real_t_vector + */ +void TerminalStrip::addAndGroupTerminals(const QVector>> &real_t_vector) +{ + QVector> vector_; + bool added_{false}; + + for (const auto &t_vector : real_t_vector) + { + vector_.clear(); + for (const auto &real_t : t_vector) + { + if (real_t->parentStrip()) { + continue; + } + vector_.append(real_t); + } + + auto raw_phy_ptr = new PhysicalTerminal(this, vector_); + m_physical_terminals.append(raw_phy_ptr->sharedRef()); + added_ = true; + } + + if (added_) { + emit orderChanged(); + } +} + bool TerminalStrip::removeTerminal(QSharedPointer real_t) { if (real_t->parentStrip() != this) { @@ -145,6 +201,39 @@ bool TerminalStrip::removeTerminal(QSharedPointer real_t) return false; } +/** + * @brief TerminalStrip::removeTerminals + * Remove terminals in @a real_t_vector from this terminal strip + * @param real_t_vector + */ +void TerminalStrip::removeTerminals(QVector> real_t_vector) +{ + bool removed_{false}; + for (const auto &real_t : real_t_vector) + { + if (real_t->parentStrip() != this) { + continue; + } + + if (auto bridge_ = real_t->bridge()) { + bridge_->removeTerminal(real_t); + } + + if (auto phy_t = real_t->physicalTerminal()) + { + phy_t->removeTerminal(real_t); + if (phy_t->realTerminalCount() == 0) { + m_physical_terminals.removeOne(phy_t); + } + removed_ = true; + } + } + + if (removed_) { + emit orderChanged(); + } +} + /** * @brief TerminalStrip::addTerminal * Add terminal to this terminal strip @@ -225,6 +314,25 @@ bool TerminalStrip::addTerminal(QSharedPointer phy_t) } +void TerminalStrip::addTerminals(QVector > phy_t_vector) +{ + bool added_{false}; + for (const auto &phy_t : phy_t_vector) + { + if (phy_t->terminalStrip()) { + continue; + } + + m_physical_terminals.append(phy_t); + phy_t->setParentStrip(this); + added_ = true; + } + + if (added_) { + emit orderChanged(); + } +} + /** * @brief TerminalStrip::removeTerminal * Remove @a phy_t from this terminal strip. @@ -250,6 +358,29 @@ bool TerminalStrip::removeTerminal(QSharedPointer phy_t) return false; } +void TerminalStrip::removeTerminals(QVector > phy_t_vector) +{ + bool removed_{false}; + for (const auto &phy_t : phy_t_vector) + { + if (m_physical_terminals.removeOne(phy_t)) + { + for (const auto &real_t : phy_t->realTerminals()) { + if (auto bridge_ = real_t->bridge()) { + bridge_->removeTerminal(real_t); + } + } + + phy_t->setParentStrip(nullptr); + removed_ = true; + } + } + + if (removed_) { + emit orderChanged(); + } +} + /** * @brief TerminalStrip::pos * @param terminal diff --git a/sources/TerminalStrip/terminalstrip.h b/sources/TerminalStrip/terminalstrip.h index 2934ee999..91ce35889 100644 --- a/sources/TerminalStrip/terminalstrip.h +++ b/sources/TerminalStrip/terminalstrip.h @@ -78,12 +78,17 @@ class TerminalStrip : public QObject TerminalStripData data() const; void setData(const TerminalStripData &data); - bool addTerminal (QSharedPointer real_t); + bool addTerminal (QSharedPointer real_t); + void addTerminals (QVector> real_t_vector); + void addAndGroupTerminals (const QVector>> &real_t_vector); bool removeTerminal (QSharedPointer real_t); + void removeTerminals (QVector> real_t_vector); bool addTerminal (Element *terminal); bool removeTerminal (Element *terminal); bool addTerminal (QSharedPointer phy_t); - bool removeTerminal(QSharedPointer phy_t); + void addTerminals (QVector> phy_t_vector); + bool removeTerminal (QSharedPointer phy_t); + void removeTerminals (QVector> phy_t_vector); int pos(const QSharedPointer &terminal) const; int physicalTerminalCount() const; diff --git a/sources/TerminalStrip/ui/freeterminaleditor.cpp b/sources/TerminalStrip/ui/freeterminaleditor.cpp index 674b1540a..37ca1ac4d 100644 --- a/sources/TerminalStrip/ui/freeterminaleditor.cpp +++ b/sources/TerminalStrip/ui/freeterminaleditor.cpp @@ -239,12 +239,7 @@ void FreeTerminalEditor::on_m_move_pb_clicked() return; } - //Apply action with an undo command - auto parent_undo = new QUndoCommand(tr("Déplacer des bornes à un groupe de bornes")); - for (const auto &rt_ : real_t_vector) { - new AddTerminalToStripCommand(rt_, terminal_strip, parent_undo); - } - m_project->undoStack()->push(parent_undo); + m_project->undoStack()->push(new AddTerminalToStripCommand(real_t_vector, terminal_strip)); reload(); } diff --git a/sources/TerminalStrip/ui/freeterminalmodel.cpp b/sources/TerminalStrip/ui/freeterminalmodel.cpp index a05542b12..4bd5f241b 100644 --- a/sources/TerminalStrip/ui/freeterminalmodel.cpp +++ b/sources/TerminalStrip/ui/freeterminalmodel.cpp @@ -22,6 +22,7 @@ #include "../../utils/qetutils.h" #include "../../qetgraphicsitem/terminalelement.h" #include "../realterminal.h" +#include "../../qetinformation.h" const int LABEL_CELL = 0; const int XREF_CELL = 1; @@ -29,7 +30,7 @@ const int TYPE_CELL = 2; const int FUNCTION_CELL = 3; const int LED_CELL = 4; -const int ROW_COUNT = 5; +const int COLUMN_COUNT = 5; static QVector UNMODIFIED_CELL_VECTOR{false, false, false, false, false}; @@ -79,7 +80,7 @@ int FreeTerminalModel::rowCount(const QModelIndex &parent) const int FreeTerminalModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent) - return ROW_COUNT; + return COLUMN_COUNT; } /** @@ -310,7 +311,8 @@ void FreeTerminalModel::fillTerminalVector() std::sort(free_terminal_vector.begin(), free_terminal_vector.end(), [](TerminalElement *a, TerminalElement *b) { - return QETUtils::sortBeginIntString(a->actualLabel(), b->actualLabel()); + return QETUtils::sortBeginIntString(a->elementData().m_informations.value(QETInformation::ELMT_LABEL).toString(), + b->elementData().m_informations.value(QETInformation::ELMT_LABEL).toString()); }); for (const auto &terminal_ : free_terminal_vector) { diff --git a/sources/TerminalStrip/ui/terminalstripeditor.cpp b/sources/TerminalStrip/ui/terminalstripeditor.cpp index eed16a029..5809ee512 100644 --- a/sources/TerminalStrip/ui/terminalstripeditor.cpp +++ b/sources/TerminalStrip/ui/terminalstripeditor.cpp @@ -709,22 +709,15 @@ void TerminalStripEditor::on_m_move_to_pb_clicked() return; } - auto undo_stack{m_current_strip->project()->undoStack()}; const auto uuid_{ui->m_move_to_cb->currentData().toUuid()}; //Uuid is null we move the selected terminal to indepandant terminal - if (uuid_.isNull()) - { - undo_stack->beginMacro(tr("Retirer des bornes d'un bornier")); - for (const auto &phy_ : phy_vector) { - undo_stack->push(new RemoveTerminalFromStripCommand(phy_, m_current_strip)); - } - undo_stack->endMacro(); + if (uuid_.isNull()) { + m_current_strip->project()->undoStack()->push(new RemoveTerminalFromStripCommand(phy_vector, m_current_strip)); } else { TerminalStrip *receiver_strip{nullptr}; - const auto strip_vector = m_current_strip->project()->terminalStrip(); - for (const auto &strip_ : strip_vector) + for (const auto &strip_ : m_current_strip->project()->terminalStrip()) { if (strip_->uuid() == uuid_) { receiver_strip = strip_; @@ -736,11 +729,7 @@ void TerminalStripEditor::on_m_move_to_pb_clicked() return; } - undo_stack->beginMacro(tr("Déplacer des bornes d'un bornier à un autre")); - for (const auto &phy_ : phy_vector) { - undo_stack->push(new MoveTerminalCommand(phy_, m_current_strip, receiver_strip)); - } - undo_stack->endMacro(); + m_current_strip->project()->undoStack()->push(new MoveTerminalCommand(phy_vector, m_current_strip, receiver_strip)); } } diff --git a/sources/TerminalStrip/ui/terminalstripmodel.cpp b/sources/TerminalStrip/ui/terminalstripmodel.cpp index e582dd6d9..fe37ea7da 100644 --- a/sources/TerminalStrip/ui/terminalstripmodel.cpp +++ b/sources/TerminalStrip/ui/terminalstripmodel.cpp @@ -39,15 +39,15 @@ const int LEVEL_1_CELL = 3; const int LEVEL_2_CELL = 4; const int LEVEL_3_CELL = 5; const int LABEL_CELL = 6; -const int XREF_CELL = 7; -const int CABLE_CELL = 8; -const int CABLE_WIRE_CELL = 9; -const int TYPE_CELL = 10; -const int FUNCTION_CELL = 11; -const int LED_CELL = 12; -const int CONDUCTOR_CELL = 13; +const int CONDUCTOR_CELL = 7; +const int XREF_CELL = 8; +const int CABLE_CELL = 9; +const int CABLE_WIRE_CELL = 10; +const int TYPE_CELL = 11; +const int FUNCTION_CELL = 12; +const int LED_CELL = 13; -const int ROW_COUNT = 13; +const int COLUMN_COUNT = 14; static QVector UNMODIFIED_CELL_VECTOR{false, false, false, false, false, false, false, false, false, false, false, false, false, false}; @@ -86,13 +86,13 @@ TerminalStripModel::Column TerminalStripModel::columnTypeForIndex(const QModelIn case 4 : return Level2; case 5 : return Level3; case 6 : return Label; - case 7 : return XRef; - case 8 : return Cable; - case 9 : return CableWire; - case 10 : return Type; - case 11 : return Function; - case 12 : return Led; - case 13 : return Conductor; + case 7 : return Conductor; + case 8 : return XRef; + case 9 : return Cable; + case 10 : return CableWire; + case 11 : return Type; + case 12 : return Function; + case 13 : return Led; default : return Invalid; } } @@ -146,7 +146,7 @@ int TerminalStripModel::rowCount(const QModelIndex &parent) const int TerminalStripModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent) - return ROW_COUNT; + return COLUMN_COUNT; } QVariant TerminalStripModel::data(const QModelIndex &index, int role) const @@ -164,12 +164,12 @@ QVariant TerminalStripModel::data(const QModelIndex &index, int role) const case POS_CELL : return physicalDataAtIndex(index.row()).pos_; case LEVEL_CELL : return mrtd.level_; case LABEL_CELL : return mrtd.label_; + case CONDUCTOR_CELL : return mrtd.conductor_; case XREF_CELL : return mrtd.Xref_; case CABLE_CELL : return mrtd.cable_; case CABLE_WIRE_CELL : return mrtd.cable_wire; case TYPE_CELL : return ElementData::translatedTerminalType(mrtd.type_); case FUNCTION_CELL : return ElementData::translatedTerminalFunction(mrtd.function_); - case CONDUCTOR_CELL : return mrtd.conductor_; default : return QVariant(); } } @@ -287,13 +287,13 @@ QVariant TerminalStripModel::headerData(int section, Qt::Orientation orientation case LEVEL_2_CELL: return QStringLiteral("2"); case LEVEL_3_CELL: return QStringLiteral("3"); case LABEL_CELL: return tr("Label"); + case CONDUCTOR_CELL: return tr("Numéro de conducteur"); case XREF_CELL: return tr("Référence croisé"); case CABLE_CELL: return tr("Câble"); case CABLE_WIRE_CELL: return tr("Couleur / numéro de fil câble"); case TYPE_CELL: return tr("Type"); case FUNCTION_CELL : return tr("Fonction"); case LED_CELL: return tr("led"); - case CONDUCTOR_CELL: return tr("Numéro de conducteur"); default : return QVariant(); } } diff --git a/sources/TerminalStrip/ui/terminalstripmodel.h b/sources/TerminalStrip/ui/terminalstripmodel.h index dbe3ae720..d1d88f1f5 100644 --- a/sources/TerminalStrip/ui/terminalstripmodel.h +++ b/sources/TerminalStrip/ui/terminalstripmodel.h @@ -54,13 +54,13 @@ class TerminalStripModel : public QAbstractTableModel Level2 = 4, Level3 = 5, Label = 6, - XRef = 7, - Cable = 8, - CableWire = 9, - Type = 10, - Function = 11, - Led = 12, - Conductor = 13, + Conductor = 7, + XRef = 8, + Cable = 9, + CableWire = 10, + Type = 11, + Function = 12, + Led = 13, Invalid = 99 }; diff --git a/sources/TerminalStrip/ui/terminalstriptreedockwidget.cpp b/sources/TerminalStrip/ui/terminalstriptreedockwidget.cpp index 3ec09f04f..ed4dae6e6 100644 --- a/sources/TerminalStrip/ui/terminalstriptreedockwidget.cpp +++ b/sources/TerminalStrip/ui/terminalstriptreedockwidget.cpp @@ -26,6 +26,7 @@ #include "../realterminal.h" #include "../../qetgraphicsitem/terminalelement.h" #include "../terminalstrip.h" +#include "../../qetinformation.h" TerminalStripTreeDockWidget::TerminalStripTreeDockWidget(QETProject *project, QWidget *parent) : QDockWidget(parent), @@ -176,17 +177,26 @@ void TerminalStripTreeDockWidget::on_m_tree_view_currentItemChanged(QTreeWidgetI } TerminalStrip *strip_ = nullptr; - if (current->type() == Strip) { + bool current_is_free{false}; + const auto current_type{current->type()}; + if (current_type == Strip) { strip_ = m_item_strip_H.value(current); } - else if (current->type() == Terminal - && current->parent() - && current->parent()->type() == Strip) { - strip_ = m_item_strip_H.value(current->parent()); + else if (current_type == Terminal && current->parent()) + { + const auto parent_type{current->parent()->type()}; + if (parent_type == Strip) { + strip_ = m_item_strip_H.value(current->parent()); + } else if (parent_type == FreeTerminal) { + current_is_free = true; + } } if (strip_ != m_current_strip) { setCurrentStrip(strip_); + } else if (current_is_free != m_current_is_free_terminal) { + m_current_is_free_terminal = current_is_free; + emit currentStripChanged(nullptr); } } @@ -305,8 +315,11 @@ void TerminalStripTreeDockWidget::addFreeTerminal() } //Sort the terminal element by label - std::sort(vector_.begin(), vector_.end(), [](TerminalElement *a, TerminalElement *b) { - return a->actualLabel() < b->actualLabel(); + std::sort(vector_.begin(), vector_.end(), [](TerminalElement *a, TerminalElement *b) + { + return a->elementData().m_informations.value(QETInformation::ELMT_LABEL).toString() + < + b->elementData().m_informations.value(QETInformation::ELMT_LABEL).toString(); }); auto free_terminal_item = ui->m_tree_view->topLevelItem(1); diff --git a/sources/TerminalStrip/ui/terminalstriptreedockwidget.h b/sources/TerminalStrip/ui/terminalstriptreedockwidget.h index 586d212a1..c03ca2ff7 100644 --- a/sources/TerminalStrip/ui/terminalstriptreedockwidget.h +++ b/sources/TerminalStrip/ui/terminalstriptreedockwidget.h @@ -78,6 +78,7 @@ class TerminalStripTreeDockWidget : public QDockWidget QHash> m_uuid_terminal_H; QHash> m_uuid_strip_H; QVector m_strip_changed_connection; + bool m_current_is_free_terminal{false}; }; #endif // TERMINALSTRIPTREEDOCKWIDGET_H diff --git a/sources/elementprovider.cpp b/sources/elementprovider.cpp index f4e84abbf..35d01ae46 100644 --- a/sources/elementprovider.cpp +++ b/sources/elementprovider.cpp @@ -198,14 +198,17 @@ 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)) { + for (const auto &diagram : qAsConst(m_diagram_list)) + { + const auto elmt_list{diagram->elements()}; + + for (const auto element : elmt_list) + { if (element->elementData().m_type == ElementData::Terminale) { - auto te = static_cast(element); + const auto te{static_cast(element)}; if (!te->parentTerminalStrip()) { - vector_.append(static_cast(element)); + vector_.append(te); } } }