#include #include #include #include #include #include #include "messangerwidget.h" #include "ui_messangerwidget.h" MessangerWidget::MessangerWidget(QWidget *parent) : QWidget(parent), ui(new Ui::MessangerWidget), currLogin("") { ui->setupUi(this); ui->tabWidget->removeTab(1); ui->tabWidget->removeTab(0); ui->btnSend->setObjectName("btnSend"); } MessangerWidget::~MessangerWidget() { delete ui; } void MessangerWidget::addMsgFromClient(Trainee trainee, QString text) { //Пробуем добавить вкладку диалога с клиентом (если вдруг еще нет) addTabDialogMessenger(trainee); //Ищем нужный диалог QString login = trainee.getLogin(); foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger) {//Есть такой if(tabDialog->getLogin() == login) { //Добавляем в существующую вкладку ui->tabWidget->setCurrentIndex(getIndexTab(login)); tabDialog->addMsgWidgetRemote(text); //Делаем ее текущей ui->tabWidget->setCurrentIndex(getIndexTab(login)); currLogin = login; 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()) {//Диалог для этого клиента уже существует //Обновляем статус залогинивания if(trainee.getLoggedIn()) ui->tabWidget->setTabIcon(getIndexTab(trainee.getLogin()), QIcon(":/resources/icons/circleGreen.png")); else ui->tabWidget->setTabIcon(getIndexTab(trainee.getLogin()), QIcon(":/resources/icons/circleGray.png")); return; } } //Диалога для этого клиента еще не существует //Помещаем новый диалог в список диалогов TabDialogMessenger* tabDialog = new TabDialogMessenger(0 /*TODO доделать передачу реального ID*/, trainee.getLogin(), this); listTabDialogMessenger.append(tabDialog); //Добавляем новую вкладку диалога int index = ui->tabWidget->addTab(tabDialog, /*login + ": " +*/ trainee.getName()); //Обновляем статус залогинивания if(trainee.getLoggedIn()) ui->tabWidget->setTabIcon(index, QIcon(":/resources/icons/circleGreen.png")); else ui->tabWidget->setTabIcon(index, QIcon(":/resources/icons/circleGray.png")); } void MessangerWidget::actualizationTabsDialogMessenger() { foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger) { QString login = tabDialog->getLogin(); bool exist = false; for(Trainee trainee : listTrainees) { if(trainee.getLogin() == login) { if(trainee.getArchived()) {//Стал архивным //Удаляем диалог с клиентом ui->tabWidget->removeTab(getIndexTab(login)); listTabDialogMessenger.removeOne(tabDialog); } else exist = true; break; } } if(!exist) {//Нет такого логина //Удаляем диалог с клиентом ui->tabWidget->removeTab(getIndexTab(login)); listTabDialogMessenger.removeOne(tabDialog); } } } int MessangerWidget::getIndexTab(QString login) { for(int index = 0; index < ui->tabWidget->count(); index++) { TabDialogMessenger* tabDialogMessenger = static_cast(ui->tabWidget->widget(index)); if(tabDialogMessenger->getLogin() == login) return index; } return -1; } void MessangerWidget::on_btnSend_clicked() { QString text = ui->editMsg->toPlainText(); emit signal_msgToClientReady(currLogin, text); ui->editMsg->clear(); //Ищем нужный диалог foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger) { if(tabDialog->getLogin() == currLogin) { //Добавляем в существующую вкладку tabDialog->addMsgWidgetLocal(text); //Делаем ее активной ui->tabWidget->setCurrentIndex(getIndexTab(currLogin)); return; } } } void MessangerWidget::on_tabWidget_currentChanged(int index) { //Ищем нужный диалог foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger) { if(getIndexTab(tabDialog->getLogin()) == index) { currLogin = tabDialog->getLogin(); emit signal_tabMessengerChanged(currLogin); return; } } } void MessangerWidget::slot_traineeSelected(QString login) { //Ищем нужный диалог foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger) { if(tabDialog->getLogin() == login) { //Активируем нужную вкладку ui->tabWidget->setCurrentIndex(getIndexTab(login)); return; } } } void MessangerWidget::slot_LanguageChanged(QString language) { qtLanguageTranslator.load(QString("translationsMy/ServerLMS_") + language, "."); qApp->installTranslator(&qtLanguageTranslator); } void MessangerWidget::slot_InitMessanger(QList listTrainees) { this->listTrainees = listTrainees; actualizationTabsDialogMessenger(); for(Trainee trainee: listTrainees) { if(! trainee.getArchived()) addTabDialogMessenger(trainee); } } void MessangerWidget::slot_msgFromClientReady(QString login, QString text) { for(Trainee trainee: listTrainees) { if(trainee.getLogin() == login) addMsgFromClient(trainee, text); } } 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); // переведём окно заново } }