From 46f658753592a52d6bb7466b9cb9a2d0d26de87a Mon Sep 17 00:00:00 2001 From: krivoshein Date: Thu, 23 Jan 2025 11:05:41 +0300 Subject: [PATCH 1/9] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=B5=D1=81?= =?UTF-8?q?=20TypeQueryToDB=20=D0=B2=20DataBaseLMS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataBaseLMS/CMakeLists.txt | 1 + DataBaseLMS/databaselms.cpp | 49 +++++++++++++++++-- DataBaseLMS/databaselms.h | 11 +++-- DataBaseLMS/interfacedatabaselms.cpp | 17 ++++++- DataBaseLMS/interfacedatabaselms.h | 4 ++ DataBaseLMS/typeQueryToDB.h | 21 ++++++++ .../connectorToServer/Datas.h | 4 +- ServerLMS/Data/typesDataServerClient.h | 4 +- ServerLMS/Systems/processingsystem.cpp | 13 +++++ ServerLMS/providerdblms.cpp | 17 ++++++- ServerLMS/providerdblms.h | 4 ++ 11 files changed, 134 insertions(+), 11 deletions(-) create mode 100644 DataBaseLMS/typeQueryToDB.h diff --git a/DataBaseLMS/CMakeLists.txt b/DataBaseLMS/CMakeLists.txt index f3f154c..b9aafce 100644 --- a/DataBaseLMS/CMakeLists.txt +++ b/DataBaseLMS/CMakeLists.txt @@ -26,6 +26,7 @@ add_library(DataBaseLMS SHARED classroom.h tasksAmmFim.cpp tasksAmmFim.h + typeQueryToDB.h ) target_link_libraries(DataBaseLMS PRIVATE Qt5::Widgets) diff --git a/DataBaseLMS/databaselms.cpp b/DataBaseLMS/databaselms.cpp index ecaebaf..1d9cf40 100644 --- a/DataBaseLMS/databaselms.cpp +++ b/DataBaseLMS/databaselms.cpp @@ -426,12 +426,12 @@ int DataBaseLMS::insertGroup(Group group) return queryExecInt(queryStr); } -int DataBaseLMS::deleteGroup(int group_id) +int DataBaseLMS::deleteGroup(int id_group) { QString queryStr = QString("DELETE FROM public.groups " "WHERE group_id = %1 " "RETURNING groups.group_id").arg( - QString::number(group_id)); + QString::number(id_group)); return queryExecInt(queryStr); } @@ -469,6 +469,47 @@ int DataBaseLMS::updateTaskAMM(TaskAmmFim task) return queryExecInt(queryStr); } +int DataBaseLMS::deleteTaskAMM(int id_task) +{ + QString queryStr = QString("DELETE FROM public.tasks_amm " + "WHERE task_id = %1 " + "RETURNING tasks_amm.task_id").arg( + QString::number(id_task)); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::insertTaskFIM(int id_trainee) +{ + QString queryStr = QString("INSERT INTO public.tasks_fim (title, trainee_task) " + "VALUES (DEFAULT, %1) " + "RETURNING tasks_fim.task_id").arg( + QString::number(id_trainee)); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::updateTaskFIM(TaskAmmFim task) +{ + QString queryStr = QString("UPDATE public.tasks_fim SET title = '%1' " + "WHERE task_id = %2 " + "RETURNING tasks_fim.task_id").arg( + task.title, + QString::number(task.getID()) ); + + return queryExecInt(queryStr); +} + +int DataBaseLMS::deleteTaskFIM(int id_task) +{ + QString queryStr = QString("DELETE FROM public.tasks_fim " + "WHERE task_id = %1 " + "RETURNING tasks_fim.task_id").arg( + QString::number(id_task)); + + return queryExecInt(queryStr); +} + Trainee DataBaseLMS::selectTrainee(int id_trainee) { Trainee trainee; @@ -721,12 +762,12 @@ int DataBaseLMS::insertTrainee(Trainee trainee) return queryExecInt(queryStr); } -int DataBaseLMS::deleteTrainee(int trainee_id) +int DataBaseLMS::deleteTrainee(int id_trainee) { QString queryStr = QString("DELETE FROM public.trainees " "WHERE trainee_id = %1 " "RETURNING trainees.trainee_id").arg( - QString::number(trainee_id)); + QString::number(id_trainee)); return queryExecInt(queryStr); } diff --git a/DataBaseLMS/databaselms.h b/DataBaseLMS/databaselms.h index 6d73f30..6cb61e2 100644 --- a/DataBaseLMS/databaselms.h +++ b/DataBaseLMS/databaselms.h @@ -50,12 +50,17 @@ protected: Group selectGroup(int id_group); int insertGroup(); int insertGroup(Group group); - int deleteGroup(int group_id); + int deleteGroup(int id_group); int updateGroup(Group group); - //Задача + //Задача AMM int insertTaskAMM(int id_trainee); int updateTaskAMM(TaskAmmFim task); + int deleteTaskAMM(int id_task); + //Задача FIM + int insertTaskFIM(int id_trainee); + int updateTaskFIM(TaskAmmFim task); + int deleteTaskFIM(int id_task); //Обучаемый Trainee selectTrainee(int id_trainee); @@ -72,7 +77,7 @@ protected: int insertTrainee(int id_group); int insertTrainee(Trainee trainee); - int deleteTrainee(int trainee_id); + int deleteTrainee(int id_trainee); int updateTrainee(Trainee trainee); QList selectTasksOfTrainee(int trainee_id); diff --git a/DataBaseLMS/interfacedatabaselms.cpp b/DataBaseLMS/interfacedatabaselms.cpp index b02f468..efc302b 100644 --- a/DataBaseLMS/interfacedatabaselms.cpp +++ b/DataBaseLMS/interfacedatabaselms.cpp @@ -288,7 +288,7 @@ int InterfaceDataBaseLMS::newTaskAMM(int id_trainee) int InterfaceDataBaseLMS::delTaskAMM(int id) { - return 0; + return deleteTaskAMM(id); } int InterfaceDataBaseLMS::editTaskAMM(TaskAmmFim task) @@ -296,6 +296,21 @@ int InterfaceDataBaseLMS::editTaskAMM(TaskAmmFim task) return updateTaskAMM(task); } +int InterfaceDataBaseLMS::newTaskFIM(int id_trainee) +{ + return insertTaskFIM(id_trainee); +} + +int InterfaceDataBaseLMS::delTaskFIM(int id) +{ + return deleteTaskFIM(id); +} + +int InterfaceDataBaseLMS::editTaskFIM(TaskAmmFim task) +{ + return updateTaskFIM(task); +} + int InterfaceDataBaseLMS::newTrainee(int id_group) { return insertTrainee(id_group); diff --git a/DataBaseLMS/interfacedatabaselms.h b/DataBaseLMS/interfacedatabaselms.h index 0744b3e..cd06584 100644 --- a/DataBaseLMS/interfacedatabaselms.h +++ b/DataBaseLMS/interfacedatabaselms.h @@ -73,6 +73,10 @@ public: int delTaskAMM(int id); int editTaskAMM(TaskAmmFim task); + int newTaskFIM(int id_trainee); + int delTaskFIM(int id); + int editTaskFIM(TaskAmmFim task); + int newTrainee(int id_group); int delTrainee(int id); int editTrainee(Trainee trainee); diff --git a/DataBaseLMS/typeQueryToDB.h b/DataBaseLMS/typeQueryToDB.h new file mode 100644 index 0000000..72b45f0 --- /dev/null +++ b/DataBaseLMS/typeQueryToDB.h @@ -0,0 +1,21 @@ +#ifndef TYPEQUERYTODB_H +#define TYPEQUERYTODB_H + +#include "DataBaseLMS_global.h" + +enum TypeQueryToDB{ + TYPE_QUERY_GET_ALL_LISTS, + TYPE_QUERY_NEW_INSTRUCTOR, + TYPE_QUERY_DEL_INSTRUCTOR, + TYPE_QUERY_EDIT_INSTRUCTOR, + TYPE_QUERY_NEW_GROUP, + TYPE_QUERY_DEL_GROUP, + TYPE_QUERY_EDIT_GROUP, + TYPE_QUERY_NEW_TRAINEE, + TYPE_QUERY_DEL_TRAINEE, + TYPE_QUERY_EDIT_TRAINEE, + TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE, + TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE +}; + +#endif // TYPEQUERYTODB_H diff --git a/InstructorsAndTrainees/connectorToServer/Datas.h b/InstructorsAndTrainees/connectorToServer/Datas.h index ef8c985..5f03268 100644 --- a/InstructorsAndTrainees/connectorToServer/Datas.h +++ b/InstructorsAndTrainees/connectorToServer/Datas.h @@ -2,6 +2,7 @@ #define DATAS_H #include +#include "typeQueryToDB.h" class ServerSettings{ public: @@ -41,7 +42,7 @@ class ClientDeAutorization{ public: QString Login; }; - +/* enum TypeQueryToDB{ TYPE_QUERY_GET_ALL_LISTS, TYPE_QUERY_NEW_INSTRUCTOR, @@ -56,6 +57,7 @@ enum TypeQueryToDB{ TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE, TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE }; +*/ class ClientQueryToDB{ public: diff --git a/ServerLMS/Data/typesDataServerClient.h b/ServerLMS/Data/typesDataServerClient.h index d3f637c..beee14e 100644 --- a/ServerLMS/Data/typesDataServerClient.h +++ b/ServerLMS/Data/typesDataServerClient.h @@ -3,6 +3,7 @@ #include #include +#include "typeQueryToDB.h" #define NOTIFY_SERVER_END "END" #define NOTIFY_SERVER_BLOCKED "BLOCKED" @@ -60,7 +61,7 @@ class ClientDeAutorization public: QString Login; }; - +/* enum TypeQueryToDB{ TYPE_QUERY_GET_ALL_LISTS, TYPE_QUERY_NEW_INSTRUCTOR, @@ -75,6 +76,7 @@ enum TypeQueryToDB{ TYPE_QUERY_ASSIGN_TASK_AMM_TO_TRAINEE, TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE }; +*/ class ClientQueryToDB{ public: diff --git a/ServerLMS/Systems/processingsystem.cpp b/ServerLMS/Systems/processingsystem.cpp index 0adbfae..9acc099 100644 --- a/ServerLMS/Systems/processingsystem.cpp +++ b/ServerLMS/Systems/processingsystem.cpp @@ -240,6 +240,19 @@ void ProcessingSystem::processingClientQueryToDB(ClientHandler *client, ClientQu //emit sigTasksChanged(); break; } + + case TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE: + { + int id_new; + id_new = providerDBLMS->newTaskFIM(id); + if(id_new) + { + (*(TaskAmmFim*)data).setID(id_new); + providerDBLMS->editTaskFIM(*(TaskAmmFim*)data); + } + //emit sigTasksChanged(); + break; + } } //client->sendXmlAnswer(arrayAnswer, PacketType::TYPE_XMLANSWER_QUERY_DB_LIST_INSTRUCTORS); diff --git a/ServerLMS/providerdblms.cpp b/ServerLMS/providerdblms.cpp index cadfb13..8a137bc 100644 --- a/ServerLMS/providerdblms.cpp +++ b/ServerLMS/providerdblms.cpp @@ -307,10 +307,25 @@ int ProviderDBLMS::newTaskAMM(int id_trainee) int ProviderDBLMS::delTaskAMM(int id) { - return 0; + return dbLMS->delTaskAMM(id); } int ProviderDBLMS::editTaskAMM(TaskAmmFim task) { return dbLMS->editTaskAMM(task); } + +int ProviderDBLMS::newTaskFIM(int id_trainee) +{ + return dbLMS->newTaskFIM(id_trainee); +} + +int ProviderDBLMS::delTaskFIM(int id) +{ + return dbLMS->delTaskFIM(id); +} + +int ProviderDBLMS::editTaskFIM(TaskAmmFim task) +{ + return dbLMS->editTaskFIM(task); +} diff --git a/ServerLMS/providerdblms.h b/ServerLMS/providerdblms.h index bf53901..852c90a 100644 --- a/ServerLMS/providerdblms.h +++ b/ServerLMS/providerdblms.h @@ -46,6 +46,10 @@ public: int delTaskAMM(int id); int editTaskAMM(TaskAmmFim task); + int newTaskFIM(int id_trainee); + int delTaskFIM(int id); + int editTaskFIM(TaskAmmFim task); + Q_SIGNALS: //сигнал о блокировке авторизации void signal_BlockAutorization(bool block); From 1ca29b964264d724ac9faeec669ef709ee13644c Mon Sep 17 00:00:00 2001 From: krivoshein Date: Thu, 23 Jan 2025 11:17:34 +0300 Subject: [PATCH 2/9] =?UTF-8?q?=D0=9F=D0=BE=D1=87=D0=B8=D0=BD=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D1=83=20=D0=B0=D0=B2=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20=D0=B8=D0=BD?= =?UTF-8?q?=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D0=BE=D1=80=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=20=D0=BE=D1=82=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=A1=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InstructorsAndTrainees/instructorsandtraineeswidget.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index 6f6a4c2..234fbed 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -221,6 +221,8 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state) {//Сервер отключен ui->btnConnectionToServer->setEnabled(true); ui->btnAuthorizationInstructor->setEnabled(false); + ui->btnAuthorizationInstructor->setText(tr("Authorization Instructor")); + ui->btnAuthorizationInstructor->setChecked(false); ui->btnSetVersion->hide(); ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png"))); } From 6a86ae9909031679b2dd2a6c07de53f090178335 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Thu, 23 Jan 2025 12:04:59 +0300 Subject: [PATCH 3/9] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BE=D1=87=D0=B8=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=BA=D0=BE=D0=B2=20=D0=9E=D0=B1=D1=83=D1=87=D0=B0?= =?UTF-8?q?=D0=B5=D0=BC=D1=8B=D1=85=20=D0=B8=20=D0=B8=D0=BD=D1=81=D1=82?= =?UTF-8?q?=D1=80=D1=83=D0=BA=D1=82=D0=BE=D1=80=D0=BE=D0=B2=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=B5=D0=B0=D0=B2=D1=82=D0=BE=D1=80=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InstructorsAndTrainees/commonview.h | 4 ++++ .../instructorsandtraineeswidget.cpp | 16 +++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/InstructorsAndTrainees/commonview.h b/InstructorsAndTrainees/commonview.h index ea9e755..157044e 100644 --- a/InstructorsAndTrainees/commonview.h +++ b/InstructorsAndTrainees/commonview.h @@ -39,6 +39,10 @@ public: { this->authComplited = authComplited; } + void clearTree() + { + treeWidget->clear(); + } protected: void setArchiveVisible(bool archiveVisible) diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index 234fbed..b1bcc47 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -38,8 +38,8 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : connect(viewerInstructors, &ViewerInstructors::signal_BlockAutorization, this, &InstructorsAndTraineesWidget::signal_BlockAutorization); connect(viewerTrainees, &ViewerTrainees::signal_BlockAutorization, this, &InstructorsAndTraineesWidget::signal_BlockAutorization); - connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI); - connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI); + //connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI); + //connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI); connect(connectorToServer,&ConnectorToServer::signal_ConnectedToServer,this,&InstructorsAndTraineesWidget::slot_ConnectedToServer); @@ -194,7 +194,7 @@ void InstructorsAndTraineesWidget::checkDeLoginResult(ServerDeAuthorization *ser viewerInstructors->setAuthComplited(false); viewerTrainees->setAuthComplited(false); - Q_EMIT signal_NeedUpdateUI(true, false); + //Q_EMIT signal_NeedUpdateUI(true, false); ui->btnAuthorizationInstructor->setText(tr("Authorization Instructor")); updateLabelLoggedInInstructor("",""); @@ -225,6 +225,9 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state) ui->btnAuthorizationInstructor->setChecked(false); ui->btnSetVersion->hide(); ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png"))); + + viewerTrainees->clearTree(); + viewerInstructors->clearTree(); } } @@ -284,6 +287,8 @@ void InstructorsAndTraineesWidget::on_btnAuthorizationInstructor_clicked() {//Авторизация Инструктора локальная (Администратора) if(authorizationInstructorDialog(this)) { + connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI); + connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI); } else ui->btnAuthorizationInstructor->setChecked(false); @@ -294,6 +299,11 @@ void InstructorsAndTraineesWidget::on_btnAuthorizationInstructor_clicked() { if(deAuthorizationInstructor(loginInstructorLoggedInLocal)) { + disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI); + disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI); + + viewerTrainees->clearTree(); + viewerInstructors->clearTree(); } else ui->btnAuthorizationInstructor->setChecked(true); From 7fc2252a38c4ea0e076c33b20515043b5699a3b3 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Thu, 23 Jan 2025 12:22:31 +0300 Subject: [PATCH 4/9] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BE=D1=87=D0=B8=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=BA=D0=BE=D0=B2=20=D0=97=D0=B0=D0=B4=D0=B0=D1=87?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=20=D0=B4=D0=B5=D0=B0=D0=B2=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InstructorsAndTrainees/instructorsandtraineeswidget.cpp | 8 +++++++- InstructorsAndTrainees/tasks/ammtaskswidget.h | 6 ++++++ InstructorsAndTrainees/tasks/fimtaskswidget.h | 6 ++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index b1bcc47..03b4e84 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -172,7 +172,7 @@ void InstructorsAndTraineesWidget::checkLoginResult(ServerAuthorization *serverA updateLabelLoggedInInstructor(serverAuth->Login, serverAuth->ClientName); connectorToServer->setLoginName(nameInstructorLoggedInLocal); - QMessageBox::information(this, tr("Instructor authorization"), tr("Successfully!")); + //QMessageBox::information(this, tr("Instructor authorization"), tr("Successfully!")); } else { @@ -228,6 +228,9 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state) viewerTrainees->clearTree(); viewerInstructors->clearTree(); + + ammTasksWidget->clearTree(); + fimTasksWidget->clearTree(); } } @@ -304,6 +307,9 @@ void InstructorsAndTraineesWidget::on_btnAuthorizationInstructor_clicked() viewerTrainees->clearTree(); viewerInstructors->clearTree(); + + ammTasksWidget->clearTree(); + fimTasksWidget->clearTree(); } else ui->btnAuthorizationInstructor->setChecked(true); diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.h b/InstructorsAndTrainees/tasks/ammtaskswidget.h index 216f1b7..2a34414 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.h +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.h @@ -25,6 +25,12 @@ public: explicit AMMtasksWidget(ConnectorToServer* connectorToServer, QWidget *parent = nullptr); ~AMMtasksWidget(); +public: + void clearTree() + { + treeWidget->clear(); + } + private Q_SLOTS: void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); void on_btnUpdateTasks_clicked(); diff --git a/InstructorsAndTrainees/tasks/fimtaskswidget.h b/InstructorsAndTrainees/tasks/fimtaskswidget.h index c55a1a2..3be156c 100644 --- a/InstructorsAndTrainees/tasks/fimtaskswidget.h +++ b/InstructorsAndTrainees/tasks/fimtaskswidget.h @@ -24,6 +24,12 @@ public: explicit FIMtasksWidget(ConnectorToServer* connectorToServer, QWidget *parent = nullptr); ~FIMtasksWidget(); +public: + void clearTree() + { + treeWidget->clear(); + } + private Q_SLOTS: void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); void on_btnUpdateTasks_clicked(); From 17dcf18da6d2653e5bbd1a1a51cc79c2f5872d17 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Thu, 23 Jan 2025 12:32:31 +0300 Subject: [PATCH 5/9] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BE=D1=87=D0=B8=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=9C=D0=B5?= =?UTF-8?q?=D1=81=D1=81=D0=B5=D0=BD=D0=B4=D0=B6=D0=B5=D1=80=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=20=D0=B4=D0=B5=D0=B0=D0=B2=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InstructorsAndTrainees/instructorsandtraineeswidget.cpp | 8 +++++++- InstructorsAndTrainees/messanger/messangerwidget.cpp | 6 ++++++ InstructorsAndTrainees/messanger/messangerwidget.h | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index 03b4e84..62fa036 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -52,7 +52,7 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, ammTasksWidget, &AMMtasksWidget::slot_traineeSelected); messangerWidget = new MessangerWidget(this); - connect(connectorToServer,&ConnectorToServer::signal_InitMessanger,messangerWidget,&MessangerWidget::slot_InitMessanger); + //connect(connectorToServer,&ConnectorToServer::signal_InitMessanger,messangerWidget,&MessangerWidget::slot_InitMessanger); connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, messangerWidget, &MessangerWidget::slot_traineeSelected); connect(messangerWidget, &MessangerWidget::signal_tabMessengerChanged, viewerTrainees, &ViewerTrainees::slot_tabMessengerChanged); connect(messangerWidget, &MessangerWidget::signal_msgToClientReady, connectorToServer, &ConnectorToServer::slot_msgToClientReady); @@ -231,6 +231,8 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state) ammTasksWidget->clearTree(); fimTasksWidget->clearTree(); + + messangerWidget->clear(); } } @@ -292,6 +294,7 @@ void InstructorsAndTraineesWidget::on_btnAuthorizationInstructor_clicked() { connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI); connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI); + connect(connectorToServer,&ConnectorToServer::signal_InitMessanger,messangerWidget,&MessangerWidget::slot_InitMessanger); } else ui->btnAuthorizationInstructor->setChecked(false); @@ -304,12 +307,15 @@ void InstructorsAndTraineesWidget::on_btnAuthorizationInstructor_clicked() { disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI); disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI); + disconnect(connectorToServer,&ConnectorToServer::signal_InitMessanger,messangerWidget,&MessangerWidget::slot_InitMessanger); viewerTrainees->clearTree(); viewerInstructors->clearTree(); ammTasksWidget->clearTree(); fimTasksWidget->clearTree(); + + messangerWidget->clear(); } else ui->btnAuthorizationInstructor->setChecked(true); diff --git a/InstructorsAndTrainees/messanger/messangerwidget.cpp b/InstructorsAndTrainees/messanger/messangerwidget.cpp index da36b37..6fe6fdd 100644 --- a/InstructorsAndTrainees/messanger/messangerwidget.cpp +++ b/InstructorsAndTrainees/messanger/messangerwidget.cpp @@ -130,6 +130,12 @@ int MessangerWidget::getIndexTab(QString login) return -1; } +void MessangerWidget::clear() +{ + listTrainees.clear(); + actualizationTabsDialogMessenger(); +} + void MessangerWidget::on_btnSend_clicked() { QString text = ui->editMsg->toPlainText(); diff --git a/InstructorsAndTrainees/messanger/messangerwidget.h b/InstructorsAndTrainees/messanger/messangerwidget.h index 48b4c66..b4438e7 100644 --- a/InstructorsAndTrainees/messanger/messangerwidget.h +++ b/InstructorsAndTrainees/messanger/messangerwidget.h @@ -37,6 +37,8 @@ public: int getIndexTab(QString login); + void clear(); + private slots: void on_btnSend_clicked(); void on_tabWidget_currentChanged(int index); From 8bb8ea0eaf109dd119a702a67bdc56c9f08d9031 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Thu, 23 Jan 2025 14:41:25 +0300 Subject: [PATCH 6/9] =?UTF-8?q?XML=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81?= =?UTF-8?q?=D1=8B=20=D1=84=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D1=83=D1=8E=D1=82?= =?UTF-8?q?=D1=81=D1=8F=20=D0=BD=D0=B0=D0=BF=D1=80=D1=8F=D0=BC=D1=83=D1=8E?= =?UTF-8?q?=20=D0=B2=20QByteArray?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../connectorToServer/Core/dataparser.cpp | 45 +++++++++---------- .../connectorToServer/Core/dataparser.h | 12 ++--- .../connectorToServer/Core/sendsystem.cpp | 9 +--- .../connectorToServer/Core/sendsystem.h | 2 +- .../connectorToServer/connectortoserver.cpp | 20 ++++----- .../connectorToServer/connectortoserver.h | 2 +- .../instructorsandtraineeswidget.cpp | 6 ++- 7 files changed, 45 insertions(+), 51 deletions(-) diff --git a/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp b/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp index acf46b5..b3ad8c3 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/dataparser.cpp @@ -54,13 +54,12 @@ void DataParser::createFileDataList(QList fileDataList,QString filenam file.close(); } -void DataParser::createAuthMessage(ClientAutorization *auth) +QByteArray DataParser::createAuthMessage(ClientAutorization *auth) { authPassCache = auth; //кэширование даных авторизации, для сохранения при успешном заходе - QFile file(tempName); - file.open(QIODevice::WriteOnly); - QXmlStreamWriter xmlWriter(&file); + QByteArray array; + QXmlStreamWriter xmlWriter(&array); xmlWriter.setAutoFormatting(true); xmlWriter.writeStartDocument(); @@ -74,14 +73,13 @@ void DataParser::createAuthMessage(ClientAutorization *auth) xmlWriter.writeEndElement(); xmlWriter.writeEndDocument(); - file.close(); + return array; } -void DataParser::createToClientMessage(ToClientMessage *toClientMessage) +QByteArray DataParser::createToClientMessage(ToClientMessage *toClientMessage) { - QFile file(tempName); - file.open(QIODevice::WriteOnly); - QXmlStreamWriter xmlWriter(&file); + QByteArray array; + QXmlStreamWriter xmlWriter(&array); xmlWriter.setAutoFormatting(true); xmlWriter.writeStartDocument(); @@ -95,16 +93,15 @@ void DataParser::createToClientMessage(ToClientMessage *toClientMessage) xmlWriter.writeEndElement(); xmlWriter.writeEndDocument(); - file.close(); + return array; } -void DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id, void* data) +QByteArray DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id, void* data) { - QFile file(tempName); - file.open(QIODevice::WriteOnly); - QXmlStreamWriter xmlWriter(&file); + QByteArray array; + QXmlStreamWriter xmlWriter(&array); xmlWriter.setAutoFormatting(true); xmlWriter.writeStartDocument(); @@ -195,14 +192,13 @@ void DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id, void xmlWriter.writeEndElement(); xmlWriter.writeEndDocument(); - file.close(); + return array; } -void DataParser::createQueryTasksXMLMessage(QString type) +QByteArray DataParser::createQueryTasksXMLMessage(QString type) { - QFile file(tempName); - file.open(QIODevice::WriteOnly); - QXmlStreamWriter xmlWriter(&file); + QByteArray array; + QXmlStreamWriter xmlWriter(&array); xmlWriter.setAutoFormatting(true); xmlWriter.writeStartDocument(); @@ -214,14 +210,13 @@ void DataParser::createQueryTasksXMLMessage(QString type) xmlWriter.writeEndElement(); xmlWriter.writeEndDocument(); - file.close(); + return array; } -void DataParser::createDeAuthMessage(ClientDeAutorization *deAuth) +QByteArray DataParser::createDeAuthMessage(ClientDeAutorization *deAuth) { - QFile file(tempName); - file.open(QIODevice::WriteOnly); - QXmlStreamWriter xmlWriter(&file); + QByteArray array; + QXmlStreamWriter xmlWriter(&array); xmlWriter.setAutoFormatting(true); xmlWriter.writeStartDocument(); @@ -233,7 +228,7 @@ void DataParser::createDeAuthMessage(ClientDeAutorization *deAuth) xmlWriter.writeEndElement(); xmlWriter.writeEndDocument(); - file.close(); + return array; } diff --git a/InstructorsAndTrainees/connectorToServer/Core/dataparser.h b/InstructorsAndTrainees/connectorToServer/Core/dataparser.h index c0a3406..8e2e85c 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/dataparser.h +++ b/InstructorsAndTrainees/connectorToServer/Core/dataparser.h @@ -21,11 +21,13 @@ public: void createServerSettings(QString server,QString port); void saveClientSettrings(QString language,bool isAutoStart); void createFileDataList(QList fileDataList,QString filename); - void createAuthMessage(ClientAutorization *auth); - void createToClientMessage(ToClientMessage *toClientMessage); - void createQueryToDBMessage(ClientQueryToDB *queryToDB, int id = 0, void* data = nullptr); - void createQueryTasksXMLMessage(QString type); - void createDeAuthMessage(ClientDeAutorization *deAuth); + + QByteArray createAuthMessage(ClientAutorization *auth); + QByteArray createToClientMessage(ToClientMessage *toClientMessage); + QByteArray createQueryToDBMessage(ClientQueryToDB *queryToDB, int id = 0, void* data = nullptr); + QByteArray createQueryTasksXMLMessage(QString type); + QByteArray createDeAuthMessage(ClientDeAutorization *deAuth); + void createAuthData(ServerAuthorization *serverAuth); void createAuthDataOffline(QString username,QString pass); void addRunData(QList displays); diff --git a/InstructorsAndTrainees/connectorToServer/Core/sendsystem.cpp b/InstructorsAndTrainees/connectorToServer/Core/sendsystem.cpp index dadaaf7..3c34e5b 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/sendsystem.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/sendsystem.cpp @@ -31,21 +31,14 @@ void SendSystem::sendDisable() socket->waitForBytesWritten(); } -void SendSystem::sendXMLmsgGUItoServer() +void SendSystem::sendXMLmsgGUItoServer(QByteArray array) { QDataStream stream(socket); stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); - QFile file(tempName); - file.open(QIODevice::ReadOnly); - - QByteArray array = file.readAll(); - stream << PacketType::TYPE_XMLANSWER; stream << array; socket->waitForBytesWritten(); - - file.close(); } void SendSystem::sendFileBlock(QString path) diff --git a/InstructorsAndTrainees/connectorToServer/Core/sendsystem.h b/InstructorsAndTrainees/connectorToServer/Core/sendsystem.h index 1e22eef..924b411 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/sendsystem.h +++ b/InstructorsAndTrainees/connectorToServer/Core/sendsystem.h @@ -14,7 +14,7 @@ class SendSystem :public QObject public: explicit SendSystem(QObject* parent = nullptr); void setSocket(QTcpSocket *socket); - void sendXMLmsgGUItoServer(); + void sendXMLmsgGUItoServer(QByteArray array); void sendDisable(); void sendFileBlock(QString path); void sendFolderBlock(QString path); diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp index 13dabe1..69e6687 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.cpp @@ -28,8 +28,8 @@ bool ConnectorToServer::authorizationInstructorLocal(QString login, QString pass autorization->Password = password; autorization->TypeClient = TypeClientAutorization::TYPE_GUI; - dataParser->createAuthMessage(autorization); - emit signal_sendXMLmsgGUItoServer(); + QByteArray array = dataParser->createAuthMessage(autorization); + emit signal_sendXMLmsgGUItoServer(array); return true; } @@ -44,8 +44,8 @@ bool ConnectorToServer::deAuthorizationInstructorLocal(QString login) ClientDeAutorization *deAutorization = new ClientDeAutorization; deAutorization->Login = login; - dataParser->createDeAuthMessage(deAutorization); - emit signal_sendXMLmsgGUItoServer(); + QByteArray array = dataParser->createDeAuthMessage(deAutorization); + emit signal_sendXMLmsgGUItoServer(array); return true; } @@ -60,8 +60,8 @@ bool ConnectorToServer::sendQueryToDB(TypeQueryToDB typeQuery, int id, void* dat ClientQueryToDB *queryToDB = new ClientQueryToDB; queryToDB->typeQuery = typeQuery; - dataParser->createQueryToDBMessage(queryToDB, id, data); - emit signal_sendXMLmsgGUItoServer(); + QByteArray array = dataParser->createQueryToDBMessage(queryToDB, id, data); + emit signal_sendXMLmsgGUItoServer(array); return true; } @@ -78,8 +78,8 @@ bool ConnectorToServer::sendMessageForClient(int id, QString login, QString text toClientMessage->Login = login; toClientMessage->Text = text; - dataParser->createToClientMessage(toClientMessage); - emit signal_sendXMLmsgGUItoServer(); + QByteArray array = dataParser->createToClientMessage(toClientMessage); + emit signal_sendXMLmsgGUItoServer(array); return true; } @@ -91,8 +91,8 @@ bool ConnectorToServer::sendQueryTasksXML(QString type) return false; } - dataParser->createQueryTasksXMLMessage(type); - emit signal_sendXMLmsgGUItoServer(); + QByteArray array = dataParser->createQueryTasksXMLMessage(type); + emit signal_sendXMLmsgGUItoServer(array); return true; } diff --git a/InstructorsAndTrainees/connectorToServer/connectortoserver.h b/InstructorsAndTrainees/connectorToServer/connectortoserver.h index 67b06c8..70e0867 100644 --- a/InstructorsAndTrainees/connectorToServer/connectortoserver.h +++ b/InstructorsAndTrainees/connectorToServer/connectortoserver.h @@ -85,7 +85,7 @@ signals: SendSystem *sendSystem, QThread *thread); - void signal_sendXMLmsgGUItoServer(); + void signal_sendXMLmsgGUItoServer(QByteArray array); void sigLoginResult(ServerAuthorization * serverAuth); void sigDeLoginResult(ServerDeAuthorization * serverDeAuth); diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index 62fa036..1e36a42 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -172,6 +172,10 @@ void InstructorsAndTraineesWidget::checkLoginResult(ServerAuthorization *serverA updateLabelLoggedInInstructor(serverAuth->Login, serverAuth->ClientName); connectorToServer->setLoginName(nameInstructorLoggedInLocal); + + connectorToServer->sendQueryTasksXML("fim"); + connectorToServer->sendQueryTasksXML("amm"); + //QMessageBox::information(this, tr("Instructor authorization"), tr("Successfully!")); } else @@ -199,7 +203,7 @@ void InstructorsAndTraineesWidget::checkDeLoginResult(ServerDeAuthorization *ser ui->btnAuthorizationInstructor->setText(tr("Authorization Instructor")); updateLabelLoggedInInstructor("",""); - QMessageBox::information(this, tr("Instructor deauthorization"), tr("Successfully!")); + //QMessageBox::information(this, tr("Instructor deauthorization"), tr("Successfully!")); } else { From 2ab543d6eb6ebb0e01d859ab1dbf16e06ecc4f22 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Thu, 23 Jan 2025 16:03:04 +0300 Subject: [PATCH 7/9] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=20=D1=84?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=D0=BC=20Item=20=D0=B2=20=D0=B4=D1=80=D1=83=D0=B3=D0=BE?= =?UTF-8?q?=D0=BC=20=D0=BF=D0=BE=D1=82=D0=BE=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InstructorsAndTrainees/instructorsandtraineeswidget.cpp | 3 +++ InstructorsAndTrainees/tasks/ammtaskswidget.cpp | 9 +++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index 1e36a42..58ada8d 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -1,4 +1,5 @@ #include +#include #include "instructorsandtraineeswidget.h" #include "ui_instructorsandtraineeswidget.h" #include "dialogauthorizationinstructor.h" @@ -27,6 +28,8 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : qRegisterMetaType>("QList"); qRegisterMetaType>("QList"); + qDebug() << "InstructorsAndTraineesWidget init thread ID " << QThread::currentThreadId(); + connectorToServer = new ConnectorToServer(this); connect(connectorToServer,&ConnectorToServer::sigLoginResult,this,&InstructorsAndTraineesWidget::checkLoginResult); connect(connectorToServer,&ConnectorToServer::sigDeLoginResult,this,&InstructorsAndTraineesWidget::checkDeLoginResult); diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp index d334931..401d927 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "ammtaskswidget.h" #include "ui_ammtaskswidget.h" @@ -21,6 +22,8 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, QWidget *pa preparationTreeWidget(); ui->btnAssignTaskToTrainee->setEnabled(false); + + qDebug() << "AMMtasksWidget init thread ID " << QThread::currentThreadId(); } AMMtasksWidget::~AMMtasksWidget() @@ -67,11 +70,13 @@ void AMMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, void AMMtasksWidget::slot_NeedUpdateUI() { + qDebug() << "AMMtasksWidget::slot_NeedUpdateUI thread ID " << QThread::currentThreadId(); loadTasksAMM(); } void AMMtasksWidget::slot_traineeSelected(QString login) { + qDebug() << "AMMtasksWidget::slot_traineeSelected thread ID " << QThread::currentThreadId(); loginTraineeSelected = login; } @@ -289,8 +294,8 @@ void AMMtasksWidget::addModuleToTreeWidget(Module *module, QTreeWidgetItem* pare DM* DMmodul = static_cast(module); text = DMmodul->getLangStructRus().techName; - itemModule->setFlags(itemModule->flags() | Qt::ItemIsUserCheckable); - itemModule->setCheckState(0, Qt::Checked); + //itemModule->setFlags(itemModule->flags() | Qt::ItemIsUserCheckable); + //itemModule->setCheckState(0, Qt::Checked); itemModule->setIcon(0, QIcon(":/resources/icons/procedure.png")); } From d6c78ba4283efffb0d1405db978fd2b23a351148 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Thu, 23 Jan 2025 17:54:21 +0300 Subject: [PATCH 8/9] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=B5=D1=81?= =?UTF-8?q?=20=D1=84=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20Item=20=D0=BE=D0=B2=20=D0=B2=20=D0=BE=D1=82?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BF=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InstructorsAndTrainees/CMakeLists.txt | 2 + .../instructorsandtraineeswidget.cpp | 2 + .../instructorsandtraineeswidget.h | 3 + .../tasks/ammtaskswidget.cpp | 49 ++++++++++++-- InstructorsAndTrainees/tasks/ammtaskswidget.h | 15 ++++- .../tasks/tasktreepreparation.cpp | 67 +++++++++++++++++++ .../tasks/tasktreepreparation.h | 27 ++++++++ .../widgets/waitanimationwidget.cpp | 5 ++ .../widgets/waitanimationwidget.h | 1 + 9 files changed, 166 insertions(+), 5 deletions(-) create mode 100644 InstructorsAndTrainees/tasks/tasktreepreparation.cpp create mode 100644 InstructorsAndTrainees/tasks/tasktreepreparation.h diff --git a/InstructorsAndTrainees/CMakeLists.txt b/InstructorsAndTrainees/CMakeLists.txt index cae50e6..ad4daa0 100644 --- a/InstructorsAndTrainees/CMakeLists.txt +++ b/InstructorsAndTrainees/CMakeLists.txt @@ -78,6 +78,8 @@ add_library(InstructorsAndTrainees SHARED tasks/fimtaskswidget.cpp tasks/fimtaskswidget.h tasks/fimtaskswidget.ui + tasks/tasktreepreparation.cpp + tasks/tasktreepreparation.h #tasks/tasksAmmFim.cpp #tasks/tasksAmmFim.h widgets/newversionwidget.cpp diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index 58ada8d..9ca8258 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -27,6 +27,8 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : qRegisterMetaType>("QList"); qRegisterMetaType>("QList"); qRegisterMetaType>("QList"); + qRegisterMetaType>("QList"); + qRegisterMetaType>("QList"); qDebug() << "InstructorsAndTraineesWidget init thread ID " << QThread::currentThreadId(); diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.h b/InstructorsAndTrainees/instructorsandtraineeswidget.h index 8488a5b..881a8f0 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.h +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.h @@ -16,6 +16,9 @@ Q_DECLARE_METATYPE(QList) Q_DECLARE_METATYPE(QList) Q_DECLARE_METATYPE(QList) Q_DECLARE_METATYPE(QList) +Q_DECLARE_METATYPE(QList) +Q_DECLARE_METATYPE(QList) + namespace Ui { class InstructorsAndTraineesWidget; diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp index 401d927..2a55d2b 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "ammtaskswidget.h" #include "ui_ammtaskswidget.h" @@ -24,6 +25,20 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, QWidget *pa ui->btnAssignTaskToTrainee->setEnabled(false); qDebug() << "AMMtasksWidget init thread ID " << QThread::currentThreadId(); + + threadPreparation = new QThread(); + taskTreePreparation = new TaskTreePreparation(); + taskTreePreparation->moveToThread(threadPreparation); + threadPreparation->start(); + threadPreparation->setPriority(QThread::HighestPriority); + connect(this, &AMMtasksWidget::signal_prepareListItems, taskTreePreparation, &TaskTreePreparation::slot_prepareListItems); + connect(taskTreePreparation, &TaskTreePreparation::signal_listItemsReady, this, &AMMtasksWidget::slot_listItemsReady); + + waitAnimationWidget = new WaitAnimationWidget; + QMovie *movie = new QMovie(":/resources/icons/762.gif"); + waitAnimationWidget->setParent(this); + waitAnimationWidget->initialize(movie,this); + waitAnimationWidget->moveToThread(threadPreparation); } AMMtasksWidget::~AMMtasksWidget() @@ -32,6 +47,12 @@ AMMtasksWidget::~AMMtasksWidget() delete ui; } +void AMMtasksWidget::resizeEvent(QResizeEvent *event) +{ + QSize size = event->size(); + waitAnimationWidget->resize(size); +} + void AMMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) { if(current == nullptr) @@ -85,10 +106,26 @@ void AMMtasksWidget::loadTasksAMM() //Обновление дерева treeWidget->clear(); + waitAnimationWidget->showWithPlay(); + QByteArray array = connectorToServer->getListTaskAmmArray(); loadAMMtasksFromXML(array); - fillTree(); + //fillTree(); + signal_prepareListItems(listAllModules); +} + +void AMMtasksWidget::slot_listItemsReady(QList listItems) +{ + //Обновление дерева + treeWidget->clear(); + + for(QTreeWidgetItem * item : listItems) + { + treeWidget->addTopLevelItem(item); + } + + waitAnimationWidget->hideWithStop(); } void AMMtasksWidget::domElementParser(QDomElement element, Module* moduleParent) @@ -258,11 +295,12 @@ void AMMtasksWidget::fillTree() for(Module* module : listAllModules) { - addModuleToTreeWidget(module); + QTreeWidgetItem* item = addModuleToTreeWidget(module); + treeWidget->addTopLevelItem(item); } } -void AMMtasksWidget::addModuleToTreeWidget(Module *module, QTreeWidgetItem* parentItem) +QTreeWidgetItem* AMMtasksWidget::addModuleToTreeWidget(Module *module, QTreeWidgetItem* parentItem) { QTreeWidgetItem* itemModule = nullptr; @@ -276,7 +314,8 @@ void AMMtasksWidget::addModuleToTreeWidget(Module *module, QTreeWidgetItem* pare } else { - itemModule = new QTreeWidgetItem(treeWidget); + //itemModule = new QTreeWidgetItem(treeWidget); + itemModule = new QTreeWidgetItem(); } if(module->getType() == ModuleType::TYPE_PM) @@ -301,6 +340,8 @@ void AMMtasksWidget::addModuleToTreeWidget(Module *module, QTreeWidgetItem* pare itemModule->setText(ColumnsTree::clmn_PMorDM, text); itemModule->setText(ColumnsTree::clmn_ID, ID); + + return itemModule; } diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.h b/InstructorsAndTrainees/tasks/ammtaskswidget.h index 2a34414..72b9175 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.h +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.h @@ -6,6 +6,7 @@ #include #include "module.h" #include "connectortoserver.h" +#include "taskTreePreparation.h" namespace Ui { class AMMtasksWidget; @@ -31,6 +32,9 @@ public: treeWidget->clear(); } +public: + void resizeEvent(QResizeEvent *event) override; + private Q_SLOTS: void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); void on_btnUpdateTasks_clicked(); @@ -53,10 +57,15 @@ private: void reSetHeadTreeWidget(); void fillTree(); - void addModuleToTreeWidget(Module* module, QTreeWidgetItem* parentItem = nullptr); + QTreeWidgetItem* addModuleToTreeWidget(Module* module, QTreeWidgetItem* parentItem = nullptr); void loadTasksAMM(); +Q_SIGNALS: + void signal_prepareListItems(QList listAllModules); +public Q_SLOTS: + void slot_listItemsReady(QList listItems); + private: Ui::AMMtasksWidget *ui; ConnectorToServer* connectorToServer; @@ -65,6 +74,10 @@ private: private: QList listAllModules; QString loginTraineeSelected; + + QThread* threadPreparation; + TaskTreePreparation* taskTreePreparation; + WaitAnimationWidget *waitAnimationWidget; }; #endif // AMMTASKSWIDGET_H diff --git a/InstructorsAndTrainees/tasks/tasktreepreparation.cpp b/InstructorsAndTrainees/tasks/tasktreepreparation.cpp new file mode 100644 index 0000000..fe42925 --- /dev/null +++ b/InstructorsAndTrainees/tasks/tasktreepreparation.cpp @@ -0,0 +1,67 @@ +#include +#include +#include "tasktreepreparation.h" + +TaskTreePreparation::TaskTreePreparation(QObject *parent) : QObject(parent) +{ + qDebug() << "TaskTreePreparation init thread ID " << QThread::currentThreadId(); +} + +QTreeWidgetItem *TaskTreePreparation::addModuleToTreeWidget(Module *module, QTreeWidgetItem *parentItem) +{ + QTreeWidgetItem* itemModule = nullptr; + + QString text; + QString ID = QString::number(module->getID()); + + if(parentItem) + { + itemModule = new QTreeWidgetItem(); + parentItem->addChild(itemModule); + } + else + { + //itemModule = new QTreeWidgetItem(treeWidget); + itemModule = new QTreeWidgetItem(); + } + + if(module->getType() == ModuleType::TYPE_PM) + { + PM* PMmodul = static_cast(module); + text = PMmodul->getLangStructRus().title; + + for(Module* module : PMmodul->getListChildModules()) + { + addModuleToTreeWidget(module, itemModule); + } + } + else + { + DM* DMmodul = static_cast(module); + text = DMmodul->getLangStructRus().techName; + + //itemModule->setFlags(itemModule->flags() | Qt::ItemIsUserCheckable); + //itemModule->setCheckState(0, Qt::Checked); + itemModule->setIcon(0, QIcon(":/resources/icons/procedure.png")); + } + + itemModule->setText(0, text); + itemModule->setText(1, ID); + + return itemModule; +} + +void TaskTreePreparation::slot_prepareListItems(QList listAllModules) +{ + qDebug() << "TaskTreePreparation::slot_prepareListItems thread ID " << QThread::currentThreadId(); + + listItems.clear(); + + for(Module* module : listAllModules) + { + QTreeWidgetItem* item = addModuleToTreeWidget(module); + listItems.append(item); + } + + Q_EMIT signal_listItemsReady(listItems); +} diff --git a/InstructorsAndTrainees/tasks/tasktreepreparation.h b/InstructorsAndTrainees/tasks/tasktreepreparation.h new file mode 100644 index 0000000..3c5bdb0 --- /dev/null +++ b/InstructorsAndTrainees/tasks/tasktreepreparation.h @@ -0,0 +1,27 @@ +#ifndef TASKTREEPREPARATION_H +#define TASKTREEPREPARATION_H + +#include +#include +#include "module.h" + +class TaskTreePreparation : public QObject +{ + Q_OBJECT +public: + explicit TaskTreePreparation(QObject *parent = nullptr); + +public: + QTreeWidgetItem* addModuleToTreeWidget(Module* module, QTreeWidgetItem* parentItem = nullptr); + +public Q_SLOTS: + void slot_prepareListItems(QList listAllModules); + +Q_SIGNALS: + void signal_listItemsReady(QList listItems); + +private: + QList listItems; +}; + +#endif // TASKTREEPREPARATION_H diff --git a/InstructorsAndTrainees/widgets/waitanimationwidget.cpp b/InstructorsAndTrainees/widgets/waitanimationwidget.cpp index 547a79f..f226429 100644 --- a/InstructorsAndTrainees/widgets/waitanimationwidget.cpp +++ b/InstructorsAndTrainees/widgets/waitanimationwidget.cpp @@ -29,6 +29,11 @@ void WaitAnimationWidget::hideWithStop() loadingMovie->stop(); } +void WaitAnimationWidget::resize(QSize size) +{ + setFixedSize(size); +} + WaitAnimationWidget::~WaitAnimationWidget() { delete ui; diff --git a/InstructorsAndTrainees/widgets/waitanimationwidget.h b/InstructorsAndTrainees/widgets/waitanimationwidget.h index e9ea6a9..827ee99 100644 --- a/InstructorsAndTrainees/widgets/waitanimationwidget.h +++ b/InstructorsAndTrainees/widgets/waitanimationwidget.h @@ -17,6 +17,7 @@ public: void initialize(QMovie *movie,QWidget *parent); void showWithPlay(); void hideWithStop(); + void resize(QSize size); ~WaitAnimationWidget(); private: From 987ad12893d469e3131f609cd4ce52ce9a469249 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Fri, 24 Jan 2025 09:58:56 +0300 Subject: [PATCH 9/9] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=B5=D1=81?= =?UTF-8?q?=20=D0=BF=D0=B0=D1=80=D1=81=D0=B8=D0=BD=D0=B3=20taskAMM.XML=20?= =?UTF-8?q?=D0=B2=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9?= =?UTF-8?q?=20=D0=BF=D0=BE=D1=82=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tasks/ammtaskswidget.cpp | 211 ++---------------- InstructorsAndTrainees/tasks/ammtaskswidget.h | 12 +- .../tasks/tasktreepreparation.cpp | 158 ++++++++++++- .../tasks/tasktreepreparation.h | 10 +- 4 files changed, 171 insertions(+), 220 deletions(-) diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp index 2a55d2b..f64fade 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp @@ -11,10 +11,17 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, QWidget *pa QWidget(parent), ui(new Ui::AMMtasksWidget), connectorToServer(connectorToServer), - loginTraineeSelected("") + treeWidget(nullptr), + loginTraineeSelected(""), + threadPreparation(nullptr), + threadAnimation(nullptr), + taskTreePreparation(nullptr), + waitAnimationWidget(nullptr) { ui->setupUi(this); + qDebug() << "AMMtasksWidget init thread ID " << QThread::currentThreadId(); + treeWidget = new QTreeWidget(); ui->horizontalLayout_1->addWidget(treeWidget); @@ -22,9 +29,7 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, QWidget *pa preparationTreeWidget(); - ui->btnAssignTaskToTrainee->setEnabled(false); - - qDebug() << "AMMtasksWidget init thread ID " << QThread::currentThreadId(); + ui->btnAssignTaskToTrainee->setEnabled(false); threadPreparation = new QThread(); taskTreePreparation = new TaskTreePreparation(); @@ -34,16 +39,17 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, QWidget *pa connect(this, &AMMtasksWidget::signal_prepareListItems, taskTreePreparation, &TaskTreePreparation::slot_prepareListItems); connect(taskTreePreparation, &TaskTreePreparation::signal_listItemsReady, this, &AMMtasksWidget::slot_listItemsReady); - waitAnimationWidget = new WaitAnimationWidget; + threadAnimation = new QThread(); + waitAnimationWidget = new WaitAnimationWidget; QMovie *movie = new QMovie(":/resources/icons/762.gif"); waitAnimationWidget->setParent(this); waitAnimationWidget->initialize(movie,this); - waitAnimationWidget->moveToThread(threadPreparation); + waitAnimationWidget->moveToThread(threadAnimation); + threadAnimation->start(); } AMMtasksWidget::~AMMtasksWidget() { - deleteAllModuls(); delete ui; } @@ -109,10 +115,8 @@ void AMMtasksWidget::loadTasksAMM() waitAnimationWidget->showWithPlay(); QByteArray array = connectorToServer->getListTaskAmmArray(); - loadAMMtasksFromXML(array); - //fillTree(); - signal_prepareListItems(listAllModules); + signal_prepareListItems(array, &listAllModules); } void AMMtasksWidget::slot_listItemsReady(QList listItems) @@ -121,141 +125,11 @@ void AMMtasksWidget::slot_listItemsReady(QList listItems) treeWidget->clear(); for(QTreeWidgetItem * item : listItems) - { treeWidget->addTopLevelItem(item); - } waitAnimationWidget->hideWithStop(); } -void AMMtasksWidget::domElementParser(QDomElement element, Module* moduleParent) -{ - QString name; - - QDomElement childElement = element.firstChildElement(); - if(childElement.isNull()) - return; - - Module* module = nullptr; - - do - { - name = childElement.nodeName(); - - QDomNamedNodeMap nodeMap = childElement.attributes(); - - if(name == "pm") - { - module = new PM(); - PM* PMmodul = static_cast(module); - - PMmodul->initialize(nodeMap.namedItem("modelIdentCode").nodeValue(), - nodeMap.namedItem("pmIssuer").nodeValue(), - nodeMap.namedItem("pmNumber").nodeValue(), - nodeMap.namedItem("pmVolume").nodeValue()); - - if(moduleParent) - { - PMmodul->setParentModule(moduleParent); - - PM* PMmodulParent = static_cast(moduleParent); - PMmodulParent->addChildModule(module); - } - } - else if(name == "dm") - { - module = new DM(); - DM* DMmodul = static_cast(module); - - DMmodul->initialize(nodeMap.namedItem("modelIdentCode").nodeValue(), - nodeMap.namedItem("systemDiffCode").nodeValue(), - nodeMap.namedItem("systemCode").nodeValue(), - nodeMap.namedItem("subSystemCode").nodeValue(), - nodeMap.namedItem("subSubSystemCode").nodeValue(), - nodeMap.namedItem("assyCode").nodeValue(), - nodeMap.namedItem("disassyCode").nodeValue(), - nodeMap.namedItem("disassyCodeVariant").nodeValue(), - nodeMap.namedItem("infoCode").nodeValue(), - nodeMap.namedItem("infoCodeVariant").nodeValue(), - nodeMap.namedItem("itemLocationCode").nodeValue()); - - if(moduleParent) - { - DMmodul->setParentModule(moduleParent); - - PM* PMmodulParent = static_cast(moduleParent); - PMmodulParent->addChildModule(module); - } - } - else if(name == "rus" || name == "eng") - { - if(moduleParent) - { - if(moduleParent->getType() == ModuleType::TYPE_PM) - {//PM - PM* PMmodulParent = static_cast(moduleParent); - - if(name == "rus") - PMmodulParent->setLangStructRus(nodeMap.namedItem("title").nodeValue()); - else - PMmodulParent->setLangStructEng(nodeMap.namedItem("title").nodeValue()); - } - else - {//DM - DM* DMmodulParent = static_cast(moduleParent); - - if(name == "rus") - DMmodulParent->setLangStructRus(nodeMap.namedItem("techName").nodeValue(), - nodeMap.namedItem("infoName").nodeValue(), - nodeMap.namedItem("pdf").nodeValue(), - nodeMap.namedItem("bookmark").nodeValue(), - nodeMap.namedItem("xml").nodeValue()); - else - DMmodulParent->setLangStructEng(nodeMap.namedItem("techName").nodeValue(), - nodeMap.namedItem("infoName").nodeValue(), - nodeMap.namedItem("pdf").nodeValue(), - nodeMap.namedItem("bookmark").nodeValue(), - nodeMap.namedItem("xml").nodeValue()); - } - } - - } - - domElementParser(childElement, module); - - if(moduleParent == nullptr) - listAllModules.append(module); - - }while (! (childElement = childElement.nextSiblingElement()).isNull()); -} - -void AMMtasksWidget::loadAMMtasksFromXML(QByteArray array) -{ - deleteAllModuls(); - - QDomDocument docTasksDOM; - - docTasksDOM.setContent(array); - - QDomElement manifestElement = docTasksDOM.firstChildElement("manifest"); - if(manifestElement.isNull()) - return; - - domElementParser(manifestElement, nullptr); -} - -void AMMtasksWidget::deleteAllModuls() -{ - for(Module* module: listAllModules) - { - if(module->getType() == ModuleType::TYPE_PM) - delete static_cast(module); - else - delete static_cast(module); - } - listAllModules.clear(); -} - Module *AMMtasksWidget::searchModuleByID(int id) { Module* ptrModule = nullptr; @@ -288,63 +162,6 @@ void AMMtasksWidget::reSetHeadTreeWidget() treeWidget->setHeaderLabels(listHeaders); } -void AMMtasksWidget::fillTree() -{ - //Обновление дерева - treeWidget->clear(); - - for(Module* module : listAllModules) - { - QTreeWidgetItem* item = addModuleToTreeWidget(module); - treeWidget->addTopLevelItem(item); - } -} - -QTreeWidgetItem* AMMtasksWidget::addModuleToTreeWidget(Module *module, QTreeWidgetItem* parentItem) -{ - QTreeWidgetItem* itemModule = nullptr; - - QString text; - QString ID = QString::number(module->getID()); - - if(parentItem) - { - itemModule = new QTreeWidgetItem(); - parentItem->addChild(itemModule); - } - else - { - //itemModule = new QTreeWidgetItem(treeWidget); - itemModule = new QTreeWidgetItem(); - } - - if(module->getType() == ModuleType::TYPE_PM) - { - PM* PMmodul = static_cast(module); - text = PMmodul->getLangStructRus().title; - - for(Module* module : PMmodul->getListChildModules()) - { - addModuleToTreeWidget(module, itemModule); - } - } - else - { - DM* DMmodul = static_cast(module); - text = DMmodul->getLangStructRus().techName; - - //itemModule->setFlags(itemModule->flags() | Qt::ItemIsUserCheckable); - //itemModule->setCheckState(0, Qt::Checked); - itemModule->setIcon(0, QIcon(":/resources/icons/procedure.png")); - } - - itemModule->setText(ColumnsTree::clmn_PMorDM, text); - itemModule->setText(ColumnsTree::clmn_ID, ID); - - return itemModule; -} - - void AMMtasksWidget::on_btnUpdateTasks_clicked() { connectorToServer->sendQueryTasksXML("amm"); diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.h b/InstructorsAndTrainees/tasks/ammtaskswidget.h index 72b9175..73f8fa1 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.h +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.h @@ -38,7 +38,6 @@ public: private Q_SLOTS: void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); void on_btnUpdateTasks_clicked(); - void on_btnAssignTaskToTrainee_clicked(); public Q_SLOTS: @@ -48,21 +47,13 @@ public Q_SLOTS: void slot_traineeSelected(QString login); private: - void loadAMMtasksFromXML(QByteArray array); - void domElementParser(QDomElement element, Module* moduleParent); - void deleteAllModuls(); Module* searchModuleByID(int id); - void preparationTreeWidget(); void reSetHeadTreeWidget(); - - void fillTree(); - QTreeWidgetItem* addModuleToTreeWidget(Module* module, QTreeWidgetItem* parentItem = nullptr); - void loadTasksAMM(); Q_SIGNALS: - void signal_prepareListItems(QList listAllModules); + void signal_prepareListItems(QByteArray array, QList* listAllModules); public Q_SLOTS: void slot_listItemsReady(QList listItems); @@ -76,6 +67,7 @@ private: QString loginTraineeSelected; QThread* threadPreparation; + QThread* threadAnimation; TaskTreePreparation* taskTreePreparation; WaitAnimationWidget *waitAnimationWidget; }; diff --git a/InstructorsAndTrainees/tasks/tasktreepreparation.cpp b/InstructorsAndTrainees/tasks/tasktreepreparation.cpp index fe42925..e749139 100644 --- a/InstructorsAndTrainees/tasks/tasktreepreparation.cpp +++ b/InstructorsAndTrainees/tasks/tasktreepreparation.cpp @@ -2,11 +2,18 @@ #include #include "tasktreepreparation.h" -TaskTreePreparation::TaskTreePreparation(QObject *parent) : QObject(parent) +TaskTreePreparation::TaskTreePreparation(QObject *parent) : + QObject(parent), + listAllModules(nullptr) { qDebug() << "TaskTreePreparation init thread ID " << QThread::currentThreadId(); } +TaskTreePreparation::~TaskTreePreparation() +{ + deleteAllModuls(); +} + QTreeWidgetItem *TaskTreePreparation::addModuleToTreeWidget(Module *module, QTreeWidgetItem *parentItem) { QTreeWidgetItem* itemModule = nullptr; @@ -14,16 +21,10 @@ QTreeWidgetItem *TaskTreePreparation::addModuleToTreeWidget(Module *module, QTre QString text; QString ID = QString::number(module->getID()); + itemModule = new QTreeWidgetItem(); + if(parentItem) - { - itemModule = new QTreeWidgetItem(); parentItem->addChild(itemModule); - } - else - { - //itemModule = new QTreeWidgetItem(treeWidget); - itemModule = new QTreeWidgetItem(); - } if(module->getType() == ModuleType::TYPE_PM) { @@ -51,13 +52,148 @@ QTreeWidgetItem *TaskTreePreparation::addModuleToTreeWidget(Module *module, QTre return itemModule; } -void TaskTreePreparation::slot_prepareListItems(QList listAllModules) +void TaskTreePreparation::loadAMMtasksFromXML(QByteArray array) +{ + deleteAllModuls(); + + QDomDocument docTasksDOM; + + docTasksDOM.setContent(array); + + QDomElement manifestElement = docTasksDOM.firstChildElement("manifest"); + if(manifestElement.isNull()) + return; + + domElementParser(manifestElement, nullptr); +} + +void TaskTreePreparation::deleteAllModuls() +{ + if(listAllModules == nullptr) + return; + + for(Module* module: *listAllModules) + { + if(module->getType() == ModuleType::TYPE_PM) + delete static_cast(module); + else + delete static_cast(module); + } + listAllModules->clear(); +} + +void TaskTreePreparation::domElementParser(QDomElement element, Module* moduleParent) +{ + QString name; + + QDomElement childElement = element.firstChildElement(); + if(childElement.isNull()) + return; + + Module* module = nullptr; + + do + { + name = childElement.nodeName(); + + QDomNamedNodeMap nodeMap = childElement.attributes(); + + if(name == "pm") + { + module = new PM(); + PM* PMmodul = static_cast(module); + + PMmodul->initialize(nodeMap.namedItem("modelIdentCode").nodeValue(), + nodeMap.namedItem("pmIssuer").nodeValue(), + nodeMap.namedItem("pmNumber").nodeValue(), + nodeMap.namedItem("pmVolume").nodeValue()); + + if(moduleParent) + { + PMmodul->setParentModule(moduleParent); + + PM* PMmodulParent = static_cast(moduleParent); + PMmodulParent->addChildModule(module); + } + } + else if(name == "dm") + { + module = new DM(); + DM* DMmodul = static_cast(module); + + DMmodul->initialize(nodeMap.namedItem("modelIdentCode").nodeValue(), + nodeMap.namedItem("systemDiffCode").nodeValue(), + nodeMap.namedItem("systemCode").nodeValue(), + nodeMap.namedItem("subSystemCode").nodeValue(), + nodeMap.namedItem("subSubSystemCode").nodeValue(), + nodeMap.namedItem("assyCode").nodeValue(), + nodeMap.namedItem("disassyCode").nodeValue(), + nodeMap.namedItem("disassyCodeVariant").nodeValue(), + nodeMap.namedItem("infoCode").nodeValue(), + nodeMap.namedItem("infoCodeVariant").nodeValue(), + nodeMap.namedItem("itemLocationCode").nodeValue()); + + if(moduleParent) + { + DMmodul->setParentModule(moduleParent); + + PM* PMmodulParent = static_cast(moduleParent); + PMmodulParent->addChildModule(module); + } + } + else if(name == "rus" || name == "eng") + { + if(moduleParent) + { + if(moduleParent->getType() == ModuleType::TYPE_PM) + {//PM + PM* PMmodulParent = static_cast(moduleParent); + + if(name == "rus") + PMmodulParent->setLangStructRus(nodeMap.namedItem("title").nodeValue()); + else + PMmodulParent->setLangStructEng(nodeMap.namedItem("title").nodeValue()); + } + else + {//DM + DM* DMmodulParent = static_cast(moduleParent); + + if(name == "rus") + DMmodulParent->setLangStructRus(nodeMap.namedItem("techName").nodeValue(), + nodeMap.namedItem("infoName").nodeValue(), + nodeMap.namedItem("pdf").nodeValue(), + nodeMap.namedItem("bookmark").nodeValue(), + nodeMap.namedItem("xml").nodeValue()); + else + DMmodulParent->setLangStructEng(nodeMap.namedItem("techName").nodeValue(), + nodeMap.namedItem("infoName").nodeValue(), + nodeMap.namedItem("pdf").nodeValue(), + nodeMap.namedItem("bookmark").nodeValue(), + nodeMap.namedItem("xml").nodeValue()); + } + } + + } + + domElementParser(childElement, module); + + if(moduleParent == nullptr) + listAllModules->append(module); + + }while (! (childElement = childElement.nextSiblingElement()).isNull()); +} + +void TaskTreePreparation::slot_prepareListItems(QByteArray array, QList* listAllModules) { qDebug() << "TaskTreePreparation::slot_prepareListItems thread ID " << QThread::currentThreadId(); + this->listAllModules = listAllModules; + + loadAMMtasksFromXML(array); + listItems.clear(); - for(Module* module : listAllModules) + for(Module* module : *this->listAllModules) { QTreeWidgetItem* item = addModuleToTreeWidget(module); listItems.append(item); diff --git a/InstructorsAndTrainees/tasks/tasktreepreparation.h b/InstructorsAndTrainees/tasks/tasktreepreparation.h index 3c5bdb0..1f9bc31 100644 --- a/InstructorsAndTrainees/tasks/tasktreepreparation.h +++ b/InstructorsAndTrainees/tasks/tasktreepreparation.h @@ -3,6 +3,7 @@ #include #include +#include #include "module.h" class TaskTreePreparation : public QObject @@ -10,18 +11,23 @@ class TaskTreePreparation : public QObject Q_OBJECT public: explicit TaskTreePreparation(QObject *parent = nullptr); + ~TaskTreePreparation(); -public: +private: QTreeWidgetItem* addModuleToTreeWidget(Module* module, QTreeWidgetItem* parentItem = nullptr); + void loadAMMtasksFromXML(QByteArray array); + void domElementParser(QDomElement element, Module* moduleParent); + void deleteAllModuls(); public Q_SLOTS: - void slot_prepareListItems(QList listAllModules); + void slot_prepareListItems(QByteArray array, QList* listAllModules); Q_SIGNALS: void signal_listItemsReady(QList listItems); private: QList listItems; + QList* listAllModules; }; #endif // TASKTREEPREPARATION_H