Several terminals can be removed or moved from strip in one shot

This commit is contained in:
joshua
2022-04-10 13:52:45 +02:00
parent 898edb6c12
commit bce6a43427
5 changed files with 335 additions and 176 deletions

View File

@@ -74,6 +74,14 @@ void TerminalStrip::setDescription(const QString &description) {
m_data.m_description = description; m_data.m_description = description;
} }
/**
* @brief TerminalStrip::project
* @return the project of this terminal strip or nullptr
*/
QETProject *TerminalStrip::project() const {
return m_project.data();
}
/** /**
* @brief TerminalStrip::data * @brief TerminalStrip::data
* @return The internal data of this strip * @return The internal data of this strip

View File

@@ -73,6 +73,7 @@ class TerminalStrip : public QObject
void setDescription(const QString &description); void setDescription(const QString &description);
QString description() const {return m_data.m_description;} QString description() const {return m_data.m_description;}
QUuid uuid() const {return m_data.m_uuid;} QUuid uuid() const {return m_data.m_uuid;}
QETProject *project() const;
TerminalStripData data() const; TerminalStripData data() const;
void setData(const TerminalStripData &data); void setData(const TerminalStripData &data);

View File

@@ -17,6 +17,7 @@
*/ */
#include "terminalstripeditor.h" #include "terminalstripeditor.h"
#include "ui_terminalstripeditor.h" #include "ui_terminalstripeditor.h"
#include "../UndoCommand/addterminaltostripcommand.h"
#include "../../qetproject.h" #include "../../qetproject.h"
#include "../terminalstrip.h" #include "../terminalstrip.h"
#include "../UndoCommand/changeterminalstripdata.h" #include "../UndoCommand/changeterminalstripdata.h"
@@ -99,6 +100,8 @@ void TerminalStripEditor::setCurrentStrip(TerminalStrip *strip_)
disconnect(m_current_strip, &TerminalStrip::bridgeChanged, this, &TerminalStripEditor::reload); disconnect(m_current_strip, &TerminalStrip::bridgeChanged, this, &TerminalStripEditor::reload);
} }
ui->m_move_to_cb->clear();
if (!strip_) if (!strip_)
{ {
ui->m_installation_le ->clear(); ui->m_installation_le ->clear();
@@ -112,7 +115,7 @@ void TerminalStripEditor::setCurrentStrip(TerminalStrip *strip_)
if (m_model) { if (m_model) {
m_model->deleteLater(); m_model->deleteLater();
m_model = nullptr; m_model = nullptr;
} }
} }
else else
{ {
@@ -121,18 +124,34 @@ void TerminalStripEditor::setCurrentStrip(TerminalStrip *strip_)
ui->m_name_le ->setText(strip_->name()); ui->m_name_le ->setText(strip_->name());
ui->m_comment_le ->setText(strip_->comment()); ui->m_comment_le ->setText(strip_->comment());
ui->m_description_te ->setPlainText(strip_->description()); ui->m_description_te ->setPlainText(strip_->description());
ui->m_move_to_cb->addItem(tr("Bornes indépendantes"), QUuid());
const auto project_{strip_->project()};
if (project_)
{
const auto strip_vector = project_->terminalStrip();
for (const auto &strip : strip_vector)
{
if (strip == strip_) {
continue;
}
ui->m_move_to_cb->addItem(QString{strip->installation() + " " + strip->location() + " " + strip->name()},
strip->uuid());
}
}
m_current_strip = strip_; m_current_strip = strip_;
if (m_model) if (m_model) {
{
m_model->setTerminalStrip(strip_); m_model->setTerminalStrip(strip_);
connect(ui->m_table_widget->selectionModel(), &QItemSelectionModel::selectionChanged, this, &TerminalStripEditor::selectionChanged);
} }
else else
{ {
m_model = new TerminalStripModel{strip_, this}; m_model = new TerminalStripModel{strip_, this};
ui->m_table_widget->setModel(m_model); ui->m_table_widget->setModel(m_model);
m_model->buildBridgePixmap(setUpBridgeCellWidth()); m_model->buildBridgePixmap(setUpBridgeCellWidth());
connect(ui->m_table_widget->selectionModel(), &QItemSelectionModel::selectionChanged, this, &TerminalStripEditor::selectionChanged);
} }
spanMultiLevelTerminals(); spanMultiLevelTerminals();
@@ -321,6 +340,22 @@ void TerminalStripEditor::selectionChanged()
ui->m_bridge_terminals_pb->setEnabled(enable_bridge); ui->m_bridge_terminals_pb->setEnabled(enable_bridge);
ui->m_unbridge_terminals_pb->setEnabled(enable_unbridge); ui->m_unbridge_terminals_pb->setEnabled(enable_unbridge);
ui->m_bridge_color_cb->setEnabled(enable_bridge_color); ui->m_bridge_color_cb->setEnabled(enable_bridge_color);
//Enable or not the 'move to' buttons
bool enabled_move_to{!model_physical_terminal_vector.isEmpty()};
for (const auto &model_physical : model_physical_terminal_vector)
{
for (const auto &model_real_data : model_physical.real_data)
{
if (model_real_data.bridged_) {
enabled_move_to = false;
break;
}
}
}
ui->m_move_to_label->setEnabled(enabled_move_to);
ui->m_move_to_cb->setEnabled(enabled_move_to);
ui->m_move_to_pb->setEnabled(enabled_move_to);
} }
QSize TerminalStripEditor::setUpBridgeCellWidth() QSize TerminalStripEditor::setUpBridgeCellWidth()
@@ -653,3 +688,59 @@ void TerminalStripEditor::on_m_bridge_color_cb_activated(const QColor &col)
} }
} }
void TerminalStripEditor::on_m_move_to_pb_clicked()
{
if (!m_model || !m_current_strip || !m_current_strip->project()) {
return;
}
//Get selected physical terminal
const auto index_vector = m_model->modelPhysicalTerminalDataForIndex(ui->m_table_widget->selectionModel()->selectedIndexes());
QVector<QSharedPointer<PhysicalTerminal>> phy_vector;
for (const auto &index : index_vector)
{
const auto shared_{m_current_strip->physicalTerminal(index.uuid_)};
if (shared_)
phy_vector.append(shared_);
}
if (phy_vector.isEmpty()) {
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();
}
else
{
TerminalStrip *receiver_strip{nullptr};
const auto strip_vector = m_current_strip->project()->terminalStrip();
for (const auto &strip_ : strip_vector)
{
if (strip_->uuid() == uuid_) {
receiver_strip = strip_;
break;
}
}
if (!receiver_strip) {
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();
}
}

View File

@@ -63,6 +63,7 @@ class TerminalStripEditor : public QWidget
void on_m_bridge_terminals_pb_clicked(); void on_m_bridge_terminals_pb_clicked();
void on_m_unbridge_terminals_pb_clicked(); void on_m_unbridge_terminals_pb_clicked();
void on_m_bridge_color_cb_activated(const QColor &col); void on_m_bridge_color_cb_activated(const QColor &col);
void on_m_move_to_pb_clicked();
private: private:
Ui::TerminalStripEditor *ui; Ui::TerminalStripEditor *ui;

View File

@@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>922</width> <width>873</width>
<height>516</height> <height>483</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@@ -23,10 +23,234 @@
<attribute name="title"> <attribute name="title">
<string>Disposition</string> <string>Disposition</string>
</attribute> </attribute>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QHBoxLayout" name="horizontalLayout_2">
<item> <item>
<widget class="QTableView" name="m_table_widget"/> <widget class="QTableView" name="m_table_widget"/>
</item> </item>
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QGridLayout" name="gridLayout_2">
<property name="topMargin">
<number>0</number>
</property>
<item row="8" column="1" colspan="2">
<widget class="QComboBox" name="m_led_cb">
<item>
<property name="text">
<string>Sans</string>
</property>
</item>
<item>
<property name="text">
<string>Avec</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0" colspan="3">
<widget class="Line" name="line_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="m_move_to_pb">
<property name="toolTip">
<string>Effectuer le déplacement</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../qelectrotech.qrc">
<normaloff>:/ico/16x16/dialog-ok.png</normaloff>:/ico/16x16/dialog-ok.png</iconset>
</property>
</widget>
</item>
<item row="12" column="1" colspan="2">
<widget class="KColorCombo" name="m_bridge_color_cb"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Étage :</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Type :</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Couleur pont :</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="6" column="1" colspan="2">
<widget class="QComboBox" name="m_type_cb">
<item>
<property name="text">
<string>Générique</string>
</property>
</item>
<item>
<property name="text">
<string>Fusible</string>
</property>
</item>
<item>
<property name="text">
<string>Sectionnable</string>
</property>
</item>
<item>
<property name="text">
<string>Diode</string>
</property>
</item>
<item>
<property name="text">
<string>Terre</string>
</property>
</item>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>LED :</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="9" column="0" colspan="3">
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="13" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Fonction :</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="m_move_to_label">
<property name="text">
<string>Déplacer dans :</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="7" column="1" colspan="2">
<widget class="QComboBox" name="m_function_cb">
<item>
<property name="text">
<string>Générique</string>
</property>
</item>
<item>
<property name="text">
<string>Phase</string>
</property>
</item>
<item>
<property name="text">
<string>Neutre</string>
</property>
</item>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="m_move_to_cb">
<property name="sizeAdjustPolicy">
<enum>QComboBox::AdjustToContents</enum>
</property>
</widget>
</item>
<item row="5" column="1" colspan="2">
<widget class="QSpinBox" name="m_level_sb">
<property name="maximum">
<number>6</number>
</property>
</widget>
</item>
<item row="2" column="1" colspan="2">
<widget class="QPushButton" name="m_auto_ordering_pb">
<property name="text">
<string>Position automatique</string>
</property>
</widget>
</item>
<item row="3" column="1" colspan="2">
<widget class="QPushButton" name="m_group_terminals_pb">
<property name="text">
<string>Grouper les bornes</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="2">
<widget class="QPushButton" name="m_ungroup_pb">
<property name="text">
<string>Degrouper les bornes</string>
</property>
</widget>
</item>
<item row="10" column="1" colspan="2">
<widget class="QPushButton" name="m_bridge_terminals_pb">
<property name="text">
<string>Ponter les bornes</string>
</property>
</widget>
</item>
<item row="11" column="1" colspan="2">
<widget class="QPushButton" name="m_unbridge_terminals_pb">
<property name="text">
<string>Déponter les bornes</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="m_data_tab"> <widget class="QWidget" name="m_data_tab">
@@ -95,174 +319,6 @@
</widget> </widget>
</widget> </widget>
</item> </item>
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QGridLayout" name="gridLayout_2">
<item row="4" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Type :</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Fonction :</string>
</property>
</widget>
</item>
<item row="8" column="0" colspan="2">
<widget class="QPushButton" name="m_bridge_terminals_pb">
<property name="text">
<string>Ponter les bornes</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QPushButton" name="m_auto_ordering_pb">
<property name="text">
<string>Position automatique</string>
</property>
</widget>
</item>
<item row="9" column="0" colspan="2">
<widget class="QPushButton" name="m_unbridge_terminals_pb">
<property name="text">
<string>Déponter les bornes</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QPushButton" name="m_group_terminals_pb">
<property name="text">
<string>Grouper les bornes</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Étage :</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="KColorCombo" name="m_bridge_color_cb"/>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>LED :</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="m_type_cb">
<item>
<property name="text">
<string>Générique</string>
</property>
</item>
<item>
<property name="text">
<string>Fusible</string>
</property>
</item>
<item>
<property name="text">
<string>Sectionnable</string>
</property>
</item>
<item>
<property name="text">
<string>Diode</string>
</property>
</item>
<item>
<property name="text">
<string>Terre</string>
</property>
</item>
</widget>
</item>
<item row="5" column="1">
<widget class="QComboBox" name="m_function_cb">
<item>
<property name="text">
<string>Générique</string>
</property>
</item>
<item>
<property name="text">
<string>Phase</string>
</property>
</item>
<item>
<property name="text">
<string>Neutre</string>
</property>
</item>
</widget>
</item>
<item row="7" column="0" colspan="2">
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="m_level_sb">
<property name="maximum">
<number>6</number>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QPushButton" name="m_ungroup_pb">
<property name="text">
<string>Degrouper les bornes</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QComboBox" name="m_led_cb">
<item>
<property name="text">
<string>Sans</string>
</property>
</item>
<item>
<property name="text">
<string>Avec</string>
</property>
</item>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Couleur pont :</string>
</property>
</widget>
</item>
<item row="11" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<customwidgets> <customwidgets>
@@ -272,6 +328,8 @@
<header>kcolorcombo.h</header> <header>kcolorcombo.h</header>
</customwidget> </customwidget>
</customwidgets> </customwidgets>
<resources/> <resources>
<include location="../../../qelectrotech.qrc"/>
</resources>
<connections/> <connections/>
</ui> </ui>