mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-27 19:45:43 +03:00
258 lines
7.8 KiB
C++
258 lines
7.8 KiB
C++
#include <QListWidget>
|
||
#include <QBrush>
|
||
#include <QKeyEvent>
|
||
#include <QAbstractScrollArea>
|
||
#include <QMessageBox>
|
||
#include <QLabel>
|
||
#include "messangerwidget.h"
|
||
#include "ui_messangerwidget.h"
|
||
|
||
|
||
MessangerWidget::MessangerWidget(QWidget *parent) :
|
||
QWidget(parent),
|
||
ui(new Ui::MessangerWidget),
|
||
selectedUserLogin(""),
|
||
selectedUserId("")
|
||
{
|
||
ui->setupUi(this);
|
||
|
||
ui->tabWidget->removeTab(1);
|
||
ui->tabWidget->removeTab(0);
|
||
|
||
ui->btnSend->setObjectName("btnSend");
|
||
ui->btnSend->setEnabled(false);
|
||
ui->editMsg->setEnabled(false);
|
||
}
|
||
|
||
MessangerWidget::~MessangerWidget()
|
||
{
|
||
delete ui;
|
||
}
|
||
|
||
void MessangerWidget::addMsgFromClient(Trainee trainee, QString text)
|
||
{
|
||
//Пробуем добавить вкладку диалога с клиентом (если вдруг еще нет)
|
||
addTabDialogMessenger(trainee);
|
||
|
||
//Ищем нужный диалог
|
||
QString login = trainee.getLogin();
|
||
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
|
||
{//Есть такой
|
||
if(tabDialog->getUserLogin() == trainee.getLogin())
|
||
{
|
||
//Добавляем в существующую вкладку
|
||
ui->tabWidget->setCurrentIndex(getIndexTab(login));
|
||
tabDialog->addMsgWidgetRemote(text);
|
||
//Делаем ее текущей
|
||
ui->tabWidget->setCurrentIndex(getIndexTab(login));
|
||
|
||
selectedUserLogin = login;
|
||
selectedUserId = QString::number(trainee.getID());
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
|
||
void MessangerWidget::initialize(QString id)
|
||
{
|
||
currClientId = id;
|
||
}
|
||
|
||
void MessangerWidget::addTabDialogMessenger(Trainee trainee)
|
||
{
|
||
if(listTabDialogMessenger.count() == 0)
|
||
{//Самая первая вкладка, делаем ее активной
|
||
selectedUserLogin = trainee.getLogin();
|
||
selectedUserId = QString::number(trainee.getID());
|
||
emit signal_tabMessengerChanged(selectedUserLogin);
|
||
ui->btnSend->setEnabled(true);
|
||
ui->editMsg->setEnabled(true);
|
||
}
|
||
|
||
//Проверяем наличие диалога с этим клиентом
|
||
foreach(TabDialogMessenger* dialogMsg, listTabDialogMessenger)
|
||
{
|
||
if(dialogMsg->getUserLogin() == trainee.getLogin())
|
||
{//Диалог для этого клиента уже существует
|
||
//Обновляем статус залогинивания
|
||
if(trainee.getLoggedIn())
|
||
ui->tabWidget->setTabIcon(getIndexTab(trainee.getLogin()), QIcon(":/resources/icons/circleGreen.png"));
|
||
else
|
||
ui->tabWidget->setTabIcon(getIndexTab(trainee.getLogin()), QIcon(":/resources/icons/circleGray.png"));
|
||
return;
|
||
}
|
||
}
|
||
|
||
//Диалога для этого клиента еще не существует
|
||
|
||
//Помещаем новый диалог в список диалогов
|
||
TabDialogMessenger* tabDialog = new TabDialogMessenger(trainee.getLogin(),QString::number(trainee.getID()), this);
|
||
listTabDialogMessenger.append(tabDialog);
|
||
|
||
//Добавляем новую вкладку диалога
|
||
int index = ui->tabWidget->addTab(tabDialog, /*login + ": " +*/ trainee.getName());
|
||
|
||
//Обновляем статус залогинивания
|
||
if(trainee.getLoggedIn())
|
||
ui->tabWidget->setTabIcon(index, QIcon(":/resources/icons/circleGreen.png"));
|
||
else
|
||
ui->tabWidget->setTabIcon(index, QIcon(":/resources/icons/circleGray.png"));
|
||
}
|
||
|
||
void MessangerWidget::actualizationTabsDialogMessenger()
|
||
{
|
||
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
|
||
{
|
||
QString login = tabDialog->getUserLogin();
|
||
bool exist = false;
|
||
|
||
for(Trainee trainee : listTrainees)
|
||
{
|
||
if(trainee.getLogin() == login)
|
||
{
|
||
if(trainee.getArchived())
|
||
{//Стал архивным
|
||
//Удаляем диалог с клиентом
|
||
ui->tabWidget->removeTab(getIndexTab(login));
|
||
listTabDialogMessenger.removeOne(tabDialog);
|
||
}
|
||
else
|
||
exist = true;
|
||
|
||
break;
|
||
}
|
||
}
|
||
if(!exist)
|
||
{//Нет такого логина
|
||
//Удаляем диалог с клиентом
|
||
ui->tabWidget->removeTab(getIndexTab(login));
|
||
listTabDialogMessenger.removeOne(tabDialog);
|
||
}
|
||
}
|
||
}
|
||
|
||
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::clear()
|
||
{
|
||
ui->btnSend->setEnabled(false);
|
||
ui->editMsg->setEnabled(false);
|
||
listTrainees.clear();
|
||
actualizationTabsDialogMessenger();
|
||
}
|
||
|
||
void MessangerWidget::on_btnSend_clicked()
|
||
{
|
||
QString text = ui->editMsg->toPlainText();
|
||
ClientMessage message = ClientMessage(currClientId,selectedUserId,text,"0");
|
||
|
||
emit signal_sendMessage(message);
|
||
|
||
ui->editMsg->clear();
|
||
|
||
//Ищем нужный диалог
|
||
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
|
||
{
|
||
if(tabDialog->getUserLogin() == selectedUserLogin)
|
||
{
|
||
//Добавляем в существующую вкладку
|
||
tabDialog->addMsgWidgetLocal(text);
|
||
//Делаем ее активной
|
||
ui->tabWidget->setCurrentIndex(getIndexTab(selectedUserLogin));
|
||
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
|
||
void MessangerWidget::on_tabWidget_currentChanged(int index)
|
||
{
|
||
//Ищем нужный диалог
|
||
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
|
||
{
|
||
|
||
if(getIndexTab(tabDialog->getUserLogin()) == index)
|
||
{
|
||
selectedUserLogin = tabDialog->getUserLogin();
|
||
selectedUserId = tabDialog->getUserId();
|
||
emit signal_tabMessengerChanged(selectedUserLogin);
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
|
||
void MessangerWidget::slot_traineeSelected(QString login)
|
||
{
|
||
//Ищем нужный диалог
|
||
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
|
||
{
|
||
if(tabDialog->getUserLogin() == login)
|
||
{
|
||
//Активируем нужную вкладку
|
||
ui->tabWidget->setCurrentIndex(getIndexTab(login));
|
||
ui->btnSend->setEnabled(true);
|
||
ui->editMsg->setEnabled(true);
|
||
return;
|
||
}
|
||
}
|
||
ui->btnSend->setEnabled(false);
|
||
ui->editMsg->setEnabled(false);
|
||
}
|
||
|
||
void MessangerWidget::slot_LanguageChanged(QString language)
|
||
{
|
||
qtLanguageTranslator.load(QString("translationsMy/ServerLMS_") + language, ".");
|
||
qApp->installTranslator(&qtLanguageTranslator);
|
||
}
|
||
|
||
void MessangerWidget::slot_InitMessanger(QList<Trainee> listTrainees)
|
||
{
|
||
this->listTrainees = listTrainees;
|
||
|
||
actualizationTabsDialogMessenger();
|
||
|
||
for(Trainee trainee: listTrainees)
|
||
{
|
||
if(! trainee.getArchived())
|
||
addTabDialogMessenger(trainee);
|
||
}
|
||
}
|
||
|
||
void MessangerWidget::slot_showMessage(ClientMessage clientMessage)
|
||
{
|
||
for(Trainee trainee: listTrainees)
|
||
{
|
||
if(QString::number(trainee.getID()) == clientMessage.fromId)
|
||
{
|
||
addMsgFromClient(trainee, clientMessage.Text);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
void MessangerWidget::keyPressEvent(QKeyEvent *event)
|
||
{
|
||
if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return)
|
||
{
|
||
ui->btnSend->click();
|
||
}
|
||
}
|
||
|
||
void MessangerWidget::changeEvent(QEvent *event)
|
||
{
|
||
// В случае получения события изменения языка приложения
|
||
if (event->type() == QEvent::LanguageChange)
|
||
{
|
||
ui->retranslateUi(this); // переведём окно заново
|
||
}
|
||
}
|