From c345065e7aff3368198624f303e711a244e2f7ec Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Thu, 11 Oct 2018 16:54:42 +0000 Subject: Rename interform files to interactiveform. Just rename the files in this CL. Change-Id: I39f7fefa885977fffab6c909762b05484a1c923d Reviewed-on: https://pdfium-review.googlesource.com/c/43814 Reviewed-by: Tom Sepez Commit-Queue: Lei Zhang --- fpdfsdk/cpdfsdk_actionhandler.cpp | 4 +- fpdfsdk/cpdfsdk_baannothandler.cpp | 2 +- fpdfsdk/cpdfsdk_formfillenvironment.cpp | 2 +- fpdfsdk/cpdfsdk_helpers.cpp | 2 +- fpdfsdk/cpdfsdk_interactiveform.cpp | 672 ++++++++++++++++++++++ fpdfsdk/cpdfsdk_interactiveform.h | 132 +++++ fpdfsdk/cpdfsdk_interform.cpp | 672 ---------------------- fpdfsdk/cpdfsdk_interform.h | 132 ----- fpdfsdk/cpdfsdk_pageview.cpp | 4 +- fpdfsdk/cpdfsdk_widget.cpp | 4 +- fpdfsdk/cpdfsdk_widgethandler.cpp | 4 +- fpdfsdk/cpdfsdk_xfawidgethandler.cpp | 4 +- fpdfsdk/formfiller/cffl_interactiveformfiller.cpp | 2 +- fpdfsdk/fpdf_annot.cpp | 2 +- fpdfsdk/fpdf_ext.cpp | 2 +- fpdfsdk/fpdf_formfill.cpp | 4 +- fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp | 2 +- fpdfsdk/pwl/cpwl_appstream.cpp | 2 +- 18 files changed, 824 insertions(+), 824 deletions(-) create mode 100644 fpdfsdk/cpdfsdk_interactiveform.cpp create mode 100644 fpdfsdk/cpdfsdk_interactiveform.h delete mode 100644 fpdfsdk/cpdfsdk_interform.cpp delete mode 100644 fpdfsdk/cpdfsdk_interform.h (limited to 'fpdfsdk') diff --git a/fpdfsdk/cpdfsdk_actionhandler.cpp b/fpdfsdk/cpdfsdk_actionhandler.cpp index f98585f2a1..8093972e18 100644 --- a/fpdfsdk/cpdfsdk_actionhandler.cpp +++ b/fpdfsdk/cpdfsdk_actionhandler.cpp @@ -11,10 +11,10 @@ #include "core/fpdfapi/parser/cpdf_array.h" #include "core/fpdfdoc/cpdf_formfield.h" -#include "core/fpdfdoc/cpdf_interform.h" +#include "core/fpdfdoc/cpdf_interactiveform.h" #include "fpdfsdk/cpdfsdk_formfillenvironment.h" #include "fpdfsdk/cpdfsdk_helpers.h" -#include "fpdfsdk/cpdfsdk_interform.h" +#include "fpdfsdk/cpdfsdk_interactiveform.h" #include "fxjs/ijs_event_context.h" #include "fxjs/ijs_runtime.h" #include "third_party/base/logging.h" diff --git a/fpdfsdk/cpdfsdk_baannothandler.cpp b/fpdfsdk/cpdfsdk_baannothandler.cpp index 93d3e46fdf..168c806e07 100644 --- a/fpdfsdk/cpdfsdk_baannothandler.cpp +++ b/fpdfsdk/cpdfsdk_baannothandler.cpp @@ -11,7 +11,7 @@ #include "core/fpdfapi/page/cpdf_page.h" #include "core/fpdfapi/parser/cpdf_document.h" -#include "core/fpdfdoc/cpdf_interform.h" +#include "core/fpdfdoc/cpdf_interactiveform.h" #include "fpdfsdk/cpdfsdk_annot.h" #include "fpdfsdk/cpdfsdk_baannot.h" #include "fpdfsdk/cpdfsdk_pageview.h" diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp index 52dfb526eb..8f490ca2bc 100644 --- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp +++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp @@ -14,7 +14,7 @@ #include "core/fpdfdoc/cpdf_docjsactions.h" #include "fpdfsdk/cpdfsdk_actionhandler.h" #include "fpdfsdk/cpdfsdk_annothandlermgr.h" -#include "fpdfsdk/cpdfsdk_interform.h" +#include "fpdfsdk/cpdfsdk_interactiveform.h" #include "fpdfsdk/cpdfsdk_pageview.h" #include "fpdfsdk/cpdfsdk_widget.h" #include "fpdfsdk/formfiller/cffl_interactiveformfiller.h" diff --git a/fpdfsdk/cpdfsdk_helpers.cpp b/fpdfsdk/cpdfsdk_helpers.cpp index dc8dc80cdc..6a0cf85482 100644 --- a/fpdfsdk/cpdfsdk_helpers.cpp +++ b/fpdfsdk/cpdfsdk_helpers.cpp @@ -14,7 +14,7 @@ #include "core/fpdfapi/parser/cpdf_document.h" #include "core/fpdfapi/parser/cpdf_stream_acc.h" #include "core/fpdfdoc/cpdf_annot.h" -#include "core/fpdfdoc/cpdf_interform.h" +#include "core/fpdfdoc/cpdf_interactiveform.h" #include "core/fpdfdoc/cpdf_metadata.h" #include "public/fpdf_ext.h" diff --git a/fpdfsdk/cpdfsdk_interactiveform.cpp b/fpdfsdk/cpdfsdk_interactiveform.cpp new file mode 100644 index 0000000000..843d1e99e0 --- /dev/null +++ b/fpdfsdk/cpdfsdk_interactiveform.cpp @@ -0,0 +1,672 @@ +// Copyright 2016 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#include "fpdfsdk/cpdfsdk_interactiveform.h" + +#include +#include +#include +#include +#include +#include + +#include "core/fpdfapi/page/cpdf_page.h" +#include "core/fpdfapi/parser/cfdf_document.h" +#include "core/fpdfapi/parser/cpdf_array.h" +#include "core/fpdfapi/parser/cpdf_dictionary.h" +#include "core/fpdfapi/parser/cpdf_document.h" +#include "core/fpdfapi/parser/cpdf_stream.h" +#include "core/fpdfdoc/cpdf_actionfields.h" +#include "core/fpdfdoc/cpdf_interactiveform.h" +#include "core/fxcrt/autorestorer.h" +#include "core/fxge/cfx_graphstatedata.h" +#include "core/fxge/cfx_pathdata.h" +#include "fpdfsdk/cpdfsdk_actionhandler.h" +#include "fpdfsdk/cpdfsdk_annot.h" +#include "fpdfsdk/cpdfsdk_annotiterator.h" +#include "fpdfsdk/cpdfsdk_formfillenvironment.h" +#include "fpdfsdk/cpdfsdk_helpers.h" +#include "fpdfsdk/cpdfsdk_pageview.h" +#include "fpdfsdk/cpdfsdk_widget.h" +#include "fpdfsdk/formfiller/cffl_formfiller.h" +#include "fpdfsdk/ipdfsdk_annothandler.h" +#include "fxjs/ijs_event_context.h" +#include "fxjs/ijs_runtime.h" +#include "third_party/base/ptr_util.h" +#include "third_party/base/stl_util.h" + +#ifdef PDF_ENABLE_XFA +#include "fpdfsdk/cpdfsdk_xfawidget.h" +#include "fpdfsdk/fpdfxfa/cpdfxfa_context.h" +#include "fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h" +#include "xfa/fxfa/cxfa_eventparam.h" +#include "xfa/fxfa/cxfa_ffdocview.h" +#include "xfa/fxfa/cxfa_ffwidget.h" +#include "xfa/fxfa/cxfa_ffwidgethandler.h" +#endif // PDF_ENABLE_XFA + +namespace { + +constexpr uint32_t kWhiteBGR = FXSYS_BGR(255, 255, 255); + +bool IsFormFieldTypeComboOrText(FormFieldType fieldType) { + switch (fieldType) { + case FormFieldType::kComboBox: + case FormFieldType::kTextField: + return true; + default: + return false; + } +} + +#ifdef PDF_ENABLE_XFA +bool IsFormFieldTypeXFA(FormFieldType fieldType) { + switch (fieldType) { + case FormFieldType::kXFA: + case FormFieldType::kXFA_CheckBox: + case FormFieldType::kXFA_ComboBox: + case FormFieldType::kXFA_ImageField: + case FormFieldType::kXFA_ListBox: + case FormFieldType::kXFA_PushButton: + case FormFieldType::kXFA_Signature: + case FormFieldType::kXFA_TextField: + return true; + default: + return false; + } +} +#endif // PDF_ENABLE_XFA + +bool FDFToURLEncodedData(std::vector* pBuffer) { + std::unique_ptr pFDF = CFDF_Document::ParseMemory(*pBuffer); + if (!pFDF) + return true; + + CPDF_Dictionary* pMainDict = pFDF->GetRoot()->GetDictFor("FDF"); + if (!pMainDict) + return false; + + CPDF_Array* pFields = pMainDict->GetArrayFor("Fields"); + if (!pFields) + return false; + + std::ostringstream fdfEncodedData; + for (uint32_t i = 0; i < pFields->GetCount(); i++) { + CPDF_Dictionary* pField = pFields->GetDictAt(i); + if (!pField) + continue; + WideString name; + name = pField->GetUnicodeTextFor("T"); + ByteString name_b = name.ToDefANSI(); + ByteString csBValue = pField->GetStringFor("V"); + WideString csWValue = PDF_DecodeText(csBValue); + ByteString csValue_b = csWValue.ToDefANSI(); + fdfEncodedData << name_b << "=" << csValue_b; + if (i != pFields->GetCount() - 1) + fdfEncodedData << "&"; + } + + size_t nBufSize = fdfEncodedData.tellp(); + if (nBufSize <= 0) + return false; + + pBuffer->resize(nBufSize); + memcpy(pBuffer->data(), fdfEncodedData.str().c_str(), nBufSize); + return true; +} + +} // namespace + +CPDFSDK_InterForm::CPDFSDK_InterForm(CPDFSDK_FormFillEnvironment* pFormFillEnv) + : m_pFormFillEnv(pFormFillEnv), + m_pInterForm(pdfium::MakeUnique( + m_pFormFillEnv->GetPDFDocument())) { + ASSERT(m_pFormFillEnv); + m_pInterForm->SetFormNotify(this); + RemoveAllHighLights(); +} + +CPDFSDK_InterForm::~CPDFSDK_InterForm() { + m_Map.clear(); +#ifdef PDF_ENABLE_XFA + m_XFAMap.clear(); +#endif // PDF_ENABLE_XFA +} + +CPDFSDK_Widget* CPDFSDK_InterForm::GetSibling(CPDFSDK_Widget* pWidget, + bool bNext) const { + auto pIterator = pdfium::MakeUnique( + pWidget->GetPageView(), CPDF_Annot::Subtype::WIDGET); + + return ToCPDFSDKWidget(bNext ? pIterator->GetNextAnnot(pWidget) + : pIterator->GetPrevAnnot(pWidget)); +} + +CPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const { + if (!pControl) + return nullptr; + + CPDFSDK_Widget* pWidget = nullptr; + const auto it = m_Map.find(pControl); + if (it != m_Map.end()) + pWidget = it->second; + if (pWidget) + return pWidget; + + CPDF_Dictionary* pControlDict = pControl->GetWidget(); + CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument(); + CPDFSDK_PageView* pPage = nullptr; + + if (CPDF_Dictionary* pPageDict = pControlDict->GetDictFor("P")) { + int nPageIndex = pDocument->GetPageIndex(pPageDict->GetObjNum()); + if (nPageIndex >= 0) + pPage = m_pFormFillEnv->GetPageView(nPageIndex); + } + + if (!pPage) { + int nPageIndex = GetPageIndexByAnnotDict(pDocument, pControlDict); + if (nPageIndex >= 0) + pPage = m_pFormFillEnv->GetPageView(nPageIndex); + } + + return pPage ? ToCPDFSDKWidget(pPage->GetAnnotByDict(pControlDict)) : nullptr; +} + +void CPDFSDK_InterForm::GetWidgets( + const WideString& sFieldName, + std::vector* widgets) const { + for (int i = 0, sz = m_pInterForm->CountFields(sFieldName); i < sz; ++i) { + CPDF_FormField* pFormField = m_pInterForm->GetField(i, sFieldName); + ASSERT(pFormField); + GetWidgets(pFormField, widgets); + } +} + +void CPDFSDK_InterForm::GetWidgets( + CPDF_FormField* pField, + std::vector* widgets) const { + for (int i = 0, sz = pField->CountControls(); i < sz; ++i) { + CPDF_FormControl* pFormCtrl = pField->GetControl(i); + ASSERT(pFormCtrl); + CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl); + if (pWidget) + widgets->emplace_back(pWidget); + } +} + +int CPDFSDK_InterForm::GetPageIndexByAnnotDict( + CPDF_Document* pDocument, + CPDF_Dictionary* pAnnotDict) const { + ASSERT(pAnnotDict); + + for (int i = 0, sz = pDocument->GetPageCount(); i < sz; i++) { + if (CPDF_Dictionary* pPageDict = pDocument->GetPageDictionary(i)) { + if (CPDF_Array* pAnnots = pPageDict->GetArrayFor("Annots")) { + for (int j = 0, jsz = pAnnots->GetCount(); j < jsz; j++) { + CPDF_Object* pDict = pAnnots->GetDirectObjectAt(j); + if (pAnnotDict == pDict) + return i; + } + } + } + } + + return -1; +} + +void CPDFSDK_InterForm::AddMap(CPDF_FormControl* pControl, + CPDFSDK_Widget* pWidget) { + m_Map[pControl] = pWidget; +} + +void CPDFSDK_InterForm::RemoveMap(CPDF_FormControl* pControl) { + m_Map.erase(pControl); +} + +void CPDFSDK_InterForm::EnableCalculate(bool bEnabled) { + m_bCalculate = bEnabled; +} + +bool CPDFSDK_InterForm::IsCalculateEnabled() const { + return m_bCalculate; +} + +#ifdef PDF_ENABLE_XFA +void CPDFSDK_InterForm::AddXFAMap(CXFA_FFWidget* hWidget, + CPDFSDK_XFAWidget* pWidget) { + ASSERT(hWidget); + m_XFAMap[hWidget] = pWidget; +} + +void CPDFSDK_InterForm::RemoveXFAMap(CXFA_FFWidget* hWidget) { + ASSERT(hWidget); + m_XFAMap.erase(hWidget); +} + +CPDFSDK_XFAWidget* CPDFSDK_InterForm::GetXFAWidget(CXFA_FFWidget* hWidget) { + ASSERT(hWidget); + auto it = m_XFAMap.find(hWidget); + return it != m_XFAMap.end() ? it->second : nullptr; +} + +void CPDFSDK_InterForm::XfaEnableCalculate(bool bEnabled) { + m_bXfaCalculate = bEnabled; +} +bool CPDFSDK_InterForm::IsXfaCalculateEnabled() const { + return m_bXfaCalculate; +} + +bool CPDFSDK_InterForm::IsXfaValidationsEnabled() { + return m_bXfaValidationsEnabled; +} +void CPDFSDK_InterForm::XfaSetValidationsEnabled(bool bEnabled) { + m_bXfaValidationsEnabled = bEnabled; +} + +void CPDFSDK_InterForm::SynchronizeField(CPDF_FormField* pFormField) { + for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { + CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); + if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) + pWidget->Synchronize(false); + } +} +#endif // PDF_ENABLE_XFA + +void CPDFSDK_InterForm::OnCalculate(CPDF_FormField* pFormField) { + if (!m_pFormFillEnv->IsJSPlatformPresent()) + return; + + if (m_bBusy) + return; + + AutoRestorer restorer(&m_bBusy); + m_bBusy = true; + + if (!IsCalculateEnabled()) + return; + + IJS_Runtime* pRuntime = m_pFormFillEnv->GetIJSRuntime(); + int nSize = m_pInterForm->CountFieldsInCalculationOrder(); + for (int i = 0; i < nSize; i++) { + CPDF_FormField* pField = m_pInterForm->GetFieldInCalculationOrder(i); + if (!pField) + continue; + + FormFieldType fieldType = pField->GetFieldType(); + if (!IsFormFieldTypeComboOrText(fieldType)) + continue; + + CPDF_AAction aAction = pField->GetAdditionalAction(); + if (!aAction.GetDict() || !aAction.ActionExist(CPDF_AAction::Calculate)) + continue; + + CPDF_Action action = aAction.GetAction(CPDF_AAction::Calculate); + if (!action.GetDict()) + continue; + + WideString csJS = action.GetJavaScript(); + if (csJS.IsEmpty()) + continue; + + WideString sOldValue = pField->GetValue(); + WideString sValue = sOldValue; + bool bRC = true; + IJS_Runtime::ScopedEventContext pContext(pRuntime); + pContext->OnField_Calculate(pFormField, pField, &sValue, &bRC); + + Optional err = pContext->RunScript(csJS); + if (!err && bRC && sValue.Compare(sOldValue) != 0) + pField->SetValue(sValue, NotificationOption::kNotify); + } +} + +Optional CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField) { + if (!m_pFormFillEnv->IsJSPlatformPresent()) + return {}; + + WideString sValue = pFormField->GetValue(); + IJS_Runtime* pRuntime = m_pFormFillEnv->GetIJSRuntime(); + if (pFormField->GetFieldType() == FormFieldType::kComboBox && + pFormField->CountSelectedItems() > 0) { + int index = pFormField->GetSelectedIndex(0); + if (index >= 0) + sValue = pFormField->GetOptionLabel(index); + } + + CPDF_AAction aAction = pFormField->GetAdditionalAction(); + if (aAction.GetDict() && aAction.ActionExist(CPDF_AAction::Format)) { + CPDF_Action action = aAction.GetAction(CPDF_AAction::Format); + if (action.GetDict()) { + WideString script = action.GetJavaScript(); + if (!script.IsEmpty()) { + IJS_Runtime::ScopedEventContext pContext(pRuntime); + pContext->OnField_Format(pFormField, &sValue, true); + Optional err = pContext->RunScript(script); + if (!err) + return sValue; + } + } + } + return {}; +} + +void CPDFSDK_InterForm::ResetFieldAppearance(CPDF_FormField* pFormField, + Optional sValue, + bool bValueChanged) { + for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { + CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); + ASSERT(pFormCtrl); + if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) + pWidget->ResetAppearance(sValue, bValueChanged); + } +} + +void CPDFSDK_InterForm::UpdateField(CPDF_FormField* pFormField) { + auto* formfiller = m_pFormFillEnv->GetInteractiveFormFiller(); + for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { + CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); + ASSERT(pFormCtrl); + + CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl); + if (!pWidget) + continue; + + IPDF_Page* pPage = pWidget->GetPage(); + FX_RECT rect = formfiller->GetViewBBox( + m_pFormFillEnv->GetPageView(pPage, false), pWidget); + m_pFormFillEnv->Invalidate(pPage, rect); + } +} + +bool CPDFSDK_InterForm::OnKeyStrokeCommit(CPDF_FormField* pFormField, + const WideString& csValue) { + CPDF_AAction aAction = pFormField->GetAdditionalAction(); + if (!aAction.GetDict() || !aAction.ActionExist(CPDF_AAction::KeyStroke)) + return true; + + CPDF_Action action = aAction.GetAction(CPDF_AAction::KeyStroke); + if (!action.GetDict()) + return true; + + CPDFSDK_FieldAction fa; + fa.bModifier = false; + fa.bShift = false; + fa.sValue = csValue; + m_pFormFillEnv->GetActionHandler()->DoAction_FieldJavaScript( + action, CPDF_AAction::KeyStroke, m_pFormFillEnv.Get(), pFormField, &fa); + return fa.bRC; +} + +bool CPDFSDK_InterForm::OnValidate(CPDF_FormField* pFormField, + const WideString& csValue) { + CPDF_AAction aAction = pFormField->GetAdditionalAction(); + if (!aAction.GetDict() || !aAction.ActionExist(CPDF_AAction::Validate)) + return true; + + CPDF_Action action = aAction.GetAction(CPDF_AAction::Validate); + if (!action.GetDict()) + return true; + + CPDFSDK_FieldAction fa; + fa.bModifier = false; + fa.bShift = false; + fa.sValue = csValue; + m_pFormFillEnv->GetActionHandler()->DoAction_FieldJavaScript( + action, CPDF_AAction::Validate, m_pFormFillEnv.Get(), pFormField, &fa); + return fa.bRC; +} + +bool CPDFSDK_InterForm::DoAction_Hide(const CPDF_Action& action) { + ASSERT(action.GetDict()); + + CPDF_ActionFields af(&action); + std::vector fieldObjects = af.GetAllFields(); + std::vector fields = GetFieldFromObjects(fieldObjects); + + bool bHide = action.GetHideStatus(); + bool bChanged = false; + + 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)) { + uint32_t nFlags = pWidget->GetFlags(); + nFlags &= ~ANNOTFLAG_INVISIBLE; + nFlags &= ~ANNOTFLAG_NOVIEW; + if (bHide) + nFlags |= ANNOTFLAG_HIDDEN; + else + nFlags &= ~ANNOTFLAG_HIDDEN; + pWidget->SetFlags(nFlags); + pWidget->GetPageView()->UpdateView(pWidget); + bChanged = true; + } + } + } + + return bChanged; +} + +bool CPDFSDK_InterForm::DoAction_SubmitForm(const CPDF_Action& action) { + WideString sDestination = action.GetFilePath(); + if (sDestination.IsEmpty()) + return false; + + const CPDF_Dictionary* pActionDict = action.GetDict(); + if (pActionDict->KeyExist("Fields")) { + CPDF_ActionFields af(&action); + uint32_t dwFlags = action.GetFlags(); + std::vector fieldObjects = af.GetAllFields(); + std::vector 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(nullptr, true)) + return false; + + return SubmitForm(sDestination, false); +} + +bool CPDFSDK_InterForm::SubmitFields(const WideString& csDestination, + const std::vector& fields, + bool bIncludeOrExclude, + bool bUrlEncoded) { + ByteString textBuf = ExportFieldsToFDFTextBuf(fields, bIncludeOrExclude); + if (textBuf.IsEmpty()) + return false; + + std::vector buffer(textBuf.begin(), textBuf.end()); + if (bUrlEncoded && !FDFToURLEncodedData(&buffer)) + return false; + + m_pFormFillEnv->JS_docSubmitForm(buffer.data(), buffer.size(), csDestination); + return true; +} + +ByteString CPDFSDK_InterForm::ExportFieldsToFDFTextBuf( + const std::vector& fields, + bool bIncludeOrExclude) { + std::unique_ptr pFDF = m_pInterForm->ExportToFDF( + m_pFormFillEnv->JS_docGetFilePath(), fields, bIncludeOrExclude, false); + + return pFDF ? pFDF->WriteToString() : ByteString(); +} + +bool CPDFSDK_InterForm::SubmitForm(const WideString& sDestination, + bool bUrlEncoded) { + if (sDestination.IsEmpty()) + return false; + + std::unique_ptr pFDFDoc = + m_pInterForm->ExportToFDF(m_pFormFillEnv->JS_docGetFilePath(), false); + if (!pFDFDoc) + return false; + + ByteString fdfBuffer = pFDFDoc->WriteToString(); + if (fdfBuffer.IsEmpty()) + return false; + + std::vector buffer(fdfBuffer.begin(), fdfBuffer.end()); + if (bUrlEncoded && !FDFToURLEncodedData(&buffer)) + return false; + + m_pFormFillEnv->JS_docSubmitForm(buffer.data(), buffer.size(), sDestination); + return true; +} + +ByteString CPDFSDK_InterForm::ExportFormToFDFTextBuf() { + std::unique_ptr pFDF = + m_pInterForm->ExportToFDF(m_pFormFillEnv->JS_docGetFilePath(), false); + + return pFDF ? pFDF->WriteToString() : ByteString(); +} + +void CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action) { + ASSERT(action.GetDict()); + const CPDF_Dictionary* pActionDict = action.GetDict(); + if (!pActionDict->KeyExist("Fields")) { + m_pInterForm->ResetForm(NotificationOption::kNotify); + return; + } + CPDF_ActionFields af(&action); + uint32_t dwFlags = action.GetFlags(); + std::vector fieldObjects = af.GetAllFields(); + std::vector fields = GetFieldFromObjects(fieldObjects); + m_pInterForm->ResetForm(fields, !(dwFlags & 0x01), + NotificationOption::kNotify); +} + +std::vector CPDFSDK_InterForm::GetFieldFromObjects( + const std::vector& objects) const { + std::vector fields; + for (const CPDF_Object* pObject : objects) { + if (!pObject || !pObject->IsString()) + continue; + + WideString csName = pObject->GetUnicodeText(); + CPDF_FormField* pField = m_pInterForm->GetField(0, csName); + if (pField) + fields.push_back(pField); + } + return fields; +} + +bool CPDFSDK_InterForm::BeforeValueChange(CPDF_FormField* pField, + const WideString& csValue) { + FormFieldType fieldType = pField->GetFieldType(); + if (!IsFormFieldTypeComboOrText(fieldType)) + return true; + if (!OnKeyStrokeCommit(pField, csValue)) + return false; + return OnValidate(pField, csValue); +} + +void CPDFSDK_InterForm::AfterValueChange(CPDF_FormField* pField) { +#ifdef PDF_ENABLE_XFA + SynchronizeField(pField); +#endif // PDF_ENABLE_XFA + + FormFieldType fieldType = pField->GetFieldType(); + if (!IsFormFieldTypeComboOrText(fieldType)) + return; + + OnCalculate(pField); + ResetFieldAppearance(pField, OnFormat(pField), true); + UpdateField(pField); +} + +bool CPDFSDK_InterForm::BeforeSelectionChange(CPDF_FormField* pField, + const WideString& csValue) { + if (pField->GetFieldType() != FormFieldType::kListBox) + return true; + if (!OnKeyStrokeCommit(pField, csValue)) + return false; + return OnValidate(pField, csValue); +} + +void CPDFSDK_InterForm::AfterSelectionChange(CPDF_FormField* pField) { + if (pField->GetFieldType() != FormFieldType::kListBox) + return; + + OnCalculate(pField); + ResetFieldAppearance(pField, pdfium::nullopt, true); + UpdateField(pField); +} + +void CPDFSDK_InterForm::AfterCheckedStatusChange(CPDF_FormField* pField) { + FormFieldType fieldType = pField->GetFieldType(); + if (fieldType != FormFieldType::kCheckBox && + fieldType != FormFieldType::kRadioButton) + return; + + OnCalculate(pField); + UpdateField(pField); +} + +void CPDFSDK_InterForm::AfterFormReset(CPDF_InterForm* pForm) { + OnCalculate(nullptr); +} + +bool CPDFSDK_InterForm::IsNeedHighLight(FormFieldType fieldType) const { + if (fieldType == FormFieldType::kUnknown) + return false; + +#ifdef PDF_ENABLE_XFA + // For the XFA fields, we need to return if the specific field type has + // highlight enabled or if the general XFA field type has it enabled. + if (IsFormFieldTypeXFA(fieldType)) { + if (!m_NeedsHighlight[static_cast(fieldType)]) + return m_NeedsHighlight[static_cast(FormFieldType::kXFA)]; + } +#endif // PDF_ENABLE_XFA + return m_NeedsHighlight[static_cast(fieldType)]; +} + +void CPDFSDK_InterForm::RemoveAllHighLights() { + std::fill(m_HighlightColor, m_HighlightColor + kFormFieldTypeCount, + kWhiteBGR); + std::fill(m_NeedsHighlight, m_NeedsHighlight + kFormFieldTypeCount, false); +} + +void CPDFSDK_InterForm::SetHighlightColor(FX_COLORREF clr, + FormFieldType fieldType) { + if (fieldType == FormFieldType::kUnknown) + return; + + m_HighlightColor[static_cast(fieldType)] = clr; + m_NeedsHighlight[static_cast(fieldType)] = true; +} + +void CPDFSDK_InterForm::SetAllHighlightColors(FX_COLORREF clr) { + for (auto type : kFormFieldTypes) { + m_HighlightColor[static_cast(type)] = clr; + m_NeedsHighlight[static_cast(type)] = true; + } +} + +FX_COLORREF CPDFSDK_InterForm::GetHighlightColor(FormFieldType fieldType) { + if (fieldType == FormFieldType::kUnknown) + return kWhiteBGR; + +#ifdef PDF_ENABLE_XFA + // For the XFA fields, we need to return the specific field type highlight + // colour or the general XFA field type colour if present. + if (IsFormFieldTypeXFA(fieldType)) { + if (!m_NeedsHighlight[static_cast(fieldType)] && + m_NeedsHighlight[static_cast(FormFieldType::kXFA)]) { + return m_HighlightColor[static_cast(FormFieldType::kXFA)]; + } + } +#endif // PDF_ENABLE_XFA + return m_HighlightColor[static_cast(fieldType)]; +} diff --git a/fpdfsdk/cpdfsdk_interactiveform.h b/fpdfsdk/cpdfsdk_interactiveform.h new file mode 100644 index 0000000000..06492e52a2 --- /dev/null +++ b/fpdfsdk/cpdfsdk_interactiveform.h @@ -0,0 +1,132 @@ +// Copyright 2016 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#ifndef FPDFSDK_CPDFSDK_INTERACTIVEFORM_H_ +#define FPDFSDK_CPDFSDK_INTERACTIVEFORM_H_ + +#include +#include +#include + +#include "core/fpdfdoc/cpdf_action.h" +#include "core/fpdfdoc/ipdf_formnotify.h" +#include "core/fxcrt/unowned_ptr.h" +#include "core/fxge/fx_dib.h" +#include "fpdfsdk/cpdfsdk_widget.h" +#include "third_party/base/optional.h" + +class CPDF_Dictionary; +class CPDF_FormControl; +class CPDF_FormField; +class CPDF_InterForm; +class CPDF_Object; +class CPDFSDK_FormFillEnvironment; + +#ifdef PDF_ENABLE_XFA +class CPDFSDK_XFAWidget; +class CXFA_FFWidget; +#endif // PDF_ENABLE_XFA + +class CPDFSDK_InterForm final : public IPDF_FormNotify { + public: + explicit CPDFSDK_InterForm(CPDFSDK_FormFillEnvironment* pFormFillEnv); + ~CPDFSDK_InterForm() override; + + CPDF_InterForm* GetInterForm() const { return m_pInterForm.get(); } + CPDFSDK_FormFillEnvironment* GetFormFillEnv() const { + return m_pFormFillEnv.Get(); + } + + CPDFSDK_Widget* GetSibling(CPDFSDK_Widget* pWidget, bool bNext) const; + CPDFSDK_Widget* GetWidget(CPDF_FormControl* pControl) const; + void GetWidgets(const WideString& sFieldName, + std::vector* widgets) const; + void GetWidgets(CPDF_FormField* pField, + std::vector* widgets) const; + + void AddMap(CPDF_FormControl* pControl, CPDFSDK_Widget* pWidget); + void RemoveMap(CPDF_FormControl* pControl); + + void EnableCalculate(bool bEnabled); + bool IsCalculateEnabled() const; + +#ifdef PDF_ENABLE_XFA + void AddXFAMap(CXFA_FFWidget* hWidget, CPDFSDK_XFAWidget* pWidget); + void RemoveXFAMap(CXFA_FFWidget* hWidget); + CPDFSDK_XFAWidget* GetXFAWidget(CXFA_FFWidget* hWidget); + void XfaEnableCalculate(bool bEnabled); + bool IsXfaCalculateEnabled() const; + bool IsXfaValidationsEnabled(); + void XfaSetValidationsEnabled(bool bEnabled); + void SynchronizeField(CPDF_FormField* pFormField); +#endif // PDF_ENABLE_XFA + + bool OnKeyStrokeCommit(CPDF_FormField* pFormField, const WideString& csValue); + bool OnValidate(CPDF_FormField* pFormField, const WideString& csValue); + void OnCalculate(CPDF_FormField* pFormField); + Optional OnFormat(CPDF_FormField* pFormField); + + void ResetFieldAppearance(CPDF_FormField* pFormField, + Optional sValue, + bool bValueChanged); + void UpdateField(CPDF_FormField* pFormField); + + bool DoAction_Hide(const CPDF_Action& action); + bool DoAction_SubmitForm(const CPDF_Action& action); + void DoAction_ResetForm(const CPDF_Action& action); + + std::vector GetFieldFromObjects( + const std::vector& objects) const; + bool IsValidField(CPDF_Dictionary* pFieldDict); + bool SubmitFields(const WideString& csDestination, + const std::vector& fields, + bool bIncludeOrExclude, + bool bUrlEncoded); + bool SubmitForm(const WideString& sDestination, bool bUrlEncoded); + ByteString ExportFormToFDFTextBuf(); + ByteString ExportFieldsToFDFTextBuf( + const std::vector& fields, + bool bIncludeOrExclude); + + bool IsNeedHighLight(FormFieldType fieldType) const; + void RemoveAllHighLights(); + void SetHighlightAlpha(uint8_t alpha) { m_HighlightAlpha = alpha; } + uint8_t GetHighlightAlpha() { return m_HighlightAlpha; } + void SetHighlightColor(FX_COLORREF clr, FormFieldType fieldType); + void SetAllHighlightColors(FX_COLORREF clr); + FX_COLORREF GetHighlightColor(FormFieldType fieldType); + + private: + // IPDF_FormNotify: + bool BeforeValueChange(CPDF_FormField* pField, + const WideString& csValue) override; + void AfterValueChange(CPDF_FormField* pField) override; + bool BeforeSelectionChange(CPDF_FormField* pField, + const WideString& csValue) override; + void AfterSelectionChange(CPDF_FormField* pField) override; + void AfterCheckedStatusChange(CPDF_FormField* pField) override; + void AfterFormReset(CPDF_InterForm* pForm) override; + + int GetPageIndexByAnnotDict(CPDF_Document* pDocument, + CPDF_Dictionary* pAnnotDict) const; + + UnownedPtr const m_pFormFillEnv; + std::unique_ptr const m_pInterForm; + std::map m_Map; +#ifdef PDF_ENABLE_XFA + std::map m_XFAMap; + bool m_bXfaCalculate = true; + bool m_bXfaValidationsEnabled = true; +#endif // PDF_ENABLE_XFA + bool m_bCalculate = true; + bool m_bBusy = false; + + uint8_t m_HighlightAlpha = 0; + FX_COLORREF m_HighlightColor[kFormFieldTypeCount]; + bool m_NeedsHighlight[kFormFieldTypeCount]; +}; + +#endif // FPDFSDK_CPDFSDK_INTERACTIVEFORM_H_ diff --git a/fpdfsdk/cpdfsdk_interform.cpp b/fpdfsdk/cpdfsdk_interform.cpp deleted file mode 100644 index 66a52b6dee..0000000000 --- a/fpdfsdk/cpdfsdk_interform.cpp +++ /dev/null @@ -1,672 +0,0 @@ -// Copyright 2016 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#include "fpdfsdk/cpdfsdk_interform.h" - -#include -#include -#include -#include -#include -#include - -#include "core/fpdfapi/page/cpdf_page.h" -#include "core/fpdfapi/parser/cfdf_document.h" -#include "core/fpdfapi/parser/cpdf_array.h" -#include "core/fpdfapi/parser/cpdf_dictionary.h" -#include "core/fpdfapi/parser/cpdf_document.h" -#include "core/fpdfapi/parser/cpdf_stream.h" -#include "core/fpdfdoc/cpdf_actionfields.h" -#include "core/fpdfdoc/cpdf_interform.h" -#include "core/fxcrt/autorestorer.h" -#include "core/fxge/cfx_graphstatedata.h" -#include "core/fxge/cfx_pathdata.h" -#include "fpdfsdk/cpdfsdk_actionhandler.h" -#include "fpdfsdk/cpdfsdk_annot.h" -#include "fpdfsdk/cpdfsdk_annotiterator.h" -#include "fpdfsdk/cpdfsdk_formfillenvironment.h" -#include "fpdfsdk/cpdfsdk_helpers.h" -#include "fpdfsdk/cpdfsdk_pageview.h" -#include "fpdfsdk/cpdfsdk_widget.h" -#include "fpdfsdk/formfiller/cffl_formfiller.h" -#include "fpdfsdk/ipdfsdk_annothandler.h" -#include "fxjs/ijs_event_context.h" -#include "fxjs/ijs_runtime.h" -#include "third_party/base/ptr_util.h" -#include "third_party/base/stl_util.h" - -#ifdef PDF_ENABLE_XFA -#include "fpdfsdk/cpdfsdk_xfawidget.h" -#include "fpdfsdk/fpdfxfa/cpdfxfa_context.h" -#include "fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h" -#include "xfa/fxfa/cxfa_eventparam.h" -#include "xfa/fxfa/cxfa_ffdocview.h" -#include "xfa/fxfa/cxfa_ffwidget.h" -#include "xfa/fxfa/cxfa_ffwidgethandler.h" -#endif // PDF_ENABLE_XFA - -namespace { - -constexpr uint32_t kWhiteBGR = FXSYS_BGR(255, 255, 255); - -bool IsFormFieldTypeComboOrText(FormFieldType fieldType) { - switch (fieldType) { - case FormFieldType::kComboBox: - case FormFieldType::kTextField: - return true; - default: - return false; - } -} - -#ifdef PDF_ENABLE_XFA -bool IsFormFieldTypeXFA(FormFieldType fieldType) { - switch (fieldType) { - case FormFieldType::kXFA: - case FormFieldType::kXFA_CheckBox: - case FormFieldType::kXFA_ComboBox: - case FormFieldType::kXFA_ImageField: - case FormFieldType::kXFA_ListBox: - case FormFieldType::kXFA_PushButton: - case FormFieldType::kXFA_Signature: - case FormFieldType::kXFA_TextField: - return true; - default: - return false; - } -} -#endif // PDF_ENABLE_XFA - -bool FDFToURLEncodedData(std::vector* pBuffer) { - std::unique_ptr pFDF = CFDF_Document::ParseMemory(*pBuffer); - if (!pFDF) - return true; - - CPDF_Dictionary* pMainDict = pFDF->GetRoot()->GetDictFor("FDF"); - if (!pMainDict) - return false; - - CPDF_Array* pFields = pMainDict->GetArrayFor("Fields"); - if (!pFields) - return false; - - std::ostringstream fdfEncodedData; - for (uint32_t i = 0; i < pFields->GetCount(); i++) { - CPDF_Dictionary* pField = pFields->GetDictAt(i); - if (!pField) - continue; - WideString name; - name = pField->GetUnicodeTextFor("T"); - ByteString name_b = name.ToDefANSI(); - ByteString csBValue = pField->GetStringFor("V"); - WideString csWValue = PDF_DecodeText(csBValue); - ByteString csValue_b = csWValue.ToDefANSI(); - fdfEncodedData << name_b << "=" << csValue_b; - if (i != pFields->GetCount() - 1) - fdfEncodedData << "&"; - } - - size_t nBufSize = fdfEncodedData.tellp(); - if (nBufSize <= 0) - return false; - - pBuffer->resize(nBufSize); - memcpy(pBuffer->data(), fdfEncodedData.str().c_str(), nBufSize); - return true; -} - -} // namespace - -CPDFSDK_InterForm::CPDFSDK_InterForm(CPDFSDK_FormFillEnvironment* pFormFillEnv) - : m_pFormFillEnv(pFormFillEnv), - m_pInterForm(pdfium::MakeUnique( - m_pFormFillEnv->GetPDFDocument())) { - ASSERT(m_pFormFillEnv); - m_pInterForm->SetFormNotify(this); - RemoveAllHighLights(); -} - -CPDFSDK_InterForm::~CPDFSDK_InterForm() { - m_Map.clear(); -#ifdef PDF_ENABLE_XFA - m_XFAMap.clear(); -#endif // PDF_ENABLE_XFA -} - -CPDFSDK_Widget* CPDFSDK_InterForm::GetSibling(CPDFSDK_Widget* pWidget, - bool bNext) const { - auto pIterator = pdfium::MakeUnique( - pWidget->GetPageView(), CPDF_Annot::Subtype::WIDGET); - - return ToCPDFSDKWidget(bNext ? pIterator->GetNextAnnot(pWidget) - : pIterator->GetPrevAnnot(pWidget)); -} - -CPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const { - if (!pControl) - return nullptr; - - CPDFSDK_Widget* pWidget = nullptr; - const auto it = m_Map.find(pControl); - if (it != m_Map.end()) - pWidget = it->second; - if (pWidget) - return pWidget; - - CPDF_Dictionary* pControlDict = pControl->GetWidget(); - CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument(); - CPDFSDK_PageView* pPage = nullptr; - - if (CPDF_Dictionary* pPageDict = pControlDict->GetDictFor("P")) { - int nPageIndex = pDocument->GetPageIndex(pPageDict->GetObjNum()); - if (nPageIndex >= 0) - pPage = m_pFormFillEnv->GetPageView(nPageIndex); - } - - if (!pPage) { - int nPageIndex = GetPageIndexByAnnotDict(pDocument, pControlDict); - if (nPageIndex >= 0) - pPage = m_pFormFillEnv->GetPageView(nPageIndex); - } - - return pPage ? ToCPDFSDKWidget(pPage->GetAnnotByDict(pControlDict)) : nullptr; -} - -void CPDFSDK_InterForm::GetWidgets( - const WideString& sFieldName, - std::vector* widgets) const { - for (int i = 0, sz = m_pInterForm->CountFields(sFieldName); i < sz; ++i) { - CPDF_FormField* pFormField = m_pInterForm->GetField(i, sFieldName); - ASSERT(pFormField); - GetWidgets(pFormField, widgets); - } -} - -void CPDFSDK_InterForm::GetWidgets( - CPDF_FormField* pField, - std::vector* widgets) const { - for (int i = 0, sz = pField->CountControls(); i < sz; ++i) { - CPDF_FormControl* pFormCtrl = pField->GetControl(i); - ASSERT(pFormCtrl); - CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl); - if (pWidget) - widgets->emplace_back(pWidget); - } -} - -int CPDFSDK_InterForm::GetPageIndexByAnnotDict( - CPDF_Document* pDocument, - CPDF_Dictionary* pAnnotDict) const { - ASSERT(pAnnotDict); - - for (int i = 0, sz = pDocument->GetPageCount(); i < sz; i++) { - if (CPDF_Dictionary* pPageDict = pDocument->GetPageDictionary(i)) { - if (CPDF_Array* pAnnots = pPageDict->GetArrayFor("Annots")) { - for (int j = 0, jsz = pAnnots->GetCount(); j < jsz; j++) { - CPDF_Object* pDict = pAnnots->GetDirectObjectAt(j); - if (pAnnotDict == pDict) - return i; - } - } - } - } - - return -1; -} - -void CPDFSDK_InterForm::AddMap(CPDF_FormControl* pControl, - CPDFSDK_Widget* pWidget) { - m_Map[pControl] = pWidget; -} - -void CPDFSDK_InterForm::RemoveMap(CPDF_FormControl* pControl) { - m_Map.erase(pControl); -} - -void CPDFSDK_InterForm::EnableCalculate(bool bEnabled) { - m_bCalculate = bEnabled; -} - -bool CPDFSDK_InterForm::IsCalculateEnabled() const { - return m_bCalculate; -} - -#ifdef PDF_ENABLE_XFA -void CPDFSDK_InterForm::AddXFAMap(CXFA_FFWidget* hWidget, - CPDFSDK_XFAWidget* pWidget) { - ASSERT(hWidget); - m_XFAMap[hWidget] = pWidget; -} - -void CPDFSDK_InterForm::RemoveXFAMap(CXFA_FFWidget* hWidget) { - ASSERT(hWidget); - m_XFAMap.erase(hWidget); -} - -CPDFSDK_XFAWidget* CPDFSDK_InterForm::GetXFAWidget(CXFA_FFWidget* hWidget) { - ASSERT(hWidget); - auto it = m_XFAMap.find(hWidget); - return it != m_XFAMap.end() ? it->second : nullptr; -} - -void CPDFSDK_InterForm::XfaEnableCalculate(bool bEnabled) { - m_bXfaCalculate = bEnabled; -} -bool CPDFSDK_InterForm::IsXfaCalculateEnabled() const { - return m_bXfaCalculate; -} - -bool CPDFSDK_InterForm::IsXfaValidationsEnabled() { - return m_bXfaValidationsEnabled; -} -void CPDFSDK_InterForm::XfaSetValidationsEnabled(bool bEnabled) { - m_bXfaValidationsEnabled = bEnabled; -} - -void CPDFSDK_InterForm::SynchronizeField(CPDF_FormField* pFormField) { - for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { - CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); - if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) - pWidget->Synchronize(false); - } -} -#endif // PDF_ENABLE_XFA - -void CPDFSDK_InterForm::OnCalculate(CPDF_FormField* pFormField) { - if (!m_pFormFillEnv->IsJSPlatformPresent()) - return; - - if (m_bBusy) - return; - - AutoRestorer restorer(&m_bBusy); - m_bBusy = true; - - if (!IsCalculateEnabled()) - return; - - IJS_Runtime* pRuntime = m_pFormFillEnv->GetIJSRuntime(); - int nSize = m_pInterForm->CountFieldsInCalculationOrder(); - for (int i = 0; i < nSize; i++) { - CPDF_FormField* pField = m_pInterForm->GetFieldInCalculationOrder(i); - if (!pField) - continue; - - FormFieldType fieldType = pField->GetFieldType(); - if (!IsFormFieldTypeComboOrText(fieldType)) - continue; - - CPDF_AAction aAction = pField->GetAdditionalAction(); - if (!aAction.GetDict() || !aAction.ActionExist(CPDF_AAction::Calculate)) - continue; - - CPDF_Action action = aAction.GetAction(CPDF_AAction::Calculate); - if (!action.GetDict()) - continue; - - WideString csJS = action.GetJavaScript(); - if (csJS.IsEmpty()) - continue; - - WideString sOldValue = pField->GetValue(); - WideString sValue = sOldValue; - bool bRC = true; - IJS_Runtime::ScopedEventContext pContext(pRuntime); - pContext->OnField_Calculate(pFormField, pField, &sValue, &bRC); - - Optional err = pContext->RunScript(csJS); - if (!err && bRC && sValue.Compare(sOldValue) != 0) - pField->SetValue(sValue, NotificationOption::kNotify); - } -} - -Optional CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField) { - if (!m_pFormFillEnv->IsJSPlatformPresent()) - return {}; - - WideString sValue = pFormField->GetValue(); - IJS_Runtime* pRuntime = m_pFormFillEnv->GetIJSRuntime(); - if (pFormField->GetFieldType() == FormFieldType::kComboBox && - pFormField->CountSelectedItems() > 0) { - int index = pFormField->GetSelectedIndex(0); - if (index >= 0) - sValue = pFormField->GetOptionLabel(index); - } - - CPDF_AAction aAction = pFormField->GetAdditionalAction(); - if (aAction.GetDict() && aAction.ActionExist(CPDF_AAction::Format)) { - CPDF_Action action = aAction.GetAction(CPDF_AAction::Format); - if (action.GetDict()) { - WideString script = action.GetJavaScript(); - if (!script.IsEmpty()) { - IJS_Runtime::ScopedEventContext pContext(pRuntime); - pContext->OnField_Format(pFormField, &sValue, true); - Optional err = pContext->RunScript(script); - if (!err) - return sValue; - } - } - } - return {}; -} - -void CPDFSDK_InterForm::ResetFieldAppearance(CPDF_FormField* pFormField, - Optional sValue, - bool bValueChanged) { - for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { - CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); - ASSERT(pFormCtrl); - if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) - pWidget->ResetAppearance(sValue, bValueChanged); - } -} - -void CPDFSDK_InterForm::UpdateField(CPDF_FormField* pFormField) { - auto* formfiller = m_pFormFillEnv->GetInteractiveFormFiller(); - for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { - CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); - ASSERT(pFormCtrl); - - CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl); - if (!pWidget) - continue; - - IPDF_Page* pPage = pWidget->GetPage(); - FX_RECT rect = formfiller->GetViewBBox( - m_pFormFillEnv->GetPageView(pPage, false), pWidget); - m_pFormFillEnv->Invalidate(pPage, rect); - } -} - -bool CPDFSDK_InterForm::OnKeyStrokeCommit(CPDF_FormField* pFormField, - const WideString& csValue) { - CPDF_AAction aAction = pFormField->GetAdditionalAction(); - if (!aAction.GetDict() || !aAction.ActionExist(CPDF_AAction::KeyStroke)) - return true; - - CPDF_Action action = aAction.GetAction(CPDF_AAction::KeyStroke); - if (!action.GetDict()) - return true; - - CPDFSDK_FieldAction fa; - fa.bModifier = false; - fa.bShift = false; - fa.sValue = csValue; - m_pFormFillEnv->GetActionHandler()->DoAction_FieldJavaScript( - action, CPDF_AAction::KeyStroke, m_pFormFillEnv.Get(), pFormField, &fa); - return fa.bRC; -} - -bool CPDFSDK_InterForm::OnValidate(CPDF_FormField* pFormField, - const WideString& csValue) { - CPDF_AAction aAction = pFormField->GetAdditionalAction(); - if (!aAction.GetDict() || !aAction.ActionExist(CPDF_AAction::Validate)) - return true; - - CPDF_Action action = aAction.GetAction(CPDF_AAction::Validate); - if (!action.GetDict()) - return true; - - CPDFSDK_FieldAction fa; - fa.bModifier = false; - fa.bShift = false; - fa.sValue = csValue; - m_pFormFillEnv->GetActionHandler()->DoAction_FieldJavaScript( - action, CPDF_AAction::Validate, m_pFormFillEnv.Get(), pFormField, &fa); - return fa.bRC; -} - -bool CPDFSDK_InterForm::DoAction_Hide(const CPDF_Action& action) { - ASSERT(action.GetDict()); - - CPDF_ActionFields af(&action); - std::vector fieldObjects = af.GetAllFields(); - std::vector fields = GetFieldFromObjects(fieldObjects); - - bool bHide = action.GetHideStatus(); - bool bChanged = false; - - 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)) { - uint32_t nFlags = pWidget->GetFlags(); - nFlags &= ~ANNOTFLAG_INVISIBLE; - nFlags &= ~ANNOTFLAG_NOVIEW; - if (bHide) - nFlags |= ANNOTFLAG_HIDDEN; - else - nFlags &= ~ANNOTFLAG_HIDDEN; - pWidget->SetFlags(nFlags); - pWidget->GetPageView()->UpdateView(pWidget); - bChanged = true; - } - } - } - - return bChanged; -} - -bool CPDFSDK_InterForm::DoAction_SubmitForm(const CPDF_Action& action) { - WideString sDestination = action.GetFilePath(); - if (sDestination.IsEmpty()) - return false; - - const CPDF_Dictionary* pActionDict = action.GetDict(); - if (pActionDict->KeyExist("Fields")) { - CPDF_ActionFields af(&action); - uint32_t dwFlags = action.GetFlags(); - std::vector fieldObjects = af.GetAllFields(); - std::vector 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(nullptr, true)) - return false; - - return SubmitForm(sDestination, false); -} - -bool CPDFSDK_InterForm::SubmitFields(const WideString& csDestination, - const std::vector& fields, - bool bIncludeOrExclude, - bool bUrlEncoded) { - ByteString textBuf = ExportFieldsToFDFTextBuf(fields, bIncludeOrExclude); - if (textBuf.IsEmpty()) - return false; - - std::vector buffer(textBuf.begin(), textBuf.end()); - if (bUrlEncoded && !FDFToURLEncodedData(&buffer)) - return false; - - m_pFormFillEnv->JS_docSubmitForm(buffer.data(), buffer.size(), csDestination); - return true; -} - -ByteString CPDFSDK_InterForm::ExportFieldsToFDFTextBuf( - const std::vector& fields, - bool bIncludeOrExclude) { - std::unique_ptr pFDF = m_pInterForm->ExportToFDF( - m_pFormFillEnv->JS_docGetFilePath(), fields, bIncludeOrExclude, false); - - return pFDF ? pFDF->WriteToString() : ByteString(); -} - -bool CPDFSDK_InterForm::SubmitForm(const WideString& sDestination, - bool bUrlEncoded) { - if (sDestination.IsEmpty()) - return false; - - std::unique_ptr pFDFDoc = - m_pInterForm->ExportToFDF(m_pFormFillEnv->JS_docGetFilePath(), false); - if (!pFDFDoc) - return false; - - ByteString fdfBuffer = pFDFDoc->WriteToString(); - if (fdfBuffer.IsEmpty()) - return false; - - std::vector buffer(fdfBuffer.begin(), fdfBuffer.end()); - if (bUrlEncoded && !FDFToURLEncodedData(&buffer)) - return false; - - m_pFormFillEnv->JS_docSubmitForm(buffer.data(), buffer.size(), sDestination); - return true; -} - -ByteString CPDFSDK_InterForm::ExportFormToFDFTextBuf() { - std::unique_ptr pFDF = - m_pInterForm->ExportToFDF(m_pFormFillEnv->JS_docGetFilePath(), false); - - return pFDF ? pFDF->WriteToString() : ByteString(); -} - -void CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action) { - ASSERT(action.GetDict()); - const CPDF_Dictionary* pActionDict = action.GetDict(); - if (!pActionDict->KeyExist("Fields")) { - m_pInterForm->ResetForm(NotificationOption::kNotify); - return; - } - CPDF_ActionFields af(&action); - uint32_t dwFlags = action.GetFlags(); - std::vector fieldObjects = af.GetAllFields(); - std::vector fields = GetFieldFromObjects(fieldObjects); - m_pInterForm->ResetForm(fields, !(dwFlags & 0x01), - NotificationOption::kNotify); -} - -std::vector CPDFSDK_InterForm::GetFieldFromObjects( - const std::vector& objects) const { - std::vector fields; - for (const CPDF_Object* pObject : objects) { - if (!pObject || !pObject->IsString()) - continue; - - WideString csName = pObject->GetUnicodeText(); - CPDF_FormField* pField = m_pInterForm->GetField(0, csName); - if (pField) - fields.push_back(pField); - } - return fields; -} - -bool CPDFSDK_InterForm::BeforeValueChange(CPDF_FormField* pField, - const WideString& csValue) { - FormFieldType fieldType = pField->GetFieldType(); - if (!IsFormFieldTypeComboOrText(fieldType)) - return true; - if (!OnKeyStrokeCommit(pField, csValue)) - return false; - return OnValidate(pField, csValue); -} - -void CPDFSDK_InterForm::AfterValueChange(CPDF_FormField* pField) { -#ifdef PDF_ENABLE_XFA - SynchronizeField(pField); -#endif // PDF_ENABLE_XFA - - FormFieldType fieldType = pField->GetFieldType(); - if (!IsFormFieldTypeComboOrText(fieldType)) - return; - - OnCalculate(pField); - ResetFieldAppearance(pField, OnFormat(pField), true); - UpdateField(pField); -} - -bool CPDFSDK_InterForm::BeforeSelectionChange(CPDF_FormField* pField, - const WideString& csValue) { - if (pField->GetFieldType() != FormFieldType::kListBox) - return true; - if (!OnKeyStrokeCommit(pField, csValue)) - return false; - return OnValidate(pField, csValue); -} - -void CPDFSDK_InterForm::AfterSelectionChange(CPDF_FormField* pField) { - if (pField->GetFieldType() != FormFieldType::kListBox) - return; - - OnCalculate(pField); - ResetFieldAppearance(pField, pdfium::nullopt, true); - UpdateField(pField); -} - -void CPDFSDK_InterForm::AfterCheckedStatusChange(CPDF_FormField* pField) { - FormFieldType fieldType = pField->GetFieldType(); - if (fieldType != FormFieldType::kCheckBox && - fieldType != FormFieldType::kRadioButton) - return; - - OnCalculate(pField); - UpdateField(pField); -} - -void CPDFSDK_InterForm::AfterFormReset(CPDF_InterForm* pForm) { - OnCalculate(nullptr); -} - -bool CPDFSDK_InterForm::IsNeedHighLight(FormFieldType fieldType) const { - if (fieldType == FormFieldType::kUnknown) - return false; - -#ifdef PDF_ENABLE_XFA - // For the XFA fields, we need to return if the specific field type has - // highlight enabled or if the general XFA field type has it enabled. - if (IsFormFieldTypeXFA(fieldType)) { - if (!m_NeedsHighlight[static_cast(fieldType)]) - return m_NeedsHighlight[static_cast(FormFieldType::kXFA)]; - } -#endif // PDF_ENABLE_XFA - return m_NeedsHighlight[static_cast(fieldType)]; -} - -void CPDFSDK_InterForm::RemoveAllHighLights() { - std::fill(m_HighlightColor, m_HighlightColor + kFormFieldTypeCount, - kWhiteBGR); - std::fill(m_NeedsHighlight, m_NeedsHighlight + kFormFieldTypeCount, false); -} - -void CPDFSDK_InterForm::SetHighlightColor(FX_COLORREF clr, - FormFieldType fieldType) { - if (fieldType == FormFieldType::kUnknown) - return; - - m_HighlightColor[static_cast(fieldType)] = clr; - m_NeedsHighlight[static_cast(fieldType)] = true; -} - -void CPDFSDK_InterForm::SetAllHighlightColors(FX_COLORREF clr) { - for (auto type : kFormFieldTypes) { - m_HighlightColor[static_cast(type)] = clr; - m_NeedsHighlight[static_cast(type)] = true; - } -} - -FX_COLORREF CPDFSDK_InterForm::GetHighlightColor(FormFieldType fieldType) { - if (fieldType == FormFieldType::kUnknown) - return kWhiteBGR; - -#ifdef PDF_ENABLE_XFA - // For the XFA fields, we need to return the specific field type highlight - // colour or the general XFA field type colour if present. - if (IsFormFieldTypeXFA(fieldType)) { - if (!m_NeedsHighlight[static_cast(fieldType)] && - m_NeedsHighlight[static_cast(FormFieldType::kXFA)]) { - return m_HighlightColor[static_cast(FormFieldType::kXFA)]; - } - } -#endif // PDF_ENABLE_XFA - return m_HighlightColor[static_cast(fieldType)]; -} diff --git a/fpdfsdk/cpdfsdk_interform.h b/fpdfsdk/cpdfsdk_interform.h deleted file mode 100644 index 2a34c23748..0000000000 --- a/fpdfsdk/cpdfsdk_interform.h +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright 2016 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef FPDFSDK_CPDFSDK_INTERFORM_H_ -#define FPDFSDK_CPDFSDK_INTERFORM_H_ - -#include -#include -#include - -#include "core/fpdfdoc/cpdf_action.h" -#include "core/fpdfdoc/ipdf_formnotify.h" -#include "core/fxcrt/unowned_ptr.h" -#include "core/fxge/fx_dib.h" -#include "fpdfsdk/cpdfsdk_widget.h" -#include "third_party/base/optional.h" - -class CPDF_Dictionary; -class CPDF_FormControl; -class CPDF_FormField; -class CPDF_InterForm; -class CPDF_Object; -class CPDFSDK_FormFillEnvironment; - -#ifdef PDF_ENABLE_XFA -class CPDFSDK_XFAWidget; -class CXFA_FFWidget; -#endif // PDF_ENABLE_XFA - -class CPDFSDK_InterForm final : public IPDF_FormNotify { - public: - explicit CPDFSDK_InterForm(CPDFSDK_FormFillEnvironment* pFormFillEnv); - ~CPDFSDK_InterForm() override; - - CPDF_InterForm* GetInterForm() const { return m_pInterForm.get(); } - CPDFSDK_FormFillEnvironment* GetFormFillEnv() const { - return m_pFormFillEnv.Get(); - } - - CPDFSDK_Widget* GetSibling(CPDFSDK_Widget* pWidget, bool bNext) const; - CPDFSDK_Widget* GetWidget(CPDF_FormControl* pControl) const; - void GetWidgets(const WideString& sFieldName, - std::vector* widgets) const; - void GetWidgets(CPDF_FormField* pField, - std::vector* widgets) const; - - void AddMap(CPDF_FormControl* pControl, CPDFSDK_Widget* pWidget); - void RemoveMap(CPDF_FormControl* pControl); - - void EnableCalculate(bool bEnabled); - bool IsCalculateEnabled() const; - -#ifdef PDF_ENABLE_XFA - void AddXFAMap(CXFA_FFWidget* hWidget, CPDFSDK_XFAWidget* pWidget); - void RemoveXFAMap(CXFA_FFWidget* hWidget); - CPDFSDK_XFAWidget* GetXFAWidget(CXFA_FFWidget* hWidget); - void XfaEnableCalculate(bool bEnabled); - bool IsXfaCalculateEnabled() const; - bool IsXfaValidationsEnabled(); - void XfaSetValidationsEnabled(bool bEnabled); - void SynchronizeField(CPDF_FormField* pFormField); -#endif // PDF_ENABLE_XFA - - bool OnKeyStrokeCommit(CPDF_FormField* pFormField, const WideString& csValue); - bool OnValidate(CPDF_FormField* pFormField, const WideString& csValue); - void OnCalculate(CPDF_FormField* pFormField); - Optional OnFormat(CPDF_FormField* pFormField); - - void ResetFieldAppearance(CPDF_FormField* pFormField, - Optional sValue, - bool bValueChanged); - void UpdateField(CPDF_FormField* pFormField); - - bool DoAction_Hide(const CPDF_Action& action); - bool DoAction_SubmitForm(const CPDF_Action& action); - void DoAction_ResetForm(const CPDF_Action& action); - - std::vector GetFieldFromObjects( - const std::vector& objects) const; - bool IsValidField(CPDF_Dictionary* pFieldDict); - bool SubmitFields(const WideString& csDestination, - const std::vector& fields, - bool bIncludeOrExclude, - bool bUrlEncoded); - bool SubmitForm(const WideString& sDestination, bool bUrlEncoded); - ByteString ExportFormToFDFTextBuf(); - ByteString ExportFieldsToFDFTextBuf( - const std::vector& fields, - bool bIncludeOrExclude); - - bool IsNeedHighLight(FormFieldType fieldType) const; - void RemoveAllHighLights(); - void SetHighlightAlpha(uint8_t alpha) { m_HighlightAlpha = alpha; } - uint8_t GetHighlightAlpha() { return m_HighlightAlpha; } - void SetHighlightColor(FX_COLORREF clr, FormFieldType fieldType); - void SetAllHighlightColors(FX_COLORREF clr); - FX_COLORREF GetHighlightColor(FormFieldType fieldType); - - private: - // IPDF_FormNotify: - bool BeforeValueChange(CPDF_FormField* pField, - const WideString& csValue) override; - void AfterValueChange(CPDF_FormField* pField) override; - bool BeforeSelectionChange(CPDF_FormField* pField, - const WideString& csValue) override; - void AfterSelectionChange(CPDF_FormField* pField) override; - void AfterCheckedStatusChange(CPDF_FormField* pField) override; - void AfterFormReset(CPDF_InterForm* pForm) override; - - int GetPageIndexByAnnotDict(CPDF_Document* pDocument, - CPDF_Dictionary* pAnnotDict) const; - - UnownedPtr const m_pFormFillEnv; - std::unique_ptr const m_pInterForm; - std::map m_Map; -#ifdef PDF_ENABLE_XFA - std::map m_XFAMap; - bool m_bXfaCalculate = true; - bool m_bXfaValidationsEnabled = true; -#endif // PDF_ENABLE_XFA - bool m_bCalculate = true; - bool m_bBusy = false; - - uint8_t m_HighlightAlpha = 0; - FX_COLORREF m_HighlightColor[kFormFieldTypeCount]; - bool m_NeedsHighlight[kFormFieldTypeCount]; -}; - -#endif // FPDFSDK_CPDFSDK_INTERFORM_H_ diff --git a/fpdfsdk/cpdfsdk_pageview.cpp b/fpdfsdk/cpdfsdk_pageview.cpp index 408dba4b2e..7a49dfe412 100644 --- a/fpdfsdk/cpdfsdk_pageview.cpp +++ b/fpdfsdk/cpdfsdk_pageview.cpp @@ -13,12 +13,12 @@ #include "core/fpdfapi/parser/cpdf_document.h" #include "core/fpdfapi/render/cpdf_renderoptions.h" #include "core/fpdfdoc/cpdf_annotlist.h" -#include "core/fpdfdoc/cpdf_interform.h" +#include "core/fpdfdoc/cpdf_interactiveform.h" #include "core/fxcrt/autorestorer.h" #include "fpdfsdk/cpdfsdk_annot.h" #include "fpdfsdk/cpdfsdk_annotiteration.h" #include "fpdfsdk/cpdfsdk_formfillenvironment.h" -#include "fpdfsdk/cpdfsdk_interform.h" +#include "fpdfsdk/cpdfsdk_interactiveform.h" #include "third_party/base/ptr_util.h" #ifdef PDF_ENABLE_XFA diff --git a/fpdfsdk/cpdfsdk_widget.cpp b/fpdfsdk/cpdfsdk_widget.cpp index 727035122d..f41d230d1c 100644 --- a/fpdfsdk/cpdfsdk_widget.cpp +++ b/fpdfsdk/cpdfsdk_widget.cpp @@ -19,14 +19,14 @@ #include "core/fpdfdoc/cpdf_formcontrol.h" #include "core/fpdfdoc/cpdf_formfield.h" #include "core/fpdfdoc/cpdf_iconfit.h" -#include "core/fpdfdoc/cpdf_interform.h" +#include "core/fpdfdoc/cpdf_interactiveform.h" #include "core/fxge/cfx_graphstatedata.h" #include "core/fxge/cfx_pathdata.h" #include "core/fxge/cfx_renderdevice.h" #include "fpdfsdk/cpdfsdk_actionhandler.h" #include "fpdfsdk/cpdfsdk_formfillenvironment.h" #include "fpdfsdk/cpdfsdk_helpers.h" -#include "fpdfsdk/cpdfsdk_interform.h" +#include "fpdfsdk/cpdfsdk_interactiveform.h" #include "fpdfsdk/cpdfsdk_pageview.h" #include "fpdfsdk/formfiller/cba_fontmap.h" #include "fpdfsdk/pwl/cpwl_appstream.h" diff --git a/fpdfsdk/cpdfsdk_widgethandler.cpp b/fpdfsdk/cpdfsdk_widgethandler.cpp index 7dfedad2cd..70528d8d52 100644 --- a/fpdfsdk/cpdfsdk_widgethandler.cpp +++ b/fpdfsdk/cpdfsdk_widgethandler.cpp @@ -11,10 +11,10 @@ #include "core/fpdfapi/page/cpdf_page.h" #include "core/fpdfapi/parser/cpdf_document.h" -#include "core/fpdfdoc/cpdf_interform.h" +#include "core/fpdfdoc/cpdf_interactiveform.h" #include "fpdfsdk/cpdfsdk_annot.h" #include "fpdfsdk/cpdfsdk_formfillenvironment.h" -#include "fpdfsdk/cpdfsdk_interform.h" +#include "fpdfsdk/cpdfsdk_interactiveform.h" #include "fpdfsdk/cpdfsdk_pageview.h" #include "fpdfsdk/cpdfsdk_widget.h" #include "fpdfsdk/formfiller/cffl_formfiller.h" diff --git a/fpdfsdk/cpdfsdk_xfawidgethandler.cpp b/fpdfsdk/cpdfsdk_xfawidgethandler.cpp index 1660f86af3..cc49c31d0b 100644 --- a/fpdfsdk/cpdfsdk_xfawidgethandler.cpp +++ b/fpdfsdk/cpdfsdk_xfawidgethandler.cpp @@ -6,10 +6,10 @@ #include "fpdfsdk/cpdfsdk_xfawidgethandler.h" -#include "core/fpdfdoc/cpdf_interform.h" +#include "core/fpdfdoc/cpdf_interactiveform.h" #include "fpdfsdk/cpdfsdk_annot.h" #include "fpdfsdk/cpdfsdk_formfillenvironment.h" -#include "fpdfsdk/cpdfsdk_interform.h" +#include "fpdfsdk/cpdfsdk_interactiveform.h" #include "fpdfsdk/cpdfsdk_pageview.h" #include "fpdfsdk/cpdfsdk_xfawidget.h" #include "fpdfsdk/fpdfxfa/cpdfxfa_context.h" diff --git a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp index e1d28c86b2..d5ca80222f 100644 --- a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp +++ b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp @@ -13,7 +13,7 @@ #include "core/fxge/cfx_pathdata.h" #include "core/fxge/cfx_renderdevice.h" #include "fpdfsdk/cpdfsdk_formfillenvironment.h" -#include "fpdfsdk/cpdfsdk_interform.h" +#include "fpdfsdk/cpdfsdk_interactiveform.h" #include "fpdfsdk/cpdfsdk_pageview.h" #include "fpdfsdk/cpdfsdk_widget.h" #include "fpdfsdk/formfiller/cffl_checkbox.h" diff --git a/fpdfsdk/fpdf_annot.cpp b/fpdfsdk/fpdf_annot.cpp index fe7d9fa012..8595357488 100644 --- a/fpdfsdk/fpdf_annot.cpp +++ b/fpdfsdk/fpdf_annot.cpp @@ -19,7 +19,7 @@ #include "core/fpdfapi/parser/cpdf_string.h" #include "core/fpdfdoc/cpdf_annot.h" #include "core/fpdfdoc/cpdf_formfield.h" -#include "core/fpdfdoc/cpdf_interform.h" +#include "core/fpdfdoc/cpdf_interactiveform.h" #include "core/fpdfdoc/cpvt_generateap.h" #include "core/fxge/cfx_color.h" #include "fpdfsdk/cpdf_annotcontext.h" diff --git a/fpdfsdk/fpdf_ext.cpp b/fpdfsdk/fpdf_ext.cpp index 94c84dfb8f..1ff27cc94d 100644 --- a/fpdfsdk/fpdf_ext.cpp +++ b/fpdfsdk/fpdf_ext.cpp @@ -9,7 +9,7 @@ #include "core/fpdfapi/cpdf_modulemgr.h" #include "core/fpdfapi/parser/cpdf_dictionary.h" #include "core/fpdfapi/parser/cpdf_document.h" -#include "core/fpdfdoc/cpdf_interform.h" +#include "core/fpdfdoc/cpdf_interactiveform.h" #include "core/fpdfdoc/cpdf_metadata.h" #include "core/fxcrt/fx_extension.h" #include "fpdfsdk/cpdfsdk_helpers.h" diff --git a/fpdfsdk/fpdf_formfill.cpp b/fpdfsdk/fpdf_formfill.cpp index 1d3f06fc1e..203017798b 100644 --- a/fpdfsdk/fpdf_formfill.cpp +++ b/fpdfsdk/fpdf_formfill.cpp @@ -15,13 +15,13 @@ #include "core/fpdfapi/render/cpdf_renderoptions.h" #include "core/fpdfdoc/cpdf_formcontrol.h" #include "core/fpdfdoc/cpdf_formfield.h" -#include "core/fpdfdoc/cpdf_interform.h" +#include "core/fpdfdoc/cpdf_interactiveform.h" #include "core/fpdfdoc/cpdf_occontext.h" #include "core/fxge/cfx_defaultrenderdevice.h" #include "fpdfsdk/cpdfsdk_actionhandler.h" #include "fpdfsdk/cpdfsdk_formfillenvironment.h" #include "fpdfsdk/cpdfsdk_helpers.h" -#include "fpdfsdk/cpdfsdk_interform.h" +#include "fpdfsdk/cpdfsdk_interactiveform.h" #include "fpdfsdk/cpdfsdk_pageview.h" #include "public/fpdfview.h" #include "third_party/base/ptr_util.h" diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp index d95d242c48..8c89895292 100644 --- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp +++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp @@ -15,7 +15,7 @@ #include "core/fpdfapi/parser/cpdf_string.h" #include "core/fxcrt/retain_ptr.h" #include "fpdfsdk/cpdfsdk_formfillenvironment.h" -#include "fpdfsdk/cpdfsdk_interform.h" +#include "fpdfsdk/cpdfsdk_interactiveform.h" #include "fpdfsdk/cpdfsdk_pageview.h" #include "fpdfsdk/fpdfxfa/cpdfxfa_context.h" #include "fpdfsdk/fpdfxfa/cpdfxfa_page.h" diff --git a/fpdfsdk/pwl/cpwl_appstream.cpp b/fpdfsdk/pwl/cpwl_appstream.cpp index d2ffd2a9b1..dd86ef5d32 100644 --- a/fpdfsdk/pwl/cpwl_appstream.cpp +++ b/fpdfsdk/pwl/cpwl_appstream.cpp @@ -18,7 +18,7 @@ #include "core/fpdfapi/parser/fpdf_parser_decode.h" #include "core/fpdfdoc/cpvt_word.h" #include "fpdfsdk/cpdfsdk_formfillenvironment.h" -#include "fpdfsdk/cpdfsdk_interform.h" +#include "fpdfsdk/cpdfsdk_interactiveform.h" #include "fpdfsdk/cpdfsdk_pageview.h" #include "fpdfsdk/cpdfsdk_widget.h" #include "fpdfsdk/formfiller/cba_fontmap.h" -- cgit v1.2.3