#include #include #include #include #include #include #include "messangerwidget.h" #include "ui_messangerwidget.h" MessangerWidget::MessangerWidget(QWidget *parent) : QWidget(parent), ui(new Ui::MessangerWidget), tabDialogMessenger(nullptr), selectedUserLogin(""), selectedUserId("") { ui->setupUi(this); ui->tabWidget->removeTab(1); ui->tabWidget->removeTab(0); ui->btnSend->setObjectName("btnSend"); ui->btnSend->setEnabled(false); ui->editMsg->setEnabled(false); } MessangerWidget::~MessangerWidget() { delete tabDialogMessenger; delete ui; } void MessangerWidget::addMsgFromClient(Trainee trainee, QString text) { //Пробуем добавить вкладку диалога с клиентом (если вдруг еще нет) //addTabDialogMessenger(trainee); //Ищем нужный диалог QString login = trainee.getLogin(); if(tabDialogMessenger->getUserLogin() == trainee.getLogin()) {//Есть такой //Добавляем в существующую вкладку ui->tabWidget->setCurrentIndex(getIndexTab(login)); tabDialogMessenger->addMsgWidgetRemote(text); //Делаем ее текущей //ui->tabWidget->setCurrentIndex(getIndexTab(login)); selectedUserLogin = login; selectedUserId = QString::number(trainee.getID()); return; } } void MessangerWidget::initialize(QString id) { currClientId = id; } void MessangerWidget::addTabDialogMessenger(Trainee trainee) { if(!tabDialogMessenger) {//Самая первая вкладка, делаем ее активной selectedUserLogin = trainee.getLogin(); selectedUserId = QString::number(trainee.getID()); ui->btnSend->setEnabled(true); ui->editMsg->setEnabled(true); //Диалога для этого клиента еще не существует //Помещаем новый диалог в список диалогов tabDialogMessenger = new TabDialogMessenger(trainee.getLogin(),QString::number(trainee.getID()), this); //Добавляем новую вкладку диалога int index = ui->tabWidget->addTab(tabDialogMessenger, tr("Trainee") + ": " + trainee.getName() + " (" + trainee.getLogin() + ")"); //Обновляем статус залогинивания updateLoggedIn(trainee.getLoggedIn()); } else { //Проверяем наличие диалога с этим клиентом if(tabDialogMessenger->getUserLogin() == trainee.getLogin()) {//Диалог для этого клиента уже существует //Обновляем статус залогинивания updateLoggedIn(trainee.getLoggedIn()); return; } } } int MessangerWidget::getIndexTab(QString login) { for(int index = 0; index < ui->tabWidget->count(); index++) { TabDialogMessenger* tabDialogMessenger = static_cast(ui->tabWidget->widget(index)); if(tabDialogMessenger->getUserLogin() == login) return index; } return -1; } void MessangerWidget::showSendedMessage(QString text) { //Ищем нужный диалог if(tabDialogMessenger->getUserLogin() == selectedUserLogin) { //Добавляем в существующую вкладку tabDialogMessenger->addMsgWidgetLocal(text); //Делаем ее активной ui->tabWidget->setCurrentIndex(getIndexTab(selectedUserLogin)); return; } } void MessangerWidget::setOneTrainee(Trainee trainee) { this->trainee = trainee; QList listTrainees; listTrainees.append(trainee); initMessangerWidget(listTrainees); } void MessangerWidget::on_btnSend_clicked() { QString text = ui->editMsg->toPlainText(); QString from = currClientId; QString to = selectedUserId; ClientMessage message = ClientMessage(from,to,text); emit signal_sendMessage(message); ui->editMsg->clear(); } void MessangerWidget::slot_LanguageChanged(QString language) { qtLanguageTranslator.load(QString("translationsMy/ServerLMS_") + language, "."); qApp->installTranslator(&qtLanguageTranslator); } void MessangerWidget::initMessangerWidget(QList listTrainees) { for(Trainee traineeUpdate: listTrainees) { if(trainee.getID() == traineeUpdate.getID()) { trainee = traineeUpdate; break; } } addTabDialogMessenger(trainee); } void MessangerWidget::showReceivedMessage(ClientMessage clientMessage) { if(QString::number(trainee.getID()) == clientMessage.fromId) addMsgFromClient(trainee, clientMessage.Text); } void MessangerWidget::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) { ui->btnSend->click(); } } void MessangerWidget::updateLoggedIn(bool loggedIn) { //Обновляем статус залогинивания if(loggedIn) ui->tabWidget->setTabIcon(0, QIcon(":/resources/icons/circleGreen.png")); else ui->tabWidget->setTabIcon(0, QIcon(":/resources/icons/circleGray.png")); } void MessangerWidget::changeEvent(QEvent *event) { // В случае получения события изменения языка приложения if (event->type() == QEvent::LanguageChange) { ui->retranslateUi(this); // переведём окно заново } }