| 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 <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "core/fpdfapi/fpdf_font/include/cpdf_fontencoding.h" | 9 #include "core/fpdfapi/fpdf_font/include/cpdf_fontencoding.h" |
| 10 #include "core/fpdfapi/fpdf_page/include/cpdf_page.h" | 10 #include "core/fpdfapi/fpdf_page/include/cpdf_page.h" |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 count += children.GetAt(i)->CountFields(nLevel + 1); | 90 count += children.GetAt(i)->CountFields(nLevel + 1); |
| 91 } | 91 } |
| 92 return count; | 92 return count; |
| 93 } | 93 } |
| 94 CPDF_FormField* GetField(int* fields_to_go) { | 94 CPDF_FormField* GetField(int* fields_to_go) { |
| 95 if (field_ptr) { | 95 if (field_ptr) { |
| 96 if (*fields_to_go == 0) { | 96 if (*fields_to_go == 0) { |
| 97 return field_ptr; | 97 return field_ptr; |
| 98 } | 98 } |
| 99 --*fields_to_go; | 99 --*fields_to_go; |
| 100 return NULL; | 100 return nullptr; |
| 101 } | 101 } |
| 102 for (int i = 0; i < children.GetSize(); i++) { | 102 for (int i = 0; i < children.GetSize(); i++) { |
| 103 if (CPDF_FormField* pField = children.GetAt(i)->GetField(fields_to_go)) | 103 if (CPDF_FormField* pField = children.GetAt(i)->GetField(fields_to_go)) |
| 104 return pField; | 104 return pField; |
| 105 } | 105 } |
| 106 return NULL; | 106 return nullptr; |
| 107 } | 107 } |
| 108 CPDF_FormField* GetField(int index) { | 108 CPDF_FormField* GetField(int index) { |
| 109 int fields_to_go = index; | 109 int fields_to_go = index; |
| 110 return GetField(&fields_to_go); | 110 return GetField(&fields_to_go); |
| 111 } | 111 } |
| 112 }; | 112 }; |
| 113 CFieldTree(); | 113 CFieldTree(); |
| 114 ~CFieldTree(); | 114 ~CFieldTree(); |
| 115 void SetField(const CFX_WideString& full_name, CPDF_FormField* field_ptr); | 115 void SetField(const CFX_WideString& full_name, CPDF_FormField* field_ptr); |
| 116 CPDF_FormField* GetField(const CFX_WideString& full_name); | 116 CPDF_FormField* GetField(const CFX_WideString& full_name); |
| 117 CPDF_FormField* RemoveField(const CFX_WideString& full_name); | 117 CPDF_FormField* RemoveField(const CFX_WideString& full_name); |
| 118 void RemoveAll(); | 118 void RemoveAll(); |
| 119 _Node* FindNode(const CFX_WideString& full_name); | 119 _Node* FindNode(const CFX_WideString& full_name); |
| 120 _Node* AddChild(_Node* pParent, | 120 _Node* AddChild(_Node* pParent, |
| 121 const CFX_WideString& short_name, | 121 const CFX_WideString& short_name, |
| 122 CPDF_FormField* field_ptr); | 122 CPDF_FormField* field_ptr); |
| 123 void RemoveNode(_Node* pNode, int nLevel = 0); | 123 void RemoveNode(_Node* pNode, int nLevel = 0); |
| 124 _Node* _Lookup(_Node* pParent, const CFX_WideString& short_name); | 124 _Node* _Lookup(_Node* pParent, const CFX_WideString& short_name); |
| 125 _Node m_Root; | 125 _Node m_Root; |
| 126 }; | 126 }; |
| 127 CFieldTree::CFieldTree() { | 127 CFieldTree::CFieldTree() { |
| 128 m_Root.parent = NULL; | 128 m_Root.parent = nullptr; |
| 129 m_Root.field_ptr = NULL; | 129 m_Root.field_ptr = nullptr; |
| 130 } | 130 } |
| 131 CFieldTree::~CFieldTree() { | 131 CFieldTree::~CFieldTree() { |
| 132 RemoveAll(); | 132 RemoveAll(); |
| 133 } | 133 } |
| 134 CFieldTree::_Node* CFieldTree::AddChild(_Node* pParent, | 134 CFieldTree::_Node* CFieldTree::AddChild(_Node* pParent, |
| 135 const CFX_WideString& short_name, | 135 const CFX_WideString& short_name, |
| 136 CPDF_FormField* field_ptr) { | 136 CPDF_FormField* field_ptr) { |
| 137 if (!pParent) { | 137 if (!pParent) { |
| 138 return NULL; | 138 return nullptr; |
| 139 } | 139 } |
| 140 _Node* pNode = new _Node; | 140 _Node* pNode = new _Node; |
| 141 pNode->parent = pParent; | 141 pNode->parent = pParent; |
| 142 pNode->short_name = short_name; | 142 pNode->short_name = short_name; |
| 143 pNode->field_ptr = field_ptr; | 143 pNode->field_ptr = field_ptr; |
| 144 pParent->children.Add(pNode); | 144 pParent->children.Add(pNode); |
| 145 return pNode; | 145 return pNode; |
| 146 } | 146 } |
| 147 void CFieldTree::RemoveNode(_Node* pNode, int nLevel) { | 147 void CFieldTree::RemoveNode(_Node* pNode, int nLevel) { |
| 148 if (!pNode) { | 148 if (!pNode) { |
| 149 return; | 149 return; |
| 150 } | 150 } |
| 151 if (nLevel <= nMaxRecursion) { | 151 if (nLevel <= nMaxRecursion) { |
| 152 for (int i = 0; i < pNode->children.GetSize(); i++) { | 152 for (int i = 0; i < pNode->children.GetSize(); i++) { |
| 153 RemoveNode(pNode->children[i], nLevel + 1); | 153 RemoveNode(pNode->children[i], nLevel + 1); |
| 154 } | 154 } |
| 155 } | 155 } |
| 156 delete pNode; | 156 delete pNode; |
| 157 } | 157 } |
| 158 CFieldTree::_Node* CFieldTree::_Lookup(_Node* pParent, | 158 CFieldTree::_Node* CFieldTree::_Lookup(_Node* pParent, |
| 159 const CFX_WideString& short_name) { | 159 const CFX_WideString& short_name) { |
| 160 if (!pParent) { | 160 if (!pParent) { |
| 161 return NULL; | 161 return nullptr; |
| 162 } | 162 } |
| 163 for (int i = 0; i < pParent->children.GetSize(); i++) { | 163 for (int i = 0; i < pParent->children.GetSize(); i++) { |
| 164 _Node* pNode = pParent->children[i]; | 164 _Node* pNode = pParent->children[i]; |
| 165 if (pNode->short_name.GetLength() == short_name.GetLength() && | 165 if (pNode->short_name.GetLength() == short_name.GetLength() && |
| 166 FXSYS_memcmp(pNode->short_name.c_str(), short_name.c_str(), | 166 FXSYS_memcmp(pNode->short_name.c_str(), short_name.c_str(), |
| 167 short_name.GetLength() * sizeof(FX_WCHAR)) == 0) { | 167 short_name.GetLength() * sizeof(FX_WCHAR)) == 0) { |
| 168 return pNode; | 168 return pNode; |
| 169 } | 169 } |
| 170 } | 170 } |
| 171 return NULL; | 171 return nullptr; |
| 172 } | 172 } |
| 173 void CFieldTree::RemoveAll() { | 173 void CFieldTree::RemoveAll() { |
| 174 for (int i = 0; i < m_Root.children.GetSize(); i++) { | 174 for (int i = 0; i < m_Root.children.GetSize(); i++) { |
| 175 RemoveNode(m_Root.children[i]); | 175 RemoveNode(m_Root.children[i]); |
| 176 } | 176 } |
| 177 } | 177 } |
| 178 void CFieldTree::SetField(const CFX_WideString& full_name, | 178 void CFieldTree::SetField(const CFX_WideString& full_name, |
| 179 CPDF_FormField* field_ptr) { | 179 CPDF_FormField* field_ptr) { |
| 180 if (full_name == L"") { | 180 if (full_name == L"") { |
| 181 return; | 181 return; |
| 182 } | 182 } |
| 183 CFieldNameExtractor name_extractor(full_name); | 183 CFieldNameExtractor name_extractor(full_name); |
| 184 const FX_WCHAR* pName; | 184 const FX_WCHAR* pName; |
| 185 FX_STRSIZE nLength; | 185 FX_STRSIZE nLength; |
| 186 name_extractor.GetNext(pName, nLength); | 186 name_extractor.GetNext(pName, nLength); |
| 187 _Node *pNode = &m_Root, *pLast = NULL; | 187 _Node *pNode = &m_Root, *pLast = nullptr; |
| 188 while (nLength > 0) { | 188 while (nLength > 0) { |
| 189 pLast = pNode; | 189 pLast = pNode; |
| 190 CFX_WideString name = CFX_WideString(pName, nLength); | 190 CFX_WideString name = CFX_WideString(pName, nLength); |
| 191 pNode = _Lookup(pLast, name); | 191 pNode = _Lookup(pLast, name); |
| 192 if (!pNode) { | 192 if (!pNode) { |
| 193 pNode = AddChild(pLast, name, NULL); | 193 pNode = AddChild(pLast, name, nullptr); |
| 194 } | 194 } |
| 195 name_extractor.GetNext(pName, nLength); | 195 name_extractor.GetNext(pName, nLength); |
| 196 } | 196 } |
| 197 if (pNode != &m_Root) { | 197 if (pNode != &m_Root) { |
| 198 pNode->field_ptr = field_ptr; | 198 pNode->field_ptr = field_ptr; |
| 199 } | 199 } |
| 200 } | 200 } |
| 201 CPDF_FormField* CFieldTree::GetField(const CFX_WideString& full_name) { | 201 CPDF_FormField* CFieldTree::GetField(const CFX_WideString& full_name) { |
| 202 if (full_name == L"") { | 202 if (full_name == L"") { |
| 203 return NULL; | 203 return nullptr; |
| 204 } | 204 } |
| 205 CFieldNameExtractor name_extractor(full_name); | 205 CFieldNameExtractor name_extractor(full_name); |
| 206 const FX_WCHAR* pName; | 206 const FX_WCHAR* pName; |
| 207 FX_STRSIZE nLength; | 207 FX_STRSIZE nLength; |
| 208 name_extractor.GetNext(pName, nLength); | 208 name_extractor.GetNext(pName, nLength); |
| 209 _Node *pNode = &m_Root, *pLast = NULL; | 209 _Node *pNode = &m_Root, *pLast = nullptr; |
| 210 while (nLength > 0 && pNode) { | 210 while (nLength > 0 && pNode) { |
| 211 pLast = pNode; | 211 pLast = pNode; |
| 212 CFX_WideString name = CFX_WideString(pName, nLength); | 212 CFX_WideString name = CFX_WideString(pName, nLength); |
| 213 pNode = _Lookup(pLast, name); | 213 pNode = _Lookup(pLast, name); |
| 214 name_extractor.GetNext(pName, nLength); | 214 name_extractor.GetNext(pName, nLength); |
| 215 } | 215 } |
| 216 return pNode ? pNode->field_ptr : NULL; | 216 return pNode ? pNode->field_ptr : nullptr; |
| 217 } | 217 } |
| 218 CPDF_FormField* CFieldTree::RemoveField(const CFX_WideString& full_name) { | 218 CPDF_FormField* CFieldTree::RemoveField(const CFX_WideString& full_name) { |
| 219 if (full_name == L"") { | 219 if (full_name == L"") { |
| 220 return NULL; | 220 return nullptr; |
| 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; |
| 227 _Node* pLast = nullptr; |
| 227 while (nLength > 0 && pNode) { | 228 while (nLength > 0 && pNode) { |
| 228 pLast = pNode; | 229 pLast = pNode; |
| 229 CFX_WideString name = CFX_WideString(pName, nLength); | 230 CFX_WideString name = CFX_WideString(pName, nLength); |
| 230 pNode = _Lookup(pLast, name); | 231 pNode = _Lookup(pLast, name); |
| 231 name_extractor.GetNext(pName, nLength); | 232 name_extractor.GetNext(pName, nLength); |
| 232 } | 233 } |
| 233 if (pNode && pNode != &m_Root) { | 234 if (pNode && pNode != &m_Root) { |
| 234 for (int i = 0; i < pLast->children.GetSize(); i++) { | 235 for (int i = 0; i < pLast->children.GetSize(); i++) { |
| 235 if (pNode == pLast->children[i]) { | 236 if (pNode == pLast->children[i]) { |
| 236 pLast->children.RemoveAt(i); | 237 pLast->children.RemoveAt(i); |
| 237 break; | 238 break; |
| 238 } | 239 } |
| 239 } | 240 } |
| 240 CPDF_FormField* pField = pNode->field_ptr; | 241 CPDF_FormField* pField = pNode->field_ptr; |
| 241 RemoveNode(pNode); | 242 RemoveNode(pNode); |
| 242 return pField; | 243 return pField; |
| 243 } | 244 } |
| 244 return NULL; | 245 return nullptr; |
| 245 } | 246 } |
| 246 CFieldTree::_Node* CFieldTree::FindNode(const CFX_WideString& full_name) { | 247 CFieldTree::_Node* CFieldTree::FindNode(const CFX_WideString& full_name) { |
| 247 if (full_name == L"") { | 248 if (full_name == L"") { |
| 248 return NULL; | 249 return nullptr; |
| 249 } | 250 } |
| 250 CFieldNameExtractor name_extractor(full_name); | 251 CFieldNameExtractor name_extractor(full_name); |
| 251 const FX_WCHAR* pName; | 252 const FX_WCHAR* pName; |
| 252 FX_STRSIZE nLength; | 253 FX_STRSIZE nLength; |
| 253 name_extractor.GetNext(pName, nLength); | 254 name_extractor.GetNext(pName, nLength); |
| 254 _Node *pNode = &m_Root, *pLast = NULL; | 255 _Node *pNode = &m_Root, *pLast = nullptr; |
| 255 while (nLength > 0 && pNode) { | 256 while (nLength > 0 && pNode) { |
| 256 pLast = pNode; | 257 pLast = pNode; |
| 257 CFX_WideString name = CFX_WideString(pName, nLength); | 258 CFX_WideString name = CFX_WideString(pName, nLength); |
| 258 pNode = _Lookup(pLast, name); | 259 pNode = _Lookup(pLast, name); |
| 259 name_extractor.GetNext(pName, nLength); | 260 name_extractor.GetNext(pName, nLength); |
| 260 } | 261 } |
| 261 return pNode; | 262 return pNode; |
| 262 } | 263 } |
| 263 | 264 |
| 264 CPDF_InterForm::CPDF_InterForm(CPDF_Document* pDocument) | 265 CPDF_InterForm::CPDF_InterForm(CPDF_Document* pDocument) |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 368 return 1; | 369 return 1; |
| 369 } | 370 } |
| 370 LPDF_FONTDATA pData = (LPDF_FONTDATA)lParam; | 371 LPDF_FONTDATA pData = (LPDF_FONTDATA)lParam; |
| 371 memcpy(&pData->lf, &lpelfe->elfLogFont, sizeof(LOGFONTA)); | 372 memcpy(&pData->lf, &lpelfe->elfLogFont, sizeof(LOGFONTA)); |
| 372 pData->bFind = TRUE; | 373 pData->bFind = TRUE; |
| 373 return 0; | 374 return 0; |
| 374 } | 375 } |
| 375 static FX_BOOL RetrieveSpecificFont(LOGFONTA& lf) { | 376 static FX_BOOL RetrieveSpecificFont(LOGFONTA& lf) { |
| 376 PDF_FONTDATA fd; | 377 PDF_FONTDATA fd; |
| 377 memset(&fd, 0, sizeof(PDF_FONTDATA)); | 378 memset(&fd, 0, sizeof(PDF_FONTDATA)); |
| 378 HDC hDC = ::GetDC(NULL); | 379 HDC hDC = ::GetDC(nullptr); |
| 379 EnumFontFamiliesExA(hDC, &lf, (FONTENUMPROCA)EnumFontFamExProc, (LPARAM)&fd, | 380 EnumFontFamiliesExA(hDC, &lf, (FONTENUMPROCA)EnumFontFamExProc, (LPARAM)&fd, |
| 380 0); | 381 0); |
| 381 ::ReleaseDC(NULL, hDC); | 382 ::ReleaseDC(nullptr, hDC); |
| 382 if (fd.bFind) { | 383 if (fd.bFind) { |
| 383 memcpy(&lf, &fd.lf, sizeof(LOGFONTA)); | 384 memcpy(&lf, &fd.lf, sizeof(LOGFONTA)); |
| 384 } | 385 } |
| 385 return fd.bFind; | 386 return fd.bFind; |
| 386 } | 387 } |
| 387 static FX_BOOL RetrieveSpecificFont(uint8_t charSet, | 388 static FX_BOOL RetrieveSpecificFont(uint8_t charSet, |
| 388 uint8_t pitchAndFamily, | 389 uint8_t pitchAndFamily, |
| 389 LPCSTR pcsFontName, | 390 LPCSTR pcsFontName, |
| 390 LOGFONTA& lf) { | 391 LOGFONTA& lf) { |
| 391 memset(&lf, 0, sizeof(LOGFONTA)); | 392 memset(&lf, 0, sizeof(LOGFONTA)); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 433 } | 434 } |
| 434 if (!bRet) { | 435 if (!bRet) { |
| 435 bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, | 436 bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, |
| 436 "Arial Unicode MS", lf); | 437 "Arial Unicode MS", lf); |
| 437 } | 438 } |
| 438 if (!bRet) { | 439 if (!bRet) { |
| 439 bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, | 440 bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, |
| 440 "Microsoft Sans Serif", lf); | 441 "Microsoft Sans Serif", lf); |
| 441 } | 442 } |
| 442 if (!bRet) { | 443 if (!bRet) { |
| 443 bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, NULL, lf); | 444 bRet = |
| 445 RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, nullptr, lf); |
| 444 } | 446 } |
| 445 if (bRet) { | 447 if (bRet) { |
| 446 if (pLogFont) { | 448 if (pLogFont) { |
| 447 memcpy(pLogFont, &lf, sizeof(LOGFONTA)); | 449 memcpy(pLogFont, &lf, sizeof(LOGFONTA)); |
| 448 } | 450 } |
| 449 csFontName = lf.lfFaceName; | 451 csFontName = lf.lfFaceName; |
| 450 return csFontName; | 452 return csFontName; |
| 451 } | 453 } |
| 452 #endif | 454 #endif |
| 453 return csFontName; | 455 return csFontName; |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 606 } | 608 } |
| 607 } | 609 } |
| 608 if (csSub.IsEmpty()) { | 610 if (csSub.IsEmpty()) { |
| 609 return FALSE; | 611 return FALSE; |
| 610 } | 612 } |
| 611 csNewFieldName = csSub; | 613 csNewFieldName = csSub; |
| 612 return TRUE; | 614 return TRUE; |
| 613 } | 615 } |
| 614 FX_BOOL CPDF_InterForm::ValidateFieldName(CFX_WideString& csNewFieldName, | 616 FX_BOOL CPDF_InterForm::ValidateFieldName(CFX_WideString& csNewFieldName, |
| 615 int iType) { | 617 int iType) { |
| 616 return ValidateFieldName(csNewFieldName, iType, NULL, NULL); | 618 return ValidateFieldName(csNewFieldName, iType, nullptr, nullptr); |
| 617 } | 619 } |
| 618 FX_BOOL CPDF_InterForm::ValidateFieldName(const CPDF_FormField* pField, | 620 FX_BOOL CPDF_InterForm::ValidateFieldName(const CPDF_FormField* pField, |
| 619 CFX_WideString& csNewFieldName) { | 621 CFX_WideString& csNewFieldName) { |
| 620 return pField && !csNewFieldName.IsEmpty() && | 622 return pField && !csNewFieldName.IsEmpty() && |
| 621 ValidateFieldName(csNewFieldName, | 623 ValidateFieldName(csNewFieldName, |
| 622 ((CPDF_FormField*)pField)->GetFieldType(), pField, | 624 ((CPDF_FormField*)pField)->GetFieldType(), pField, |
| 623 NULL); | 625 nullptr); |
| 624 } | 626 } |
| 625 FX_BOOL CPDF_InterForm::ValidateFieldName(const CPDF_FormControl* pControl, | 627 FX_BOOL CPDF_InterForm::ValidateFieldName(const CPDF_FormControl* pControl, |
| 626 CFX_WideString& csNewFieldName) { | 628 CFX_WideString& csNewFieldName) { |
| 627 if (!pControl || csNewFieldName.IsEmpty()) { | 629 if (!pControl || csNewFieldName.IsEmpty()) { |
| 628 return FALSE; | 630 return FALSE; |
| 629 } | 631 } |
| 630 CPDF_FormField* pField = ((CPDF_FormControl*)pControl)->GetField(); | 632 CPDF_FormField* pField = ((CPDF_FormControl*)pControl)->GetField(); |
| 631 return ValidateFieldName(csNewFieldName, pField->GetFieldType(), pField, | 633 return ValidateFieldName(csNewFieldName, pField->GetFieldType(), pField, |
| 632 pControl); | 634 pControl); |
| 633 } | 635 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 681 if (csFieldName == L"") { | 683 if (csFieldName == L"") { |
| 682 return m_pFieldTree->m_Root.GetField(index); | 684 return m_pFieldTree->m_Root.GetField(index); |
| 683 } | 685 } |
| 684 CFieldTree::_Node* pNode = m_pFieldTree->FindNode(csFieldName); | 686 CFieldTree::_Node* pNode = m_pFieldTree->FindNode(csFieldName); |
| 685 return pNode ? pNode->GetField(index) : nullptr; | 687 return pNode ? pNode->GetField(index) : nullptr; |
| 686 } | 688 } |
| 687 | 689 |
| 688 CPDF_FormField* CPDF_InterForm::GetFieldByDict( | 690 CPDF_FormField* CPDF_InterForm::GetFieldByDict( |
| 689 CPDF_Dictionary* pFieldDict) const { | 691 CPDF_Dictionary* pFieldDict) const { |
| 690 if (!pFieldDict) { | 692 if (!pFieldDict) { |
| 691 return NULL; | 693 return nullptr; |
| 692 } | 694 } |
| 693 CFX_WideString csWName = GetFullName(pFieldDict); | 695 CFX_WideString csWName = GetFullName(pFieldDict); |
| 694 return m_pFieldTree->GetField(csWName); | 696 return m_pFieldTree->GetField(csWName); |
| 695 } | 697 } |
| 696 | 698 |
| 697 CPDF_FormControl* CPDF_InterForm::GetControlAtPoint(CPDF_Page* pPage, | 699 CPDF_FormControl* CPDF_InterForm::GetControlAtPoint(CPDF_Page* pPage, |
| 698 FX_FLOAT pdf_x, | 700 FX_FLOAT pdf_x, |
| 699 FX_FLOAT pdf_y, | 701 FX_FLOAT pdf_y, |
| 700 int* z_order) const { | 702 int* z_order) const { |
| 701 CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArrayBy("Annots"); | 703 CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArrayBy("Annots"); |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 919 } | 921 } |
| 920 for (size_t i = 0; i < pAnnots->GetCount(); i++) { | 922 for (size_t i = 0; i < pAnnots->GetCount(); i++) { |
| 921 CPDF_Dictionary* pAnnot = pAnnots->GetDictAt(i); | 923 CPDF_Dictionary* pAnnot = pAnnots->GetDictAt(i); |
| 922 if (pAnnot && pAnnot->GetStringBy("Subtype") == "Widget") { | 924 if (pAnnot && pAnnot->GetStringBy("Subtype") == "Widget") { |
| 923 LoadField(pAnnot); | 925 LoadField(pAnnot); |
| 924 } | 926 } |
| 925 } | 927 } |
| 926 } | 928 } |
| 927 CPDF_FormField* CPDF_InterForm::AddTerminalField(CPDF_Dictionary* pFieldDict) { | 929 CPDF_FormField* CPDF_InterForm::AddTerminalField(CPDF_Dictionary* pFieldDict) { |
| 928 if (!pFieldDict->KeyExist("T")) { | 930 if (!pFieldDict->KeyExist("T")) { |
| 929 return NULL; | 931 return nullptr; |
| 930 } | 932 } |
| 931 CPDF_Dictionary* pDict = pFieldDict; | 933 CPDF_Dictionary* pDict = pFieldDict; |
| 932 CFX_WideString csWName = GetFullName(pFieldDict); | 934 CFX_WideString csWName = GetFullName(pFieldDict); |
| 933 if (csWName.IsEmpty()) { | 935 if (csWName.IsEmpty()) { |
| 934 return NULL; | 936 return nullptr; |
| 935 } | 937 } |
| 936 CPDF_FormField* pField = NULL; | 938 CPDF_FormField* pField = nullptr; |
| 937 pField = m_pFieldTree->GetField(csWName); | 939 pField = m_pFieldTree->GetField(csWName); |
| 938 if (!pField) { | 940 if (!pField) { |
| 939 CPDF_Dictionary* pParent = pFieldDict; | 941 CPDF_Dictionary* pParent = pFieldDict; |
| 940 if (!pFieldDict->KeyExist("T") && | 942 if (!pFieldDict->KeyExist("T") && |
| 941 pFieldDict->GetStringBy("Subtype") == "Widget") { | 943 pFieldDict->GetStringBy("Subtype") == "Widget") { |
| 942 pParent = pFieldDict->GetDictBy("Parent"); | 944 pParent = pFieldDict->GetDictBy("Parent"); |
| 943 if (!pParent) { | 945 if (!pParent) { |
| 944 pParent = pFieldDict; | 946 pParent = pFieldDict; |
| 945 } | 947 } |
| 946 } | 948 } |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1042 return ExportToFDF(pdf_path, fields, true, bSimpleFileSpec); | 1044 return ExportToFDF(pdf_path, fields, true, bSimpleFileSpec); |
| 1043 } | 1045 } |
| 1044 | 1046 |
| 1045 CFDF_Document* CPDF_InterForm::ExportToFDF( | 1047 CFDF_Document* CPDF_InterForm::ExportToFDF( |
| 1046 const CFX_WideStringC& pdf_path, | 1048 const CFX_WideStringC& pdf_path, |
| 1047 const std::vector<CPDF_FormField*>& fields, | 1049 const std::vector<CPDF_FormField*>& fields, |
| 1048 bool bIncludeOrExclude, | 1050 bool bIncludeOrExclude, |
| 1049 bool bSimpleFileSpec) const { | 1051 bool bSimpleFileSpec) const { |
| 1050 CFDF_Document* pDoc = CFDF_Document::CreateNewDoc(); | 1052 CFDF_Document* pDoc = CFDF_Document::CreateNewDoc(); |
| 1051 if (!pDoc) { | 1053 if (!pDoc) { |
| 1052 return NULL; | 1054 return nullptr; |
| 1053 } | 1055 } |
| 1054 CPDF_Dictionary* pMainDict = pDoc->GetRoot()->GetDictBy("FDF"); | 1056 CPDF_Dictionary* pMainDict = pDoc->GetRoot()->GetDictBy("FDF"); |
| 1055 if (!pdf_path.IsEmpty()) { | 1057 if (!pdf_path.IsEmpty()) { |
| 1056 if (bSimpleFileSpec) { | 1058 if (bSimpleFileSpec) { |
| 1057 CFX_WideString wsFilePath = CPDF_FileSpec::EncodeFileName(pdf_path); | 1059 CFX_WideString wsFilePath = CPDF_FileSpec::EncodeFileName(pdf_path); |
| 1058 pMainDict->SetAtString("F", CFX_ByteString::FromUnicode(wsFilePath)); | 1060 pMainDict->SetAtString("F", CFX_ByteString::FromUnicode(wsFilePath)); |
| 1059 pMainDict->SetAtString("UF", PDF_EncodeText(wsFilePath)); | 1061 pMainDict->SetAtString("UF", PDF_EncodeText(wsFilePath)); |
| 1060 } else { | 1062 } else { |
| 1061 CPDF_FileSpec filespec; | 1063 CPDF_FileSpec filespec; |
| 1062 filespec.SetFileName(pdf_path); | 1064 filespec.SetFileName(pdf_path); |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1188 FDF_ImportField(pField, L"", bNotify); | 1190 FDF_ImportField(pField, L"", bNotify); |
| 1189 } | 1191 } |
| 1190 if (bNotify && m_pFormNotify) | 1192 if (bNotify && m_pFormNotify) |
| 1191 m_pFormNotify->AfterFormImportData(this); | 1193 m_pFormNotify->AfterFormImportData(this); |
| 1192 return TRUE; | 1194 return TRUE; |
| 1193 } | 1195 } |
| 1194 | 1196 |
| 1195 void CPDF_InterForm::SetFormNotify(IPDF_FormNotify* pNotify) { | 1197 void CPDF_InterForm::SetFormNotify(IPDF_FormNotify* pNotify) { |
| 1196 m_pFormNotify = pNotify; | 1198 m_pFormNotify = pNotify; |
| 1197 } | 1199 } |
| OLD | NEW |