diff options
-rw-r--r-- | fpdfsdk/fsdk_baseform.cpp | 18 | ||||
-rw-r--r-- | fpdfsdk/include/fsdk_baseform.h | 3 | ||||
-rw-r--r-- | fpdfsdk/javascript/Field.cpp | 58 | ||||
-rw-r--r-- | fpdfsdk/javascript/Field.h | 3 |
4 files changed, 49 insertions, 33 deletions
diff --git a/fpdfsdk/fsdk_baseform.cpp b/fpdfsdk/fsdk_baseform.cpp index 0b2c99735e..2eda2de85a 100644 --- a/fpdfsdk/fsdk_baseform.cpp +++ b/fpdfsdk/fsdk_baseform.cpp @@ -2061,7 +2061,8 @@ CPDFSDK_Widget* CPDFSDK_InterForm::GetSibling(CPDFSDK_Widget* pWidget, return (CPDFSDK_Widget*)pIterator->GetPrevAnnot(pWidget); } -CPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const { +CPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl, + bool createIfNeeded) const { if (!pControl || !m_pInterForm) return nullptr; @@ -2069,9 +2070,10 @@ CPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const { const auto it = m_Map.find(pControl); if (it != m_Map.end()) pWidget = it->second; - if (pWidget) return pWidget; + if (!createIfNeeded) + return nullptr; CPDF_Dictionary* pControlDict = pControl->GetWidget(); CPDF_Document* pDocument = m_pDocument->GetPDFDocument(); @@ -2093,6 +2095,7 @@ CPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const { if (!pPage) return nullptr; + return (CPDFSDK_Widget*)pPage->GetAnnotByDict(pControlDict); } @@ -2112,7 +2115,7 @@ void CPDFSDK_InterForm::GetWidgets( for (int i = 0, sz = pField->CountControls(); i < sz; ++i) { CPDF_FormControl* pFormCtrl = pField->GetControl(i); ASSERT(pFormCtrl); - CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl); + CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl, true); if (pWidget) widgets->push_back(pWidget); } @@ -2277,7 +2280,6 @@ CFX_WideString CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField, IJS_Context* pContext = pRuntime->NewContext(); pContext->OnField_Format(pFormField, Value, TRUE); - CFX_WideString sInfo; FX_BOOL bRet = pContext->RunScript(script, &sInfo); pRuntime->ReleaseContext(pContext); @@ -2299,7 +2301,7 @@ void CPDFSDK_InterForm::ResetFieldAppearance(CPDF_FormField* pFormField, for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); ASSERT(pFormCtrl); - if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) + if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl, false)) pWidget->ResetAppearance(sValue, bValueChanged); } } @@ -2309,7 +2311,7 @@ void CPDFSDK_InterForm::UpdateField(CPDF_FormField* pFormField) { CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); ASSERT(pFormCtrl); - if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) { + if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl, false)) { CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); CFFL_IFormFiller* pIFormFiller = pEnv->GetIFormFiller(); UnderlyingPageType* pPage = pWidget->GetUnderlyingPage(); @@ -2379,7 +2381,7 @@ FX_BOOL CPDFSDK_InterForm::DoAction_Hide(const CPDF_Action& action) { CPDF_FormControl* pControl = pField->GetControl(i); ASSERT(pControl); - if (CPDFSDK_Widget* pWidget = GetWidget(pControl)) { + if (CPDFSDK_Widget* pWidget = GetWidget(pControl, false)) { uint32_t nFlags = pWidget->GetFlags(); nFlags &= ~ANNOTFLAG_INVISIBLE; nFlags &= ~ANNOTFLAG_NOVIEW; @@ -2502,7 +2504,7 @@ void CPDFSDK_InterForm::SynchronizeField(CPDF_FormField* pFormField, FX_BOOL bSynchronizeElse) { for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); - if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) { + if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl, false)) { pWidget->Synchronize(bSynchronizeElse); } } diff --git a/fpdfsdk/include/fsdk_baseform.h b/fpdfsdk/include/fsdk_baseform.h index c5f45e75ae..8eee56c03e 100644 --- a/fpdfsdk/include/fsdk_baseform.h +++ b/fpdfsdk/include/fsdk_baseform.h @@ -263,7 +263,8 @@ class CPDFSDK_InterForm : public IPDF_FormNotify { FX_BOOL HighlightWidgets(); CPDFSDK_Widget* GetSibling(CPDFSDK_Widget* pWidget, FX_BOOL bNext) const; - CPDFSDK_Widget* GetWidget(CPDF_FormControl* pControl) const; + CPDFSDK_Widget* GetWidget(CPDF_FormControl* pControl, + bool createIfNeeded) const; void GetWidgets(const CFX_WideString& sFieldName, std::vector<CPDFSDK_Widget*>* widgets) const; void GetWidgets(CPDF_FormField* pField, diff --git a/fpdfsdk/javascript/Field.cpp b/fpdfsdk/javascript/Field.cpp index 852888179a..20c41c6a19 100644 --- a/fpdfsdk/javascript/Field.cpp +++ b/fpdfsdk/javascript/Field.cpp @@ -262,7 +262,7 @@ void Field::UpdateFormControl(CPDFSDK_Document* pDocument, ASSERT(pFormControl); CPDFSDK_InterForm* pForm = pDocument->GetInterForm(); - CPDFSDK_Widget* pWidget = pForm->GetWidget(pFormControl); + CPDFSDK_Widget* pWidget = pForm->GetWidget(pFormControl, false); if (pWidget) { if (bResetAP) { @@ -292,10 +292,12 @@ void Field::UpdateFormControl(CPDFSDK_Document* pDocument, } CPDFSDK_Widget* Field::GetWidget(CPDFSDK_Document* pDocument, - CPDF_FormControl* pFormControl) { + CPDF_FormControl* pFormControl, + bool createIfNeeded) { CPDFSDK_InterForm* pInterForm = static_cast<CPDFSDK_InterForm*>(pDocument->GetInterForm()); - return pInterForm ? pInterForm->GetWidget(pFormControl) : nullptr; + return pInterForm ? pInterForm->GetWidget(pFormControl, createIfNeeded) + : nullptr; } FX_BOOL Field::ValueIsOccur(CPDF_FormField* pFormField, @@ -403,7 +405,7 @@ FX_BOOL Field::borderStyle(IJS_Context* cc, return FALSE; CPDFSDK_Widget* pWidget = - GetWidget(m_pDocument, GetSmartFieldControl(pFormField)); + GetWidget(m_pDocument, GetSmartFieldControl(pFormField), false); if (!pWidget) return FALSE; @@ -459,7 +461,7 @@ void Field::SetBorderStyle(CPDFSDK_Document* pDocument, FX_BOOL bSet = FALSE; for (int i = 0, sz = pFormField->CountControls(); i < sz; ++i) { if (CPDFSDK_Widget* pWidget = - GetWidget(pDocument, pFormField->GetControl(i))) { + GetWidget(pDocument, pFormField->GetControl(i), false)) { if (pWidget->GetBorderStyle() != nBorderStyle) { pWidget->SetBorderStyle(nBorderStyle); bSet = TRUE; @@ -473,7 +475,8 @@ void Field::SetBorderStyle(CPDFSDK_Document* pDocument, return; if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex)) { - if (CPDFSDK_Widget* pWidget = GetWidget(pDocument, pFormControl)) { + if (CPDFSDK_Widget* pWidget = + GetWidget(pDocument, pFormControl, false)) { if (pWidget->GetBorderStyle() != nBorderStyle) { pWidget->SetBorderStyle(nBorderStyle); UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE); @@ -1208,7 +1211,7 @@ FX_BOOL Field::display(IJS_Context* cc, ASSERT(pFormField); CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm(); CPDFSDK_Widget* pWidget = - pInterForm->GetWidget(GetSmartFieldControl(pFormField)); + pInterForm->GetWidget(GetSmartFieldControl(pFormField), true); if (!pWidget) return FALSE; @@ -1246,7 +1249,8 @@ void Field::SetDisplay(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl = pFormField->GetControl(i); ASSERT(pFormControl); - if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) { + if (CPDFSDK_Widget* pWidget = + pInterForm->GetWidget(pFormControl, true)) { uint32_t dwFlag = pWidget->GetFlags(); switch (number) { case 0: @@ -1287,7 +1291,8 @@ void Field::SetDisplay(CPDFSDK_Document* pDocument, return; if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex)) { - if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) { + if (CPDFSDK_Widget* pWidget = + pInterForm->GetWidget(pFormControl, true)) { uint32_t dwFlag = pWidget->GetFlags(); switch (number) { case 0: @@ -1525,7 +1530,7 @@ FX_BOOL Field::hidden(IJS_Context* cc, ASSERT(pFormField); CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm(); CPDFSDK_Widget* pWidget = - pInterForm->GetWidget(GetSmartFieldControl(pFormField)); + pInterForm->GetWidget(GetSmartFieldControl(pFormField), false); if (!pWidget) return FALSE; @@ -1552,7 +1557,7 @@ void Field::SetHidden(CPDFSDK_Document* pDocument, FX_BOOL bSet = FALSE; for (int i = 0, sz = pFormField->CountControls(); i < sz; ++i) { if (CPDFSDK_Widget* pWidget = - pInterForm->GetWidget(pFormField->GetControl(i))) { + pInterForm->GetWidget(pFormField->GetControl(i), false)) { uint32_t dwFlags = pWidget->GetFlags(); if (b) { @@ -1580,7 +1585,8 @@ void Field::SetHidden(CPDFSDK_Document* pDocument, return; if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex)) { - if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) { + if (CPDFSDK_Widget* pWidget = + pInterForm->GetWidget(pFormControl, false)) { uint32_t dwFlags = pWidget->GetFlags(); if (b) { @@ -1696,7 +1702,8 @@ FX_BOOL Field::lineWidth(IJS_Context* cc, if (!pFormField->CountControls()) return FALSE; - CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormField->GetControl(0)); + CPDFSDK_Widget* pWidget = + pInterForm->GetWidget(pFormField->GetControl(0), false); if (!pWidget) return FALSE; @@ -1720,7 +1727,8 @@ void Field::SetLineWidth(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl = pFormField->GetControl(i); ASSERT(pFormControl); - if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) { + if (CPDFSDK_Widget* pWidget = + pInterForm->GetWidget(pFormControl, false)) { if (number != pWidget->GetBorderWidth()) { pWidget->SetBorderWidth(number); bSet = TRUE; @@ -1734,7 +1742,8 @@ void Field::SetLineWidth(CPDFSDK_Document* pDocument, return; if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex)) { - if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) { + if (CPDFSDK_Widget* pWidget = + pInterForm->GetWidget(pFormControl, false)) { if (number != pWidget->GetBorderWidth()) { pWidget->SetBorderWidth(number); UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE); @@ -1965,7 +1974,7 @@ FX_BOOL Field::print(IJS_Context* cc, FX_BOOL bSet = FALSE; for (int i = 0, sz = pFormField->CountControls(); i < sz; ++i) { if (CPDFSDK_Widget* pWidget = - pInterForm->GetWidget(pFormField->GetControl(i))) { + pInterForm->GetWidget(pFormField->GetControl(i), false)) { uint32_t dwFlags = pWidget->GetFlags(); if (bVP) dwFlags |= ANNOTFLAG_PRINT; @@ -1986,7 +1995,8 @@ FX_BOOL Field::print(IJS_Context* cc, return FALSE; if (CPDF_FormControl* pFormControl = pFormField->GetControl(m_nFormControlIndex)) { - if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) { + if (CPDFSDK_Widget* pWidget = + pInterForm->GetWidget(pFormControl, true)) { uint32_t dwFlags = pWidget->GetFlags(); if (bVP) dwFlags |= ANNOTFLAG_PRINT; @@ -2006,7 +2016,7 @@ FX_BOOL Field::print(IJS_Context* cc, } else { CPDF_FormField* pFormField = FieldArray[0]; CPDFSDK_Widget* pWidget = - pInterForm->GetWidget(GetSmartFieldControl(pFormField)); + pInterForm->GetWidget(GetSmartFieldControl(pFormField), true); if (!pWidget) return FALSE; @@ -2118,7 +2128,7 @@ FX_BOOL Field::rect(IJS_Context* cc, CPDF_FormField* pFormField = FieldArray[0]; CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm(); CPDFSDK_Widget* pWidget = - pInterForm->GetWidget(GetSmartFieldControl(pFormField)); + pInterForm->GetWidget(GetSmartFieldControl(pFormField), true); if (!pWidget) return FALSE; @@ -2152,7 +2162,8 @@ void Field::SetRect(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl = pFormField->GetControl(i); ASSERT(pFormControl); - if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) { + if (CPDFSDK_Widget* pWidget = + pInterForm->GetWidget(pFormControl, false)) { CFX_FloatRect crRect = rect; CPDF_Page* pPDFPage = pWidget->GetPDFPage(); @@ -2176,7 +2187,8 @@ void Field::SetRect(CPDFSDK_Document* pDocument, return; if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex)) { - if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) { + if (CPDFSDK_Widget* pWidget = + pInterForm->GetWidget(pFormControl, false)) { CFX_FloatRect crRect = rect; CPDF_Page* pPDFPage = pWidget->GetPDFPage(); @@ -3250,7 +3262,7 @@ FX_BOOL Field::setFocus(IJS_Context* cc, CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm(); CPDFSDK_Widget* pWidget = nullptr; if (nCount == 1) { - pWidget = pInterForm->GetWidget(pFormField->GetControl(0)); + pWidget = pInterForm->GetWidget(pFormField->GetControl(0), false); } else { CPDFDoc_Environment* pEnv = m_pDocument->GetEnv(); UnderlyingPageType* pPage = UnderlyingFromFPDFPage( @@ -3261,7 +3273,7 @@ FX_BOOL Field::setFocus(IJS_Context* cc, m_pDocument->GetPageView(pPage, true)) { for (int32_t i = 0; i < nCount; i++) { if (CPDFSDK_Widget* pTempWidget = - pInterForm->GetWidget(pFormField->GetControl(i))) { + pInterForm->GetWidget(pFormField->GetControl(i), false)) { if (pTempWidget->GetPDFPage() == pCurPageView->GetPDFPage()) { pWidget = pTempWidget; break; diff --git a/fpdfsdk/javascript/Field.h b/fpdfsdk/javascript/Field.h index 5697865b7c..3d1b0ff876 100644 --- a/fpdfsdk/javascript/Field.h +++ b/fpdfsdk/javascript/Field.h @@ -425,7 +425,8 @@ class Field : public CJS_EmbedObj { FX_BOOL bRefresh); static CPDFSDK_Widget* GetWidget(CPDFSDK_Document* pDocument, - CPDF_FormControl* pFormControl); + CPDF_FormControl* pFormControl, + bool createIfNeeded); static std::vector<CPDF_FormField*> GetFormFields( CPDFSDK_Document* pDocument, const CFX_WideString& csFieldName); |