Chromium Code Reviews| Index: xfa/fxfa/parser/xfa_object_imp.cpp |
| diff --git a/xfa/fxfa/parser/xfa_object_imp.cpp b/xfa/fxfa/parser/xfa_object_imp.cpp |
| index 87941af070350665662581b4c64fd04738573720..6280e13d00b834e32b4cb5de744ad78a96e63dd9 100644 |
| --- a/xfa/fxfa/parser/xfa_object_imp.cpp |
| +++ b/xfa/fxfa/parser/xfa_object_imp.cpp |
| @@ -1298,172 +1298,161 @@ void CXFA_Node::Script_Attribute_BOOLRead(FXJSE_HVALUE hValue, |
| ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); |
| } |
| } |
| + |
| void CXFA_Node::Script_Attribute_SendAttributeChangeMessage( |
| - void* eAttribute, |
| - void* eValue, |
| + XFA_ATTRIBUTE eAttribute, |
| FX_BOOL bScriptModify) { |
| CXFA_LayoutProcessor* pLayoutPro = m_pDocument->GetLayoutProcessor(); |
| - if (!pLayoutPro) { |
| + if (!pLayoutPro) |
| return; |
| - } |
| + |
| CXFA_FFNotify* pNotify = m_pDocument->GetParser()->GetNotify(); |
| - if (!pNotify) { |
| + if (!pNotify) |
| return; |
| - } |
| + |
| uint32_t dwPacket = GetPacketID(); |
| - if (dwPacket & XFA_XDPPACKET_Form) { |
| - FX_BOOL bNeedFindContainer = FALSE; |
| - XFA_ELEMENT eType = GetClassID(); |
| - switch (eType) { |
| - case XFA_ELEMENT_Caption: |
| - bNeedFindContainer = TRUE; |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, |
| - eValue, this, GetNodeItem(XFA_NODEITEM_Parent)); |
| - break; |
| - case XFA_ELEMENT_Font: |
| - case XFA_ELEMENT_Para: { |
| - bNeedFindContainer = TRUE; |
| - CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent); |
| - if (pParentNode->GetClassID() == XFA_ELEMENT_Caption) { |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, |
| - eValue, pParentNode, |
| - pParentNode->GetNodeItem(XFA_NODEITEM_Parent)); |
| - } else { |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, |
| - eValue, this, pParentNode); |
| - } |
| - } break; |
| - case XFA_ELEMENT_Margin: { |
| - bNeedFindContainer = TRUE; |
| - CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent); |
| - XFA_ELEMENT eParentType = pParentNode->GetClassID(); |
| - if (pParentNode->IsContainerNode()) { |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, |
| - eValue, this, pParentNode); |
| - } else if (eParentType == XFA_ELEMENT_Caption) { |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, |
| - eValue, pParentNode, |
| - pParentNode->GetNodeItem(XFA_NODEITEM_Parent)); |
| - } else { |
| - CXFA_Node* pNode = pParentNode->GetNodeItem(XFA_NODEITEM_Parent); |
| - if (pNode && pNode->GetClassID() == XFA_ELEMENT_Ui) { |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, |
| - eValue, pNode, |
| - pNode->GetNodeItem(XFA_NODEITEM_Parent)); |
| - } |
| - } |
| - } break; |
| - case XFA_ELEMENT_Comb: { |
| - CXFA_Node* pEditNode = GetNodeItem(XFA_NODEITEM_Parent); |
| - XFA_ELEMENT eUIType = pEditNode->GetClassID(); |
| - if (pEditNode && (eUIType == XFA_ELEMENT_DateTimeEdit || |
| - eUIType == XFA_ELEMENT_NumericEdit || |
| - eUIType == XFA_ELEMENT_TextEdit)) { |
| - CXFA_Node* pUINode = pEditNode->GetNodeItem(XFA_NODEITEM_Parent); |
| - if (pUINode) { |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, |
| - eValue, pUINode, |
| - pUINode->GetNodeItem(XFA_NODEITEM_Parent)); |
| - } |
| - } |
| - } break; |
| - case XFA_ELEMENT_Button: |
| - case XFA_ELEMENT_Barcode: |
| - case XFA_ELEMENT_ChoiceList: |
| - case XFA_ELEMENT_DateTimeEdit: |
| - case XFA_ELEMENT_NumericEdit: |
| - case XFA_ELEMENT_PasswordEdit: |
| - case XFA_ELEMENT_TextEdit: { |
| - CXFA_Node* pUINode = GetNodeItem(XFA_NODEITEM_Parent); |
| - if (pUINode) { |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, |
| - eValue, pUINode, |
| - pUINode->GetNodeItem(XFA_NODEITEM_Parent)); |
| + if (!(dwPacket & XFA_XDPPACKET_Form)) { |
| + pNotify->OnValueChanged(this, eAttribute, this, this); |
| + return; |
| + } |
| + |
| + bool bNeedFindContainer = false; |
| + XFA_ELEMENT eType = GetClassID(); |
| + switch (eType) { |
| + case XFA_ELEMENT_Caption: |
| + bNeedFindContainer = true; |
| + pNotify->OnValueChanged(this, eAttribute, this, |
| + GetNodeItem(XFA_NODEITEM_Parent)); |
| + break; |
| + case XFA_ELEMENT_Font: |
| + case XFA_ELEMENT_Para: { |
| + bNeedFindContainer = true; |
| + CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent); |
| + if (pParentNode->GetClassID() == XFA_ELEMENT_Caption) { |
| + pNotify->OnValueChanged(this, eAttribute, pParentNode, |
| + pParentNode->GetNodeItem(XFA_NODEITEM_Parent)); |
| + } else { |
| + pNotify->OnValueChanged(this, eAttribute, this, pParentNode); |
| + } |
| + } break; |
| + case XFA_ELEMENT_Margin: { |
| + bNeedFindContainer = true; |
| + CXFA_Node* pParentNode = GetNodeItem(XFA_NODEITEM_Parent); |
| + XFA_ELEMENT eParentType = pParentNode->GetClassID(); |
| + if (pParentNode->IsContainerNode()) { |
| + pNotify->OnValueChanged(this, eAttribute, this, pParentNode); |
| + } else if (eParentType == XFA_ELEMENT_Caption) { |
| + pNotify->OnValueChanged(this, eAttribute, pParentNode, |
| + pParentNode->GetNodeItem(XFA_NODEITEM_Parent)); |
| + } else { |
| + CXFA_Node* pNode = pParentNode->GetNodeItem(XFA_NODEITEM_Parent); |
| + if (pNode && pNode->GetClassID() == XFA_ELEMENT_Ui) { |
| + pNotify->OnValueChanged(this, eAttribute, pNode, |
| + pNode->GetNodeItem(XFA_NODEITEM_Parent)); |
| } |
| - } break; |
| - case XFA_ELEMENT_CheckButton: { |
| - bNeedFindContainer = TRUE; |
| - CXFA_Node* pUINode = GetNodeItem(XFA_NODEITEM_Parent); |
| + } |
| + } break; |
| + case XFA_ELEMENT_Comb: { |
| + CXFA_Node* pEditNode = GetNodeItem(XFA_NODEITEM_Parent); |
| + XFA_ELEMENT eUIType = pEditNode->GetClassID(); |
| + if (pEditNode && (eUIType == XFA_ELEMENT_DateTimeEdit || |
| + eUIType == XFA_ELEMENT_NumericEdit || |
| + eUIType == XFA_ELEMENT_TextEdit)) { |
| + CXFA_Node* pUINode = pEditNode->GetNodeItem(XFA_NODEITEM_Parent); |
| if (pUINode) { |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, |
| - eValue, pUINode, |
| - pUINode->GetNodeItem(XFA_NODEITEM_Parent)); |
| + pNotify->OnValueChanged(this, eAttribute, pUINode, |
| + pUINode->GetNodeItem(XFA_NODEITEM_Parent)); |
| } |
| - } break; |
| - case XFA_ELEMENT_Keep: |
| - case XFA_ELEMENT_Bookend: |
| - case XFA_ELEMENT_Break: |
| - case XFA_ELEMENT_BreakAfter: |
| - case XFA_ELEMENT_BreakBefore: |
| - case XFA_ELEMENT_Overflow: |
| - bNeedFindContainer = TRUE; |
| - break; |
| - case XFA_ELEMENT_Area: |
| - case XFA_ELEMENT_Draw: |
| - case XFA_ELEMENT_ExclGroup: |
| - case XFA_ELEMENT_Field: |
| - case XFA_ELEMENT_Subform: |
| - case XFA_ELEMENT_SubformSet: |
| - pLayoutPro->AddChangedContainer(this); |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, |
| - eValue, this, this); |
| - break; |
| - case XFA_ELEMENT_Sharptext: |
| - case XFA_ELEMENT_Sharpxml: |
| - case XFA_ELEMENT_SharpxHTML: { |
| - CXFA_Node* pTextNode = GetNodeItem(XFA_NODEITEM_Parent); |
| - if (!pTextNode) { |
| - return; |
| - } |
| - CXFA_Node* pValueNode = pTextNode->GetNodeItem(XFA_NODEITEM_Parent); |
| - if (!pValueNode) { |
| - return; |
| + } |
| + } break; |
| + case XFA_ELEMENT_Button: |
| + case XFA_ELEMENT_Barcode: |
| + case XFA_ELEMENT_ChoiceList: |
| + case XFA_ELEMENT_DateTimeEdit: |
| + case XFA_ELEMENT_NumericEdit: |
| + case XFA_ELEMENT_PasswordEdit: |
| + case XFA_ELEMENT_TextEdit: { |
| + CXFA_Node* pUINode = GetNodeItem(XFA_NODEITEM_Parent); |
| + if (pUINode) { |
| + pNotify->OnValueChanged(this, eAttribute, pUINode, |
| + pUINode->GetNodeItem(XFA_NODEITEM_Parent)); |
| + } |
| + } break; |
| + case XFA_ELEMENT_CheckButton: { |
| + bNeedFindContainer = true; |
| + CXFA_Node* pUINode = GetNodeItem(XFA_NODEITEM_Parent); |
| + if (pUINode) { |
| + pNotify->OnValueChanged(this, eAttribute, pUINode, |
| + pUINode->GetNodeItem(XFA_NODEITEM_Parent)); |
| + } |
| + } break; |
| + case XFA_ELEMENT_Keep: |
| + case XFA_ELEMENT_Bookend: |
| + case XFA_ELEMENT_Break: |
| + case XFA_ELEMENT_BreakAfter: |
| + case XFA_ELEMENT_BreakBefore: |
| + case XFA_ELEMENT_Overflow: |
| + bNeedFindContainer = true; |
| + break; |
| + case XFA_ELEMENT_Area: |
| + case XFA_ELEMENT_Draw: |
| + case XFA_ELEMENT_ExclGroup: |
| + case XFA_ELEMENT_Field: |
| + case XFA_ELEMENT_Subform: |
| + case XFA_ELEMENT_SubformSet: |
| + pLayoutPro->AddChangedContainer(this); |
| + pNotify->OnValueChanged(this, eAttribute, this, this); |
| + break; |
| + case XFA_ELEMENT_Sharptext: |
| + case XFA_ELEMENT_Sharpxml: |
| + case XFA_ELEMENT_SharpxHTML: { |
| + CXFA_Node* pTextNode = GetNodeItem(XFA_NODEITEM_Parent); |
| + if (!pTextNode) { |
| + return; |
| + } |
| + CXFA_Node* pValueNode = pTextNode->GetNodeItem(XFA_NODEITEM_Parent); |
| + if (!pValueNode) { |
| + return; |
| + } |
| + XFA_ELEMENT eType = pValueNode->GetClassID(); |
| + if (eType == XFA_ELEMENT_Value) { |
| + bNeedFindContainer = true; |
| + CXFA_Node* pNode = pValueNode->GetNodeItem(XFA_NODEITEM_Parent); |
| + if (pNode && pNode->IsContainerNode()) { |
| + if (bScriptModify) { |
| + pValueNode = pNode; |
| + } |
| + pNotify->OnValueChanged(this, eAttribute, pValueNode, pNode); |
| + } else { |
| + pNotify->OnValueChanged(this, eAttribute, pNode, |
| + pNode->GetNodeItem(XFA_NODEITEM_Parent)); |
| } |
| - XFA_ELEMENT eType = pValueNode->GetClassID(); |
| - if (eType == XFA_ELEMENT_Value) { |
| - bNeedFindContainer = TRUE; |
| + } else { |
| + if (eType == XFA_ELEMENT_Items) { |
| CXFA_Node* pNode = pValueNode->GetNodeItem(XFA_NODEITEM_Parent); |
| if (pNode && pNode->IsContainerNode()) { |
| - if (bScriptModify) { |
| - pValueNode = pNode; |
| - } |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, |
| - eValue, pValueNode, pNode); |
| - } else { |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, |
| - eValue, pNode, |
| - pNode->GetNodeItem(XFA_NODEITEM_Parent)); |
| - } |
| - } else { |
| - if (eType == XFA_ELEMENT_Items) { |
| - CXFA_Node* pNode = pValueNode->GetNodeItem(XFA_NODEITEM_Parent); |
| - if (pNode && pNode->IsContainerNode()) { |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, |
| - eValue, pValueNode, pNode); |
| - } |
| + pNotify->OnValueChanged(this, eAttribute, pValueNode, pNode); |
| } |
| } |
| - } break; |
| - default: |
| - break; |
| - } |
| - if (bNeedFindContainer) { |
| - CXFA_Node* pParent = this; |
| - while (pParent) { |
| - if (pParent->IsContainerNode()) { |
| - break; |
| - } |
| - pParent = pParent->GetNodeItem(XFA_NODEITEM_Parent); |
| } |
| - if (pParent) { |
| - pLayoutPro->AddChangedContainer(pParent); |
| + } break; |
| + default: |
| + break; |
| + } |
| + if (bNeedFindContainer) { |
| + CXFA_Node* pParent = this; |
| + while (pParent) { |
| + if (pParent->IsContainerNode()) { |
| + break; |
| } |
| + pParent = pParent->GetNodeItem(XFA_NODEITEM_Parent); |
| + } |
| + if (pParent) { |
| + pLayoutPro->AddChangedContainer(pParent); |
| } |
| - } else { |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanged, eAttribute, eValue, |
| - this, this); |
| } |
| } |
| + |
| void CXFA_Node::Script_Attribute_String(FXJSE_HVALUE hValue, |
| FX_BOOL bSetting, |
| XFA_ATTRIBUTE eAttribute) { |
| @@ -3754,7 +3743,7 @@ FX_BOOL CXFA_Node::HasAttribute(XFA_ATTRIBUTE eAttr, FX_BOOL bCanInherit) { |
| } |
| FX_BOOL CXFA_Node::SetAttribute(XFA_ATTRIBUTE eAttr, |
| const CFX_WideStringC& wsValue, |
| - FX_BOOL bNotify) { |
| + bool bNotify) { |
| const XFA_ATTRIBUTEINFO* pAttr = XFA_GetAttributeByID(eAttr); |
| if (pAttr == NULL) { |
| return FALSE; |
| @@ -3850,7 +3839,7 @@ FX_BOOL CXFA_Node::GetAttribute(XFA_ATTRIBUTE eAttr, |
| } |
| FX_BOOL CXFA_Node::SetAttribute(const CFX_WideStringC& wsAttr, |
| const CFX_WideStringC& wsValue, |
| - FX_BOOL bNotify) { |
| + bool bNotify) { |
| const XFA_ATTRIBUTEINFO* pAttributeInfo = XFA_GetAttributeByName(wsValue); |
| if (pAttributeInfo) { |
| return SetAttribute(pAttributeInfo->eName, wsValue, bNotify); |
| @@ -3908,15 +3897,17 @@ FX_BOOL CXFA_Node::TryEnum(XFA_ATTRIBUTE eAttr, |
| eValue = (XFA_ATTRIBUTEENUM)(uintptr_t)pValue; |
| return TRUE; |
| } |
| + |
| FX_BOOL CXFA_Node::SetMeasure(XFA_ATTRIBUTE eAttr, |
| CXFA_Measurement mValue, |
| - FX_BOOL bNotify) { |
| + bool bNotify) { |
| void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); |
| - OnChanging(eAttr, &mValue, bNotify); |
| + OnChanging(eAttr, bNotify); |
| SetMapModuleBuffer(pKey, &mValue, sizeof(CXFA_Measurement)); |
| - OnChanged(eAttr, &mValue, bNotify); |
| + OnChanged(eAttr, bNotify, FALSE); |
| return TRUE; |
| } |
| + |
| FX_BOOL CXFA_Node::TryMeasure(XFA_ATTRIBUTE eAttr, |
| CXFA_Measurement& mValue, |
| FX_BOOL bUseDefault) const { |
| @@ -3943,10 +3934,10 @@ CXFA_Measurement CXFA_Node::GetMeasure(XFA_ATTRIBUTE eAttr) const { |
| FX_BOOL CXFA_Node::SetCData(XFA_ATTRIBUTE eAttr, |
| const CFX_WideString& wsValue, |
| - FX_BOOL bNotify, |
| + bool bNotify, |
| FX_BOOL bScriptModify) { |
| void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); |
| - OnChanging(eAttr, (void*)wsValue.c_str(), bNotify); |
| + OnChanging(eAttr, bNotify); |
| if (eAttr == XFA_ATTRIBUTE_Value) { |
| CFX_WideString* pClone = new CFX_WideString(wsValue); |
| SetUserData(pKey, pClone, &deleteWideStringCallBack); |
| @@ -3955,71 +3946,75 @@ FX_BOOL CXFA_Node::SetCData(XFA_ATTRIBUTE eAttr, |
| if (eAttr == XFA_ATTRIBUTE_Name) |
| UpdateNameHash(); |
| } |
| - OnChanged(eAttr, (void*)wsValue.c_str(), bNotify, bScriptModify); |
| - if (IsNeedSavingXMLNode() && eAttr != XFA_ATTRIBUTE_QualifiedName && |
| - eAttr != XFA_ATTRIBUTE_BindingNode) { |
| - if (eAttr == XFA_ATTRIBUTE_Name && |
| - (m_eNodeClass == XFA_ELEMENT_DataValue || |
| - m_eNodeClass == XFA_ELEMENT_DataGroup)) { |
| - return TRUE; |
| - } |
| - if (eAttr == XFA_ATTRIBUTE_Value) { |
| - FDE_XMLNODETYPE eXMLType = m_pXMLNode->GetType(); |
| - switch (eXMLType) { |
| - case FDE_XMLNODE_Element: |
| - if (IsAttributeInXML()) { |
| - static_cast<CFDE_XMLElement*>(m_pXMLNode) |
| - ->SetString(GetCData(XFA_ATTRIBUTE_QualifiedName), wsValue); |
| - } else { |
| - FX_BOOL bDeleteChildren = TRUE; |
| - if (GetPacketID() == XFA_XDPPACKET_Datasets) { |
| - for (CXFA_Node* pChildDataNode = |
| - GetNodeItem(XFA_NODEITEM_FirstChild); |
| - pChildDataNode; pChildDataNode = pChildDataNode->GetNodeItem( |
| - XFA_NODEITEM_NextSibling)) { |
| - CXFA_NodeArray formNodes; |
| - if (pChildDataNode->GetBindItems(formNodes) > 0) { |
| - bDeleteChildren = FALSE; |
| - break; |
| - } |
| + OnChanged(eAttr, bNotify, bScriptModify); |
| + |
| + if (!IsNeedSavingXMLNode() || eAttr == XFA_ATTRIBUTE_QualifiedName || |
| + eAttr == XFA_ATTRIBUTE_BindingNode) { |
| + return TRUE; |
| + } |
| + |
| + if (eAttr == XFA_ATTRIBUTE_Name && (m_eNodeClass == XFA_ELEMENT_DataValue || |
| + m_eNodeClass == XFA_ELEMENT_DataGroup)) { |
| + return TRUE; |
| + } |
| + |
| + if (eAttr == XFA_ATTRIBUTE_Value) { |
| + FDE_XMLNODETYPE eXMLType = m_pXMLNode->GetType(); |
| + switch (eXMLType) { |
| + case FDE_XMLNODE_Element: |
| + if (IsAttributeInXML()) { |
| + static_cast<CFDE_XMLElement*>(m_pXMLNode) |
| + ->SetString(GetCData(XFA_ATTRIBUTE_QualifiedName), wsValue); |
| + } else { |
| + FX_BOOL bDeleteChildren = TRUE; |
| + if (GetPacketID() == XFA_XDPPACKET_Datasets) { |
| + for (CXFA_Node* pChildDataNode = |
| + GetNodeItem(XFA_NODEITEM_FirstChild); |
| + pChildDataNode; pChildDataNode = pChildDataNode->GetNodeItem( |
| + XFA_NODEITEM_NextSibling)) { |
| + CXFA_NodeArray formNodes; |
| + if (pChildDataNode->GetBindItems(formNodes) > 0) { |
| + bDeleteChildren = FALSE; |
| + break; |
| } |
| } |
| - if (bDeleteChildren) { |
| - static_cast<CFDE_XMLElement*>(m_pXMLNode)->DeleteChildren(); |
| - } |
| - static_cast<CFDE_XMLElement*>(m_pXMLNode)->SetTextData(wsValue); |
| } |
| - break; |
| - case FDE_XMLNODE_Text: |
| - static_cast<CFDE_XMLText*>(m_pXMLNode)->SetText(wsValue); |
| - break; |
| - default: |
| - FXSYS_assert(0); |
| - } |
| - return TRUE; |
| + if (bDeleteChildren) { |
| + static_cast<CFDE_XMLElement*>(m_pXMLNode)->DeleteChildren(); |
| + } |
| + static_cast<CFDE_XMLElement*>(m_pXMLNode)->SetTextData(wsValue); |
| + } |
| + break; |
| + case FDE_XMLNODE_Text: |
| + static_cast<CFDE_XMLText*>(m_pXMLNode)->SetText(wsValue); |
| + break; |
| + default: |
| + FXSYS_assert(0); |
| } |
| - const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttr); |
| - if (pInfo) { |
| - FXSYS_assert(m_pXMLNode->GetType() == FDE_XMLNODE_Element); |
| - CFX_WideString wsAttrName = pInfo->pName; |
| - if (pInfo->eName == XFA_ATTRIBUTE_ContentType) { |
| - wsAttrName = FX_WSTRC(L"xfa:") + wsAttrName; |
| - } |
| - static_cast<CFDE_XMLElement*>(m_pXMLNode)->SetString(wsAttrName, wsValue); |
| + return TRUE; |
| + } |
| + |
| + const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttr); |
| + if (pInfo) { |
| + FXSYS_assert(m_pXMLNode->GetType() == FDE_XMLNODE_Element); |
| + CFX_WideString wsAttrName = pInfo->pName; |
| + if (pInfo->eName == XFA_ATTRIBUTE_ContentType) { |
| + wsAttrName = FX_WSTRC(L"xfa:") + wsAttrName; |
| } |
| + static_cast<CFDE_XMLElement*>(m_pXMLNode)->SetString(wsAttrName, wsValue); |
| } |
| return TRUE; |
| } |
| + |
| FX_BOOL CXFA_Node::SetAttributeValue(const CFX_WideString& wsValue, |
| const CFX_WideString& wsXMLValue, |
| - FX_BOOL bNotify, |
| + bool bNotify, |
| FX_BOOL bScriptModify) { |
| void* pKey = XFA_GetMapKey_Element(GetClassID(), XFA_ATTRIBUTE_Value); |
| - OnChanging(XFA_ATTRIBUTE_Value, (void*)wsValue.c_str(), bNotify); |
| + OnChanging(XFA_ATTRIBUTE_Value, bNotify); |
| CFX_WideString* pClone = new CFX_WideString(wsValue); |
| SetUserData(pKey, pClone, &deleteWideStringCallBack); |
| - OnChanged(XFA_ATTRIBUTE_Value, (void*)wsValue.c_str(), bNotify, |
| - bScriptModify); |
| + OnChanged(XFA_ATTRIBUTE_Value, bNotify, bScriptModify); |
| if (IsNeedSavingXMLNode()) { |
| FDE_XMLNODETYPE eXMLType = m_pXMLNode->GetType(); |
| switch (eXMLType) { |
| @@ -4126,11 +4121,11 @@ FX_BOOL CXFA_Node::TryObject(XFA_ATTRIBUTE eAttr, void*& pData) { |
| FX_BOOL CXFA_Node::SetValue(XFA_ATTRIBUTE eAttr, |
| XFA_ATTRIBUTETYPE eType, |
| void* pValue, |
| - FX_BOOL bNotify) { |
| + bool bNotify) { |
| void* pKey = XFA_GetMapKey_Element(GetClassID(), eAttr); |
| - OnChanging(eAttr, pValue, bNotify); |
| + OnChanging(eAttr, bNotify); |
| SetMapModuleValue(pKey, pValue); |
| - OnChanged(eAttr, pValue, bNotify); |
| + OnChanged(eAttr, bNotify, FALSE); |
| if (IsNeedSavingXMLNode()) { |
| FXSYS_assert(m_pXMLNode->GetType() == FDE_XMLNODE_Element); |
| const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttr); |
| @@ -4192,7 +4187,7 @@ FX_BOOL CXFA_Node::TryUserData(void* pKey, void*& pData, FX_BOOL bProtoAlso) { |
| } |
| FX_BOOL CXFA_Node::SetScriptContent(const CFX_WideString& wsContent, |
| const CFX_WideString& wsXMLValue, |
| - FX_BOOL bNotify, |
| + bool bNotify, |
| FX_BOOL bScriptModify, |
| FX_BOOL bSyncData) { |
| CXFA_Node* pNode = NULL; |
| @@ -4368,7 +4363,7 @@ FX_BOOL CXFA_Node::SetScriptContent(const CFX_WideString& wsContent, |
| } |
| FX_BOOL CXFA_Node::SetContent(const CFX_WideString& wsContent, |
| const CFX_WideString& wsXMLValue, |
| - FX_BOOL bNotify, |
| + bool bNotify, |
| FX_BOOL bScriptModify, |
| FX_BOOL bSyncData) { |
| return SetScriptContent(wsContent, wsXMLValue, bNotify, bScriptModify, |
| @@ -4620,9 +4615,9 @@ int32_t CXFA_Node::InsertChild(int32_t index, CXFA_Node* pNode) { |
| ASSERT(m_pLastChild->m_pNext == NULL); |
| pNode->SetFlag(XFA_NODEFLAG_HasRemoved, FALSE); |
| CXFA_FFNotify* pNotify = m_pDocument->GetParser()->GetNotify(); |
| - if (pNotify) { |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ChildAdded, pNode); |
| - } |
| + if (pNotify) |
| + pNotify->OnChildAdded(this); |
| + |
| if (IsNeedSavingXMLNode() && pNode->m_pXMLNode) { |
| FXSYS_assert(pNode->m_pXMLNode->GetNodeItem(CFDE_XMLNode::Parent) == NULL); |
| m_pXMLNode->InsertChildNode(pNode->m_pXMLNode, index); |
| @@ -4666,9 +4661,9 @@ FX_BOOL CXFA_Node::InsertChild(CXFA_Node* pNode, CXFA_Node* pBeforeNode) { |
| ASSERT(m_pLastChild->m_pNext == NULL); |
| pNode->SetFlag(XFA_NODEFLAG_HasRemoved, FALSE); |
| CXFA_FFNotify* pNotify = m_pDocument->GetParser()->GetNotify(); |
| - if (pNotify) { |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ChildAdded, pNode); |
| - } |
| + if (pNotify) |
| + pNotify->OnChildAdded(this); |
| + |
| if (IsNeedSavingXMLNode() && pNode->m_pXMLNode) { |
| FXSYS_assert(pNode->m_pXMLNode->GetNodeItem(CFDE_XMLNode::Parent) == NULL); |
| m_pXMLNode->InsertChildNode(pNode->m_pXMLNode, nIndex); |
| @@ -4688,7 +4683,7 @@ CXFA_Node* CXFA_Node::Deprecated_GetPrevSibling() { |
| } |
| return NULL; |
| } |
| -FX_BOOL CXFA_Node::RemoveChild(CXFA_Node* pNode, FX_BOOL bNotify) { |
| +FX_BOOL CXFA_Node::RemoveChild(CXFA_Node* pNode, bool bNotify) { |
| if (pNode == NULL || pNode->m_pParent != this) { |
| FXSYS_assert(FALSE); |
| return FALSE; |
| @@ -4710,7 +4705,7 @@ FX_BOOL CXFA_Node::RemoveChild(CXFA_Node* pNode, FX_BOOL bNotify) { |
| pNode->m_pParent = NULL; |
| } |
| ASSERT(m_pLastChild == NULL || m_pLastChild->m_pNext == NULL); |
| - OnRemoved(this, pNode, bNotify); |
| + OnRemoved(bNotify); |
| pNode->SetFlag(XFA_NODEFLAG_HasRemoved); |
| m_pDocument->AddPurgeNode(pNode); |
| if (IsNeedSavingXMLNode() && pNode->m_pXMLNode) { |
| @@ -4851,58 +4846,53 @@ FX_BOOL CXFA_Node::HasFlag(uint32_t dwFlag) const { |
| } |
| return FALSE; |
| } |
| -void CXFA_Node::SetFlag(uint32_t dwFlag, FX_BOOL bOn, FX_BOOL bNotify) { |
| - if (bOn) { |
| - switch (dwFlag) { |
| - case XFA_NODEFLAG_Initialized: |
| - if (bNotify && !HasFlag(XFA_NODEFLAG_Initialized)) { |
| - CXFA_FFNotify* pNotify = m_pDocument->GetParser()->GetNotify(); |
| - if (pNotify) { |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_Ready); |
| - } |
| - } |
| - break; |
| - default: |
| - break; |
| - } |
| - m_uFlags |= dwFlag; |
| - } else { |
| + |
| +void CXFA_Node::SetFlag(uint32_t dwFlag, FX_BOOL bOn, bool bNotify) { |
|
Tom Sepez
2016/04/14 22:08:55
might be worth having a separate ClearFlag rather
Lei Zhang
2016/04/15 01:16:41
Done.
|
| + if (!bOn) { |
| m_uFlags &= ~dwFlag; |
| + return; |
| + } |
| + |
| + if (dwFlag == XFA_NODEFLAG_Initialized && bNotify && |
| + !HasFlag(XFA_NODEFLAG_Initialized)) { |
| + CXFA_FFNotify* pNotify = m_pDocument->GetParser()->GetNotify(); |
| + if (pNotify) { |
| + pNotify->OnNodeReady(this); |
| + } |
| } |
| + m_uFlags |= dwFlag; |
| } |
| + |
| FX_BOOL CXFA_Node::IsAttributeInXML() { |
| return GetEnum(XFA_ATTRIBUTE_Contains) == XFA_ATTRIBUTEENUM_MetaData; |
| } |
| -void CXFA_Node::OnRemoved(CXFA_Node* pParent, |
| - CXFA_Node* pRemoved, |
| - FX_BOOL bNotify) { |
| - if (bNotify && pParent) { |
| + |
| +void CXFA_Node::OnRemoved(bool bNotify) { |
| + if (bNotify) { |
| CXFA_FFNotify* pNotify = m_pDocument->GetParser()->GetNotify(); |
| if (pNotify) { |
| - pNotify->OnNodeEvent(pParent, XFA_NODEEVENT_ChildRemoved, pRemoved); |
| + pNotify->OnChildRemoved(); |
| } |
| } |
| } |
| -void CXFA_Node::OnChanging(XFA_ATTRIBUTE eAttr, |
| - void* pNewValue, |
| - FX_BOOL bNotify) { |
| + |
| +void CXFA_Node::OnChanging(XFA_ATTRIBUTE eAttr, bool bNotify) { |
| if (bNotify && HasFlag(XFA_NODEFLAG_Initialized)) { |
| CXFA_FFNotify* pNotify = m_pDocument->GetParser()->GetNotify(); |
| if (pNotify) { |
| - pNotify->OnNodeEvent(this, XFA_NODEEVENT_ValueChanging, |
| - (void*)(uintptr_t)eAttr, pNewValue); |
| + pNotify->OnValueChanging(this, eAttr); |
| } |
| } |
| } |
| + |
| void CXFA_Node::OnChanged(XFA_ATTRIBUTE eAttr, |
| - void* pNewValue, |
| - FX_BOOL bNotify, |
| + bool bNotify, |
| FX_BOOL bScriptModify) { |
| if (bNotify && HasFlag(XFA_NODEFLAG_Initialized)) { |
| - Script_Attribute_SendAttributeChangeMessage((void*)(uintptr_t)eAttr, |
| - pNewValue, bScriptModify); |
| + Script_Attribute_SendAttributeChangeMessage(eAttr, bScriptModify); |
| } |
| } |
| + |
| int32_t CXFA_Node::execSingleEventByName(const CFX_WideStringC& wsEventName, |
| XFA_ELEMENT eElementType) { |
| int32_t iRet = XFA_EVENTERROR_NotExist; |