mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-04-23 12:09:58 +02:00
Level of real terminal can be edited
The level of each real terminal who compose a physical terminal can be edited. Several real terminal can be edited in one shot.
This commit is contained in:
@@ -32,6 +32,7 @@
|
||||
#include "../diagram.h"
|
||||
#include "../UndoCommand/sortterminalstripcommand.h"
|
||||
#include "../UndoCommand/groupterminalscommand.h"
|
||||
#include "../UndoCommand/changeterminallevel.h"
|
||||
|
||||
#include <QTreeWidgetItem>
|
||||
|
||||
@@ -352,10 +353,12 @@ void TerminalStripEditor::selectionChanged()
|
||||
|
||||
const auto index_list = ui->m_table_widget->selectionModel()->selectedIndexes();
|
||||
const auto terminal_vector = m_model->physicalTerminalDataForIndex(index_list);
|
||||
const auto real_terminal_vector = m_model->realTerminalDataForIndex(index_list);
|
||||
|
||||
//Enable/disable group button
|
||||
ui->m_group_terminals_pb->setEnabled(terminal_vector.size() > 1 ? true : false);
|
||||
|
||||
|
||||
//Enable/disable ungroup button
|
||||
auto it_= std::find_if(terminal_vector.constBegin(), terminal_vector.constEnd(), [](auto &data)
|
||||
{
|
||||
if (data.real_terminals_vector.size() >= 2) {
|
||||
@@ -500,17 +503,22 @@ void TerminalStripEditor::on_m_dialog_button_box_clicked(QAbstractButton *button
|
||||
|
||||
if (m_model)
|
||||
{
|
||||
for (auto modified_data : m_model->modifiedRealTerminalData())
|
||||
for (const auto &data_ : m_model->modifiedRealTerminalData())
|
||||
{
|
||||
auto element = modified_data.element_;
|
||||
auto original_ = data_.first;
|
||||
auto edited_ = data_.second;
|
||||
auto element = original_.element_;
|
||||
if (element) {
|
||||
auto current_data = element->elementData();
|
||||
current_data.setTerminalType(modified_data.type_);
|
||||
current_data.setTerminalFunction(modified_data.function_);
|
||||
current_data.setTerminalLED(modified_data.led_);
|
||||
current_data.m_informations.addValue(QStringLiteral("label"), modified_data.label_);
|
||||
current_data.setTerminalType(edited_.type_);
|
||||
current_data.setTerminalFunction(edited_.function_);
|
||||
current_data.setTerminalLED(edited_.led_);
|
||||
current_data.m_informations.addValue(QStringLiteral("label"), edited_.label_);
|
||||
|
||||
m_project->undoStack()->push(new ChangeElementDataCommand(element, current_data));
|
||||
if (element->elementData() != current_data)
|
||||
m_project->undoStack()->push(new ChangeElementDataCommand(element, current_data));
|
||||
if (edited_.level_)
|
||||
m_project->undoStack()->push(new ChangeTerminalLevel(m_current_strip, original_, edited_.level_));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -560,3 +568,24 @@ void TerminalStripEditor::on_m_ungroup_pb_clicked()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalStripEditor::on_m_level_sb_valueChanged
|
||||
* @param arg1
|
||||
*/
|
||||
void TerminalStripEditor::on_m_level_sb_valueChanged(int arg1)
|
||||
{
|
||||
if (m_model)
|
||||
{
|
||||
const auto index_list = ui->m_table_widget->selectionModel()->selectedIndexes();
|
||||
|
||||
for (auto index : index_list)
|
||||
{
|
||||
auto level_index = m_model->index(index.row(), 1, index.parent());
|
||||
if (level_index.isValid())
|
||||
{
|
||||
m_model->setData(level_index, arg1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -62,6 +62,7 @@ class TerminalStripEditor : public QDialog
|
||||
void on_m_auto_ordering_pb_clicked();
|
||||
void on_m_group_terminals_pb_clicked();
|
||||
void on_m_ungroup_pb_clicked();
|
||||
void on_m_level_sb_valueChanged(int arg1);
|
||||
|
||||
private:
|
||||
Ui::TerminalStripEditor *ui;
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1260</width>
|
||||
<height>579</height>
|
||||
<width>1289</width>
|
||||
<height>645</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -179,6 +179,13 @@
|
||||
<widget class="QWidget" name="widget" native="true">
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Étage :</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
@@ -191,24 +198,27 @@
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QPushButton" name="m_auto_ordering_pb">
|
||||
<item row="3" column="1">
|
||||
<widget class="QSpinBox" name="m_level_sb"/>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<widget class="QPushButton" name="m_ungroup_pb">
|
||||
<property name="text">
|
||||
<string>Position automatique</string>
|
||||
<string>Degrouper les bornes</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<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="2" column="0">
|
||||
<widget class="QPushButton" name="m_ungroup_pb">
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QPushButton" name="m_auto_ordering_pb">
|
||||
<property name="text">
|
||||
<string>Degrouper les bornes</string>
|
||||
<string>Position automatique</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -289,13 +299,21 @@
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<tabstops>
|
||||
<tabstop>m_add_terminal_strip_pb</tabstop>
|
||||
<tabstop>m_remove_terminal_strip_pb</tabstop>
|
||||
<tabstop>m_reload_pb</tabstop>
|
||||
<tabstop>m_auto_ordering_pb</tabstop>
|
||||
<tabstop>m_group_terminals_pb</tabstop>
|
||||
<tabstop>m_ungroup_pb</tabstop>
|
||||
<tabstop>m_level_sb</tabstop>
|
||||
<tabstop>m_terminal_strip_tw</tabstop>
|
||||
<tabstop>m_table_widget</tabstop>
|
||||
<tabstop>m_description_te</tabstop>
|
||||
<tabstop>m_comment_le</tabstop>
|
||||
<tabstop>m_name_le</tabstop>
|
||||
<tabstop>m_tab_widget</tabstop>
|
||||
<tabstop>m_installation_le</tabstop>
|
||||
<tabstop>m_location_le</tabstop>
|
||||
<tabstop>m_name_le</tabstop>
|
||||
<tabstop>m_comment_le</tabstop>
|
||||
<tabstop>m_description_te</tabstop>
|
||||
<tabstop>m_table_widget</tabstop>
|
||||
</tabstops>
|
||||
<resources>
|
||||
<include location="../../../qelectrotech.qrc"/>
|
||||
|
||||
@@ -52,7 +52,7 @@ TerminalStripModel::TerminalStripModel(TerminalStrip *terminal_strip, QObject *p
|
||||
QAbstractTableModel(parent),
|
||||
m_terminal_strip(terminal_strip)
|
||||
{
|
||||
fillRealTerminalData();
|
||||
fillPhysicalTerminalData();
|
||||
}
|
||||
|
||||
int TerminalStripModel::rowCount(const QModelIndex &parent) const
|
||||
@@ -64,7 +64,7 @@ int TerminalStripModel::rowCount(const QModelIndex &parent) const
|
||||
}
|
||||
|
||||
auto count = 0;
|
||||
for (const auto &ptd : m_physical_terminal_data) {
|
||||
for (const auto &ptd : m_edited_terminal_data) {
|
||||
count += ptd.real_terminals_vector.size();
|
||||
}
|
||||
|
||||
@@ -133,7 +133,14 @@ bool TerminalStripModel::setData(const QModelIndex &index, const QVariant &value
|
||||
int modified_cell = -1;
|
||||
auto column_ = index.column();
|
||||
|
||||
if (column_ == LED_CELL &&
|
||||
if (column_ == LEVEL_CELL &&
|
||||
role == Qt::EditRole)
|
||||
{
|
||||
rtd.level_ = value.toInt();
|
||||
modified_ = true;
|
||||
modified_cell = LEVEL_CELL;
|
||||
}
|
||||
else if (column_ == LED_CELL &&
|
||||
role == Qt::CheckStateRole)
|
||||
{
|
||||
rtd.led_ = value.toBool();
|
||||
@@ -180,6 +187,7 @@ bool TerminalStripModel::setData(const QModelIndex &index, const QVariant &value
|
||||
vector_.replace(modified_cell, true);
|
||||
m_modified_cell.insert(rtd.element_, vector_);
|
||||
}
|
||||
emit dataChanged(index, index);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -226,18 +234,25 @@ Qt::ItemFlags TerminalStripModel::flags(const QModelIndex &index) const
|
||||
|
||||
/**
|
||||
* @brief TerminalStripModel::modifiedRealTerminalData
|
||||
* @return the modified real terminal data
|
||||
* @return a vector of QPair of modified terminal.
|
||||
* the first value of the QPair is the original data, the second value is the edited data
|
||||
*/
|
||||
QVector<RealTerminalData> TerminalStripModel::modifiedRealTerminalData() const
|
||||
QVector<QPair<RealTerminalData, RealTerminalData>> TerminalStripModel::modifiedRealTerminalData() const
|
||||
{
|
||||
QVector<RealTerminalData> returned_vector;
|
||||
QVector<QPair<RealTerminalData, RealTerminalData>> returned_vector;
|
||||
|
||||
const auto modified_real_terminal = m_modified_cell.keys();
|
||||
|
||||
for (const auto &ptd : m_physical_terminal_data) {
|
||||
for (const auto &rtd : ptd.real_terminals_vector) {
|
||||
if (modified_real_terminal.contains(rtd.element_)) {
|
||||
returned_vector.append(rtd);
|
||||
for (auto i = 0 ; i<m_edited_terminal_data.size() ; ++i)
|
||||
{
|
||||
auto ptd_ = m_edited_terminal_data.at(i);
|
||||
for (auto j = 0 ; j < ptd_.real_terminals_vector.size() ; ++j)
|
||||
{
|
||||
auto rtd_ = ptd_.real_terminals_vector.at(j);
|
||||
if (modified_real_terminal.contains(rtd_.element_))
|
||||
{
|
||||
returned_vector.append(qMakePair(m_original_terminal_data.at(i).real_terminals_vector.at(j),
|
||||
m_edited_terminal_data.at(i).real_terminals_vector.at(j)));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -329,13 +344,14 @@ QVector<RealTerminalData> TerminalStripModel::realTerminalDataForIndex(QModelInd
|
||||
return vector_;
|
||||
}
|
||||
|
||||
void TerminalStripModel::fillRealTerminalData()
|
||||
void TerminalStripModel::fillPhysicalTerminalData()
|
||||
{
|
||||
//Get all physical terminal
|
||||
if (m_terminal_strip) {
|
||||
for (auto i=0 ; i < m_terminal_strip->physicalTerminalCount() ; ++i) {
|
||||
m_physical_terminal_data.append(m_terminal_strip->physicalTerminalData(i));
|
||||
m_original_terminal_data.append(m_terminal_strip->physicalTerminalData(i));
|
||||
}
|
||||
m_edited_terminal_data = m_original_terminal_data;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -347,7 +363,7 @@ RealTerminalData TerminalStripModel::dataAtRow(int row) const
|
||||
else
|
||||
{
|
||||
auto current_row = 0;
|
||||
for (const auto &physical_data : m_physical_terminal_data)
|
||||
for (const auto &physical_data : m_edited_terminal_data)
|
||||
{
|
||||
for (const auto &real_data : physical_data.real_terminals_vector)
|
||||
{
|
||||
@@ -379,15 +395,15 @@ void TerminalStripModel::replaceDataAtRow(RealTerminalData data, int row)
|
||||
auto current_row = 0;
|
||||
auto current_physical = 0;
|
||||
|
||||
for (const auto &physical_data : qAsConst(m_physical_terminal_data))
|
||||
for (const auto &physical_data : qAsConst(m_edited_terminal_data))
|
||||
{
|
||||
auto current_real = 0;
|
||||
for (int i=0 ; i<physical_data.real_terminals_vector.count() ; ++i)
|
||||
{
|
||||
if (current_row == row) {
|
||||
auto physical_data = m_physical_terminal_data.at(current_physical);
|
||||
auto physical_data = m_edited_terminal_data.at(current_physical);
|
||||
physical_data.real_terminals_vector.replace(current_real, data);
|
||||
m_physical_terminal_data.replace(current_physical, physical_data);
|
||||
m_edited_terminal_data.replace(current_physical, physical_data);
|
||||
return;
|
||||
} else {
|
||||
++current_real;
|
||||
@@ -410,7 +426,7 @@ void TerminalStripModel::replaceDataAtRow(RealTerminalData data, int row)
|
||||
*/
|
||||
PhysicalTerminalData TerminalStripModel::physicalDataAtIndex(int index) const
|
||||
{
|
||||
if (m_physical_terminal_data.isEmpty()) {
|
||||
if (m_edited_terminal_data.isEmpty()) {
|
||||
return PhysicalTerminalData();
|
||||
}
|
||||
|
||||
@@ -418,7 +434,7 @@ PhysicalTerminalData TerminalStripModel::physicalDataAtIndex(int index) const
|
||||
int current_phy = -1;
|
||||
bool match_ = false;
|
||||
|
||||
for (const auto &ptd_ : qAsConst(m_physical_terminal_data))
|
||||
for (const auto &ptd_ : qAsConst(m_edited_terminal_data))
|
||||
{
|
||||
current_checked_index += ptd_.real_terminals_vector.size();
|
||||
++current_phy;
|
||||
@@ -430,7 +446,7 @@ PhysicalTerminalData TerminalStripModel::physicalDataAtIndex(int index) const
|
||||
}
|
||||
|
||||
if (match_) {
|
||||
return m_physical_terminal_data.at(current_phy);
|
||||
return m_edited_terminal_data.at(current_phy);
|
||||
} else {
|
||||
return PhysicalTerminalData();
|
||||
}
|
||||
@@ -443,13 +459,13 @@ PhysicalTerminalData TerminalStripModel::physicalDataAtIndex(int index) const
|
||||
*/
|
||||
RealTerminalData TerminalStripModel::realDataAtIndex(int index) const
|
||||
{
|
||||
if (m_physical_terminal_data.isEmpty()) {
|
||||
if (m_edited_terminal_data.isEmpty()) {
|
||||
return RealTerminalData();
|
||||
}
|
||||
|
||||
int current_checked_index = -1;
|
||||
|
||||
for (const auto & ptd_ : qAsConst(m_physical_terminal_data))
|
||||
for (const auto & ptd_ : qAsConst(m_edited_terminal_data))
|
||||
{
|
||||
for (const auto & rtd_ : qAsConst(ptd_.real_terminals_vector)) {
|
||||
++current_checked_index;
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <QObject>
|
||||
#include <QPointer>
|
||||
#include <QStyledItemDelegate>
|
||||
#include <QPair>
|
||||
|
||||
#include "../terminalstrip.h"
|
||||
|
||||
@@ -40,14 +41,14 @@ class TerminalStripModel : public QAbstractTableModel
|
||||
virtual QVariant headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
|
||||
virtual Qt::ItemFlags flags (const QModelIndex &index) const override;
|
||||
|
||||
QVector<RealTerminalData> modifiedRealTerminalData() const;
|
||||
QVector<QPair<RealTerminalData, RealTerminalData>> modifiedRealTerminalData() const;
|
||||
|
||||
bool isXrefCell(const QModelIndex &index, Element **element = nullptr);
|
||||
QVector<PhysicalTerminalData> physicalTerminalDataForIndex(QModelIndexList index_list) const;
|
||||
QVector<RealTerminalData> realTerminalDataForIndex(QModelIndexList index_list) const;
|
||||
|
||||
private:
|
||||
void fillRealTerminalData();
|
||||
void fillPhysicalTerminalData();
|
||||
RealTerminalData dataAtRow(int row) const;
|
||||
void replaceDataAtRow(RealTerminalData data, int row);
|
||||
PhysicalTerminalData physicalDataAtIndex(int index) const;
|
||||
@@ -55,7 +56,7 @@ class TerminalStripModel : public QAbstractTableModel
|
||||
|
||||
private:
|
||||
QPointer<TerminalStrip> m_terminal_strip;
|
||||
QVector<PhysicalTerminalData> m_physical_terminal_data;
|
||||
QVector<PhysicalTerminalData> m_edited_terminal_data, m_original_terminal_data;
|
||||
QHash<Element *, QVector<bool>> m_modified_cell;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user