diff --git a/DB_IaT/InstructorsAndTrainees/docTasks/doctaskswidget.cpp b/DB_IaT/InstructorsAndTrainees/docTasks/doctaskswidget.cpp new file mode 100644 index 0000000..f0c5fa2 --- /dev/null +++ b/DB_IaT/InstructorsAndTrainees/docTasks/doctaskswidget.cpp @@ -0,0 +1,176 @@ +#include +#include +#include +#include +#include "doctaskswidget.h" +#include "ui_doctaskswidget.h" + +DocTasksWidget::DocTasksWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::DocTasksWidget) +{ + ui->setupUi(this); + treeWidget = new QTreeWidget(); + ui->horizontalLayout_2->addWidget(treeWidget); + treeWidget->setStyleSheet(QStringLiteral("font-size: 10pt;" + "font-family: Tahoma;")); + + loadDocTasksFromXML(); +} + +DocTasksWidget::~DocTasksWidget() +{ + deleteAllModuls(); + delete ui; +} + +void DocTasksWidget::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") + { + QString modelIdentCode = nodeMap.namedItem("modelIdentCode").nodeValue(); + QString pmIssuer = nodeMap.namedItem("pmIssuer").nodeValue(); + QString pmNumber = nodeMap.namedItem("pmNumber").nodeValue(); + QString pmVolume = nodeMap.namedItem("pmVolume").nodeValue(); + + module = new PM(); + + PM* PMmodul = static_cast(module); + + PMmodul->initialize(modelIdentCode, pmIssuer, pmNumber, pmVolume); + + if(moduleParent) + { + PM* PMmodulParent = static_cast(moduleParent); + PMmodulParent->addChildModule(module); + } + } + else if(name == "dm") + { + QString modelIdentCode = nodeMap.namedItem("modelIdentCode").nodeValue(); + QString systemDiffCode = nodeMap.namedItem("systemDiffCode").nodeValue(); + QString systemCode = nodeMap.namedItem("systemCode").nodeValue(); + QString subSystemCode = nodeMap.namedItem("subSystemCode").nodeValue(); + QString subSubSystemCode = nodeMap.namedItem("subSubSystemCode").nodeValue(); + QString assyCode = nodeMap.namedItem("assyCode").nodeValue(); + QString disassyCode = nodeMap.namedItem("disassyCode").nodeValue(); + QString disassyCodeVariant = nodeMap.namedItem("disassyCodeVariant").nodeValue(); + QString infoCode = nodeMap.namedItem("infoCode").nodeValue(); + QString infoCodeVariant = nodeMap.namedItem("infoCodeVariant").nodeValue(); + QString itemLocationCode = nodeMap.namedItem("itemLocationCode").nodeValue(); + + module = new DM(); + + DM* PMmodul = static_cast(module); + + PMmodul->initialize(modelIdentCode, + systemDiffCode, + systemCode, + subSystemCode, + subSubSystemCode, + assyCode, + disassyCode, + disassyCodeVariant, + infoCode, + infoCodeVariant, + itemLocationCode); + + if(moduleParent) + { + PM* PMmodulParent = static_cast(moduleParent); + PMmodulParent->addChildModule(module); + } + } + else if(name == "rus" || name == "eng") + { + if(moduleParent) + { + if(moduleParent->getType() == ModuleType::TYPE_PM) + {//PM + QString title = nodeMap.namedItem("title").nodeValue(); + + PM* PMmodulParent = static_cast(moduleParent); + + if(name == "rus") + PMmodulParent->setLangStructRus(title); + else + PMmodulParent->setLangStructEng(title); + } + else + {//DM + QString techName = nodeMap.namedItem("techName").nodeValue(); + QString infoName = nodeMap.namedItem("infoName").nodeValue(); + QString pdf = nodeMap.namedItem("pdf").nodeValue(); + QString bookmark = nodeMap.namedItem("bookmark").nodeValue(); + QString xml = nodeMap.namedItem("xml").nodeValue(); + + DM* DMmodulParent = static_cast(moduleParent); + + if(name == "rus") + DMmodulParent->setLangStructRus(techName, infoName, pdf, bookmark, xml); + else + DMmodulParent->setLangStructEng(techName, infoName, pdf, bookmark, xml); + } + } + + } + + DomElementParser(childElement, module); + + if(moduleParent == nullptr) + listAllModules.append(module); + + }while (! (childElement = childElement.nextSiblingElement()).isNull()); +} + +void DocTasksWidget::loadDocTasksFromXML() +{ + QDomDocument docTasksDOM; + QString xmlFileName = "./docs.xml"; + QFile xmlInFile(xmlFileName); + if (!xmlInFile.open(QFile::ReadOnly | QFile::Text)) + { + QMessageBox::critical(nullptr, tr("Attention!"), tr("The file could not be opened ") + xmlFileName); + return; + } + else + { + docTasksDOM.setContent(xmlInFile.readAll()); + xmlInFile.close(); + + QDomElement manifestElement = docTasksDOM.firstChildElement("manifest"); + if(manifestElement.isNull()) + return; + + deleteAllModuls(); + + DomElementParser(manifestElement, nullptr); + } +} + +void DocTasksWidget::deleteAllModuls() +{ + for(Module* module: listAllModules) + { + if(module->getType() == ModuleType::TYPE_PM) + delete static_cast(module); + else + delete static_cast(module); + } + listAllModules.clear(); +} + diff --git a/DB_IaT/InstructorsAndTrainees/docTasks/doctaskswidget.h b/DB_IaT/InstructorsAndTrainees/docTasks/doctaskswidget.h new file mode 100644 index 0000000..92dd9c7 --- /dev/null +++ b/DB_IaT/InstructorsAndTrainees/docTasks/doctaskswidget.h @@ -0,0 +1,34 @@ +#ifndef DOCTASKSWIDGET_H +#define DOCTASKSWIDGET_H + +#include +#include +#include +#include "module.h" + +namespace Ui { +class DocTasksWidget; +} + +class DocTasksWidget : public QWidget +{ + Q_OBJECT + +public: + explicit DocTasksWidget(QWidget *parent = nullptr); + ~DocTasksWidget(); + +private: + void DomElementParser(QDomElement element, Module* moduleParent); + void loadDocTasksFromXML(); + + void deleteAllModuls(); + +private: + Ui::DocTasksWidget *ui; + QTreeWidget* treeWidget; + + QList listAllModules; +}; + +#endif // DOCTASKSWIDGET_H diff --git a/DB_IaT/InstructorsAndTrainees/docTasks/doctaskswidget.ui b/DB_IaT/InstructorsAndTrainees/docTasks/doctaskswidget.ui new file mode 100644 index 0000000..eb6c97c --- /dev/null +++ b/DB_IaT/InstructorsAndTrainees/docTasks/doctaskswidget.ui @@ -0,0 +1,43 @@ + + + DocTasksWidget + + + + 0 + 0 + 400 + 300 + + + + + Tahoma + 10 + + + + Form + + + + + + + + Document + + + + + + + + + + + + + + + diff --git a/DB_IaT/InstructorsAndTrainees/docTasks/module.cpp b/DB_IaT/InstructorsAndTrainees/docTasks/module.cpp new file mode 100644 index 0000000..797e563 --- /dev/null +++ b/DB_IaT/InstructorsAndTrainees/docTasks/module.cpp @@ -0,0 +1,124 @@ +#include "module.h" + +Module::Module(): + type (ModuleType::TYPE_PM), + parentModule(nullptr) +{ + +} + +Module::~Module() +{ + +} + + + +PM::PM(): + modelIdentCode (""), + pmIssuer (""), + pmNumber (""), + pmVolume ("") +{ + type = ModuleType::TYPE_PM; + + langRus.title = ""; + langEng.title = ""; +} + +PM::~PM() +{ + for(Module* module: listChildModules) + { + if(module->getType() == ModuleType::TYPE_PM) + delete static_cast(module); + else + delete static_cast(module); + } + listChildModules.clear(); +} + +void PM::initialize(QString modelIdentCode, QString pmIssuer, QString pmNumber, QString pmVolume) +{ + this->modelIdentCode = modelIdentCode; + this->pmIssuer = pmIssuer; + this->pmNumber = pmNumber; + this->pmVolume = pmVolume; +} + +void PM::setLangStructRus(QString title) +{ + langRus.title = title; +} + +void PM::setLangStructEng(QString title) +{ + langEng.title = title; +} + +void PM::addChildModule(Module *childModule) +{ + listChildModules.append(childModule); +} + + + +DM::DM(): + modelIdentCode (""), + systemDiffCode (""), + systemCode (""), + subSystemCode (""), + subSubSystemCode (""), + assyCode (""), + disassyCode (""), + disassyCodeVariant (""), + infoCode (""), + infoCodeVariant (""), + itemLocationCode ("") +{ + type = ModuleType::TYPE_DM; + + setLangStructRus("", "", "", "", ""); + setLangStructEng("", "", "", "", ""); +} + +DM::~DM() +{ + +} + +void DM::initialize(QString modelIdentCode, QString systemDiffCode, QString systemCode, + QString subSystemCode, QString subSubSystemCode, QString assyCode, + QString disassyCode, QString disassyCodeVariant, QString infoCode, + QString infoCodeVariant, QString itemLocationCode) +{ + this->modelIdentCode = modelIdentCode; + this->systemDiffCode = systemDiffCode; + this->systemCode = systemCode; + this->subSystemCode = subSystemCode; + this->subSubSystemCode = subSubSystemCode; + this->assyCode = assyCode; + this->disassyCode = disassyCode; + this->disassyCodeVariant = disassyCodeVariant; + this->infoCode = infoCode; + this->infoCodeVariant = infoCodeVariant; + this->itemLocationCode = itemLocationCode; +} + +void DM::setLangStructRus(QString techName, QString infoName, QString pdf, QString bookmark, QString xml) +{ + langRus.techName = techName; + langRus.infoName = infoName; + langRus.pdf = pdf; + langRus.bookmark = bookmark; + langRus.xml = xml; +} + +void DM::setLangStructEng(QString techName, QString infoName, QString pdf, QString bookmark, QString xml) +{ + langEng.techName = techName; + langEng.infoName = infoName; + langEng.pdf = pdf; + langEng.bookmark = bookmark; + langEng.xml = xml; +} diff --git a/DB_IaT/InstructorsAndTrainees/docTasks/module.h b/DB_IaT/InstructorsAndTrainees/docTasks/module.h new file mode 100644 index 0000000..8c04bf6 --- /dev/null +++ b/DB_IaT/InstructorsAndTrainees/docTasks/module.h @@ -0,0 +1,106 @@ +#ifndef MODULE_H +#define MODULE_H +#include +#include + +enum ModuleType +{ + TYPE_PM = 0, + TYPE_DM = 1 +}; + +class Module +{ +public: + Module(); + ~Module(); + + ModuleType getType(){ return type; }; + void setParentModule(Module* parentModule){ this->parentModule = parentModule; }; + +protected: + ModuleType type; + Module* parentModule; +}; + + +class PM : public Module +{ +public: + struct pmLangStruct + { + QString title; + }; + +public: + PM(); + ~PM(); + +public: + void initialize(QString modelIdentCode, QString pmIssuer, QString pmNumber, QString pmVolume); + void setLangStructRus(QString title); + void setLangStructEng(QString title); + void addChildModule(Module* childModule); + +private: + QString modelIdentCode; + QString pmIssuer; + QString pmNumber; + QString pmVolume; + + pmLangStruct langRus; + pmLangStruct langEng; + + QList listChildModules; +}; + + +class DM : public Module +{ +public: + struct dmLangStruct + { + QString techName; + QString infoName; + QString pdf; + QString bookmark; + QString xml; + }; + +public: + DM(); + ~DM(); + +public: + void initialize(QString modelIdentCode, + QString systemDiffCode, + QString systemCode, + QString subSystemCode, + QString subSubSystemCode, + QString assyCode, + QString disassyCode, + QString disassyCodeVariant, + QString infoCode, + QString infoCodeVariant, + QString itemLocationCode); + void setLangStructRus(QString techName, QString infoName, QString pdf, QString bookmark, QString xml); + void setLangStructEng(QString techName, QString infoName, QString pdf, QString bookmark, QString xml); + +private: + QString modelIdentCode; + QString systemDiffCode; + QString systemCode; + QString subSystemCode; + QString subSubSystemCode; + QString assyCode; + QString disassyCode; + QString disassyCodeVariant; + QString infoCode; + QString infoCodeVariant; + QString itemLocationCode; + + dmLangStruct langRus; + dmLangStruct langEng; +}; + +#endif // MODULE_H diff --git a/DB_IaT/InstructorsAndTrainees/icons/docTasks.png b/DB_IaT/InstructorsAndTrainees/icons/docTasks.png new file mode 100644 index 0000000..6c9248d Binary files /dev/null and b/DB_IaT/InstructorsAndTrainees/icons/docTasks.png differ