Files
RRJServer/DB_IaT/InstructorsAndTrainees/messanger/messangerwidget.cpp
krivoshein 5e32b53f1b A
2024-12-20 16:20:55 +03:00

216 lines
6.1 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 <QAbstractScrollArea>
#include <QMessageBox>
#include <QLabel>
#include <QScrollBar>
#include "messangerwidget.h"
#include "ui_messangerwidget.h"
#include "msgwidget.h"
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());
dialogMsg.addMsgWidgetRemote(text);
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->setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn);
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());
dialogMsg.addMsgWidgetLocal(text);
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); // переведём окно заново
}
}
void TabDialogMessenger::addMsgWidgetLocal(QString text)
{
QListWidgetItem *listWidgetItem = new QListWidgetItem();
QString avatar = ":/icons/instructor.png";
MsgWidget *msgWidget = new MsgWidget(avatar, MsgWidget::AligneAvatar::Left,
listWidget->width() - listWidget->verticalScrollBar()->size().width());
listWidget->addItem(listWidgetItem);
listWidget->setItemWidget(listWidgetItem, msgWidget);
msgWidget->setText(text);
listWidgetItem->setSizeHint (QSize(10, msgWidget->height()));
listWidget->scrollToItem(listWidgetItem);
}
void TabDialogMessenger::addMsgWidgetRemote(QString text)
{
QListWidgetItem *listWidgetItem = new QListWidgetItem();
QString avatar = ":/icons/trainee.png";
MsgWidget *msgWidget = new MsgWidget(avatar, MsgWidget::AligneAvatar::Right,
listWidget->width() - listWidget->verticalScrollBar()->size().width());
listWidget->addItem(listWidgetItem);
listWidget->setItemWidget(listWidgetItem, msgWidget);
msgWidget->setText(text);
listWidgetItem->setSizeHint (QSize(10, msgWidget->height()));
listWidget->scrollToItem(listWidgetItem);
}