2025-03-17 09:23:17 +08:00

298 lines
12 KiB
C++

#include "CNavInfoManage.h"
#include "public/pub_utility_api/FileUtil.h"
#include "public/pub_logger_api/logger.h"
#include <QDir>
#include <QFile>
#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonArray>
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<QPair<QString, STNodeInfo> > &nodelist)
{
int length = curList.length();
if(length < 2)
{
return;
}
QPair<int,QString> key;
key.first = length;
QString menuTopName;
for(int i=0; i<curList.count()-1; ++i)
{
if(!menuTopName.isEmpty())
{
menuTopName.append("/");
}
menuTopName += curList.at(i);
}
key.second = menuTopName;
QMap<QPair<int,QString>, QList<QPair<QString,STNodeInfo>> >::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<int,QString>(2, menuTopName)].append(QPair<QString,STNodeInfo>(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<int,QString>(3, menuTopName)].append(QPair<QString,STNodeInfo>(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<int,QString>(2, menuTopName)].append(QPair<QString,STNodeInfo>(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<int,QString>(4, menuTopName)].append(QPair<QString,STNodeInfo>(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<int,QString>(3, menuTopName)].append(QPair<QString,STNodeInfo>(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<int,QString>(2, menuTopName)].append(QPair<QString,STNodeInfo>(topData, stNodeTop));
}
}
}
}
}
nItemNumber++;
}
}
}