Files

176 lines
4.9 KiB
C++
Raw Permalink 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 <QKeyEvent>
#include <QAbstractScrollArea>
#include <QMessageBox>
#include <QLabel>
#include <QScrollBar>
#include "instructor.h"
#include "messangerwidget.h"
#include "ui_messangerwidget.h"
MessangerWidget::MessangerWidget(QWidget *parent) :
QWidget(parent),
oneDialogMessenger(nullptr),
ui(new Ui::MessangerWidget),
myTextEdit(nullptr)
{
ui->setupUi(this);
ui->btnSend->setObjectName("btnSend");
ui->lblUser->setObjectName("MessangerWidgetLblUser");
ui->lblAvatar->setObjectName("MessangerWidgetLblAvatar");
ui->lblLoggedIn->setObjectName("MessangerWidgetLblLoggedIn");
myTextEdit = new MyTextEdit();
connect(myTextEdit, &MyTextEdit::signal_pressEnter, this, &MessangerWidget::on_btnSend_clicked);
myTextEdit->setObjectName("editMsg");
myTextEdit->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
myTextEdit->setFixedHeight(65);
ui->horizontalLayout_EditMsg->addWidget(myTextEdit);
}
MessangerWidget::~MessangerWidget()
{
delete oneDialogMessenger;
delete ui;
}
void MessangerWidget::initUserRemote(User user)
{
userRemote = user;
addTabDialogMessenger(userRemote);
}
void MessangerWidget::reinitMessangerWidget(User user)
{
if(userRemote.getID() == user.getID())
{
userRemote = user;
//Обновляем заголовок
updateHeader(userRemote);
}
}
void MessangerWidget::initUserLocalGUI(User user)
{
userLocalGUI = user;
}
int MessangerWidget::getIDuserRemote()
{
return userRemote.getID();
}
void MessangerWidget::showSendedMessage(ClientMessage clientMessage)
{
if(userLocalGUI.getID() == clientMessage.fromId.toInt())
oneDialogMessenger->addMsgWidgetLocal(clientMessage.Text, clientMessage.timeStr, userLocalGUI.getName());
}
void MessangerWidget::showReceivedMessage(ClientMessage clientMessage)
{
if(userRemote.getID() == clientMessage.fromId.toInt())
oneDialogMessenger->addMsgWidgetRemote(clientMessage.Text, clientMessage.timeStr, userRemote.getName());
}
void MessangerWidget::addTabDialogMessenger(User user)
{
if(!oneDialogMessenger)
{//Диалога еще не существует
oneDialogMessenger = new OneDialogMessenger(userLocalGUI, userRemote, this);
oneDialogMessenger->setVerticalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);
ui->verticalLayout_ListMsg->addWidget(oneDialogMessenger);
//Обновляем заголовок
updateHeader(user);
}
else
{//Диалог уже существует
//Проверяем наличие диалога именно с этим клиентом
if(oneDialogMessenger->getUserRemoteId() == user.getID())
{
//Обновляем заголовок
updateHeader(user);
}
}
}
void MessangerWidget::updateHeader(User user)
{
//Обновляем статус залогинивания
if(user.getLoggedIn())
ui->lblLoggedIn->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGreen.png")));
else
ui->lblLoggedIn->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png")));
QString typeUserStr = "";
if(user.getTypeUserDB() == User::TypeUserDBTrainee)
{
ui->lblAvatar->setPixmap(QPixmap(QStringLiteral(":/resources/icons/trainee.png")));
typeUserStr = tr("Trainee");
}
else
{
if(static_cast<Instructor*>(&user)->getIsAdmin())
ui->lblAvatar->setPixmap(QPixmap(QStringLiteral(":/resources/icons/admin.png")));
else
ui->lblAvatar->setPixmap(QPixmap(QStringLiteral(":/resources/icons/instructor.png")));
typeUserStr = tr("Instructor");
}
QString fullName = typeUserStr + ": " + user.getName() + " (" + user.getLogin() + ")";
ui->lblUser->setText(fullName);
}
void MessangerWidget::on_btnSend_clicked()
{
QString text = myTextEdit->toPlainText();
QString from = QString::number(userLocalGUI.getID());
QString to = QString::number(userRemote.getID());
ClientMessage message = ClientMessage(from, to, text);
emit signal_sendMessage(message);
myTextEdit->clear();
}
void MessangerWidget::changeEvent(QEvent *event)
{
// В случае получения события изменения языка приложения
if (event->type() == QEvent::LanguageChange)
{
ui->retranslateUi(this); // переведём окно заново
}
}
void MyTextEdit::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)
{
if(QApplication::keyboardModifiers().testFlag(Qt::ControlModifier))
{
this->insertPlainText("\n");
}
else
{
emit signal_pressEnter();
return;
}
}
QTextEdit::keyPressEvent(event);
}