Контроллер мессенджера доработанный

This commit is contained in:
2025-09-04 16:48:48 +03:00
parent 7a909d1ee5
commit adfd058fa1
15 changed files with 250 additions and 143 deletions

View File

@@ -18,7 +18,7 @@ MainWindow::MainWindow(QWidget *parent)
ui->horizontalLayout->addWidget(m_instructorsAndTraineesWidget); ui->horizontalLayout->addWidget(m_instructorsAndTraineesWidget);
this->move(100, 100); this->move(0, 0);
this->showNormal(); this->showNormal();
//this->showMaximized(); //this->showMaximized();

View File

@@ -3,6 +3,8 @@ project(InstructorsAndTrainees LANGUAGES CXX)
common_info_for_project(InstructorsAndTrainees) common_info_for_project(InstructorsAndTrainees)
add_library(InstructorsAndTrainees SHARED add_library(InstructorsAndTrainees SHARED
metatypes.h
metatypes.cpp
instructorsAndTrainees_global.h instructorsAndTrainees_global.h
instructorsandtraineeswidget.cpp instructorsandtraineeswidget.cpp
instructorsandtraineeswidget.h instructorsandtraineeswidget.h

View File

@@ -62,7 +62,7 @@ enum PacketType{
FREE = 155 FREE = 155
}; };
Q_DECLARE_METATYPE(PacketType) //Q_DECLARE_METATYPE(PacketType)
class Tools { class Tools {
public: public:

View File

@@ -7,7 +7,6 @@
InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
QWidget(parent), QWidget(parent),
ui(new Ui::InstructorsAndTraineesWidget),
connectorToServer(nullptr), connectorToServer(nullptr),
viewerTrainees(nullptr), viewerTrainees(nullptr),
viewerInstructors(nullptr), viewerInstructors(nullptr),
@@ -16,29 +15,20 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
adminMode(false), adminMode(false),
loginInstructorLoggedInLocal(QStringLiteral("")), loginInstructorLoggedInLocal(QStringLiteral("")),
nameInstructorLoggedInLocal(QStringLiteral("")), nameInstructorLoggedInLocal(QStringLiteral("")),
language("ENG") language("ENG"),
ui(new Ui::InstructorsAndTraineesWidget)
{ {
ui->setupUi(this); ui->setupUi(this);
ui->btnSettings->setObjectName("btnSettings"); ui->btnSettings->setObjectName("btnSettings");
ui->widget_Top->setObjectName("widgetTop"); ui->widget_Top->setObjectName("widgetTop");
ui->groupBox_Trainees->setObjectName("groupBox_Trainees"); ui->groupBox_Trainees->setObjectName("groupBox_Trainees");
#ifndef PROJECT_TYPE_DEBUG #ifndef PROJECT_TYPE_DEBUG
//ui->btnUpdateStyleSheet->setVisible(false); //ui->btnUpdateStyleSheet->setVisible(false);
#endif #endif
qRegisterMetaType<PacketType>("PacketType"); registerMetaType();
qRegisterMetaType<QList<Instructor>>("QList<Instructor>");
qRegisterMetaType<QList<Trainee>>("QList<Trainee>");
qRegisterMetaType<QList<Group>>("QList<Group>");
qRegisterMetaType<QList<Computer>>("QList<Computer>");
qRegisterMetaType<QList<Classroom>>("QList<Classroom>");
qRegisterMetaType<QList<Module*>>("QList<Module*>");
qRegisterMetaType<QList<QTreeWidgetItem*>>("QList<QTreeWidgetItem*>");
qRegisterMetaType<QList<TaskAmmFim>>("QList<TaskAmmFim>");
qRegisterMetaType<ClientMessage>("ClientMessage");
qDebug() << "InstructorsAndTraineesWidget init thread ID " << QThread::currentThreadId(); qDebug() << "InstructorsAndTraineesWidget init thread ID " << QThread::currentThreadId();
@@ -47,8 +37,8 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
setLanguageInterfase(); setLanguageInterfase();
connectorToServer = new ConnectorToServer(this); connectorToServer = new ConnectorToServer(this);
connect(connectorToServer,&ConnectorToServer::sigLoginResult,this,&InstructorsAndTraineesWidget::checkLoginResult); connect(connectorToServer,&ConnectorToServer::sigLoginResult,this,&InstructorsAndTraineesWidget::slot_checkLoginResult);
connect(connectorToServer,&ConnectorToServer::sigDeLoginResult,this,&InstructorsAndTraineesWidget::checkDeLoginResult); connect(connectorToServer,&ConnectorToServer::sigDeLoginResult,this,&InstructorsAndTraineesWidget::slot_checkDeLoginResult);
messangerController = new MessangerController(connectorToServer, this); messangerController = new MessangerController(connectorToServer, this);
@@ -61,7 +51,7 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
connect(connectorToServer,&ConnectorToServer::signal_ConnectedToServer,this,&InstructorsAndTraineesWidget::slot_ConnectedToServer); connect(connectorToServer,&ConnectorToServer::signal_ConnectedToServer,this,&InstructorsAndTraineesWidget::slot_ConnectedToServer);
connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, messangerController, &MessangerController::signal_traineeSelected); connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, messangerController, &MessangerController::slot_traineeSelected);
connect(messangerController, &MessangerController::signal_tabMessengerChanged, viewerTrainees, &ViewerTrainees::slot_tabMessengerChanged); connect(messangerController, &MessangerController::signal_tabMessengerChanged, viewerTrainees, &ViewerTrainees::slot_tabMessengerChanged);
messangerWidget = messangerController->newWidget(this); messangerWidget = messangerController->newWidget(this);
@@ -69,31 +59,27 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
//Размещение //Размещение
ui->verticalLayout_Trainees->addWidget(viewerTrainees); ui->verticalLayout_Trainees->addWidget(viewerTrainees);
ui->verticalLayout_Messenger->addWidget(messangerWidget);
ui->verticalLayout_Instructors->addWidget(viewerInstructors); ui->verticalLayout_Instructors->addWidget(viewerInstructors);
ui->verticalLayout_Messenger->addWidget(messangerWidget);
ui->groupBox_Messenger->setMinimumHeight(500); ui->groupBox_Messenger->setMinimumHeight(500);
ui->groupBox_Messenger->setMaximumWidth(600); ui->groupBox_Messenger->setMaximumWidth(500);
ui->groupBox_Messenger->setMinimumWidth(600); ui->groupBox_Messenger->setMinimumWidth(500);
ui->groupBox_Instructors->setMinimumHeight(400); ui->groupBox_Instructors->setMinimumHeight(300);
ui->groupBox_Instructors->setMaximumHeight(400); ui->groupBox_Instructors->setMaximumHeight(300);
ui->groupBox_Trainees->setMinimumHeight(500); ui->groupBox_Trainees->setMinimumHeight(400);
ui->groupBox_Trainees->setMinimumWidth(700); ui->groupBox_Trainees->setMinimumWidth(800);
ui->groupBox_Instructors->setMinimumWidth(700); ui->groupBox_Instructors->setMinimumWidth(800);
//Доступность кнопок
ui->btnAuthorizationInstructor->setEnabled(false); ui->btnAuthorizationInstructor->setEnabled(false);
ui->btnEditorTrainees->setEnabled(false); ui->btnEditorTrainees->setEnabled(false);
ui->btnEditorInstructors->setEnabled(false); ui->btnEditorInstructors->setEnabled(false);
ui->btnSetVersion->hide(); ui->btnSetVersion->hide();
} }
@@ -136,7 +122,6 @@ QString InstructorsAndTraineesWidget::getLanguage()
QString InstructorsAndTraineesWidget::loadStyleSheet() QString InstructorsAndTraineesWidget::loadStyleSheet()
{ {
//QString fileName = ":/resources/css/styleSheetMain.css";
QString fileName = "./resources/css/styleSheetMain.css"; QString fileName = "./resources/css/styleSheetMain.css";
QFile styleSheetFile(fileName); QFile styleSheetFile(fileName);
if (!styleSheetFile.open(QFile::ReadOnly | QFile::Text)) if (!styleSheetFile.open(QFile::ReadOnly | QFile::Text))
@@ -167,7 +152,7 @@ void InstructorsAndTraineesWidget::slot_UpdateStyleSheet()
updateMyStyleSheet(); updateMyStyleSheet();
} }
void InstructorsAndTraineesWidget::checkLoginResult(ServerAuthorization *serverAuth) void InstructorsAndTraineesWidget::slot_checkLoginResult(ServerAuthorization *serverAuth)
{ {
if (serverAuth->Result) if (serverAuth->Result)
{ {
@@ -189,13 +174,11 @@ void InstructorsAndTraineesWidget::checkLoginResult(ServerAuthorization *serverA
if(adminMode) if(adminMode)
ui->btnEditorInstructors->setEnabled(true); ui->btnEditorInstructors->setEnabled(true);
Q_EMIT signal_NeedUpdateUI(true, true); emit signal_NeedUpdateUI(true, true);
//ui->btnSetVersion->show();
//ui->btnAuthorizationInstructor->setText(tr("Deauthorization Instructor"));
updateLabelLoggedInInstructor(serverAuth->Login, serverAuth->ClientName); updateLabelLoggedInInstructor(serverAuth->Login, serverAuth->ClientName);
connectorToServer->setLoginName(nameInstructorLoggedInLocal); connectorToServer->setLoginName(nameInstructorLoggedInLocal);
messangerController->initialize(serverAuth->Id); messangerController->setGUIclientId(serverAuth->Id);
connectorToServer->sendQueryTasksXML("fim"); connectorToServer->sendQueryTasksXML("fim");
connectorToServer->sendQueryTasksXML("amm"); connectorToServer->sendQueryTasksXML("amm");
@@ -208,7 +191,7 @@ void InstructorsAndTraineesWidget::checkLoginResult(ServerAuthorization *serverA
} }
} }
void InstructorsAndTraineesWidget::checkDeLoginResult(ServerDeAuthorization *serverDeAuth) void InstructorsAndTraineesWidget::slot_checkDeLoginResult(ServerDeAuthorization *serverDeAuth)
{ {
if (serverDeAuth->Result) if (serverDeAuth->Result)
{ {
@@ -224,11 +207,7 @@ void InstructorsAndTraineesWidget::checkDeLoginResult(ServerDeAuthorization *ser
ui->btnEditorTrainees->setEnabled(false); ui->btnEditorTrainees->setEnabled(false);
ui->btnEditorInstructors->setEnabled(false); ui->btnEditorInstructors->setEnabled(false);
//Q_EMIT signal_NeedUpdateUI(true, false);
//ui->btnAuthorizationInstructor->setText(tr("Authorization Instructor"));
updateLabelLoggedInInstructor("",""); updateLabelLoggedInInstructor("","");
//QMessageBox::information(this, tr("Instructor deauthorization"), tr("Successfully!")); //QMessageBox::information(this, tr("Instructor deauthorization"), tr("Successfully!"));
} }
else else
@@ -247,9 +226,6 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGreen.png"))); ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGreen.png")));
//ServerSettings serverSettings = connectorToServer->getServerSettings();
//ui->lblServer->setText(serverSettings.Address + ":" +serverSettings.Port);
updateLabelLoggedInInstructor(loginInstructorLoggedInLocal, nameInstructorLoggedInLocal); updateLabelLoggedInInstructor(loginInstructorLoggedInLocal, nameInstructorLoggedInLocal);
updateLabelServer(); updateLabelServer();
} }
@@ -257,11 +233,8 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
{//Сервер отключен {//Сервер отключен
ui->btnConnectionToServer->setEnabled(true); ui->btnConnectionToServer->setEnabled(true);
ui->btnAuthorizationInstructor->setEnabled(false); ui->btnAuthorizationInstructor->setEnabled(false);
//ui->btnAuthorizationInstructor->setText(tr("Authorization Instructor"));
ui->btnAuthorizationInstructor->setChecked(false); ui->btnAuthorizationInstructor->setChecked(false);
//ui->btnSetVersion->hide();
ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png"))); ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png")));
//ui->lblServer->setText(tr("none"));
viewerInstructors->setAuthComplited(false); viewerInstructors->setAuthComplited(false);
viewerTrainees->setAuthComplited(false); viewerTrainees->setAuthComplited(false);
@@ -272,10 +245,7 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
viewerTrainees->deactivate(); viewerTrainees->deactivate();
viewerInstructors->deactivate(); viewerInstructors->deactivate();
//ammTasksWidget->deactivate(); messangerController->clearAllWidgets();
//fimTasksWidget->deactivate();
messangerController->clear();
loginInstructorLoggedInLocal = ""; loginInstructorLoggedInLocal = "";
nameInstructorLoggedInLocal = ""; nameInstructorLoggedInLocal = "";
@@ -345,7 +315,7 @@ void InstructorsAndTraineesWidget::on_btnAuthorizationInstructor_clicked()
{ {
connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI); connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI);
connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI); connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI);
connect(connectorToServer,&ConnectorToServer::signal_InitMessanger,messangerController,&MessangerController::slot_InitMessanger); connect(connectorToServer,&ConnectorToServer::signal_InitMessanger,messangerController,&MessangerController::slot_initMessanger);
} }
else else
ui->btnAuthorizationInstructor->setChecked(false); ui->btnAuthorizationInstructor->setChecked(false);
@@ -358,15 +328,12 @@ void InstructorsAndTraineesWidget::on_btnAuthorizationInstructor_clicked()
{ {
disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI); disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI);
disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI); disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI);
disconnect(connectorToServer,&ConnectorToServer::signal_InitMessanger,messangerController,&MessangerController::slot_InitMessanger); disconnect(connectorToServer,&ConnectorToServer::signal_InitMessanger,messangerController,&MessangerController::slot_initMessanger);
viewerTrainees->deactivate(); viewerTrainees->deactivate();
viewerInstructors->deactivate(); viewerInstructors->deactivate();
//ammTasksWidget->deactivate(); messangerController->clearAllWidgets();
//fimTasksWidget->deactivate();
messangerController->clear();
} }
else else
ui->btnAuthorizationInstructor->setChecked(true); ui->btnAuthorizationInstructor->setChecked(true);

