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

Side by Side Diff: core/src/fpdfdoc/doc_form.cpp

Issue 1430213002: Remove CFX_PtrArray usage in fpdfsdk. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@master
Patch Set: Created 5 years, 1 month 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 "../../include/fpdfdoc/fpdf_doc.h" 7 #include "../../include/fpdfdoc/fpdf_doc.h"
8 #include "doc_utils.h" 8 #include "doc_utils.h"
9 9
10 const int nMaxRecursion = 32; 10 const int nMaxRecursion = 32;
11 11
12 class _CFieldNameExtractor { 12 class CFieldNameExtractor {
13 public: 13 public:
14 _CFieldNameExtractor(const CFX_WideString& full_name) { 14 explicit CFieldNameExtractor(const CFX_WideString& full_name) {
15 m_pStart = full_name.c_str(); 15 m_pStart = full_name.c_str();
16 m_pEnd = m_pStart + full_name.GetLength(); 16 m_pEnd = m_pStart + full_name.GetLength();
17 m_pCur = m_pStart; 17 m_pCur = m_pStart;
18 } 18 }
19 void GetNext(const FX_WCHAR*& pSubName, FX_STRSIZE& size) { 19 void GetNext(const FX_WCHAR*& pSubName, FX_STRSIZE& size) {
20 pSubName = m_pCur; 20 pSubName = m_pCur;
21 while (m_pCur < m_pEnd && m_pCur[0] != L'.') { 21 while (m_pCur < m_pEnd && m_pCur[0] != L'.') {
22 m_pCur++; 22 m_pCur++;
23 } 23 }
24 size = (FX_STRSIZE)(m_pCur - pSubName); 24 size = (FX_STRSIZE)(m_pCur - pSubName);
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 for (int i = 0; i < ptr_array.GetSize(); i++) { 144 for (int i = 0; i < ptr_array.GetSize(); i++) {
145 _Node* pNode = (_Node*)ptr_array[i]; 145 _Node* pNode = (_Node*)ptr_array[i];
146 RemoveNode(pNode); 146 RemoveNode(pNode);
147 } 147 }
148 } 148 }
149 void CFieldTree::SetField(const CFX_WideString& full_name, 149 void CFieldTree::SetField(const CFX_WideString& full_name,
150 CPDF_FormField* field_ptr) { 150 CPDF_FormField* field_ptr) {
151 if (full_name == L"") { 151 if (full_name == L"") {
152 return; 152 return;
153 } 153 }
154 _CFieldNameExtractor name_extractor(full_name); 154 CFieldNameExtractor name_extractor(full_name);
155 const FX_WCHAR* pName; 155 const FX_WCHAR* pName;
156 FX_STRSIZE nLength; 156 FX_STRSIZE nLength;
157 name_extractor.GetNext(pName, nLength); 157 name_extractor.GetNext(pName, nLength);
158 _Node *pNode = &m_Root, *pLast = NULL; 158 _Node *pNode = &m_Root, *pLast = NULL;
159 while (nLength > 0) { 159 while (nLength > 0) {
160 pLast = pNode; 160 pLast = pNode;
161 CFX_WideString name = CFX_WideString(pName, nLength); 161 CFX_WideString name = CFX_WideString(pName, nLength);
162 pNode = _Lookup(pLast, name); 162 pNode = _Lookup(pLast, name);
163 if (pNode == NULL) { 163 if (pNode == NULL) {
164 pNode = AddChild(pLast, name, NULL); 164 pNode = AddChild(pLast, name, NULL);
165 } 165 }
166 name_extractor.GetNext(pName, nLength); 166 name_extractor.GetNext(pName, nLength);
167 } 167 }
168 if (pNode != &m_Root) { 168 if (pNode != &m_Root) {
169 pNode->field_ptr = field_ptr; 169 pNode->field_ptr = field_ptr;
170 } 170 }
171 } 171 }
172 CPDF_FormField* CFieldTree::GetField(const CFX_WideString& full_name) { 172 CPDF_FormField* CFieldTree::GetField(const CFX_WideString& full_name) {
173 if (full_name == L"") { 173 if (full_name == L"") {
174 return NULL; 174 return NULL;
175 } 175 }
176 _CFieldNameExtractor name_extractor(full_name); 176 CFieldNameExtractor name_extractor(full_name);
177 const FX_WCHAR* pName; 177 const FX_WCHAR* pName;
178 FX_STRSIZE nLength; 178 FX_STRSIZE nLength;
179 name_extractor.GetNext(pName, nLength); 179 name_extractor.GetNext(pName, nLength);
180 _Node *pNode = &m_Root, *pLast = NULL; 180 _Node *pNode = &m_Root, *pLast = NULL;
181 while (nLength > 0 && pNode) { 181 while (nLength > 0 && pNode) {
182 pLast = pNode; 182 pLast = pNode;
183 CFX_WideString name = CFX_WideString(pName, nLength); 183 CFX_WideString name = CFX_WideString(pName, nLength);
184 pNode = _Lookup(pLast, name); 184 pNode = _Lookup(pLast, name);
185 name_extractor.GetNext(pName, nLength); 185 name_extractor.GetNext(pName, nLength);
186 } 186 }
187 return pNode ? pNode->field_ptr : NULL; 187 return pNode ? pNode->field_ptr : NULL;
188 } 188 }
189 CPDF_FormField* CFieldTree::RemoveField(const CFX_WideString& full_name) { 189 CPDF_FormField* CFieldTree::RemoveField(const CFX_WideString& full_name) {
190 if (full_name == L"") { 190 if (full_name == L"") {
191 return NULL; 191 return NULL;
192 } 192 }
193 _CFieldNameExtractor name_extractor(full_name); 193 CFieldNameExtractor name_extractor(full_name);
194 const FX_WCHAR* pName; 194 const FX_WCHAR* pName;
195 FX_STRSIZE nLength; 195 FX_STRSIZE nLength;
196 name_extractor.GetNext(pName, nLength); 196 name_extractor.GetNext(pName, nLength);
197 _Node *pNode = &m_Root, *pLast = NULL; 197 _Node *pNode = &m_Root, *pLast = NULL;
198 while (nLength > 0 && pNode) { 198 while (nLength > 0 && pNode) {
199 pLast = pNode; 199 pLast = pNode;
200 CFX_WideString name = CFX_WideString(pName, nLength); 200 CFX_WideString name = CFX_WideString(pName, nLength);
201 pNode = _Lookup(pLast, name); 201 pNode = _Lookup(pLast, name);
202 name_extractor.GetNext(pName, nLength); 202 name_extractor.GetNext(pName, nLength);
203 } 203 }
204 if (pNode && pNode != &m_Root) { 204 if (pNode && pNode != &m_Root) {
205 CFX_PtrArray& ptr_array = pLast->children; 205 CFX_PtrArray& ptr_array = pLast->children;
206 for (int i = 0; i < ptr_array.GetSize(); i++) { 206 for (int i = 0; i < ptr_array.GetSize(); i++) {
207 if (pNode == (_Node*)ptr_array[i]) { 207 if (pNode == (_Node*)ptr_array[i]) {
208 ptr_array.RemoveAt(i); 208 ptr_array.RemoveAt(i);
209 break; 209 break;
210 } 210 }
211 } 211 }
212 CPDF_FormField* pField = pNode->field_ptr; 212 CPDF_FormField* pField = pNode->field_ptr;
213 RemoveNode(pNode); 213 RemoveNode(pNode);
214 return pField; 214 return pField;
215 } 215 }
216 return NULL; 216 return NULL;
217 } 217 }
218 CFieldTree::_Node* CFieldTree::FindNode(const CFX_WideString& full_name) { 218 CFieldTree::_Node* CFieldTree::FindNode(const CFX_WideString& full_name) {
219 if (full_name == L"") { 219 if (full_name == L"") {
220 return NULL; 220 return NULL;
221 } 221 }
222 _CFieldNameExtractor name_extractor(full_name); 222 CFieldNameExtractor name_extractor(full_name);
223 const FX_WCHAR* pName; 223 const FX_WCHAR* pName;
224 FX_STRSIZE nLength; 224 FX_STRSIZE nLength;
225 name_extractor.GetNext(pName, nLength); 225 name_extractor.GetNext(pName, nLength);
226 _Node *pNode = &m_Root, *pLast = NULL; 226 _Node *pNode = &m_Root, *pLast = NULL;
227 while (nLength > 0 && pNode) { 227 while (nLength > 0 && pNode) {
228 pLast = pNode; 228 pLast = pNode;
229 CFX_WideString name = CFX_WideString(pName, nLength); 229 CFX_WideString name = CFX_WideString(pName, nLength);
230 pNode = _Lookup(pLast, name); 230 pNode = _Lookup(pLast, name);
231 name_extractor.GetNext(pName, nLength); 231 name_extractor.GetNext(pName, nLength);
232 } 232 }
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 allFieldNames.RemoveAll(); 758 allFieldNames.RemoveAll();
759 int nCount = m_pFieldTree->m_Root.CountFields(); 759 int nCount = m_pFieldTree->m_Root.CountFields();
760 for (int i = 0; i < nCount; i++) { 760 for (int i = 0; i < nCount; i++) {
761 CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); 761 CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
762 if (pField) { 762 if (pField) {
763 CFX_WideString full_name = GetFullName(pField->GetFieldDict()); 763 CFX_WideString full_name = GetFullName(pField->GetFieldDict());
764 allFieldNames.Add(full_name); 764 allFieldNames.Add(full_name);
765 } 765 }
766 } 766 }
767 } 767 }
768 FX_BOOL CPDF_InterForm::IsValidFormField(const void* pField) { 768
769 if (pField == NULL) {
770 return FALSE;
771 }
772 int nCount = m_pFieldTree->m_Root.CountFields();
773 for (int i = 0; i < nCount; i++) {
774 CPDF_FormField* pFormField = m_pFieldTree->m_Root.GetField(i);
775 if (pField == pFormField) {
776 return TRUE;
777 }
778 }
779 return FALSE;
780 }
781 CPDF_FormField* CPDF_InterForm::GetFieldByDict( 769 CPDF_FormField* CPDF_InterForm::GetFieldByDict(
782 CPDF_Dictionary* pFieldDict) const { 770 CPDF_Dictionary* pFieldDict) const {
783 if (pFieldDict == NULL) { 771 if (pFieldDict == NULL) {
784 return NULL; 772 return NULL;
785 } 773 }
786 CFX_WideString csWName = GetFullName(pFieldDict); 774 CFX_WideString csWName = GetFullName(pFieldDict);
787 return m_pFieldTree->GetField(csWName); 775 return m_pFieldTree->GetField(csWName);
788 } 776 }
789 777
790 CPDF_FormControl* CPDF_InterForm::GetControlAtPoint(CPDF_Page* pPage, 778 CPDF_FormControl* CPDF_InterForm::GetControlAtPoint(CPDF_Page* pPage,
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
939 } 927 }
940 CPDF_Font* CPDF_InterForm::GetDefaultFormFont() { 928 CPDF_Font* CPDF_InterForm::GetDefaultFormFont() {
941 return GetDefaultInterFormFont(m_pFormDict, m_pDocument); 929 return GetDefaultInterFormFont(m_pFormDict, m_pDocument);
942 } 930 }
943 int CPDF_InterForm::GetFormAlignment() { 931 int CPDF_InterForm::GetFormAlignment() {
944 if (m_pFormDict == NULL) { 932 if (m_pFormDict == NULL) {
945 return 0; 933 return 0;
946 } 934 }
947 return m_pFormDict->GetInteger("Q", 0); 935 return m_pFormDict->GetInteger("Q", 0);
948 } 936 }
949 FX_BOOL CPDF_InterForm::ResetForm(const CFX_PtrArray& fields, 937
950 FX_BOOL bIncludeOrExclude, 938 bool CPDF_InterForm::ResetForm(const std::vector<CPDF_FormField*>& fields,
951 FX_BOOL bNotify) { 939 bool bIncludeOrExclude,
952 if (bNotify && m_pFormNotify != NULL) { 940 bool bNotify) {
941 if (bNotify && m_pFormNotify) {
942 int iRet = m_pFormNotify->BeforeFormReset(this);
Tom Sepez 2015/11/09 21:25:31 nit: local not needed. This returns an int, right
Lei Zhang 2015/11/09 22:45:28 Done.
943 if (iRet < 0) {
944 return false;
945 }
946 }
947 int nCount = m_pFieldTree->m_Root.CountFields();
948 for (int i = 0; i < nCount; ++i) {
949 CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
950 if (!pField)
951 continue;
952
953 auto it = std::find(fields.begin(), fields.end(), pField);
954 if (bIncludeOrExclude == (it != fields.end()))
955 pField->ResetField(bNotify);
956 }
957 if (bNotify && m_pFormNotify)
958 m_pFormNotify->AfterFormReset(this);
959 return true;
960 }
961
962 bool CPDF_InterForm::ResetForm(bool bNotify) {
963 if (bNotify && m_pFormNotify) {
953 int iRet = m_pFormNotify->BeforeFormReset(this); 964 int iRet = m_pFormNotify->BeforeFormReset(this);
Tom Sepez 2015/11/09 21:25:31 ditto
Lei Zhang 2015/11/09 22:45:28 Done. return false, even.
954 if (iRet < 0) { 965 if (iRet < 0) {
955 return FALSE; 966 return FALSE;
956 } 967 }
957 } 968 }
958 int nCount = m_pFieldTree->m_Root.CountFields(); 969 int nCount = m_pFieldTree->m_Root.CountFields();
959 for (int i = 0; i < nCount; i++) { 970 for (int i = 0; i < nCount; ++i) {
960 CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); 971 CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
961 if (pField == NULL) { 972 if (!pField)
962 continue; 973 continue;
963 } 974
964 FX_BOOL bFind = FALSE;
965 int iCount = fields.GetSize();
966 for (int i = 0; i < iCount; i++) {
967 if (pField == (CPDF_FormField*)fields[i]) {
968 bFind = TRUE;
969 break;
970 }
971 }
972 if ((bIncludeOrExclude && bFind) || (!bIncludeOrExclude && !bFind)) {
973 pField->ResetField(bNotify);
974 }
975 }
976 if (bNotify && m_pFormNotify != NULL) {
977 m_pFormNotify->AfterFormReset(this);
978 }
979 return TRUE;
980 }
981 FX_BOOL CPDF_InterForm::ResetForm(FX_BOOL bNotify) {
982 if (bNotify && m_pFormNotify != NULL) {
983 int iRet = m_pFormNotify->BeforeFormReset(this);
984 if (iRet < 0) {
985 return FALSE;
986 }
987 }
988 int nCount = m_pFieldTree->m_Root.CountFields();
989 for (int i = 0; i < nCount; i++) {
990 CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
991 if (pField == NULL) {
992 continue;
993 }
994 pField->ResetField(bNotify); 975 pField->ResetField(bNotify);
995 } 976 }
996 if (bNotify && m_pFormNotify != NULL) { 977 if (bNotify && m_pFormNotify)
997 m_pFormNotify->AfterFormReset(this); 978 m_pFormNotify->AfterFormReset(this);
998 } 979 return true;
999 return TRUE;
1000 } 980 }
981
1001 void CPDF_InterForm::LoadField(CPDF_Dictionary* pFieldDict, int nLevel) { 982 void CPDF_InterForm::LoadField(CPDF_Dictionary* pFieldDict, int nLevel) {
1002 if (nLevel > nMaxRecursion) { 983 if (nLevel > nMaxRecursion) {
1003 return; 984 return;
1004 } 985 }
1005 if (pFieldDict == NULL) { 986 if (pFieldDict == NULL) {
1006 return; 987 return;
1007 } 988 }
1008 FX_DWORD dwParentObjNum = pFieldDict->GetObjNum(); 989 FX_DWORD dwParentObjNum = pFieldDict->GetObjNum();
1009 CPDF_Array* pKids = pFieldDict->GetArray("Kids"); 990 CPDF_Array* pKids = pFieldDict->GetArray("Kids");
1010 if (!pKids) { 991 if (!pKids) {
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1119 const auto it = m_ControlMap.find(pWidgetDict); 1100 const auto it = m_ControlMap.find(pWidgetDict);
1120 if (it != m_ControlMap.end()) 1101 if (it != m_ControlMap.end())
1121 return it->second; 1102 return it->second;
1122 1103
1123 CPDF_FormControl* pControl = 1104 CPDF_FormControl* pControl =
1124 new CPDF_FormControl((CPDF_FormField*)pField, pWidgetDict); 1105 new CPDF_FormControl((CPDF_FormField*)pField, pWidgetDict);
1125 m_ControlMap[pWidgetDict] = pControl; 1106 m_ControlMap[pWidgetDict] = pControl;
1126 ((CPDF_FormField*)pField)->m_ControlList.Add(pControl); 1107 ((CPDF_FormField*)pField)->m_ControlList.Add(pControl);
1127 return pControl; 1108 return pControl;
1128 } 1109 }
1110
1129 CPDF_FormField* CPDF_InterForm::CheckRequiredFields( 1111 CPDF_FormField* CPDF_InterForm::CheckRequiredFields(
1130 const CFX_PtrArray* fields, 1112 const std::vector<CPDF_FormField*>* fields,
1131 FX_BOOL bIncludeOrExclude) const { 1113 FX_BOOL bIncludeOrExclude) const {
1132 int nCount = m_pFieldTree->m_Root.CountFields(); 1114 int nCount = m_pFieldTree->m_Root.CountFields();
1133 for (int i = 0; i < nCount; i++) { 1115 for (int i = 0; i < nCount; ++i) {
1134 CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); 1116 CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
1135 if (pField == NULL) { 1117 if (!pField)
1136 continue; 1118 continue;
1137 } 1119
1138 int32_t iType = pField->GetType(); 1120 int32_t iType = pField->GetType();
1139 if (iType == CPDF_FormField::PushButton || 1121 if (iType == CPDF_FormField::PushButton ||
1140 iType == CPDF_FormField::CheckBox || iType == CPDF_FormField::ListBox) { 1122 iType == CPDF_FormField::CheckBox || iType == CPDF_FormField::ListBox) {
1141 continue; 1123 continue;
1142 } 1124 }
1143 FX_DWORD dwFlags = pField->GetFieldFlags(); 1125 FX_DWORD dwFlags = pField->GetFieldFlags();
1144 if (dwFlags & 0x04) { 1126 if (dwFlags & 0x04)
Tom Sepez 2015/11/09 21:25:31 nit: magic number.
Lei Zhang 2015/11/09 22:45:28 Added a TODO.
1145 continue; 1127 continue;
1128
1129 bool bFind = true;
1130 if (fields) {
1131 auto it = std::find(fields->begin(), fields->end(), pField);
1132 bFind = (it != fields->end());
1146 } 1133 }
1147 FX_BOOL bFind = TRUE; 1134 if (bIncludeOrExclude == bFind) {
1148 if (fields != NULL) {
1149 bFind = fields->Find(pField, 0) >= 0;
1150 }
1151 if ((bIncludeOrExclude && bFind) || (!bIncludeOrExclude && !bFind)) {
1152 CPDF_Dictionary* pFieldDict = pField->m_pDict; 1135 CPDF_Dictionary* pFieldDict = pField->m_pDict;
1153 if ((dwFlags & 0x02) != 0 && pFieldDict->GetString("V").IsEmpty()) { 1136 if ((dwFlags & 0x02) != 0 && pFieldDict->GetString("V").IsEmpty()) {
1154 return pField; 1137 return pField;
1155 } 1138 }
1156 } 1139 }
1157 } 1140 }
1158 return NULL; 1141 return nullptr;
1159 } 1142 }
1143
1160 CFDF_Document* CPDF_InterForm::ExportToFDF(const CFX_WideStringC& pdf_path, 1144 CFDF_Document* CPDF_InterForm::ExportToFDF(const CFX_WideStringC& pdf_path,
1161 FX_BOOL bSimpleFileSpec) const { 1145 bool bSimpleFileSpec) const {
1162 CFX_PtrArray fields; 1146 std::vector<CPDF_FormField*> fields;
1163 int nCount = m_pFieldTree->m_Root.CountFields(); 1147 int nCount = m_pFieldTree->m_Root.CountFields();
1164 for (int i = 0; i < nCount; i++) { 1148 for (int i = 0; i < nCount; ++i) {
1165 CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); 1149 CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
Tom Sepez 2015/11/09 21:25:31 nit: local not needed.
Lei Zhang 2015/11/09 22:45:28 Done.
1166 fields.Add(pField); 1150 fields.push_back(pField);
1167 } 1151 }
1168 return ExportToFDF(pdf_path, fields, TRUE, bSimpleFileSpec); 1152 return ExportToFDF(pdf_path, fields, true, bSimpleFileSpec);
1169 } 1153 }
1154
1155 // TODO(thestig): Fix this.
Tom Sepez 2015/11/09 21:25:31 nit: by fix this, you mean "move to header"?
Lei Zhang 2015/11/09 22:45:28 Yes, another day.
1170 CFX_WideString FILESPEC_EncodeFileName(const CFX_WideStringC& filepath); 1156 CFX_WideString FILESPEC_EncodeFileName(const CFX_WideStringC& filepath);
1171 CFDF_Document* CPDF_InterForm::ExportToFDF(const CFX_WideStringC& pdf_path, 1157
1172 CFX_PtrArray& fields, 1158 CFDF_Document* CPDF_InterForm::ExportToFDF(
1173 FX_BOOL bIncludeOrExclude, 1159 const CFX_WideStringC& pdf_path,
1174 FX_BOOL bSimpleFileSpec) const { 1160 const std::vector<CPDF_FormField*>& fields,
1161 bool bIncludeOrExclude,
1162 bool bSimpleFileSpec) const {
1175 CFDF_Document* pDoc = CFDF_Document::CreateNewDoc(); 1163 CFDF_Document* pDoc = CFDF_Document::CreateNewDoc();
1176 if (pDoc == NULL) { 1164 if (pDoc == NULL) {
1177 return NULL; 1165 return NULL;
1178 } 1166 }
1179 CPDF_Dictionary* pMainDict = pDoc->GetRoot()->GetDict("FDF"); 1167 CPDF_Dictionary* pMainDict = pDoc->GetRoot()->GetDict("FDF");
1180 if (!pdf_path.IsEmpty()) { 1168 if (!pdf_path.IsEmpty()) {
1181 if (bSimpleFileSpec) { 1169 if (bSimpleFileSpec) {
1182 CFX_WideString wsFilePath = FILESPEC_EncodeFileName(pdf_path); 1170 CFX_WideString wsFilePath = FILESPEC_EncodeFileName(pdf_path);
1183 pMainDict->SetAtString(FX_BSTRC("F"), 1171 pMainDict->SetAtString(FX_BSTRC("F"),
1184 CFX_ByteString::FromUnicode(wsFilePath)); 1172 CFX_ByteString::FromUnicode(wsFilePath));
(...skipping 12 matching lines...) Expand all
1197 int nCount = m_pFieldTree->m_Root.CountFields(); 1185 int nCount = m_pFieldTree->m_Root.CountFields();
1198 for (int i = 0; i < nCount; i++) { 1186 for (int i = 0; i < nCount; i++) {
1199 CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); 1187 CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
1200 if (pField == NULL || pField->GetType() == CPDF_FormField::PushButton) { 1188 if (pField == NULL || pField->GetType() == CPDF_FormField::PushButton) {
1201 continue; 1189 continue;
1202 } 1190 }
1203 FX_DWORD dwFlags = pField->GetFieldFlags(); 1191 FX_DWORD dwFlags = pField->GetFieldFlags();
1204 if (dwFlags & 0x04) { 1192 if (dwFlags & 0x04) {
1205 continue; 1193 continue;
1206 } 1194 }
1207 FX_BOOL bFind = fields.Find(pField, 0) >= 0; 1195 auto it = std::find(fields.begin(), fields.end(), pField);
1208 if ((bIncludeOrExclude && bFind) || (!bIncludeOrExclude && !bFind)) { 1196 if (bIncludeOrExclude == (it != fields.end())) {
1209 if ((dwFlags & 0x02) != 0 && pField->m_pDict->GetString("V").IsEmpty()) { 1197 if ((dwFlags & 0x02) != 0 && pField->m_pDict->GetString("V").IsEmpty()) {
Tom Sepez 2015/11/09 21:25:31 nit: magic number.
Lei Zhang 2015/11/09 22:45:28 Acknowledged.
1210 continue; 1198 continue;
1211 } 1199 }
1212 CFX_WideString fullname = GetFullName(pField->GetFieldDict()); 1200 CFX_WideString fullname = GetFullName(pField->GetFieldDict());
1213 CPDF_Dictionary* pFieldDict = CPDF_Dictionary::Create(); 1201 CPDF_Dictionary* pFieldDict = CPDF_Dictionary::Create();
1214 if (pFieldDict == NULL) { 1202 if (pFieldDict == NULL) {
1215 return NULL; 1203 return NULL;
1216 } 1204 }
1217 CPDF_String* pString = CPDF_String::Create(fullname); 1205 CPDF_String* pString = CPDF_String::Create(fullname);
1218 if (pString == NULL) { 1206 if (pString == NULL) {
1219 pFieldDict->Release(); 1207 pFieldDict->Release();
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
1370 FDF_ImportField(pField, L"", bNotify); 1358 FDF_ImportField(pField, L"", bNotify);
1371 } 1359 }
1372 if (bNotify && m_pFormNotify != NULL) { 1360 if (bNotify && m_pFormNotify != NULL) {
1373 m_pFormNotify->AfterFormImportData(this); 1361 m_pFormNotify->AfterFormImportData(this);
1374 } 1362 }
1375 return TRUE; 1363 return TRUE;
1376 } 1364 }
1377 void CPDF_InterForm::SetFormNotify(const CPDF_FormNotify* pNotify) { 1365 void CPDF_InterForm::SetFormNotify(const CPDF_FormNotify* pNotify) {
1378 m_pFormNotify = (CPDF_FormNotify*)pNotify; 1366 m_pFormNotify = (CPDF_FormNotify*)pNotify;
1379 } 1367 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698