Files
RRJServer/DB_IaT/InstructorsAndTrainees/messanger/messangerwidget.cpp

168 lines
4.7 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"
MessangerWidget::MessangerWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MessangerWidget)
{
ui->setupUi(this);
ui->tabWidget->removeTab(1);
ui->tabWidget->removeTab(0);
ui->tabWidget->setStyleSheet("QTabBar::tab:selected "
"{background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6ea1f1, stop: 1 #567dbc);"
"color: #ffffff;}");
}
MessangerWidget::~MessangerWidget()
{
delete ui;
}
void MessangerWidget::addMsg(QString login, QString name, QString text, MessangerWidget::ETypeMsg typeMsg)
{
addDialogTab(login, name);
QString prefix = (typeMsg == MessangerWidget::ETypeMsg::fromClient)? ">> " : "<< ";
//Ищем нужный диалог
foreach(DialogMsg dialogMsg, listDialogMsg)
{
if(dialogMsg.getLogin() == login)
{
//Добавляем в существующую вкладку
ui->tabWidget->setCurrentIndex(dialogMsg.getIndexTab());
QListWidgetItem* item = new QListWidgetItem(QIcon(":/icons/trainee.png"), prefix + text);
item->setBackground(QBrush(QColor(200, 200, 255)));
dialogMsg.getListWidget()->addItem(item);
currLogin = login;
return;
}
}
}
void MessangerWidget::addDialogTab(QString login, QString name)
{
if(listDialogMsg.count() == 0)
{
currLogin = login;
emit signal_tabMessengerChanged(currLogin);
}
//Проверяем наличие диалога с этим клиентом
foreach(DialogMsg dialogMsg, listDialogMsg)
{
if(dialogMsg.getLogin() == login)
{//Диалог для этого клиента уже существует
return;
}
}
//Добавляем новую вкладку диалога
QListWidget* listWidget = new QListWidget();
int index = ui->tabWidget->addTab(listWidget, /*login + ": " +*/ name);
//Помещаем новый диалог в список диалогов
DialogMsg dialogMsg(index, listWidget, login);
listDialogMsg.append(dialogMsg);
}
void MessangerWidget::on_btnSend_clicked()
{
QString text = ui->editMsg->text();
emit signal_msgToClientReady(currLogin, text);
ui->editMsg->clear();
QString prefix = "<< ";
//Ищем нужный диалог
foreach(DialogMsg dialogMsg, listDialogMsg)
{
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(DialogMsg dialogMsg, listDialogMsg)
{
if(dialogMsg.getIndexTab() == index)
{
currLogin = dialogMsg.getLogin();
emit signal_tabMessengerChanged(currLogin);
return;
}
}
}
void MessangerWidget::slot_traineeSelected(QString login)
{
//Ищем нужный диалог
foreach(DialogMsg dialogMsg, listDialogMsg)
{
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)
{
for(Trainee trainee: listTrainees)
{
if(! trainee.getArchived())
this->addDialogTab(trainee.getLogin(), trainee.getName());
}
}
void MessangerWidget::slot_msgFromClientReady(QString login, QString text)
{
addMsg(login, "name", 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); // переведём окно заново
}
}