diff --git a/sources/TerminalStrip/ui/freeterminaleditor.cpp b/sources/TerminalStrip/ui/freeterminaleditor.cpp index c2f3d9ed2..674b1540a 100644 --- a/sources/TerminalStrip/ui/freeterminaleditor.cpp +++ b/sources/TerminalStrip/ui/freeterminaleditor.cpp @@ -22,6 +22,8 @@ #include "../../diagram.h" #include "../../elementprovider.h" #include "freeterminalmodel.h" +#include "../terminalstrip.h" +#include "../UndoCommand/addterminaltostripcommand.h" /** * @brief FreeTerminalEditor::FreeTerminalEditor @@ -40,6 +42,11 @@ FreeTerminalEditor::FreeTerminalEditor(QETProject *project, QWidget *parent) : ui->m_table_view->setModel(m_model); ui->m_table_view->setCurrentIndex(m_model->index(0,0)); + //Disabled the move if the table is currently edited (yellow cell) + connect(m_model, &FreeTerminalModel::dataChanged, this, [=] { + this->setDisabledMove(); + }); + connect(ui->m_table_view, &QAbstractItemView::doubleClicked, this, [=](const QModelIndex &index) { if (m_model->columnTypeForIndex(index) == FreeTerminalModel::XRef) @@ -78,8 +85,21 @@ FreeTerminalEditor::~FreeTerminalEditor() * the current state of the project. * Every not applied change will be lost. */ -void FreeTerminalEditor::reload() { +void FreeTerminalEditor::reload() +{ m_model->clear(); + ui->m_move_in_cb->clear(); + + if (m_project) + { + const auto strip_vector = m_project->terminalStrip(); + for (const auto &strip : strip_vector) + { + QString str(strip->installation() + " " + strip->location() + " " + strip->name()); + ui->m_move_in_cb->addItem(str, strip->uuid()); + } + setDisabledMove(false); + } } /** @@ -141,7 +161,7 @@ void FreeTerminalEditor::on_m_type_cb_activated(int index) default: override_type = ElementData::TTGeneric; break; } - m_model->setData(type_index, override_type); + m_model->setData(type_index, override_type); } } } @@ -195,3 +215,44 @@ void FreeTerminalEditor::on_m_led_cb_activated(int index) } } + +void FreeTerminalEditor::on_m_move_pb_clicked() +{ + //Get the selected real terminal + const auto index_list = ui->m_table_view->selectionModel()->selectedIndexes(); + const auto real_t_vector = m_model->realTerminalForIndex(index_list); + if (real_t_vector.isEmpty()) { + return; + } + + //Get the terminal strip who receive the real terminal + const auto strip_uuid = ui->m_move_in_cb->currentData().toUuid(); + TerminalStrip *terminal_strip{nullptr}; + for (const auto &strip : m_project->terminalStrip()) { + if (strip->uuid() == strip_uuid) { + terminal_strip = strip; + break; + } + } + + if (!terminal_strip) { + 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); + + reload(); +} + +void FreeTerminalEditor::setDisabledMove(bool b) +{ + ui->m_move_label->setDisabled(b); + ui->m_move_in_cb->setDisabled(b); + ui->m_move_pb->setDisabled(b); +} + diff --git a/sources/TerminalStrip/ui/freeterminaleditor.h b/sources/TerminalStrip/ui/freeterminaleditor.h index 0ccb7f05a..3460778c4 100644 --- a/sources/TerminalStrip/ui/freeterminaleditor.h +++ b/sources/TerminalStrip/ui/freeterminaleditor.h @@ -44,9 +44,11 @@ class FreeTerminalEditor : public QWidget void on_m_type_cb_activated(int index); void on_m_function_cb_activated(int index); void on_m_led_cb_activated(int index); + void on_m_move_pb_clicked(); private: void selectionChanged(); + void setDisabledMove(bool b=true); private: Ui::FreeTerminalEditor *ui; diff --git a/sources/TerminalStrip/ui/freeterminaleditor.ui b/sources/TerminalStrip/ui/freeterminaleditor.ui index 027e20eff..f464b3e1d 100644 --- a/sources/TerminalStrip/ui/freeterminaleditor.ui +++ b/sources/TerminalStrip/ui/freeterminaleditor.ui @@ -6,48 +6,97 @@ 0 0 - 751 - 333 + 727 + 279 Form - - - - - Générique - - - - - Phase - - - - - Neutre - - - - - + Déplacer dans : - + + + + + 0 + 0 + + + + QComboBox::AdjustToContents + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + true + + + + + + + Type : + + + + + + + Fonction : + + + + + + + LED : + + + + + + + Appliquer le déplacement + + + + + + + :/ico/22x22/dialog-ok.png:/ico/22x22/dialog-ok.png + + + + Qt::Horizontal - + @@ -76,28 +125,26 @@ - - - - Fonction : - + + + + + Générique + + + + + Phase + + + + + Neutre + + - - - - Type : - - - - - - - LED : - - - - + @@ -111,31 +158,10 @@ - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - true - - - - + + + diff --git a/sources/TerminalStrip/ui/freeterminalmodel.cpp b/sources/TerminalStrip/ui/freeterminalmodel.cpp index 1ff845036..a05542b12 100644 --- a/sources/TerminalStrip/ui/freeterminalmodel.cpp +++ b/sources/TerminalStrip/ui/freeterminalmodel.cpp @@ -275,6 +275,30 @@ modelRealTerminalData FreeTerminalModel::dataAtRow(int row) const } } +/** + * @brief FreeTerminalModel::realTerminalForIndex + * @param index_list + * @return The QSharedPointer associated with the index found in @a index_list + */ +QVector > FreeTerminalModel::realTerminalForIndex(const QModelIndexList &index_list) const +{ + QVector> vector_; + for (const auto &index : index_list) + { + if (index.isValid() + && index.model() == this + && index.row() < m_terminal_vector.size()) + { + const auto rt_ = m_terminal_vector.at(index.row()); + if (!vector_.contains(rt_)) { + vector_.append(m_terminal_vector.at(index.row())); + } + } + } + + return vector_; +} + /** * @brief FreeTerminalModel::fillTerminalVector */ diff --git a/sources/TerminalStrip/ui/freeterminalmodel.h b/sources/TerminalStrip/ui/freeterminalmodel.h index 8f8e98e99..2e7235217 100644 --- a/sources/TerminalStrip/ui/freeterminalmodel.h +++ b/sources/TerminalStrip/ui/freeterminalmodel.h @@ -58,6 +58,7 @@ class FreeTerminalModel : public QAbstractTableModel void clear(); QVector modifiedModelRealTerminalData() const; modelRealTerminalData dataAtRow(int row) const; + QVector> realTerminalForIndex(const QModelIndexList &index_list) const; private: void fillTerminalVector(); diff --git a/sources/TerminalStrip/ui/terminalstriptreedockwidget.cpp b/sources/TerminalStrip/ui/terminalstriptreedockwidget.cpp index 8d427fcae..4469ef6ca 100644 --- a/sources/TerminalStrip/ui/terminalstriptreedockwidget.cpp +++ b/sources/TerminalStrip/ui/terminalstriptreedockwidget.cpp @@ -62,6 +62,11 @@ void TerminalStripTreeDockWidget::reload() m_uuid_terminal_H.clear(); m_uuid_strip_H.clear(); + for (const auto &connection_ : qAsConst(m_strip_changed_connection)) { + disconnect(connection_); + } + m_strip_changed_connection.clear(); + buildTree(); @@ -285,6 +290,8 @@ QTreeWidgetItem* TerminalStripTreeDockWidget::addTerminalStrip(TerminalStrip *te m_item_strip_H.insert(strip_item, terminal_strip); m_uuid_strip_H.insert(terminal_strip->uuid(), terminal_strip); + + m_strip_changed_connection.append(connect(terminal_strip, &TerminalStrip::orderChanged, this, &TerminalStripTreeDockWidget::reload)); return strip_item; } diff --git a/sources/TerminalStrip/ui/terminalstriptreedockwidget.h b/sources/TerminalStrip/ui/terminalstriptreedockwidget.h index d1892dd10..e1dfd08f6 100644 --- a/sources/TerminalStrip/ui/terminalstriptreedockwidget.h +++ b/sources/TerminalStrip/ui/terminalstriptreedockwidget.h @@ -67,6 +67,7 @@ class TerminalStripTreeDockWidget : public QDockWidget QHash m_item_strip_H; QHash> m_uuid_terminal_H; QHash> m_uuid_strip_H; + QVector m_strip_changed_connection; }; #endif // TERMINALSTRIPTREEDOCKWIDGET_H