Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(745)

Side by Side Diff: xfa/fxfa/parser/xfa_document_datamerger_imp.cpp

Issue 2166433002: Cleanup CXFA_Document (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/include/fx_ext.h" 9 #include "core/fxcrt/include/fx_ext.h"
10 #include "xfa/fde/xml/fde_xml_imp.h" 10 #include "xfa/fde/xml/fde_xml_imp.h"
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 rgItemUnmatchList.Add(pTemplateChild); 848 rgItemUnmatchList.Add(pTemplateChild);
849 } 849 }
850 } 850 }
851 } 851 }
852 852
853 switch (eRelation) { 853 switch (eRelation) {
854 case XFA_ATTRIBUTEENUM_Choice: { 854 case XFA_ATTRIBUTEENUM_Choice: {
855 ASSERT(rgItemMatchList.GetSize()); 855 ASSERT(rgItemMatchList.GetSize());
856 SortRecurseRecord(rgItemMatchList, pDataScope, TRUE); 856 SortRecurseRecord(rgItemMatchList, pDataScope, TRUE);
857 pDocument->DataMerge_CopyContainer( 857 pDocument->DataMerge_CopyContainer(
858 rgItemMatchList[0].pTemplateChild, pSubformSetNode, pDataScope); 858 rgItemMatchList[0].pTemplateChild, pSubformSetNode, pDataScope,
859 FALSE, TRUE, TRUE);
859 break; 860 break;
860 } 861 }
861 case XFA_ATTRIBUTEENUM_Unordered: { 862 case XFA_ATTRIBUTEENUM_Unordered: {
862 if (rgItemMatchList.GetSize()) { 863 if (rgItemMatchList.GetSize()) {
863 SortRecurseRecord(rgItemMatchList, pDataScope, FALSE); 864 SortRecurseRecord(rgItemMatchList, pDataScope, FALSE);
864 for (int32_t i = 0, count = rgItemMatchList.GetSize(); i < count; 865 for (int32_t i = 0, count = rgItemMatchList.GetSize(); i < count;
865 i++) { 866 i++) {
866 pDocument->DataMerge_CopyContainer( 867 pDocument->DataMerge_CopyContainer(
867 rgItemMatchList[i].pTemplateChild, pSubformSetNode, 868 rgItemMatchList[i].pTemplateChild, pSubformSetNode,
868 pDataScope); 869 pDataScope, FALSE, TRUE, TRUE);
869 } 870 }
870 } 871 }
871 for (int32_t i = 0, count = rgItemUnmatchList.GetSize(); i < count; 872 for (int32_t i = 0, count = rgItemUnmatchList.GetSize(); i < count;
872 i++) { 873 i++) {
873 pDocument->DataMerge_CopyContainer(rgItemUnmatchList[i], 874 pDocument->DataMerge_CopyContainer(rgItemUnmatchList[i],
874 pSubformSetNode, pDataScope); 875 pSubformSetNode, pDataScope,
876 FALSE, TRUE, TRUE);
875 } 877 }
876 break; 878 break;
877 } 879 }
878 default: 880 default:
879 break; 881 break;
880 } 882 }
881 } else { 883 } else {
882 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( 884 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer(
883 pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray); 885 pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray);
884 ASSERT(pSubformSetNode); 886 ASSERT(pSubformSetNode);
885 if (!pFirstInstance) 887 if (!pFirstInstance)
886 pFirstInstance = pSubformSetNode; 888 pFirstInstance = pSubformSetNode;
887 889
888 for (CXFA_Node* pTemplateChild = 890 for (CXFA_Node* pTemplateChild =
889 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); 891 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild);
890 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( 892 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem(
891 XFA_NODEITEM_NextSibling)) { 893 XFA_NODEITEM_NextSibling)) {
892 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { 894 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) {
893 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode, 895 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode,
894 pTemplateChild, TRUE, nullptr); 896 pTemplateChild, TRUE, nullptr);
895 } else if (pTemplateChild->IsContainerNode()) { 897 } else if (pTemplateChild->IsContainerNode()) {
896 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, 898 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformSetNode,
897 pDataScope); 899 pDataScope, FALSE, TRUE, TRUE);
898 } 900 }
899 } 901 }
900 } 902 }
901 } 903 }
902 904
903 if (iCurRepeatIndex == 0 && bAccessedDataDOM == FALSE) { 905 if (iCurRepeatIndex == 0 && bAccessedDataDOM == FALSE) {
904 int32_t iLimit = iMax; 906 int32_t iLimit = iMax;
905 if (pInstMgrNode && pTemplateNode->GetNameHash() == 0) { 907 if (pInstMgrNode && pTemplateNode->GetNameHash() == 0) {
906 iLimit = subformArray.GetSize(); 908 iLimit = subformArray.GetSize();
907 if (iLimit < iMin) 909 if (iLimit < iMin)
(...skipping 20 matching lines...) Expand all
928 930
929 for (CXFA_Node* pTemplateChild = 931 for (CXFA_Node* pTemplateChild =
930 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); 932 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild);
931 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( 933 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem(
932 XFA_NODEITEM_NextSibling)) { 934 XFA_NODEITEM_NextSibling)) {
933 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { 935 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) {
934 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformNode, 936 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformNode,
935 pTemplateChild, TRUE, nullptr); 937 pTemplateChild, TRUE, nullptr);
936 } else if (pTemplateChild->IsContainerNode()) { 938 } else if (pTemplateChild->IsContainerNode()) {
937 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformNode, 939 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformNode,
938 pDataScope); 940 pDataScope, FALSE, TRUE, TRUE);
939 } 941 }
940 } 942 }
941 } 943 }
942 } 944 }
943 } 945 }
944 946
945 int32_t iMinimalLimit = iCurRepeatIndex == 0 ? iInit : iMin; 947 int32_t iMinimalLimit = iCurRepeatIndex == 0 ? iInit : iMin;
946 for (; iCurRepeatIndex < iMinimalLimit; iCurRepeatIndex++) { 948 for (; iCurRepeatIndex < iMinimalLimit; iCurRepeatIndex++) {
947 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer( 949 CXFA_Node* pSubformSetNode = XFA_NodeMerge_CloneOrMergeContainer(
948 pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray); 950 pDocument, pFormParentNode, pTemplateNode, FALSE, pSearchArray);
949 ASSERT(pSubformSetNode); 951 ASSERT(pSubformSetNode);
950 if (!pFirstInstance) 952 if (!pFirstInstance)
951 pFirstInstance = pSubformSetNode; 953 pFirstInstance = pSubformSetNode;
952 954
953 FX_BOOL bFound = FALSE; 955 FX_BOOL bFound = FALSE;
954 for (CXFA_Node* pTemplateChild = 956 for (CXFA_Node* pTemplateChild =
955 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild); 957 pTemplateNode->GetNodeItem(XFA_NODEITEM_FirstChild);
956 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem( 958 pTemplateChild; pTemplateChild = pTemplateChild->GetNodeItem(
957 XFA_NODEITEM_NextSibling)) { 959 XFA_NODEITEM_NextSibling)) {
958 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) { 960 if (NeedGenerateForm(pTemplateChild, bUseInstanceManager)) {
959 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode, 961 XFA_NodeMerge_CloneOrMergeContainer(pDocument, pSubformSetNode,
960 pTemplateChild, TRUE, nullptr); 962 pTemplateChild, TRUE, nullptr);
961 } else if (pTemplateChild->IsContainerNode()) { 963 } else if (pTemplateChild->IsContainerNode()) {
962 if (bFound && eRelation == XFA_ATTRIBUTEENUM_Choice) 964 if (bFound && eRelation == XFA_ATTRIBUTEENUM_Choice)
963 continue; 965 continue;
964 966
965 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, 967 pDocument->DataMerge_CopyContainer(pTemplateChild, pSubformSetNode,
966 pDataScope, FALSE, bDataMerge); 968 pDataScope, FALSE, bDataMerge, TRUE);
967 bFound = TRUE; 969 bFound = TRUE;
968 } 970 }
969 } 971 }
970 } 972 }
971 return pFirstInstance; 973 return pFirstInstance;
972 } 974 }
973 975
974 CXFA_Node* CopyContainer_Field(CXFA_Document* pDocument, 976 CXFA_Node* CopyContainer_Field(CXFA_Document* pDocument,
975 CXFA_Node* pTemplateNode, 977 CXFA_Node* pTemplateNode,
976 CXFA_Node* pFormNode, 978 CXFA_Node* pFormNode,
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
1463 ASSERT(pDataTopLevel); 1465 ASSERT(pDataTopLevel);
1464 CreateDataBinding(pSubformSetNode, pDataTopLevel, TRUE); 1466 CreateDataBinding(pSubformSetNode, pDataTopLevel, TRUE);
1465 for (CXFA_Node* pTemplateChild = 1467 for (CXFA_Node* pTemplateChild =
1466 pTemplateChosen->GetNodeItem(XFA_NODEITEM_FirstChild); 1468 pTemplateChosen->GetNodeItem(XFA_NODEITEM_FirstChild);
1467 pTemplateChild; 1469 pTemplateChild;
1468 pTemplateChild = pTemplateChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { 1470 pTemplateChild = pTemplateChild->GetNodeItem(XFA_NODEITEM_NextSibling)) {
1469 if (NeedGenerateForm(pTemplateChild, TRUE)) { 1471 if (NeedGenerateForm(pTemplateChild, TRUE)) {
1470 XFA_NodeMerge_CloneOrMergeContainer(this, pSubformSetNode, pTemplateChild, 1472 XFA_NodeMerge_CloneOrMergeContainer(this, pSubformSetNode, pTemplateChild,
1471 TRUE, nullptr); 1473 TRUE, nullptr);
1472 } else if (pTemplateChild->IsContainerNode()) { 1474 } else if (pTemplateChild->IsContainerNode()) {
1473 DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, pDataTopLevel); 1475 DataMerge_CopyContainer(pTemplateChild, pSubformSetNode, pDataTopLevel,
1476 FALSE, TRUE, TRUE);
1474 } 1477 }
1475 } 1478 }
1476 if (pDDRoot) 1479 if (pDDRoot)
1477 UpdateDataRelation(pDataRoot, pDDRoot); 1480 UpdateDataRelation(pDataRoot, pDDRoot);
1478 1481
1479 DataMerge_UpdateBindingRelations(pSubformSetNode); 1482 DataMerge_UpdateBindingRelations(pSubformSetNode);
1480 CXFA_Node* pPageSetNode = 1483 CXFA_Node* pPageSetNode =
1481 pSubformSetNode->GetFirstChildByClass(XFA_Element::PageSet); 1484 pSubformSetNode->GetFirstChildByClass(XFA_Element::PageSet);
1482 while (pPageSetNode) { 1485 while (pPageSetNode) {
1483 m_pPendingPageSet.Add(pPageSetNode); 1486 m_pPendingPageSet.Add(pPageSetNode);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1519 pFormRoot->RemoveChild(pNode); 1522 pFormRoot->RemoveChild(pNode);
1520 pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, nullptr); 1523 pFormRoot->SetObject(XFA_ATTRIBUTE_BindingNode, nullptr);
1521 } 1524 }
1522 m_rgGlobalBinding.RemoveAll(); 1525 m_rgGlobalBinding.RemoveAll();
1523 if (bDoDataMerge) 1526 if (bDoDataMerge)
1524 DoDataMerge(); 1527 DoDataMerge();
1525 1528
1526 CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor(); 1529 CXFA_LayoutProcessor* pLayoutProcessor = GetLayoutProcessor();
1527 pLayoutProcessor->SetForceReLayout(TRUE); 1530 pLayoutProcessor->SetForceReLayout(TRUE);
1528 } 1531 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698