Files
RRJServer/DB_IaT/InstructorsAndTrainees/messanger/messangerwidget.cpp
2024-12-19 12:40:52 +03:00

185 lines
5.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include <QListWidget>
#include <QBrush>
#include <QKeyEvent>
#include "messangerwidget.h"
#include "ui_messangerwidget.h"
#include <QAbstractScrollArea>
#include <QMessageBox>
MessangerWidget::MessangerWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MessangerWidget)
{
ui->setupUi(this);
ui->tabWidget->removeTab(1);
ui->tabWidget->removeTab(0);
ui->btnSend->setObjectName("btnSend");
}
MessangerWidget::~MessangerWidget()
{
delete ui;
}
void MessangerWidget::addMsg(Trainee trainee, QString text, MessangerWidget::ETypeMsg typeMsg)
{
addTabDialogMessenger(trainee);
QString prefix = (typeMsg == MessangerWidget::ETypeMsg::fromClient)? ">> " : "<< ";
//Ищем нужный диалог
foreach(TabDialogMessenger dialogMsg, listTabDialogMessenger)
{
if(dialogMsg.getLogin() == trainee.getLogin())
{
//Добавляем в существующую вкладку
ui->tabWidget->setCurrentIndex(dialogMsg.getIndexTab());
QListWidgetItem* item = new QListWidgetItem(QIcon(":/icons/trainee.png"), prefix + text);
//item->setTextAlignment(Qt::AlignBaseline);
//QString style = QStringLiteral("QListView::item { color: red; }");
//dialogMsg.getListWidget()->setStyleSheet(style);
//item->setBackground(QBrush(QColor(200, 200, 255)));
dialogMsg.getListWidget()->addItem(item);
currLogin = trainee.getLogin();
return;
}
}
}
void MessangerWidget::addTabDialogMessenger(Trainee trainee)
{
if(listTabDialogMessenger.count() == 0)
{
currLogin = trainee.getLogin();
emit signal_tabMessengerChanged(currLogin);
}
//Проверяем наличие диалога с этим клиентом
foreach(TabDialogMessenger dialogMsg, listTabDialogMessenger)
{
if(dialogMsg.getLogin() == trainee.getLogin())
{//Диалог для этого клиента уже существует
return;
}
}
//Добавляем новую вкладку диалога
QListWidget* listWidget = new QListWidget();
listWidget->setWordWrap(true);
//listWidget->setItemAlignment(Qt::AlignmentFlag::AlignTop);
int index = ui->tabWidget->addTab(listWidget, /*login + ": " +*/ trainee.getName());
if(trainee.getLoggedIn())
ui->tabWidget->setTabIcon(index, QIcon(":/icons/circleGreen.png"));
else
ui->tabWidget->setTabIcon(index, QIcon(":/icons/circleGray.png"));
//Помещаем новый диалог в список диалогов
TabDialogMessenger dialogMsg(index, listWidget, trainee.getLogin());
listTabDialogMessenger.append(dialogMsg);
}
void MessangerWidget::on_btnSend_clicked()
{
QString text = ui->editMsg->toPlainText();
emit signal_msgToClientReady(currLogin, text);
ui->editMsg->clear();
QString prefix = "<< ";
//Ищем нужный диалог
foreach(TabDialogMessenger dialogMsg, listTabDialogMessenger)
{
if(dialogMsg.getLogin() == currLogin)
{
//Добавляем в существующую вкладку
ui->tabWidget->setCurrentIndex(dialogMsg.getIndexTab());
QListWidgetItem* item = new QListWidgetItem(QIcon(":/icons/instructor.png"), prefix + text);
//item->setBackground(QBrush(QColor(200, 255, 200)));
dialogMsg.getListWidget()->addItem(item);
return;
}
}
}
void MessangerWidget::on_tabWidget_currentChanged(int index)
{
//Ищем нужный диалог
foreach(TabDialogMessenger dialogMsg, listTabDialogMessenger)
{
if(dialogMsg.getIndexTab() == index)
{
currLogin = dialogMsg.getLogin();
emit signal_tabMessengerChanged(currLogin);
return;
}
}
}
void MessangerWidget::slot_traineeSelected(QString login)
{
//Ищем нужный диалог
foreach(TabDialogMessenger dialogMsg, listTabDialogMessenger)
{
if(dialogMsg.getLogin() == login)
{
//Активируем нужную вкладку
ui->tabWidget->setCurrentIndex(dialogMsg.getIndexTab());
return;
}
}
}
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;
for(Trainee trainee: listTrainees)
{
if(! trainee.getArchived())
this->addTabDialogMessenger(trainee);
}
}
void MessangerWidget::slot_msgFromClientReady(QString login, QString text)
{
for(Trainee trainee: listTrainees)
{
if(trainee.getLogin() == login)
addMsg(trainee, text, MessangerWidget::ETypeMsg::fromClient);
}
}
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); // переведём окно заново
}
}