#include "CNavInfoManage.h" #include "public/pub_utility_api/FileUtil.h" #include "public/pub_logger_api/logger.h" #include #include #include #include #include CNavInfoManage::CNavInfoManage(QObject *parent) : QObject(parent) { std::string currentPath = iot_public::CFileUtil::getCurModuleDir(); QDir dir(QString::fromStdString(currentPath)); dir.cdUp(); dir.cdUp(); dir.cd("data"); dir.cd("model"); m_strButtonFile = dir.filePath("ButtonGroupWidget.json"); m_strNavFile = dir.filePath("NavigationWidget.json"); readBtnJson(m_strButtonFile); readNavJson(m_strNavFile); } void CNavInfoManage::getParentBreadcrumb(const QString &fileName, QStringList &parents) { parents = m_parentsMap.value(fileName, QStringList()); } void CNavInfoManage::getSameLevelNode(const QStringList &curList, QList > &nodelist) { int length = curList.length(); if(length < 2) { return; } QPair key; key.first = length; QString menuTopName; for(int i=0; i, QList> >::const_iterator iter = m_levelMap.constBegin(); for(; iter != m_levelMap.constEnd(); iter++) { if(iter.key() == key) { nodelist.append(iter.value()); } } } void CNavInfoManage::readBtnJson(const QString &path) { QFile file(path); QByteArray readJson; if(file.open(QIODevice::ReadOnly)) { readJson = file.readAll(); file.close(); } QJsonParseError readError; QJsonDocument readJsonResponse = QJsonDocument::fromJson(readJson, &readError); if(readError.error != QJsonParseError::NoError) { LOGERROR("CJsonReader error: %d, string: %s", readError.error, readError.errorString().toStdString().c_str()); return; } QString name; QString data; QJsonObject root = readJsonResponse.object(); QJsonObject::const_iterator rootIter = root.constBegin(); for(; rootIter != root.constEnd(); rootIter++) { if(rootIter.key() == "separator") { continue; } QJsonObject item = rootIter.value().toObject(); if(item.value("used").toInt() != 1) { continue; } if(item.value("opt").toInt() != 2) { continue; } name = item.value("name").toString(); data = item.value("data").toString(); QStringList tempList = data.split(","); int nIndex=0; foreach (QString temp, tempList) { if(temp != '0') { m_btnMap[nIndex] = name; } nIndex++; } } } void CNavInfoManage::readNavJson(const QString &path) { QFile file(path); QByteArray readJson; if(file.open(QIODevice::ReadOnly)) { readJson = file.readAll(); file.close(); } QJsonParseError readError; QJsonDocument readJsonResponse = QJsonDocument::fromJson(readJson, &readError); if(readError.error != QJsonParseError::NoError) { LOGERROR("CJsonReader error: %d, string: %s", readError.error, readError.errorString().toStdString().c_str()); return; } QString menuTopName; QJsonObject root = readJsonResponse.object(); if(root.contains("items")) { QJsonArray itemArray = root.value("items").toArray(); int nItemNumber = 0; for(int nIndex(0); nIndex< itemArray.size(); nIndex++) { QJsonObject topLevelObject = itemArray[nIndex].toObject(); QString topName = topLevelObject.value("name").toString(); QString topData = topLevelObject.value("data").toString(); QString topLink = topName + ":" + topData; STNodeInfo stNodeTop; int topUsed = topLevelObject.value("used").toInt(); if(topUsed != 1) { nItemNumber++; continue; } QString menu = m_btnMap.value(nItemNumber); if(!topData.isEmpty()) { if(m_parentsMap[topLink].isEmpty()) { m_parentsMap[topLink].append(menu); m_parentsMap[topLink].append(topName); } if(m_parentsMap[topData].isEmpty()) { m_parentsMap[topData].append(menu); m_parentsMap[topData].append(topName); } stNodeTop.data = topData; stNodeTop.text = topName; stNodeTop.opt = topLevelObject.value("opt").toInt(); stNodeTop.url = topLevelObject.value("url").toString(); menuTopName = menu; m_levelMap[QPair(2, menuTopName)].append(QPair(topData, stNodeTop)); } QJsonArray childArray = topLevelObject.value("items").toArray(); for(int nChildIndex(0); nChildIndex< childArray.size(); nChildIndex++) { QJsonObject childLevelObject = childArray[nChildIndex].toObject(); QString childName = childLevelObject.value("name").toString(); QString childData = childLevelObject.value("data").toString(); QString childLink = childName + ":" + childData; STNodeInfo stNodeChild; int childUsed = topLevelObject.value("used").toInt(); if(childUsed != 1) { continue; } if(!childData.isEmpty()) { if(m_parentsMap[childLink].isEmpty()) { m_parentsMap[childLink].append(menu); m_parentsMap[childLink].append(topName); m_parentsMap[childLink].append(childName); } if(m_parentsMap[childData].isEmpty()) { m_parentsMap[childData].append(menu); m_parentsMap[childData].append(topName); m_parentsMap[childData].append(childName); } stNodeChild.data = childData; stNodeChild.text = childName; stNodeChild.opt = childLevelObject.value("opt").toInt(); stNodeChild.url = childLevelObject.value("url").toString(); menuTopName = menu+"/"+topName; m_levelMap[QPair(3, menuTopName)].append(QPair(childData, stNodeChild)); if(topData.isEmpty()) { topLink = topName + ":" + childData; if(m_parentsMap[topLink].isEmpty()) { m_parentsMap[topLink].append(menu); m_parentsMap[topLink].append(topName); m_parentsMap[topLink].append(childName); } topData = childData; stNodeTop.data = childData; stNodeTop.text = topName; stNodeTop.opt = stNodeChild.opt; stNodeTop.url = stNodeChild.url; menuTopName = menu; m_levelMap[QPair(2, menuTopName)].append(QPair(topData, stNodeTop)); } } QJsonArray leafArray = childLevelObject.value("items").toArray(); for(int nLeafIndex(0); nLeafIndex< leafArray.size(); nLeafIndex++) { QJsonObject leafLevelObject = leafArray[nLeafIndex].toObject(); QString leafName = leafLevelObject.value("name").toString(); QString leafData = leafLevelObject.value("data").toString(); QString leafLink = leafName + ":" + leafData; STNodeInfo stNodeleaf; int leafUsed = topLevelObject.value("used").toInt(); if(leafUsed != 1) { continue; } if(!leafData.isEmpty()) { if(m_parentsMap[leafLink].isEmpty()) { m_parentsMap[leafLink].append(menu); m_parentsMap[leafLink].append(topName); m_parentsMap[leafLink].append(childName); m_parentsMap[leafLink].append(leafName); } if(m_parentsMap[leafData].isEmpty()) { m_parentsMap[leafData].append(menu); m_parentsMap[leafData].append(topName); m_parentsMap[leafData].append(childName); m_parentsMap[leafData].append(leafName); } stNodeleaf.data = leafData; stNodeleaf.text = leafName; stNodeleaf.opt = leafLevelObject.value("opt").toInt(); stNodeleaf.url = leafLevelObject.value("url").toString(); menuTopName = menu+"/"+topName+"/"+childName; m_levelMap[QPair(4, menuTopName)].append(QPair(leafData, stNodeleaf)); if(childData.isEmpty()) { childLink = childName + ":" + leafData; if(m_parentsMap[childLink].isEmpty()) { m_parentsMap[childLink].append(menu); m_parentsMap[childLink].append(topName); m_parentsMap[childLink].append(childName); m_parentsMap[childLink].append(leafName); } childData = leafData; stNodeChild.data = leafData; stNodeChild.text = childName; stNodeChild.opt = stNodeleaf.opt; stNodeChild.url = stNodeleaf.url; menuTopName = menu+"/"+topName; m_levelMap[QPair(3, menuTopName)].append(QPair(childData, stNodeChild)); if(topData.isEmpty()) { topLink = topName + ":" + leafData; if(m_parentsMap[topLink].isEmpty()) { m_parentsMap[topLink].append(menu); m_parentsMap[topLink].append(topName); m_parentsMap[topLink].append(childName); m_parentsMap[topLink].append(leafName); } topData = leafData; stNodeTop.data = leafData; stNodeTop.text = topName; stNodeTop.opt = stNodeleaf.opt; stNodeTop.url = stNodeleaf.url; menuTopName = menu; m_levelMap[QPair(2, menuTopName)].append(QPair(topData, stNodeTop)); } } } } } nItemNumber++; } } }