refact. SubProc превр. в класс. fix bug canplay

This commit is contained in:
2025-11-18 17:23:37 +03:00
parent b333ec8ec1
commit 31e01ff8e5
9 changed files with 157 additions and 123 deletions

View File

@@ -37,3 +37,91 @@ void MalfunctionSign::initialize(int type, QString description)
this->type = type; this->type = type;
this->description = description; this->description = description;
} }
QString SubProc::getDmCode() const
{
return dmCode;
}
QString SubProc::getTitle() const
{
return title;
}
void SubProc::setDmCode(const QString &value)
{
dmCode = value;
}
void SubProc::setTitle(const QString &value)
{
title = value;
}
QString SubProc::getModeListStr() const
{
return modeListStr;
}
ModeList SubProc::getModeList() const
{
return modeList;
}
void SubProc::setModeList(const ModeList &value)
{
this->modeList = value;
this->modeListStr = buildCanplay(value);
}
void SubProc::setModeListStr(const QString &value)
{
this->modeListStr = value;
this->modeList = parseCanplay(value);
}
QString SubProc::buildCanplay(ModeList modeList)
{
QString canplay = QString("%1/%2/%3/%4").arg(modeList.demo?"+":"-", modeList.train?"+":"-", modeList.exam?"+":"-", modeList.autoM?"+":"-");
return canplay;
}
ModeList SubProc::parseCanplay(QString canplay)
{
ModeList modeList;
if(canplay == "")
{
modeList.demo = false;
modeList.train = false;
modeList.exam = false;
modeList.autoM = false;
}
else
{
QStringList list = canplay.split("/");
if(list.at(0) == "+")
modeList.demo = true;
else
modeList.demo = false;
if(list.at(1) == "+")
modeList.train = true;
else
modeList.train = false;
if(list.at(2) == "+")
modeList.exam = true;
else
modeList.exam = false;
if(list.at(3) == "+")
modeList.autoM = true;
else
modeList.autoM = false;
}
return modeList;
}

View File

@@ -13,12 +13,38 @@ struct ModeList
bool autoM = false; bool autoM = false;
}; };
struct SubProc class DATABASELMS_EXPORT SubProc
{ {
QString dmCode; public:
QString title; SubProc()
{
modeListStr = buildCanplay(modeList);
};
~SubProc(){};
public:
void setModeList(const ModeList &modeList);
ModeList getModeList() const;
void setModeListStr(const QString &modeListStr);
QString getModeListStr() const;
void setDmCode(const QString &value);
QString getDmCode() const;
void setTitle(const QString &value);
QString getTitle() const;
public:
static QString buildCanplay(ModeList modeList);
static ModeList parseCanplay(QString canplay);
private:
QString dmCode = "";
QString title = "";
ModeList modeList; ModeList modeList;
QString modeListStr = "";
}; };
class DATABASELMS_EXPORT ProcedureID class DATABASELMS_EXPORT ProcedureID

View File

@@ -181,9 +181,9 @@ QByteArray DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id
{ {
xmlWriter.writeStartElement("SubProc"); xmlWriter.writeStartElement("SubProc");
xmlWriter.writeAttribute("dmCode", subProc.dmCode); xmlWriter.writeAttribute("dmCode", subProc.getDmCode());
xmlWriter.writeAttribute("title", subProc.title); xmlWriter.writeAttribute("title", subProc.getTitle());
//xmlWriter.writeAttribute("canplay", subProc.modeList); //TODO возможно тут нужен canplay xmlWriter.writeAttribute("canplay", subProc.getModeListStr());
xmlWriter.writeEndElement(); xmlWriter.writeEndElement();
} }

View File

@@ -908,8 +908,9 @@ void RecognizeSystem::xmlParserQuerySubProc(PacketType packetType, QByteArray ar
if(taskNode.nodeName() == "SubProc") if(taskNode.nodeName() == "SubProc")
{//Подпроцедура {//Подпроцедура
SubProc subProc; SubProc subProc;
subProc.title = taskNode.toElement().attribute("title"); subProc.setTitle(taskNode.toElement().attribute("title"));
subProc.dmCode = taskNode.toElement().attribute("dmCode"); subProc.setDmCode(taskNode.toElement().attribute("dmCode"));
subProc.setModeListStr(taskNode.toElement().attribute("canplay"));
listSubProc.append(subProc); listSubProc.append(subProc);
} }

View File

