mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-28 19:55:48 +03:00
220 lines
6.4 KiB
C++
220 lines
6.4 KiB
C++
#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");
|
||
|
||
/*
|
||
ui->tabWidget->setStyleSheet("QTabBar::tab:selected "
|
||
"{background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6ea1f1, stop: 1 #567dbc);"
|
||
"color: #ffffff;}");*/
|
||
|
||
//updateMyStyleSheet();
|
||
}
|
||
|
||
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::updateMyStyleSheet()
|
||
{
|
||
QString styleSheet = loadStyleSheet();
|
||
styleSheet = styleSheet.replace("\n", "");
|
||
|
||
foreach(TabDialogMessenger dialogMsg, listTabDialogMessenger)
|
||
dialogMsg.getListWidget()->setStyleSheet(styleSheet);
|
||
}
|
||
|
||
QString MessangerWidget::loadStyleSheet()
|
||
{
|
||
QString fileName = "./styleSheetListWidget.css";
|
||
QFile styleSheetFile(fileName);
|
||
if (!styleSheetFile.open(QFile::ReadOnly | QFile::Text))
|
||
{
|
||
QMessageBox::critical(this, tr("Attention!"), tr("The file could not be opened ") + fileName);
|
||
return QStringLiteral("");
|
||
}
|
||
else
|
||
{
|
||
QByteArray byteArray = styleSheetFile.readAll();
|
||
styleSheetFile.close();
|
||
|
||
QString style = byteArray;
|
||
return style;
|
||
}
|
||
}
|
||
|
||
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); // переведём окно заново
|
||
}
|
||
}
|
||
|