MessangerWidget переехал в InstrucorsAndTraineesWidget

This commit is contained in:
krivoshein
2024-12-04 10:25:33 +03:00
parent a310c687e6
commit 56eff211ce
65 changed files with 915 additions and 826 deletions

View File

@@ -82,6 +82,9 @@ add_library(InstructorsAndTrainees SHARED
connectorToServer/Core/tools.h
connectorToServer/Core/FileData.h
connectorToServer/Datas.h
messanger/messangerwidget.cpp
messanger/messangerwidget.h
messanger/messangerwidget.ui
resources.qrc
)
@@ -91,6 +94,8 @@ target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_
target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/docTasks)
target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/connectorToServer)
target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/connectorToServer/Core)
target_include_directories(InstructorsAndTrainees PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/messanger)
target_link_libraries(InstructorsAndTrainees PRIVATE Qt5::Widgets)
target_link_libraries(InstructorsAndTrainees PRIVATE Qt5::Sql)

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.11.1, 2024-12-04T09:32:44. -->
<!-- Written by QtCreator 4.11.1, 2024-12-04T10:19:38. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>

View File

@@ -26,6 +26,8 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
viewerTrainees = new ViewerTrainees(dbLMS);
viewerInstructors = new ViewerInstructors(dbLMS);
messangerWidget = new MessangerWidget(this);
connect(this, &InstructorsAndTraineesWidget::signal_NeedUpdateUI, viewerTrainees, &ViewerTrainees::slot_NeedUpdateUI);
connect(this, &InstructorsAndTraineesWidget::signal_NeedUpdateUI, viewerInstructors, &ViewerInstructors::slot_NeedUpdateUI);
@@ -37,6 +39,7 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
ui->verticalLayout->addWidget(viewerTrainees);
ui->verticalLayout->addWidget(viewerInstructors);
ui->verticalLayout->addWidget(messangerWidget);
viewerTrainees->setMinimumSize(1600, 600);
viewerInstructors->setMinimumSize(1600, 300);

View File

@@ -6,6 +6,7 @@
#include "instructorsAndTrainees_global.h"
#include "viewertrainees.h"
#include "viewerinstructors.h"
#include "messangerwidget.h"
#include "doctaskswidget.h"
#include "interfacedatabaselms.h"
#include "connectortoserver.h"
@@ -87,6 +88,7 @@ private:
ViewerTrainees* viewerTrainees;
ViewerInstructors* viewerInstructors;
MessangerWidget* messangerWidget;
DocTasksWidget* docTasksWidget;
bool adminMode;

View File

@@ -0,0 +1,162 @@
#include <QListWidget>
#include <QBrush>
#include <QKeyEvent>
#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<Trainee> 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); // переведём окно заново
}
}

View File

@@ -0,0 +1,82 @@
#ifndef MESSANGERWIDGET_H
#define MESSANGERWIDGET_H
#include <QWidget>
#include <QListWidget>
#include <QTranslator>
#include <trainee.h>
class DialogMsg
{
public:
DialogMsg();
DialogMsg(int indexTab, QListWidget* listWidget, QString login)
{
this->indexTab = indexTab;
this->listWidget = listWidget;
this->login = login;
};
QString getLogin() {return login;};
QListWidget* getListWidget() {return listWidget;};
int getIndexTab() {return indexTab;};
private:
QString login = "";
int indexTab = 0;
QListWidget* listWidget = nullptr;
};
namespace Ui {
class MessangerWidget;
}
class MessangerWidget : public QWidget
{
Q_OBJECT
public:
explicit MessangerWidget(QWidget *parent = nullptr);
~MessangerWidget();
protected:
// Метод получения событий
// В нём будет производиться проверка события смены перевода приложения
void changeEvent(QEvent * event) override;
public:
enum ETypeMsg{fromClient, toClient};
void addMsg(QString login, QString name, QString text, ETypeMsg typeMsg);
void addDialogTab(QString login, QString name);
private slots:
void on_btnSend_clicked();
void on_tabWidget_currentChanged(int index);
signals:
//сигнал о готовности нового сообщения на отправку клиенту
void signal_msgToClientReady(QString login, QString text);
//сигнал об изменении вкладки диалога
void signal_tabMessengerChanged(QString login);
public slots:
//слот обработки сигнала о выборе обучаемого
void slot_traineeSelected(QString login);
void slot_LanguageChanged(QString language);
//слот обработки сигнала об инициализации мессенджера
void slot_InitMessanger(QList<Trainee> listTrainees);
private:
virtual void keyPressEvent(QKeyEvent *event) override;
private:
QList <DialogMsg> listDialogMsg;
QString currLogin = "";
Ui::MessangerWidget *ui;
QTranslator qtLanguageTranslator;
};
#endif // MESSANGERWIDGET_H

View File

@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MessangerWidget</class>
<widget class="QWidget" name="MessangerWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>500</width>
<height>300</height>
</rect>
</property>
<property name="font">
<font>
<family>Tahoma</family>
<pointsize>10</pointsize>
</font>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Messenger</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>1</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>Tab 1</string>
</attribute>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>Tab 2</string>
</attribute>
</widget>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="editMsg"/>
</item>
<item>
<widget class="QToolButton" name="btnSend">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Send</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>