@@ -78,9 +78,9 @@ bool ListSubProc::getListCheckedSubProc(QList<SubProc>* listSubProc)
if(item->checkState(0) == Qt::Checked) if(item->checkState(0) == Qt::Checked)
{ {
SubProc subProc; SubProc subProc;
subProc.dmCode = item->text(ColumnsTreeSubProc::clmnSP_code); subProc.setDmCode(item->text(ColumnsTreeSubProc::clmnSP_code));
subProc.title = item->text(ColumnsTreeSubProc::clmnSP_title); subProc.setTitle(item->text(ColumnsTreeSubProc::clmnSP_title));
subProc.modeList = parseCanplay(item->text(ColumnsTreeSubProc::clmnSP_canplay)); subProc.setModeListStr(item->text(ColumnsTreeSubProc::clmnSP_canplay));
listSubProc->append(subProc); listSubProc->append(subProc);
} }
} }
@@ -144,51 +144,6 @@ int ListSubProc::calculateWidth_0Column()
return width0Column; return width0Column;
} }
QString ListSubProc::buildCanplay(ModeList modeList)
{
QString canplay = QString("%1/%2/%3/%4").arg(modeList.demo?"+":"-", modeList.train?"+":"-", modeList.exam?"+":"-", modeList.autoM?"+":"-");
return canplay;
}
ModeList ListSubProc::parseCanplay(QString canplay)
{
ModeList modeList;
if(canplay == "")
{
modeList.demo = false;
modeList.train = false;
modeList.exam = false;
modeList.autoM = false;
}
else
{
QStringList list = canplay.split("/");
if(list.at(0) == "+")
modeList.demo = true;
else
modeList.demo = false;
if(list.at(1) == "+")
modeList.train = true;
else
modeList.train = false;
if(list.at(2) == "+")
modeList.exam = true;
else
modeList.exam = false;
if(list.at(3) == "+")
modeList.autoM = true;
else
modeList.autoM = false;
}
return modeList;
}
void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode) void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode)
{ {
if(this->task.ammProcedure.dmCode == dmCode) if(this->task.ammProcedure.dmCode == dmCode)
@@ -199,10 +154,10 @@ void ListSubProc::slot_UpdateSubProcForDMCode(QString dmCode)
{ {
QTreeWidgetItem* item = new QTreeWidgetItem(treeWidget); QTreeWidgetItem* item = new QTreeWidgetItem(treeWidget);
item->setIcon(0, QIcon(":/resources/icons/procedure.png")); item->setIcon(0, QIcon(":/resources/icons/procedure.png"));
item->setText(ColumnsTreeSubProc::clmnSP_title, subProc.title); item->setText(ColumnsTreeSubProc::clmnSP_title, subProc.getTitle());
item->setText(ColumnsTreeSubProc::clmnSP_code, subProc.dmCode); item->setText(ColumnsTreeSubProc::clmnSP_code, subProc.getDmCode());
item->setText(ColumnsTreeSubProc::clmnSP_canplay, buildCanplay(subProc.modeList)); item->setText(ColumnsTreeSubProc::clmnSP_canplay, subProc.getModeListStr());
item->setToolTip(ColumnsTreeSubProc::clmnSP_title, subProc.title); item->setToolTip(ColumnsTreeSubProc::clmnSP_title, subProc.getTitle());
item->setFlags(item->flags() | Qt::ItemIsUserCheckable); item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
item->setCheckState(ColumnsTreeSubProc::clmnSP_title, Qt::Checked); item->setCheckState(ColumnsTreeSubProc::clmnSP_title, Qt::Checked);

View File

@@ -37,8 +37,6 @@ private:
void reSetHeadTreeWidget(); void reSetHeadTreeWidget();
void setWidthColumnsTree(); void setWidthColumnsTree();
int calculateWidth_0Column(); int calculateWidth_0Column();
QString buildCanplay(ModeList modeList); //TODO Дублируется в DocsUpdater (Server)!
ModeList parseCanplay(QString canplay); //TODO Дублируется в DocsUpdater (Server)!
public slots: public slots:
void slot_UpdateSubProcForDMCode(QString dmCode); void slot_UpdateSubProcForDMCode(QString dmCode);

View File

@@ -19,9 +19,9 @@ QByteArray DocsAnswerParser::listSubProc(QList<SubProc> list, QString dmCode)
{ {
QDomNode subProcNode = commonDOM.createElement("SubProc"); QDomNode subProcNode = commonDOM.createElement("SubProc");
listNode.appendChild(subProcNode); listNode.appendChild(subProcNode);
subProcNode.toElement().setAttribute("dmCode", subProc.dmCode); subProcNode.toElement().setAttribute("dmCode", subProc.getDmCode());
subProcNode.toElement().setAttribute("title", subProc.title); subProcNode.toElement().setAttribute("title", subProc.getTitle());
subProcNode.toElement().setAttribute("canplay", DocsUpdater::buildCanplay(subProc.modeList)); subProcNode.toElement().setAttribute("canplay", subProc.getModeListStr());
} }
Tools::saveDOMtoXML("ListSubProc.xml", &commonDOM); Tools::saveDOMtoXML("ListSubProc.xml", &commonDOM);

View File

@@ -71,15 +71,29 @@ bool DocsUpdater::updateDocsXML()
return false; return false;
} }
for(QList<SubProc> listSP : listSubProcMap) //Проставляем canplay
for (auto it = listSubProcMap.begin(); it != listSubProcMap.end(); ++it)
{ {
for(SubProc sp : listSP) QList<SubProc> listSP = it.value();
QString keyToReplace = it.key();
if(listSP.count())
{ {
QString dmCode = sp.dmCode; for(int i = 0; i < listSP.count(); i++)
{
QString dmCode = listSP.at(i).getDmCode();
DM* module = getDMmoduleByDMcode(dmCode); DM* module = getDMmoduleByDMcode(dmCode);
if(module) if(module)
{ {
sp.modeList = module->getModeList(); SubProc sp = listSP.at(i);
sp.setModeList(module->getModeList());
listSP.replace(i, sp);
}
}
if (!keyToReplace.isEmpty())
{
listSubProcMap[keyToReplace] = listSP;
} }
} }
} }
@@ -187,14 +201,14 @@ void DocsUpdater::domElementParserAMM(QDomElement element, Module* moduleParent)
QList<SubProc> listSubProc; QList<SubProc> listSubProc;
if(processingScenXML(dmCode, canplay, listSubProc)) if(processingScenXML(dmCode, canplay, listSubProc))
{ {
DMmodulParent->setModeList(parseCanplay(canplay)); DMmodulParent->setModeList(SubProc::parseCanplay(canplay));
nodeMap.namedItem("canplay").setNodeValue(canplay); nodeMap.namedItem("canplay").setNodeValue(canplay);
listSubProcMap.insert(dmCode, listSubProc); listSubProcMap.insert(dmCode, listSubProc);
} }
else else
{ {
DMmodulParent->setModeList(parseCanplay(canplay)); DMmodulParent->setModeList(SubProc::parseCanplay(canplay));
nodeMap.namedItem("canplay").setNodeValue(canplay); nodeMap.namedItem("canplay").setNodeValue(canplay);
} }
} }
@@ -242,51 +256,6 @@ void DocsUpdater::deleteAllModulsAMM()
listAllModulesAMM.clear(); listAllModulesAMM.clear();
} }
ModeList DocsUpdater::parseCanplay(QString canplay)
{
ModeList modeList;
if(canplay == "")
{
modeList.demo = false;
modeList.train = false;
modeList.exam = false;
modeList.autoM = false;
}
else
{
QStringList list = canplay.split("/");
if(list.at(0) == "+")
modeList.demo = true;
else
modeList.demo = false;
if(list.at(1) == "+")
modeList.train = true;
else
modeList.train = false;
if(list.at(2) == "+")
modeList.exam = true;
else
modeList.exam = false;
if(list.at(3) == "+")
modeList.autoM = true;
else
modeList.autoM = false;
}
return modeList;
}
QString DocsUpdater::buildCanplay(ModeList modeList)
{
QString canplay = QString("%1/%2/%3/%4").arg(modeList.demo?"+":"-", modeList.train?"+":"-", modeList.exam?"+":"-", modeList.autoM?"+":"-");
return canplay;
}
bool DocsUpdater::processingScenXML(const QString dmCode, QString &canplay, QList<SubProc> &listSubProc) bool DocsUpdater::processingScenXML(const QString dmCode, QString &canplay, QList<SubProc> &listSubProc)
{ {
listSubProc.clear(); listSubProc.clear();
@@ -384,8 +353,8 @@ void DocsUpdater::selectSubProc(QDomElement &modeElement, QList<SubProc> &listSu
if(!subProcElement.isNull()) if(!subProcElement.isNull())
{ {
SubProc subProc; SubProc subProc;
subProc.dmCode = subProcElement.toElement().attribute("dmCode"); subProc.setDmCode(subProcElement.toElement().attribute("dmCode"));
subProc.title = subProcElement.toElement().attribute("title"); subProc.setTitle(subProcElement.toElement().attribute("title"));
listSubProc.append(subProc); listSubProc.append(subProc);
} }

View File

@@ -20,9 +20,6 @@ public:
bool updateDocsXML(); bool updateDocsXML();
static ModeList parseCanplay(QString canplay);
static QString buildCanplay(ModeList modeList);
private: private:
void domElementParserAMM(QDomElement element, Module* moduleParent); void domElementParserAMM(QDomElement element, Module* moduleParent);
void deleteAllModulsAMM(); void deleteAllModulsAMM();