| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fxfa/parser/xfa_document_datamerger_imp.h" | 7 #include "xfa/fxfa/parser/xfa_document_datamerger_imp.h" |
| 8 | 8 |
| 9 #include "core/fxcrt/fx_ext.h" | 9 #include "core/fxcrt/fx_ext.h" |
| 10 #include "xfa/fde/xml/fde_xml_imp.h" | 10 #include "xfa/fde/xml/fde_xml_imp.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 static CXFA_Node* GetParent(CXFA_Node* pDDGroupNode) { | 30 static CXFA_Node* GetParent(CXFA_Node* pDDGroupNode) { |
| 31 return pDDGroupNode->GetNodeItem(XFA_NODEITEM_Parent); | 31 return pDDGroupNode->GetNodeItem(XFA_NODEITEM_Parent); |
| 32 } | 32 } |
| 33 }; | 33 }; |
| 34 | 34 |
| 35 struct RecurseRecord { | 35 struct RecurseRecord { |
| 36 CXFA_Node* pTemplateChild; | 36 CXFA_Node* pTemplateChild; |
| 37 CXFA_Node* pDataChild; | 37 CXFA_Node* pDataChild; |
| 38 }; | 38 }; |
| 39 | 39 |
| 40 FX_BOOL GetOccurInfo(CXFA_Node* pOccurNode, | 40 bool GetOccurInfo(CXFA_Node* pOccurNode, |
| 41 int32_t& iMin, | 41 int32_t& iMin, |
| 42 int32_t& iMax, | 42 int32_t& iMax, |
| 43 int32_t& iInit) { | 43 int32_t& iInit) { |
| 44 if (!pOccurNode) | 44 if (!pOccurNode) |
| 45 return FALSE; | 45 return false; |
| 46 | 46 |
| 47 CXFA_Occur occur(pOccurNode); | 47 CXFA_Occur occur(pOccurNode); |
| 48 return occur.GetOccurInfo(iMin, iMax, iInit); | 48 return occur.GetOccurInfo(iMin, iMax, iInit); |
| 49 } | 49 } |
| 50 | 50 |
| 51 CXFA_Node* FormValueNode_CreateChild(CXFA_Node* pValueNode, XFA_Element iType) { | 51 CXFA_Node* FormValueNode_CreateChild(CXFA_Node* pValueNode, XFA_Element iType) { |
| 52 CXFA_Node* pChildNode = pValueNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 52 CXFA_Node* pChildNode = pValueNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 53 if (!pChildNode) { | 53 if (!pChildNode) { |
| 54 if (iType == XFA_Element::Unknown) | 54 if (iType == XFA_Element::Unknown) |
| 55 return nullptr; | 55 return nullptr; |
| 56 pChildNode = pValueNode->GetProperty(0, iType); | 56 pChildNode = pValueNode->GetProperty(0, iType); |
| 57 } | 57 } |
| 58 return pChildNode; | 58 return pChildNode; |
| 59 } | 59 } |
| 60 | 60 |
| 61 void FormValueNode_MatchNoneCreateChild(CXFA_Node* pFormNode) { | 61 void FormValueNode_MatchNoneCreateChild(CXFA_Node* pFormNode) { |
| 62 CXFA_WidgetData* pWidgetData = pFormNode->GetWidgetData(); | 62 CXFA_WidgetData* pWidgetData = pFormNode->GetWidgetData(); |
| 63 ASSERT(pWidgetData); | 63 ASSERT(pWidgetData); |
| 64 pWidgetData->GetUIType(); | 64 pWidgetData->GetUIType(); |
| 65 } | 65 } |
| 66 | 66 |
| 67 FX_BOOL FormValueNode_SetChildContent( | 67 bool FormValueNode_SetChildContent(CXFA_Node* pValueNode, |
| 68 CXFA_Node* pValueNode, | 68 const CFX_WideString& wsContent, |
| 69 const CFX_WideString& wsContent, | 69 XFA_Element iType = XFA_Element::Unknown) { |
| 70 XFA_Element iType = XFA_Element::Unknown) { | |
| 71 if (!pValueNode) | 70 if (!pValueNode) |
| 72 return FALSE; | 71 return false; |
| 73 | 72 |
| 74 ASSERT(pValueNode->GetPacketID() == XFA_XDPPACKET_Form); | 73 ASSERT(pValueNode->GetPacketID() == XFA_XDPPACKET_Form); |
| 75 CXFA_Node* pChildNode = FormValueNode_CreateChild(pValueNode, iType); | 74 CXFA_Node* pChildNode = FormValueNode_CreateChild(pValueNode, iType); |
| 76 if (!pChildNode) | 75 if (!pChildNode) |
| 77 return FALSE; | 76 return false; |
| 78 | 77 |
| 79 switch (pChildNode->GetObjectType()) { | 78 switch (pChildNode->GetObjectType()) { |
| 80 case XFA_ObjectType::ContentNode: { | 79 case XFA_ObjectType::ContentNode: { |
| 81 CXFA_Node* pContentRawDataNode = | 80 CXFA_Node* pContentRawDataNode = |
| 82 pChildNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 81 pChildNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 83 if (!pContentRawDataNode) { | 82 if (!pContentRawDataNode) { |
| 84 XFA_Element element = XFA_Element::Sharptext; | 83 XFA_Element element = XFA_Element::Sharptext; |
| 85 if (pChildNode->GetElementType() == XFA_Element::ExData) { | 84 if (pChildNode->GetElementType() == XFA_Element::ExData) { |
| 86 CFX_WideString wsContentType; | 85 CFX_WideString wsContentType; |
| 87 pChildNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, | 86 pChildNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, |
| 88 FALSE); | 87 false); |
| 89 if (wsContentType == FX_WSTRC(L"text/html")) | 88 if (wsContentType == FX_WSTRC(L"text/html")) |
| 90 element = XFA_Element::SharpxHTML; | 89 element = XFA_Element::SharpxHTML; |
| 91 else if (wsContentType == FX_WSTRC(L"text/xml")) | 90 else if (wsContentType == FX_WSTRC(L"text/xml")) |
| 92 element = XFA_Element::Sharpxml; | 91 element = XFA_Element::Sharpxml; |
| 93 } | 92 } |
| 94 pContentRawDataNode = pChildNode->CreateSamePacketNode(element); | 93 pContentRawDataNode = pChildNode->CreateSamePacketNode(element); |
| 95 pChildNode->InsertChild(pContentRawDataNode); | 94 pChildNode->InsertChild(pContentRawDataNode); |
| 96 } | 95 } |
| 97 pContentRawDataNode->SetCData(XFA_ATTRIBUTE_Value, wsContent); | 96 pContentRawDataNode->SetCData(XFA_ATTRIBUTE_Value, wsContent); |
| 98 break; | 97 break; |
| 99 } | 98 } |
| 100 case XFA_ObjectType::NodeC: | 99 case XFA_ObjectType::NodeC: |
| 101 case XFA_ObjectType::TextNode: | 100 case XFA_ObjectType::TextNode: |
| 102 case XFA_ObjectType::NodeV: { | 101 case XFA_ObjectType::NodeV: { |
| 103 pChildNode->SetCData(XFA_ATTRIBUTE_Value, wsContent); | 102 pChildNode->SetCData(XFA_ATTRIBUTE_Value, wsContent); |
| 104 break; | 103 break; |
| 105 } | 104 } |
| 106 default: | 105 default: |
| 107 ASSERT(FALSE); | 106 ASSERT(false); |
| 108 break; | 107 break; |
| 109 } | 108 } |
| 110 return TRUE; | 109 return true; |
| 111 } | 110 } |
| 112 | 111 |
| 113 void CreateDataBinding(CXFA_Node* pFormNode, | 112 void CreateDataBinding(CXFA_Node* pFormNode, |
| 114 CXFA_Node* pDataNode, | 113 CXFA_Node* pDataNode, |
| 115 FX_BOOL bDataToForm) { | 114 bool bDataToForm) { |
| 116 pFormNode->SetObject(XFA_ATTRIBUTE_BindingNode, pDataNode); | 115 pFormNode->SetObject(XFA_ATTRIBUTE_BindingNode, pDataNode); |
| 117 pDataNode->AddBindItem(pFormNode); | 116 pDataNode->AddBindItem(pFormNode); |
| 118 XFA_Element eType = pFormNode->GetElementType(); | 117 XFA_Element eType = pFormNode->GetElementType(); |
| 119 if (eType != XFA_Element::Field && eType != XFA_Element::ExclGroup) | 118 if (eType != XFA_Element::Field && eType != XFA_Element::ExclGroup) |
| 120 return; | 119 return; |
| 121 | 120 |
| 122 CXFA_WidgetData* pWidgetData = pFormNode->GetWidgetData(); | 121 CXFA_WidgetData* pWidgetData = pFormNode->GetWidgetData(); |
| 123 ASSERT(pWidgetData); | 122 ASSERT(pWidgetData); |
| 124 XFA_Element eUIType = pWidgetData->GetUIType(); | 123 XFA_Element eUIType = pWidgetData->GetUIType(); |
| 125 CXFA_Value defValue(pFormNode->GetProperty(0, XFA_Element::Value)); | 124 CXFA_Value defValue(pFormNode->GetProperty(0, XFA_Element::Value)); |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 FormValueNode_SetChildContent(defValue.GetNode(), wsNormalizeValue, | 314 FormValueNode_SetChildContent(defValue.GetNode(), wsNormalizeValue, |
| 316 XFA_Element::Text); | 315 XFA_Element::Text); |
| 317 } | 316 } |
| 318 break; | 317 break; |
| 319 case XFA_Element::CheckButton: | 318 case XFA_Element::CheckButton: |
| 320 FormValueNode_SetChildContent(defValue.GetNode(), wsNormalizeValue, | 319 FormValueNode_SetChildContent(defValue.GetNode(), wsNormalizeValue, |
| 321 XFA_Element::Text); | 320 XFA_Element::Text); |
| 322 break; | 321 break; |
| 323 case XFA_Element::ExclGroup: { | 322 case XFA_Element::ExclGroup: { |
| 324 pWidgetData->SetSelectedMemberByValue(wsNormalizeValue.AsStringC(), false, | 323 pWidgetData->SetSelectedMemberByValue(wsNormalizeValue.AsStringC(), false, |
| 325 FALSE, FALSE); | 324 false, false); |
| 326 break; | 325 break; |
| 327 } | 326 } |
| 328 case XFA_Element::DateTimeEdit: | 327 case XFA_Element::DateTimeEdit: |
| 329 FormValueNode_SetChildContent(defValue.GetNode(), wsNormalizeValue, | 328 FormValueNode_SetChildContent(defValue.GetNode(), wsNormalizeValue, |
| 330 XFA_Element::DateTime); | 329 XFA_Element::DateTime); |
| 331 break; | 330 break; |
| 332 case XFA_Element::NumericEdit: { | 331 case XFA_Element::NumericEdit: { |
| 333 CFX_WideString wsPicture; | 332 CFX_WideString wsPicture; |
| 334 pWidgetData->GetPictureContent(wsPicture, XFA_VALUEPICTURE_DataBind); | 333 pWidgetData->GetPictureContent(wsPicture, XFA_VALUEPICTURE_DataBind); |
| 335 if (wsPicture.IsEmpty()) { | 334 if (wsPicture.IsEmpty()) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 361 | 360 |
| 362 void RegisterGlobalBinding(CXFA_Document* pDocument, | 361 void RegisterGlobalBinding(CXFA_Document* pDocument, |
| 363 uint32_t dwNameHash, | 362 uint32_t dwNameHash, |
| 364 CXFA_Node* pDataNode) { | 363 CXFA_Node* pDataNode) { |
| 365 pDocument->m_rgGlobalBinding.SetAt(dwNameHash, pDataNode); | 364 pDocument->m_rgGlobalBinding.SetAt(dwNameHash, pDataNode); |
| 366 } | 365 } |
| 367 | 366 |
| 368 CXFA_Node* ScopeMatchGlobalBinding(CXFA_Node* pDataScope, | 367 CXFA_Node* ScopeMatchGlobalBinding(CXFA_Node* pDataScope, |
| 369 uint32_t dwNameHash, | 368 uint32_t dwNameHash, |
| 370 XFA_Element eMatchDataNodeType, | 369 XFA_Element eMatchDataNodeType, |
| 371 FX_BOOL bUpLevel) { | 370 bool bUpLevel) { |
| 372 for (CXFA_Node *pCurDataScope = pDataScope, *pLastDataScope = nullptr; | 371 for (CXFA_Node *pCurDataScope = pDataScope, *pLastDataScope = nullptr; |
| 373 pCurDataScope && pCurDataScope->GetPacketID() == XFA_XDPPACKET_Datasets; | 372 pCurDataScope && pCurDataScope->GetPacketID() == XFA_XDPPACKET_Datasets; |
| 374 pLastDataScope = pCurDataScope, | 373 pLastDataScope = pCurDataScope, |
| 375 pCurDataScope = | 374 pCurDataScope = |
| 376 pCurDataScope->GetNodeItem(XFA_NODEITEM_Parent)) { | 375 pCurDataScope->GetNodeItem(XFA_NODEITEM_Parent)) { |
| 377 for (CXFA_Node* pDataChild = pCurDataScope->GetFirstChildByName(dwNameHash); | 376 for (CXFA_Node* pDataChild = pCurDataScope->GetFirstChildByName(dwNameHash); |
| 378 pDataChild; | 377 pDataChild; |
| 379 pDataChild = pDataChild->GetNextSameNameSibling(dwNameHash)) { | 378 pDataChild = pDataChild->GetNextSameNameSibling(dwNameHash)) { |
| 380 if (pDataChild == pLastDataScope || | 379 if (pDataChild == pLastDataScope || |
| 381 (eMatchDataNodeType != XFA_Element::DataModel && | 380 (eMatchDataNodeType != XFA_Element::DataModel && |
| 382 pDataChild->GetElementType() != eMatchDataNodeType) || | 381 pDataChild->GetElementType() != eMatchDataNodeType) || |
| 383 pDataChild->HasBindItem()) { | 382 pDataChild->HasBindItem()) { |
| 384 continue; | 383 continue; |
| 385 } | 384 } |
| 386 return pDataChild; | 385 return pDataChild; |
| 387 } | 386 } |
| 388 | 387 |
| 389 for (CXFA_Node* pDataChild = | 388 for (CXFA_Node* pDataChild = |
| 390 pCurDataScope->GetFirstChildByClass(XFA_Element::DataGroup); | 389 pCurDataScope->GetFirstChildByClass(XFA_Element::DataGroup); |
| 391 pDataChild; pDataChild = pDataChild->GetNextSameClassSibling( | 390 pDataChild; pDataChild = pDataChild->GetNextSameClassSibling( |
| 392 XFA_Element::DataGroup)) { | 391 XFA_Element::DataGroup)) { |
| 393 CXFA_Node* pDataNode = ScopeMatchGlobalBinding(pDataChild, dwNameHash, | 392 CXFA_Node* pDataNode = ScopeMatchGlobalBinding(pDataChild, dwNameHash, |
| 394 eMatchDataNodeType, FALSE); | 393 eMatchDataNodeType, false); |
| 395 if (pDataNode) | 394 if (pDataNode) |
| 396 return pDataNode; | 395 return pDataNode; |
| 397 } | 396 } |
| 398 if (!bUpLevel) | 397 if (!bUpLevel) |
| 399 break; | 398 break; |
| 400 } | 399 } |
| 401 return nullptr; | 400 return nullptr; |
| 402 } | 401 } |
| 403 | 402 |
| 404 CXFA_Node* FindGlobalDataNode(CXFA_Document* pDocument, | 403 CXFA_Node* FindGlobalDataNode(CXFA_Document* pDocument, |
| 405 CFX_WideStringC wsName, | 404 CFX_WideStringC wsName, |
| 406 CXFA_Node* pDataScope, | 405 CXFA_Node* pDataScope, |
| 407 XFA_Element eMatchNodeType) { | 406 XFA_Element eMatchNodeType) { |
| 408 if (wsName.IsEmpty()) | 407 if (wsName.IsEmpty()) |
| 409 return nullptr; | 408 return nullptr; |
| 410 | 409 |
| 411 uint32_t dwNameHash = FX_HashCode_GetW(wsName, false); | 410 uint32_t dwNameHash = FX_HashCode_GetW(wsName, false); |
| 412 CXFA_Node* pBounded = GetGlobalBinding(pDocument, dwNameHash); | 411 CXFA_Node* pBounded = GetGlobalBinding(pDocument, dwNameHash); |
| 413 if (!pBounded) { | 412 if (!pBounded) { |
| 414 pBounded = | 413 pBounded = |
| 415 ScopeMatchGlobalBinding(pDataScope, dwNameHash, eMatchNodeType, TRUE); | 414 ScopeMatchGlobalBinding(pDataScope, dwNameHash, eMatchNodeType, true); |
| 416 if (pBounded) | 415 if (pBounded) |
| 417 RegisterGlobalBinding(pDocument, dwNameHash, pBounded); | 416 RegisterGlobalBinding(pDocument, dwNameHash, pBounded); |
| 418 } | 417 } |
| 419 return pBounded; | 418 return pBounded; |
| 420 } | 419 } |
| 421 | 420 |
| 422 CXFA_Node* FindOnceDataNode(CXFA_Document* pDocument, | 421 CXFA_Node* FindOnceDataNode(CXFA_Document* pDocument, |
| 423 CFX_WideStringC wsName, | 422 CFX_WideStringC wsName, |
| 424 CXFA_Node* pDataScope, | 423 CXFA_Node* pDataScope, |
| 425 XFA_Element eMatchNodeType) { | 424 XFA_Element eMatchNodeType) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 444 pLastDataScope = pCurDataScope; | 443 pLastDataScope = pCurDataScope; |
| 445 } | 444 } |
| 446 return nullptr; | 445 return nullptr; |
| 447 } | 446 } |
| 448 | 447 |
| 449 CXFA_Node* FindDataRefDataNode(CXFA_Document* pDocument, | 448 CXFA_Node* FindDataRefDataNode(CXFA_Document* pDocument, |
| 450 CFX_WideStringC wsRef, | 449 CFX_WideStringC wsRef, |
| 451 CXFA_Node* pDataScope, | 450 CXFA_Node* pDataScope, |
| 452 XFA_Element eMatchNodeType, | 451 XFA_Element eMatchNodeType, |
| 453 CXFA_Node* pTemplateNode, | 452 CXFA_Node* pTemplateNode, |
| 454 FX_BOOL bForceBind, | 453 bool bForceBind, |
| 455 FX_BOOL bUpLevel) { | 454 bool bUpLevel) { |
| 456 uint32_t dFlags = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_BindNew; | 455 uint32_t dFlags = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_BindNew; |
| 457 if (bUpLevel || wsRef != FX_WSTRC(L"name")) | 456 if (bUpLevel || wsRef != FX_WSTRC(L"name")) |
| 458 dFlags |= (XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings); | 457 dFlags |= (XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings); |
| 459 | 458 |
| 460 XFA_RESOLVENODE_RS rs; | 459 XFA_RESOLVENODE_RS rs; |
| 461 pDocument->GetScriptContext()->ResolveObjects(pDataScope, wsRef, rs, dFlags, | 460 pDocument->GetScriptContext()->ResolveObjects(pDataScope, wsRef, rs, dFlags, |
| 462 pTemplateNode); | 461 pTemplateNode); |
| 463 if (rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeAll || | 462 if (rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeAll || |
| 464 rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeMidAll || | 463 rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeMidAll || |
| 465 rs.nodes.GetSize() > 1) { | 464 rs.nodes.GetSize() > 1) { |
| 466 return pDocument->GetNotBindNode(rs.nodes); | 465 return pDocument->GetNotBindNode(rs.nodes); |
| 467 } | 466 } |
| 468 | 467 |
| 469 if (rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeOne) { | 468 if (rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeOne) { |
| 470 CXFA_Object* pObject = (rs.nodes.GetSize() > 0) ? rs.nodes[0] : nullptr; | 469 CXFA_Object* pObject = (rs.nodes.GetSize() > 0) ? rs.nodes[0] : nullptr; |
| 471 CXFA_Node* pNode = ToNode(pObject); | 470 CXFA_Node* pNode = ToNode(pObject); |
| 472 return (bForceBind || !pNode || !pNode->HasBindItem()) ? pNode : nullptr; | 471 return (bForceBind || !pNode || !pNode->HasBindItem()) ? pNode : nullptr; |
| 473 } | 472 } |
| 474 return nullptr; | 473 return nullptr; |
| 475 } | 474 } |
| 476 | 475 |
| 477 FX_BOOL NeedGenerateForm(CXFA_Node* pTemplateChild, | 476 bool NeedGenerateForm(CXFA_Node* pTemplateChild, bool bUseInstanceManager) { |
| 478 FX_BOOL bUseInstanceManager) { | |
| 479 XFA_Element eType = pTemplateChild->GetElementType(); | 477 XFA_Element eType = pTemplateChild->GetElementType(); |
| 480 if (eType == XFA_Element::Variables) | 478 if (eType == XFA_Element::Variables) |
| 481 return TRUE; | 479 return true; |
| 482 if (pTemplateChild->IsContainerNode()) | 480 if (pTemplateChild->IsContainerNode()) |
| 483 return FALSE; | 481 return false; |
| 484 if (eType == XFA_Element::Proto || | 482 if (eType == XFA_Element::Proto || |
| 485 (bUseInstanceManager && eType == XFA_Element::Occur)) { | 483 (bUseInstanceManager && eType == XFA_Element::Occur)) { |
| 486 return FALSE; | 484 return false; |
| 487 } | 485 } |
| 488 return TRUE; | 486 return true; |
| 489 } | 487 } |
| 490 | 488 |
| 491 CXFA_Node* CloneOrMergeInstanceManager(CXFA_Document* pDocument, | 489 CXFA_Node* CloneOrMergeInstanceManager(CXFA_Document* pDocument, |
| 492 CXFA_Node* pFormParent, | 490 CXFA_Node* pFormParent, |
| 493 CXFA_Node* pTemplateNode, | 491 CXFA_Node* pTemplateNode, |
| 494 CXFA_NodeArray& subforms) { | 492 CXFA_NodeArray& subforms) { |
| 495 CFX_WideStringC wsSubformName = pTemplateNode->GetCData(XFA_ATTRIBUTE_Name); | 493 CFX_WideStringC wsSubformName = pTemplateNode->GetCData(XFA_ATTRIBUTE_Name); |
| 496 CFX_WideString wsInstMgrNodeName = FX_WSTRC(L"_") + wsSubformName; | 494 CFX_WideString wsInstMgrNodeName = FX_WSTRC(L"_") + wsSubformName; |
| 497 uint32_t dwInstNameHash = | 495 uint32_t dwInstNameHash = |
| 498 FX_HashCode_GetW(wsInstMgrNodeName.AsStringC(), false); | 496 FX_HashCode_GetW(wsInstMgrNodeName.AsStringC(), false); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 pNewNode->SetCData(XFA_ATTRIBUTE_Name, wsInstMgrNodeName); | 532 pNewNode->SetCData(XFA_ATTRIBUTE_Name, wsInstMgrNodeName); |
| 535 pFormParent->InsertChild(pNewNode, nullptr); | 533 pFormParent->InsertChild(pNewNode, nullptr); |
| 536 pNewNode->SetTemplateNode(pTemplateNode); | 534 pNewNode->SetTemplateNode(pTemplateNode); |
| 537 return pNewNode; | 535 return pNewNode; |
| 538 } | 536 } |
| 539 | 537 |
| 540 CXFA_Node* FindMatchingDataNode( | 538 CXFA_Node* FindMatchingDataNode( |
| 541 CXFA_Document* pDocument, | 539 CXFA_Document* pDocument, |
| 542 CXFA_Node* pTemplateNode, | 540 CXFA_Node* pTemplateNode, |
| 543 CXFA_Node* pDataScope, | 541 CXFA_Node* pDataScope, |
| 544 FX_BOOL& bAccessedDataDOM, | 542 bool& bAccessedDataDOM, |
| 545 FX_BOOL bForceBind, | 543 bool bForceBind, |
| 546 CXFA_NodeIteratorTemplate<CXFA_Node, | 544 CXFA_NodeIteratorTemplate<CXFA_Node, |
| 547 CXFA_TraverseStrategy_XFAContainerNode>* | 545 CXFA_TraverseStrategy_XFAContainerNode>* |
| 548 pIterator, | 546 pIterator, |
| 549 FX_BOOL& bSelfMatch, | 547 bool& bSelfMatch, |
| 550 XFA_ATTRIBUTEENUM& eBindMatch, | 548 XFA_ATTRIBUTEENUM& eBindMatch, |
| 551 FX_BOOL bUpLevel) { | 549 bool bUpLevel) { |
| 552 FX_BOOL bOwnIterator = FALSE; | 550 bool bOwnIterator = false; |
| 553 if (!pIterator) { | 551 if (!pIterator) { |
| 554 bOwnIterator = TRUE; | 552 bOwnIterator = true; |
| 555 pIterator = new CXFA_NodeIteratorTemplate< | 553 pIterator = new CXFA_NodeIteratorTemplate< |
| 556 CXFA_Node, CXFA_TraverseStrategy_XFAContainerNode>(pTemplateNode); | 554 CXFA_Node, CXFA_TraverseStrategy_XFAContainerNode>(pTemplateNode); |
| 557 } | 555 } |
| 558 | 556 |
| 559 CXFA_Node* pResult = nullptr; | 557 CXFA_Node* pResult = nullptr; |
| 560 for (CXFA_Node* pCurTemplateNode = pIterator->GetCurrent(); | 558 for (CXFA_Node* pCurTemplateNode = pIterator->GetCurrent(); |
| 561 pCurTemplateNode;) { | 559 pCurTemplateNode;) { |
| 562 XFA_Element eMatchNodeType; | 560 XFA_Element eMatchNodeType; |
| 563 switch (pCurTemplateNode->GetElementType()) { | 561 switch (pCurTemplateNode->GetElementType()) { |
| 564 case XFA_Element::Subform: | 562 case XFA_Element::Subform: |
| (...skipping 24 matching lines...) Expand all Loading... |
| 589 pCurTemplateNode->GetFirstChildByClass(XFA_Element::Bind); | 587 pCurTemplateNode->GetFirstChildByClass(XFA_Element::Bind); |
| 590 XFA_ATTRIBUTEENUM eMatch = | 588 XFA_ATTRIBUTEENUM eMatch = |
| 591 pTemplateNodeBind ? pTemplateNodeBind->GetEnum(XFA_ATTRIBUTE_Match) | 589 pTemplateNodeBind ? pTemplateNodeBind->GetEnum(XFA_ATTRIBUTE_Match) |
| 592 : XFA_ATTRIBUTEENUM_Once; | 590 : XFA_ATTRIBUTEENUM_Once; |
| 593 eBindMatch = eMatch; | 591 eBindMatch = eMatch; |
| 594 switch (eMatch) { | 592 switch (eMatch) { |
| 595 case XFA_ATTRIBUTEENUM_None: | 593 case XFA_ATTRIBUTEENUM_None: |
| 596 pCurTemplateNode = pIterator->MoveToNext(); | 594 pCurTemplateNode = pIterator->MoveToNext(); |
| 597 continue; | 595 continue; |
| 598 case XFA_ATTRIBUTEENUM_Global: | 596 case XFA_ATTRIBUTEENUM_Global: |
| 599 bAccessedDataDOM = TRUE; | 597 bAccessedDataDOM = true; |
| 600 if (!bForceBind) { | 598 if (!bForceBind) { |
| 601 pCurTemplateNode = pIterator->MoveToNext(); | 599 pCurTemplateNode = pIterator->MoveToNext(); |
| 602 continue; | 600 continue; |
| 603 } | 601 } |
| 604 if (eMatchNodeType == XFA_Element::DataValue || | 602 if (eMatchNodeType == XFA_Element::DataValue || |
| 605 (eMatchNodeType == XFA_Element::DataGroup && | 603 (eMatchNodeType == XFA_Element::DataGroup && |
| 606 XFA_FieldIsMultiListBox(pTemplateNodeBind))) { | 604 XFA_FieldIsMultiListBox(pTemplateNodeBind))) { |
| 607 CXFA_Node* pGlobalBindNode = FindGlobalDataNode( | 605 CXFA_Node* pGlobalBindNode = FindGlobalDataNode( |
| 608 pDocument, pCurTemplateNode->GetCData(XFA_ATTRIBUTE_Name), | 606 pDocument, pCurTemplateNode->GetCData(XFA_ATTRIBUTE_Name), |
| 609 pDataScope, eMatchNodeType); | 607 pDataScope, eMatchNodeType); |
| 610 if (!pGlobalBindNode) { | 608 if (!pGlobalBindNode) { |
| 611 pCurTemplateNode = pIterator->MoveToNext(); | 609 pCurTemplateNode = pIterator->MoveToNext(); |
| 612 continue; | 610 continue; |
| 613 } | 611 } |
| 614 pResult = pGlobalBindNode; | 612 pResult = pGlobalBindNode; |
| 615 break; | 613 break; |
| 616 } | 614 } |
| 617 case XFA_ATTRIBUTEENUM_Once: { | 615 case XFA_ATTRIBUTEENUM_Once: { |
| 618 bAccessedDataDOM = TRUE; | 616 bAccessedDataDOM = true; |
| 619 CXFA_Node* pOnceBindNode = FindOnceDataNode( | 617 CXFA_Node* pOnceBindNode = FindOnceDataNode( |
| 620 pDocument, pCurTemplateNode->GetCData(XFA_ATTRIBUTE_Name), | 618 pDocument, pCurTemplateNode->GetCData(XFA_ATTRIBUTE_Name), |
| 621 pDataScope, eMatchNodeType); | 619 pDataScope, eMatchNodeType); |
| 622 if (!pOnceBindNode) { | 620 if (!pOnceBindNode) { |
| 623 pCurTemplateNode = pIterator->MoveToNext(); | 621 pCurTemplateNode = pIterator->MoveToNext(); |
| 624 continue; | 622 continue; |
| 625 } | 623 } |
| 626 pResult = pOnceBindNode; | 624 pResult = pOnceBindNode; |
| 627 break; | 625 break; |
| 628 } | 626 } |
| 629 case XFA_ATTRIBUTEENUM_DataRef: { | 627 case XFA_ATTRIBUTEENUM_DataRef: { |
| 630 bAccessedDataDOM = TRUE; | 628 bAccessedDataDOM = true; |
| 631 CXFA_Node* pDataRefBindNode = FindDataRefDataNode( | 629 CXFA_Node* pDataRefBindNode = FindDataRefDataNode( |
| 632 pDocument, pTemplateNodeBind->GetCData(XFA_ATTRIBUTE_Ref), | 630 pDocument, pTemplateNodeBind->GetCData(XFA_ATTRIBUTE_Ref), |
| 633 pDataScope, eMatchNodeType, pTemplateNode, bForceBind, bUpLevel); | 631 pDataScope, eMatchNodeType, pTemplateNode, bForceBind, bUpLevel); |
| 634 if (pDataRefBindNode && | 632 if (pDataRefBindNode && |
| 635 pDataRefBindNode->GetElementType() == eMatchNodeType) { | 633 pDataRefBindNode->GetElementType() == eMatchNodeType) { |
| 636 pResult = pDataRefBindNode; | 634 pResult = pDataRefBindNode; |
| 637 } | 635 } |
| 638 if (!pResult) { | 636 if (!pResult) { |
| 639 pCurTemplateNode = pIterator->SkipChildrenAndMoveToNext(); | 637 pCurTemplateNode = pIterator->SkipChildrenAndMoveToNext(); |
| 640 continue; | 638 continue; |
| 641 } | 639 } |
| 642 break; | 640 break; |
| 643 } | 641 } |
| 644 default: | 642 default: |
| 645 break; | 643 break; |
| 646 } | 644 } |
| 647 if (pCurTemplateNode == pTemplateNode && pResult) | 645 if (pCurTemplateNode == pTemplateNode && pResult) |
| 648 bSelfMatch = TRUE; | 646 bSelfMatch = true; |
| 649 break; | 647 break; |
| 650 } | 648 } |
| 651 if (bOwnIterator) | 649 if (bOwnIterator) |
| 652 delete pIterator; | 650 delete pIterator; |
| 653 return pResult; | 651 return pResult; |
| 654 } | 652 } |
| 655 | 653 |
| 656 void SortRecurseRecord(CFX_ArrayTemplate<RecurseRecord>& rgRecords, | 654 void SortRecurseRecord(CFX_ArrayTemplate<RecurseRecord>& rgRecords, |
| 657 CXFA_Node* pDataScope, | 655 CXFA_Node* pDataScope, |
| 658 FX_BOOL bChoiceMode) { | 656 bool bChoiceMode) { |
| 659 int32_t iCount = rgRecords.GetSize(); | 657 int32_t iCount = rgRecords.GetSize(); |
| 660 CFX_ArrayTemplate<RecurseRecord> rgResultRecord; | 658 CFX_ArrayTemplate<RecurseRecord> rgResultRecord; |
| 661 for (CXFA_Node* pChildNode = pDataScope->GetNodeItem(XFA_NODEITEM_FirstChild); | 659 for (CXFA_Node* pChildNode = pDataScope->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 662 pChildNode; | 660 pChildNode; |
| 663 pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 661 pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
| 664 for (int32_t i = 0; i < iCount; i++) { | 662 for (int32_t i = 0; i < iCount; i++) { |
| 665 CXFA_Node* pNode = rgRecords[i].pDataChild; | 663 CXFA_Node* pNode = rgRecords[i].pDataChild; |
| 666 if (pChildNode == pNode) { | 664 if (pChildNode == pNode) { |
| 667 RecurseRecord sNewRecord = {rgRecords[i].pTemplateChild, pNode}; | 665 RecurseRecord sNewRecord = {rgRecords[i].pTemplateChild, pNode}; |
| 668 rgResultRecord.Add(sNewRecord); | 666 rgResultRecord.Add(sNewRecord); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 685 } | 683 } |
| 686 rgRecords.RemoveAll(); | 684 rgRecords.RemoveAll(); |
| 687 rgRecords.Copy(rgResultRecord); | 685 rgRecords.Copy(rgResultRecord); |
| 688 } | 686 } |
| 689 } | 687 } |
| 690 | 688 |
| 691 CXFA_Node* CopyContainer_SubformSet(CXFA_Document* pDocument, | 689 CXFA_Node* CopyContainer_SubformSet(CXFA_Document* pDocument, |
| 692 CXFA_Node* pTemplateNode, | 690 CXFA_Node* pTemplateNode, |
| 693 CXFA_Node* pFormParentNode, | 691 CXFA_Node* pFormParentNode, |
| 694 CXFA_Node* pDataScope, | 692 CXFA_Node* pDataScope, |
| 695 FX_BOOL bOneInstance, | 693 bool bOneInstance, |
| 696 FX_BOOL bDataMerge) { | 694 bool bDataMerge) { |
| 697 XFA_Element eType = pTemplateNode->GetElementType(); | 695 XFA_Element eType = pTemplateNode->GetElementType(); |
| 698 CXFA_Node* pOccurNode = nullptr; | 696 CXFA_Node* pOccurNode = nullptr; |
| 699 CXFA_Node* pFirstInstance = nullptr; | 697 CXFA_Node* pFirstInstance = nullptr; |
| 700 FX_BOOL bUseInstanceManager = | 698 bool bUseInstanceManager = |
| 701 pFormParentNode->GetElementType() != XFA_Element::Area; | 699 pFormParentNode->GetElementType() != XFA_Element::Area; |
| 702 CXFA_Node* pInstMgrNode = nullptr; | 700 CXFA_Node* pInstMgrNode = nullptr; |
| 703 CXFA_NodeArray subformArray; | 701 CXFA_NodeArray subformArray; |
| 704 CXFA_NodeArray* pSearchArray = nullptr; | 702 CXFA_NodeArray* pSearchArray = nullptr; |
| 705 if (!bOneInstance && | 703 if (!bOneInstance && |
| 706 (eType == XFA_Element::SubformSet || eType == XFA_Element::Subform)) { | 704 (eType == XFA_Element::SubformSet || eType == XFA_Element::Subform)) { |
| 707 pInstMgrNode = bUseInstanceManager ? CloneOrMergeInstanceManager( | 705 pInstMgrNode = bUseInstanceManager ? CloneOrMergeInstanceManager( |
| 708 pDocument, pFormParentNode, | 706 pDocument, pFormParentNode, |
| 709 pTemplateNode, subformArray) | 707 pTemplateNode, subformArray) |
| 710 : nullptr; | 708 : nullptr; |
| 711 if (CXFA_Node* pOccurTemplateNode = | 709 if (CXFA_Node* pOccurTemplateNode = |
| 712 pTemplateNode->GetFirstChildByClass(XFA_Element::Occur)) { | 710 pTemplateNode->GetFirstChildByClass(XFA_Element::Occur)) { |
| 713 pOccurNode = pInstMgrNode ? XFA_NodeMerge_CloneOrMergeContainer( | 711 pOccurNode = pInstMgrNode ? XFA_NodeMerge_CloneOrMergeContainer( |
| 714 pDocument, pInstMgrNode, | 712 pDocument, pInstMgrNode, |
| 715 pOccurTemplateNode, FALSE, nullptr) | 713 pOccurTemplateNode, false, nullptr) |
| 716 : pOccurTemplateNode; | 714 : pOccurTemplateNode; |
| 717 } else if (pInstMgrNode) { | 715 } else if (pInstMgrNode) { |
| 718 pOccurNode = pInstMgrNode->GetFirstChildByClass(XFA_Element::Occur); | 716 pOccurNode = pInstMgrNode->GetFirstChildByClass(XFA_Element::Occur); |
| 719 if (pOccurNode) | 717 if (pOccurNode) |
| 720 pOccurNode->ClearFlag(XFA_NodeFlag_UnusedNode); | 718 pOccurNode->ClearFlag(XFA_NodeFlag_UnusedNode); |
| 721 } | 719 } |
| 722 if (pInstMgrNode) { | 720 if (pInstMgrNode) { |
| 723 pInstMgrNode->SetFlag(XFA_NodeFlag_Initialized, true); | 721 pInstMgrNode->SetFlag(XFA_NodeFlag_Initialized, true); |
| 724 pSearchArray = &subformArray; | 722 pSearchArray = &subformArray; |
| 725 if (pFormParentNode->GetElementType() == XFA_Element::PageArea) { | 723 if (pFormParentNode->GetElementType() == XFA_Element::PageArea) { |
| 726 bOneInstance = TRUE; | 724 bOneInstance = true; |
| 727 if (subformArray.GetSize() < 1) | 725 if (subformArray.GetSize() < 1) |
| 728 pSearchArray = nullptr; | 726 pSearchArray = nullptr; |
| 729 } else if ((pTemplateNode->GetNameHash() == 0) && | 727 } else if ((pTemplateNode->GetNameHash() == 0) && |
| 730 (subformArray.GetSize() < 1)) { | 728 (subformArray.GetSize() < 1)) { |
| 731 pSearchArray = nullptr; | 729 pSearchArray = nullptr; |
| 732 } | 730 } |
| 733 } | 731 } |
| 734 } | 732 } |
| 735 | 733 |
| 736 int32_t iMax = 1; | 734 int32_t iMax = 1; |
| 737 int32_t iInit = 1; | 735 int32_t iInit = 1; |
| 738 int32_t iMin = 1; | 736 int32_t iMin = 1; |
| 739 if (!bOneInstance) | 737 if (!bOneInstance) |
| 740 GetOccurInfo(pOccurNode, iMin, iMax, iInit); | 738 GetOccurInfo(pOccurNode, iMin, iMax, iInit); |
| 741 | 739 |
| 742 XFA_ATTRIBUTEENUM eRelation = | 740 XFA_ATTRIBUTEENUM eRelation = |
| 743 eType == XFA_Element::SubformSet | 741 eType == XFA_Element::SubformSet |
| 744 ? pTemplateNode->GetEnum(XFA_ATTRIBUTE_Relation) | 742 ? pTemplateNode->GetEnum(XFA_ATTRIBUTE_Relation) |
| 745 : XFA_ATTRIBUTEENUM_Ordered; | 743 : XFA_ATTRIBUTEENUM_Ordered; |
| 746 int32_t iCurRepeatIndex = 0; | 744 int32_t iCurRepeatIndex = 0; |
| 747 XFA_ATTRIBUTEENUM eParentBindMatch = XFA_ATTRIBUTEENUM_None; | 745 XFA_ATTRIBUTEENUM eParentBindMatch = XFA_ATTRIBUTEENUM_None; |
| 748 if (bDataMerge) { | 746 if (bDataMerge) { |
| 749 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFAContainerNode> | 747 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFAContainerNode> |
| 750 sNodeIterator(pTemplateNode); | 748 sNodeIterator(pTemplateNode); |
| 751 FX_BOOL bAccessedDataDOM = FALSE; | 749 bool bAccessedDataDOM = false; |
| 752 if (eType == XFA_Element::SubformSet || eType == XFA_Element::Area) { | 750 if (eType == XFA_Element::SubformSet || eType == XFA_Element::Area) { |
| 753 sNodeIterator.MoveToNext(); | 751 sNodeIterator.MoveToNext(); |
| 754 } else { | 752 } else { |
| 755 CFX_MapPtrTemplate<CXFA_Node*, CXFA_Node*> subformMapArray; | 753 CFX_MapPtrTemplate<CXFA_Node*, CXFA_Node*> subformMapArray; |
| 756 CXFA_NodeArray nodeArray; | 754 CXFA_NodeArray nodeArray; |
| 757 for (; iMax < 0 || iCurRepeatIndex < iMax; iCurRepeatIndex++) { | 755 for (; iMax < 0 || iCurRepeatIndex < iMax; iCurRepeatIndex++) { |
| 758 FX_BOOL bSelfMatch = FALSE; | 756 bool bSelfMatch = false; |
| 759 XFA_ATTRIBUTEENUM eBindMatch = XFA_ATTRIBUTEENUM_None; | 757 XFA_ATTRIBUTEENUM eBindMatch = XFA_ATTRIBUTEENUM_None; |
| 760 CXFA_Node* pDataNode = FindMatchingDataNode( | 758 CXFA_Node* pDataNode = FindMatchingDataNode( |
| 761 pDocument, pTemplateNode, pDataScope, bAccessedDataDOM, FALSE, | 759 pDocument, pTemplateNode, pDataScope, bAccessedDataDOM, false, |
| 762 &sNodeIterator, bSelfMatch, eBindMatch, TRUE); | 760 &sNodeIterator, bSelfMatch, eBindMatch, true); |
| 763 if (!pDataNode || sNodeIterator.GetCurrent() != pTemplateNode) | 761 if (!pDataNode || sNodeIterator.GetCurrent() != pTemplateNode) |
| 764 break; | 762 break; |
| 765 | 763 |
| 766 eParentBindMatch = eBindMatch; | 764 eParentBindMatch = eBindMatch; |
| 767 CXFA_Node* pSubformNode = XFA_NodeMerge_CloneOrMergeContainer( | 765 CXFA_Node* pSubformNode = XFA_NodeMerge_CloneOrMergeContainer( |
| 768 pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray); | 766 pDocument, pFormParentNode, pTemplateNode, false, pSearchArray); |
| 769 if (!pFirstInstance) | 767 if (!pFirstInstance) |
| 770 pFirstInstance = pSubformNode; | 768 pFirstInstance = pSubformNode; |
| 771 | 769 |
| 772 CreateDataBinding(pSubformNode, pDataNode, TRUE); | 770 CreateDataBinding(pSubformNode, pDataNode, true); |
| 773 ASSERT(pSubformNode); | 771 ASSERT(pSubformNode); |
| 774 subformMapArray.SetAt(pSubformNode, pDataNode); | 772 subformMapArray.SetAt(pSubformNode, pDataNode); |
| 775 nodeArray.Add(pSubformNode); | 773 nodeArray.Add(pSubformNode); |
| 776 } | 774 } |
| 777 | 775 |
| 778 subformMapArray.GetStartPosition(); | 776 subformMapArray.GetStartPosition(); |
| 779 for (int32_t iIndex = 0; iIndex < nodeArray.GetSize(); iIndex++) { | 777 for (int32_t iIndex = 0; iIndex < nodeArray.GetSize(); iIndex++) { |
| 780 CXFA_Node* pSubform = nodeArray[iIndex]; | 778 CXFA_Node* pSubform = nodeArray[iIndex]; |
| 781 CXFA_Node* pDataNode = | 779 CXFA_Node* pDataNode = |
| 782 reinterpret_cast<CXFA_Node*>(subformMapArray.GetValueAt(pSubform)); | 780 reinterpret_cast<CXFA_Node*>(subformMapArray.GetValueAt(pSubform)); |
| 783 for (CXFA_Node* pTemplateChild = | 781 for (CXFA_Node* pTemplateChild = |
| 784 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 782 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 785 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( | 783 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( |
| 786 XFA_NODEITEM_NextSibling)) { | 784 XFA_NODEITEM_NextSibling)) { |
| 787 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { | 785 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { |
| 788 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubform, | 786 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubform, |
| 789 pTemplateChild, TRUE, nullptr); | 787 pTemplateChild, true, nullptr); |
| 790 } else if (pTemplateChild->IsContainerNode()) { | 788 } else if (pTemplateChild->IsContainerNode()) { |
| 791 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubform, | 789 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubform, |
| 792 pDataNode, FALSE, TRUE, FALSE); | 790 pDataNode, false, true, false); |
| 793 } | 791 } |
| 794 } | 792 } |
| 795 } | 793 } |
| 796 subformMapArray.RemoveAll(); | 794 subformMapArray.RemoveAll(); |
| 797 } | 795 } |
| 798 | 796 |
| 799 for (; iMax < 0 || iCurRepeatIndex < iMax; iCurRepeatIndex++) { | 797 for (; iMax < 0 || iCurRepeatIndex < iMax; iCurRepeatIndex++) { |
| 800 FX_BOOL bSelfMatch = FALSE; | 798 bool bSelfMatch = false; |
| 801 XFA_ATTRIBUTEENUM eBindMatch = XFA_ATTRIBUTEENUM_None; | 799 XFA_ATTRIBUTEENUM eBindMatch = XFA_ATTRIBUTEENUM_None; |
| 802 if (!FindMatchingDataNode(pDocument, pTemplateNode, pDataScope, | 800 if (!FindMatchingDataNode(pDocument, pTemplateNode, pDataScope, |
| 803 bAccessedDataDOM, FALSE, &sNodeIterator, | 801 bAccessedDataDOM, false, &sNodeIterator, |
| 804 bSelfMatch, eBindMatch, TRUE)) { | 802 bSelfMatch, eBindMatch, true)) { |
| 805 break; | 803 break; |
| 806 } | 804 } |
| 807 if (eBindMatch == XFA_ATTRIBUTEENUM_DataRef && | 805 if (eBindMatch == XFA_ATTRIBUTEENUM_DataRef && |
| 808 eParentBindMatch == XFA_ATTRIBUTEENUM_DataRef) { | 806 eParentBindMatch == XFA_ATTRIBUTEENUM_DataRef) { |
| 809 break; | 807 break; |
| 810 } | 808 } |
| 811 | 809 |
| 812 if (eRelation == XFA_ATTRIBUTEENUM_Choice || | 810 if (eRelation == XFA_ATTRIBUTEENUM_Choice || |
| 813 eRelation == XFA_ATTRIBUTEENUM_Unordered) { | 811 eRelation == XFA_ATTRIBUTEENUM_Unordered) { |
| 814 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( | 812 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( |
| 815 pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray); | 813 pDocument, pFormParentNode, pTemplateNode, false, pSearchArray); |
| 816 ASSERT(pSubformSetNode); | 814 ASSERT(pSubformSetNode); |
| 817 if (!pFirstInstance) | 815 if (!pFirstInstance) |
| 818 pFirstInstance = pSubformSetNode; | 816 pFirstInstance = pSubformSetNode; |
| 819 | 817 |
| 820 CFX_ArrayTemplate<RecurseRecord> rgItemMatchList; | 818 CFX_ArrayTemplate<RecurseRecord> rgItemMatchList; |
| 821 CFX_ArrayTemplate<CXFA_Node*> rgItemUnmatchList; | 819 CFX_ArrayTemplate<CXFA_Node*> rgItemUnmatchList; |
| 822 for (CXFA_Node* pTemplateChild = | 820 for (CXFA_Node* pTemplateChild = |
| 823 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 821 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 824 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( | 822 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( |
| 825 XFA_NODEITEM_NextSibling)) { | 823 XFA_NODEITEM_NextSibling)) { |
| 826 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { | 824 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { |
| 827 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode, | 825 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode, |
| 828 pTemplateChild, TRUE, nullptr); | 826 pTemplateChild, true, nullptr); |
| 829 } else if (pTemplateChild->IsContainerNode()) { | 827 } else if (pTemplateChild->IsContainerNode()) { |
| 830 bSelfMatch = FALSE; | 828 bSelfMatch = false; |
| 831 eBindMatch = XFA_ATTRIBUTEENUM_None; | 829 eBindMatch = XFA_ATTRIBUTEENUM_None; |
| 832 if (eRelation != XFA_ATTRIBUTEENUM_Ordered) { | 830 if (eRelation != XFA_ATTRIBUTEENUM_Ordered) { |
| 833 CXFA_Node* pDataMatch = FindMatchingDataNode( | 831 CXFA_Node* pDataMatch = FindMatchingDataNode( |
| 834 pDocument, pTemplateChild, pDataScope, bAccessedDataDOM, | 832 pDocument, pTemplateChild, pDataScope, bAccessedDataDOM, |
| 835 FALSE, nullptr, bSelfMatch, eBindMatch, TRUE); | 833 false, nullptr, bSelfMatch, eBindMatch, true); |
| 836 if (pDataMatch) { | 834 if (pDataMatch) { |
| 837 RecurseRecord sNewRecord = {pTemplateChild, pDataMatch}; | 835 RecurseRecord sNewRecord = {pTemplateChild, pDataMatch}; |
| 838 if (bSelfMatch) | 836 if (bSelfMatch) |
| 839 rgItemMatchList.InsertAt(0, sNewRecord); | 837 rgItemMatchList.InsertAt(0, sNewRecord); |
| 840 else | 838 else |
| 841 rgItemMatchList.Add(sNewRecord); | 839 rgItemMatchList.Add(sNewRecord); |
| 842 } else { | 840 } else { |
| 843 rgItemUnmatchList.Add(pTemplateChild); | 841 rgItemUnmatchList.Add(pTemplateChild); |
| 844 } | 842 } |
| 845 } else { | 843 } else { |
| 846 rgItemUnmatchList.Add(pTemplateChild); | 844 rgItemUnmatchList.Add(pTemplateChild); |
| 847 } | 845 } |
| 848 } | 846 } |
| 849 } | 847 } |
| 850 | 848 |
| 851 switch (eRelation) { | 849 switch (eRelation) { |
| 852 case XFA_ATTRIBUTEENUM_Choice: { | 850 case XFA_ATTRIBUTEENUM_Choice: { |
| 853 ASSERT(rgItemMatchList.GetSize()); | 851 ASSERT(rgItemMatchList.GetSize()); |
| 854 SortRecurseRecord(rgItemMatchList, pDataScope, TRUE); | 852 SortRecurseRecord(rgItemMatchList, pDataScope, true); |
| 855 pDocument->DataMerge_CopyContainer( | 853 pDocument->DataMerge_CopyContainer( |
| 856 rgItemMatchList[0].pTemplateChild, pSubformSetNode, pDataScope, | 854 rgItemMatchList[0].pTemplateChild, pSubformSetNode, pDataScope, |
| 857 FALSE, TRUE, TRUE); | 855 false, true, true); |
| 858 break; | 856 break; |
| 859 } | 857 } |
| 860 case XFA_ATTRIBUTEENUM_Unordered: { | 858 case XFA_ATTRIBUTEENUM_Unordered: { |
| 861 if (rgItemMatchList.GetSize()) { | 859 if (rgItemMatchList.GetSize()) { |
| 862 SortRecurseRecord(rgItemMatchList, pDataScope, FALSE); | 860 SortRecurseRecord(rgItemMatchList, pDataScope, false); |
| 863 for (int32_t i = 0, count = rgItemMatchList.GetSize(); i < count; | 861 for (int32_t i = 0, count = rgItemMatchList.GetSize(); i < count; |
| 864 i++) { | 862 i++) { |
| 865 pDocument->DataMerge_CopyContainer( | 863 pDocument->DataMerge_CopyContainer( |
| 866 rgItemMatchList[i].pTemplateChild, pSubformSetNode, | 864 rgItemMatchList[i].pTemplateChild, pSubformSetNode, |
| 867 pDataScope, FALSE, TRUE, TRUE); | 865 pDataScope, false, true, true); |
| 868 } | 866 } |
| 869 } | 867 } |
| 870 for (int32_t i = 0, count = rgItemUnmatchList.GetSize(); i < count; | 868 for (int32_t i = 0, count = rgItemUnmatchList.GetSize(); i < count; |
| 871 i++) { | 869 i++) { |
| 872 pDocument->DataMerge_CopyContainer(rgItemUnmatchList[i], | 870 pDocument->DataMerge_CopyContainer(rgItemUnmatchList[i], |
| 873 pSubformSetNode, pDataScope, | 871 pSubformSetNode, pDataScope, |
| 874 FALSE, TRUE, TRUE); | 872 false, true, true); |
| 875 } | 873 } |
| 876 break; | 874 break; |
| 877 } | 875 } |
| 878 default: | 876 default: |
| 879 break; | 877 break; |
| 880 } | 878 } |
| 881 } else { | 879 } else { |
| 882 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( | 880 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( |
| 883 pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray); | 881 pDocument, pFormParentNode, pTemplateNode, false, pSearchArray); |
| 884 ASSERT(pSubformSetNode); | 882 ASSERT(pSubformSetNode); |
| 885 if (!pFirstInstance) | 883 if (!pFirstInstance) |
| 886 pFirstInstance = pSubformSetNode; | 884 pFirstInstance = pSubformSetNode; |
| 887 | 885 |
| 888 for (CXFA_Node* pTemplateChild = | 886 for (CXFA_Node* pTemplateChild = |
| 889 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 887 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 890 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( | 888 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( |
| 891 XFA_NODEITEM_NextSibling)) { | 889 XFA_NODEITEM_NextSibling)) { |
| 892 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { | 890 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { |
| 893 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode, | 891 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode, |
| 894 pTemplateChild, TRUE, nullptr); | 892 pTemplateChild, true, nullptr); |
| 895 } else if (pTemplateChild->IsContainerNode()) { | 893 } else if (pTemplateChild->IsContainerNode()) { |
| 896 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, | 894 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, |
| 897 pDataScope, FALSE, TRUE, TRUE); | 895 pDataScope, false, true, true); |
| 898 } | 896 } |
| 899 } | 897 } |
| 900 } | 898 } |
| 901 } | 899 } |
| 902 | 900 |
| 903 if (iCurRepeatIndex == 0 && bAccessedDataDOM == FALSE) { | 901 if (iCurRepeatIndex == 0 && bAccessedDataDOM == false) { |
| 904 int32_t iLimit = iMax; | 902 int32_t iLimit = iMax; |
| 905 if (pInstMgrNode && pTemplateNode->GetNameHash() == 0) { | 903 if (pInstMgrNode && pTemplateNode->GetNameHash() == 0) { |
| 906 iLimit = subformArray.GetSize(); | 904 iLimit = subformArray.GetSize(); |
| 907 if (iLimit < iMin) | 905 if (iLimit < iMin) |
| 908 iLimit = iInit; | 906 iLimit = iInit; |
| 909 } | 907 } |
| 910 | 908 |
| 911 for (; (iLimit < 0 || iCurRepeatIndex < iLimit); iCurRepeatIndex++) { | 909 for (; (iLimit < 0 || iCurRepeatIndex < iLimit); iCurRepeatIndex++) { |
| 912 if (pInstMgrNode) { | 910 if (pInstMgrNode) { |
| 913 if (pSearchArray && pSearchArray->GetSize() < 1) { | 911 if (pSearchArray && pSearchArray->GetSize() < 1) { |
| 914 if (pTemplateNode->GetNameHash() != 0) | 912 if (pTemplateNode->GetNameHash() != 0) |
| 915 break; | 913 break; |
| 916 pSearchArray = nullptr; | 914 pSearchArray = nullptr; |
| 917 } | 915 } |
| 918 } else if (!XFA_DataMerge_FindFormDOMInstance( | 916 } else if (!XFA_DataMerge_FindFormDOMInstance( |
| 919 pDocument, pTemplateNode->GetElementType(), | 917 pDocument, pTemplateNode->GetElementType(), |
| 920 pTemplateNode->GetNameHash(), pFormParentNode)) { | 918 pTemplateNode->GetNameHash(), pFormParentNode)) { |
| 921 break; | 919 break; |
| 922 } | 920 } |
| 923 CXFA_Node* pSubformNode = XFA_NodeMerge_CloneOrMergeContainer( | 921 CXFA_Node* pSubformNode = XFA_NodeMerge_CloneOrMergeContainer( |
| 924 pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray); | 922 pDocument, pFormParentNode, pTemplateNode, false, pSearchArray); |
| 925 ASSERT(pSubformNode); | 923 ASSERT(pSubformNode); |
| 926 if (!pFirstInstance) | 924 if (!pFirstInstance) |
| 927 pFirstInstance = pSubformNode; | 925 pFirstInstance = pSubformNode; |
| 928 | 926 |
| 929 for (CXFA_Node* pTemplateChild = | 927 for (CXFA_Node* pTemplateChild = |
| 930 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 928 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 931 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( | 929 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( |
| 932 XFA_NODEITEM_NextSibling)) { | 930 XFA_NODEITEM_NextSibling)) { |
| 933 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { | 931 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { |
| 934 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformNode, | 932 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformNode, |
| 935 pTemplateChild, TRUE, nullptr); | 933 pTemplateChild, true, nullptr); |
| 936 } else if (pTemplateChild->IsContainerNode()) { | 934 } else if (pTemplateChild->IsContainerNode()) { |
| 937 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformNode, | 935 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformNode, |
| 938 pDataScope, FALSE, TRUE, TRUE); | 936 pDataScope, false, true, true); |
| 939 } | 937 } |
| 940 } | 938 } |
| 941 } | 939 } |
| 942 } | 940 } |
| 943 } | 941 } |
| 944 | 942 |
| 945 int32_t iMinimalLimit = iCurRepeatIndex == 0 ? iInit : iMin; | 943 int32_t iMinimalLimit = iCurRepeatIndex == 0 ? iInit : iMin; |
| 946 for (; iCurRepeatIndex < iMinimalLimit; iCurRepeatIndex++) { | 944 for (; iCurRepeatIndex < iMinimalLimit; iCurRepeatIndex++) { |
| 947 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( | 945 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( |
| 948 pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray); | 946 pDocument, pFormParentNode, pTemplateNode, false, pSearchArray); |
| 949 ASSERT(pSubformSetNode); | 947 ASSERT(pSubformSetNode); |
| 950 if (!pFirstInstance) | 948 if (!pFirstInstance) |
| 951 pFirstInstance = pSubformSetNode; | 949 pFirstInstance = pSubformSetNode; |
| 952 | 950 |
| 953 FX_BOOL bFound = FALSE; | 951 bool bFound = false; |
| 954 for (CXFA_Node* pTemplateChild = | 952 for (CXFA_Node* pTemplateChild = |
| 955 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 953 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 956 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( | 954 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( |
| 957 XFA_NODEITEM_NextSibling)) { | 955 XFA_NODEITEM_NextSibling)) { |
| 958 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { | 956 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { |
| 959 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode, | 957 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode, |
| 960 pTemplateChild, TRUE, nullptr); | 958 pTemplateChild, true, nullptr); |
| 961 } else if (pTemplateChild->IsContainerNode()) { | 959 } else if (pTemplateChild->IsContainerNode()) { |
| 962 if (bFound && eRelation == XFA_ATTRIBUTEENUM_Choice) | 960 if (bFound && eRelation == XFA_ATTRIBUTEENUM_Choice) |
| 963 continue; | 961 continue; |
| 964 | 962 |
| 965 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, | 963 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, |
| 966 pDataScope, FALSE, bDataMerge, TRUE); | 964 pDataScope, false, bDataMerge, true); |
| 967 bFound = TRUE; | 965 bFound = true; |
| 968 } | 966 } |
| 969 } | 967 } |
| 970 } | 968 } |
| 971 return pFirstInstance; | 969 return pFirstInstance; |
| 972 } | 970 } |
| 973 | 971 |
| 974 CXFA_Node* CopyContainer_Field(CXFA_Document* pDocument, | 972 CXFA_Node* CopyContainer_Field(CXFA_Document* pDocument, |
| 975 CXFA_Node* pTemplateNode, | 973 CXFA_Node* pTemplateNode, |
| 976 CXFA_Node* pFormNode, | 974 CXFA_Node* pFormNode, |
| 977 CXFA_Node* pDataScope, | 975 CXFA_Node* pDataScope, |
| 978 FX_BOOL bDataMerge, | 976 bool bDataMerge, |
| 979 FX_BOOL bUpLevel) { | 977 bool bUpLevel) { |
| 980 CXFA_Node* pFieldNode = XFA_NodeMerge_CloneOrMergeContainer( | 978 CXFA_Node* pFieldNode = XFA_NodeMerge_CloneOrMergeContainer( |
| 981 pDocument, pFormNode, pTemplateNode, FALSE, nullptr); | 979 pDocument, pFormNode, pTemplateNode, false, nullptr); |
| 982 ASSERT(pFieldNode); | 980 ASSERT(pFieldNode); |
| 983 for (CXFA_Node* pTemplateChildNode = | 981 for (CXFA_Node* pTemplateChildNode = |
| 984 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 982 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 985 pTemplateChildNode; pTemplateChildNode = pTemplateChildNode->GetNodeItem( | 983 pTemplateChildNode; pTemplateChildNode = pTemplateChildNode->GetNodeItem( |
| 986 XFA_NODEITEM_NextSibling)) { | 984 XFA_NODEITEM_NextSibling)) { |
| 987 if (NeedGenerateForm(pTemplateChildNode, TRUE)) { | 985 if (NeedGenerateForm(pTemplateChildNode, true)) { |
| 988 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pFieldNode, | 986 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pFieldNode, |
| 989 pTemplateChildNode, TRUE, nullptr); | 987 pTemplateChildNode, true, nullptr); |
| 990 } else if (pTemplateNode->GetElementType() == XFA_Element::ExclGroup && | 988 } else if (pTemplateNode->GetElementType() == XFA_Element::ExclGroup && |
| 991 pTemplateChildNode->IsContainerNode()) { | 989 pTemplateChildNode->IsContainerNode()) { |
| 992 if (pTemplateChildNode->GetElementType() == XFA_Element::Field) { | 990 if (pTemplateChildNode->GetElementType() == XFA_Element::Field) { |
| 993 CopyContainer_Field(pDocument, pTemplateChildNode, pFieldNode, nullptr, | 991 CopyContainer_Field(pDocument, pTemplateChildNode, pFieldNode, nullptr, |
| 994 FALSE, TRUE); | 992 false, true); |
| 995 } | 993 } |
| 996 } | 994 } |
| 997 } | 995 } |
| 998 if (bDataMerge) { | 996 if (bDataMerge) { |
| 999 FX_BOOL bAccessedDataDOM = FALSE; | 997 bool bAccessedDataDOM = false; |
| 1000 FX_BOOL bSelfMatch = FALSE; | 998 bool bSelfMatch = false; |
| 1001 XFA_ATTRIBUTEENUM eBindMatch; | 999 XFA_ATTRIBUTEENUM eBindMatch; |
| 1002 CXFA_Node* pDataNode = FindMatchingDataNode( | 1000 CXFA_Node* pDataNode = FindMatchingDataNode( |
| 1003 pDocument, pTemplateNode, pDataScope, bAccessedDataDOM, TRUE, nullptr, | 1001 pDocument, pTemplateNode, pDataScope, bAccessedDataDOM, true, nullptr, |
| 1004 bSelfMatch, eBindMatch, bUpLevel); | 1002 bSelfMatch, eBindMatch, bUpLevel); |
| 1005 if (pDataNode) | 1003 if (pDataNode) |
| 1006 CreateDataBinding(pFieldNode, pDataNode, TRUE); | 1004 CreateDataBinding(pFieldNode, pDataNode, true); |
| 1007 } else { | 1005 } else { |
| 1008 FormValueNode_MatchNoneCreateChild(pFieldNode); | 1006 FormValueNode_MatchNoneCreateChild(pFieldNode); |
| 1009 } | 1007 } |
| 1010 return pFieldNode; | 1008 return pFieldNode; |
| 1011 } | 1009 } |
| 1012 | 1010 |
| 1013 CXFA_Node* MaybeCreateDataNode(CXFA_Document* pDocument, | 1011 CXFA_Node* MaybeCreateDataNode(CXFA_Document* pDocument, |
| 1014 CXFA_Node* pDataParent, | 1012 CXFA_Node* pDataParent, |
| 1015 XFA_Element eNodeType, | 1013 XFA_Element eNodeType, |
| 1016 const CFX_WideString& wsName) { | 1014 const CFX_WideString& wsName) { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1061 pDataNode->SetDataDescriptionNode(pDDNode); | 1059 pDataNode->SetDataDescriptionNode(pDDNode); |
| 1062 pDataNode->SetFlag(XFA_NodeFlag_Initialized, false); | 1060 pDataNode->SetFlag(XFA_NodeFlag_Initialized, false); |
| 1063 return pDataNode; | 1061 return pDataNode; |
| 1064 } | 1062 } |
| 1065 return nullptr; | 1063 return nullptr; |
| 1066 } | 1064 } |
| 1067 | 1065 |
| 1068 void UpdateBindingRelations(CXFA_Document* pDocument, | 1066 void UpdateBindingRelations(CXFA_Document* pDocument, |
| 1069 CXFA_Node* pFormNode, | 1067 CXFA_Node* pFormNode, |
| 1070 CXFA_Node* pDataScope, | 1068 CXFA_Node* pDataScope, |
| 1071 FX_BOOL bDataRef, | 1069 bool bDataRef, |
| 1072 FX_BOOL bParentDataRef) { | 1070 bool bParentDataRef) { |
| 1073 FX_BOOL bMatchRef = TRUE; | 1071 bool bMatchRef = true; |
| 1074 XFA_Element eType = pFormNode->GetElementType(); | 1072 XFA_Element eType = pFormNode->GetElementType(); |
| 1075 CXFA_Node* pDataNode = pFormNode->GetBindData(); | 1073 CXFA_Node* pDataNode = pFormNode->GetBindData(); |
| 1076 if (eType == XFA_Element::Subform || eType == XFA_Element::ExclGroup || | 1074 if (eType == XFA_Element::Subform || eType == XFA_Element::ExclGroup || |
| 1077 eType == XFA_Element::Field) { | 1075 eType == XFA_Element::Field) { |
| 1078 CXFA_Node* pTemplateNode = pFormNode->GetTemplateNode(); | 1076 CXFA_Node* pTemplateNode = pFormNode->GetTemplateNode(); |
| 1079 CXFA_Node* pTemplateNodeBind = | 1077 CXFA_Node* pTemplateNodeBind = |
| 1080 pTemplateNode ? pTemplateNode->GetFirstChildByClass(XFA_Element::Bind) | 1078 pTemplateNode ? pTemplateNode->GetFirstChildByClass(XFA_Element::Bind) |
| 1081 : nullptr; | 1079 : nullptr; |
| 1082 XFA_ATTRIBUTEENUM eMatch = | 1080 XFA_ATTRIBUTEENUM eMatch = |
| 1083 pTemplateNodeBind ? pTemplateNodeBind->GetEnum(XFA_ATTRIBUTE_Match) | 1081 pTemplateNodeBind ? pTemplateNodeBind->GetEnum(XFA_ATTRIBUTE_Match) |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1094 pFormNode->GetEnum(XFA_ATTRIBUTE_Scope) != | 1092 pFormNode->GetEnum(XFA_ATTRIBUTE_Scope) != |
| 1095 XFA_ATTRIBUTEENUM_None) { | 1093 XFA_ATTRIBUTEENUM_None) { |
| 1096 XFA_Element eDataNodeType = (eType == XFA_Element::Subform || | 1094 XFA_Element eDataNodeType = (eType == XFA_Element::Subform || |
| 1097 XFA_FieldIsMultiListBox(pFormNode)) | 1095 XFA_FieldIsMultiListBox(pFormNode)) |
| 1098 ? XFA_Element::DataGroup | 1096 ? XFA_Element::DataGroup |
| 1099 : XFA_Element::DataValue; | 1097 : XFA_Element::DataValue; |
| 1100 pDataNode = MaybeCreateDataNode( | 1098 pDataNode = MaybeCreateDataNode( |
| 1101 pDocument, pDataScope, eDataNodeType, | 1099 pDocument, pDataScope, eDataNodeType, |
| 1102 CFX_WideString(pFormNode->GetCData(XFA_ATTRIBUTE_Name))); | 1100 CFX_WideString(pFormNode->GetCData(XFA_ATTRIBUTE_Name))); |
| 1103 if (pDataNode) | 1101 if (pDataNode) |
| 1104 CreateDataBinding(pFormNode, pDataNode, FALSE); | 1102 CreateDataBinding(pFormNode, pDataNode, false); |
| 1105 } | 1103 } |
| 1106 if (!pDataNode) | 1104 if (!pDataNode) |
| 1107 FormValueNode_MatchNoneCreateChild(pFormNode); | 1105 FormValueNode_MatchNoneCreateChild(pFormNode); |
| 1108 | 1106 |
| 1109 } else { | 1107 } else { |
| 1110 CXFA_Node* pDataParent = | 1108 CXFA_Node* pDataParent = |
| 1111 pDataNode->GetNodeItem(XFA_NODEITEM_Parent); | 1109 pDataNode->GetNodeItem(XFA_NODEITEM_Parent); |
| 1112 if (pDataParent != pDataScope) { | 1110 if (pDataParent != pDataScope) { |
| 1113 ASSERT(pDataParent); | 1111 ASSERT(pDataParent); |
| 1114 pDataParent->RemoveChild(pDataNode); | 1112 pDataParent->RemoveChild(pDataNode); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1126 XFA_Element eDataNodeType = (eType == XFA_Element::Subform || | 1124 XFA_Element eDataNodeType = (eType == XFA_Element::Subform || |
| 1127 XFA_FieldIsMultiListBox(pFormNode)) | 1125 XFA_FieldIsMultiListBox(pFormNode)) |
| 1128 ? XFA_Element::DataGroup | 1126 ? XFA_Element::DataGroup |
| 1129 : XFA_Element::DataValue; | 1127 : XFA_Element::DataValue; |
| 1130 CXFA_Node* pRecordNode = | 1128 CXFA_Node* pRecordNode = |
| 1131 ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Record)); | 1129 ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Record)); |
| 1132 pDataNode = MaybeCreateDataNode( | 1130 pDataNode = MaybeCreateDataNode( |
| 1133 pDocument, pRecordNode, eDataNodeType, | 1131 pDocument, pRecordNode, eDataNodeType, |
| 1134 CFX_WideString(pFormNode->GetCData(XFA_ATTRIBUTE_Name))); | 1132 CFX_WideString(pFormNode->GetCData(XFA_ATTRIBUTE_Name))); |
| 1135 if (pDataNode) { | 1133 if (pDataNode) { |
| 1136 CreateDataBinding(pFormNode, pDataNode, FALSE); | 1134 CreateDataBinding(pFormNode, pDataNode, false); |
| 1137 RegisterGlobalBinding(pDocument, pFormNode->GetNameHash(), | 1135 RegisterGlobalBinding(pDocument, pFormNode->GetNameHash(), |
| 1138 pDataNode); | 1136 pDataNode); |
| 1139 } | 1137 } |
| 1140 } else { | 1138 } else { |
| 1141 CreateDataBinding(pFormNode, pDataNode, TRUE); | 1139 CreateDataBinding(pFormNode, pDataNode, true); |
| 1142 } | 1140 } |
| 1143 } | 1141 } |
| 1144 if (!pDataNode) | 1142 if (!pDataNode) |
| 1145 FormValueNode_MatchNoneCreateChild(pFormNode); | 1143 FormValueNode_MatchNoneCreateChild(pFormNode); |
| 1146 } | 1144 } |
| 1147 break; | 1145 break; |
| 1148 case XFA_ATTRIBUTEENUM_DataRef: { | 1146 case XFA_ATTRIBUTEENUM_DataRef: { |
| 1149 bMatchRef = bDataRef; | 1147 bMatchRef = bDataRef; |
| 1150 bParentDataRef = TRUE; | 1148 bParentDataRef = true; |
| 1151 if (!pDataNode && bDataRef) { | 1149 if (!pDataNode && bDataRef) { |
| 1152 CFX_WideStringC wsRef = | 1150 CFX_WideStringC wsRef = |
| 1153 pTemplateNodeBind->GetCData(XFA_ATTRIBUTE_Ref); | 1151 pTemplateNodeBind->GetCData(XFA_ATTRIBUTE_Ref); |
| 1154 uint32_t dFlags = | 1152 uint32_t dFlags = |
| 1155 XFA_RESOLVENODE_Children | XFA_RESOLVENODE_CreateNode; | 1153 XFA_RESOLVENODE_Children | XFA_RESOLVENODE_CreateNode; |
| 1156 XFA_RESOLVENODE_RS rs; | 1154 XFA_RESOLVENODE_RS rs; |
| 1157 pDocument->GetScriptContext()->ResolveObjects(pDataScope, wsRef, rs, | 1155 pDocument->GetScriptContext()->ResolveObjects(pDataScope, wsRef, rs, |
| 1158 dFlags, pTemplateNode); | 1156 dFlags, pTemplateNode); |
| 1159 CXFA_Object* pObject = | 1157 CXFA_Object* pObject = |
| 1160 (rs.nodes.GetSize() > 0) ? rs.nodes[0] : nullptr; | 1158 (rs.nodes.GetSize() > 0) ? rs.nodes[0] : nullptr; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1242 pFormChild->GetNameHash() == dwNameHash && pFormChild->IsUnusedNode()) { | 1240 pFormChild->GetNameHash() == dwNameHash && pFormChild->IsUnusedNode()) { |
| 1243 return pFormChild; | 1241 return pFormChild; |
| 1244 } | 1242 } |
| 1245 } | 1243 } |
| 1246 return nullptr; | 1244 return nullptr; |
| 1247 } | 1245 } |
| 1248 | 1246 |
| 1249 CXFA_Node* XFA_NodeMerge_CloneOrMergeContainer(CXFA_Document* pDocument, | 1247 CXFA_Node* XFA_NodeMerge_CloneOrMergeContainer(CXFA_Document* pDocument, |
| 1250 CXFA_Node* pFormParent, | 1248 CXFA_Node* pFormParent, |
| 1251 CXFA_Node* pTemplateNode, | 1249 CXFA_Node* pTemplateNode, |
| 1252 FX_BOOL bRecursive, | 1250 bool bRecursive, |
| 1253 CXFA_NodeArray* pSubformArray) { | 1251 CXFA_NodeArray* pSubformArray) { |
| 1254 CXFA_Node* pExistingNode = nullptr; | 1252 CXFA_Node* pExistingNode = nullptr; |
| 1255 if (!pSubformArray) { | 1253 if (!pSubformArray) { |
| 1256 pExistingNode = XFA_DataMerge_FindFormDOMInstance( | 1254 pExistingNode = XFA_DataMerge_FindFormDOMInstance( |
| 1257 pDocument, pTemplateNode->GetElementType(), | 1255 pDocument, pTemplateNode->GetElementType(), |
| 1258 pTemplateNode->GetNameHash(), pFormParent); | 1256 pTemplateNode->GetNameHash(), pFormParent); |
| 1259 } else if (pSubformArray->GetSize() > 0) { | 1257 } else if (pSubformArray->GetSize() > 0) { |
| 1260 pExistingNode = pSubformArray->GetAt(0); | 1258 pExistingNode = pSubformArray->GetAt(0); |
| 1261 pSubformArray->RemoveAt(0); | 1259 pSubformArray->RemoveAt(0); |
| 1262 } | 1260 } |
| 1263 | 1261 |
| 1264 if (pExistingNode) { | 1262 if (pExistingNode) { |
| 1265 if (pSubformArray) { | 1263 if (pSubformArray) { |
| 1266 pFormParent->InsertChild(pExistingNode); | 1264 pFormParent->InsertChild(pExistingNode); |
| 1267 } else if (pExistingNode->IsContainerNode()) { | 1265 } else if (pExistingNode->IsContainerNode()) { |
| 1268 pFormParent->RemoveChild(pExistingNode); | 1266 pFormParent->RemoveChild(pExistingNode); |
| 1269 pFormParent->InsertChild(pExistingNode); | 1267 pFormParent->InsertChild(pExistingNode); |
| 1270 } | 1268 } |
| 1271 pExistingNode->ClearFlag(XFA_NodeFlag_UnusedNode); | 1269 pExistingNode->ClearFlag(XFA_NodeFlag_UnusedNode); |
| 1272 pExistingNode->SetTemplateNode(pTemplateNode); | 1270 pExistingNode->SetTemplateNode(pTemplateNode); |
| 1273 if (bRecursive && pExistingNode->GetElementType() != XFA_Element::Items) { | 1271 if (bRecursive && pExistingNode->GetElementType() != XFA_Element::Items) { |
| 1274 for (CXFA_Node* pTemplateChild = | 1272 for (CXFA_Node* pTemplateChild = |
| 1275 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 1273 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 1276 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( | 1274 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( |
| 1277 XFA_NODEITEM_NextSibling)) { | 1275 XFA_NODEITEM_NextSibling)) { |
| 1278 if (NeedGenerateForm(pTemplateChild, TRUE)) { | 1276 if (NeedGenerateForm(pTemplateChild, true)) { |
| 1279 XFA_NodeMerge_CloneOrMergeContainer( | 1277 XFA_NodeMerge_CloneOrMergeContainer( |
| 1280 pDocument, pExistingNode, pTemplateChild, bRecursive, nullptr); | 1278 pDocument, pExistingNode, pTemplateChild, bRecursive, nullptr); |
| 1281 } | 1279 } |
| 1282 } | 1280 } |
| 1283 } | 1281 } |
| 1284 pExistingNode->SetFlag(XFA_NodeFlag_Initialized, true); | 1282 pExistingNode->SetFlag(XFA_NodeFlag_Initialized, true); |
| 1285 return pExistingNode; | 1283 return pExistingNode; |
| 1286 } | 1284 } |
| 1287 | 1285 |
| 1288 CXFA_Node* pNewNode = pTemplateNode->CloneTemplateToForm(FALSE); | 1286 CXFA_Node* pNewNode = pTemplateNode->CloneTemplateToForm(false); |
| 1289 pFormParent->InsertChild(pNewNode, nullptr); | 1287 pFormParent->InsertChild(pNewNode, nullptr); |
| 1290 if (bRecursive) { | 1288 if (bRecursive) { |
| 1291 for (CXFA_Node* pTemplateChild = | 1289 for (CXFA_Node* pTemplateChild = |
| 1292 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 1290 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 1293 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( | 1291 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( |
| 1294 XFA_NODEITEM_NextSibling)) { | 1292 XFA_NODEITEM_NextSibling)) { |
| 1295 if (NeedGenerateForm(pTemplateChild, TRUE)) { | 1293 if (NeedGenerateForm(pTemplateChild, true)) { |
| 1296 CXFA_Node* pNewChild = pTemplateChild->CloneTemplateToForm(TRUE); | 1294 CXFA_Node* pNewChild = pTemplateChild->CloneTemplateToForm(true); |
| 1297 pNewNode->InsertChild(pNewChild, nullptr); | 1295 pNewNode->InsertChild(pNewChild, nullptr); |
| 1298 } | 1296 } |
| 1299 } | 1297 } |
| 1300 } | 1298 } |
| 1301 return pNewNode; | 1299 return pNewNode; |
| 1302 } | 1300 } |
| 1303 | 1301 |
| 1304 CXFA_Node* XFA_DataMerge_FindDataScope(CXFA_Node* pParentFormNode) { | 1302 CXFA_Node* XFA_DataMerge_FindDataScope(CXFA_Node* pParentFormNode) { |
| 1305 for (CXFA_Node* pRootBoundNode = pParentFormNode; | 1303 for (CXFA_Node* pRootBoundNode = pParentFormNode; |
| 1306 pRootBoundNode && pRootBoundNode->IsContainerNode(); | 1304 pRootBoundNode && pRootBoundNode->IsContainerNode(); |
| 1307 pRootBoundNode = pRootBoundNode->GetNodeItem(XFA_NODEITEM_Parent)) { | 1305 pRootBoundNode = pRootBoundNode->GetNodeItem(XFA_NODEITEM_Parent)) { |
| 1308 CXFA_Node* pDataScope = pRootBoundNode->GetBindData(); | 1306 CXFA_Node* pDataScope = pRootBoundNode->GetBindData(); |
| 1309 if (pDataScope) | 1307 if (pDataScope) |
| 1310 return pDataScope; | 1308 return pDataScope; |
| 1311 } | 1309 } |
| 1312 return ToNode( | 1310 return ToNode( |
| 1313 pParentFormNode->GetDocument()->GetXFAObject(XFA_HASHCODE_Data)); | 1311 pParentFormNode->GetDocument()->GetXFAObject(XFA_HASHCODE_Data)); |
| 1314 } | 1312 } |
| 1315 | 1313 |
| 1316 CXFA_Node* CXFA_Document::DataMerge_CopyContainer(CXFA_Node* pTemplateNode, | 1314 CXFA_Node* CXFA_Document::DataMerge_CopyContainer(CXFA_Node* pTemplateNode, |
| 1317 CXFA_Node* pFormNode, | 1315 CXFA_Node* pFormNode, |
| 1318 CXFA_Node* pDataScope, | 1316 CXFA_Node* pDataScope, |
| 1319 FX_BOOL bOneInstance, | 1317 bool bOneInstance, |
| 1320 FX_BOOL bDataMerge, | 1318 bool bDataMerge, |
| 1321 FX_BOOL bUpLevel) { | 1319 bool bUpLevel) { |
| 1322 switch (pTemplateNode->GetElementType()) { | 1320 switch (pTemplateNode->GetElementType()) { |
| 1323 case XFA_Element::SubformSet: | 1321 case XFA_Element::SubformSet: |
| 1324 case XFA_Element::Subform: | 1322 case XFA_Element::Subform: |
| 1325 case XFA_Element::Area: | 1323 case XFA_Element::Area: |
| 1326 case XFA_Element::PageArea: | 1324 case XFA_Element::PageArea: |
| 1327 return CopyContainer_SubformSet(this, pTemplateNode, pFormNode, | 1325 return CopyContainer_SubformSet(this, pTemplateNode, pFormNode, |
| 1328 pDataScope, bOneInstance, bDataMerge); | 1326 pDataScope, bOneInstance, bDataMerge); |
| 1329 case XFA_Element::ExclGroup: | 1327 case XFA_Element::ExclGroup: |
| 1330 case XFA_Element::Field: | 1328 case XFA_Element::Field: |
| 1331 case XFA_Element::Draw: | 1329 case XFA_Element::Draw: |
| 1332 case XFA_Element::ContentArea: | 1330 case XFA_Element::ContentArea: |
| 1333 return CopyContainer_Field(this, pTemplateNode, pFormNode, pDataScope, | 1331 return CopyContainer_Field(this, pTemplateNode, pFormNode, pDataScope, |
| 1334 bDataMerge, bUpLevel); | 1332 bDataMerge, bUpLevel); |
| 1335 case XFA_Element::PageSet: | 1333 case XFA_Element::PageSet: |
| 1336 case XFA_Element::Variables: | 1334 case XFA_Element::Variables: |
| 1337 break; | 1335 break; |
| 1338 default: | 1336 default: |
| 1339 ASSERT(FALSE); | 1337 ASSERT(false); |
| 1340 break; | 1338 break; |
| 1341 } | 1339 } |
| 1342 return nullptr; | 1340 return nullptr; |
| 1343 } | 1341 } |
| 1344 | 1342 |
| 1345 void CXFA_Document::DataMerge_UpdateBindingRelations( | 1343 void CXFA_Document::DataMerge_UpdateBindingRelations( |
| 1346 CXFA_Node* pFormUpdateRoot) { | 1344 CXFA_Node* pFormUpdateRoot) { |
| 1347 CXFA_Node* pDataScope = XFA_DataMerge_FindDataScope( | 1345 CXFA_Node* pDataScope = XFA_DataMerge_FindDataScope( |
| 1348 pFormUpdateRoot->GetNodeItem(XFA_NODEITEM_Parent)); | 1346 pFormUpdateRoot->GetNodeItem(XFA_NODEITEM_Parent)); |
| 1349 if (!pDataScope) | 1347 if (!pDataScope) |
| 1350 return; | 1348 return; |
| 1351 | 1349 |
| 1352 UpdateBindingRelations(this, pFormUpdateRoot, pDataScope, FALSE, FALSE); | 1350 UpdateBindingRelations(this, pFormUpdateRoot, pDataScope, false, false); |
| 1353 UpdateBindingRelations(this, pFormUpdateRoot, pDataScope, TRUE, FALSE); | 1351 UpdateBindingRelations(this, pFormUpdateRoot, pDataScope, true, false); |
| 1354 } | 1352 } |
| 1355 | 1353 |
| 1356 CXFA_Node* CXFA_Document::GetNotBindNode(CXFA_ObjArray& arrayNodes) { | 1354 CXFA_Node* CXFA_Document::GetNotBindNode(CXFA_ObjArray& arrayNodes) { |
| 1357 for (int32_t i = 0; i < arrayNodes.GetSize(); i++) { | 1355 for (int32_t i = 0; i < arrayNodes.GetSize(); i++) { |
| 1358 CXFA_Node* pNode = arrayNodes[i]->AsNode(); | 1356 CXFA_Node* pNode = arrayNodes[i]->AsNode(); |
| 1359 if (pNode && !pNode->HasBindItem()) | 1357 if (pNode && !pNode->HasBindItem()) |
| 1360 return pNode; | 1358 return pNode; |
| 1361 } | 1359 } |
| 1362 return nullptr; | 1360 return nullptr; |
| 1363 } | 1361 } |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1420 dwNameHash != 0 ? pTemplateRoot->GetFirstChildByName(dwNameHash) | 1418 dwNameHash != 0 ? pTemplateRoot->GetFirstChildByName(dwNameHash) |
| 1421 : nullptr; | 1419 : nullptr; |
| 1422 if (!pTemplateChosen || | 1420 if (!pTemplateChosen || |
| 1423 pTemplateChosen->GetElementType() != XFA_Element::Subform) { | 1421 pTemplateChosen->GetElementType() != XFA_Element::Subform) { |
| 1424 pTemplateChosen = pTemplateRoot->GetFirstChildByClass(XFA_Element::Subform); | 1422 pTemplateChosen = pTemplateRoot->GetFirstChildByClass(XFA_Element::Subform); |
| 1425 } | 1423 } |
| 1426 if (!pTemplateChosen) | 1424 if (!pTemplateChosen) |
| 1427 return; | 1425 return; |
| 1428 | 1426 |
| 1429 CXFA_Node* pFormRoot = m_pRootNode->GetFirstChildByClass(XFA_Element::Form); | 1427 CXFA_Node* pFormRoot = m_pRootNode->GetFirstChildByClass(XFA_Element::Form); |
| 1430 FX_BOOL bEmptyForm = FALSE; | 1428 bool bEmptyForm = false; |
| 1431 if (!pFormRoot) { | 1429 if (!pFormRoot) { |
| 1432 bEmptyForm = TRUE; | 1430 bEmptyForm = true; |
| 1433 pFormRoot = CreateNode(XFA_XDPPACKET_Form, XFA_Element::Form); | 1431 pFormRoot = CreateNode(XFA_XDPPACKET_Form, XFA_Element::Form); |
| 1434 ASSERT(pFormRoot); | 1432 ASSERT(pFormRoot); |
| 1435 pFormRoot->SetCData(XFA_ATTRIBUTE_Name, L"form"); | 1433 pFormRoot->SetCData(XFA_ATTRIBUTE_Name, L"form"); |
| 1436 m_pRootNode->InsertChild(pFormRoot, nullptr); | 1434 m_pRootNode->InsertChild(pFormRoot, nullptr); |
| 1437 } else { | 1435 } else { |
| 1438 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode> | 1436 CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode> |
| 1439 sIterator(pFormRoot); | 1437 sIterator(pFormRoot); |
| 1440 for (CXFA_Node* pNode = sIterator.MoveToNext(); pNode; | 1438 for (CXFA_Node* pNode = sIterator.MoveToNext(); pNode; |
| 1441 pNode = sIterator.MoveToNext()) { | 1439 pNode = sIterator.MoveToNext()) { |
| 1442 pNode->SetFlag(XFA_NodeFlag_UnusedNode, true); | 1440 pNode->SetFlag(XFA_NodeFlag_UnusedNode, true); |
| 1443 } | 1441 } |
| 1444 } | 1442 } |
| 1445 | 1443 |
| 1446 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( | 1444 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( |
| 1447 this, pFormRoot, pTemplateChosen, FALSE, nullptr); | 1445 this, pFormRoot, pTemplateChosen, false, nullptr); |
| 1448 ASSERT(pSubformSetNode); | 1446 ASSERT(pSubformSetNode); |
| 1449 if (!pDataTopLevel) { | 1447 if (!pDataTopLevel) { |
| 1450 CFX_WideStringC wsFormName = pSubformSetNode->GetCData(XFA_ATTRIBUTE_Name); | 1448 CFX_WideStringC wsFormName = pSubformSetNode->GetCData(XFA_ATTRIBUTE_Name); |
| 1451 CFX_WideString wsDataTopLevelName(wsFormName.IsEmpty() ? L"form" | 1449 CFX_WideString wsDataTopLevelName(wsFormName.IsEmpty() ? L"form" |
| 1452 : wsFormName); | 1450 : wsFormName); |
| 1453 CFDE_XMLElement* pDataTopLevelXMLNode = | 1451 CFDE_XMLElement* pDataTopLevelXMLNode = |
| 1454 new CFDE_XMLElement(wsDataTopLevelName); | 1452 new CFDE_XMLElement(wsDataTopLevelName); |
| 1455 | 1453 |
| 1456 pDataTopLevel = CreateNode(XFA_XDPPACKET_Datasets, XFA_Element::DataGroup); | 1454 pDataTopLevel = CreateNode(XFA_XDPPACKET_Datasets, XFA_Element::DataGroup); |
| 1457 pDataTopLevel->SetCData(XFA_ATTRIBUTE_Name, wsDataTopLevelName); | 1455 pDataTopLevel->SetCData(XFA_ATTRIBUTE_Name, wsDataTopLevelName); |
| 1458 pDataTopLevel->SetXMLMappingNode(pDataTopLevelXMLNode); | 1456 pDataTopLevel->SetXMLMappingNode(pDataTopLevelXMLNode); |
| 1459 CXFA_Node* pBeforeNode = pDataRoot->GetNodeItem(XFA_NODEITEM_FirstChild); | 1457 CXFA_Node* pBeforeNode = pDataRoot->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 1460 pDataRoot->InsertChild(pDataTopLevel, pBeforeNode); | 1458 pDataRoot->InsertChild(pDataTopLevel, pBeforeNode); |
| 1461 } | 1459 } |
| 1462 | 1460 |
| 1463 ASSERT(pDataTopLevel); | 1461 ASSERT(pDataTopLevel); |
| 1464 CreateDataBinding(pSubformSetNode, pDataTopLevel, TRUE); | 1462 CreateDataBinding(pSubformSetNode, pDataTopLevel, true); |
| 1465 for (CXFA_Node* pTemplateChild = | 1463 for (CXFA_Node* pTemplateChild = |
| 1466 pTemplateChosen->GetNodeItem(XFA_NODEITEM_FirstChild); | 1464 pTemplateChosen->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 1467 pTemplateChild; | 1465 pTemplateChild; |
| 1468 pTemplateChild = pTemplateChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 1466 pTemplateChild = pTemplateChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
| 1469 if (NeedGenerateForm(pTemplateChild, TRUE)) { | 1467 if (NeedGenerateForm(pTemplateChild, true)) { |
| 1470 XFA_NodeMerge_CloneOrMergeContainer(this, pSubformSetNode, pTemplateChild, | 1468 XFA_NodeMerge_CloneOrMergeContainer(this, pSubformSetNode, pTemplateChild, |
| 1471 TRUE, nullptr); | 1469 true, nullptr); |
| 1472 } else if (pTemplateChild->IsContainerNode()) { | 1470 } else if (pTemplateChild->IsContainerNode()) { |
| 1473 DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, pDataTopLevel, | 1471 DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, pDataTopLevel, |
| 1474 FALSE, TRUE, TRUE); | 1472 false, true, true); |
| 1475 } | 1473 } |
| 1476 } | 1474 } |
| 1477 if (pDDRoot) | 1475 if (pDDRoot) |
| 1478 UpdateDataRelation(pDataRoot, pDDRoot); | 1476 UpdateDataRelation(pDataRoot, pDDRoot); |
| 1479 | 1477 |
| 1480 DataMerge_UpdateBindingRelations(pSubformSetNode); | 1478 DataMerge_UpdateBindingRelations(pSubformSetNode); |
| 1481 CXFA_Node* pPageSetNode = | 1479 CXFA_Node* pPageSetNode = |
| 1482 pSubformSetNode->GetFirstChildByClass(XFA_Element::PageSet); | 1480 pSubformSetNode->GetFirstChildByClass(XFA_Element::PageSet); |
| 1483 while (pPageSetNode) { | 1481 while (pPageSetNode) { |
| 1484 m_pPendingPageSet.Add(pPageSetNode); | 1482 m_pPendingPageSet.Add(pPageSetNode); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1506 pNode->SetFlag(XFA_NodeFlag_Initialized, true); | 1504 pNode->SetFlag(XFA_NodeFlag_Initialized, true); |
| 1507 pNode = sIterator.MoveToNext(); | 1505 pNode = sIterator.MoveToNext(); |
| 1508 } | 1506 } |
| 1509 } else { | 1507 } else { |
| 1510 pNode->SetFlag(XFA_NodeFlag_Initialized, true); | 1508 pNode->SetFlag(XFA_NodeFlag_Initialized, true); |
| 1511 pNode = sIterator.MoveToNext(); | 1509 pNode = sIterator.MoveToNext(); |
| 1512 } | 1510 } |
| 1513 } | 1511 } |
| 1514 } | 1512 } |
| 1515 | 1513 |
| 1516 void CXFA_Document::DoDataRemerge(FX_BOOL bDoDataMerge) { | 1514 void CXFA_Document::DoDataRemerge(bool bDoDataMerge) { |
| 1517 CXFA_Node* pFormRoot = ToNode(GetXFAObject(XFA_HASHCODE_Form)); | 1515 CXFA_Node* pFormRoot = ToNode(GetXFAObject(XFA_HASHCODE_Form)); |
| 1518 if (pFormRoot) { | 1516 if (pFormRoot) { |
| 1519 while (CXFA_Node* pNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) | 1517 while (CXFA_Node* pNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) |
| 1520 pFormRoot->RemoveChild(pNode); | 1518 pFormRoot->RemoveChild(pNode); |
| 1521 pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, nullptr); | 1519 pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, nullptr); |
| 1522 } | 1520 } |
| 1523 m_rgGlobalBinding.RemoveAll(); | 1521 m_rgGlobalBinding.RemoveAll(); |
| 1524 if (bDoDataMerge) | 1522 if (bDoDataMerge) |
| 1525 DoDataMerge(); | 1523 DoDataMerge(); |
| 1526 | 1524 |
| 1527 CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor(); | 1525 CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor(); |
| 1528 pLayoutProcessor->SetForceReLayout(TRUE); | 1526 pLayoutProcessor->SetForceReLayout(true); |
| 1529 } | 1527 } |
| OLD | NEW |