diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp index 2a55d2b..f64fade 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp @@ -11,10 +11,17 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, QWidget *pa QWidget(parent), ui(new Ui::AMMtasksWidget), connectorToServer(connectorToServer), - loginTraineeSelected("") + treeWidget(nullptr), + loginTraineeSelected(""), + threadPreparation(nullptr), + threadAnimation(nullptr), + taskTreePreparation(nullptr), + waitAnimationWidget(nullptr) { ui->setupUi(this); + qDebug() << "AMMtasksWidget init thread ID " << QThread::currentThreadId(); + treeWidget = new QTreeWidget(); ui->horizontalLayout_1->addWidget(treeWidget); @@ -22,9 +29,7 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, QWidget *pa preparationTreeWidget(); - ui->btnAssignTaskToTrainee->setEnabled(false); - - qDebug() << "AMMtasksWidget init thread ID " << QThread::currentThreadId(); + ui->btnAssignTaskToTrainee->setEnabled(false); threadPreparation = new QThread(); taskTreePreparation = new TaskTreePreparation(); @@ -34,16 +39,17 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, QWidget *pa connect(this, &AMMtasksWidget::signal_prepareListItems, taskTreePreparation, &TaskTreePreparation::slot_prepareListItems); connect(taskTreePreparation, &TaskTreePreparation::signal_listItemsReady, this, &AMMtasksWidget::slot_listItemsReady); - waitAnimationWidget = new WaitAnimationWidget; + threadAnimation = new QThread(); + waitAnimationWidget = new WaitAnimationWidget; QMovie *movie = new QMovie(":/resources/icons/762.gif"); waitAnimationWidget->setParent(this); waitAnimationWidget->initialize(movie,this); - waitAnimationWidget->moveToThread(threadPreparation); + waitAnimationWidget->moveToThread(threadAnimation); + threadAnimation->start(); } AMMtasksWidget::~AMMtasksWidget() { - deleteAllModuls(); delete ui; } @@ -109,10 +115,8 @@ void AMMtasksWidget::loadTasksAMM() waitAnimationWidget->showWithPlay(); QByteArray array = connectorToServer->getListTaskAmmArray(); - loadAMMtasksFromXML(array); - //fillTree(); - signal_prepareListItems(listAllModules); + signal_prepareListItems(array, &listAllModules); } void AMMtasksWidget::slot_listItemsReady(QList listItems) @@ -121,141 +125,11 @@ void AMMtasksWidget::slot_listItemsReady(QList listItems) treeWidget->clear(); for(QTreeWidgetItem * item : listItems) - { treeWidget->addTopLevelItem(item); - } waitAnimationWidget->hideWithStop(); } -void AMMtasksWidget::domElementParser(QDomElement element, Module* moduleParent) -{ - QString name; - - QDomElement childElement = element.firstChildElement(); - if(childElement.isNull()) - return; - - Module* module = nullptr; - - do - { - name = childElement.nodeName(); - - QDomNamedNodeMap nodeMap = childElement.attributes(); - - if(name == "pm") - { - module = new PM(); - PM* PMmodul = static_cast(module); - - PMmodul->initialize(nodeMap.namedItem("modelIdentCode").nodeValue(), - nodeMap.namedItem("pmIssuer").nodeValue(), - nodeMap.namedItem("pmNumber").nodeValue(), - nodeMap.namedItem("pmVolume").nodeValue()); - - if(moduleParent) - { - PMmodul->setParentModule(moduleParent); - - PM* PMmodulParent = static_cast(moduleParent); - PMmodulParent->addChildModule(module); - } - } - else if(name == "dm") - { - module = new DM(); - DM* DMmodul = static_cast(module); - - DMmodul->initialize(nodeMap.namedItem("modelIdentCode").nodeValue(), - nodeMap.namedItem("systemDiffCode").nodeValue(), - nodeMap.namedItem("systemCode").nodeValue(), - nodeMap.namedItem("subSystemCode").nodeValue(), - nodeMap.namedItem("subSubSystemCode").nodeValue(), - nodeMap.namedItem("assyCode").nodeValue(), - nodeMap.namedItem("disassyCode").nodeValue(), - nodeMap.namedItem("disassyCodeVariant").nodeValue(), - nodeMap.namedItem("infoCode").nodeValue(), - nodeMap.namedItem("infoCodeVariant").nodeValue(), - nodeMap.namedItem("itemLocationCode").nodeValue()); - - if(moduleParent) - { - DMmodul->setParentModule(moduleParent); - - PM* PMmodulParent = static_cast(moduleParent); - PMmodulParent->addChildModule(module); - } - } - else if(name == "rus" || name == "eng") - { - if(moduleParent) - { - if(moduleParent->getType() == ModuleType::TYPE_PM) - {//PM - PM* PMmodulParent = static_cast(moduleParent); - - if(name == "rus") - PMmodulParent->setLangStructRus(nodeMap.namedItem("title").nodeValue()); - else - PMmodulParent->setLangStructEng(nodeMap.namedItem("title").nodeValue()); - } - else - {//DM - DM* DMmodulParent = static_cast(moduleParent); - - if(name == "rus") - DMmodulParent->setLangStructRus(nodeMap.namedItem("techName").nodeValue(), - nodeMap.namedItem("infoName").nodeValue(), - nodeMap.namedItem("pdf").nodeValue(), - nodeMap.namedItem("bookmark").nodeValue(), - nodeMap.namedItem("xml").nodeValue()); - else - DMmodulParent->setLangStructEng(nodeMap.namedItem("techName").nodeValue(), - nodeMap.namedItem("infoName").nodeValue(), - nodeMap.namedItem("pdf").nodeValue(), - nodeMap.namedItem("bookmark").nodeValue(), - nodeMap.namedItem("xml").nodeValue()); - } - } - - } - - domElementParser(childElement, module); - - if(moduleParent == nullptr) - listAllModules.append(module); - - }while (! (childElement = childElement.nextSiblingElement()).isNull()); -} - -void AMMtasksWidget::loadAMMtasksFromXML(QByteArray array) -{ - deleteAllModuls(); - - QDomDocument docTasksDOM; - - docTasksDOM.setContent(array); - - QDomElement manifestElement = docTasksDOM.firstChildElement("manifest"); - if(manifestElement.isNull()) - return; - - domElementParser(manifestElement, nullptr); -} - -void AMMtasksWidget::deleteAllModuls() -{ - for(Module* module: listAllModules) - { - if(module->getType() == ModuleType::TYPE_PM) - delete static_cast(module); - else - delete static_cast(module); - } - listAllModules.clear(); -} - Module *AMMtasksWidget::searchModuleByID(int id) { Module* ptrModule = nullptr; @@ -288,63 +162,6 @@ void AMMtasksWidget::reSetHeadTreeWidget() treeWidget->setHeaderLabels(listHeaders); } -void AMMtasksWidget::fillTree() -{ - //Обновление дерева - treeWidget->clear(); - - for(Module* module : listAllModules) - { - QTreeWidgetItem* item = addModuleToTreeWidget(module); - treeWidget->addTopLevelItem(item); - } -} - -QTreeWidgetItem* AMMtasksWidget::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(ColumnsTree::clmn_PMorDM, text); - itemModule->setText(ColumnsTree::clmn_ID, ID); - - return itemModule; -} - - void AMMtasksWidget::on_btnUpdateTasks_clicked() { connectorToServer->sendQueryTasksXML("amm"); diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.h b/InstructorsAndTrainees/tasks/ammtaskswidget.h index 72b9175..73f8fa1 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.h +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.h @@ -38,7 +38,6 @@ public: private Q_SLOTS: void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); void on_btnUpdateTasks_clicked(); - void on_btnAssignTaskToTrainee_clicked(); public Q_SLOTS: @@ -48,21 +47,13 @@ public Q_SLOTS: void slot_traineeSelected(QString login); private: - void loadAMMtasksFromXML(QByteArray array); - void domElementParser(QDomElement element, Module* moduleParent); - void deleteAllModuls(); Module* searchModuleByID(int id); - void preparationTreeWidget(); void reSetHeadTreeWidget(); - - void fillTree(); - QTreeWidgetItem* addModuleToTreeWidget(Module* module, QTreeWidgetItem* parentItem = nullptr); - void loadTasksAMM(); Q_SIGNALS: - void signal_prepareListItems(QList listAllModules); + void signal_prepareListItems(QByteArray array, QList* listAllModules); public Q_SLOTS: void slot_listItemsReady(QList listItems); @@ -76,6 +67,7 @@ private: QString loginTraineeSelected; QThread* threadPreparation; + QThread* threadAnimation; TaskTreePreparation* taskTreePreparation; WaitAnimationWidget *waitAnimationWidget; }; diff --git a/InstructorsAndTrainees/tasks/tasktreepreparation.cpp b/InstructorsAndTrainees/tasks/tasktreepreparation.cpp index fe42925..e749139 100644 --- a/InstructorsAndTrainees/tasks/tasktreepreparation.cpp +++ b/InstructorsAndTrainees/tasks/tasktreepreparation.cpp @@ -2,11 +2,18 @@ #include #include "tasktreepreparation.h" -TaskTreePreparation::TaskTreePreparation(QObject *parent) : QObject(parent) +TaskTreePreparation::TaskTreePreparation(QObject *parent) : + QObject(parent), + listAllModules(nullptr) { qDebug() << "TaskTreePreparation init thread ID " << QThread::currentThreadId(); } +TaskTreePreparation::~TaskTreePreparation() +{ + deleteAllModuls(); +} + QTreeWidgetItem *TaskTreePreparation::addModuleToTreeWidget(Module *module, QTreeWidgetItem *parentItem) { QTreeWidgetItem* itemModule = nullptr; @@ -14,16 +21,10 @@ QTreeWidgetItem *TaskTreePreparation::addModuleToTreeWidget(Module *module, QTre QString text; QString ID = QString::number(module->getID()); + itemModule = new QTreeWidgetItem(); + if(parentItem) - { - itemModule = new QTreeWidgetItem(); parentItem->addChild(itemModule); - } - else - { - //itemModule = new QTreeWidgetItem(treeWidget); - itemModule = new QTreeWidgetItem(); - } if(module->getType() == ModuleType::TYPE_PM) { @@ -51,13 +52,148 @@ QTreeWidgetItem *TaskTreePreparation::addModuleToTreeWidget(Module *module, QTre return itemModule; } -void TaskTreePreparation::slot_prepareListItems(QList listAllModules) +void TaskTreePreparation::loadAMMtasksFromXML(QByteArray array) +{ + deleteAllModuls(); + + QDomDocument docTasksDOM; + + docTasksDOM.setContent(array); + + QDomElement manifestElement = docTasksDOM.firstChildElement("manifest"); + if(manifestElement.isNull()) + return; + + domElementParser(manifestElement, nullptr); +} + +void TaskTreePreparation::deleteAllModuls() +{ + if(listAllModules == nullptr) + return; + + for(Module* module: *listAllModules) + { + if(module->getType() == ModuleType::TYPE_PM) + delete static_cast(module); + else + delete static_cast(module); + } + listAllModules->clear(); +} + +void TaskTreePreparation::domElementParser(QDomElement element, Module* moduleParent) +{ + QString name; + + QDomElement childElement = element.firstChildElement(); + if(childElement.isNull()) + return; + + Module* module = nullptr; + + do + { + name = childElement.nodeName(); + + QDomNamedNodeMap nodeMap = childElement.attributes(); + + if(name == "pm") + { + module = new PM(); + PM* PMmodul = static_cast(module); + + PMmodul->initialize(nodeMap.namedItem("modelIdentCode").nodeValue(), + nodeMap.namedItem("pmIssuer").nodeValue(), + nodeMap.namedItem("pmNumber").nodeValue(), + nodeMap.namedItem("pmVolume").nodeValue()); + + if(moduleParent) + { + PMmodul->setParentModule(moduleParent); + + PM* PMmodulParent = static_cast(moduleParent); + PMmodulParent->addChildModule(module); + } + } + else if(name == "dm") + { + module = new DM(); + DM* DMmodul = static_cast(module); + + DMmodul->initialize(nodeMap.namedItem("modelIdentCode").nodeValue(), + nodeMap.namedItem("systemDiffCode").nodeValue(), + nodeMap.namedItem("systemCode").nodeValue(), + nodeMap.namedItem("subSystemCode").nodeValue(), + nodeMap.namedItem("subSubSystemCode").nodeValue(), + nodeMap.namedItem("assyCode").nodeValue(), + nodeMap.namedItem("disassyCode").nodeValue(), + nodeMap.namedItem("disassyCodeVariant").nodeValue(), + nodeMap.namedItem("infoCode").nodeValue(), + nodeMap.namedItem("infoCodeVariant").nodeValue(), + nodeMap.namedItem("itemLocationCode").nodeValue()); + + if(moduleParent) + { + DMmodul->setParentModule(moduleParent); + + PM* PMmodulParent = static_cast(moduleParent); + PMmodulParent->addChildModule(module); + } + } + else if(name == "rus" || name == "eng") + { + if(moduleParent) + { + if(moduleParent->getType() == ModuleType::TYPE_PM) + {//PM + PM* PMmodulParent = static_cast(moduleParent); + + if(name == "rus") + PMmodulParent->setLangStructRus(nodeMap.namedItem("title").nodeValue()); + else + PMmodulParent->setLangStructEng(nodeMap.namedItem("title").nodeValue()); + } + else + {//DM + DM* DMmodulParent = static_cast(moduleParent); + + if(name == "rus") + DMmodulParent->setLangStructRus(nodeMap.namedItem("techName").nodeValue(), + nodeMap.namedItem("infoName").nodeValue(), + nodeMap.namedItem("pdf").nodeValue(), + nodeMap.namedItem("bookmark").nodeValue(), + nodeMap.namedItem("xml").nodeValue()); + else + DMmodulParent->setLangStructEng(nodeMap.namedItem("techName").nodeValue(), + nodeMap.namedItem("infoName").nodeValue(), + nodeMap.namedItem("pdf").nodeValue(), + nodeMap.namedItem("bookmark").nodeValue(), + nodeMap.namedItem("xml").nodeValue()); + } + } + + } + + domElementParser(childElement, module); + + if(moduleParent == nullptr) + listAllModules->append(module); + + }while (! (childElement = childElement.nextSiblingElement()).isNull()); +} + +void TaskTreePreparation::slot_prepareListItems(QByteArray array, QList* listAllModules) { qDebug() << "TaskTreePreparation::slot_prepareListItems thread ID " << QThread::currentThreadId(); + this->listAllModules = listAllModules; + + loadAMMtasksFromXML(array); + listItems.clear(); - for(Module* module : listAllModules) + for(Module* module : *this->listAllModules) { QTreeWidgetItem* item = addModuleToTreeWidget(module); listItems.append(item); diff --git a/InstructorsAndTrainees/tasks/tasktreepreparation.h b/InstructorsAndTrainees/tasks/tasktreepreparation.h index 3c5bdb0..1f9bc31 100644 --- a/InstructorsAndTrainees/tasks/tasktreepreparation.h +++ b/InstructorsAndTrainees/tasks/tasktreepreparation.h @@ -3,6 +3,7 @@ #include #include +#include #include "module.h" class TaskTreePreparation : public QObject @@ -10,18 +11,23 @@ class TaskTreePreparation : public QObject Q_OBJECT public: explicit TaskTreePreparation(QObject *parent = nullptr); + ~TaskTreePreparation(); -public: +private: QTreeWidgetItem* addModuleToTreeWidget(Module* module, QTreeWidgetItem* parentItem = nullptr); + void loadAMMtasksFromXML(QByteArray array); + void domElementParser(QDomElement element, Module* moduleParent); + void deleteAllModuls(); public Q_SLOTS: - void slot_prepareListItems(QList listAllModules); + void slot_prepareListItems(QByteArray array, QList* listAllModules); Q_SIGNALS: void signal_listItemsReady(QList listItems); private: QList listItems; + QList* listAllModules; }; #endif // TASKTREEPREPARATION_H