mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-28 19:55:48 +03:00
Контроллер мессенджера доработанный
This commit is contained in:
@@ -3,32 +3,49 @@
|
||||
MessangerController::MessangerController(ConnectorToServer* connectorToServer, QObject *parent) :
|
||||
QObject(parent),
|
||||
connectorToServer(connectorToServer),
|
||||
currClientId("")
|
||||
GUIclientId("")
|
||||
{
|
||||
|
||||
connect(connectorToServer, &ConnectorToServer::signal_receiveMessage, this, &MessangerController::slot_receiveMessage);
|
||||
}
|
||||
|
||||
MessangerController::~MessangerController()
|
||||
{
|
||||
for(MessangerWidget* widget : listWidgets)
|
||||
{
|
||||
delete widget;
|
||||
}
|
||||
}
|
||||
|
||||
MessangerWidget *MessangerController::newWidget(QWidget *parent)
|
||||
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(connectorToServer,&ConnectorToServer::signal_receiveMessage,msgWdgt,&MessangerWidget::slot_showMessage);
|
||||
connect(msgWdgt, &MessangerWidget::signal_tabMessengerChanged, this, &MessangerController::slot_tabMessengerChanged);
|
||||
|
||||
connect(this, &MessangerController::signal_traineeSelected, msgWdgt, &MessangerWidget::slot_traineeSelected);
|
||||
connect(msgWdgt, &MessangerWidget::signal_tabMessengerChanged, this, &MessangerController::signal_tabMessengerChanged);
|
||||
msgWdgt->initialize(GUIclientId);
|
||||
|
||||
//connect(this, &MessangerController::slot_InitMessanger, msgWdgt,&MessangerWidget::slot_InitMessanger);
|
||||
if(trainee)
|
||||
{
|
||||
msgWdgt->setOneTrainee(*trainee);
|
||||
|
||||
msgWdgt->initialize(currClientId);
|
||||
//Заполнение предыстории
|
||||
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);
|
||||
|
||||
@@ -43,21 +60,22 @@ void MessangerController::deleteWidget(MessangerWidget *msgWdgt)
|
||||
{
|
||||
delete msgWdgt;
|
||||
listWidgets.removeAt(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MessangerController::initialize(QString id)
|
||||
void MessangerController::setGUIclientId(QString id)
|
||||
{
|
||||
currClientId = id;
|
||||
GUIclientId = id;
|
||||
|
||||
for(MessangerWidget* widget : listWidgets)
|
||||
{
|
||||
widget->initialize(currClientId);
|
||||
widget->initialize(GUIclientId);
|
||||
}
|
||||
}
|
||||
|
||||
void MessangerController::clear()
|
||||
void MessangerController::clearAllWidgets()
|
||||
{
|
||||
for(MessangerWidget* widget : listWidgets)
|
||||
{
|
||||
@@ -65,20 +83,74 @@ void MessangerController::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->addMsgWidgetLocal(clientMessage.Text);
|
||||
widget->showSendedMessage(clientMessage.Text);
|
||||
}
|
||||
}
|
||||
|
||||
void MessangerController::slot_InitMessanger(QList<Trainee> listTrainees)
|
||||
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->slot_InitMessanger(listTrainees);
|
||||
widget->initMessangerWidget(listTrainees);
|
||||
}
|
||||
}
|
||||
|
||||
void MessangerController::slot_traineeSelected(QString login)
|
||||
{
|
||||
for(MessangerWidget* widget : listWidgets)
|
||||
{
|
||||
widget->traineeSelected(login);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,16 @@
|
||||
#define MESSANGERCONTROLLER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QVBoxLayout>
|
||||
#include "messangerwidget.h"
|
||||
#include "connectortoserver.h"
|
||||
|
||||
struct MessageOfMessanger
|
||||
{
|
||||
QString text;
|
||||
bool flLocal;
|
||||
};
|
||||
|
||||
class MessangerController : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -13,28 +20,30 @@ public:
|
||||
~MessangerController();
|
||||
|
||||
public:
|
||||
MessangerWidget* newWidget(QWidget *parent);
|
||||
MessangerWidget* newWidget(QWidget *parent, Trainee* trainee = nullptr, QVBoxLayout* boxLayout = nullptr);
|
||||
void deleteWidget(MessangerWidget* msgWdgt);
|
||||
|
||||
void initialize(QString id);
|
||||
void clear();
|
||||
void setGUIclientId(QString id);
|
||||
void clearAllWidgets();
|
||||
|
||||
signals:
|
||||
void signal_tabMessengerChanged(QString login);
|
||||
void signal_traineeSelected(QString login);
|
||||
|
||||
|
||||
|
||||
public slots:
|
||||
void slot_sendMessage(ClientMessage clientMessage);
|
||||
void slot_InitMessanger(QList<Trainee> listTrainees);
|
||||
void slot_tabMessengerChanged(QString login);
|
||||
|
||||
void slot_receiveMessage(ClientMessage clientMessage);
|
||||
void slot_initMessanger(QList<Trainee> listTrainees);
|
||||
void slot_traineeSelected(QString login);
|
||||
|
||||
private:
|
||||
ConnectorToServer* connectorToServer;
|
||||
QList <MessangerWidget*> listWidgets;
|
||||
|
||||
QString currClientId; //id этого клиента
|
||||
QString GUIclientId; //id этого GUI клиента
|
||||
|
||||
QMap <int, QList<MessageOfMessanger>*> mapAlldialogsWithClients;
|
||||
};
|
||||
|
||||
#endif // MESSANGERCONTROLLER_H
|
||||
|
||||
@@ -151,7 +151,7 @@ void MessangerWidget::clear()
|
||||
actualizationTabsDialogMessenger();
|
||||
}
|
||||
|
||||
void MessangerWidget::addMsgWidgetLocal(QString text)
|
||||
void MessangerWidget::showSendedMessage(QString text)
|
||||
{
|
||||
//Ищем нужный диалог
|
||||
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
|
||||
@@ -175,7 +175,7 @@ void MessangerWidget::setOneTrainee(Trainee trainee)
|
||||
listTrainees.clear();
|
||||
listTrainees.append(trainee);
|
||||
|
||||
slot_InitMessanger(listTrainees);
|
||||
initMessangerWidget(listTrainees);
|
||||
}
|
||||
|
||||
void MessangerWidget::on_btnSend_clicked()
|
||||
@@ -221,7 +221,7 @@ void MessangerWidget::on_tabWidget_currentChanged(int index)
|
||||
}
|
||||
}
|
||||
|
||||
void MessangerWidget::slot_traineeSelected(QString login)
|
||||
void MessangerWidget::traineeSelected(QString login)
|
||||
{
|
||||
//Ищем нужный диалог
|
||||
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
|
||||
@@ -239,13 +239,24 @@ void MessangerWidget::slot_traineeSelected(QString login)
|
||||
ui->editMsg->setEnabled(false);
|
||||
}
|
||||
|
||||
void MessangerWidget::getTabDialogMessengerByID(QString id_user)
|
||||
{
|
||||
//Ищем нужный диалог
|
||||
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
|
||||
{
|
||||
if(tabDialog->getUserId() == id_user)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MessangerWidget::slot_LanguageChanged(QString language)
|
||||
{
|
||||
qtLanguageTranslator.load(QString("translationsMy/ServerLMS_") + language, ".");
|
||||
qApp->installTranslator(&qtLanguageTranslator);
|
||||
}
|
||||
|
||||
void MessangerWidget::slot_InitMessanger(QList<Trainee> listTrainees)
|
||||
void MessangerWidget::initMessangerWidget(QList<Trainee> listTrainees)
|
||||
{
|
||||
if(flOneTrainee)
|
||||
{
|
||||
@@ -273,7 +284,7 @@ void MessangerWidget::slot_InitMessanger(QList<Trainee> listTrainees)
|
||||
}
|
||||
}
|
||||
|
||||
void MessangerWidget::slot_showMessage(ClientMessage clientMessage)
|
||||
void MessangerWidget::showReceivedMessage(ClientMessage clientMessage)
|
||||
{
|
||||
for(Trainee trainee: listTrainees)
|
||||
{
|
||||
|
||||
@@ -40,10 +40,14 @@ public:
|
||||
|
||||
void clear();
|
||||
|
||||
void addMsgWidgetLocal(QString text);
|
||||
void showSendedMessage(QString text);
|
||||
|
||||
void setOneTrainee(Trainee trainee);
|
||||
|
||||
public slots:
|
||||
//слот обработки сигнала о смене языка
|
||||
void slot_LanguageChanged(QString language);
|
||||
|
||||
private slots:
|
||||
void on_btnSend_clicked();
|
||||
void on_tabWidget_currentChanged(int index);
|
||||
@@ -54,15 +58,12 @@ signals:
|
||||
//сигнал об изменении вкладки диалога с клиентом (TabDialogMessenger)
|
||||
void signal_tabMessengerChanged(QString login);
|
||||
|
||||
public slots:
|
||||
//слот обработки сигнала о смене языка
|
||||
void slot_LanguageChanged(QString language);
|
||||
//слот обработки сигнала об инициализации мессенджера
|
||||
void slot_InitMessanger(QList<Trainee> listTrainees);
|
||||
//слот обработки сигнала о выборе обучаемого
|
||||
void slot_traineeSelected(QString login);
|
||||
//слот о приходе нового сообщения от клиента
|
||||
void slot_showMessage(ClientMessage clientMessage);
|
||||
public:
|
||||
void showReceivedMessage(ClientMessage clientMessage);
|
||||
void initMessangerWidget(QList<Trainee> listTrainees);
|
||||
void traineeSelected(QString login);
|
||||
|
||||
void getTabDialogMessengerByID(QString id_user);
|
||||
|
||||
private:
|
||||
virtual void keyPressEvent(QKeyEvent *event) override;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>500</width>
|
||||
<width>344</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -35,6 +35,12 @@
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
|
||||
@@ -24,8 +24,15 @@ void TabDialogMessenger::addMsgWidgetLocal(QString text)
|
||||
{
|
||||
QListWidgetItem *listWidgetItem = new QListWidgetItem();
|
||||
QString avatar = ":/resources/icons/instructor.png";
|
||||
|
||||
int widthW = width();
|
||||
int widthSB = verticalScrollBar()->size().width();
|
||||
//TODO Времянка
|
||||
widthW = 450;
|
||||
widthSB = 17;
|
||||
|
||||
MsgWidget *msgWidget = new MsgWidget(avatar, MsgWidget::AligneAvatar::Left,
|
||||
width() - verticalScrollBar()->size().width());
|
||||
widthW - widthSB);
|
||||
|
||||
addItem(listWidgetItem);
|
||||
setItemWidget(listWidgetItem, msgWidget);
|
||||
@@ -42,8 +49,15 @@ void TabDialogMessenger::addMsgWidgetRemote(QString text)
|
||||
{
|
||||
QListWidgetItem *listWidgetItem = new QListWidgetItem();
|
||||
QString avatar = ":/resources/icons/trainee.png";
|
||||
|
||||
int widthW = width();
|
||||
int widthSB = verticalScrollBar()->size().width();
|
||||
//TODO Времянка
|
||||
widthW = 450;
|
||||
widthSB = 17;
|
||||
|
||||
MsgWidget *msgWidget = new MsgWidget(avatar, MsgWidget::AligneAvatar::Right,
|
||||
width() - verticalScrollBar()->size().width());
|
||||
widthW - widthSB);
|
||||
|
||||
addItem(listWidgetItem);
|
||||
setItemWidget(listWidgetItem, msgWidget);
|
||||
|
||||
Reference in New Issue
Block a user