From 5e834b582ff5608f2591bb6d26b387282d6657e3 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Wed, 3 Sep 2025 17:24:36 +0300 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B2=D0=B5=D0=BB=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D0=BB=D0=B5=D1=80=20=D0=9C=D0=B5?= =?UTF-8?q?=D1=81=D0=B0=D0=BD=D0=B4=D0=B6=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InstructorsAndTrainees/CMakeLists.txt | 2 + .../instructorsandtraineeswidget.cpp | 49 ++++-------- .../instructorsandtraineeswidget.h | 2 + .../messanger/messangercontroller.cpp | 76 +++++++++++++++++++ .../messanger/messangercontroller.h | 39 ++++++++++ .../messanger/messangerwidget.cpp | 38 +++++++--- .../messanger/messangerwidget.h | 2 + .../trainees/personalcardtrainee.cpp | 16 ++-- .../trainees/personalcardtrainee.h | 4 +- .../trainees/viewertrainees.cpp | 5 +- .../trainees/viewertrainees.h | 5 +- 11 files changed, 178 insertions(+), 60 deletions(-) create mode 100644 InstructorsAndTrainees/messanger/messangercontroller.cpp create mode 100644 InstructorsAndTrainees/messanger/messangercontroller.h diff --git a/InstructorsAndTrainees/CMakeLists.txt b/InstructorsAndTrainees/CMakeLists.txt index 5886249..cb26903 100644 --- a/InstructorsAndTrainees/CMakeLists.txt +++ b/InstructorsAndTrainees/CMakeLists.txt @@ -75,6 +75,8 @@ add_library(InstructorsAndTrainees SHARED messanger/msgwidget.ui messanger/tabdialogmessenger.cpp messanger/tabdialogmessenger.h + messanger/messangercontroller.cpp + messanger/messangercontroller.h tasks/ammtaskswidget.cpp tasks/ammtaskswidget.h diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index c93360d..19f4412 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -12,8 +12,7 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : viewerTrainees(nullptr), viewerInstructors(nullptr), messangerWidget(nullptr), - //ammTasksWidget(nullptr), - //fimTasksWidget(nullptr), + messangerController(nullptr), adminMode(false), loginInstructorLoggedInLocal(QStringLiteral("")), nameInstructorLoggedInLocal(QStringLiteral("")), @@ -22,7 +21,6 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : ui->setupUi(this); ui->btnSettings->setObjectName("btnSettings"); - //ui->tabWidget_Tasks->setObjectName("tabWidgetTasks"); ui->widget_Top->setObjectName("widgetTop"); ui->groupBox_Trainees->setObjectName("groupBox_Trainees"); @@ -52,45 +50,26 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : connect(connectorToServer,&ConnectorToServer::sigLoginResult,this,&InstructorsAndTraineesWidget::checkLoginResult); connect(connectorToServer,&ConnectorToServer::sigDeLoginResult,this,&InstructorsAndTraineesWidget::checkDeLoginResult); - viewerTrainees = new ViewerTrainees(connectorToServer, this); + messangerController = new MessangerController(connectorToServer, this); + + viewerTrainees = new ViewerTrainees(connectorToServer, messangerController, this); viewerInstructors = new ViewerInstructors(connectorToServer, this); connect(this, &InstructorsAndTraineesWidget::signal_NeedUpdateUI, viewerTrainees, &ViewerTrainees::slot_NeedUpdateUI); connect(this, &InstructorsAndTraineesWidget::signal_NeedUpdateUI, viewerInstructors, &ViewerInstructors::slot_NeedUpdateUI); 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_ConnectedToServer,this,&InstructorsAndTraineesWidget::slot_ConnectedToServer); - /* - ammTasksWidget = new AMMtasksWidget(connectorToServer, TypeListTreeAMMFIM::listCommon, this); - fimTasksWidget = new FIMtasksWidget(connectorToServer, TypeListTreeAMMFIM::listCommon, this); + connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, messangerController, &MessangerController::signal_traineeSelected); + connect(messangerController, &MessangerController::signal_tabMessengerChanged, viewerTrainees, &ViewerTrainees::slot_tabMessengerChanged); - connect(connectorToServer, &ConnectorToServer::signal_UpdateTasksFIM, fimTasksWidget, &FIMtasksWidget::slot_NeedUpdateUI); - connect(connectorToServer, &ConnectorToServer::signal_UpdateTasksAMM, ammTasksWidget, &AMMtasksWidget::slot_NeedUpdateUI); - connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, fimTasksWidget, &FIMtasksWidget::slot_traineeSelected); - connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, ammTasksWidget, &AMMtasksWidget::slot_traineeSelected); - */ - - messangerWidget = new MessangerWidget(this); - //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_sendMessage, connectorToServer, &ConnectorToServer::slot_sendMessage); - connect(connectorToServer,&ConnectorToServer::signal_receiveMessage,messangerWidget,&MessangerWidget::slot_showMessage); - - //connect(fimTasksWidget, &FIMtasksWidget::signal_AssignedTask, viewerTrainees, &ViewerTrainees::slot_waitAnimationWidgetShowWithPlayFIM); - //connect(ammTasksWidget, &AMMtasksWidget::signal_AssignedTask, viewerTrainees, &ViewerTrainees::slot_waitAnimationWidgetShowWithPlayAMM); + messangerWidget = messangerController->newWidget(this); //Размещение ui->verticalLayout_Trainees->addWidget(viewerTrainees); - //ui->verticalLayout_AMM->addWidget(ammTasksWidget); - //ui->verticalLayout_FIM->addWidget(fimTasksWidget); - ui->verticalLayout_Messenger->addWidget(messangerWidget); ui->verticalLayout_Instructors->addWidget(viewerInstructors); @@ -123,9 +102,7 @@ InstructorsAndTraineesWidget::~InstructorsAndTraineesWidget() if(authorizationIsCompleted()) deAuthorizationInstructor(loginInstructorLoggedInLocal); - //delete ammTasksWidget; - //delete fimTasksWidget; - delete messangerWidget; + delete messangerController; delete viewerInstructors; delete viewerTrainees; delete connectorToServer; @@ -218,7 +195,7 @@ void InstructorsAndTraineesWidget::checkLoginResult(ServerAuthorization *serverA updateLabelLoggedInInstructor(serverAuth->Login, serverAuth->ClientName); connectorToServer->setLoginName(nameInstructorLoggedInLocal); - messangerWidget->initialize(serverAuth->Id); + messangerController->initialize(serverAuth->Id); connectorToServer->sendQueryTasksXML("fim"); connectorToServer->sendQueryTasksXML("amm"); @@ -298,7 +275,7 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state) //ammTasksWidget->deactivate(); //fimTasksWidget->deactivate(); - messangerWidget->clear(); + messangerController->clear(); loginInstructorLoggedInLocal = ""; nameInstructorLoggedInLocal = ""; @@ -368,7 +345,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); + connect(connectorToServer,&ConnectorToServer::signal_InitMessanger,messangerController,&MessangerController::signal_InitMessanger); } else ui->btnAuthorizationInstructor->setChecked(false); @@ -381,7 +358,7 @@ 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); + disconnect(connectorToServer,&ConnectorToServer::signal_InitMessanger,messangerController,&MessangerController::signal_InitMessanger); viewerTrainees->deactivate(); viewerInstructors->deactivate(); @@ -389,7 +366,7 @@ void InstructorsAndTraineesWidget::on_btnAuthorizationInstructor_clicked() //ammTasksWidget->deactivate(); //fimTasksWidget->deactivate(); - messangerWidget->clear(); + messangerController->clear(); } else ui->btnAuthorizationInstructor->setChecked(true); diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.h b/InstructorsAndTrainees/instructorsandtraineeswidget.h index cffea76..0975e84 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.h +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.h @@ -7,6 +7,7 @@ #include "viewertrainees.h" #include "viewerinstructors.h" #include "messangerwidget.h" +#include "messangercontroller.h" #include "ammtaskswidget.h" #include "fimtaskswidget.h" #include "connectortoserver.h" @@ -95,6 +96,7 @@ private: ViewerTrainees* viewerTrainees; ViewerInstructors* viewerInstructors; MessangerWidget* messangerWidget; + MessangerController* messangerController; //AMMtasksWidget* ammTasksWidget; //FIMtasksWidget* fimTasksWidget; diff --git a/InstructorsAndTrainees/messanger/messangercontroller.cpp b/InstructorsAndTrainees/messanger/messangercontroller.cpp new file mode 100644 index 0000000..00c931f --- /dev/null +++ b/InstructorsAndTrainees/messanger/messangercontroller.cpp @@ -0,0 +1,76 @@ +#include "messangercontroller.h" + +MessangerController::MessangerController(ConnectorToServer* connectorToServer, QObject *parent) : + QObject(parent), + connectorToServer(connectorToServer), + currClientId("") +{ + +} + +MessangerController::~MessangerController() +{ + for(MessangerWidget* widget : listWidgets) + { + delete widget; + } +} + +MessangerWidget *MessangerController::newWidget(QWidget *parent) +{ + MessangerWidget *msgWdgt = new MessangerWidget(parent); + + connect(msgWdgt, &MessangerWidget::signal_sendMessage, this, &MessangerController::slot_sendMessage); + connect(connectorToServer,&ConnectorToServer::signal_receiveMessage,msgWdgt,&MessangerWidget::slot_showMessage); + + connect(this, &MessangerController::signal_traineeSelected, msgWdgt, &MessangerWidget::slot_traineeSelected); + connect(msgWdgt, &MessangerWidget::signal_tabMessengerChanged, this, &MessangerController::signal_tabMessengerChanged); + + connect(this, &MessangerController::signal_InitMessanger, msgWdgt,&MessangerWidget::slot_InitMessanger); + + msgWdgt->initialize(currClientId); + + listWidgets.append(msgWdgt); + + return msgWdgt; +} + +void MessangerController::deleteWidget(MessangerWidget *msgWdgt) +{ + for(int i = 0; i < listWidgets.count(); i++) + { + if(listWidgets.at(i) == msgWdgt) + { + delete msgWdgt; + listWidgets.removeAt(i); + } + } +} + +void MessangerController::initialize(QString id) +{ + currClientId = id; + + for(MessangerWidget* widget : listWidgets) + { + widget->initialize(currClientId); + } +} + +void MessangerController::clear() +{ + for(MessangerWidget* widget : listWidgets) + { + widget->clear(); + } +} + +void MessangerController::slot_sendMessage(ClientMessage clientMessage) +{ + connectorToServer->slot_sendMessage(clientMessage); + + for(MessangerWidget* widget : listWidgets) + { + widget->addMsgWidgetLocal(clientMessage.Text); + } +} diff --git a/InstructorsAndTrainees/messanger/messangercontroller.h b/InstructorsAndTrainees/messanger/messangercontroller.h new file mode 100644 index 0000000..3c0c598 --- /dev/null +++ b/InstructorsAndTrainees/messanger/messangercontroller.h @@ -0,0 +1,39 @@ +#ifndef MESSANGERCONTROLLER_H +#define MESSANGERCONTROLLER_H + +#include +#include "messangerwidget.h" +#include "connectortoserver.h" + +class MessangerController : public QObject +{ + Q_OBJECT +public: + explicit MessangerController(ConnectorToServer* connectorToServer, QObject *parent = nullptr); + ~MessangerController(); + +public: + MessangerWidget* newWidget(QWidget *parent); + void deleteWidget(MessangerWidget* msgWdgt); + + void initialize(QString id); + void clear(); + +signals: + void signal_tabMessengerChanged(QString login); + void signal_traineeSelected(QString login); + + void signal_InitMessanger(QList listTrainees); + +public slots: + void slot_sendMessage(ClientMessage clientMessage); + + +private: + ConnectorToServer* connectorToServer; + QList listWidgets; + + QString currClientId; //id этого клиента +}; + +#endif // MESSANGERCONTROLLER_H diff --git a/InstructorsAndTrainees/messanger/messangerwidget.cpp b/InstructorsAndTrainees/messanger/messangerwidget.cpp index c98c122..2cd3cbb 100644 --- a/InstructorsAndTrainees/messanger/messangerwidget.cpp +++ b/InstructorsAndTrainees/messanger/messangerwidget.cpp @@ -150,17 +150,8 @@ void MessangerWidget::clear() actualizationTabsDialogMessenger(); } -void MessangerWidget::on_btnSend_clicked() +void MessangerWidget::addMsgWidgetLocal(QString text) { - QString text = ui->editMsg->toPlainText(); - QString from = currClientId; - QString to = selectedUserId; - - ClientMessage message = ClientMessage(from,to,text); - emit signal_sendMessage(message); - - ui->editMsg->clear(); - //Ищем нужный диалог foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger) { @@ -176,6 +167,33 @@ void MessangerWidget::on_btnSend_clicked() } } +void MessangerWidget::on_btnSend_clicked() +{ + QString text = ui->editMsg->toPlainText(); + QString from = currClientId; + QString to = selectedUserId; + + ClientMessage message = ClientMessage(from,to,text); + emit signal_sendMessage(message); + + ui->editMsg->clear(); + + /* + //Ищем нужный диалог + foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger) + { + if(tabDialog->getUserLogin() == selectedUserLogin) + { + //Добавляем в существующую вкладку + tabDialog->addMsgWidgetLocal(text); + //Делаем ее активной + ui->tabWidget->setCurrentIndex(getIndexTab(selectedUserLogin)); + + return; + } + }*/ +} + void MessangerWidget::on_tabWidget_currentChanged(int index) { //Ищем нужный диалог diff --git a/InstructorsAndTrainees/messanger/messangerwidget.h b/InstructorsAndTrainees/messanger/messangerwidget.h index 0b38bde..4e9826d 100644 --- a/InstructorsAndTrainees/messanger/messangerwidget.h +++ b/InstructorsAndTrainees/messanger/messangerwidget.h @@ -40,6 +40,8 @@ public: void clear(); + void addMsgWidgetLocal(QString text); + private slots: void on_btnSend_clicked(); void on_tabWidget_currentChanged(int index); diff --git a/InstructorsAndTrainees/trainees/personalcardtrainee.cpp b/InstructorsAndTrainees/trainees/personalcardtrainee.cpp index 12aabb0..b80a988 100644 --- a/InstructorsAndTrainees/trainees/personalcardtrainee.cpp +++ b/InstructorsAndTrainees/trainees/personalcardtrainee.cpp @@ -1,9 +1,10 @@ #include "personalcardtrainee.h" #include "ui_personalcardtrainee.h" -PersonalCardTrainee::PersonalCardTrainee(ConnectorToServer* connectorToServer, int id_trainee, AMMtasksWidget* ammTasksWidgetIn, FIMtasksWidget* fimTasksWidgetIn, QWidget *parent) : +PersonalCardTrainee::PersonalCardTrainee(ConnectorToServer* connectorToServer, MessangerController* messangerController, int id_trainee, AMMtasksWidget* ammTasksWidgetIn, FIMtasksWidget* fimTasksWidgetIn, QWidget *parent) : QWidget(parent), connectorToServer(connectorToServer), + messangerController(messangerController), id_trainee(id_trainee), ammTasksWidget_personal(nullptr), fimTasksWidget_personal(nullptr), @@ -32,15 +33,9 @@ PersonalCardTrainee::PersonalCardTrainee(ConnectorToServer* connectorToServer, i ui->verticalLayout_FIMcommon->addWidget(fimTasksWidget_common); /* Messanger*/ - messangerWidget = new MessangerWidget(this); - //connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, messangerWidget, &MessangerWidget::slot_traineeSelected); - //connect(messangerWidget, &MessangerWidget::signal_tabMessengerChanged, viewerTrainees, &ViewerTrainees::slot_tabMessengerChanged); - connect(messangerWidget, &MessangerWidget::signal_sendMessage, connectorToServer, &ConnectorToServer::slot_sendMessage); - connect(connectorToServer,&ConnectorToServer::signal_receiveMessage,messangerWidget,&MessangerWidget::slot_showMessage); + messangerWidget = messangerController->newWidget(this); - //ui->verticalLayout_Messenger->addWidget(messangerWidget); - - messangerWidget->initialize(connectorToServer->getServerAuth().Id); + ui->verticalLayout_Messenger->addWidget(messangerWidget); QList listTrainees; Trainee trainee = connectorToServer->getTrainee(id_trainee); @@ -57,7 +52,8 @@ PersonalCardTrainee::~PersonalCardTrainee() delete ammTasksWidget_personal; delete fimTasksWidget_personal; - delete messangerWidget; + //delete messangerWidget; + messangerController->deleteWidget(messangerWidget); delete ui; } diff --git a/InstructorsAndTrainees/trainees/personalcardtrainee.h b/InstructorsAndTrainees/trainees/personalcardtrainee.h index b3a5fff..5d0188c 100644 --- a/InstructorsAndTrainees/trainees/personalcardtrainee.h +++ b/InstructorsAndTrainees/trainees/personalcardtrainee.h @@ -5,6 +5,7 @@ #include "ammtaskswidget.h" #include "fimtaskswidget.h" #include "messangerwidget.h" +#include "messangercontroller.h" #include namespace Ui { @@ -17,7 +18,7 @@ class PersonalCardTrainee : public QWidget public: //explicit PersonalCardTrainee(ConnectorToServer* connectorToServer, int id_trainee, QWidget *parent = nullptr); - explicit PersonalCardTrainee(ConnectorToServer* connectorToServer, int id_trainee, AMMtasksWidget* ammTasksWidget_common, FIMtasksWidget* fimTasksWidget_common, QWidget *parent = nullptr); + explicit PersonalCardTrainee(ConnectorToServer* connectorToServer, MessangerController* messangerController, int id_trainee, AMMtasksWidget* ammTasksWidget_common, FIMtasksWidget* fimTasksWidget_common, QWidget *parent = nullptr); ~PersonalCardTrainee(); private: @@ -25,6 +26,7 @@ private: private: ConnectorToServer* connectorToServer; + MessangerController* messangerController; int id_trainee; AMMtasksWidget* ammTasksWidget_personal; diff --git a/InstructorsAndTrainees/trainees/viewertrainees.cpp b/InstructorsAndTrainees/trainees/viewertrainees.cpp index 3138aac..17a0ad5 100644 --- a/InstructorsAndTrainees/trainees/viewertrainees.cpp +++ b/InstructorsAndTrainees/trainees/viewertrainees.cpp @@ -3,12 +3,13 @@ #include "personalcardtrainee.h" #include "ui_viewertrainees.h" -ViewerTrainees::ViewerTrainees(ConnectorToServer* connectorToServer, QWidget *parent) : +ViewerTrainees::ViewerTrainees(ConnectorToServer* connectorToServer, MessangerController* messangerController, QWidget *parent) : TraineesView(connectorToServer, CommonView::TypeView::onlyView, parent), //ammTasksWidget_pers0(nullptr), //fimTasksWidget_pers0(nullptr), ammTasksWidgetCommon(nullptr), fimTasksWidgetCommon(nullptr), + messangerController(messangerController), ui(new Ui::ViewerTrainees) { ui->setupUi(this); @@ -197,7 +198,7 @@ void ViewerTrainees::on_itemDoubleClicked(QTreeWidgetItem *item, int column) int id_trainee = connectorToServer->getIdTraineeByLogin(login); - PersonalCardTrainee cardTrainee(connectorToServer, id_trainee, ammTasksWidgetCommon, fimTasksWidgetCommon, this); + PersonalCardTrainee cardTrainee(connectorToServer, messangerController, id_trainee, ammTasksWidgetCommon, fimTasksWidgetCommon, this); QDialog* dialog = new QDialog(this); QHBoxLayout *layout = new QHBoxLayout(dialog); diff --git a/InstructorsAndTrainees/trainees/viewertrainees.h b/InstructorsAndTrainees/trainees/viewertrainees.h index c8fbd36..52db2f0 100644 --- a/InstructorsAndTrainees/trainees/viewertrainees.h +++ b/InstructorsAndTrainees/trainees/viewertrainees.h @@ -4,6 +4,7 @@ #include "traineesview.h" #include "ammtaskswidget.h" #include "fimtaskswidget.h" +#include "messangercontroller.h" namespace Ui { class ViewerTrainees; @@ -16,7 +17,7 @@ class ViewerTrainees : public TraineesView Q_OBJECT public: - explicit ViewerTrainees(ConnectorToServer* connectorToServer, QWidget *parent = nullptr); + explicit ViewerTrainees(ConnectorToServer* connectorToServer, MessangerController* messangerController, QWidget *parent = nullptr); ~ViewerTrainees(); public: @@ -59,6 +60,8 @@ private: AMMtasksWidget* ammTasksWidgetCommon; FIMtasksWidget* fimTasksWidgetCommon; + MessangerController* messangerController; + private: Ui::ViewerTrainees *ui; };