mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-27 19:45:43 +03:00
Рефакт7 Мессенджера
This commit is contained in:
@@ -22,7 +22,7 @@ MessangerWidget *MessangerController::newWidget(QWidget *parent, Trainee* traine
|
|||||||
|
|
||||||
connect(msgWdgt, &MessangerWidget::signal_sendMessage, this, &MessangerController::slot_sendMessage);
|
connect(msgWdgt, &MessangerWidget::signal_sendMessage, this, &MessangerController::slot_sendMessage);
|
||||||
|
|
||||||
msgWdgt->initialize(GUIclientId);
|
msgWdgt->initGUIclientId(GUIclientId);
|
||||||
|
|
||||||
if(trainee)
|
if(trainee)
|
||||||
{
|
{
|
||||||
@@ -38,7 +38,7 @@ MessangerWidget *MessangerController::newWidget(QWidget *parent, Trainee* traine
|
|||||||
for(MessageOfMessanger msg : *list)
|
for(MessageOfMessanger msg : *list)
|
||||||
{
|
{
|
||||||
if(msg.flLocal)
|
if(msg.flLocal)
|
||||||
msgWdgt->showSendedMessage(msg.text);
|
msgWdgt->showSendedMessage(ClientMessage(GUIclientId, QString::number(id_user), msg.text));
|
||||||
else
|
else
|
||||||
msgWdgt->showReceivedMessage(ClientMessage(QString::number(id_user), GUIclientId, msg.text));
|
msgWdgt->showReceivedMessage(ClientMessage(QString::number(id_user), GUIclientId, msg.text));
|
||||||
}
|
}
|
||||||
@@ -76,7 +76,7 @@ void MessangerController::setGUIclientId(QString id)
|
|||||||
|
|
||||||
for(MessangerWidget* widget : listWidgets)
|
for(MessangerWidget* widget : listWidgets)
|
||||||
{
|
{
|
||||||
widget->initialize(GUIclientId);
|
widget->initGUIclientId(GUIclientId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,7 +102,7 @@ void MessangerController::slot_sendMessage(ClientMessage clientMessage)
|
|||||||
|
|
||||||
for(MessangerWidget* widget : listWidgets)
|
for(MessangerWidget* widget : listWidgets)
|
||||||
{
|
{
|
||||||
widget->showSendedMessage(clientMessage.Text);
|
widget->showSendedMessage(clientMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,6 +134,6 @@ void MessangerController::slot_reinitMessangers(QList<Trainee> listTrainees)
|
|||||||
{
|
{
|
||||||
for(MessangerWidget* widget : listWidgets)
|
for(MessangerWidget* widget : listWidgets)
|
||||||
{
|
{
|
||||||
widget->initMessangerWidget(listTrainees);
|
widget->reinitMessangerWidget(listTrainees);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#include <QListWidget>
|
#include <QListWidget>
|
||||||
#include <QBrush>
|
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include <QAbstractScrollArea>
|
#include <QAbstractScrollArea>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
@@ -10,10 +9,9 @@
|
|||||||
|
|
||||||
MessangerWidget::MessangerWidget(QWidget *parent) :
|
MessangerWidget::MessangerWidget(QWidget *parent) :
|
||||||
QWidget(parent),
|
QWidget(parent),
|
||||||
ui(new Ui::MessangerWidget),
|
|
||||||
tabDialogMessenger(nullptr),
|
tabDialogMessenger(nullptr),
|
||||||
selectedUserLogin(""),
|
currGUIclientId(""),
|
||||||
selectedUserId("")
|
ui(new Ui::MessangerWidget)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
@@ -21,8 +19,6 @@ MessangerWidget::MessangerWidget(QWidget *parent) :
|
|||||||
ui->tabWidget->removeTab(0);
|
ui->tabWidget->removeTab(0);
|
||||||
|
|
||||||
ui->btnSend->setObjectName("btnSend");
|
ui->btnSend->setObjectName("btnSend");
|
||||||
ui->btnSend->setEnabled(false);
|
|
||||||
ui->editMsg->setEnabled(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MessangerWidget::~MessangerWidget()
|
MessangerWidget::~MessangerWidget()
|
||||||
@@ -31,46 +27,51 @@ MessangerWidget::~MessangerWidget()
|
|||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessangerWidget::addMsgFromClient(Trainee trainee, QString text)
|
void MessangerWidget::setOneTrainee(Trainee trainee)
|
||||||
{
|
{
|
||||||
//Пробуем добавить вкладку диалога с клиентом (если вдруг еще нет)
|
this->trainee = trainee;
|
||||||
//addTabDialogMessenger(trainee);
|
|
||||||
|
|
||||||
//Ищем нужный диалог
|
addTabDialogMessenger(trainee);
|
||||||
QString login = trainee.getLogin();
|
}
|
||||||
|
|
||||||
if(tabDialogMessenger->getUserLogin() == trainee.getLogin())
|
void MessangerWidget::reinitMessangerWidget(QList<Trainee> listTrainees)
|
||||||
{//Есть такой
|
{
|
||||||
|
for(Trainee traineeUpdate: listTrainees)
|
||||||
|
{
|
||||||
|
if(trainee.getID() == traineeUpdate.getID())
|
||||||
|
{
|
||||||
|
trainee = traineeUpdate;
|
||||||
|
|
||||||
//Добавляем в существующую вкладку
|
//Обновляем статус залогинивания
|
||||||
ui->tabWidget->setCurrentIndex(getIndexTab(login));
|
updateLoggedIn(trainee.getLoggedIn());
|
||||||
tabDialogMessenger->addMsgWidgetRemote(text);
|
|
||||||
//Делаем ее текущей
|
|
||||||
//ui->tabWidget->setCurrentIndex(getIndexTab(login));
|
|
||||||
|
|
||||||
selectedUserLogin = login;
|
break;
|
||||||
selectedUserId = QString::number(trainee.getID());
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessangerWidget::initialize(QString id)
|
void MessangerWidget::initGUIclientId(QString id_client)
|
||||||
{
|
{
|
||||||
currClientId = id;
|
currGUIclientId = id_client;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MessangerWidget::showSendedMessage(ClientMessage clientMessage)
|
||||||
|
{
|
||||||
|
if(currGUIclientId == clientMessage.fromId)
|
||||||
|
tabDialogMessenger->addMsgWidgetLocal(clientMessage.Text);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MessangerWidget::showReceivedMessage(ClientMessage clientMessage)
|
||||||
|
{
|
||||||
|
if(QString::number(trainee.getID()) == clientMessage.fromId)
|
||||||
|
tabDialogMessenger->addMsgWidgetRemote(clientMessage.Text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessangerWidget::addTabDialogMessenger(Trainee trainee)
|
void MessangerWidget::addTabDialogMessenger(Trainee trainee)
|
||||||
{
|
{
|
||||||
if(!tabDialogMessenger)
|
if(!tabDialogMessenger)
|
||||||
{//Самая первая вкладка, делаем ее активной
|
{//Диалога еще не существует
|
||||||
selectedUserLogin = trainee.getLogin();
|
|
||||||
selectedUserId = QString::number(trainee.getID());
|
|
||||||
ui->btnSend->setEnabled(true);
|
|
||||||
ui->editMsg->setEnabled(true);
|
|
||||||
|
|
||||||
//Диалога для этого клиента еще не существует
|
|
||||||
|
|
||||||
//Помещаем новый диалог в список диалогов
|
|
||||||
tabDialogMessenger = new TabDialogMessenger(trainee.getLogin(),QString::number(trainee.getID()), this);
|
tabDialogMessenger = new TabDialogMessenger(trainee.getLogin(),QString::number(trainee.getID()), this);
|
||||||
|
|
||||||
//Добавляем новую вкладку диалога
|
//Добавляем новую вкладку диалога
|
||||||
@@ -80,99 +81,17 @@ void MessangerWidget::addTabDialogMessenger(Trainee trainee)
|
|||||||
updateLoggedIn(trainee.getLoggedIn());
|
updateLoggedIn(trainee.getLoggedIn());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{//Диалог уже существует
|
||||||
|
|
||||||
//Проверяем наличие диалога с этим клиентом
|
//Проверяем наличие диалога с этим клиентом
|
||||||
if(tabDialogMessenger->getUserLogin() == trainee.getLogin())
|
if(tabDialogMessenger->getUserLogin() == trainee.getLogin())
|
||||||
{//Диалог для этого клиента уже существует
|
{
|
||||||
//Обновляем статус залогинивания
|
//Обновляем статус залогинивания
|
||||||
updateLoggedIn(trainee.getLoggedIn());
|
updateLoggedIn(trainee.getLoggedIn());
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int MessangerWidget::getIndexTab(QString login)
|
|
||||||
{
|
|
||||||
for(int index = 0; index < ui->tabWidget->count(); index++)
|
|
||||||
{
|
|
||||||
TabDialogMessenger* tabDialogMessenger = static_cast<TabDialogMessenger*>(ui->tabWidget->widget(index));
|
|
||||||
if(tabDialogMessenger->getUserLogin() == login)
|
|
||||||
return index;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MessangerWidget::showSendedMessage(QString text)
|
|
||||||
{
|
|
||||||
//Ищем нужный диалог
|
|
||||||
if(tabDialogMessenger->getUserLogin() == selectedUserLogin)
|
|
||||||
{
|
|
||||||
//Добавляем в существующую вкладку
|
|
||||||
tabDialogMessenger->addMsgWidgetLocal(text);
|
|
||||||
//Делаем ее активной
|
|
||||||
ui->tabWidget->setCurrentIndex(getIndexTab(selectedUserLogin));
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MessangerWidget::setOneTrainee(Trainee trainee)
|
|
||||||
{
|
|
||||||
this->trainee = trainee;
|
|
||||||
|
|
||||||
QList<Trainee> listTrainees;
|
|
||||||
|
|
||||||
listTrainees.append(trainee);
|
|
||||||
|
|
||||||
initMessangerWidget(listTrainees);
|
|
||||||
}
|
|
||||||
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MessangerWidget::slot_LanguageChanged(QString language)
|
|
||||||
{
|
|
||||||
qtLanguageTranslator.load(QString("translationsMy/ServerLMS_") + language, ".");
|
|
||||||
qApp->installTranslator(&qtLanguageTranslator);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MessangerWidget::initMessangerWidget(QList<Trainee> listTrainees)
|
|
||||||
{
|
|
||||||
for(Trainee traineeUpdate: listTrainees)
|
|
||||||
{
|
|
||||||
if(trainee.getID() == traineeUpdate.getID())
|
|
||||||
{
|
|
||||||
trainee = traineeUpdate;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
addTabDialogMessenger(trainee);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MessangerWidget::showReceivedMessage(ClientMessage clientMessage)
|
|
||||||
{
|
|
||||||
if(QString::number(trainee.getID()) == clientMessage.fromId)
|
|
||||||
addMsgFromClient(trainee, clientMessage.Text);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MessangerWidget::keyPressEvent(QKeyEvent *event)
|
|
||||||
{
|
|
||||||
if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return)
|
|
||||||
{
|
|
||||||
ui->btnSend->click();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MessangerWidget::updateLoggedIn(bool loggedIn)
|
void MessangerWidget::updateLoggedIn(bool loggedIn)
|
||||||
{
|
{
|
||||||
//Обновляем статус залогинивания
|
//Обновляем статус залогинивания
|
||||||
@@ -182,6 +101,26 @@ void MessangerWidget::updateLoggedIn(bool loggedIn)
|
|||||||
ui->tabWidget->setTabIcon(0, QIcon(":/resources/icons/circleGray.png"));
|
ui->tabWidget->setTabIcon(0, QIcon(":/resources/icons/circleGray.png"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MessangerWidget::on_btnSend_clicked()
|
||||||
|
{
|
||||||
|
QString text = ui->editMsg->toPlainText();
|
||||||
|
QString from = currGUIclientId;
|
||||||
|
QString to = QString::number(trainee.getID());
|
||||||
|
|
||||||
|
ClientMessage message = ClientMessage(from, to, text);
|
||||||
|
emit signal_sendMessage(message);
|
||||||
|
|
||||||
|
ui->editMsg->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MessangerWidget::keyPressEvent(QKeyEvent *event)
|
||||||
|
{
|
||||||
|
if (event->key() == Qt::Key_Return)
|
||||||
|
{
|
||||||
|
ui->btnSend->click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MessangerWidget::changeEvent(QEvent *event)
|
void MessangerWidget::changeEvent(QEvent *event)
|
||||||
{
|
{
|
||||||
// В случае получения события изменения языка приложения
|
// В случае получения события изменения языка приложения
|
||||||
|
|||||||
@@ -16,30 +16,24 @@ class MessangerWidget : public QWidget
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum ETypeMsg{fromClient, toClient};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit MessangerWidget(QWidget *parent = nullptr);
|
explicit MessangerWidget(QWidget *parent = nullptr);
|
||||||
~MessangerWidget();
|
~MessangerWidget();
|
||||||
|
|
||||||
protected:
|
|
||||||
// Метод получения событий
|
|
||||||
// В нём будет производиться проверка события смены перевода приложения
|
|
||||||
void changeEvent(QEvent * event) override;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum ETypeMsg{fromClient, toClient};
|
|
||||||
|
|
||||||
void addMsgFromClient(Trainee trainee, QString text);
|
|
||||||
void initialize(QString id);
|
|
||||||
void addTabDialogMessenger(Trainee trainee);
|
|
||||||
int getIndexTab(QString login);
|
|
||||||
|
|
||||||
void showSendedMessage(QString text);
|
|
||||||
|
|
||||||
void setOneTrainee(Trainee trainee);
|
void setOneTrainee(Trainee trainee);
|
||||||
|
void reinitMessangerWidget(QList<Trainee> listTrainees);
|
||||||
|
void initGUIclientId(QString id_client);
|
||||||
|
|
||||||
public slots:
|
void showSendedMessage(ClientMessage clientMessage);
|
||||||
//слот обработки сигнала о смене языка
|
void showReceivedMessage(ClientMessage clientMessage);
|
||||||
void slot_LanguageChanged(QString language);
|
|
||||||
|
private:
|
||||||
|
void addTabDialogMessenger(Trainee trainee);
|
||||||
|
void updateLoggedIn(bool loggedIn);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_btnSend_clicked();
|
void on_btnSend_clicked();
|
||||||
@@ -48,26 +42,21 @@ signals:
|
|||||||
//сигнал о готовности нового сообщения на отправку клиенту
|
//сигнал о готовности нового сообщения на отправку клиенту
|
||||||
void signal_sendMessage(ClientMessage clientMessage);
|
void signal_sendMessage(ClientMessage clientMessage);
|
||||||
|
|
||||||
public:
|
|
||||||
void showReceivedMessage(ClientMessage clientMessage);
|
|
||||||
|
|
||||||
|
|
||||||
void initMessangerWidget(QList<Trainee> listTrainees); //?
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual void keyPressEvent(QKeyEvent *event) override;
|
virtual void keyPressEvent(QKeyEvent *event) override;
|
||||||
|
|
||||||
void updateLoggedIn(bool loggedIn);
|
protected:
|
||||||
|
void changeEvent(QEvent * event) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
TabDialogMessenger* tabDialogMessenger;
|
||||||
|
Trainee trainee;
|
||||||
|
QString currGUIclientId; //id этого клиента
|
||||||
|
|
||||||
|
QTranslator qtLanguageTranslator;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::MessangerWidget *ui;
|
Ui::MessangerWidget *ui;
|
||||||
//QList <TabDialogMessenger*> listTabDialogMessenger;
|
|
||||||
TabDialogMessenger* tabDialogMessenger;
|
|
||||||
Trainee trainee;
|
|
||||||
QString selectedUserLogin; //Логин клиента текущего диалога
|
|
||||||
QString selectedUserId; //id клиента текущего диалога
|
|
||||||
QString currClientId; //id этого клиента
|
|
||||||
QTranslator qtLanguageTranslator;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MESSANGERWIDGET_H
|
#endif // MESSANGERWIDGET_H
|
||||||
|
|||||||
Reference in New Issue
Block a user