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 "core/fpdfdoc/include/cpdf_formfield.h" | 7 #include "core/fpdfdoc/include/cpdf_formfield.h" |
8 | 8 |
9 #include <set> | 9 #include <set> |
10 | 10 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 } // namespace | 49 } // namespace |
50 | 50 |
51 CPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict, | 51 CPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict, |
52 const FX_CHAR* name, | 52 const FX_CHAR* name, |
53 int nLevel) { | 53 int nLevel) { |
54 if (nLevel > kMaxRecursion) | 54 if (nLevel > kMaxRecursion) |
55 return nullptr; | 55 return nullptr; |
56 if (!pFieldDict) | 56 if (!pFieldDict) |
57 return nullptr; | 57 return nullptr; |
58 | 58 |
59 CPDF_Object* pAttr = pFieldDict->GetDirectObjectBy(name); | 59 CPDF_Object* pAttr = pFieldDict->GetDirectObjectFor(name); |
60 if (pAttr) | 60 if (pAttr) |
61 return pAttr; | 61 return pAttr; |
62 | 62 |
63 CPDF_Dictionary* pParent = pFieldDict->GetDictBy("Parent"); | 63 CPDF_Dictionary* pParent = pFieldDict->GetDictFor("Parent"); |
64 if (!pParent) | 64 if (!pParent) |
65 return nullptr; | 65 return nullptr; |
66 return FPDF_GetFieldAttr(pParent, name, nLevel + 1); | 66 return FPDF_GetFieldAttr(pParent, name, nLevel + 1); |
67 } | 67 } |
68 | 68 |
69 CFX_WideString FPDF_GetFullName(CPDF_Dictionary* pFieldDict) { | 69 CFX_WideString FPDF_GetFullName(CPDF_Dictionary* pFieldDict) { |
70 CFX_WideString full_name; | 70 CFX_WideString full_name; |
71 std::set<CPDF_Dictionary*> visited; | 71 std::set<CPDF_Dictionary*> visited; |
72 CPDF_Dictionary* pLevel = pFieldDict; | 72 CPDF_Dictionary* pLevel = pFieldDict; |
73 while (pLevel) { | 73 while (pLevel) { |
74 visited.insert(pLevel); | 74 visited.insert(pLevel); |
75 CFX_WideString short_name = pLevel->GetUnicodeTextBy("T"); | 75 CFX_WideString short_name = pLevel->GetUnicodeTextFor("T"); |
76 if (!short_name.IsEmpty()) { | 76 if (!short_name.IsEmpty()) { |
77 if (full_name.IsEmpty()) | 77 if (full_name.IsEmpty()) |
78 full_name = short_name; | 78 full_name = short_name; |
79 else | 79 else |
80 full_name = short_name + L"." + full_name; | 80 full_name = short_name + L"." + full_name; |
81 } | 81 } |
82 pLevel = pLevel->GetDictBy("Parent"); | 82 pLevel = pLevel->GetDictFor("Parent"); |
83 if (pdfium::ContainsKey(visited, pLevel)) | 83 if (pdfium::ContainsKey(visited, pLevel)) |
84 break; | 84 break; |
85 } | 85 } |
86 return full_name; | 86 return full_name; |
87 } | 87 } |
88 | 88 |
89 CPDF_FormField::CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict) | 89 CPDF_FormField::CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict) |
90 : m_Type(Unknown), | 90 : m_Type(Unknown), |
91 m_pForm(pForm), | 91 m_pForm(pForm), |
92 m_pDict(pDict), | 92 m_pDict(pDict), |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 return FALSE; | 216 return FALSE; |
217 | 217 |
218 if (bNotify && !NotifyBeforeValueChange(csDValue)) | 218 if (bNotify && !NotifyBeforeValueChange(csDValue)) |
219 return FALSE; | 219 return FALSE; |
220 | 220 |
221 if (pDV) { | 221 if (pDV) { |
222 CPDF_Object* pClone = pDV->Clone(); | 222 CPDF_Object* pClone = pDV->Clone(); |
223 if (!pClone) | 223 if (!pClone) |
224 return FALSE; | 224 return FALSE; |
225 | 225 |
226 m_pDict->SetAt("V", pClone); | 226 m_pDict->SetFor("V", pClone); |
227 if (pRV) { | 227 if (pRV) { |
228 CPDF_Object* pCloneR = pDV->Clone(); | 228 CPDF_Object* pCloneR = pDV->Clone(); |
229 m_pDict->SetAt("RV", pCloneR); | 229 m_pDict->SetFor("RV", pCloneR); |
230 } | 230 } |
231 } else { | 231 } else { |
232 m_pDict->RemoveAt("V"); | 232 m_pDict->RemoveFor("V"); |
233 m_pDict->RemoveAt("RV"); | 233 m_pDict->RemoveFor("RV"); |
234 } | 234 } |
235 if (bNotify) | 235 if (bNotify) |
236 NotifyAfterValueChange(); | 236 NotifyAfterValueChange(); |
237 break; | 237 break; |
238 } | 238 } |
239 } | 239 } |
240 return TRUE; | 240 return TRUE; |
241 } | 241 } |
242 | 242 |
243 int CPDF_FormField::GetControlIndex(const CPDF_FormControl* pControl) const { | 243 int CPDF_FormField::GetControlIndex(const CPDF_FormControl* pControl) const { |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
357 case RichText: | 357 case RichText: |
358 case Text: | 358 case Text: |
359 case ComboBox: { | 359 case ComboBox: { |
360 CFX_WideString csValue = value; | 360 CFX_WideString csValue = value; |
361 if (bNotify && !NotifyBeforeValueChange(csValue)) | 361 if (bNotify && !NotifyBeforeValueChange(csValue)) |
362 return FALSE; | 362 return FALSE; |
363 | 363 |
364 int iIndex = FindOptionValue(csValue); | 364 int iIndex = FindOptionValue(csValue); |
365 if (iIndex < 0) { | 365 if (iIndex < 0) { |
366 CFX_ByteString bsEncodeText = PDF_EncodeText(csValue); | 366 CFX_ByteString bsEncodeText = PDF_EncodeText(csValue); |
367 m_pDict->SetAtString(bDefault ? "DV" : "V", bsEncodeText); | 367 m_pDict->SetStringFor(bDefault ? "DV" : "V", bsEncodeText); |
368 if (m_Type == RichText && !bDefault) | 368 if (m_Type == RichText && !bDefault) |
369 m_pDict->SetAtString("RV", bsEncodeText); | 369 m_pDict->SetStringFor("RV", bsEncodeText); |
370 m_pDict->RemoveAt("I"); | 370 m_pDict->RemoveFor("I"); |
371 } else { | 371 } else { |
372 m_pDict->SetAtString(bDefault ? "DV" : "V", PDF_EncodeText(csValue)); | 372 m_pDict->SetStringFor(bDefault ? "DV" : "V", PDF_EncodeText(csValue)); |
373 if (!bDefault) { | 373 if (!bDefault) { |
374 ClearSelection(); | 374 ClearSelection(); |
375 SetItemSelection(iIndex, TRUE); | 375 SetItemSelection(iIndex, TRUE); |
376 } | 376 } |
377 } | 377 } |
378 if (bNotify) | 378 if (bNotify) |
379 NotifyAfterValueChange(); | 379 NotifyAfterValueChange(); |
380 break; | 380 break; |
381 } | 381 } |
382 case ListBox: { | 382 case ListBox: { |
(...skipping 29 matching lines...) Expand all Loading... |
412 if (CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "MaxLen")) | 412 if (CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "MaxLen")) |
413 return pObj->GetInteger(); | 413 return pObj->GetInteger(); |
414 | 414 |
415 for (int i = 0; i < m_ControlList.GetSize(); i++) { | 415 for (int i = 0; i < m_ControlList.GetSize(); i++) { |
416 CPDF_FormControl* pControl = m_ControlList.GetAt(i); | 416 CPDF_FormControl* pControl = m_ControlList.GetAt(i); |
417 if (!pControl) | 417 if (!pControl) |
418 continue; | 418 continue; |
419 | 419 |
420 CPDF_Dictionary* pWidgetDict = pControl->m_pWidgetDict; | 420 CPDF_Dictionary* pWidgetDict = pControl->m_pWidgetDict; |
421 if (pWidgetDict->KeyExist("MaxLen")) | 421 if (pWidgetDict->KeyExist("MaxLen")) |
422 return pWidgetDict->GetIntegerBy("MaxLen"); | 422 return pWidgetDict->GetIntegerFor("MaxLen"); |
423 } | 423 } |
424 return 0; | 424 return 0; |
425 } | 425 } |
426 | 426 |
427 int CPDF_FormField::CountSelectedItems() const { | 427 int CPDF_FormField::CountSelectedItems() const { |
428 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); | 428 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); |
429 if (!pValue) { | 429 if (!pValue) { |
430 pValue = FPDF_GetFieldAttr(m_pDict, "I"); | 430 pValue = FPDF_GetFieldAttr(m_pDict, "I"); |
431 if (!pValue) | 431 if (!pValue) |
432 return 0; | 432 return 0; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
479 FX_BOOL CPDF_FormField::ClearSelection(FX_BOOL bNotify) { | 479 FX_BOOL CPDF_FormField::ClearSelection(FX_BOOL bNotify) { |
480 if (bNotify && m_pForm->m_pFormNotify) { | 480 if (bNotify && m_pForm->m_pFormNotify) { |
481 CFX_WideString csValue; | 481 CFX_WideString csValue; |
482 int iIndex = GetSelectedIndex(0); | 482 int iIndex = GetSelectedIndex(0); |
483 if (iIndex >= 0) | 483 if (iIndex >= 0) |
484 csValue = GetOptionLabel(iIndex); | 484 csValue = GetOptionLabel(iIndex); |
485 | 485 |
486 if (!NotifyListOrComboBoxBeforeChange(csValue)) | 486 if (!NotifyListOrComboBoxBeforeChange(csValue)) |
487 return FALSE; | 487 return FALSE; |
488 } | 488 } |
489 m_pDict->RemoveAt("V"); | 489 m_pDict->RemoveFor("V"); |
490 m_pDict->RemoveAt("I"); | 490 m_pDict->RemoveFor("I"); |
491 if (bNotify) | 491 if (bNotify) |
492 NotifyListOrComboBoxAfterChange(); | 492 NotifyListOrComboBoxAfterChange(); |
493 return TRUE; | 493 return TRUE; |
494 } | 494 } |
495 | 495 |
496 FX_BOOL CPDF_FormField::IsItemSelected(int index) const { | 496 FX_BOOL CPDF_FormField::IsItemSelected(int index) const { |
497 ASSERT(GetType() == ComboBox || GetType() == ListBox); | 497 ASSERT(GetType() == ComboBox || GetType() == ListBox); |
498 if (index < 0 || index >= CountOptions()) | 498 if (index < 0 || index >= CountOptions()) |
499 return FALSE; | 499 return FALSE; |
500 if (IsOptionSelected(index)) | 500 if (IsOptionSelected(index)) |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
544 return FALSE; | 544 return FALSE; |
545 | 545 |
546 CFX_WideString opt_value = GetOptionValue(index); | 546 CFX_WideString opt_value = GetOptionValue(index); |
547 if (bNotify && !NotifyListOrComboBoxBeforeChange(opt_value)) | 547 if (bNotify && !NotifyListOrComboBoxBeforeChange(opt_value)) |
548 return FALSE; | 548 return FALSE; |
549 | 549 |
550 if (bSelected) { | 550 if (bSelected) { |
551 if (GetType() == ListBox) { | 551 if (GetType() == ListBox) { |
552 SelectOption(index, TRUE); | 552 SelectOption(index, TRUE); |
553 if (!(m_Flags & kFormListMultiSelect)) { | 553 if (!(m_Flags & kFormListMultiSelect)) { |
554 m_pDict->SetAtString("V", PDF_EncodeText(opt_value)); | 554 m_pDict->SetStringFor("V", PDF_EncodeText(opt_value)); |
555 } else { | 555 } else { |
556 CPDF_Array* pArray = new CPDF_Array; | 556 CPDF_Array* pArray = new CPDF_Array; |
557 for (int i = 0; i < CountOptions(); i++) { | 557 for (int i = 0; i < CountOptions(); i++) { |
558 if (i == index || IsItemSelected(i)) { | 558 if (i == index || IsItemSelected(i)) { |
559 opt_value = GetOptionValue(i); | 559 opt_value = GetOptionValue(i); |
560 pArray->AddString(PDF_EncodeText(opt_value)); | 560 pArray->AddString(PDF_EncodeText(opt_value)); |
561 } | 561 } |
562 } | 562 } |
563 m_pDict->SetAt("V", pArray); | 563 m_pDict->SetFor("V", pArray); |
564 } | 564 } |
565 } else { | 565 } else { |
566 m_pDict->SetAtString("V", PDF_EncodeText(opt_value)); | 566 m_pDict->SetStringFor("V", PDF_EncodeText(opt_value)); |
567 CPDF_Array* pI = new CPDF_Array; | 567 CPDF_Array* pI = new CPDF_Array; |
568 pI->AddInteger(index); | 568 pI->AddInteger(index); |
569 m_pDict->SetAt("I", pI); | 569 m_pDict->SetFor("I", pI); |
570 } | 570 } |
571 } else { | 571 } else { |
572 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); | 572 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); |
573 if (pValue) { | 573 if (pValue) { |
574 if (GetType() == ListBox) { | 574 if (GetType() == ListBox) { |
575 SelectOption(index, FALSE); | 575 SelectOption(index, FALSE); |
576 if (pValue->IsString()) { | 576 if (pValue->IsString()) { |
577 if (pValue->GetUnicodeText() == opt_value) | 577 if (pValue->GetUnicodeText() == opt_value) |
578 m_pDict->RemoveAt("V"); | 578 m_pDict->RemoveFor("V"); |
579 } else if (pValue->IsArray()) { | 579 } else if (pValue->IsArray()) { |
580 CPDF_Array* pArray = new CPDF_Array; | 580 CPDF_Array* pArray = new CPDF_Array; |
581 for (int i = 0; i < CountOptions(); i++) { | 581 for (int i = 0; i < CountOptions(); i++) { |
582 if (i != index && IsItemSelected(i)) { | 582 if (i != index && IsItemSelected(i)) { |
583 opt_value = GetOptionValue(i); | 583 opt_value = GetOptionValue(i); |
584 pArray->AddString(PDF_EncodeText(opt_value)); | 584 pArray->AddString(PDF_EncodeText(opt_value)); |
585 } | 585 } |
586 } | 586 } |
587 if (pArray->GetCount() < 1) | 587 if (pArray->GetCount() < 1) |
588 pArray->Release(); | 588 pArray->Release(); |
589 else | 589 else |
590 m_pDict->SetAt("V", pArray); | 590 m_pDict->SetFor("V", pArray); |
591 } | 591 } |
592 } else { | 592 } else { |
593 m_pDict->RemoveAt("V"); | 593 m_pDict->RemoveFor("V"); |
594 m_pDict->RemoveAt("I"); | 594 m_pDict->RemoveFor("I"); |
595 } | 595 } |
596 } | 596 } |
597 } | 597 } |
598 if (bNotify) | 598 if (bNotify) |
599 NotifyListOrComboBoxAfterChange(); | 599 NotifyListOrComboBoxAfterChange(); |
600 return TRUE; | 600 return TRUE; |
601 } | 601 } |
602 | 602 |
603 FX_BOOL CPDF_FormField::IsItemDefaultSelected(int index) const { | 603 FX_BOOL CPDF_FormField::IsItemDefaultSelected(int index) const { |
604 ASSERT(GetType() == ComboBox || GetType() == ListBox); | 604 ASSERT(GetType() == ComboBox || GetType() == ListBox); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
676 | 676 |
677 if (bNotify && !NotifyListOrComboBoxBeforeChange(csOptLabel)) | 677 if (bNotify && !NotifyListOrComboBoxBeforeChange(csOptLabel)) |
678 return -1; | 678 return -1; |
679 | 679 |
680 CFX_ByteString csStr = | 680 CFX_ByteString csStr = |
681 PDF_EncodeText(csOptLabel.c_str(), csOptLabel.GetLength()); | 681 PDF_EncodeText(csOptLabel.c_str(), csOptLabel.GetLength()); |
682 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt"); | 682 CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt"); |
683 CPDF_Array* pOpt = ToArray(pValue); | 683 CPDF_Array* pOpt = ToArray(pValue); |
684 if (!pOpt) { | 684 if (!pOpt) { |
685 pOpt = new CPDF_Array; | 685 pOpt = new CPDF_Array; |
686 m_pDict->SetAt("Opt", pOpt); | 686 m_pDict->SetFor("Opt", pOpt); |
687 } | 687 } |
688 | 688 |
689 int iCount = pdfium::base::checked_cast<int, size_t>(pOpt->GetCount()); | 689 int iCount = pdfium::base::checked_cast<int, size_t>(pOpt->GetCount()); |
690 if (index >= iCount) { | 690 if (index >= iCount) { |
691 pOpt->AddString(csStr); | 691 pOpt->AddString(csStr); |
692 index = iCount; | 692 index = iCount; |
693 } else { | 693 } else { |
694 CPDF_String* pString = new CPDF_String(csStr, FALSE); | 694 CPDF_String* pString = new CPDF_String(csStr, FALSE); |
695 pOpt->InsertAt(index, pString); | 695 pOpt->InsertAt(index, pString); |
696 } | 696 } |
697 | 697 |
698 if (bNotify) | 698 if (bNotify) |
699 NotifyListOrComboBoxAfterChange(); | 699 NotifyListOrComboBoxAfterChange(); |
700 return index; | 700 return index; |
701 } | 701 } |
702 | 702 |
703 FX_BOOL CPDF_FormField::ClearOptions(FX_BOOL bNotify) { | 703 FX_BOOL CPDF_FormField::ClearOptions(FX_BOOL bNotify) { |
704 if (bNotify && m_pForm->m_pFormNotify) { | 704 if (bNotify && m_pForm->m_pFormNotify) { |
705 CFX_WideString csValue; | 705 CFX_WideString csValue; |
706 int iIndex = GetSelectedIndex(0); | 706 int iIndex = GetSelectedIndex(0); |
707 if (iIndex >= 0) | 707 if (iIndex >= 0) |
708 csValue = GetOptionLabel(iIndex); | 708 csValue = GetOptionLabel(iIndex); |
709 if (!NotifyListOrComboBoxBeforeChange(csValue)) | 709 if (!NotifyListOrComboBoxBeforeChange(csValue)) |
710 return FALSE; | 710 return FALSE; |
711 } | 711 } |
712 | 712 |
713 m_pDict->RemoveAt("Opt"); | 713 m_pDict->RemoveFor("Opt"); |
714 m_pDict->RemoveAt("V"); | 714 m_pDict->RemoveFor("V"); |
715 m_pDict->RemoveAt("DV"); | 715 m_pDict->RemoveFor("DV"); |
716 m_pDict->RemoveAt("I"); | 716 m_pDict->RemoveFor("I"); |
717 m_pDict->RemoveAt("TI"); | 717 m_pDict->RemoveFor("TI"); |
718 | 718 |
719 if (bNotify) | 719 if (bNotify) |
720 NotifyListOrComboBoxAfterChange(); | 720 NotifyListOrComboBoxAfterChange(); |
721 | 721 |
722 return TRUE; | 722 return TRUE; |
723 } | 723 } |
724 #endif // PDF_ENABLE_XFA | 724 #endif // PDF_ENABLE_XFA |
725 | 725 |
726 FX_BOOL CPDF_FormField::CheckControl(int iControlIndex, | 726 FX_BOOL CPDF_FormField::CheckControl(int iControlIndex, |
727 bool bChecked, | 727 bool bChecked, |
(...skipping 25 matching lines...) Expand all Loading... |
753 if (i == iControlIndex) | 753 if (i == iControlIndex) |
754 pCtrl->CheckControl(bChecked); | 754 pCtrl->CheckControl(bChecked); |
755 else if (bChecked) | 755 else if (bChecked) |
756 pCtrl->CheckControl(FALSE); | 756 pCtrl->CheckControl(FALSE); |
757 } | 757 } |
758 } | 758 } |
759 | 759 |
760 CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict, "Opt"); | 760 CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict, "Opt"); |
761 if (!ToArray(pOpt)) { | 761 if (!ToArray(pOpt)) { |
762 if (bChecked) { | 762 if (bChecked) { |
763 m_pDict->SetAtName("V", csBExport); | 763 m_pDict->SetNameFor("V", csBExport); |
764 } else { | 764 } else { |
765 CFX_ByteString csV; | 765 CFX_ByteString csV; |
766 CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); | 766 CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); |
767 if (pV) | 767 if (pV) |
768 csV = pV->GetString(); | 768 csV = pV->GetString(); |
769 if (csV == csBExport) | 769 if (csV == csBExport) |
770 m_pDict->SetAtName("V", "Off"); | 770 m_pDict->SetNameFor("V", "Off"); |
771 } | 771 } |
772 } else if (bChecked) { | 772 } else if (bChecked) { |
773 CFX_ByteString csIndex; | 773 CFX_ByteString csIndex; |
774 csIndex.Format("%d", iControlIndex); | 774 csIndex.Format("%d", iControlIndex); |
775 m_pDict->SetAtName("V", csIndex); | 775 m_pDict->SetNameFor("V", csIndex); |
776 } | 776 } |
777 if (bNotify && m_pForm->m_pFormNotify) | 777 if (bNotify && m_pForm->m_pFormNotify) |
778 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this); | 778 m_pForm->m_pFormNotify->AfterCheckedStatusChange(this); |
779 return TRUE; | 779 return TRUE; |
780 } | 780 } |
781 | 781 |
782 CFX_WideString CPDF_FormField::GetCheckValue(FX_BOOL bDefault) const { | 782 CFX_WideString CPDF_FormField::GetCheckValue(FX_BOOL bDefault) const { |
783 ASSERT(GetType() == CheckBox || GetType() == RadioButton); | 783 ASSERT(GetType() == CheckBox || GetType() == RadioButton); |
784 CFX_WideString csExport = L"Off"; | 784 CFX_WideString csExport = L"Off"; |
785 int iCount = CountControls(); | 785 int iCount = CountControls(); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
843 for (CPDF_Object* pObj : *pArray) { | 843 for (CPDF_Object* pObj : *pArray) { |
844 if (pObj->GetInteger() == iOptIndex) | 844 if (pObj->GetInteger() == iOptIndex) |
845 return TRUE; | 845 return TRUE; |
846 } | 846 } |
847 return FALSE; | 847 return FALSE; |
848 } | 848 } |
849 | 849 |
850 FX_BOOL CPDF_FormField::SelectOption(int iOptIndex, | 850 FX_BOOL CPDF_FormField::SelectOption(int iOptIndex, |
851 FX_BOOL bSelected, | 851 FX_BOOL bSelected, |
852 FX_BOOL bNotify) { | 852 FX_BOOL bNotify) { |
853 CPDF_Array* pArray = m_pDict->GetArrayBy("I"); | 853 CPDF_Array* pArray = m_pDict->GetArrayFor("I"); |
854 if (!pArray) { | 854 if (!pArray) { |
855 if (!bSelected) | 855 if (!bSelected) |
856 return TRUE; | 856 return TRUE; |
857 | 857 |
858 pArray = new CPDF_Array; | 858 pArray = new CPDF_Array; |
859 m_pDict->SetAt("I", pArray); | 859 m_pDict->SetFor("I", pArray); |
860 } | 860 } |
861 | 861 |
862 FX_BOOL bReturn = FALSE; | 862 FX_BOOL bReturn = FALSE; |
863 for (size_t i = 0; i < pArray->GetCount(); i++) { | 863 for (size_t i = 0; i < pArray->GetCount(); i++) { |
864 int iFind = pArray->GetIntegerAt(i); | 864 int iFind = pArray->GetIntegerAt(i); |
865 if (iFind == iOptIndex) { | 865 if (iFind == iOptIndex) { |
866 if (bSelected) | 866 if (bSelected) |
867 return TRUE; | 867 return TRUE; |
868 | 868 |
869 if (bNotify && m_pForm->m_pFormNotify) { | 869 if (bNotify && m_pForm->m_pFormNotify) { |
(...skipping 18 matching lines...) Expand all Loading... |
888 pArray->InsertAt(i, new CPDF_Number(iOptIndex)); | 888 pArray->InsertAt(i, new CPDF_Number(iOptIndex)); |
889 bReturn = TRUE; | 889 bReturn = TRUE; |
890 break; | 890 break; |
891 } | 891 } |
892 } | 892 } |
893 if (!bReturn) { | 893 if (!bReturn) { |
894 if (bSelected) | 894 if (bSelected) |
895 pArray->AddInteger(iOptIndex); | 895 pArray->AddInteger(iOptIndex); |
896 | 896 |
897 if (pArray->IsEmpty()) | 897 if (pArray->IsEmpty()) |
898 m_pDict->RemoveAt("I"); | 898 m_pDict->RemoveFor("I"); |
899 } | 899 } |
900 if (bNotify) | 900 if (bNotify) |
901 NotifyListOrComboBoxAfterChange(); | 901 NotifyListOrComboBoxAfterChange(); |
902 | 902 |
903 return TRUE; | 903 return TRUE; |
904 } | 904 } |
905 | 905 |
906 FX_BOOL CPDF_FormField::ClearSelectedOptions(FX_BOOL bNotify) { | 906 FX_BOOL CPDF_FormField::ClearSelectedOptions(FX_BOOL bNotify) { |
907 if (bNotify && m_pForm->m_pFormNotify) { | 907 if (bNotify && m_pForm->m_pFormNotify) { |
908 CFX_WideString csValue; | 908 CFX_WideString csValue; |
909 int iIndex = GetSelectedIndex(0); | 909 int iIndex = GetSelectedIndex(0); |
910 if (iIndex >= 0) | 910 if (iIndex >= 0) |
911 csValue = GetOptionLabel(iIndex); | 911 csValue = GetOptionLabel(iIndex); |
912 | 912 |
913 if (!NotifyListOrComboBoxBeforeChange(csValue)) | 913 if (!NotifyListOrComboBoxBeforeChange(csValue)) |
914 return FALSE; | 914 return FALSE; |
915 } | 915 } |
916 m_pDict->RemoveAt("I"); | 916 m_pDict->RemoveFor("I"); |
917 if (bNotify) | 917 if (bNotify) |
918 NotifyListOrComboBoxAfterChange(); | 918 NotifyListOrComboBoxAfterChange(); |
919 | 919 |
920 return TRUE; | 920 return TRUE; |
921 } | 921 } |
922 | 922 |
923 void CPDF_FormField::LoadDA() { | 923 void CPDF_FormField::LoadDA() { |
924 CPDF_Dictionary* pFormDict = m_pForm->m_pFormDict; | 924 CPDF_Dictionary* pFormDict = m_pForm->m_pFormDict; |
925 if (!pFormDict) | 925 if (!pFormDict) |
926 return; | 926 return; |
927 | 927 |
928 CFX_ByteString DA; | 928 CFX_ByteString DA; |
929 if (CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "DA")) | 929 if (CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "DA")) |
930 DA = pObj->GetString(); | 930 DA = pObj->GetString(); |
931 | 931 |
932 if (DA.IsEmpty()) | 932 if (DA.IsEmpty()) |
933 DA = pFormDict->GetStringBy("DA"); | 933 DA = pFormDict->GetStringFor("DA"); |
934 | 934 |
935 if (DA.IsEmpty()) | 935 if (DA.IsEmpty()) |
936 return; | 936 return; |
937 | 937 |
938 CPDF_Dictionary* pDR = pFormDict->GetDictBy("DR"); | 938 CPDF_Dictionary* pDR = pFormDict->GetDictFor("DR"); |
939 if (!pDR) | 939 if (!pDR) |
940 return; | 940 return; |
941 | 941 |
942 CPDF_Dictionary* pFont = pDR->GetDictBy("Font"); | 942 CPDF_Dictionary* pFont = pDR->GetDictFor("Font"); |
943 if (!pFont) | 943 if (!pFont) |
944 return; | 944 return; |
945 | 945 |
946 CPDF_SimpleParser syntax(DA.AsStringC()); | 946 CPDF_SimpleParser syntax(DA.AsStringC()); |
947 syntax.FindTagParamFromStart("Tf", 2); | 947 syntax.FindTagParamFromStart("Tf", 2); |
948 CFX_ByteString font_name(syntax.GetWord()); | 948 CFX_ByteString font_name(syntax.GetWord()); |
949 CPDF_Dictionary* pFontDict = pFont->GetDictBy(font_name); | 949 CPDF_Dictionary* pFontDict = pFont->GetDictFor(font_name); |
950 if (!pFontDict) | 950 if (!pFontDict) |
951 return; | 951 return; |
952 | 952 |
953 m_pFont = m_pForm->m_pDocument->LoadFont(pFontDict); | 953 m_pFont = m_pForm->m_pDocument->LoadFont(pFontDict); |
954 m_FontSize = FX_atof(syntax.GetWord()); | 954 m_FontSize = FX_atof(syntax.GetWord()); |
955 } | 955 } |
956 | 956 |
957 bool CPDF_FormField::NotifyBeforeSelectionChange(const CFX_WideString& value) { | 957 bool CPDF_FormField::NotifyBeforeSelectionChange(const CFX_WideString& value) { |
958 if (!m_pForm->m_pFormNotify) | 958 if (!m_pForm->m_pFormNotify) |
959 return true; | 959 return true; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
995 case ListBox: | 995 case ListBox: |
996 NotifyAfterSelectionChange(); | 996 NotifyAfterSelectionChange(); |
997 break; | 997 break; |
998 case ComboBox: | 998 case ComboBox: |
999 NotifyAfterValueChange(); | 999 NotifyAfterValueChange(); |
1000 break; | 1000 break; |
1001 default: | 1001 default: |
1002 break; | 1002 break; |
1003 } | 1003 } |
1004 } | 1004 } |
OLD | NEW |