mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2025-09-13 20:23:04 +02:00
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:
parent
3a6b4807db
commit
d711d8fb4a
@ -42,6 +42,10 @@ FreeTerminalEditor::FreeTerminalEditor(QETProject *project, QWidget *parent) :
|
||||
ui->m_table_view->setModel(m_model);
|
||||
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)
|
||||
connect(m_model, &FreeTerminalModel::dataChanged, this, [=] {
|
||||
this->setDisabledMove();
|
||||
@ -135,6 +139,31 @@ void FreeTerminalEditor::apply()
|
||||
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)
|
||||
{
|
||||
if (m_model)
|
||||
|
@ -19,8 +19,8 @@
|
||||
#define FREETERMINALEDITOR_H
|
||||
|
||||
#include <QWidget>
|
||||
#include "../../qetproject.h"
|
||||
|
||||
class QETProject;
|
||||
class RealTerminal;
|
||||
class FreeTerminalModel;
|
||||
class QTableView;
|
||||
@ -40,6 +40,8 @@ class FreeTerminalEditor : public QWidget
|
||||
void reload();
|
||||
void apply();
|
||||
|
||||
void setProject(QETProject *project);
|
||||
|
||||
private slots:
|
||||
void on_m_type_cb_activated(int index);
|
||||
void on_m_function_cb_activated(int index);
|
||||
@ -52,7 +54,7 @@ class FreeTerminalEditor : public QWidget
|
||||
|
||||
private:
|
||||
Ui::FreeTerminalEditor *ui;
|
||||
QETProject *m_project = nullptr;
|
||||
FreeTerminalModel *m_model = nullptr;
|
||||
QPointer <QETProject> m_project;
|
||||
FreeTerminalModel *m_model {nullptr};
|
||||
};
|
||||
#endif // FREETERMINALEDITOR_H
|
||||
|
@ -56,10 +56,30 @@ FreeTerminalModel::Column FreeTerminalModel::columnTypeForIndex(const QModelInde
|
||||
* @param parent
|
||||
*/
|
||||
FreeTerminalModel::FreeTerminalModel(QETProject *project, QObject *parent) :
|
||||
QAbstractTableModel(parent),
|
||||
m_project(project)
|
||||
QAbstractTableModel(parent) {
|
||||
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()
|
||||
{
|
||||
if (m_project) {
|
||||
ElementProvider provider_(m_project);
|
||||
auto free_terminal_vector = provider_.freeTerminal();
|
||||
|
||||
@ -319,6 +340,7 @@ void FreeTerminalModel::fillTerminalVector()
|
||||
m_terminal_vector.append(terminal_->realTerminal());
|
||||
m_real_t_data.append(modelRealTerminalData::data(terminal_->realTerminal()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************
|
||||
|
@ -47,6 +47,7 @@ class FreeTerminalModel : public QAbstractTableModel
|
||||
|
||||
public:
|
||||
explicit FreeTerminalModel(QETProject *project, QObject *parent = nullptr);
|
||||
void setProject(QETProject *project);
|
||||
|
||||
int rowCount(const QModelIndex &parent) const override;
|
||||
int columnCount(const QModelIndex &parent) const override;
|
||||
|
@ -84,6 +84,12 @@ TerminalStripEditor::~TerminalStripEditor() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void TerminalStripEditor::setProject(QETProject *project)
|
||||
{
|
||||
m_project = project;
|
||||
setCurrentStrip(nullptr);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TerminalStripEditor::setCurrentStrip
|
||||
* Set the current terminal strip edited to \p strip_
|
||||
@ -98,27 +104,15 @@ void TerminalStripEditor::setCurrentStrip(TerminalStrip *strip_)
|
||||
if (m_current_strip) {
|
||||
disconnect(m_current_strip, &TerminalStrip::orderChanged, 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();
|
||||
|
||||
if (!strip_)
|
||||
{
|
||||
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;
|
||||
if (!strip_) {
|
||||
clear();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
ui->m_installation_le ->setText(strip_->installation());
|
||||
ui->m_location_le ->setText(strip_->location());
|
||||
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::bridgeChanged, this, &TerminalStripEditor::reload);
|
||||
connect(m_current_strip, &QObject::destroyed, this, &TerminalStripEditor::clear);
|
||||
}
|
||||
}
|
||||
|
||||
@ -230,6 +225,22 @@ void TerminalStripEditor::apply()
|
||||
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
|
||||
* Span row of m_table_widget for multi-level terminal
|
||||
|
@ -41,11 +41,13 @@ class TerminalStripEditor : public QWidget
|
||||
public:
|
||||
explicit TerminalStripEditor(QETProject *project, QWidget *parent = nullptr);
|
||||
~TerminalStripEditor() override;
|
||||
void setProject(QETProject *project);
|
||||
void setCurrentStrip(TerminalStrip *strip_);
|
||||
void reload();
|
||||
void apply();
|
||||
|
||||
private:
|
||||
void clear();
|
||||
void spanMultiLevelTerminals();
|
||||
void selectionChanged();
|
||||
QSize setUpBridgeCellWidth();
|
||||
@ -67,8 +69,8 @@ class TerminalStripEditor : public QWidget
|
||||
|
||||
private:
|
||||
Ui::TerminalStripEditor *ui;
|
||||
QETProject *m_project {nullptr};
|
||||
TerminalStrip *m_current_strip {nullptr};
|
||||
QPointer<QETProject> m_project;
|
||||
QPointer<TerminalStrip> m_current_strip;
|
||||
TerminalStripModel *m_model {nullptr};
|
||||
};
|
||||
|
||||
|
@ -76,6 +76,18 @@ TerminalStripEditorWindow::~TerminalStripEditorWindow()
|
||||
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) {
|
||||
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) {
|
||||
ui->m_button_box->setHidden(arg1 == EMPTY_PAGE);
|
||||
}
|
||||
|
||||
|
@ -51,6 +51,8 @@ class TerminalStripEditorWindow : public QMainWindow
|
||||
if (!window_)
|
||||
window_ = new TerminalStripEditorWindow{project, parent};
|
||||
mutex_.unlock();
|
||||
} else {
|
||||
window_->setProject(project);
|
||||
}
|
||||
return window_;
|
||||
}
|
||||
@ -71,6 +73,7 @@ class TerminalStripEditorWindow : public QMainWindow
|
||||
explicit TerminalStripEditorWindow(QETProject *project, QWidget *parent = nullptr);
|
||||
~TerminalStripEditorWindow();
|
||||
|
||||
void setProject(QETProject *project);
|
||||
void setCurrentStrip(TerminalStrip *strip);
|
||||
|
||||
private slots:
|
||||
@ -87,7 +90,7 @@ class TerminalStripEditorWindow : public QMainWindow
|
||||
|
||||
private:
|
||||
Ui::TerminalStripEditorWindow *ui{nullptr};
|
||||
QETProject *m_project {nullptr};
|
||||
QPointer <QETProject> m_project;
|
||||
TerminalStripTreeDockWidget *m_tree_dock{nullptr};
|
||||
FreeTerminalEditor *m_free_terminal_editor {nullptr};
|
||||
TerminalStripEditor *m_terminal_strip_editor {nullptr};
|
||||
|
@ -30,11 +30,10 @@
|
||||
|
||||
TerminalStripTreeDockWidget::TerminalStripTreeDockWidget(QETProject *project, QWidget *parent) :
|
||||
QDockWidget(parent),
|
||||
ui(new Ui::TerminalStripTreeDockWidget),
|
||||
m_project(project)
|
||||
ui(new Ui::TerminalStripTreeDockWidget)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
buildTree();
|
||||
setProject(project);
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)
|
||||
ui->m_tree_view->expandRecursively(ui->m_tree_view->rootIndex());
|
||||
@ -48,6 +47,32 @@ TerminalStripTreeDockWidget::~TerminalStripTreeDockWidget()
|
||||
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
|
||||
*/
|
||||
@ -205,6 +230,9 @@ void TerminalStripTreeDockWidget::on_m_tree_view_currentItemChanged(QTreeWidgetI
|
||||
*/
|
||||
void TerminalStripTreeDockWidget::buildTree()
|
||||
{
|
||||
if(!m_project) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto title_ = m_project->title();
|
||||
if (title_.isEmpty()) {
|
||||
|
@ -49,6 +49,7 @@ class TerminalStripTreeDockWidget : public QDockWidget
|
||||
explicit TerminalStripTreeDockWidget(QETProject *project, QWidget *parent = nullptr);
|
||||
~TerminalStripTreeDockWidget();
|
||||
|
||||
void setProject(QETProject *project = nullptr);
|
||||
void reload();
|
||||
bool currentIsStrip() const;
|
||||
TerminalStrip* currentStrip() const;
|
||||
@ -79,6 +80,7 @@ class TerminalStripTreeDockWidget : public QDockWidget
|
||||
QHash<QUuid, QPointer<TerminalStrip>> m_uuid_strip_H;
|
||||
QVector<QMetaObject::Connection> m_strip_changed_connection;
|
||||
bool m_current_is_free_terminal{false};
|
||||
QMetaObject::Connection m_project_destroy_connection;
|
||||
};
|
||||
|
||||
#endif // TERMINALSTRIPTREEDOCKWIDGET_H
|
||||
|
Loading…
x
Reference in New Issue
Block a user