diff options
-rw-r--r-- | fxjs/xfa/cjx_object.cpp | 72 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_node.cpp | 35 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_node.h | 2 |
3 files changed, 44 insertions, 65 deletions
diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp index bb8eef123e..ab22e8b7e7 100644 --- a/fxjs/xfa/cjx_object.cpp +++ b/fxjs/xfa/cjx_object.cpp @@ -475,41 +475,12 @@ bool CJX_Object::SetCData(XFA_Attribute eAttr, return true; } - auto* elem = static_cast<CFX_XMLElement*>(xfaObj->GetXMLMappingNode()); if (eAttr == XFA_Attribute::Value) { - FX_XMLNODETYPE eXMLType = elem->GetType(); - switch (eXMLType) { - case FX_XMLNODE_Element: - if (xfaObj->IsAttributeInXML()) { - elem->SetString(WideString(GetCData(XFA_Attribute::QualifiedName)), - wsValue); - } else { - bool bDeleteChildren = true; - if (xfaObj->GetPacketType() == XFA_PacketType::Datasets) { - for (CXFA_Node* pChildDataNode = xfaObj->GetFirstChild(); - pChildDataNode; - pChildDataNode = pChildDataNode->GetNextSibling()) { - if (!pChildDataNode->GetBindItems()->empty()) { - bDeleteChildren = false; - break; - } - } - } - if (bDeleteChildren) - elem->DeleteChildren(); - - elem->SetTextData(wsValue); - } - break; - case FX_XMLNODE_Text: - static_cast<CFX_XMLText*>(xfaObj->GetXMLMappingNode()) - ->SetText(wsValue); - break; - default: - NOTREACHED(); - } + xfaObj->SetToXML(wsValue); return true; } + + auto* elem = static_cast<CFX_XMLElement*>(xfaObj->GetXMLMappingNode()); ASSERT(elem->GetType() == FX_XMLNODE_Element); WideString wsAttrName = CXFA_Node::AttributeToName(eAttr); @@ -525,48 +496,19 @@ void CJX_Object::SetAttributeValue(const WideString& wsValue, bool bNotify, bool bScriptModify) { auto* xfaObj = ToNode(GetXFAObject()); - void* pKey = GetMapKey_Element(xfaObj->GetElementType(), XFA_Attribute::Value); + OnChanging(XFA_Attribute::Value, bNotify); WideString* pClone = new WideString(wsValue); + SetUserData(pKey, pClone, &deleteWideStringCallBack); OnChanged(XFA_Attribute::Value, bNotify, bScriptModify); + if (!xfaObj->IsNeedSavingXMLNode()) return; - auto* elem = static_cast<CFX_XMLElement*>(xfaObj->GetXMLMappingNode()); - FX_XMLNODETYPE eXMLType = elem->GetType(); - switch (eXMLType) { - case FX_XMLNODE_Element: - if (xfaObj->IsAttributeInXML()) { - elem->SetString(WideString(GetCData(XFA_Attribute::QualifiedName)), - wsXMLValue); - } else { - bool bDeleteChildren = true; - if (xfaObj->GetPacketType() == XFA_PacketType::Datasets) { - for (CXFA_Node* pChildDataNode = xfaObj->GetFirstChild(); - pChildDataNode; - pChildDataNode = pChildDataNode->GetNextSibling()) { - if (!pChildDataNode->GetBindItems()->empty()) { - bDeleteChildren = false; - break; - } - } - } - if (bDeleteChildren) - elem->DeleteChildren(); - - elem->SetTextData(wsXMLValue); - } - break; - case FX_XMLNODE_Text: - static_cast<CFX_XMLText*>(xfaObj->GetXMLMappingNode()) - ->SetText(wsXMLValue); - break; - default: - ASSERT(0); - } + xfaObj->SetToXML(wsXMLValue); } Optional<WideString> CJX_Object::TryCData(XFA_Attribute eAttr, diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp index b2535aee8c..3823d2eae0 100644 --- a/xfa/fxfa/parser/cxfa_node.cpp +++ b/xfa/fxfa/parser/cxfa_node.cpp @@ -4656,3 +4656,38 @@ bool CXFA_Node::PresenceRequiresSpace() const { return ePresence == XFA_AttributeEnum::Visible || ePresence == XFA_AttributeEnum::Invisible; } + +void CXFA_Node::SetToXML(const WideString& value) { + auto* elem = static_cast<CFX_XMLElement*>(GetXMLMappingNode()); + FX_XMLNODETYPE eXMLType = elem->GetType(); + switch (eXMLType) { + case FX_XMLNODE_Element: { + if (IsAttributeInXML()) { + elem->SetString(JSObject()->GetCData(XFA_Attribute::QualifiedName), + value); + return; + } + + bool bDeleteChildren = true; + if (GetPacketType() == XFA_PacketType::Datasets) { + for (CXFA_Node* pChildDataNode = GetFirstChild(); pChildDataNode; + pChildDataNode = pChildDataNode->GetNextSibling()) { + if (!pChildDataNode->GetBindItems()->empty()) { + bDeleteChildren = false; + break; + } + } + } + if (bDeleteChildren) + elem->DeleteChildren(); + + elem->SetTextData(value); + break; + } + case FX_XMLNODE_Text: + static_cast<CFX_XMLText*>(GetXMLMappingNode())->SetText(value); + break; + default: + NOTREACHED(); + } +} diff --git a/xfa/fxfa/parser/cxfa_node.h b/xfa/fxfa/parser/cxfa_node.h index 697320dcbb..cca03ee401 100644 --- a/xfa/fxfa/parser/cxfa_node.h +++ b/xfa/fxfa/parser/cxfa_node.h @@ -169,6 +169,8 @@ class CXFA_Node : public CXFA_Object { CFX_XMLNode* CreateXMLMappingNode(); bool IsNeedSavingXMLNode(); + void SetToXML(const WideString& value); + uint32_t GetNameHash() const { return m_dwNameHash; } bool IsUnnamed() const { return m_dwNameHash == 0; } CXFA_Node* GetModelNode(); |