diff --git a/InstructorsAndTrainees/CMakeLists.txt b/InstructorsAndTrainees/CMakeLists.txt index cae50e6..ad4daa0 100644 --- a/InstructorsAndTrainees/CMakeLists.txt +++ b/InstructorsAndTrainees/CMakeLists.txt @@ -78,6 +78,8 @@ add_library(InstructorsAndTrainees SHARED tasks/fimtaskswidget.cpp tasks/fimtaskswidget.h tasks/fimtaskswidget.ui + tasks/tasktreepreparation.cpp + tasks/tasktreepreparation.h #tasks/tasksAmmFim.cpp #tasks/tasksAmmFim.h widgets/newversionwidget.cpp diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index 58ada8d..9ca8258 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -27,6 +27,8 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : qRegisterMetaType>("QList"); qRegisterMetaType>("QList"); qRegisterMetaType>("QList"); + qRegisterMetaType>("QList"); + qRegisterMetaType>("QList"); qDebug() << "InstructorsAndTraineesWidget init thread ID " << QThread::currentThreadId(); diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.h b/InstructorsAndTrainees/instructorsandtraineeswidget.h index 8488a5b..881a8f0 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.h +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.h @@ -16,6 +16,9 @@ Q_DECLARE_METATYPE(QList) Q_DECLARE_METATYPE(QList) Q_DECLARE_METATYPE(QList) Q_DECLARE_METATYPE(QList) +Q_DECLARE_METATYPE(QList) +Q_DECLARE_METATYPE(QList) + namespace Ui { class InstructorsAndTraineesWidget; diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp index 401d927..2a55d2b 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "ammtaskswidget.h" #include "ui_ammtaskswidget.h" @@ -24,6 +25,20 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, QWidget *pa ui->btnAssignTaskToTrainee->setEnabled(false); qDebug() << "AMMtasksWidget init thread ID " << QThread::currentThreadId(); + + threadPreparation = new QThread(); + taskTreePreparation = new TaskTreePreparation(); + taskTreePreparation->moveToThread(threadPreparation); + threadPreparation->start(); + threadPreparation->setPriority(QThread::HighestPriority); + connect(this, &AMMtasksWidget::signal_prepareListItems, taskTreePreparation, &TaskTreePreparation::slot_prepareListItems); + connect(taskTreePreparation, &TaskTreePreparation::signal_listItemsReady, this, &AMMtasksWidget::slot_listItemsReady); + + waitAnimationWidget = new WaitAnimationWidget; + QMovie *movie = new QMovie(":/resources/icons/762.gif"); + waitAnimationWidget->setParent(this); + waitAnimationWidget->initialize(movie,this); + waitAnimationWidget->moveToThread(threadPreparation); } AMMtasksWidget::~AMMtasksWidget() @@ -32,6 +47,12 @@ AMMtasksWidget::~AMMtasksWidget() delete ui; } +void AMMtasksWidget::resizeEvent(QResizeEvent *event) +{ + QSize size = event->size(); + waitAnimationWidget->resize(size); +} + void AMMtasksWidget::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) { if(current == nullptr) @@ -85,10 +106,26 @@ void AMMtasksWidget::loadTasksAMM() //Обновление дерева treeWidget->clear(); + waitAnimationWidget->showWithPlay(); + QByteArray array = connectorToServer->getListTaskAmmArray(); loadAMMtasksFromXML(array); - fillTree(); + //fillTree(); + signal_prepareListItems(listAllModules); +} + +void AMMtasksWidget::slot_listItemsReady(QList listItems) +{ + //Обновление дерева + treeWidget->clear(); + + for(QTreeWidgetItem * item : listItems) + { + treeWidget->addTopLevelItem(item); + } + + waitAnimationWidget->hideWithStop(); } void AMMtasksWidget::domElementParser(QDomElement element, Module* moduleParent) @@ -258,11 +295,12 @@ void AMMtasksWidget::fillTree() for(Module* module : listAllModules) { - addModuleToTreeWidget(module); + QTreeWidgetItem* item = addModuleToTreeWidget(module); + treeWidget->addTopLevelItem(item); } } -void AMMtasksWidget::addModuleToTreeWidget(Module *module, QTreeWidgetItem* parentItem) +QTreeWidgetItem* AMMtasksWidget::addModuleToTreeWidget(Module *module, QTreeWidgetItem* parentItem) { QTreeWidgetItem* itemModule = nullptr; @@ -276,7 +314,8 @@ void AMMtasksWidget::addModuleToTreeWidget(Module *module, QTreeWidgetItem* pare } else { - itemModule = new QTreeWidgetItem(treeWidget); + //itemModule = new QTreeWidgetItem(treeWidget); + itemModule = new QTreeWidgetItem(); } if(module->getType() == ModuleType::TYPE_PM) @@ -301,6 +340,8 @@ void AMMtasksWidget::addModuleToTreeWidget(Module *module, QTreeWidgetItem* pare itemModule->setText(ColumnsTree::clmn_PMorDM, text); itemModule->setText(ColumnsTree::clmn_ID, ID); + + return itemModule; } diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.h b/InstructorsAndTrainees/tasks/ammtaskswidget.h index 2a34414..72b9175 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.h +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.h @@ -6,6 +6,7 @@ #include #include "module.h" #include "connectortoserver.h" +#include "taskTreePreparation.h" namespace Ui { class AMMtasksWidget; @@ -31,6 +32,9 @@ public: treeWidget->clear(); } +public: + void resizeEvent(QResizeEvent *event) override; + private Q_SLOTS: void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); void on_btnUpdateTasks_clicked(); @@ -53,10 +57,15 @@ private: void reSetHeadTreeWidget(); void fillTree(); - void addModuleToTreeWidget(Module* module, QTreeWidgetItem* parentItem = nullptr); + QTreeWidgetItem* addModuleToTreeWidget(Module* module, QTreeWidgetItem* parentItem = nullptr); void loadTasksAMM(); +Q_SIGNALS: + void signal_prepareListItems(QList listAllModules); +public Q_SLOTS: + void slot_listItemsReady(QList listItems); + private: Ui::AMMtasksWidget *ui; ConnectorToServer* connectorToServer; @@ -65,6 +74,10 @@ private: private: QList listAllModules; QString loginTraineeSelected; + + QThread* threadPreparation; + TaskTreePreparation* taskTreePreparation; + WaitAnimationWidget *waitAnimationWidget; }; #endif // AMMTASKSWIDGET_H diff --git a/InstructorsAndTrainees/tasks/tasktreepreparation.cpp b/InstructorsAndTrainees/tasks/tasktreepreparation.cpp new file mode 100644 index 0000000..fe42925 --- /dev/null +++ b/InstructorsAndTrainees/tasks/tasktreepreparation.cpp @@ -0,0 +1,67 @@ +#include +#include +#include "tasktreepreparation.h" + +TaskTreePreparation::TaskTreePreparation(QObject *parent) : QObject(parent) +{ + qDebug() << "TaskTreePreparation init thread ID " << QThread::currentThreadId(); +} + +QTreeWidgetItem *TaskTreePreparation::addModuleToTreeWidget(Module *module, QTreeWidgetItem *parentItem) +{ + QTreeWidgetItem* itemModule = nullptr; + + QString text; + QString ID = QString::number(module->getID()); + + if(parentItem) + { + itemModule = new QTreeWidgetItem(); + parentItem->addChild(itemModule); + } + else + { + //itemModule = new QTreeWidgetItem(treeWidget); + itemModule = new QTreeWidgetItem(); + } + + if(module->getType() == ModuleType::TYPE_PM) + { + PM* PMmodul = static_cast(module); + text = PMmodul->getLangStructRus().title; + + for(Module* module : PMmodul->getListChildModules()) + { + addModuleToTreeWidget(module, itemModule); + } + } + else + { + DM* DMmodul = static_cast(module); + text = DMmodul->getLangStructRus().techName; + + //itemModule->setFlags(itemModule->flags() | Qt::ItemIsUserCheckable); + //itemModule->setCheckState(0, Qt::Checked); + itemModule->setIcon(0, QIcon(":/resources/icons/procedure.png")); + } + + itemModule->setText(0, text); + itemModule->setText(1, ID); + + return itemModule; +} + +void TaskTreePreparation::slot_prepareListItems(QList listAllModules) +{ + qDebug() << "TaskTreePreparation::slot_prepareListItems thread ID " << QThread::currentThreadId(); + + listItems.clear(); + + for(Module* module : listAllModules) + { + QTreeWidgetItem* item = addModuleToTreeWidget(module); + listItems.append(item); + } + + Q_EMIT signal_listItemsReady(listItems); +} diff --git a/InstructorsAndTrainees/tasks/tasktreepreparation.h b/InstructorsAndTrainees/tasks/tasktreepreparation.h new file mode 100644 index 0000000..3c5bdb0 --- /dev/null +++ b/InstructorsAndTrainees/tasks/tasktreepreparation.h @@ -0,0 +1,27 @@ +#ifndef TASKTREEPREPARATION_H +#define TASKTREEPREPARATION_H + +#include +#include +#include "module.h" + +class TaskTreePreparation : public QObject +{ + Q_OBJECT +public: + explicit TaskTreePreparation(QObject *parent = nullptr); + +public: + QTreeWidgetItem* addModuleToTreeWidget(Module* module, QTreeWidgetItem* parentItem = nullptr); + +public Q_SLOTS: + void slot_prepareListItems(QList listAllModules); + +Q_SIGNALS: + void signal_listItemsReady(QList listItems); + +private: + QList listItems; +}; + +#endif // TASKTREEPREPARATION_H diff --git a/InstructorsAndTrainees/widgets/waitanimationwidget.cpp b/InstructorsAndTrainees/widgets/waitanimationwidget.cpp index 547a79f..f226429 100644 --- a/InstructorsAndTrainees/widgets/waitanimationwidget.cpp +++ b/InstructorsAndTrainees/widgets/waitanimationwidget.cpp @@ -29,6 +29,11 @@ void WaitAnimationWidget::hideWithStop() loadingMovie->stop(); } +void WaitAnimationWidget::resize(QSize size) +{ + setFixedSize(size); +} + WaitAnimationWidget::~WaitAnimationWidget() { delete ui; diff --git a/InstructorsAndTrainees/widgets/waitanimationwidget.h b/InstructorsAndTrainees/widgets/waitanimationwidget.h index e9ea6a9..827ee99 100644 --- a/InstructorsAndTrainees/widgets/waitanimationwidget.h +++ b/InstructorsAndTrainees/widgets/waitanimationwidget.h @@ -17,6 +17,7 @@ public: void initialize(QMovie *movie,QWidget *parent); void showWithPlay(); void hideWithStop(); + void resize(QSize size); ~WaitAnimationWidget(); private: