Index: core/fpdfdoc/cpdf_formfield.cpp |
diff --git a/core/fpdfdoc/cpdf_formfield.cpp b/core/fpdfdoc/cpdf_formfield.cpp |
index 3a2213f1aee4786647660cdcedbf3fa0cb27e81e..cc7054dfaf7365ea0bf8442dbf146c89cf980e51 100644 |
--- a/core/fpdfdoc/cpdf_formfield.cpp |
+++ b/core/fpdfdoc/cpdf_formfield.cpp |
@@ -6,11 +6,14 @@ |
#include "core/fpdfdoc/cpdf_formfield.h" |
+#include <memory> |
#include <set> |
+#include <utility> |
#include "core/fpdfapi/parser/cfdf_document.h" |
#include "core/fpdfapi/parser/cpdf_array.h" |
#include "core/fpdfapi/parser/cpdf_document.h" |
+#include "core/fpdfapi/parser/cpdf_name.h" |
#include "core/fpdfapi/parser/cpdf_number.h" |
#include "core/fpdfapi/parser/cpdf_simple_parser.h" |
#include "core/fpdfapi/parser/cpdf_string.h" |
@@ -223,11 +226,9 @@ bool CPDF_FormField::ResetField(bool bNotify) { |
if (!pClone) |
return false; |
- m_pDict->SetFor("V", pClone.release()); |
- if (pRV) { |
- std::unique_ptr<CPDF_Object> pCloneR = pDV->Clone(); |
- m_pDict->SetFor("RV", pCloneR.release()); |
- } |
+ m_pDict->SetFor("V", std::move(pClone)); |
+ if (pRV) |
+ m_pDict->SetFor("RV", pDV->Clone()); |
} else { |
m_pDict->RemoveFor("V"); |
m_pDict->RemoveFor("RV"); |
@@ -361,15 +362,16 @@ bool CPDF_FormField::SetValue(const CFX_WideString& value, |
if (bNotify && !NotifyBeforeValueChange(csValue)) |
return false; |
+ CFX_ByteString key(bDefault ? "DV" : "V"); |
int iIndex = FindOptionValue(csValue); |
if (iIndex < 0) { |
CFX_ByteString bsEncodeText = PDF_EncodeText(csValue); |
- m_pDict->SetStringFor(bDefault ? "DV" : "V", bsEncodeText); |
+ m_pDict->SetNewFor<CPDF_String>(key, bsEncodeText, false); |
if (m_Type == RichText && !bDefault) |
- m_pDict->SetStringFor("RV", bsEncodeText); |
+ m_pDict->SetNewFor<CPDF_String>("RV", bsEncodeText, false); |
m_pDict->RemoveFor("I"); |
} else { |
- m_pDict->SetStringFor(bDefault ? "DV" : "V", PDF_EncodeText(csValue)); |
+ m_pDict->SetNewFor<CPDF_String>(key, PDF_EncodeText(csValue), false); |
if (!bDefault) { |
ClearSelection(); |
SetItemSelection(iIndex, true); |
@@ -549,22 +551,20 @@ bool CPDF_FormField::SetItemSelection(int index, bool bSelected, bool bNotify) { |
if (GetType() == ListBox) { |
SelectOption(index, true); |
if (!(m_Flags & kFormListMultiSelect)) { |
- m_pDict->SetStringFor("V", PDF_EncodeText(opt_value)); |
+ m_pDict->SetNewFor<CPDF_String>("V", PDF_EncodeText(opt_value), false); |
} else { |
- CPDF_Array* pArray = new CPDF_Array; |
+ CPDF_Array* pArray = m_pDict->SetNewFor<CPDF_Array>("V"); |
for (int i = 0; i < CountOptions(); i++) { |
if (i == index || IsItemSelected(i)) { |
opt_value = GetOptionValue(i); |
pArray->AddNew<CPDF_String>(PDF_EncodeText(opt_value), false); |
} |
} |
- m_pDict->SetFor("V", pArray); |
} |
} else { |
- m_pDict->SetStringFor("V", PDF_EncodeText(opt_value)); |
- CPDF_Array* pI = new CPDF_Array; |
+ m_pDict->SetNewFor<CPDF_String>("V", PDF_EncodeText(opt_value), false); |
+ CPDF_Array* pI = m_pDict->SetNewFor<CPDF_Array>("I"); |
pI->AddNew<CPDF_Number>(index); |
- m_pDict->SetFor("I", pI); |
} |
} else { |
CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); |
@@ -583,7 +583,7 @@ bool CPDF_FormField::SetItemSelection(int index, bool bSelected, bool bNotify) { |
} |
} |
if (pArray->GetCount() > 0) |
- m_pDict->SetFor("V", pArray.release()); // std::move someday |
+ m_pDict->SetFor("V", std::move(pArray)); |
} |
} else { |
m_pDict->RemoveFor("V"); |
@@ -675,12 +675,9 @@ int CPDF_FormField::InsertOption(CFX_WideString csOptLabel, |
CFX_ByteString csStr = |
PDF_EncodeText(csOptLabel.c_str(), csOptLabel.GetLength()); |
- CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt"); |
- CPDF_Array* pOpt = ToArray(pValue); |
- if (!pOpt) { |
- pOpt = new CPDF_Array; |
- m_pDict->SetFor("Opt", pOpt); |
- } |
+ CPDF_Array* pOpt = ToArray(FPDF_GetFieldAttr(m_pDict, "Opt")); |
+ if (!pOpt) |
+ pOpt = m_pDict->SetNewFor<CPDF_Array>("Opt"); |
int iCount = pdfium::base::checked_cast<int>(pOpt->GetCount()); |
if (index >= iCount) { |
@@ -755,19 +752,19 @@ bool CPDF_FormField::CheckControl(int iControlIndex, |
CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict, "Opt"); |
if (!ToArray(pOpt)) { |
if (bChecked) { |
- m_pDict->SetNameFor("V", csBExport); |
+ m_pDict->SetNewFor<CPDF_Name>("V", csBExport); |
} else { |
CFX_ByteString csV; |
CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); |
if (pV) |
csV = pV->GetString(); |
if (csV == csBExport) |
- m_pDict->SetNameFor("V", "Off"); |
+ m_pDict->SetNewFor<CPDF_Name>("V", "Off"); |
} |
} else if (bChecked) { |
CFX_ByteString csIndex; |
csIndex.Format("%d", iControlIndex); |
- m_pDict->SetNameFor("V", csIndex); |
+ m_pDict->SetNewFor<CPDF_Name>("V", csIndex); |
} |
if (bNotify && m_pForm->m_pFormNotify) |
m_pForm->m_pFormNotify->AfterCheckedStatusChange(this); |
@@ -848,8 +845,7 @@ bool CPDF_FormField::SelectOption(int iOptIndex, bool bSelected, bool bNotify) { |
if (!bSelected) |
return true; |
- pArray = new CPDF_Array; |
- m_pDict->SetFor("I", pArray); |
+ pArray = m_pDict->SetNewFor<CPDF_Array>("I"); |
} |
bool bReturn = false; |