Index: fpdfsdk/src/fsdk_baseform.cpp |
diff --git a/fpdfsdk/src/fsdk_baseform.cpp b/fpdfsdk/src/fsdk_baseform.cpp |
index 5c4269e354c1c8d2063cf5357f65c896faabe409..06ed0f4c22df4a0a3d9c664d90d6c6e7f5f02d10 100644 |
--- a/fpdfsdk/src/fsdk_baseform.cpp |
+++ b/fpdfsdk/src/fsdk_baseform.cpp |
@@ -15,10 +15,6 @@ |
#include "../include/javascript/IJavaScript.h" |
#include "third_party/base/nonstd_unique_ptr.h" |
-//------------------------------------------------------------------------------------ |
-//* CPDFSDK_Widget |
-//------------------------------------------------------------------------------------ |
- |
#define IsFloatZero(f) ((f) < 0.01 && (f) > -0.01) |
#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) |
#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) |
@@ -1499,9 +1495,9 @@ void CPDFSDK_Widget::ResetAppearance_ComboBox(const FX_WCHAR* sValue) { |
pEdit->Initialize(); |
- if (sValue) |
+ if (sValue) { |
pEdit->SetText(sValue); |
- else { |
+ } else { |
int32_t nCurSel = pField->GetSelectedIndex(0); |
if (nCurSel < 0) |
@@ -2211,30 +2207,25 @@ CPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const { |
return (CPDFSDK_Widget*)pPage->GetAnnotByDict(pControlDict); |
} |
-void CPDFSDK_InterForm::GetWidgets(const CFX_WideString& sFieldName, |
- CFX_PtrArray& widgets) { |
- ASSERT(m_pInterForm != NULL); |
- |
- for (int i = 0, sz = m_pInterForm->CountFields(sFieldName); i < sz; i++) { |
+void CPDFSDK_InterForm::GetWidgets( |
+ const CFX_WideString& sFieldName, |
+ std::vector<CPDFSDK_Widget*>* widgets) const { |
+ for (int i = 0, sz = m_pInterForm->CountFields(sFieldName); i < sz; ++i) { |
CPDF_FormField* pFormField = m_pInterForm->GetField(i, sFieldName); |
- ASSERT(pFormField != NULL); |
- |
+ ASSERT(pFormField); |
GetWidgets(pFormField, widgets); |
} |
} |
-void CPDFSDK_InterForm::GetWidgets(CPDF_FormField* pField, |
- CFX_PtrArray& widgets) { |
- ASSERT(pField != NULL); |
- |
- for (int i = 0, isz = pField->CountControls(); i < isz; i++) { |
+void CPDFSDK_InterForm::GetWidgets( |
+ CPDF_FormField* pField, |
+ std::vector<CPDFSDK_Widget*>* widgets) const { |
+ for (int i = 0, sz = pField->CountControls(); i < sz; ++i) { |
CPDF_FormControl* pFormCtrl = pField->GetControl(i); |
- ASSERT(pFormCtrl != NULL); |
- |
+ ASSERT(pFormCtrl); |
CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl); |
- |
if (pWidget) |
- widgets.Add(pWidget); |
+ widgets->push_back(pWidget); |
} |
} |
@@ -2584,42 +2575,27 @@ FX_BOOL CPDFSDK_InterForm::DoAction_Hide(const CPDF_Action& action) { |
ASSERT(action); |
CPDF_ActionFields af = action.GetWidgets(); |
- CFX_PtrArray fieldObjects; |
- af.GetAllFields(fieldObjects); |
- CFX_PtrArray widgetArray; |
- CFX_PtrArray fields; |
- GetFieldFromObjects(fieldObjects, fields); |
+ std::vector<CPDF_Object*> fieldObjects = af.GetAllFields(); |
+ std::vector<CPDF_FormField*> fields = GetFieldFromObjects(fieldObjects); |
FX_BOOL bHide = action.GetHideStatus(); |
- |
FX_BOOL bChanged = FALSE; |
- for (int i = 0, sz = fields.GetSize(); i < sz; i++) { |
- CPDF_FormField* pField = (CPDF_FormField*)fields[i]; |
- ASSERT(pField != NULL); |
- |
- for (int j = 0, jsz = pField->CountControls(); j < jsz; j++) { |
- CPDF_FormControl* pControl = pField->GetControl(j); |
- ASSERT(pControl != NULL); |
+ for (CPDF_FormField* pField : fields) { |
+ for (int i = 0, sz = pField->CountControls(); i < sz; ++i) { |
+ CPDF_FormControl* pControl = pField->GetControl(i); |
+ ASSERT(pControl); |
if (CPDFSDK_Widget* pWidget = GetWidget(pControl)) { |
int nFlags = pWidget->GetFlags(); |
- if (bHide) { |
- nFlags &= (~ANNOTFLAG_INVISIBLE); |
- nFlags &= (~ANNOTFLAG_NOVIEW); |
- nFlags |= (ANNOTFLAG_HIDDEN); |
- } else { |
- nFlags &= (~ANNOTFLAG_INVISIBLE); |
- nFlags &= (~ANNOTFLAG_HIDDEN); |
- nFlags &= (~ANNOTFLAG_NOVIEW); |
- } |
+ nFlags &= ~ANNOTFLAG_INVISIBLE; |
+ nFlags &= ~ANNOTFLAG_NOVIEW; |
+ if (bHide) |
+ nFlags |= ANNOTFLAG_HIDDEN; |
+ else |
+ nFlags &= ~ANNOTFLAG_HIDDEN; |
pWidget->SetFlags(nFlags); |
- |
- CPDFSDK_PageView* pPageView = pWidget->GetPageView(); |
- ASSERT(pPageView != NULL); |
- |
- pPageView->UpdateView(pWidget); |
- |
+ pWidget->GetPageView()->UpdateView(pWidget); |
bChanged = TRUE; |
} |
} |
@@ -2638,31 +2614,28 @@ FX_BOOL CPDFSDK_InterForm::DoAction_SubmitForm(const CPDF_Action& action) { |
if (pActionDict->KeyExist("Fields")) { |
CPDF_ActionFields af = action.GetWidgets(); |
FX_DWORD dwFlags = action.GetFlags(); |
- CFX_PtrArray fieldObjects; |
- af.GetAllFields(fieldObjects); |
- |
- CFX_PtrArray fields; |
- GetFieldFromObjects(fieldObjects, fields); |
- if (fields.GetSize() != 0) { |
- FX_BOOL bIncludeOrExclude = !(dwFlags & 0x01); |
+ std::vector<CPDF_Object*> fieldObjects = af.GetAllFields(); |
+ std::vector<CPDF_FormField*> fields = GetFieldFromObjects(fieldObjects); |
+ if (!fields.empty()) { |
+ bool bIncludeOrExclude = !(dwFlags & 0x01); |
if (m_pInterForm->CheckRequiredFields(&fields, bIncludeOrExclude)) |
return FALSE; |
return SubmitFields(sDestination, fields, bIncludeOrExclude, FALSE); |
} |
} |
- if (m_pInterForm->CheckRequiredFields()) |
+ if (m_pInterForm->CheckRequiredFields(nullptr, true)) |
return FALSE; |
return SubmitForm(sDestination, FALSE); |
} |
-FX_BOOL CPDFSDK_InterForm::SubmitFields(const CFX_WideString& csDestination, |
- const CFX_PtrArray& fields, |
- FX_BOOL bIncludeOrExclude, |
- FX_BOOL bUrlEncoded) { |
+FX_BOOL CPDFSDK_InterForm::SubmitFields( |
+ const CFX_WideString& csDestination, |
+ const std::vector<CPDF_FormField*>& fields, |
+ FX_BOOL bIncludeOrExclude, |
+ FX_BOOL bUrlEncoded) { |
CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); |
- ASSERT(pEnv != NULL); |
CFX_ByteTextBuf textBuf; |
ExportFieldsToFDFTextBuf(fields, bIncludeOrExclude, textBuf); |
@@ -2670,13 +2643,10 @@ FX_BOOL CPDFSDK_InterForm::SubmitFields(const CFX_WideString& csDestination, |
uint8_t* pBuffer = textBuf.GetBuffer(); |
FX_STRSIZE nBufSize = textBuf.GetLength(); |
- if (bUrlEncoded) { |
- if (!FDFToURLEncodedData(pBuffer, nBufSize)) |
- return FALSE; |
- } |
+ if (bUrlEncoded && !FDFToURLEncodedData(pBuffer, nBufSize)) |
+ return FALSE; |
pEnv->JS_docSubmitForm(pBuffer, nBufSize, csDestination.c_str()); |
- |
return TRUE; |
} |
@@ -2728,20 +2698,13 @@ FX_BOOL CPDFSDK_InterForm::FDFToURLEncodedData(uint8_t*& pBuf, |
return TRUE; |
} |
-FX_BOOL CPDFSDK_InterForm::ExportFieldsToFDFTextBuf(const CFX_PtrArray& fields, |
- FX_BOOL bIncludeOrExclude, |
- CFX_ByteTextBuf& textBuf) { |
- ASSERT(m_pDocument != NULL); |
- ASSERT(m_pInterForm != NULL); |
- |
- CFDF_Document* pFDF = m_pInterForm->ExportToFDF( |
- m_pDocument->GetPath(), (CFX_PtrArray&)fields, bIncludeOrExclude); |
- if (!pFDF) |
- return FALSE; |
- FX_BOOL bRet = pFDF->WriteBuf(textBuf); |
- delete pFDF; |
- |
- return bRet; |
+FX_BOOL CPDFSDK_InterForm::ExportFieldsToFDFTextBuf( |
+ const std::vector<CPDF_FormField*>& fields, |
+ FX_BOOL bIncludeOrExclude, |
+ CFX_ByteTextBuf& textBuf) { |
+ nonstd::unique_ptr<CFDF_Document> pFDF(m_pInterForm->ExportToFDF( |
+ m_pDocument->GetPath(), fields, bIncludeOrExclude)); |
+ return pFDF ? pFDF->WriteBuf(textBuf) : FALSE; |
} |
void CPDFSDK_InterForm::SynchronizeField(CPDF_FormField* pFormField, |
@@ -2829,44 +2792,33 @@ FX_BOOL CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action) { |
ASSERT(action); |
CPDF_Dictionary* pActionDict = action.GetDict(); |
- if (pActionDict->KeyExist("Fields")) { |
- CPDF_ActionFields af = action.GetWidgets(); |
- FX_DWORD dwFlags = action.GetFlags(); |
+ if (!pActionDict->KeyExist("Fields")) |
+ return m_pInterForm->ResetForm(true); |
- CFX_PtrArray fieldObjects; |
- af.GetAllFields(fieldObjects); |
- CFX_PtrArray fields; |
- GetFieldFromObjects(fieldObjects, fields); |
- return m_pInterForm->ResetForm(fields, !(dwFlags & 0x01), TRUE); |
- } |
+ CPDF_ActionFields af = action.GetWidgets(); |
+ FX_DWORD dwFlags = action.GetFlags(); |
- return m_pInterForm->ResetForm(TRUE); |
+ std::vector<CPDF_Object*> fieldObjects = af.GetAllFields(); |
+ std::vector<CPDF_FormField*> fields = GetFieldFromObjects(fieldObjects); |
+ return m_pInterForm->ResetForm(fields, !(dwFlags & 0x01), true); |
} |
FX_BOOL CPDFSDK_InterForm::DoAction_ImportData(const CPDF_Action& action) { |
return FALSE; |
} |
-void CPDFSDK_InterForm::GetFieldFromObjects(const CFX_PtrArray& objects, |
- CFX_PtrArray& fields) { |
- ASSERT(m_pInterForm != NULL); |
- |
- int iCount = objects.GetSize(); |
- for (int i = 0; i < iCount; i++) { |
- CPDF_Object* pObject = static_cast<CPDF_Object*>(objects[i]); |
- if (!pObject) |
- continue; |
- |
- if (pObject->IsString()) { |
+std::vector<CPDF_FormField*> CPDFSDK_InterForm::GetFieldFromObjects( |
+ const std::vector<CPDF_Object*>& objects) const { |
+ std::vector<CPDF_FormField*> fields; |
+ for (CPDF_Object* pObject : objects) { |
+ if (pObject && pObject->IsString()) { |
CFX_WideString csName = pObject->GetUnicodeText(); |
CPDF_FormField* pField = m_pInterForm->GetField(0, csName); |
if (pField) |
- fields.Add(pField); |
- } else if (pObject->IsDictionary()) { |
- if (m_pInterForm->IsValidFormField(pObject)) |
- fields.Add(pObject); |
+ fields.push_back(pField); |
} |
} |
+ return fields; |
} |
/* ----------------------------- CPDF_FormNotify ----------------------------- |