logplus/ModuleConsole/src/ComplexInputDataParser.cpp

210 lines
6.9 KiB
C++
Raw Normal View History

2026-01-16 17:18:41 +08:00
/*
* ComplexInputDataParser.cpp
*
* Created on: 2012-7-26
* Author: limengzhuo
*/
#include <QAbstractItemModel>
#include <QtDebug>
#include "ComplexInputDataParser.h"
using namespace pai::graphics2d;
ItemData::ItemData(QModelIndex parentIndex, QString destItemIDs, QString destCategorys, QString property, QString value, QString parentID)
{
m_parentIndex = parentIndex;
m_property = property;
m_value = value;
m_parentID = parentID;
if (destItemIDs == "" && destCategorys != "")
m_destCategoryList = destCategorys.split(':');
if (destItemIDs != "" && destCategorys == "")
m_destItemIDList = destItemIDs.split(':');
}
QStringList ItemData::GetDestItemIDList()
{
return m_destItemIDList;
}
QStringList ItemData::GetDestCategoryList()
{
return m_destCategoryList;
}
QModelIndex ItemData::GetParentIndex()
{
return m_parentIndex;
}
QString ItemData::GetParentID()
{
return m_parentID;
}
QString ItemData::GetValue()
{
return m_value;
}
QString ItemData::GetProperty()
{
return m_property;
}
ComplexInputDataParser::ComplexInputDataParser(QModelIndex inputIndex, QString inputData, QString inputValue, std::string inputID)
{
m_inputValue = inputValue;
m_inputIndex = inputIndex;
QString strOnClick("onclick=");
int nPos0 = inputData.indexOf(strOnClick);
int nLengthOfOnClick = strOnClick.length();
QString strScriptContents = inputData.mid(nPos0 + nLengthOfOnClick);//这里截取到onclick=之后的内容
QStringList strScriptSentences = strScriptContents.split(';');//用;进行分割
foreach(QString strScriptFunction, strScriptSentences)
{
QStringList lstFunction = strScriptFunction.split('=');//用=进行分
if (lstFunction.size() < 2)
continue;
QString strParentID;
size_t nLastPointPos = inputID.rfind('.');
//获得parentID.
if (nLastPointPos != std::string::npos)
{
strParentID = QString::fromStdString(inputID.substr(0, nLastPointPos + 1));//把.也包括进去。
}
QStringList lstItemsAndProperties = lstFunction[0].split('.');//用.进行分
QString destItemIDs;
QString destCategoryIDs;
QModelIndex parentIndex;
QString strPropertyName;
//解析等于号的左边获得被控制控件的parentIndex, 控制属性名称strPropertyName被控制控件的ID列表字符串destItemIDs。
for (int i = 0; i < lstItemsAndProperties.size(); i++)
{
if (lstItemsAndProperties[i].trimmed() == "this")
{
parentIndex = m_inputIndex;
}
else if (lstItemsAndProperties[i].trimmed() == "parentNode")
{
parentIndex = parentIndex.parent();
}
else if (lstItemsAndProperties[i].contains("category["))
{
int nIDStartPos = lstItemsAndProperties[i].indexOf("category[") + 9;
int nIDLastPos = lstItemsAndProperties[i].indexOf(']');
destCategoryIDs = lstItemsAndProperties[i].mid(nIDStartPos, nIDLastPos - nIDStartPos);
}
else if (lstItemsAndProperties[i].contains("item["))
{
int nIDStartPos = lstItemsAndProperties[i].indexOf("item[") + 5;
int nIDLastPos = lstItemsAndProperties[i].indexOf(']');
destItemIDs = lstItemsAndProperties[i].mid(nIDStartPos, nIDLastPos - nIDStartPos);
}
else if (lstItemsAndProperties[i].trimmed() == "display")
{
strPropertyName = "Visible";
}
else if (lstItemsAndProperties[i].trimmed() == "ability")
{
strPropertyName = "Ability";
}
else
{
}
}//end of for
QString strItemValue;
QStringList lstFindItemValue = lstFunction[1].split('.');
//解析等于号的右边,获得控制属性的值。
for (int i = 0; i < lstFindItemValue.size(); i++)
{
if (lstFindItemValue[i].contains("item["))
{
int nIDStartPos = lstFindItemValue[i].indexOf("item[") + 5;
int nIDLastPos = lstFindItemValue[i].indexOf(']');
strItemValue = lstFindItemValue[i].mid(nIDStartPos, nIDLastPos - nIDStartPos);
}
else if (lstFindItemValue[i].contains("checked?"))
{
int nStartPos = lstFindItemValue[i].indexOf("checked?") + 8;
QString checkString = lstFindItemValue[i].mid(nStartPos);
QStringList lstCheckValue = checkString.split(':');
strItemValue = lstCheckValue[0] == "true" || lstCheckValue[0] == "enable" ? "1" : "0";
}
}//end of for
//使用上面获得的值构造ItemData并添加到列表中。
if (strPropertyName.isEmpty() == false)
{
if (destItemIDs.size() <= 0)
{
ItemData itemData(parentIndex, "", destCategoryIDs, strPropertyName, strItemValue, strParentID);
m_itemDataList.append(itemData);
}
else
{
ItemData itemData(parentIndex, destItemIDs, "", strPropertyName, strItemValue, strParentID);
m_itemDataList.append(itemData);
}
}
}
}
QList<ItemData> ComplexInputDataParser::GetItemDataList()
{
return m_itemDataList;
}
std::string ComplexInputDataParser::ResetInputDataString(std::string inputdata, QString property, QString itemValue)
{
if (property == "Visible")
{
std::string strVisibleInputData = inputdata;
std::string strInvisible("Invisible;");
size_t nKeyPos = strVisibleInputData.find(strInvisible);
if (itemValue == m_inputValue && nKeyPos != std::string::npos)
{
strVisibleInputData = strVisibleInputData.replace(nKeyPos, strInvisible.length(), "");
}
else if (nKeyPos == std::string::npos)
{
strVisibleInputData = strInvisible + strVisibleInputData;
}
return strVisibleInputData;
}
if (property == "Ability")
{
std::string strAbilityInputData = inputdata;
std::string strDisable("Disable;");
size_t nKeyPos = strAbilityInputData.find(strDisable);
if (itemValue == m_inputValue && nKeyPos != std::string::npos)
{
strAbilityInputData = strAbilityInputData.replace(nKeyPos, strDisable.length(), "Enable;");
}
else if (nKeyPos == std::string::npos)
{
std::string strEnable("Enable;");
size_t nKey = strAbilityInputData.find(strEnable);
if (nKey != std::string::npos)
{
strAbilityInputData = strAbilityInputData.replace(nKey, strEnable.length(), "Disable;");
}
}
return strAbilityInputData;
}
return std::string();
}