Рефакт7 Мессенджера

This commit is contained in:
2025-09-09 15:52:47 +03:00
parent deb7938ff8
commit e2f7ca88c1
3 changed files with 79 additions and 151 deletions

View File

@@ -22,7 +22,7 @@ MessangerWidget *MessangerController::newWidget(QWidget *parent, Trainee* traine
connect(msgWdgt, &MessangerWidget::signal_sendMessage, this, &MessangerController::slot_sendMessage);
msgWdgt->initialize(GUIclientId);
msgWdgt->initGUIclientId(GUIclientId);
if(trainee)
{
@@ -38,7 +38,7 @@ MessangerWidget *MessangerController::newWidget(QWidget *parent, Trainee* traine
for(MessageOfMessanger msg : *list)
{
if(msg.flLocal)
msgWdgt->showSendedMessage(msg.text);
msgWdgt->showSendedMessage(ClientMessage(GUIclientId, QString::number(id_user), msg.text));
else
msgWdgt->showReceivedMessage(ClientMessage(QString::number(id_user), GUIclientId, msg.text));
}
@@ -76,7 +76,7 @@ void MessangerController::setGUIclientId(QString id)
for(MessangerWidget* widget : listWidgets)
{
widget->initialize(GUIclientId);
widget->initGUIclientId(GUIclientId);
}
}
@@ -102,7 +102,7 @@ void MessangerController::slot_sendMessage(ClientMessage clientMessage)
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)
{
widget->initMessangerWidget(listTrainees);
widget->reinitMessangerWidget(listTrainees);
}
}

View File

@@ -1,5 +1,4 @@
#include <QListWidget>
#include <QBrush>
#include <QKeyEvent>
#include <QAbstractScrollArea>
#include <QMessageBox>
@@ -10,10 +9,9 @@
MessangerWidget::MessangerWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MessangerWidget),
tabDialogMessenger(nullptr),
selectedUserLogin(""),
selectedUserId("")
currGUIclientId(""),
ui(new Ui::MessangerWidget)
{
ui->setupUi(this);
@@ -21,8 +19,6 @@ MessangerWidget::MessangerWidget(QWidget *parent) :
ui->tabWidget->removeTab(0);
ui->btnSend->setObjectName("btnSend");
ui->btnSend->setEnabled(false);
ui->editMsg->setEnabled(false);
}
MessangerWidget::~MessangerWidget()
@@ -31,46 +27,51 @@ MessangerWidget::~MessangerWidget()
delete ui;
}
void MessangerWidget::addMsgFromClient(Trainee trainee, QString text)
void MessangerWidget::setOneTrainee(Trainee trainee)
{
//Пробуем добавить вкладку диалога с клиентом (если вдруг еще нет)
//addTabDialogMessenger(trainee);
this->trainee = trainee;
//Ищем нужный диалог
QString login = trainee.getLogin();
addTabDialogMessenger(trainee);
}
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));
tabDialogMessenger->addMsgWidgetRemote(text);
//Делаем ее текущей
//ui->tabWidget->setCurrentIndex(getIndexTab(login));
//Обновляем статус залогинивания
updateLoggedIn(trainee.getLoggedIn());
selectedUserLogin = login;
selectedUserId = QString::number(trainee.getID());
return;
break;
}
}
}
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)
{
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);
//Добавляем новую вкладку диалога
@@ -80,99 +81,17 @@ void MessangerWidget::addTabDialogMessenger(Trainee trainee)
updateLoggedIn(trainee.getLoggedIn());
}
else
{
{//Диалог уже существует
//Проверяем наличие диалога с этим клиентом
if(tabDialogMessenger->getUserLogin() == trainee.getLogin())
{//Диалог для этого клиента уже существует
{
//Обновляем статус залогинивания
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)
{
//Обновляем статус залогинивания
@@ -182,6 +101,26 @@ void MessangerWidget::updateLoggedIn(bool loggedIn)
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)
{
// В случае получения события изменения языка приложения

View File

@@ -16,30 +16,24 @@ class MessangerWidget : public QWidget
{
Q_OBJECT
public:
enum ETypeMsg{fromClient, toClient};
public:
explicit MessangerWidget(QWidget *parent = nullptr);
~MessangerWidget();
protected:
// Метод получения событий
// В нём будет производиться проверка события смены перевода приложения
void changeEvent(QEvent * event) override;
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 reinitMessangerWidget(QList<Trainee> listTrainees);
void initGUIclientId(QString id_client);
public slots:
//слот обработки сигнала о смене языка
void slot_LanguageChanged(QString language);
void showSendedMessage(ClientMessage clientMessage);
void showReceivedMessage(ClientMessage clientMessage);
private:
void addTabDialogMessenger(Trainee trainee);
void updateLoggedIn(bool loggedIn);
private slots:
void on_btnSend_clicked();
@@ -48,26 +42,21 @@ signals:
//сигнал о готовности нового сообщения на отправку клиенту
void signal_sendMessage(ClientMessage clientMessage);
public:
void showReceivedMessage(ClientMessage clientMessage);
void initMessangerWidget(QList<Trainee> listTrainees); //?
private:
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:
Ui::MessangerWidget *ui;
//QList <TabDialogMessenger*> listTabDialogMessenger;
TabDialogMessenger* tabDialogMessenger;
Trainee trainee;
QString selectedUserLogin; //Логин клиента текущего диалога
QString selectedUserId; //id клиента текущего диалога
QString currClientId; //id этого клиента
QTranslator qtLanguageTranslator;
};
#endif // MESSANGERWIDGET_H