View File

@@ -8,19 +8,8 @@
#include "viewerinstructors.h" #include "viewerinstructors.h"
#include "messangerwidget.h" #include "messangerwidget.h"
#include "messangercontroller.h" #include "messangercontroller.h"
#include "ammtaskswidget.h"
#include "fimtaskswidget.h"
#include "connectortoserver.h" #include "connectortoserver.h"
#include "tasksAmmFim.h" #include "metatypes.h"
Q_DECLARE_METATYPE(QList<Instructor>)
Q_DECLARE_METATYPE(QList<Trainee>)
Q_DECLARE_METATYPE(QList<Group>)
Q_DECLARE_METATYPE(QList<Computer>)
Q_DECLARE_METATYPE(QList<Classroom>)
Q_DECLARE_METATYPE(QList<Module*>)
Q_DECLARE_METATYPE(QList<QTreeWidgetItem*>)
Q_DECLARE_METATYPE(QList<TaskAmmFim>)
namespace Ui { namespace Ui {
@@ -41,6 +30,7 @@ private:
public: public:
void updateMyStyleSheet(); void updateMyStyleSheet();
QString getLanguage(); QString getLanguage();
private: private:
QString loadStyleSheet(); QString loadStyleSheet();
@@ -52,14 +42,14 @@ public Q_SLOTS:
//Слот обработки результата авторизации //Слот обработки результата авторизации
void checkLoginResult(ServerAuthorization * serverAuth); void slot_checkLoginResult(ServerAuthorization * serverAuth);
//Слот обработки результата деавторизации //Слот обработки результата деавторизации
void checkDeLoginResult(ServerDeAuthorization * serverDeAuth); void slot_checkDeLoginResult(ServerDeAuthorization * serverDeAuth);
//Слот обработки результата подключения к серверу
void slot_ConnectedToServer(bool state); void slot_ConnectedToServer(bool state);
Q_SIGNALS: Q_SIGNALS:
//Слот смены языка //сигнал смены языка
void signal_LanguageChanged(QString language); void signal_LanguageChanged(QString language);
//сигнал о необходимости обновления интерфейса //сигнал о необходимости обновления интерфейса
void signal_NeedUpdateUI(bool treeInstructor, bool treeTrainee); void signal_NeedUpdateUI(bool treeInstructor, bool treeTrainee);
@@ -69,17 +59,13 @@ Q_SIGNALS:
private Q_SLOTS: private Q_SLOTS:
void on_btnConnectionToServer_clicked(); void on_btnConnectionToServer_clicked();
void on_btnAuthorizationInstructor_clicked(); void on_btnAuthorizationInstructor_clicked();
void on_btnSetVersion_clicked(); void on_btnSetVersion_clicked();
void on_btnSettings_clicked(); void on_btnSettings_clicked();
void on_btnEditorTrainees_clicked(); void on_btnEditorTrainees_clicked();
void on_btnEditorInstructors_clicked(); void on_btnEditorInstructors_clicked();
private: private:
//Авторизация инструктора локальная //Авторизация инструктора локальная (на ГУИ)
bool authorizationInstructorDialog(QWidget* parent = nullptr); bool authorizationInstructorDialog(QWidget* parent = nullptr);
bool deAuthorizationInstructor(QString login); bool deAuthorizationInstructor(QString login);
bool authorizationIsCompleted(); bool authorizationIsCompleted();
@@ -89,16 +75,12 @@ private:
void setLanguageInterfase(); void setLanguageInterfase();
private: private:
Ui::InstructorsAndTraineesWidget *ui;
ConnectorToServer* connectorToServer; ConnectorToServer* connectorToServer;
ViewerTrainees* viewerTrainees; ViewerTrainees* viewerTrainees;
ViewerInstructors* viewerInstructors; ViewerInstructors* viewerInstructors;
MessangerWidget* messangerWidget; MessangerWidget* messangerWidget;
MessangerController* messangerController; MessangerController* messangerController;
//AMMtasksWidget* ammTasksWidget;
//FIMtasksWidget* fimTasksWidget;
bool adminMode; bool adminMode;
QString loginInstructorLoggedInLocal; QString loginInstructorLoggedInLocal;
@@ -107,6 +89,8 @@ private:
QTranslator qtLanguageTranslator; QTranslator qtLanguageTranslator;
QString language; QString language;
Ui::InstructorsAndTraineesWidget *ui;
}; };
#endif // INSTRUCTORSANDTRAINEESWIDGET_H #endif // INSTRUCTORSANDTRAINEESWIDGET_H

