| 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/include/fpdfdoc/fpdf_doc.h" | 7 #include "core/include/fpdfdoc/fpdf_doc.h" |
| 8 | 8 |
| 9 CPDF_FormControl::CPDF_FormControl(CPDF_FormField* pField, | 9 CPDF_FormControl::CPDF_FormControl(CPDF_FormField* pField, |
| 10 CPDF_Dictionary* pWidgetDict) { | 10 CPDF_Dictionary* pWidgetDict) { |
| 11 m_pField = pField; | 11 m_pField = pField; |
| 12 m_pWidgetDict = pWidgetDict; | 12 m_pWidgetDict = pWidgetDict; |
| 13 m_pForm = m_pField->m_pForm; | 13 m_pForm = m_pField->m_pForm; |
| 14 } | 14 } |
| 15 CFX_FloatRect CPDF_FormControl::GetRect() const { | 15 CFX_FloatRect CPDF_FormControl::GetRect() const { |
| 16 return m_pWidgetDict->GetRect("Rect"); | 16 return m_pWidgetDict->GetRect("Rect"); |
| 17 } | 17 } |
| 18 CFX_ByteString CPDF_FormControl::GetOnStateName() { | 18 CFX_ByteString CPDF_FormControl::GetOnStateName() { |
| 19 ASSERT(GetType() == CPDF_FormField::CheckBox || | 19 ASSERT(GetType() == CPDF_FormField::CheckBox || |
| 20 GetType() == CPDF_FormField::RadioButton); | 20 GetType() == CPDF_FormField::RadioButton); |
| 21 CFX_ByteString csOn; | 21 CFX_ByteString csOn; |
| 22 CPDF_Dictionary* pAP = m_pWidgetDict->GetDict("AP"); | 22 CPDF_Dictionary* pAP = m_pWidgetDict->GetDict("AP"); |
| 23 if (!pAP) { | 23 if (!pAP) { |
| 24 return csOn; | 24 return csOn; |
| 25 } | 25 } |
| 26 CPDF_Dictionary* pN = pAP->GetDict("N"); | 26 CPDF_Dictionary* pN = pAP->GetDict("N"); |
| 27 if (!pN) { | 27 if (!pN) { |
| 28 return csOn; | 28 return csOn; |
| 29 } | 29 } |
| 30 FX_POSITION pos = pN->GetStartPos(); | 30 for (const auto& it : *pN) { |
| 31 while (pos) { | 31 if (it.first != "Off") { |
| 32 pN->GetNextElement(pos, csOn); | 32 return it.first; |
| 33 if (csOn != "Off") { | |
| 34 return csOn; | |
| 35 } | 33 } |
| 36 } | 34 } |
| 37 return CFX_ByteString(); | 35 return CFX_ByteString(); |
| 38 } | 36 } |
| 39 void CPDF_FormControl::SetOnStateName(const CFX_ByteString& csOn) { | 37 void CPDF_FormControl::SetOnStateName(const CFX_ByteString& csOn) { |
| 40 ASSERT(GetType() == CPDF_FormField::CheckBox || | 38 ASSERT(GetType() == CPDF_FormField::CheckBox || |
| 41 GetType() == CPDF_FormField::RadioButton); | 39 GetType() == CPDF_FormField::RadioButton); |
| 42 CFX_ByteString csValue = csOn; | 40 CFX_ByteString csValue = csOn; |
| 43 if (csValue.IsEmpty()) { | 41 if (csValue.IsEmpty()) { |
| 44 csValue = "Yes"; | 42 csValue = "Yes"; |
| 45 } | 43 } |
| 46 if (csValue == "Off") { | 44 if (csValue == "Off") { |
| 47 csValue = "Yes"; | 45 csValue = "Yes"; |
| 48 } | 46 } |
| 49 CFX_ByteString csAS = m_pWidgetDict->GetString("AS", "Off"); | 47 CFX_ByteString csAS = m_pWidgetDict->GetString("AS", "Off"); |
| 50 if (csAS != "Off") { | 48 if (csAS != "Off") { |
| 51 m_pWidgetDict->SetAtName("AS", csValue); | 49 m_pWidgetDict->SetAtName("AS", csValue); |
| 52 } | 50 } |
| 53 CPDF_Dictionary* pAP = m_pWidgetDict->GetDict("AP"); | 51 CPDF_Dictionary* pAP = m_pWidgetDict->GetDict("AP"); |
| 54 if (!pAP) { | 52 if (!pAP) { |
| 55 return; | 53 return; |
| 56 } | 54 } |
| 57 FX_POSITION pos1 = pAP->GetStartPos(); | 55 for (const auto& it : *pAP) { |
| 58 while (pos1) { | 56 CPDF_Object* pObj1 = it.second; |
| 59 CFX_ByteString csKey1; | |
| 60 CPDF_Object* pObj1 = pAP->GetNextElement(pos1, csKey1); | |
| 61 if (!pObj1) { | 57 if (!pObj1) { |
| 62 continue; | 58 continue; |
| 63 } | 59 } |
| 64 CPDF_Object* pObjDirect1 = pObj1->GetDirect(); | 60 CPDF_Object* pObjDirect1 = pObj1->GetDirect(); |
| 65 CPDF_Dictionary* pSubDict = pObjDirect1->AsDictionary(); | 61 CPDF_Dictionary* pSubDict = pObjDirect1->AsDictionary(); |
| 66 if (!pSubDict) | 62 if (!pSubDict) |
| 67 continue; | 63 continue; |
| 68 | 64 |
| 69 FX_POSITION pos2 = pSubDict->GetStartPos(); | 65 for (const auto& subdict_it : *pSubDict) { |
| 70 while (pos2) { | 66 const CFX_ByteString& csKey2 = subdict_it.first; |
| 71 CFX_ByteString csKey2; | 67 CPDF_Object* pObj2 = subdict_it.second; |
| 72 CPDF_Object* pObj2 = pSubDict->GetNextElement(pos2, csKey2); | |
| 73 if (!pObj2) { | 68 if (!pObj2) { |
| 74 continue; | 69 continue; |
| 75 } | 70 } |
| 76 if (csKey2 != "Off") { | 71 if (csKey2 != "Off") { |
| 77 pSubDict->ReplaceKey(csKey2, csValue); | 72 pSubDict->ReplaceKey(csKey2, csValue); |
| 78 break; | 73 break; |
| 79 } | 74 } |
| 80 } | 75 } |
| 81 } | 76 } |
| 82 } | 77 } |
| (...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 417 return m_pDict ? m_pDict->GetStream(csEntry) : nullptr; | 412 return m_pDict ? m_pDict->GetStream(csEntry) : nullptr; |
| 418 } | 413 } |
| 419 | 414 |
| 420 CPDF_IconFit CPDF_ApSettings::GetIconFit() const { | 415 CPDF_IconFit CPDF_ApSettings::GetIconFit() const { |
| 421 return m_pDict ? m_pDict->GetDict("IF") : nullptr; | 416 return m_pDict ? m_pDict->GetDict("IF") : nullptr; |
| 422 } | 417 } |
| 423 | 418 |
| 424 int CPDF_ApSettings::GetTextPosition() const { | 419 int CPDF_ApSettings::GetTextPosition() const { |
| 425 return m_pDict ? m_pDict->GetInteger("TP", TEXTPOS_CAPTION) : TEXTPOS_CAPTION; | 420 return m_pDict ? m_pDict->GetInteger("TP", TEXTPOS_CAPTION) : TEXTPOS_CAPTION; |
| 426 } | 421 } |
| OLD | NEW |