#include "messangercontroller.h" MessangerController::MessangerController(ConnectorToServer* connectorToServer, QObject *parent) : QObject(parent), connectorToServer(connectorToServer), GUIclientId("") { connect(connectorToServer, &ConnectorToServer::signal_receiveMessage, this, &MessangerController::slot_receiveMessage); } MessangerController::~MessangerController() { deleteAllWidgets(); } MessangerWidget *MessangerController::newWidget(QWidget *parent, Trainee* trainee, QVBoxLayout* boxLayout) { MessangerWidget *msgWdgt = new MessangerWidget(parent); if(boxLayout) boxLayout->addWidget(msgWdgt); connect(msgWdgt, &MessangerWidget::signal_sendMessage, this, &MessangerController::slot_sendMessage); msgWdgt->initialize(GUIclientId); if(trainee) { msgWdgt->setOneTrainee(*trainee); //Заполнение предыстории int id_user = trainee->getID(); QList* list = nullptr; if(mapAlldialogsWithClients.contains(id_user)) {//Уже есть list = mapAlldialogsWithClients.value(id_user); for(MessageOfMessanger msg : *list) { if(msg.flLocal) msgWdgt->showSendedMessage(msg.text); else msgWdgt->showReceivedMessage(ClientMessage(QString::number(id_user), GUIclientId, msg.text)); } } } 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); break; } } } void MessangerController::deleteAllWidgets() { for(MessangerWidget* widget : listWidgets) delete widget; listWidgets.clear(); } void MessangerController::setGUIclientId(QString id) { GUIclientId = id; for(MessangerWidget* widget : listWidgets) { widget->initialize(GUIclientId); } } 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; list->append(msg); for(MessangerWidget* widget : listWidgets) { widget->showSendedMessage(clientMessage.Text); } } 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; list->append(msg); for(MessangerWidget* widget : listWidgets) { widget->showReceivedMessage(clientMessage); } } void MessangerController::slot_reinitMessangers(QList listTrainees) { for(MessangerWidget* widget : listWidgets) { widget->initMessangerWidget(listTrainees); } }