diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index 2f8aaa0..3111686 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -30,6 +30,9 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) : { ui->setupUi(this); + //Пока не нужно + ui->btnTasksCommon->setVisible(false); + qDebug() << "InstructorsAndTraineesWidget init thread ID " << QThread::currentThreadId(); ui->widget_Control->setObjectName("widgetControl"); diff --git a/ServerLMS/Systems/commonclienthandler.cpp b/ServerLMS/Systems/commonclienthandler.cpp index fe89c80..aef79fd 100644 --- a/ServerLMS/Systems/commonclienthandler.cpp +++ b/ServerLMS/Systems/commonclienthandler.cpp @@ -148,23 +148,21 @@ void CommonClientHandler::slot_DocsChanged() { ClientHandler *handler = clientsMap->value(idSocket); - //Проверяем, есть ли клиенты TYPE_GUI - if(handler->getClient()->getTypeClient() == TypeClientAutorization::TYPE_GUI) - {//Отправляем этому клиенту оповещение об изменении docs.xml + TypeClientAutorization type = handler->getClient()->getTypeClient(); - /* - ClientQueryTasksXML clientQueryTasksXML; - clientQueryTasksXML.Type = "amm"; - processingSystem->processingClientQueryTasksXML(handler, clientQueryTasksXML); - */ - - handler->sendPacketType(PacketType::TYPE_XMLANSWER_DOCS_CHANGED); - } - - if(handler->getClient()->getClientType() == TypeClientAutorization::TYPE_UNITY_CLIENT) + //Отправляем всем заинтересованным клиентам оповещение об изменении docs.xml + if(type == TypeClientAutorization::TYPE_GUI) { handler->sendPacketType(PacketType::TYPE_XMLANSWER_DOCS_CHANGED); } + else if(type == TypeClientAutorization::TYPE_QT_CLIENT) + { + handler->sendPacketType(PacketType::TYPE_XMLANSWER_DOCS_CHANGED); + } + else if(type == TypeClientAutorization::TYPE_UNITY_CLIENT) + { + //handler->sendPacketType(PacketType::TYPE_XMLANSWER_DOCS_CHANGED); //Unity не обязательно! + } } } diff --git a/ServerLMS/Systems/docsupdater.cpp b/ServerLMS/Systems/docsupdater.cpp index f81c0f7..7e240df 100644 --- a/ServerLMS/Systems/docsupdater.cpp +++ b/ServerLMS/Systems/docsupdater.cpp @@ -43,6 +43,7 @@ bool DocsUpdater::slot_update() deleteAllModulsAMM(); listTasksAMM.clear(); + subProcMap.clear(); domElementParserAMM(manifestElement, nullptr); @@ -147,11 +148,32 @@ void DocsUpdater::domElementParserAMM(QDomElement element, Module* moduleParent) //Активность //QString canplay = nodeMap.namedItem("canplay").nodeValue(); - //Обновление Активности + + //Обновление Активности и построение списка подпроцедур 1го уровня + /* QString dmCode = DMmodulParent->dmCode(); + QString canplay = defineCanplayByScenXML(dmCode); + DMmodulParent->setModeList(parseCanplay(canplay)); nodeMap.namedItem("canplay").setNodeValue(canplay); + */ + + QString dmCode = DMmodulParent->dmCode(); + QString canplay = ""; + QList listSubProc; + if(processingScenXML(dmCode, canplay, listSubProc)) + { + DMmodulParent->setModeList(parseCanplay(canplay)); + nodeMap.namedItem("canplay").setNodeValue(canplay); + + subProcMap.insert(dmCode, listSubProc); + } + else + { + DMmodulParent->setModeList(parseCanplay(canplay)); + nodeMap.namedItem("canplay").setNodeValue(canplay); + } } else DMmodulParent->setLangStructEng(nodeMap.namedItem("techName").nodeValue(), @@ -236,9 +258,11 @@ ModeList DocsUpdater::parseCanplay(QString canplay) return modeList; } -QString DocsUpdater::defineCanplayByScenXML(QString dmCode) +bool DocsUpdater::processingScenXML(const QString dmCode, QString &canplay, QList &listSubProc) { - QString canplay = ""; + listSubProc.clear(); + + canplay = ""; QString signDemo = "-"; QString signTrain = "-"; QString signExam = "-"; @@ -247,43 +271,82 @@ QString DocsUpdater::defineCanplayByScenXML(QString dmCode) QString nameScenXMLFile = "/" + dmCode + ".xml"; QString pathScenXMLFile = updateController->getPathScensFile(nameScenXMLFile); + QDomDocument docScenDOM; if(! Tools::loadXMLtoDOM(pathScenXMLFile, &docScenDOM)) - return canplay; + return false; QDomElement scenarioElement = docScenDOM.firstChildElement("scenario"); if(scenarioElement.isNull()) - return canplay; + return false; + QDomElement demoElement = scenarioElement.firstChildElement("demo"); if(!demoElement.isNull()) { + //canplay if(demoElement.toElement().attribute("canplay") == "True") signDemo = "+"; + + //subProc + selectSubProc(demoElement, listSubProc); } QDomElement trainElement = scenarioElement.firstChildElement("train"); if(!trainElement.isNull()) { + //canplay if(trainElement.toElement().attribute("canplay") == "True") signTrain = "+"; + + //subProc + selectSubProc(trainElement, listSubProc); } QDomElement examElement = scenarioElement.firstChildElement("exam"); if(!examElement.isNull()) { + //canplay if(examElement.toElement().attribute("canplay") == "True") signExam = "+"; + + //subProc + selectSubProc(examElement, listSubProc); } QDomElement autoElement = scenarioElement.firstChildElement("auto"); if(!autoElement.isNull()) { + //canplay if(autoElement.toElement().attribute("canplay") == "True") signAuto = "+"; + + //subProc + //Из этого режима не берем! } canplay = QString("%1/%2/%3/%4").arg(signDemo, signTrain, signExam, signAuto); - return canplay; + return true; +} + +void DocsUpdater::selectSubProc(QDomElement &modeElement, QList &listSubProc) +{ + QDomNodeList nodeList = modeElement.elementsByTagName("node"); + for(int i = 0; i < nodeList.count(); i++) + { + QDomNode node = nodeList.at(i); + if(node.toElement().attribute("type") == "Subproc") + { + QDomElement subProcElement = node.firstChildElement("subproc"); + if(!subProcElement.isNull()) + { + SubProc subProc; + subProc.dmCode = subProcElement.toElement().attribute("dmCode"); + subProc.title = subProcElement.toElement().attribute("title"); + + listSubProc.append(subProc); + } + } + } } diff --git a/ServerLMS/Systems/docsupdater.h b/ServerLMS/Systems/docsupdater.h index 1c262b3..da8a253 100644 --- a/ServerLMS/Systems/docsupdater.h +++ b/ServerLMS/Systems/docsupdater.h @@ -5,6 +5,12 @@ #include "updatecontroller.h" #include "module.h" +struct SubProc +{ + QString dmCode; + QString title; +}; + class DocsUpdater : public QObject { @@ -24,7 +30,11 @@ private: void domElementParserAMM(QDomElement element, Module* moduleParent); void deleteAllModulsAMM(); ModeList parseCanplay(QString canplay); - QString defineCanplayByScenXML(QString dmCode); + + bool processingScenXML(const QString dmCode, QString& canplay, QList& listSubProc); + + void selectSubProc(QDomElement& modeElement, QList& listSubProc); + private: UpdateController* updateController; @@ -32,6 +42,8 @@ private: bool flagStop; QList listAllModulesAMM; //? QList listTasksAMM; //? + + QMap> subProcMap; }; #endif // DOCSUPDATER_H