From d6795e4723d5bb086630a321f5d17c729f31fd42 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Thu, 11 Sep 2025 16:37:49 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=20=D0=9C?= =?UTF-8?q?=D0=B5=D1=81=D1=81=D1=81=D0=B5=D0=BD=D0=B4=D0=B6=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=20=D0=B7=D0=B0=D0=BA=D0=BE=D0=BD=D1=87=D0=B8=D0=BB=20:)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../messanger/messangercontroller.cpp | 94 ++++++++++--------- .../messanger/messangercontroller.h | 3 + .../messanger/messangerwidget.cpp | 4 +- .../messanger/msgwidget.cpp | 2 +- .../messanger/tabdialogmessenger.cpp | 19 ++-- .../messanger/tabdialogmessenger.h | 9 +- 6 files changed, 68 insertions(+), 63 deletions(-) diff --git a/InstructorsAndTrainees/messanger/messangercontroller.cpp b/InstructorsAndTrainees/messanger/messangercontroller.cpp index 63ec408..9b92f9f 100644 --- a/InstructorsAndTrainees/messanger/messangercontroller.cpp +++ b/InstructorsAndTrainees/messanger/messangercontroller.cpp @@ -84,56 +84,12 @@ void MessangerController::slot_sendMessage(ClientMessage clientMessage) { connectorToServer->slot_sendMessage(clientMessage); - int id_user = clientMessage.toId.toInt(); - QList* list = nullptr; - if(mapAlldialogsWithClients.contains(id_user)) - {//Уже есть - list = mapAlldialogsWithClients.value(id_user); - } - else - {//Новый - list = new QList(); - mapAlldialogsWithClients.insert(id_user, list); - } - MessageOfMessanger msg; - msg.flLocal = true; - msg.text = clientMessage.Text; - msg.time = QTime::currentTime(); - list->append(msg); - - clientMessage.timeStr = msg.time.toString("hh:mm"); - - for(MessangerWidget* widget : listWidgets) - { - widget->showSendedMessage(clientMessage); - } + showMessageInAllWidgets(clientMessage); } void MessangerController::slot_receiveMessage(ClientMessage clientMessage) { - int id_user = clientMessage.fromId.toInt(); - QList* list = nullptr; - if(mapAlldialogsWithClients.contains(id_user)) - {//Уже есть - list = mapAlldialogsWithClients.value(id_user); - } - else - {//Новый - list = new QList(); - mapAlldialogsWithClients.insert(id_user, list); - } - MessageOfMessanger msg; - msg.flLocal = false; - msg.text = clientMessage.Text; - msg.time = QTime::currentTime(); - list->append(msg); - - clientMessage.timeStr = msg.time.toString("hh:mm"); - - for(MessangerWidget* widget : listWidgets) - { - widget->showReceivedMessage(clientMessage); - } + showMessageInAllWidgets(clientMessage); } void MessangerController::slot_reinitMessangers(QList listUsers) @@ -150,3 +106,49 @@ void MessangerController::slot_reinitMessangers(QList listUsers) } } } + +void MessangerController::showMessageInAllWidgets(ClientMessage clientMessage) +{ + int id_user = 0; + MessageOfMessanger msg; + + if(clientMessage.fromId == GUIclientId) + {//Send + id_user = clientMessage.toId.toInt(); + msg.flLocal = true; + } + else + {//Receive + id_user = clientMessage.fromId.toInt(); + msg.flLocal = false; + } + + + QList* list = nullptr; + if(mapAlldialogsWithClients.contains(id_user)) + {//Уже есть + list = mapAlldialogsWithClients.value(id_user); + } + else + {//Новый + list = new QList(); + mapAlldialogsWithClients.insert(id_user, list); + } + + msg.text = clientMessage.Text; + msg.time = QTime::currentTime(); + list->append(msg); + + clientMessage.timeStr = msg.time.toString("hh:mm"); + + for(MessangerWidget* widget : listWidgets) + { + if(widget->getIDuserRemote() == id_user) + { + if(msg.flLocal) + widget->showSendedMessage(clientMessage); + else + widget->showReceivedMessage(clientMessage); + } + } +} diff --git a/InstructorsAndTrainees/messanger/messangercontroller.h b/InstructorsAndTrainees/messanger/messangercontroller.h index bc8071f..c408bc2 100644 --- a/InstructorsAndTrainees/messanger/messangercontroller.h +++ b/InstructorsAndTrainees/messanger/messangercontroller.h @@ -33,6 +33,9 @@ public slots: void slot_reinitMessangers(QList listUsers); +private: + void showMessageInAllWidgets(ClientMessage clientMessage); + private: ConnectorToServer* connectorToServer; QList listWidgets; diff --git a/InstructorsAndTrainees/messanger/messangerwidget.cpp b/InstructorsAndTrainees/messanger/messangerwidget.cpp index 7817c77..1d93314 100644 --- a/InstructorsAndTrainees/messanger/messangerwidget.cpp +++ b/InstructorsAndTrainees/messanger/messangerwidget.cpp @@ -73,7 +73,7 @@ void MessangerWidget::addTabDialogMessenger(User user) if(!tabDialogMessenger) {//Диалога еще не существует - tabDialogMessenger = new OneDialogMessenger(user.getLogin(), QString::number(user.getID()), this); + tabDialogMessenger = new OneDialogMessenger(QString::number(user.getID()), user.getTypeUserDB(), this); //Добавляем новую вкладку диалога QString typeUserStr = ""; @@ -90,7 +90,7 @@ void MessangerWidget::addTabDialogMessenger(User user) {//Диалог уже существует //Проверяем наличие диалога именно с этим клиентом - if(tabDialogMessenger->getUserLogin() == user.getLogin()) + if(tabDialogMessenger->getUserId() == user.getID()) { //Обновляем статус залогинивания updateLoggedIn(user.getLoggedIn()); diff --git a/InstructorsAndTrainees/messanger/msgwidget.cpp b/InstructorsAndTrainees/messanger/msgwidget.cpp index 70b387c..2e953bd 100644 --- a/InstructorsAndTrainees/messanger/msgwidget.cpp +++ b/InstructorsAndTrainees/messanger/msgwidget.cpp @@ -98,7 +98,7 @@ void MsgWidget::on_editText_textChanged() QRect textRect1str = metricsFont.boundingRect(QRect(0, 0, widthEdit, 1000), 0, "string"); int ost = textRect.width() % widthEdit; int cnt = textRect.width() / widthEdit; - if(ost > 0) + //if(ost > 0) cnt += 1; this->setFixedHeight(textRect1str.height() * cnt + (ost? textRect1str.height() : 0) + X + 20 + 30); diff --git a/InstructorsAndTrainees/messanger/tabdialogmessenger.cpp b/InstructorsAndTrainees/messanger/tabdialogmessenger.cpp index c791d83..a10bb88 100644 --- a/InstructorsAndTrainees/messanger/tabdialogmessenger.cpp +++ b/InstructorsAndTrainees/messanger/tabdialogmessenger.cpp @@ -1,15 +1,16 @@ #include #include "tabdialogmessenger.h" #include "msgwidget.h" +#include "user.h" -OneDialogMessenger::OneDialogMessenger(QString login , QString userId, QWidget *parent): +OneDialogMessenger::OneDialogMessenger(QString userId, QString typeUserDB, QWidget *parent): QListWidget(parent), - login(""), - userId("") + userId(""), + typeUserDB("") { this->userId = userId; - this->login = login; + this->typeUserDB = typeUserDB; setWordWrap(true); setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); @@ -39,13 +40,17 @@ void OneDialogMessenger::addMsgWidget(QString text, QString timeStr, MsgWidget:: //TODO уточнить аватарки! if(direction == MsgWidget::DirectionMsg::Outgoing) - { + {//Исходящее avatar = ":/resources/icons/instructor.png"; aligneAvatar = MsgWidget::AligneAvatar::Left; } else - { - avatar = ":/resources/icons/trainee.png"; + {//Входящее + if(typeUserDB == User::TypeUserDBTrainee) + avatar = ":/resources/icons/trainee.png"; + else + avatar = ":/resources/icons/instructor.png"; + aligneAvatar = MsgWidget::AligneAvatar::Right; } diff --git a/InstructorsAndTrainees/messanger/tabdialogmessenger.h b/InstructorsAndTrainees/messanger/tabdialogmessenger.h index de85790..2c80c50 100644 --- a/InstructorsAndTrainees/messanger/tabdialogmessenger.h +++ b/InstructorsAndTrainees/messanger/tabdialogmessenger.h @@ -4,19 +4,14 @@ #include #include "msgwidget.h" -//Закладка ведения диалога с одним клиентом - -//TODO сделать идентификацию по ID - class OneDialogMessenger : public QListWidget { Q_OBJECT public: - OneDialogMessenger(QString userLogin, QString userId, QWidget *parent = nullptr); + OneDialogMessenger(QString userId, QString typeUserDB, QWidget *parent = nullptr); ~OneDialogMessenger(); - QString getUserLogin() {return login;}; QString getUserId() {return userId;} void addMsgWidgetLocal(QString text, QString timeStr = ""); @@ -26,8 +21,8 @@ private: void addMsgWidget(QString text, QString timeStr, MsgWidget::DirectionMsg direction); private: - QString login; QString userId; + QString typeUserDB; }; #endif // TABDIALOGMESSENGER_H