View File

@@ -3,32 +3,49 @@
MessangerController::MessangerController(ConnectorToServer* connectorToServer, QObject *parent) : MessangerController::MessangerController(ConnectorToServer* connectorToServer, QObject *parent) :
QObject(parent), QObject(parent),
connectorToServer(connectorToServer), connectorToServer(connectorToServer),
currClientId("") GUIclientId("")
{ {
connect(connectorToServer, &ConnectorToServer::signal_receiveMessage, this, &MessangerController::slot_receiveMessage);
} }
MessangerController::~MessangerController() MessangerController::~MessangerController()
{ {
for(MessangerWidget* widget : listWidgets) for(MessangerWidget* widget : listWidgets)
{
delete widget; delete widget;
}
} }
MessangerWidget *MessangerController::newWidget(QWidget *parent) MessangerWidget *MessangerController::newWidget(QWidget *parent, Trainee* trainee, QVBoxLayout* boxLayout)
{ {
MessangerWidget *msgWdgt = new MessangerWidget(parent); MessangerWidget *msgWdgt = new MessangerWidget(parent);
if(boxLayout)
boxLayout->addWidget(msgWdgt);
connect(msgWdgt, &MessangerWidget::signal_sendMessage, this, &MessangerController::slot_sendMessage); connect(msgWdgt, &MessangerWidget::signal_sendMessage, this, &MessangerController::slot_sendMessage);
connect(connectorToServer,&ConnectorToServer::signal_receiveMessage,msgWdgt,&MessangerWidget::slot_showMessage); connect(msgWdgt, &MessangerWidget::signal_tabMessengerChanged, this, &MessangerController::slot_tabMessengerChanged);
connect(this, &MessangerController::signal_traineeSelected, msgWdgt, &MessangerWidget::slot_traineeSelected); msgWdgt->initialize(GUIclientId);
connect(msgWdgt, &MessangerWidget::signal_tabMessengerChanged, this, &MessangerController::signal_tabMessengerChanged);
//connect(this, &MessangerController::slot_InitMessanger, msgWdgt,&MessangerWidget::slot_InitMessanger); if(trainee)
{
msgWdgt->setOneTrainee(*trainee);
msgWdgt->initialize(currClientId); //Заполнение предыстории
int id_user = trainee->getID();
QList<MessageOfMessanger>* list = nullptr;
if(mapAlldialogsWithClients.contains(id_user))
{//Уже есть
list = mapAlldialogsWithClients.value(id_user);
for(MessageOfMessanger msg : *list)
{
if(msg.flLocal)
msgWdgt->showSendedMessage(msg.text);
else
msgWdgt->showReceivedMessage(ClientMessage(QString::number(id_user), GUIclientId, msg.text));
}
}
}
listWidgets.append(msgWdgt); listWidgets.append(msgWdgt);
@@ -43,21 +60,22 @@ void MessangerController::deleteWidget(MessangerWidget *msgWdgt)
{ {
delete msgWdgt; delete msgWdgt;
listWidgets.removeAt(i); listWidgets.removeAt(i);
break;
} }
} }
} }
void MessangerController::initialize(QString id) void MessangerController::setGUIclientId(QString id)
{ {
currClientId = id; GUIclientId = id;
for(MessangerWidget* widget : listWidgets) for(MessangerWidget* widget : listWidgets)
{ {
widget->initialize(currClientId); widget->initialize(GUIclientId);
} }
} }
void MessangerController::clear() void MessangerController::clearAllWidgets()
{ {
for(MessangerWidget* widget : listWidgets) for(MessangerWidget* widget : listWidgets)
{ {
@@ -65,20 +83,74 @@ void MessangerController::clear()
} }
} }
void MessangerController::slot_sendMessage(ClientMessage clientMessage) void MessangerController::slot_sendMessage(ClientMessage clientMessage)
{ {
connectorToServer->slot_sendMessage(clientMessage); connectorToServer->slot_sendMessage(clientMessage);
int id_user = clientMessage.toId.toInt();
QList<MessageOfMessanger>* list = nullptr;
if(mapAlldialogsWithClients.contains(id_user))
{//Уже есть
list = mapAlldialogsWithClients.value(id_user);
}
else
{//Новый
list = new QList<MessageOfMessanger>();
mapAlldialogsWithClients.insert(id_user, list);
}
MessageOfMessanger msg;
msg.flLocal = true;
msg.text = clientMessage.Text;
list->append(msg);
for(MessangerWidget* widget : listWidgets) for(MessangerWidget* widget : listWidgets)
{ {
widget->addMsgWidgetLocal(clientMessage.Text); widget->showSendedMessage(clientMessage.Text);
} }
} }
void MessangerController::slot_InitMessanger(QList<Trainee> listTrainees) void MessangerController::slot_tabMessengerChanged(QString login)
{
emit signal_tabMessengerChanged(login);
}
void MessangerController::slot_receiveMessage(ClientMessage clientMessage)
{
int id_user = clientMessage.fromId.toInt();
QList<MessageOfMessanger>* list = nullptr;
if(mapAlldialogsWithClients.contains(id_user))
{//Уже есть
list = mapAlldialogsWithClients.value(id_user);
}
else
{//Новый
list = new QList<MessageOfMessanger>();
mapAlldialogsWithClients.insert(id_user, list);
}
MessageOfMessanger msg;
msg.flLocal = false;
msg.text = clientMessage.Text;
list->append(msg);
for(MessangerWidget* widget : listWidgets)
{
widget->showReceivedMessage(clientMessage);
}
}
void MessangerController::slot_initMessanger(QList<Trainee> listTrainees)
{ {
for(MessangerWidget* widget : listWidgets) for(MessangerWidget* widget : listWidgets)
{ {
widget->slot_InitMessanger(listTrainees); widget->initMessangerWidget(listTrainees);
}
}
void MessangerController::slot_traineeSelected(QString login)
{
for(MessangerWidget* widget : listWidgets)
{
widget->traineeSelected(login);
} }
} }

