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