| 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/src/foxitlib.h" | 7 #include "xfa/src/foxitlib.h" |
| 8 #include "xfa/src/fxfa/src/common/xfa_utils.h" | 8 #include "xfa/src/fxfa/src/common/xfa_utils.h" |
| 9 #include "xfa/src/fxfa/src/common/xfa_object.h" | 9 #include "xfa/src/fxfa/src/common/xfa_object.h" |
| 10 #include "xfa/src/fxfa/src/common/xfa_document.h" | 10 #include "xfa/src/fxfa/src/common/xfa_document.h" |
| (...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 if (bUpLevel || wsRef != FX_WSTRC(L"name")) { | 452 if (bUpLevel || wsRef != FX_WSTRC(L"name")) { |
| 453 dFlags |= (XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings); | 453 dFlags |= (XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings); |
| 454 } | 454 } |
| 455 XFA_RESOLVENODE_RS rs; | 455 XFA_RESOLVENODE_RS rs; |
| 456 pDocument->GetScriptContext()->ResolveObjects(pDataScope, wsRef, rs, dFlags, | 456 pDocument->GetScriptContext()->ResolveObjects(pDataScope, wsRef, rs, dFlags, |
| 457 pTemplateNode); | 457 pTemplateNode); |
| 458 if (rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeAll || | 458 if (rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeAll || |
| 459 rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeMidAll || | 459 rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeMidAll || |
| 460 rs.nodes.GetSize() > 1) { | 460 rs.nodes.GetSize() > 1) { |
| 461 return pDocument->GetNotBindNode(rs.nodes); | 461 return pDocument->GetNotBindNode(rs.nodes); |
| 462 } else if (rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeOne) { | 462 } |
| 463 if (rs.dwFlags == XFA_RESOLVENODE_RSTYPE_CreateNodeOne) { |
| 463 CXFA_Object* pObject = (rs.nodes.GetSize() > 0) ? rs.nodes[0] : NULL; | 464 CXFA_Object* pObject = (rs.nodes.GetSize() > 0) ? rs.nodes[0] : NULL; |
| 464 CXFA_Node* pNode = | 465 CXFA_Node* pNode = ToNode(pObject); |
| 465 (pObject && pObject->IsNode()) ? (CXFA_Node*)pObject : NULL; | 466 if (!bForceBind && pNode && pNode->HasBindItem()) { |
| 466 if (!bForceBind && (pNode != NULL) && pNode->HasBindItem()) { | |
| 467 pNode = NULL; | 467 pNode = NULL; |
| 468 } | 468 } |
| 469 return pNode; | 469 return pNode; |
| 470 } | 470 } |
| 471 return NULL; | 471 return NULL; |
| 472 } | 472 } |
| 473 CXFA_Node* XFA_DataMerge_FindFormDOMInstance(CXFA_Document* pDocument, | 473 CXFA_Node* XFA_DataMerge_FindFormDOMInstance(CXFA_Document* pDocument, |
| 474 XFA_ELEMENT eClassID, | 474 XFA_ELEMENT eClassID, |
| 475 FX_DWORD dwNameHash, | 475 FX_DWORD dwNameHash, |
| 476 CXFA_Node* pFormParent) { | 476 CXFA_Node* pFormParent) { |
| (...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 833 pFirstInstance = pSubformNode; | 833 pFirstInstance = pSubformNode; |
| 834 } | 834 } |
| 835 XFA_DataMerge_CreateDataBinding(pSubformNode, pDataNode); | 835 XFA_DataMerge_CreateDataBinding(pSubformNode, pDataNode); |
| 836 FXSYS_assert(pSubformNode); | 836 FXSYS_assert(pSubformNode); |
| 837 subformMapArray.SetAt(pSubformNode, pDataNode); | 837 subformMapArray.SetAt(pSubformNode, pDataNode); |
| 838 subformArray.Add(pSubformNode); | 838 subformArray.Add(pSubformNode); |
| 839 } | 839 } |
| 840 subformMapArray.GetStartPosition(); | 840 subformMapArray.GetStartPosition(); |
| 841 for (int32_t iIndex = 0; iIndex < subformArray.GetSize(); iIndex++) { | 841 for (int32_t iIndex = 0; iIndex < subformArray.GetSize(); iIndex++) { |
| 842 CXFA_Node* pSubform = subformArray[iIndex]; | 842 CXFA_Node* pSubform = subformArray[iIndex]; |
| 843 CXFA_Node* pDataNode = (CXFA_Node*)subformMapArray.GetValueAt(pSubform); | 843 CXFA_Node* pDataNode = |
| 844 reinterpret_cast<CXFA_Node*>(subformMapArray.GetValueAt(pSubform)); |
| 844 for (CXFA_Node* pTemplateChild = | 845 for (CXFA_Node* pTemplateChild = |
| 845 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 846 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| 846 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( | 847 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( |
| 847 XFA_NODEITEM_NextSibling)) { | 848 XFA_NODEITEM_NextSibling)) { |
| 848 if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { | 849 if (XFA_NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { |
| 849 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubform, | 850 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubform, |
| 850 pTemplateChild, TRUE); | 851 pTemplateChild, TRUE); |
| 851 } else if (pTemplateChild->GetObjectType() == | 852 } else if (pTemplateChild->GetObjectType() == |
| 852 XFA_OBJECTTYPE_ContainerNode) { | 853 XFA_OBJECTTYPE_ContainerNode) { |
| 853 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubform, | 854 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubform, |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1155 if (!bDataRef || bParentDataRef) { | 1156 if (!bDataRef || bParentDataRef) { |
| 1156 FX_DWORD dwNameHash = pFormNode->GetNameHash(); | 1157 FX_DWORD dwNameHash = pFormNode->GetNameHash(); |
| 1157 if (dwNameHash != 0 && !pDataNode) { | 1158 if (dwNameHash != 0 && !pDataNode) { |
| 1158 pDataNode = XFA_DataMerge_GetGlobalBinding(pDocument, dwNameHash); | 1159 pDataNode = XFA_DataMerge_GetGlobalBinding(pDocument, dwNameHash); |
| 1159 if (!pDataNode) { | 1160 if (!pDataNode) { |
| 1160 XFA_ELEMENT eDataNodeType = (eClassID == XFA_ELEMENT_Subform || | 1161 XFA_ELEMENT eDataNodeType = (eClassID == XFA_ELEMENT_Subform || |
| 1161 XFA_FieldIsMultiListBox(pFormNode)) | 1162 XFA_FieldIsMultiListBox(pFormNode)) |
| 1162 ? XFA_ELEMENT_DataGroup | 1163 ? XFA_ELEMENT_DataGroup |
| 1163 : XFA_ELEMENT_DataValue; | 1164 : XFA_ELEMENT_DataValue; |
| 1164 CXFA_Node* pRecordNode = | 1165 CXFA_Node* pRecordNode = |
| 1165 (CXFA_Node*)pDocument->GetXFAObject(XFA_HASHCODE_Record); | 1166 ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Record)); |
| 1166 pDataNode = XFA_DataDescription_MaybeCreateDataNode( | 1167 pDataNode = XFA_DataDescription_MaybeCreateDataNode( |
| 1167 pDocument, pRecordNode, eDataNodeType, | 1168 pDocument, pRecordNode, eDataNodeType, |
| 1168 pFormNode->GetCData(XFA_ATTRIBUTE_Name)); | 1169 pFormNode->GetCData(XFA_ATTRIBUTE_Name)); |
| 1169 if (pDataNode) { | 1170 if (pDataNode) { |
| 1170 XFA_DataMerge_CreateDataBinding(pFormNode, pDataNode, FALSE); | 1171 XFA_DataMerge_CreateDataBinding(pFormNode, pDataNode, FALSE); |
| 1171 XFA_DataMerge_RegisterGlobalBinding( | 1172 XFA_DataMerge_RegisterGlobalBinding( |
| 1172 pDocument, pFormNode->GetNameHash(), pDataNode); | 1173 pDocument, pFormNode->GetNameHash(), pDataNode); |
| 1173 } | 1174 } |
| 1174 } else { | 1175 } else { |
| 1175 XFA_DataMerge_CreateDataBinding(pFormNode, pDataNode); | 1176 XFA_DataMerge_CreateDataBinding(pFormNode, pDataNode); |
| 1176 } | 1177 } |
| 1177 } | 1178 } |
| 1178 if (!pDataNode) { | 1179 if (!pDataNode) { |
| 1179 XFA_DataMerge_FormValueNode_MatchNoneCreateChild(pFormNode); | 1180 XFA_DataMerge_FormValueNode_MatchNoneCreateChild(pFormNode); |
| 1180 } | 1181 } |
| 1181 } | 1182 } |
| 1182 break; | 1183 break; |
| 1183 case XFA_ATTRIBUTEENUM_DataRef: { | 1184 case XFA_ATTRIBUTEENUM_DataRef: { |
| 1184 bMatchRef = bDataRef; | 1185 bMatchRef = bDataRef; |
| 1185 bParentDataRef = TRUE; | 1186 bParentDataRef = TRUE; |
| 1186 if (!pDataNode && bDataRef) { | 1187 if (!pDataNode && bDataRef) { |
| 1187 CFX_WideStringC wsRef = | 1188 CFX_WideStringC wsRef = |
| 1188 pTemplateNodeBind->GetCData(XFA_ATTRIBUTE_Ref); | 1189 pTemplateNodeBind->GetCData(XFA_ATTRIBUTE_Ref); |
| 1189 FX_DWORD dFlags = | 1190 FX_DWORD dFlags = |
| 1190 XFA_RESOLVENODE_Children | XFA_RESOLVENODE_CreateNode; | 1191 XFA_RESOLVENODE_Children | XFA_RESOLVENODE_CreateNode; |
| 1191 XFA_RESOLVENODE_RS rs; | 1192 XFA_RESOLVENODE_RS rs; |
| 1192 pDocument->GetScriptContext()->ResolveObjects(pDataScope, wsRef, rs, | 1193 pDocument->GetScriptContext()->ResolveObjects(pDataScope, wsRef, rs, |
| 1193 dFlags, pTemplateNode); | 1194 dFlags, pTemplateNode); |
| 1194 CXFA_Object* pObject = (rs.nodes.GetSize() > 0) ? rs.nodes[0] : NULL; | 1195 CXFA_Object* pObject = (rs.nodes.GetSize() > 0) ? rs.nodes[0] : NULL; |
| 1195 pDataNode = | 1196 pDataNode = ToNode(pObject); |
| 1196 (pObject && pObject->IsNode()) ? (CXFA_Node*)pObject : NULL; | |
| 1197 if (pDataNode) { | 1197 if (pDataNode) { |
| 1198 XFA_DataMerge_CreateDataBinding( | 1198 XFA_DataMerge_CreateDataBinding( |
| 1199 pFormNode, pDataNode, | 1199 pFormNode, pDataNode, |
| 1200 rs.dwFlags == XFA_RESOVENODE_RSTYPE_ExistNodes); | 1200 rs.dwFlags == XFA_RESOVENODE_RSTYPE_ExistNodes); |
| 1201 } else { | 1201 } else { |
| 1202 XFA_DataMerge_FormValueNode_MatchNoneCreateChild(pFormNode); | 1202 XFA_DataMerge_FormValueNode_MatchNoneCreateChild(pFormNode); |
| 1203 } | 1203 } |
| 1204 } | 1204 } |
| 1205 } break; | 1205 } break; |
| 1206 default: | 1206 default: |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1272 } break; | 1272 } break; |
| 1273 case XFA_ATTRIBUTEENUM_Global: { | 1273 case XFA_ATTRIBUTEENUM_Global: { |
| 1274 FX_DWORD dwNameHash = pFormNode->GetNameHash(); | 1274 FX_DWORD dwNameHash = pFormNode->GetNameHash(); |
| 1275 if (dwNameHash != 0 && !pDataNode) { | 1275 if (dwNameHash != 0 && !pDataNode) { |
| 1276 pDataNode = XFA_DataMerge_GetGlobalBinding(pDocument, dwNameHash); | 1276 pDataNode = XFA_DataMerge_GetGlobalBinding(pDocument, dwNameHash); |
| 1277 if (!pDataNode) { | 1277 if (!pDataNode) { |
| 1278 XFA_ELEMENT eDataNodeType = eClassID == XFA_ELEMENT_Subform | 1278 XFA_ELEMENT eDataNodeType = eClassID == XFA_ELEMENT_Subform |
| 1279 ? XFA_ELEMENT_DataGroup | 1279 ? XFA_ELEMENT_DataGroup |
| 1280 : XFA_ELEMENT_DataValue; | 1280 : XFA_ELEMENT_DataValue; |
| 1281 CXFA_Node* pRecordNode = | 1281 CXFA_Node* pRecordNode = |
| 1282 (CXFA_Node*)pDocument->GetXFAObject(XFA_HASHCODE_Record); | 1282 ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Record)); |
| 1283 pDataNode = XFA_DataDescription_MaybeCreateDataNode( | 1283 pDataNode = XFA_DataDescription_MaybeCreateDataNode( |
| 1284 pDocument, pRecordNode, eDataNodeType, | 1284 pDocument, pRecordNode, eDataNodeType, |
| 1285 pFormNode->GetCData(XFA_ATTRIBUTE_Name)); | 1285 pFormNode->GetCData(XFA_ATTRIBUTE_Name)); |
| 1286 } | 1286 } |
| 1287 if (pDataNode) { | 1287 if (pDataNode) { |
| 1288 XFA_DataMerge_CreateDataBinding(pFormNode, pDataNode, FALSE); | 1288 XFA_DataMerge_CreateDataBinding(pFormNode, pDataNode, FALSE); |
| 1289 XFA_DataMerge_RegisterGlobalBinding( | 1289 XFA_DataMerge_RegisterGlobalBinding( |
| 1290 pDocument, pFormNode->GetNameHash(), pDataNode); | 1290 pDocument, pFormNode->GetNameHash(), pDataNode); |
| 1291 } | 1291 } |
| 1292 } | 1292 } |
| 1293 } break; | 1293 } break; |
| 1294 case XFA_ATTRIBUTEENUM_DataRef: { | 1294 case XFA_ATTRIBUTEENUM_DataRef: { |
| 1295 if (!pDataNode) { | 1295 if (!pDataNode) { |
| 1296 CFX_WideStringC wsRef = pTemplateNodeBind->GetCData(XFA_ATTRIBUTE_Ref); | 1296 CFX_WideStringC wsRef = pTemplateNodeBind->GetCData(XFA_ATTRIBUTE_Ref); |
| 1297 FX_DWORD dFlags = XFA_RESOLVENODE_Children | | 1297 FX_DWORD dFlags = XFA_RESOLVENODE_Children | |
| 1298 XFA_RESOLVENODE_Attributes | | 1298 XFA_RESOLVENODE_Attributes | |
| 1299 XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent | | 1299 XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent | |
| 1300 XFA_RESOLVENODE_CreateNode; | 1300 XFA_RESOLVENODE_CreateNode; |
| 1301 XFA_RESOLVENODE_RS rs; | 1301 XFA_RESOLVENODE_RS rs; |
| 1302 pDocument->GetScriptContext()->ResolveObjects(pDataScope, wsRef, rs, | 1302 pDocument->GetScriptContext()->ResolveObjects(pDataScope, wsRef, rs, |
| 1303 dFlags, pTemplateNode); | 1303 dFlags, pTemplateNode); |
| 1304 CXFA_Object* pObject = (rs.nodes.GetSize() > 0) ? rs.nodes[0] : NULL; | 1304 CXFA_Object* pObject = (rs.nodes.GetSize() > 0) ? rs.nodes[0] : NULL; |
| 1305 pDataNode = (pObject && pObject->IsNode()) ? (CXFA_Node*)pObject : NULL; | 1305 pDataNode = ToNode(pObject); |
| 1306 if (pDataNode) { | 1306 if (pDataNode) { |
| 1307 XFA_DataMerge_CreateDataBinding(pFormNode, pDataNode, FALSE); | 1307 XFA_DataMerge_CreateDataBinding(pFormNode, pDataNode, FALSE); |
| 1308 } | 1308 } |
| 1309 } | 1309 } |
| 1310 } break; | 1310 } break; |
| 1311 } | 1311 } |
| 1312 } | 1312 } |
| 1313 if(eClassID == XFA_ELEMENT_Subform || eClassID == XFA_ELEMENT_ExclGroup || eClas
sID == XFA_ELEMENT_SubformSet || eClassID == XFA_ELEMENT_Area || eClassID == XFA
_ELEMENT_PageArea) | 1313 if(eClassID == XFA_ELEMENT_Subform || eClassID == XFA_ELEMENT_ExclGroup || eClas
sID == XFA_ELEMENT_SubformSet || eClassID == XFA_ELEMENT_Area || eClassID == XFA
_ELEMENT_PageArea) |
| 1314 { | 1314 { |
| 1315 for (CXFA_Node* pFormChild = pFormNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 1315 for (CXFA_Node* pFormChild = pFormNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1330 CXFA_Node* XFA_DataMerge_FindDataScope(CXFA_Node* pParentFormNode) { | 1330 CXFA_Node* XFA_DataMerge_FindDataScope(CXFA_Node* pParentFormNode) { |
| 1331 for (CXFA_Node* pRootBoundNode = pParentFormNode; | 1331 for (CXFA_Node* pRootBoundNode = pParentFormNode; |
| 1332 pRootBoundNode && | 1332 pRootBoundNode && |
| 1333 pRootBoundNode->GetObjectType() == XFA_OBJECTTYPE_ContainerNode; | 1333 pRootBoundNode->GetObjectType() == XFA_OBJECTTYPE_ContainerNode; |
| 1334 pRootBoundNode = pRootBoundNode->GetNodeItem(XFA_NODEITEM_Parent)) { | 1334 pRootBoundNode = pRootBoundNode->GetNodeItem(XFA_NODEITEM_Parent)) { |
| 1335 CXFA_Node* pDataScope = pRootBoundNode->GetBindData(); | 1335 CXFA_Node* pDataScope = pRootBoundNode->GetBindData(); |
| 1336 if (pDataScope) { | 1336 if (pDataScope) { |
| 1337 return pDataScope; | 1337 return pDataScope; |
| 1338 } | 1338 } |
| 1339 } | 1339 } |
| 1340 return (CXFA_Node*)pParentFormNode->GetDocument()->GetXFAObject( | 1340 return ToNode( |
| 1341 XFA_HASHCODE_Data); | 1341 pParentFormNode->GetDocument()->GetXFAObject(XFA_HASHCODE_Data)); |
| 1342 } | 1342 } |
| 1343 void CXFA_Document::DataMerge_UpdateBindingRelations( | 1343 void CXFA_Document::DataMerge_UpdateBindingRelations( |
| 1344 CXFA_Node* pFormUpdateRoot) { | 1344 CXFA_Node* pFormUpdateRoot) { |
| 1345 CXFA_Node* pDataScope = XFA_DataMerge_FindDataScope( | 1345 CXFA_Node* pDataScope = XFA_DataMerge_FindDataScope( |
| 1346 pFormUpdateRoot->GetNodeItem(XFA_NODEITEM_Parent)); | 1346 pFormUpdateRoot->GetNodeItem(XFA_NODEITEM_Parent)); |
| 1347 if (!pDataScope) { | 1347 if (!pDataScope) { |
| 1348 return; | 1348 return; |
| 1349 } | 1349 } |
| 1350 #ifdef XFA_DATAMERGE_UPDATEBINDINGRELATIONS_DFS | 1350 #ifdef XFA_DATAMERGE_UPDATEBINDINGRELATIONS_DFS |
| 1351 XFA_DataMerge_UpdateBindingRelations(this, pFormUpdateRoot, pDataScope, FALSE, | 1351 XFA_DataMerge_UpdateBindingRelations(this, pFormUpdateRoot, pDataScope, FALSE, |
| 1352 FALSE); | 1352 FALSE); |
| 1353 XFA_DataMerge_UpdateBindingRelations(this, pFormUpdateRoot, pDataScope, TRUE, | 1353 XFA_DataMerge_UpdateBindingRelations(this, pFormUpdateRoot, pDataScope, TRUE, |
| 1354 FALSE); | 1354 FALSE); |
| 1355 #else | 1355 #else |
| 1356 CFX_PtrList rgFormNodeList, rgDataScopeList; | 1356 CFX_PtrList rgFormNodeList, rgDataScopeList; |
| 1357 rgFormNodeList.AddTail(pFormUpdateRoot); | 1357 rgFormNodeList.AddTail(pFormUpdateRoot); |
| 1358 rgDataScopeList.AddTail(pDataScope); | 1358 rgDataScopeList.AddTail(pDataScope); |
| 1359 while (rgFormNodeList.GetCount()) { | 1359 while (rgFormNodeList.GetCount()) { |
| 1360 FX_POSITION pos; | 1360 FX_POSITION pos; |
| 1361 pos = rgFormNodeList.GetHeadPosition(); | 1361 pos = rgFormNodeList.GetHeadPosition(); |
| 1362 CXFA_Node* pCurFormNode = (CXFA_Node*)rgFormNodeList.GetAt(pos); | 1362 CXFA_Node* pCurFormNode = ToNode(rgFormNodeList.GetAt(pos)); |
| 1363 rgFormNodeList.RemoveAt(pos); | 1363 rgFormNodeList.RemoveAt(pos); |
| 1364 pos = rgDataScopeList.GetHeadPosition(); | 1364 pos = rgDataScopeList.GetHeadPosition(); |
| 1365 CXFA_Node* pCurDataScope = (CXFA_Node*)rgDataScopeList.GetAt(pos); | 1365 CXFA_Node* pCurDataScope = ToNode(rgDataScopeList.GetAt(pos)); |
| 1366 rgDataScopeList.RemoveAt(pos); | 1366 rgDataScopeList.RemoveAt(pos); |
| 1367 XFA_DataMerge_UpdateBindingRelations(this, pCurFormNode, pCurDataScope, | 1367 XFA_DataMerge_UpdateBindingRelations(this, pCurFormNode, pCurDataScope, |
| 1368 rgFormNodeList, rgDataScopeList); | 1368 rgFormNodeList, rgDataScopeList); |
| 1369 } | 1369 } |
| 1370 #endif | 1370 #endif |
| 1371 } | 1371 } |
| 1372 CXFA_Node* CXFA_Document::GetNotBindNode(CXFA_ObjArray& arrayNodes) { | 1372 CXFA_Node* CXFA_Document::GetNotBindNode(CXFA_ObjArray& arrayNodes) { |
| 1373 for (int32_t i = 0; i < arrayNodes.GetSize(); i++) { | 1373 for (int32_t i = 0; i < arrayNodes.GetSize(); i++) { |
| 1374 CXFA_Object* pObject = arrayNodes[i]; | 1374 CXFA_Node* pNode = arrayNodes[i]->AsNode(); |
| 1375 if (!pObject->IsNode()) { | 1375 if (pNode && !pNode->HasBindItem()) |
| 1376 continue; | 1376 return pNode; |
| 1377 } | |
| 1378 if (((CXFA_Node*)pObject)->HasBindItem()) { | |
| 1379 continue; | |
| 1380 } | |
| 1381 return ((CXFA_Node*)pObject); | |
| 1382 } | 1377 } |
| 1383 return NULL; | 1378 return nullptr; |
| 1384 } | 1379 } |
| 1385 void CXFA_Document::DoDataMerge() { | 1380 void CXFA_Document::DoDataMerge() { |
| 1386 CXFA_Node* pDatasetsRoot = (CXFA_Node*)GetXFAObject(XFA_HASHCODE_Datasets); | 1381 CXFA_Node* pDatasetsRoot = ToNode(GetXFAObject(XFA_HASHCODE_Datasets)); |
| 1387 if (!pDatasetsRoot) { | 1382 if (!pDatasetsRoot) { |
| 1388 IFDE_XMLElement* pDatasetsXMLNode = | 1383 IFDE_XMLElement* pDatasetsXMLNode = |
| 1389 IFDE_XMLElement::Create(FX_WSTRC(L"xfa:datasets")); | 1384 IFDE_XMLElement::Create(FX_WSTRC(L"xfa:datasets")); |
| 1390 FXSYS_assert(pDatasetsXMLNode); | 1385 FXSYS_assert(pDatasetsXMLNode); |
| 1391 pDatasetsXMLNode->SetString( | 1386 pDatasetsXMLNode->SetString( |
| 1392 FX_WSTRC(L"xmlns:xfa"), | 1387 FX_WSTRC(L"xmlns:xfa"), |
| 1393 FX_WSTRC(L"http://www.xfa.org/schema/xfa-data/1.0/")); | 1388 FX_WSTRC(L"http://www.xfa.org/schema/xfa-data/1.0/")); |
| 1394 pDatasetsRoot = CreateNode(XFA_XDPPACKET_Datasets, XFA_ELEMENT_DataModel); | 1389 pDatasetsRoot = CreateNode(XFA_XDPPACKET_Datasets, XFA_ELEMENT_DataModel); |
| 1395 pDatasetsRoot->SetCData(XFA_ATTRIBUTE_Name, FX_WSTRC(L"datasets")); | 1390 pDatasetsRoot->SetCData(XFA_ATTRIBUTE_Name, FX_WSTRC(L"datasets")); |
| 1396 m_pRootNode->GetXMLMappingNode()->InsertChildNode(pDatasetsXMLNode); | 1391 m_pRootNode->GetXMLMappingNode()->InsertChildNode(pDatasetsXMLNode); |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1530 pNode = sIterator.MoveToNext(); | 1525 pNode = sIterator.MoveToNext(); |
| 1531 } | 1526 } |
| 1532 } else { | 1527 } else { |
| 1533 pNode->SetFlag(XFA_NODEFLAG_Initialized); | 1528 pNode->SetFlag(XFA_NODEFLAG_Initialized); |
| 1534 pNode = sIterator.MoveToNext(); | 1529 pNode = sIterator.MoveToNext(); |
| 1535 } | 1530 } |
| 1536 } | 1531 } |
| 1537 } | 1532 } |
| 1538 } | 1533 } |
| 1539 void CXFA_Document::DoDataRemerge(FX_BOOL bDoDataMerge) { | 1534 void CXFA_Document::DoDataRemerge(FX_BOOL bDoDataMerge) { |
| 1540 CXFA_Node* pFormRoot = (CXFA_Node*)this->GetXFAObject(XFA_HASHCODE_Form); | 1535 CXFA_Node* pFormRoot = ToNode(GetXFAObject(XFA_HASHCODE_Form)); |
| 1541 if (pFormRoot) { | 1536 if (pFormRoot) { |
| 1542 while (CXFA_Node* pNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) { | 1537 while (CXFA_Node* pNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild)) { |
| 1543 pFormRoot->RemoveChild(pNode); | 1538 pFormRoot->RemoveChild(pNode); |
| 1544 } | 1539 } |
| 1545 pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, NULL); | 1540 pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, NULL); |
| 1546 } | 1541 } |
| 1547 XFA_DataMerge_ClearGlobalBinding(this); | 1542 XFA_DataMerge_ClearGlobalBinding(this); |
| 1548 if (bDoDataMerge) { | 1543 if (bDoDataMerge) { |
| 1549 DoDataMerge(); | 1544 DoDataMerge(); |
| 1550 } | 1545 } |
| 1551 CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor(); | 1546 CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor(); |
| 1552 pLayoutProcessor->SetForceReLayout(TRUE); | 1547 pLayoutProcessor->SetForceReLayout(TRUE); |
| 1553 } | 1548 } |
| OLD | NEW |