View File

@@ -2,9 +2,16 @@
#define MESSANGERCONTROLLER_H #define MESSANGERCONTROLLER_H
#include <QObject> #include <QObject>
#include <QVBoxLayout>
#include "messangerwidget.h" #include "messangerwidget.h"
#include "connectortoserver.h" #include "connectortoserver.h"
struct MessageOfMessanger
{
QString text;
bool flLocal;
};
class MessangerController : public QObject class MessangerController : public QObject
{ {
Q_OBJECT Q_OBJECT
@@ -13,28 +20,30 @@ public:
~MessangerController(); ~MessangerController();
public: public:
MessangerWidget* newWidget(QWidget *parent); MessangerWidget* newWidget(QWidget *parent, Trainee* trainee = nullptr, QVBoxLayout* boxLayout = nullptr);
void deleteWidget(MessangerWidget* msgWdgt); void deleteWidget(MessangerWidget* msgWdgt);
void initialize(QString id); void setGUIclientId(QString id);
void clear(); void clearAllWidgets();
signals: signals:
void signal_tabMessengerChanged(QString login); void signal_tabMessengerChanged(QString login);
void signal_traineeSelected(QString login);
public slots: public slots:
void slot_sendMessage(ClientMessage clientMessage); void slot_sendMessage(ClientMessage clientMessage);
void slot_InitMessanger(QList<Trainee> listTrainees); void slot_tabMessengerChanged(QString login);
void slot_receiveMessage(ClientMessage clientMessage);
void slot_initMessanger(QList<Trainee> listTrainees);
void slot_traineeSelected(QString login);
private: private:
ConnectorToServer* connectorToServer; ConnectorToServer* connectorToServer;
QList <MessangerWidget*> listWidgets; QList <MessangerWidget*> listWidgets;
QString currClientId; //id этого клиента QString GUIclientId; //id этого GUI клиента
QMap <int, QList<MessageOfMessanger>*> mapAlldialogsWithClients;
}; };
#endif // MESSANGERCONTROLLER_H #endif // MESSANGERCONTROLLER_H

