mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer.git
synced 2026-03-28 19:55:48 +03:00
Оповещения о непрочитанных сообщениях
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
#include <QTreeWidget>
|
#include <QTreeWidget>
|
||||||
#include <QTranslator>
|
#include <QTranslator>
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
|
#include <QMap>
|
||||||
#include "instructorsAndTrainees_global.h"
|
#include "instructorsAndTrainees_global.h"
|
||||||
#include "connectortoserver.h"
|
#include "connectortoserver.h"
|
||||||
#include "waitanimationwidget.h"
|
#include "waitanimationwidget.h"
|
||||||
@@ -63,6 +64,7 @@ public:
|
|||||||
treeWidget->clear();
|
treeWidget->clear();
|
||||||
treeWidget->setEnabled(false);
|
treeWidget->setEnabled(false);
|
||||||
lastCurrentID = 0;
|
lastCurrentID = 0;
|
||||||
|
mapNewMsg.clear();
|
||||||
}
|
}
|
||||||
void clearSelection()
|
void clearSelection()
|
||||||
{
|
{
|
||||||
@@ -108,6 +110,9 @@ protected:
|
|||||||
int lastCurrentID;
|
int lastCurrentID;
|
||||||
TypeObject typeObject;
|
TypeObject typeObject;
|
||||||
|
|
||||||
|
QMutex mtxmapNewMsg;
|
||||||
|
QMap<int, bool> mapNewMsg;
|
||||||
|
|
||||||
WaitAnimationWidget *waitAnimationWidget;
|
WaitAnimationWidget *waitAnimationWidget;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -89,6 +89,24 @@ void InstructorsView::loadInstructorsFromDB()
|
|||||||
if(! instructor.getLoggedIn())
|
if(! instructor.getLoggedIn())
|
||||||
if(! notLoggedInVisible)
|
if(! notLoggedInVisible)
|
||||||
ItemInstructor->setHidden(true);
|
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();
|
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()
|
void ViewerInstructors::on_btnEditorInstructors_clicked()
|
||||||
{
|
{
|
||||||
connectorToServer->sendQueryBlockAuth(true);
|
connectorToServer->sendQueryBlockAuth(true);
|
||||||
@@ -100,6 +111,20 @@ void ViewerInstructors::on_treeWidgetItemClicked(QTreeWidgetItem *item, int colu
|
|||||||
|
|
||||||
lastCurrentID = newCurrentID;
|
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);
|
Q_EMIT signal_instructorSelected(newCurrentID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,9 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
void changeEvent(QEvent * event) override;
|
void changeEvent(QEvent * event) override;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void slot_receiveMessage(ClientMessage clientMessage);
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void on_btnEditorInstructors_clicked();
|
void on_btnEditorInstructors_clicked();
|
||||||
|
|
||||||
|
|||||||
@@ -67,6 +67,9 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
|
|||||||
connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, this, &InstructorsAndTraineesWidget::slot_traineeSelected);
|
connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, this, &InstructorsAndTraineesWidget::slot_traineeSelected);
|
||||||
connect(viewerInstructors, &ViewerInstructors::signal_instructorSelected, this, &InstructorsAndTraineesWidget::slot_instructorSelected);
|
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();
|
viewerTrainees->clearSelection();
|
||||||
viewerInstructors->clearSelection();
|
viewerInstructors->clearSelection();
|
||||||
|
|
||||||
|
|||||||
@@ -91,6 +91,18 @@ void MessangerController::slot_sendMessage(ClientMessage clientMessage)
|
|||||||
|
|
||||||
void MessangerController::slot_receiveMessage(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);
|
showMessageInAllWidgets(clientMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,10 @@ public slots:
|
|||||||
|
|
||||||
void slot_reinitMessangers(QList<User> listUsers);
|
void slot_reinitMessangers(QList<User> listUsers);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void signal_receiveMessage_fromInstructor(ClientMessage clientMessage);
|
||||||
|
void signal_receiveMessage_fromTrainee(ClientMessage clientMessage);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void showMessageInAllWidgets(ClientMessage clientMessage);
|
void showMessageInAllWidgets(ClientMessage clientMessage);
|
||||||
|
|
||||||
|
|||||||
@@ -100,6 +100,24 @@ void TraineesView::loadTraineesFromDB()
|
|||||||
if(! trainee.getLoggedIn())
|
if(! trainee.getLoggedIn())
|
||||||
if(! notLoggedInVisible)
|
if(! notLoggedInVisible)
|
||||||
ItemTrainee->setHidden(true);
|
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)
|
//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()
|
void ViewerTrainees::on_btnEditorTrainees_clicked()
|
||||||
{
|
{
|
||||||
connectorToServer->sendQueryBlockAuth(true);
|
connectorToServer->sendQueryBlockAuth(true);
|
||||||
@@ -181,6 +192,20 @@ void ViewerTrainees::on_treeWidgetItemClicked(QTreeWidgetItem *item, int column)
|
|||||||
|
|
||||||
lastCurrentID = newCurrentID;
|
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);
|
Q_EMIT signal_traineeSelected(newCurrentID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,9 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
void changeEvent(QEvent * event) override;
|
void changeEvent(QEvent * event) override;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void slot_receiveMessage(ClientMessage clientMessage);
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void on_btnEditorTrainees_clicked();
|
void on_btnEditorTrainees_clicked();
|
||||||
void on_btnPersonalCard_clicked();
|
void on_btnPersonalCard_clicked();
|
||||||
|
|||||||
Reference in New Issue
Block a user