Terminal strip editor can now edit multiple project.

Before this this commit the terminal strip editor couldn't only work on
the first project opened into this editor, all other project opened
after couldn't be edited.
This is now past, terminal strip editor can now edit every project open
in QElectroTech.
This commit is contained in:
joshua 2025-06-11 22:43:41 +02:00
parent 3a6b4807db
commit d711d8fb4a
10 changed files with 159 additions and 48 deletions

View File

@ -42,6 +42,10 @@ FreeTerminalEditor::FreeTerminalEditor(QETProject *project, QWidget *parent) :
ui->m_table_view->setModel(m_model); ui->m_table_view->setModel(m_model);
ui->m_table_view->setCurrentIndex(m_model->index(0,0)); ui->m_table_view->setCurrentIndex(m_model->index(0,0));
if (m_project) {
connect(m_project, &QObject::destroyed, this, &FreeTerminalEditor::reload);
}
//Disabled the move if the table is currently edited (yellow cell) //Disabled the move if the table is currently edited (yellow cell)
connect(m_model, &FreeTerminalModel::dataChanged, this, [=] { connect(m_model, &FreeTerminalModel::dataChanged, this, [=] {
this->setDisabledMove(); this->setDisabledMove();
@ -135,6 +139,31 @@ void FreeTerminalEditor::apply()
reload(); reload();
} }
/**
* @brief FreeTerminalEditor::setProject
* Set @project as project handled by this editor.
* If a previous project was setted, everything is clear.
* This function track the destruction of the project,
* that mean if the project pointer is deleted
* no need to call this function with a nullptr,
* everything is made inside this class.
* @param project
*/
void FreeTerminalEditor::setProject(QETProject *project)
{
if(m_project) {
disconnect(m_project, &QObject::destroyed, this, &FreeTerminalEditor::reload);
}
m_project = project;
if (m_model) {
m_model->setProject(project);
}
if (m_project) {
connect(m_project, &QObject::destroyed, this, &FreeTerminalEditor::reload);
}
reload();
}
void FreeTerminalEditor::on_m_type_cb_activated(int index) void FreeTerminalEditor::on_m_type_cb_activated(int index)
{ {
if (m_model) if (m_model)

View File

@ -19,8 +19,8 @@
#define FREETERMINALEDITOR_H #define FREETERMINALEDITOR_H
#include <QWidget> #include <QWidget>
#include "../../qetproject.h"
class QETProject;
class RealTerminal; class RealTerminal;
class FreeTerminalModel; class FreeTerminalModel;
class QTableView; class QTableView;
@ -40,6 +40,8 @@ class FreeTerminalEditor : public QWidget
void reload(); void reload();
void apply(); void apply();
void setProject(QETProject *project);
private slots: private slots:
void on_m_type_cb_activated(int index); void on_m_type_cb_activated(int index);
void on_m_function_cb_activated(int index); void on_m_function_cb_activated(int index);
@ -52,7 +54,7 @@ class FreeTerminalEditor : public QWidget
private: private:
Ui::FreeTerminalEditor *ui; Ui::FreeTerminalEditor *ui;
QETProject *m_project = nullptr; QPointer <QETProject> m_project;
FreeTerminalModel *m_model = nullptr; FreeTerminalModel *m_model {nullptr};
}; };
#endif // FREETERMINALEDITOR_H #endif // FREETERMINALEDITOR_H

View File

@ -56,10 +56,30 @@ FreeTerminalModel::Column FreeTerminalModel::columnTypeForIndex(const QModelInde
* @param parent * @param parent
*/ */
FreeTerminalModel::FreeTerminalModel(QETProject *project, QObject *parent) : FreeTerminalModel::FreeTerminalModel(QETProject *project, QObject *parent) :
QAbstractTableModel(parent), QAbstractTableModel(parent) {
m_project(project) setProject(project);
}
/**
* @brief FreeTerminalModel::setProject
* Set @project as project handled by this model.
* If a previous project was setted, everything is clear.
* This function track the destruction of the project,
* that mean if the project pointer is deleted
* no need to call this function with a nullptr,
* everything is made inside this class.
* @param project
*/
void FreeTerminalModel::setProject(QETProject *project)
{ {
fillTerminalVector(); if(m_project) {
disconnect(m_project, &QObject::destroyed, this, &FreeTerminalModel::clear);
}
m_project = project;
if (m_project) {
connect(m_project, &QObject::destroyed, this, &FreeTerminalModel::clear);
}
clear();
} }
/** /**
@ -305,6 +325,7 @@ QVector<QSharedPointer<RealTerminal> > FreeTerminalModel::realTerminalForIndex(c
*/ */
void FreeTerminalModel::fillTerminalVector() void FreeTerminalModel::fillTerminalVector()
{ {
if (m_project) {
ElementProvider provider_(m_project); ElementProvider provider_(m_project);
auto free_terminal_vector = provider_.freeTerminal(); auto free_terminal_vector = provider_.freeTerminal();
@ -319,6 +340,7 @@ void FreeTerminalModel::fillTerminalVector()
m_terminal_vector.append(terminal_->realTerminal()); m_terminal_vector.append(terminal_->realTerminal());
m_real_t_data.append(modelRealTerminalData::data(terminal_->realTerminal())); m_real_t_data.append(modelRealTerminalData::data(terminal_->realTerminal()));
} }
}
} }
/**************************************************************** /****************************************************************

View File

@ -47,6 +47,7 @@ class FreeTerminalModel : public QAbstractTableModel
public: public:
explicit FreeTerminalModel(QETProject *project, QObject *parent = nullptr); explicit FreeTerminalModel(QETProject *project, QObject *parent = nullptr);
void setProject(QETProject *project);
int rowCount(const QModelIndex &parent) const override; int rowCount(const QModelIndex &parent) const override;
int columnCount(const QModelIndex &parent) const override; int columnCount(const QModelIndex &parent) const override;

View File

@ -84,6 +84,12 @@ TerminalStripEditor::~TerminalStripEditor() {
delete ui; delete ui;
} }
void TerminalStripEditor::setProject(QETProject *project)
{
m_project = project;
setCurrentStrip(nullptr);
}
/** /**
* @brief TerminalStripEditor::setCurrentStrip * @brief TerminalStripEditor::setCurrentStrip
* Set the current terminal strip edited to \p strip_ * Set the current terminal strip edited to \p strip_
@ -98,27 +104,15 @@ void TerminalStripEditor::setCurrentStrip(TerminalStrip *strip_)
if (m_current_strip) { if (m_current_strip) {
disconnect(m_current_strip, &TerminalStrip::orderChanged, this, &TerminalStripEditor::reload); disconnect(m_current_strip, &TerminalStrip::orderChanged, this, &TerminalStripEditor::reload);
disconnect(m_current_strip, &TerminalStrip::bridgeChanged, this, &TerminalStripEditor::reload); disconnect(m_current_strip, &TerminalStrip::bridgeChanged, this, &TerminalStripEditor::reload);
disconnect(m_current_strip, &QObject::destroyed, this, &TerminalStripEditor::clear);
} }
ui->m_move_to_cb->clear(); ui->m_move_to_cb->clear();
if (!strip_) if (!strip_) {
{ clear();
ui->m_installation_le ->clear();
ui->m_location_le ->clear();
ui->m_name_le ->clear();
ui->m_comment_le ->clear();
ui->m_description_te ->clear();
m_current_strip = nullptr;
ui->m_table_widget->setModel(nullptr);
if (m_model) {
m_model->deleteLater();
m_model = nullptr;
} }
} else {
else
{
ui->m_installation_le ->setText(strip_->installation()); ui->m_installation_le ->setText(strip_->installation());
ui->m_location_le ->setText(strip_->location()); ui->m_location_le ->setText(strip_->location());
ui->m_name_le ->setText(strip_->name()); ui->m_name_le ->setText(strip_->name());
@ -159,6 +153,7 @@ void TerminalStripEditor::setCurrentStrip(TerminalStrip *strip_)
connect(m_current_strip, &TerminalStrip::orderChanged, this, &TerminalStripEditor::reload); connect(m_current_strip, &TerminalStrip::orderChanged, this, &TerminalStripEditor::reload);
connect(m_current_strip, &TerminalStrip::bridgeChanged, this, &TerminalStripEditor::reload); connect(m_current_strip, &TerminalStrip::bridgeChanged, this, &TerminalStripEditor::reload);
connect(m_current_strip, &QObject::destroyed, this, &TerminalStripEditor::clear);
} }
} }
@ -230,6 +225,22 @@ void TerminalStripEditor::apply()
reload(); reload();
} }
void TerminalStripEditor::clear()
{
ui->m_installation_le ->clear();
ui->m_location_le ->clear();
ui->m_name_le ->clear();
ui->m_comment_le ->clear();
ui->m_description_te ->clear();
m_current_strip.clear();
ui->m_table_widget->setModel(nullptr);
if (m_model) {
m_model->deleteLater();
m_model = nullptr;
}
}
/** /**
* @brief TerminalStripEditor::spanMultiLevelTerminals * @brief TerminalStripEditor::spanMultiLevelTerminals
* Span row of m_table_widget for multi-level terminal * Span row of m_table_widget for multi-level terminal

View File

@ -41,11 +41,13 @@ class TerminalStripEditor : public QWidget
public: public:
explicit TerminalStripEditor(QETProject *project, QWidget *parent = nullptr); explicit TerminalStripEditor(QETProject *project, QWidget *parent = nullptr);
~TerminalStripEditor() override; ~TerminalStripEditor() override;
void setProject(QETProject *project);
void setCurrentStrip(TerminalStrip *strip_); void setCurrentStrip(TerminalStrip *strip_);
void reload(); void reload();
void apply(); void apply();
private: private:
void clear();
void spanMultiLevelTerminals(); void spanMultiLevelTerminals();
void selectionChanged(); void selectionChanged();
QSize setUpBridgeCellWidth(); QSize setUpBridgeCellWidth();
@ -67,8 +69,8 @@ class TerminalStripEditor : public QWidget
private: private:
Ui::TerminalStripEditor *ui; Ui::TerminalStripEditor *ui;
QETProject *m_project {nullptr}; QPointer<QETProject> m_project;
TerminalStrip *m_current_strip {nullptr}; QPointer<TerminalStrip> m_current_strip;
TerminalStripModel *m_model {nullptr}; TerminalStripModel *m_model {nullptr};
}; };

View File

@ -76,6 +76,18 @@ TerminalStripEditorWindow::~TerminalStripEditorWindow()
delete ui; delete ui;
} }
/**
* @brief TerminalStripEditorWindow::setProject
* @param project
*/
void TerminalStripEditorWindow::setProject(QETProject *project)
{
m_project = project;
m_tree_dock->setProject(project);
m_free_terminal_editor->setProject(project);
m_terminal_strip_editor->setProject(project);
}
void TerminalStripEditorWindow::setCurrentStrip(TerminalStrip *strip) { void TerminalStripEditorWindow::setCurrentStrip(TerminalStrip *strip) {
m_tree_dock->setSelectedStrip(strip); m_tree_dock->setSelectedStrip(strip);
} }
@ -200,4 +212,3 @@ void TerminalStripEditorWindow::on_m_button_box_clicked(QAbstractButton *button)
void TerminalStripEditorWindow::on_m_stacked_widget_currentChanged(int arg1) { void TerminalStripEditorWindow::on_m_stacked_widget_currentChanged(int arg1) {
ui->m_button_box->setHidden(arg1 == EMPTY_PAGE); ui->m_button_box->setHidden(arg1 == EMPTY_PAGE);
} }

View File

@ -51,6 +51,8 @@ class TerminalStripEditorWindow : public QMainWindow
if (!window_) if (!window_)
window_ = new TerminalStripEditorWindow{project, parent}; window_ = new TerminalStripEditorWindow{project, parent};
mutex_.unlock(); mutex_.unlock();
} else {
window_->setProject(project);
} }
return window_; return window_;
} }
@ -71,6 +73,7 @@ class TerminalStripEditorWindow : public QMainWindow
explicit TerminalStripEditorWindow(QETProject *project, QWidget *parent = nullptr); explicit TerminalStripEditorWindow(QETProject *project, QWidget *parent = nullptr);
~TerminalStripEditorWindow(); ~TerminalStripEditorWindow();
void setProject(QETProject *project);
void setCurrentStrip(TerminalStrip *strip); void setCurrentStrip(TerminalStrip *strip);
private slots: private slots:
@ -87,7 +90,7 @@ class TerminalStripEditorWindow : public QMainWindow
private: private:
Ui::TerminalStripEditorWindow *ui{nullptr}; Ui::TerminalStripEditorWindow *ui{nullptr};
QETProject *m_project {nullptr}; QPointer <QETProject> m_project;
TerminalStripTreeDockWidget *m_tree_dock{nullptr}; TerminalStripTreeDockWidget *m_tree_dock{nullptr};
FreeTerminalEditor *m_free_terminal_editor {nullptr}; FreeTerminalEditor *m_free_terminal_editor {nullptr};
TerminalStripEditor *m_terminal_strip_editor {nullptr}; TerminalStripEditor *m_terminal_strip_editor {nullptr};