View File

@@ -151,7 +151,7 @@ void MessangerWidget::clear()
actualizationTabsDialogMessenger(); actualizationTabsDialogMessenger();
} }
void MessangerWidget::addMsgWidgetLocal(QString text) void MessangerWidget::showSendedMessage(QString text)
{ {
//Ищем нужный диалог //Ищем нужный диалог
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger) foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
@@ -175,7 +175,7 @@ void MessangerWidget::setOneTrainee(Trainee trainee)
listTrainees.clear(); listTrainees.clear();
listTrainees.append(trainee); listTrainees.append(trainee);
slot_InitMessanger(listTrainees); initMessangerWidget(listTrainees);
} }
void MessangerWidget::on_btnSend_clicked() void MessangerWidget::on_btnSend_clicked()
@@ -221,7 +221,7 @@ void MessangerWidget::on_tabWidget_currentChanged(int index)
} }
} }
void MessangerWidget::slot_traineeSelected(QString login) void MessangerWidget::traineeSelected(QString login)
{ {
//Ищем нужный диалог //Ищем нужный диалог
foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger) foreach(TabDialogMessenger* tabDialog, listTabDialogMessenger)
@@ -239,13 +239,24 @@ void MessangerWidget::slot_traineeSelected(QString login)
ui->editMsg->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) void MessangerWidget::slot_LanguageChanged(QString language)
{ {
qtLanguageTranslator.load(QString("translationsMy/ServerLMS_") + language, "."); qtLanguageTranslator.load(QString("translationsMy/ServerLMS_") + language, ".");
qApp->installTranslator(&qtLanguageTranslator); qApp->installTranslator(&qtLanguageTranslator);
} }
void MessangerWidget::slot_InitMessanger(QList<Trainee> listTrainees) void MessangerWidget::initMessangerWidget(QList<Trainee> listTrainees)
{ {
if(flOneTrainee) if(flOneTrainee)
{ {
@@ -273,7 +284,7 @@ void MessangerWidget::slot_InitMessanger(QList<Trainee> listTrainees)
} }
} }
void MessangerWidget::slot_showMessage(ClientMessage clientMessage) void MessangerWidget::showReceivedMessage(ClientMessage clientMessage)
{ {
for(Trainee trainee: listTrainees) for(Trainee trainee: listTrainees)
{ {

View File

@@ -40,10 +40,14 @@ public:
void clear(); void clear();
void addMsgWidgetLocal(QString text); void showSendedMessage(QString text);
void setOneTrainee(Trainee trainee); void setOneTrainee(Trainee trainee);
public slots:
//слот обработки сигнала о смене языка
void slot_LanguageChanged(QString language);
private slots: private slots:
void on_btnSend_clicked(); void on_btnSend_clicked();
void on_tabWidget_currentChanged(int index); void on_tabWidget_currentChanged(int index);
@@ -54,15 +58,12 @@ signals:
//сигнал об изменении вкладки диалога с клиентом (TabDialogMessenger) //сигнал об изменении вкладки диалога с клиентом (TabDialogMessenger)
void signal_tabMessengerChanged(QString login); void signal_tabMessengerChanged(QString login);
public slots: public:
//слот обработки сигнала о смене языка void showReceivedMessage(ClientMessage clientMessage);
void slot_LanguageChanged(QString language); void initMessangerWidget(QList<Trainee> listTrainees);
//слот обработки сигнала об инициализации мессенджера void traineeSelected(QString login);
void slot_InitMessanger(QList<Trainee> listTrainees);
//слот обработки сигнала о выборе обучаемого void getTabDialogMessengerByID(QString id_user);
void slot_traineeSelected(QString login);
//слот о приходе нового сообщения от клиента
void slot_showMessage(ClientMessage clientMessage);
private: private:
virtual void keyPressEvent(QKeyEvent *event) override; virtual void keyPressEvent(QKeyEvent *event) override;

View File

@@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>500</width> <width>344</width>
<height>300</height> <height>300</height>
</rect> </rect>
</property> </property>
@@ -35,6 +35,12 @@
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>0</number>
</property> </property>

View File

@@ -24,8 +24,15 @@ void TabDialogMessenger::addMsgWidgetLocal(QString text)
{ {
QListWidgetItem *listWidgetItem = new QListWidgetItem(); QListWidgetItem *listWidgetItem = new QListWidgetItem();
QString avatar = ":/resources/icons/instructor.png"; QString avatar = ":/resources/icons/instructor.png";
int widthW = width();
int widthSB = verticalScrollBar()->size().width();
//TODO Времянка
widthW = 450;
widthSB = 17;
MsgWidget *msgWidget = new MsgWidget(avatar, MsgWidget::AligneAvatar::Left, MsgWidget *msgWidget = new MsgWidget(avatar, MsgWidget::AligneAvatar::Left,
width() - verticalScrollBar()->size().width()); widthW - widthSB);
addItem(listWidgetItem); addItem(listWidgetItem);
setItemWidget(listWidgetItem, msgWidget); setItemWidget(listWidgetItem, msgWidget);
@@ -42,8 +49,15 @@ void TabDialogMessenger::addMsgWidgetRemote(QString text)
{ {
QListWidgetItem *listWidgetItem = new QListWidgetItem(); QListWidgetItem *listWidgetItem = new QListWidgetItem();
QString avatar = ":/resources/icons/trainee.png"; QString avatar = ":/resources/icons/trainee.png";
int widthW = width();
int widthSB = verticalScrollBar()->size().width();
//TODO Времянка
widthW = 450;
widthSB = 17;
MsgWidget *msgWidget = new MsgWidget(avatar, MsgWidget::AligneAvatar::Right, MsgWidget *msgWidget = new MsgWidget(avatar, MsgWidget::AligneAvatar::Right,
width() - verticalScrollBar()->size().width()); widthW - widthSB);
addItem(listWidgetItem); addItem(listWidgetItem);
setItemWidget(listWidgetItem, msgWidget); setItemWidget(listWidgetItem, msgWidget);

View File

@@ -0,0 +1,15 @@
#include "metatypes.h"
void registerMetaType()
{
qRegisterMetaType<QList<Instructor>>("QList<Instructor>");
qRegisterMetaType<QList<Trainee>>("QList<Trainee>");
qRegisterMetaType<QList<Group>>("QList<Group>");
qRegisterMetaType<QList<Computer>>("QList<Computer>");
qRegisterMetaType<QList<Classroom>>("QList<Classroom>");
qRegisterMetaType<QList<Module*>>("QList<Module*>");
qRegisterMetaType<QList<TaskAmmFim>>("QList<TaskAmmFim>");
qRegisterMetaType<PacketType>("PacketType");
qRegisterMetaType<ClientMessage>("ClientMessage");
qRegisterMetaType<QList<QTreeWidgetItem*>>("QList<QTreeWidgetItem*>");
}

View File

@@ -0,0 +1,29 @@
#ifndef METATYPES_H
#define METATYPES_H
#include <QTreeWidgetItem>
#include "instructor.h"
#include "trainee.h"
#include "group.h"
#include "computer.h"
#include "classroom.h"
#include "module.h"
#include "tasksAmmFim.h"
#include "tools.h"
#include "Datas.h"
void registerMetaType();
Q_DECLARE_METATYPE(QList<Instructor>)
Q_DECLARE_METATYPE(QList<Trainee>)
Q_DECLARE_METATYPE(QList<Group>)
Q_DECLARE_METATYPE(QList<Computer>)
Q_DECLARE_METATYPE(QList<Classroom>)
Q_DECLARE_METATYPE(QList<Module*>)
Q_DECLARE_METATYPE(QList<TaskAmmFim>)
Q_DECLARE_METATYPE(PacketType)
Q_DECLARE_METATYPE(ClientMessage)
Q_DECLARE_METATYPE(QList<QTreeWidgetItem*>)
#endif // METATYPES_H

View File

@@ -32,24 +32,16 @@ PersonalCardTrainee::PersonalCardTrainee(ConnectorToServer* connectorToServer, M
ui->verticalLayout_AMMcommon->addWidget(ammTasksWidget_common); ui->verticalLayout_AMMcommon->addWidget(ammTasksWidget_common);
ui->verticalLayout_FIMcommon->addWidget(fimTasksWidget_common); ui->verticalLayout_FIMcommon->addWidget(fimTasksWidget_common);
ui->groupBox_Messenger->setMaximumWidth(500);
ui->groupBox_Messenger->setMinimumWidth(500);
/* Messanger*/ /* Messanger*/
messangerWidget = messangerController->newWidget(this);
ui->verticalLayout_Messenger->addWidget(messangerWidget);
//QList<Trainee> listTrainees;
Trainee trainee = connectorToServer->getTrainee(id_trainee); Trainee trainee = connectorToServer->getTrainee(id_trainee);
/* messangerWidget = messangerController->newWidget(this, &trainee, ui->verticalLayout_Messenger);
listTrainees.append(trainee);
messangerWidget->slot_InitMessanger(listTrainees);
*/
messangerWidget->setOneTrainee(trainee); //ui->verticalLayout_Messenger->addWidget(messangerWidget);
ui->groupBox_Messenger->setMaximumWidth(600);
ui->groupBox_Messenger->setMinimumWidth(600);
//messangerWidget->setOneTrainee(trainee);
} }
PersonalCardTrainee::~PersonalCardTrainee() PersonalCardTrainee::~PersonalCardTrainee()

View File

@@ -200,11 +200,16 @@ void ViewerTrainees::on_itemDoubleClicked(QTreeWidgetItem *item, int column)
PersonalCardTrainee cardTrainee(connectorToServer, messangerController, id_trainee, ammTasksWidgetCommon, fimTasksWidgetCommon, this); PersonalCardTrainee cardTrainee(connectorToServer, messangerController, id_trainee, ammTasksWidgetCommon, fimTasksWidgetCommon, this);
QDialog* dialog = new QDialog(this); QDialog* dialog = new QDialog(this,
Qt::WindowSystemMenuHint
| Qt::WindowMaximizeButtonHint
| Qt::WindowMinimizeButtonHint
| Qt::WindowCloseButtonHint);
QHBoxLayout *layout = new QHBoxLayout(dialog); QHBoxLayout *layout = new QHBoxLayout(dialog);
layout->addWidget(&cardTrainee); layout->addWidget(&cardTrainee);
dialog->setWindowTitle(tr("Personal card trainee")); dialog->setWindowTitle(tr("Personal card trainee"));
dialog->setMinimumSize(1600, 800); dialog->setMinimumSize(1900, 1000);
dialog->exec(); dialog->exec();
ammTasksWidgetCommon->setParent(this); ammTasksWidgetCommon->setParent(this);