/* Copyright 2006-2024 The QElectroTech Team This file is part of QElectroTech. QElectroTech is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. QElectroTech is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with QElectroTech. If not, see . */ #include "groupterminalscommand.h" #include "../physicalterminal.h" #include "../realterminal.h" /** * @brief GroupTerminalsCommand::GroupTerminalsCommand * @param strip : The parent strip of terminal to group * @param receiver : The terminal where other terminals will be grouped * @param to_group : Terminals to group */ GroupTerminalsCommand::GroupTerminalsCommand(TerminalStrip *strip, const QSharedPointer &receiver_, const QVector> &to_group, QUndoCommand *parent): QUndoCommand(parent), m_terminal_strip(strip), m_receiver(receiver_), m_to_group(to_group) { setText("Grouper un ensemble de bornes"); } void GroupTerminalsCommand::undo() { if (m_terminal_strip) { m_terminal_strip->unGroupTerminals(m_to_group); } } void GroupTerminalsCommand::redo() { if (m_terminal_strip) { m_terminal_strip->groupTerminals(m_receiver,m_to_group); } } UnGroupTerminalsCommand::UnGroupTerminalsCommand(TerminalStrip *strip, const QVector> &to_ungroup, QUndoCommand *parent) : QUndoCommand(parent), m_terminal_strip(strip) { setUp(to_ungroup); setText("Dégrouper un ensemble de bornes"); } void UnGroupTerminalsCommand::undo() { if (m_terminal_strip) { //First, re-group all terminals for (const auto &key : m_physical_real_H.keys()) { m_terminal_strip->groupTerminals(key, m_physical_real_H.value(key)); } //Second, set level. for (const auto &pair : qAsConst(m_real_t_level)) { m_terminal_strip->setLevel(pair.first, pair.second); } } } void UnGroupTerminalsCommand::redo() { if (m_terminal_strip) { for (const auto &value : qAsConst(m_physical_real_H)) { m_terminal_strip->unGroupTerminals(value); } } } void UnGroupTerminalsCommand::setUp(const QVector> &to_ungroup) { for (const auto &rt_ : to_ungroup) { if (auto phy_t = rt_->physicalTerminal()) { //Physical have only one real terminal, no need to ungroup it if (phy_t->realTerminalCount() <= 1) { continue; } auto vector_ = m_physical_real_H.value(phy_t); vector_.append(rt_); m_physical_real_H.insert(phy_t, vector_); m_real_t_level.append(qMakePair(rt_, phy_t->levelOf(rt_))); } } }