logplus/ModuleConsole/src/ParameterProperty.cpp

378 lines
10 KiB
C++
Raw Normal View History

2026-01-16 17:18:41 +08:00
/*
* ParameterProperty.cpp
*
* Created on: 2011-9-19
* Author: dev
*/
#include <cassert>
#include <QtDebug>
#include "ParameterProperty.h"
#include "ModuleParameter.h"
// #include "ModuleParameterUtil.h"
#include "GeometryUtils.h"
using namespace std;
using namespace pai::module;
using namespace pai::graphics2d;
ParameterProperty::ParameterProperty(pai::module::CParameterItem *parameterItem,const QString &categoryname)
:m_parameterItem(parameterItem), m_categoryName(categoryname), m_strError(""),m_parent(NULL)
{
}
void ParameterProperty::SetCategoryName(QString categoryName)
{
m_categoryName=categoryName;
}
ParameterProperty::~ParameterProperty()
{
qDeleteAll(m_child.begin(),m_child.end());
m_child.clear();
}
void ParameterProperty::SetWorkflowID(QUuid workflowID)
{
m_workflowID = workflowID;
}
QUuid ParameterProperty::GetWorkflowID()
{
return m_workflowID;
}
bool ParameterProperty::IsRoot() const
{
return (m_categoryName=="") && (m_parameterItem==NULL);
}
bool ParameterProperty::IsCategory() const
{
return (m_categoryName!=""); //&& (m_parameterItem==NULL);
}
bool ParameterProperty::IsParameterItem() const
{
return (m_categoryName=="") && (m_parameterItem!=NULL);
}
void ParameterProperty::AddChild(ParameterProperty *parameterItem,int pos)
{
if(parameterItem == NULL)
{
return;
}
parameterItem->m_parent=this;
parameterItem->SetWorkflowID(GetWorkflowID());
if(pos>-1) {
m_child.insert(pos,parameterItem);
}
else m_child.append(parameterItem);
}
ParameterProperty* ParameterProperty::AddChild(pai::module::CParameterItem *paramItem,const QString & categoryname,int pos)
{
if(!Contains(ParameterProperty(paramItem,categoryname)))
{
ParameterProperty *param = new ParameterProperty(paramItem,categoryname);
this->AddChild(param,pos);
return param;
}
return NULL;
}
ParameterProperty* ParameterProperty::GetChild(int index)
{
if(index<0 || index >m_child.count())
{
return NULL;
}
return m_child.at(index);
}
int ParameterProperty::GetRow() const
{
if(m_parent==NULL)
{
return -1;
}
return m_parent->m_child.indexOf(const_cast<ParameterProperty*>(this));
}
std::string ParameterProperty::GetParameterItemID() const
{
if(IsParameterItem() && m_parameterItem)
{
return m_parameterItem->GetId();
}
return "";
}
QString ParameterProperty::GetDisplayName() const
{
QString cs;
if(this->IsCategory())
return m_categoryName;
if(this->IsParameterItem())
{
cs=m_parameterItem->GetName();
}
return cs;
}
QString ParameterProperty::GetDisplayValue() const
{
QString cs;
if(this->IsParameterItem() && m_parameterItem)
{
if(m_parameterItem->GetInputType()==HDFSFILEBROWSER || m_parameterItem->GetInputType() == HDFSFILEEDITOR)
{
cs=QString::fromStdString(m_parameterItem->GetDefault());
}
cs=QString::fromStdString(m_parameterItem->GetStringValue());
}
return cs;
}
pai::module::ParameterType ParameterProperty::GetType() const
{
if(this->IsParameterItem() && m_parameterItem)
{
return m_parameterItem->GetType();
}
return pai::module::ParmType_STRING;
}
pai::module::ParameterInputType ParameterProperty::GetInputType() const
{
if(this->IsParameterItem())
{
return m_parameterItem->GetInputType();
}
return pai::module::NONEINPUT;
}
QList<QUuid> ParameterProperty::GetAcceptDropTypes() const
{
// if(IsParameterItem())
// {
// return pai::ModuleParameterUtil::GetAcceptDropTypes(m_parameterItem);
// }
QList<QUuid> lstEmpty;
return lstEmpty;
}
pai::module::CParameterItem *ParameterProperty::GetParamItem() const
{
return m_parameterItem;
}
void ParameterProperty::SetParameterItem(pai::module::CParameterItem * pParameterItem)
{
assert(pParameterItem!=NULL && pParameterItem->GetType() == pai::module::ParmType_ARRAY);
m_parameterItem = pParameterItem;
}
QString ParameterProperty::GetErrorMessage() const
{
return m_strError;
}
void ParameterProperty::SetErrorMessage(const QString& strErrMsg)
{
if (IsParameterItem())
{
//前台对于空的必填项的错误信息做一个过滤ToDo
//如果是必填项但值是空则忽略错误或者如果设置错误信息为空则需要更新界面常见于ClearAllErrorMessage。
ParameterType paramType = m_parameterItem->GetType();
if (!(m_parameterItem->IsNessary() && m_parameterItem->GetStringValue().empty()
&& (ParmType_ARRAY != paramType && ParmType_CUSTOM != paramType)) || strErrMsg.isEmpty())
{
m_strError = strErrMsg;
emit signalSetErrorMessage(m_strError);
}
}
}
bool ParameterProperty::IsError() const
{
return m_strError!="";
}
ParameterProperty * ParameterProperty::GetParameterPropertyWithValidInputType(const std::string& strParameterItemID)
{
ParameterProperty *pDefaultParameterProperty = GetParameterProperty(strParameterItemID);
if(pDefaultParameterProperty != NULL )
{
return pDefaultParameterProperty;
}
std::string strID(strParameterItemID);
if((strID.rfind(".")!=std::string::npos) || (']' == *strID.rbegin()))
{
size_t nPos;
if(']' == *strID.rbegin())//说明是数组的数组子项
{
nPos = strID.rfind('[');
}
else
{
nPos = strID.rfind('.');
}
strID.replace(nPos,strID.length()-nPos,"");//取得父参数项的ID
return GetParameterPropertyWithValidInputType(strID);
}
return NULL;
}
ParameterProperty * ParameterProperty::GetParameterProperty(const std::string& strParameterItemID)
{
if((m_parameterItem!=NULL && m_parameterItem->GetId() == strParameterItemID) || (m_categoryName.toStdString() == strParameterItemID))
{
return this;
}
foreach(ParameterProperty * pChild,m_child)
{
ParameterProperty * pResult=pChild->GetParameterProperty(strParameterItemID);
if(pResult!=NULL)
{
return pResult;
}
}
return NULL;
}
ParameterProperty * ParameterProperty::GetParameterPropertyByInputData(const std::string& strParameterItemInputData)
{
if(m_parameterItem!=NULL && m_parameterItem->GetInputData().find(strParameterItemInputData)!=string::npos)
{
return this;
}
foreach(ParameterProperty * pChild,m_child)
{
if(pChild == NULL)
{
continue;
}
ParameterProperty * pResult=pChild->GetParameterPropertyByInputData(strParameterItemInputData);
if(pResult!=NULL)
{
return pResult;
}
}
return NULL;
}
void ParameterProperty::ClearAllErrorMessage()
{
foreach(ParameterProperty * pChild,m_child)
{
if(pChild)
{
pChild->ClearAllErrorMessage();
}
}
SetErrorMessage("");
emit signalFinishValidation();
}
bool ParameterProperty::operator ==(const ParameterProperty& srcParameterProperty) const
{
return (m_parameterItem == srcParameterProperty.m_parameterItem) && (m_categoryName == srcParameterProperty.m_categoryName);
}
bool ParameterProperty::operator !=(const ParameterProperty& srcParameterProperty) const
{
return !(*this == srcParameterProperty);
}
bool ParameterProperty::ContainFILEBROWSERItem()
{
if(this->GetInputType() == HDFSFILEBROWSER)
{
return true;
}
foreach(ParameterProperty * pChild,m_child)
{
if((pChild != NULL) && (pChild->ContainFILEBROWSERItem()))
{
return true;
}
}
return false;
}
bool ParameterProperty::ContainsOverWriteItem()
{
if(this->GetInputType() == CHECKBOX)
{
if (std::string::npos != m_parameterItem->GetId().find(".outputoverwrite"))
{
return true;
}
}
foreach(ParameterProperty * pChild,m_child)
{
if((pChild != NULL) && (pChild->ContainsOverWriteItem()))
{
return true;
}
}
return false;
}
bool ParameterProperty::Contains(const ParameterProperty& parameterProperty) const
{
if(*this == parameterProperty)
{
return true;
}
foreach(ParameterProperty * pChild,m_child)
{
if((pChild != NULL) && (pChild->Contains(parameterProperty)))
{
return true;
}
}
return false;
}
int ParameterProperty::RemoveChild(const std::string& strParameterItemID)
{
if(strParameterItemID == "")
{
return -1;
}
ParameterProperty* pParameterProperty = GetParameterProperty(strParameterItemID);
if(pParameterProperty != NULL)
{
//TODO 这里没有递归,所以本函数仅适用于叶子节点
ParameterProperty* pParent = pParameterProperty->GetParent();
int nIndex = pParent->m_child.indexOf(pParameterProperty);
pParent->m_child.removeAt(nIndex);
delete pParameterProperty;
pParameterProperty = NULL;
return nIndex;
}
return -1;
}
void ParameterProperty::HideShowItemsIcon(bool hide)
{
emit signalHideShowItemsIcon(hide);
}
void ParameterProperty::HandleDeleteButton()
{
//对于含有"KeepOneRow"属性的Array节点处理删除按钮的出现与消失如果Array孩子只剩一个就让相关节点隐藏删除按钮如果Array孩子变为两个则使第一个孩子的相关节点出现删除按钮
if(m_parameterItem != NULL
&& m_parameterItem->GetType() == pai::module::ParmType_ARRAY
&& m_parameterItem->GetInputData().find("KeepOneRow")!=std::string::npos)
{
CCompositeParameterItem* pArrayParameterItem = dynamic_cast<CCompositeParameterItem*>(m_parameterItem);
if(pArrayParameterItem != NULL)
{
int nArrayChildCount = pArrayParameterItem->GetChildCount();
if(nArrayChildCount==1 || nArrayChildCount==2)
{
ParameterProperty* pChildHasDeleteButton = GetParameterPropertyByInputData("HasDeleteButton");
if(pChildHasDeleteButton != NULL)
{
emit pChildHasDeleteButton->signalShouldShowDeleteButton((nArrayChildCount == 1)?false:true);
}
}
}
}
}