View File

@ -30,11 +30,10 @@
TerminalStripTreeDockWidget::TerminalStripTreeDockWidget(QETProject *project, QWidget *parent) : TerminalStripTreeDockWidget::TerminalStripTreeDockWidget(QETProject *project, QWidget *parent) :
QDockWidget(parent), QDockWidget(parent),
ui(new Ui::TerminalStripTreeDockWidget), ui(new Ui::TerminalStripTreeDockWidget)
m_project(project)
{ {
ui->setupUi(this); ui->setupUi(this);
buildTree(); setProject(project);
#if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0) #if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)
ui->m_tree_view->expandRecursively(ui->m_tree_view->rootIndex()); ui->m_tree_view->expandRecursively(ui->m_tree_view->rootIndex());
@ -48,6 +47,32 @@ TerminalStripTreeDockWidget::~TerminalStripTreeDockWidget()
delete ui; delete ui;
} }
/**
* @brief TerminalStripTreeDockWidget::setProject
* Set @project as project handled by this tree dock.
* If a previous project was setted, everything is clear.
* This function track the destruction of the project,
* that mean if the project pointer is deleted
* no need to call this function with a nullptr,
* everything is made inside this class.
* @param project
*/
void TerminalStripTreeDockWidget::setProject(QETProject *project)
{
if(m_project && m_project_destroy_connection) {
disconnect(m_project_destroy_connection);
}
m_project = project;
if (m_project) {
m_project_destroy_connection = connect(m_project, &QObject::destroyed, [this](){
this->m_current_strip.clear();
this->reload();
});
}
m_current_strip.clear();
reload();
}
/** /**
* @brief TerminalStripTreeDockWidget::reload * @brief TerminalStripTreeDockWidget::reload
*/ */
@ -205,6 +230,9 @@ void TerminalStripTreeDockWidget::on_m_tree_view_currentItemChanged(QTreeWidgetI
*/ */
void TerminalStripTreeDockWidget::buildTree() void TerminalStripTreeDockWidget::buildTree()
{ {
if(!m_project) {
return;
}
auto title_ = m_project->title(); auto title_ = m_project->title();
if (title_.isEmpty()) { if (title_.isEmpty()) {

View File

@ -49,6 +49,7 @@ class TerminalStripTreeDockWidget : public QDockWidget
explicit TerminalStripTreeDockWidget(QETProject *project, QWidget *parent = nullptr); explicit TerminalStripTreeDockWidget(QETProject *project, QWidget *parent = nullptr);
~TerminalStripTreeDockWidget(); ~TerminalStripTreeDockWidget();
void setProject(QETProject *project = nullptr);
void reload(); void reload();
bool currentIsStrip() const; bool currentIsStrip() const;
TerminalStrip* currentStrip() const; TerminalStrip* currentStrip() const;
@ -79,6 +80,7 @@ class TerminalStripTreeDockWidget : public QDockWidget
QHash<QUuid, QPointer<TerminalStrip>> m_uuid_strip_H; QHash<QUuid, QPointer<TerminalStrip>> m_uuid_strip_H;
QVector<QMetaObject::Connection> m_strip_changed_connection; QVector<QMetaObject::Connection> m_strip_changed_connection;
bool m_current_is_free_terminal{false}; bool m_current_is_free_terminal{false};
QMetaObject::Connection m_project_destroy_connection;
}; };
#endif // TERMINALSTRIPTREEDOCKWIDGET_H #endif // TERMINALSTRIPTREEDOCKWIDGET_H