Вынес подготовку дерева FIM в отдельный поток

This commit is contained in:
2025-07-01 10:37:59 +03:00
parent 53c133d459
commit 389a37a2e4
9 changed files with 161 additions and 318 deletions

View File

@@ -9,7 +9,7 @@
#include "tasksAmmFim.h"
#include "dialogchecktask.h"
FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeList type, QWidget *parent) :
FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeListTreeAMMFIM type, QWidget *parent) :
QWidget(parent),
ui(new Ui::FIMtasksWidget),
connectorToServer(connectorToServer),
@@ -34,13 +34,13 @@ FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeList ty
preparationTreeWidget();
threadPreparation = new QThread();
taskTreePreparation = new TaskTreePreparation();
taskTreePreparation = new TaskAMMFIMTreePreparation(type);
taskTreePreparation->moveToThread(threadPreparation);
threadPreparation->start();
threadPreparation->setPriority(QThread::HighestPriority);
connect(this, &FIMtasksWidget::signal_prepareFIMListItems, taskTreePreparation, &TaskTreePreparation::slot_prepareFIMListItems);
connect(this, &FIMtasksWidget::signal_prepareFIMListItemsForTrainee, taskTreePreparation, &TaskTreePreparation::slot_prepareFIMListItemsForTrainee);
connect(taskTreePreparation, &TaskTreePreparation::signal_listFIMItemsReady, this, &FIMtasksWidget::slot_FIMlistItemsReady);
connect(this, &FIMtasksWidget::signal_prepareFIMListItems, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_prepareFIMListItems);
connect(this, &FIMtasksWidget::signal_prepareFIMListItemsForTrainee, taskTreePreparation, &TaskAMMFIMTreePreparation::slot_prepareFIMListItemsForTrainee);
connect(taskTreePreparation, &TaskAMMFIMTreePreparation::signal_listFIMItemsReady, this, &FIMtasksWidget::slot_FIMlistItemsReady);
waitAnimationWidget = new WaitAnimationWidget;
QMovie *movie = new QMovie(":/resources/icons/762.gif");
@@ -54,7 +54,7 @@ FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeList ty
ui->btnAssignTask->setObjectName("btnAssignTask");
ui->btnAssignTask->setEnabled(false);
if(type == TypeList::listCommon)
if(type == TypeListTreeAMMFIM::listCommon)
{
ui->horizontalLayout_3->addWidget(ui->btnAssignTask);
ui->horizontalLayout_3->addWidget(ui->btnCheck);
@@ -64,7 +64,7 @@ FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeList ty
ui->btnDelete->setVisible(false);
ui->btnCheck->setVisible(false);
}
else if(type == TypeList::listOneTask)
else if(type == TypeListTreeAMMFIM::listOneTask)
{
ui->btnDelete->setVisible(false);
ui->btnCheck->setVisible(false);
@@ -82,8 +82,6 @@ FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeList ty
FIMtasksWidget::~FIMtasksWidget()
{
//deleteAllTaskAmmFim(); //TODO
waitAnimationWidget->hideWithStop();
taskTreePreparation->stopParser();
@@ -92,9 +90,9 @@ FIMtasksWidget::~FIMtasksWidget()
delete threadPreparation;
delete taskTreePreparation;
delete taskTreePreparation;
delete waitAnimationWidget;
delete treeWidget;
delete treeWidget;
delete ui;
}
@@ -109,9 +107,9 @@ void FIMtasksWidget::deactivate()
void FIMtasksWidget::setOneTaskFim(TaskAmmFim* task)
{
listTaskAmmFim.append(task);
//fillTree();
//TODO
QList<TaskAmmFim> listTask;
listTask.append(*task);
emit signal_prepareFIMListItemsForTrainee(listTask);
}
void FIMtasksWidget::resizeEvent(QResizeEvent *event)
@@ -125,7 +123,7 @@ void FIMtasksWidget::resizeEvent(QResizeEvent *event)
treeWidget->setColumnWidth(ColumnsTreeFIM::clmnFIM_status, 110);
int widthTitle;
if(type == TypeList::listCommon)
if(type == TypeListTreeAMMFIM::listCommon)
widthTitle = width - (0 + 10);
else
widthTitle = width - (160 + 10);
@@ -142,14 +140,13 @@ void FIMtasksWidget::changeEvent(QEvent *event)
reSetHeadTreeWidget();
if(type == TypeList::listCommon)
if(type == TypeListTreeAMMFIM::listCommon)
{
//slot_NeedUpdateUI();
}
else if(type == TypeList::listForTrainee)
else if(type == TypeListTreeAMMFIM::listForTrainee)
if(idTraineeSelected)
slot_UpdateTasksFIMforTrainee(idTraineeSelected);
//fillTree();
}
}
@@ -169,7 +166,15 @@ void FIMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current,
{//Выбрана задача
int id = current->text(ColumnsTreeFIM::clmnFIM_ID).toInt();
TaskAmmFim* task = getTaskByID(id);
TaskAmmFim* task = taskTreePreparation->getTaskFIMbyID(id);
if(task == nullptr)
{
ui->btnAssignTask->setEnabled(false);
ui->btnDelete->setEnabled(false);
ui->btnCheck->setEnabled(false);
}
code = task->title;
@@ -191,114 +196,6 @@ void FIMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current,
}
}
#ifdef OLD_FILL
void FIMtasksWidget::fillTree()
{
//Обновление дерева
treeWidget->clear();
for(int i = 0; i < listTaskAmmFim.count(); i++)
{/*Задачи*/
TaskAmmFim* task = listTaskAmmFim.at(i);
QTreeWidgetItem* itemTask = new QTreeWidgetItem();
itemTask->setText(0, task->title);
itemTask->setText(1, QString::number(task->id));
//itemTask->setFlags(itemTask->flags() | Qt::ItemIsUserCheckable);
//itemTask->setCheckState(0, Qt::Checked);
if(task->status == "completed")
{
itemTask->setText(2, tr("completed"));
itemTask->setIcon(2, QIcon(QStringLiteral(":/resources/icons/circleGreen.png")));
}
else if(task->status == "failed")
{
itemTask->setText(2, tr("failed"));
itemTask->setIcon(2, QIcon(QStringLiteral(":/resources/icons/circleRed.png")));
}
else if(task->status == "checkup")
{
itemTask->setText(2, tr("checkup"));
itemTask->setIcon(2, QIcon(QStringLiteral(":/resources/icons/circleYellow.png")));
}
else
{
itemTask->setText(2, tr("new"));
itemTask->setIcon(2, QIcon(QStringLiteral(":/resources/icons/circleGray.png")));
}
itemTask->setIcon(0, QIcon(":/resources/icons/procedure.png"));
itemTask->setToolTip(0, task->title);
treeWidget->addTopLevelItem(itemTask);
for (int j = 0; j < task->malfunctionList.count(); j++)
{/*Неисправности*/
Malfunction malfunction = task->malfunctionList.at(j);
QTreeWidgetItem* itemMalfunction = new QTreeWidgetItem();
itemMalfunction->setText(0, malfunction.description);
if(type == TypeList::listCommon)
{
itemMalfunction->setFlags(itemMalfunction->flags() | Qt::ItemIsUserCheckable);
itemMalfunction->setCheckState(0, Qt::Checked);
}
itemMalfunction->setIcon(0, QIcon(":/resources/icons/malfunction.png"));
itemMalfunction->setToolTip(0, malfunction.description);
itemTask->addChild(itemMalfunction);
for (int k = 0; k < malfunction.malfunctionSigns.count(); k++)
{/*Сигнализация*/
MalfunctionSign sign = malfunction.malfunctionSigns.at(k);
QTreeWidgetItem* itemSign = new QTreeWidgetItem();
itemSign->setText(0, sign.description);
//itemSign->setFlags(itemSign->flags() | Qt::ItemIsUserCheckable);
//itemSign->setCheckState(0, Qt::Checked);
itemSign->setIcon(0, QIcon(":/resources/icons/sign.png"));
itemSign->setToolTip(0, sign.description);
itemMalfunction->addChild(itemSign);
}
}
}
QTreeWidgetItem * item = treeWidget->topLevelItem(0);
if(item != nullptr)
{
treeWidget->setCurrentItem(item);
if(type == TypeList::listOneTask)
{
treeWidget->expandAll();
}
}
}
/*
void FIMtasksWidget::prepareListTasksForTrainee(QList<TaskAmmFim> listTask)
{
deleteAllTaskAmmFim();
for(TaskAmmFim task : listTask)
{
TaskAmmFim* newTask = new TaskAmmFim();
*newTask = task;
listTaskAmmFim.append(newTask);
}
}
*/
#endif
void FIMtasksWidget::slot_NeedUpdateUI()
{
qDebug() << "FIMtasksWidget::slot_NeedUpdateUI thread ID " << QThread::currentThreadId();
@@ -311,7 +208,7 @@ void FIMtasksWidget::slot_traineeSelected(QString login)
loginTraineeSelected = login;
idTraineeSelected = connectorToServer->getIdTraineeByLogin(loginTraineeSelected);
if(type == TypeList::listForTrainee)
if(type == TypeListTreeAMMFIM::listForTrainee)
{
waitAnimationWidget->showWithPlay();
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_GET_TASKS_FIM_FOR_TRAINEE, idTraineeSelected);
@@ -321,15 +218,12 @@ void FIMtasksWidget::slot_traineeSelected(QString login)
void FIMtasksWidget::slot_UpdateTasksFIMforTrainee(int trainee_id)
{
qDebug() << "slot_UpdateTasksFIMforTrainee" << QThread::currentThreadId();
if(type == TypeList::listForTrainee)
if(type == TypeListTreeAMMFIM::listForTrainee)
{
if(idTraineeSelected == trainee_id)
{
QList<TaskAmmFim> listTask = connectorToServer->getListTasksFIMforTrainee(trainee_id);
emit signal_prepareFIMListItemsForTrainee(listTask, &listTaskAmmFim);
//prepareListTasksForTrainee(listTask);
//fillTree();
//waitAnimationWidget->hideWithStop();
emit signal_prepareFIMListItemsForTrainee(listTask);
}
}
}
@@ -343,12 +237,7 @@ void FIMtasksWidget::loadTasksFIM()
QByteArray arrayFIM = connectorToServer->getListTaskFimArray();
//loadFIMtasksFromXML(arrayFIM);
//собственно обновление дерева
//fillTree();
//waitAnimationWidget->hideWithStop();
emit signal_prepareFIMListItems(arrayFIM, &listTaskAmmFim);
emit signal_prepareFIMListItems(arrayFIM);
}
void FIMtasksWidget::slot_FIMlistItemsReady(QList<QTreeWidgetItem *> listItems)
@@ -361,21 +250,13 @@ void FIMtasksWidget::slot_FIMlistItemsReady(QList<QTreeWidgetItem *> listItems)
QTreeWidgetItem * item = treeWidget->topLevelItem(0);
if(item != nullptr)
{
treeWidget->setCurrentItem(item);
waitAnimationWidget->hideWithStop();
}
TaskAmmFim* FIMtasksWidget::getTaskByID(int id)
{
for(int i = 0; i < listTaskAmmFim.count(); i++)
{/*Задачи*/
TaskAmmFim* task = listTaskAmmFim.at(i);
if(task->id == id)
return task;
if(type == TypeListTreeAMMFIM::listOneTask)
treeWidget->expandAll();
}
return nullptr;
waitAnimationWidget->hideWithStop();
}
void FIMtasksWidget::preparationTreeWidget()
@@ -384,7 +265,7 @@ void FIMtasksWidget::preparationTreeWidget()
reSetHeadTreeWidget();
if(type == TypeList::listCommon || type == TypeList::listOneTask)
if(type == TypeListTreeAMMFIM::listCommon || type == TypeListTreeAMMFIM::listOneTask)
{
treeWidget->setColumnHidden(ColumnsTreeFIM::clmnFIM_ID, true);
treeWidget->setColumnHidden(ColumnsTreeFIM::clmnFIM_status, true);
@@ -395,7 +276,7 @@ void FIMtasksWidget::reSetHeadTreeWidget()
{
QStringList listHeaders;
if(type == TypeList::listForTrainee)
if(type == TypeListTreeAMMFIM::listForTrainee)
listHeaders = QStringList{tr("Task FIM"), tr("ID"), tr("Status")};
else
listHeaders = QStringList{tr("Title"), tr("ID"), tr("Status")};
@@ -403,11 +284,6 @@ void FIMtasksWidget::reSetHeadTreeWidget()
treeWidget->setHeaderLabels(listHeaders);
}
void FIMtasksWidget::on_btnUpdateTasks_clicked()
{
connectorToServer->sendQueryTasksXML("fim");
}
void FIMtasksWidget::assignTaskFIMtoTrainee()
{
QTreeWidgetItem *current = treeWidget->currentItem();
@@ -417,7 +293,7 @@ void FIMtasksWidget::assignTaskFIMtoTrainee()
int id = current->text(ColumnsTreeFIM::clmnFIM_ID).toInt();
TaskAmmFim* task = getTaskByID(id);
TaskAmmFim* task = taskTreePreparation->getTaskFIMbyID(id);
if(task)
{
@@ -440,7 +316,7 @@ void FIMtasksWidget::assignTaskFIMtoTrainee()
connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_ASSIGN_TASK_FIM_TO_TRAINEE, trainee_id, &taskNew);
updateTaskItem(current); //TODO ?
updateTaskItem(current);
}
}
@@ -476,7 +352,7 @@ void FIMtasksWidget::on_btnCheck_clicked()
int id = treeItemCurrent->text(ColumnsTreeFIM::clmnFIM_ID).toInt();
TaskAmmFim* task = getTaskByID(id);
TaskAmmFim* task = taskTreePreparation->getTaskFIMbyID(id);
DialogCheckTask dlg(connectorToServer, this);