mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-27 19:45:43 +03:00
Оповещения о непрочитанных сообщениях
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#include <QTreeWidget>
|
||||
#include <QTranslator>
|
||||
#include <QMutex>
|
||||
#include <QMap>
|
||||
#include "instructorsAndTrainees_global.h"
|
||||
#include "connectortoserver.h"
|
||||
#include "waitanimationwidget.h"
|
||||
@@ -63,6 +64,7 @@ public:
|
||||
treeWidget->clear();
|
||||
treeWidget->setEnabled(false);
|
||||
lastCurrentID = 0;
|
||||
mapNewMsg.clear();
|
||||
}
|
||||
void clearSelection()
|
||||
{
|
||||
@@ -108,6 +110,9 @@ protected:
|
||||
int lastCurrentID;
|
||||
TypeObject typeObject;
|
||||
|
||||
QMutex mtxmapNewMsg;
|
||||
QMap<int, bool> mapNewMsg;
|
||||
|
||||
WaitAnimationWidget *waitAnimationWidget;
|
||||
};
|
||||
|
||||
|
||||
@@ -89,6 +89,24 @@ void InstructorsView::loadInstructorsFromDB()
|
||||
if(! instructor.getLoggedIn())
|
||||
if(! notLoggedInVisible)
|
||||
ItemInstructor->setHidden(true);
|
||||
|
||||
mtxmapNewMsg.lock();
|
||||
if(mapNewMsg.contains(instructor.getID()))
|
||||
{//Есть непрочитанные сообщения от него
|
||||
if(mapNewMsg.value(instructor.getID()))
|
||||
{
|
||||
if(lastCurrentID == instructor.getID())
|
||||
mapNewMsg.take(lastCurrentID);
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < ColumnsTreeUsers::clmn_count; i++)
|
||||
{
|
||||
ItemInstructor->setBackground(i, QBrush(QColor(250, 210, 1)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
mtxmapNewMsg.unlock();
|
||||
}
|
||||
|
||||
treeWidget->expandAll();
|
||||
|
||||
@@ -64,6 +64,17 @@ void ViewerInstructors::changeEvent(QEvent *event)
|
||||
}
|
||||
}
|
||||
|
||||
void ViewerInstructors::slot_receiveMessage(ClientMessage clientMessage)
|
||||
{
|
||||
int id_instructor = clientMessage.fromId.toInt();
|
||||
|
||||
mtxmapNewMsg.lock();
|
||||
mapNewMsg.insert(id_instructor, true);
|
||||
mtxmapNewMsg.unlock();
|
||||
|
||||
slot_NeedUpdateUI(true, false);
|
||||
}
|
||||
|
||||
void ViewerInstructors::on_btnEditorInstructors_clicked()
|
||||
{
|
||||
connectorToServer->sendQueryBlockAuth(true);
|
||||
@@ -100,6 +111,20 @@ void ViewerInstructors::on_treeWidgetItemClicked(QTreeWidgetItem *item, int colu
|
||||
|
||||
lastCurrentID = newCurrentID;
|
||||
|
||||
mtxmapNewMsg.lock();
|
||||
if(mapNewMsg.contains(newCurrentID))
|
||||
{//Есть непрочитанные сообщения от него
|
||||
if(mapNewMsg.value(newCurrentID))
|
||||
{
|
||||
for (int i = 0; i < ColumnsTreeUsers::clmn_count; i++)
|
||||
{
|
||||
item->setBackground(i, QBrush(Qt::GlobalColor::white));
|
||||
}
|
||||
mapNewMsg.take(newCurrentID);
|
||||
}
|
||||
}
|
||||
mtxmapNewMsg.unlock();
|
||||
|
||||
Q_EMIT signal_instructorSelected(newCurrentID);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,9 @@ public:
|
||||
protected:
|
||||
void changeEvent(QEvent * event) override;
|
||||
|
||||
public slots:
|
||||
void slot_receiveMessage(ClientMessage clientMessage);
|
||||
|
||||
public Q_SLOTS:
|
||||
void on_btnEditorInstructors_clicked();
|
||||
|
||||
|
||||
@@ -67,6 +67,9 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
|
||||
connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, this, &InstructorsAndTraineesWidget::slot_traineeSelected);
|
||||
connect(viewerInstructors, &ViewerInstructors::signal_instructorSelected, this, &InstructorsAndTraineesWidget::slot_instructorSelected);
|
||||
|
||||
connect(messangerController, &MessangerController::signal_receiveMessage_fromInstructor, viewerInstructors, &ViewerInstructors::slot_receiveMessage);
|
||||
connect(messangerController, &MessangerController::signal_receiveMessage_fromTrainee, viewerTrainees, &ViewerTrainees::slot_receiveMessage);
|
||||
|
||||
viewerTrainees->clearSelection();
|
||||
viewerInstructors->clearSelection();
|
||||
|
||||
|
||||
@@ -91,6 +91,18 @@ void MessangerController::slot_sendMessage(ClientMessage clientMessage)
|
||||
|
||||
void MessangerController::slot_receiveMessage(ClientMessage clientMessage)
|
||||
{
|
||||
int id_user = clientMessage.fromId.toInt();
|
||||
|
||||
Instructor instructor = connectorToServer->getInstructor(id_user);
|
||||
if(instructor.getID())
|
||||
emit signal_receiveMessage_fromInstructor(clientMessage);
|
||||
else
|
||||
{
|
||||
Trainee trainee = connectorToServer->getTrainee(id_user);
|
||||
if(trainee.getID())
|
||||
emit signal_receiveMessage_fromTrainee(clientMessage);
|
||||
}
|
||||
|
||||
showMessageInAllWidgets(clientMessage);
|
||||
}
|
||||
|
||||
|
||||
@@ -33,6 +33,10 @@ public slots:
|
||||
|
||||
void slot_reinitMessangers(QList<User> listUsers);
|
||||
|
||||
signals:
|
||||
void signal_receiveMessage_fromInstructor(ClientMessage clientMessage);
|
||||
void signal_receiveMessage_fromTrainee(ClientMessage clientMessage);
|
||||
|
||||
private:
|
||||
void showMessageInAllWidgets(ClientMessage clientMessage);
|
||||
|
||||
|
||||
@@ -100,6 +100,24 @@ void TraineesView::loadTraineesFromDB()
|
||||
if(! trainee.getLoggedIn())
|
||||
if(! notLoggedInVisible)
|
||||
ItemTrainee->setHidden(true);
|
||||
|
||||
mtxmapNewMsg.lock();
|
||||
if(mapNewMsg.contains(trainee.getID()))
|
||||
{//Есть непрочитанные сообщения от него
|
||||
if(mapNewMsg.value(trainee.getID()))
|
||||
{
|
||||
if(lastCurrentID == trainee.getID())
|
||||
mapNewMsg.take(lastCurrentID);
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < ColumnsTreeUsers::clmn_count; i++)
|
||||
{
|
||||
ItemTrainee->setBackground(i, QBrush(QColor(250, 210, 1)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
mtxmapNewMsg.unlock();
|
||||
}
|
||||
|
||||
//if(! archiveVisible && cntChildsNotArchived == 0)
|
||||
|
||||
@@ -98,6 +98,17 @@ void ViewerTrainees::changeEvent(QEvent *event)
|
||||
}
|
||||
}
|
||||
|
||||
void ViewerTrainees::slot_receiveMessage(ClientMessage clientMessage)
|
||||
{
|
||||
int id_trainee = clientMessage.fromId.toInt();
|
||||
|
||||
mtxmapNewMsg.lock();
|
||||
mapNewMsg.insert(id_trainee, true);
|
||||
mtxmapNewMsg.unlock();
|
||||
|
||||
slot_NeedUpdateUI(false, true);
|
||||
}
|
||||
|
||||
void ViewerTrainees::on_btnEditorTrainees_clicked()
|
||||
{
|
||||
connectorToServer->sendQueryBlockAuth(true);
|
||||
@@ -181,6 +192,20 @@ void ViewerTrainees::on_treeWidgetItemClicked(QTreeWidgetItem *item, int column)
|
||||
|
||||
lastCurrentID = newCurrentID;
|
||||
|
||||
mtxmapNewMsg.lock();
|
||||
if(mapNewMsg.contains(newCurrentID))
|
||||
{//Есть непрочитанные сообщения от него
|
||||
if(mapNewMsg.value(newCurrentID))
|
||||
{
|
||||
for (int i = 0; i < ColumnsTreeUsers::clmn_count; i++)
|
||||
{
|
||||
item->setBackground(i, QBrush(Qt::GlobalColor::white));
|
||||
}
|
||||
mapNewMsg.take(newCurrentID);
|
||||
}
|
||||
}
|
||||
mtxmapNewMsg.unlock();
|
||||
|
||||
Q_EMIT signal_traineeSelected(newCurrentID);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,9 @@ public:
|
||||
protected:
|
||||
void changeEvent(QEvent * event) override;
|
||||
|
||||
public slots:
|
||||
void slot_receiveMessage(ClientMessage clientMessage);
|
||||
|
||||
public Q_SLOTS:
|
||||
void on_btnEditorTrainees_clicked();
|
||||
void on_btnPersonalCard_clicked();
|
||||
|
||||
Reference in New Issue
Block a user