Files
RRJServer/InstructorsAndTrainees/messanger/messangercontroller.cpp

157 lines
4.0 KiB
C++

#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()
{
for(MessangerWidget* widget : listWidgets)
delete widget;
}
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);
connect(msgWdgt, &MessangerWidget::signal_tabMessengerChanged, this, &MessangerController::slot_tabMessengerChanged);
msgWdgt->initialize(GUIclientId);
if(trainee)
{
msgWdgt->setOneTrainee(*trainee);
//Заполнение предыстории
int id_user = trainee->getID();
QList<MessageOfMessanger>* 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::setGUIclientId(QString id)
{
GUIclientId = id;
for(MessangerWidget* widget : listWidgets)
{
widget->initialize(GUIclientId);
}
}
void MessangerController::clearAllWidgets()
{
for(MessangerWidget* widget : listWidgets)
{
widget->clear();
}
}
void MessangerController::slot_sendMessage(ClientMessage clientMessage)
{
connectorToServer->slot_sendMessage(clientMessage);
int id_user = clientMessage.toId.toInt();
QList<MessageOfMessanger>* list = nullptr;
if(mapAlldialogsWithClients.contains(id_user))
{//Уже есть
list = mapAlldialogsWithClients.value(id_user);
}
else
{//Новый
list = new QList<MessageOfMessanger>();
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_tabMessengerChanged(QString login)
{
emit signal_tabMessengerChanged(login);
}
void MessangerController::slot_receiveMessage(ClientMessage clientMessage)
{
int id_user = clientMessage.fromId.toInt();
QList<MessageOfMessanger>* list = nullptr;
if(mapAlldialogsWithClients.contains(id_user))
{//Уже есть
list = mapAlldialogsWithClients.value(id_user);
}
else
{//Новый
list = new QList<MessageOfMessanger>();
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_initMessanger(QList<Trainee> listTrainees)
{
for(MessangerWidget* widget : listWidgets)
{
widget->initMessangerWidget(listTrainees);
}
}
void MessangerController::slot_traineeSelected(QString login)
{
for(MessangerWidget* widget : listWidgets)
{
widget->traineeSelected(login);
}
}