#include #include #include #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 listTrainees) { for(Trainee trainee: listTrainees) { if(! trainee.getArchived()) this->addDialogTab(trainee.getLogin(), trainee.getName()); } } 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); // переведём окно заново } }