298 lines
12 KiB
C++
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++;
|
|
}
|
|
}
|
|
}
|