Files
RRJServer/InstructorsAndTrainees/messanger/messangerwidget.cpp

315 lines
9.2 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 <QAbstractScrollArea>
#include <QMessageBox>
#include <QLabel>
#include "messangerwidget.h"
#include "ui_messangerwidget.h"
MessangerWidget::MessangerWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MessangerWidget),
selectedUserLogin(""),
selectedUserId(""),
flOneTrainee(false)
{
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 ui;
}
void MessangerWidget::addMsgFromClient(Trainee trainee, QString text)
{
//Пробуем добавить вкладку диалога с клиентом (если вдруг еще нет)
addTabDialogMessenger(trainee);
//Ищем нужный диалог
QString login = trainee.getLogin();
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
{//Есть такой
if(tabDialog->getUserLogin() == trainee.getLogin())
{
//Добавляем в существующую вкладку
ui->tabWidget->setCurrentIndex(getIndexTab(login));
tabDialog->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(listTabDialogMessenger.count() == 0)
{//Самая первая вкладка, делаем ее активной
selectedUserLogin = trainee.getLogin();
selectedUserId = QString::number(trainee.getID());
emit signal_tabMessengerChanged(selectedUserLogin);
ui->btnSend->setEnabled(true);
ui->editMsg->setEnabled(true);
}
//Проверяем наличие диалога с этим клиентом
foreach(TabDialogMessenger* dialogMsg, listTabDialogMessenger)
{
if(dialogMsg->getUserLogin() == 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(trainee.getLogin(),QString::number(trainee.getID()), 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->getUserLogin();
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<TabDialogMessenger*>(ui->tabWidget->widget(index));
if(tabDialogMessenger->getUserLogin() == login)
return index;
}
return -1;
}
void MessangerWidget::clear()
{
ui->btnSend->setEnabled(false);
ui->editMsg->setEnabled(false);
listTrainees.clear();
actualizationTabsDialogMessenger();
}
void MessangerWidget::showSendedMessage(QString text)
{
//Ищем нужный диалог
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
{
if(tabDialog->getUserLogin() == selectedUserLogin)
{
//Добавляем в существующую вкладку
tabDialog->addMsgWidgetLocal(text);
//Делаем ее активной
ui->tabWidget->setCurrentIndex(getIndexTab(selectedUserLogin));
return;
}
}
}
void MessangerWidget::setOneTrainee(Trainee trainee)
{
flOneTrainee = true;
listTrainees.clear();
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();
/*
//Ищем нужный диалог
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
{
if(tabDialog->getUserLogin() == selectedUserLogin)
{
//Добавляем в существующую вкладку
tabDialog->addMsgWidgetLocal(text);
//Делаем ее активной
ui->tabWidget->setCurrentIndex(getIndexTab(selectedUserLogin));
return;
}
}*/
}
void MessangerWidget::on_tabWidget_currentChanged(int index)
{
//Ищем нужный диалог
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
{
if(getIndexTab(tabDialog->getUserLogin()) == index)
{
selectedUserLogin = tabDialog->getUserLogin();
selectedUserId = tabDialog->getUserId();
emit signal_tabMessengerChanged(selectedUserLogin);
return;
}
}
}
void MessangerWidget::traineeSelected(QString login)
{
//Ищем нужный диалог
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
{
if(tabDialog->getUserLogin() == login)
{
//Активируем нужную вкладку
ui->tabWidget->setCurrentIndex(getIndexTab(login));
ui->btnSend->setEnabled(true);
ui->editMsg->setEnabled(true);
return;
}
}
ui->btnSend->setEnabled(false);
ui->editMsg->setEnabled(false);
}
void MessangerWidget::getTabDialogMessengerByID(QString id_user)
{
//Ищем нужный диалог
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
{
if(tabDialog->getUserId() == id_user)
{
}
}
}
void MessangerWidget::slot_LanguageChanged(QString language)
{
qtLanguageTranslator.load(QString("translationsMy/ServerLMS_") + language, ".");
qApp->installTranslator(&qtLanguageTranslator);
}
void MessangerWidget::initMessangerWidget(QList<Trainee> listTrainees)
{
if(flOneTrainee)
{
Trainee traineeOne = this->listTrainees.first();
for(Trainee trainee: listTrainees)
{
if(traineeOne.getID() == trainee.getID())
{
this->listTrainees.replace(0, trainee);
break;
}
}
}
else
{
this->listTrainees = listTrainees;
}
actualizationTabsDialogMessenger();
for(Trainee trainee: this->listTrainees)
{
if(! trainee.getArchived())
addTabDialogMessenger(trainee);
}
}
void MessangerWidget::showReceivedMessage(ClientMessage clientMessage)
{
for(Trainee trainee: listTrainees)
{
if(QString::number(trainee.getID()) == clientMessage.fromId)
{
addMsgFromClient(trainee, clientMessage.Text);
break;
}
}
}
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); // переведём окно заново
}
}