#include "gui/GraphTool/NavigationApi/CJsonOpt.h" #include "public/pub_utility_api/FileUtil.h" #include "public/pub_logger_api/logger.h" #include #include #include #include #include #include CJsonOpt::CJsonOpt() { 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); onFirst(); } QString &CJsonOpt::getSeparatorPath() { return m_strSeparator; } QMap &CJsonOpt::getButtonMap() { return m_mapButton; } ST_NODE CJsonOpt::getStButton(const QString &key) { return m_mapButton.value(key); } QMap > > &CJsonOpt::getNavMap() { return m_mapNav; } bool CJsonOpt::saveJson(const QMap &btMap, const QMap > > &navMap) { bool success = false; success = saveButtonJson(btMap); if(!success) { return false; } success = saveNavJson(navMap); if(!success) { saveButtonJson(m_mapButton); return false; } return true; } bool CJsonOpt::saveButtonJson(const QMap &map) { QFile file(m_strButtonFile); if(!file.exists()) { file.setFileName(m_strButtonFile); } if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) { return false; } file.resize(0); QJsonObject root; root.insert("separator", m_strSeparator); QMap::const_iterator iter = map.constBegin(); for(; iter != map.constEnd(); iter++) { QJsonObject button; button.insert("name", iter.value().name); button.insert("used", iter.value().used); button.insert("opt", iter.value().type); button.insert("icon", iter.value().icon); button.insert("web" , iter.value().web); button.insert("data", iter.value().data); button.insert("webData", iter.value().webData); root.insert(iter.key(), button); } QJsonDocument doc; doc.setObject(root); if(-1 == file.write(doc.toJson())) { file.close(); return false; } file.close(); return true; } bool CJsonOpt::saveNavJson(const QMap > > &map) { QFile file(m_strNavFile); if(!file.exists()) { file.setFileName(m_strNavFile); } if(!file.open(QIODevice::ReadWrite)) { return false; } QByteArray readJson = file.readAll(); file.resize(0); 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 false; } QJsonObject root; QJsonObject configure = readJsonResponse.object().value("configure").toObject(); root.insert("configure", configure); root.insert("items", getSaveItems(map, -1)); QJsonDocument doc; doc.setObject(root); if(-1 == file.write(doc.toJson())) { file.close(); return false; } file.close(); return true; } void CJsonOpt::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; } QJsonObject root = readJsonResponse.object(); QJsonObject::const_iterator rootIter = root.constBegin(); for(; rootIter != root.constEnd(); rootIter++) { if(rootIter.key() == "separator") { m_strSeparator = rootIter.value().toString(); continue; } QJsonObject item = rootIter.value().toObject(); ST_NODE st_Node; makeStButton(st_Node, item); m_mapButton.insert(rootIter.key(), st_Node); } } void CJsonOpt::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; } 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++) { ST_NODE st_Node_Top; QJsonObject topLevelObject = itemArray[nIndex].toObject(); makeStButton(st_Node_Top, topLevelObject); QPair topMap; int nTopNumber = nItemNumber; topMap.first = nItemNumber++; topMap.second = st_Node_Top; QJsonArray childArray = topLevelObject.value("items").toArray(); for(int nChildIndex(0); nChildIndex< childArray.size(); nChildIndex++) { ST_NODE st_Node_Child; QJsonObject childLevelObject = childArray[nChildIndex].toObject(); makeStButton(st_Node_Child, childLevelObject); QPair childMap; int nChildNumber = nItemNumber; childMap.first = nItemNumber++; childMap.second = st_Node_Child; QJsonArray leafArray = childLevelObject.value("items").toArray(); for(int nLeafIndex(0); nLeafIndex< leafArray.size(); nLeafIndex++) { ST_NODE st_Node_Leaf; QJsonObject leafLevelObject = leafArray[nLeafIndex].toObject(); makeStButton(st_Node_Leaf, leafLevelObject); QPair leafMap; leafMap.first = nItemNumber++; leafMap.second = st_Node_Leaf; m_mapNav[nChildNumber].append(leafMap); } m_mapNav[nTopNumber].append(childMap); } m_mapNav[-1].append(topMap); } } } QJsonArray CJsonOpt::getSaveItems(const QMap > > &map, int key) { QJsonArray root; QList> rootList = map.value(key); for(int n=0; n