14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2016 PDFium Authors. All rights reserved. 24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file. 44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cpdfsdk_interform.h" 84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <algorithm> 104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <memory> 114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <vector> 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/page/cpdf_page.h" 144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cfdf_document.h" 154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_array.h" 164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_document.h" 174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_stream.h" 184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_actionfields.h" 194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpdf_interform.h" 204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/cfx_graphstatedata.h" 214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/cfx_pathdata.h" 224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/cfx_renderdevice.h" 234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cba_annotiterator.h" 244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cpdfsdk_annot.h" 254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cpdfsdk_formfillenvironment.h" 264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cpdfsdk_pageview.h" 274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cpdfsdk_widget.h" 284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/formfiller/cffl_formfiller.h" 294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/fsdk_actionhandler.h" 304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/fsdk_define.h" 314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/fxedit/fxet_edit.h" 324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/ipdfsdk_annothandler.h" 335ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann#include "fpdfsdk/javascript/ijs_event_context.h" 344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/ijs_runtime.h" 354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/pdfwindow/PWL_Utils.h" 364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "third_party/base/stl_util.h" 374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifdef PDF_ENABLE_XFA 394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/cpdfsdk_xfawidget.h" 404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/fpdfxfa/cpdfxfa_context.h" 414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h" 424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/cxfa_eventparam.h" 434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/xfa_ffdocview.h" 444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/xfa_ffwidget.h" 454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/xfa_ffwidgethandler.h" 464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif // PDF_ENABLE_XFA 474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPDFSDK_InterForm::CPDFSDK_InterForm(CPDFSDK_FormFillEnvironment* pFormFillEnv) 494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann : m_pFormFillEnv(pFormFillEnv), 504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pInterForm(new CPDF_InterForm(m_pFormFillEnv->GetPDFDocument())), 514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifdef PDF_ENABLE_XFA 524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bXfaCalculate(true), 534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bXfaValidationsEnabled(true), 544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif // PDF_ENABLE_XFA 554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bCalculate(true), 564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bBusy(false), 574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_iHighlightAlpha(0) { 584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pInterForm->SetFormNotify(this); 594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (int i = 0; i < kNumFieldTypes; ++i) 604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bNeedHightlight[i] = false; 614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPDFSDK_InterForm::~CPDFSDK_InterForm() { 644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_Map.clear(); 654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifdef PDF_ENABLE_XFA 664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_XFAMap.clear(); 674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif // PDF_ENABLE_XFA 684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::HighlightWidgets() { 714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPDFSDK_Widget* CPDFSDK_InterForm::GetSibling(CPDFSDK_Widget* pWidget, 754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bNext) const { 764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::unique_ptr<CBA_AnnotIterator> pIterator(new CBA_AnnotIterator( 774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pWidget->GetPageView(), CPDF_Annot::Subtype::WIDGET)); 784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bNext) 804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return static_cast<CPDFSDK_Widget*>(pIterator->GetNextAnnot(pWidget)); 814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return static_cast<CPDFSDK_Widget*>(pIterator->GetPrevAnnot(pWidget)); 834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const { 864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pControl || !m_pInterForm) 874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return nullptr; 884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDFSDK_Widget* pWidget = nullptr; 904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const auto it = m_Map.find(pControl); 914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (it != m_Map.end()) 924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pWidget = it->second; 934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pWidget) 944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pWidget; 954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pControlDict = pControl->GetWidget(); 974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument(); 984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDFSDK_PageView* pPage = nullptr; 994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Dictionary* pPageDict = pControlDict->GetDictFor("P")) { 1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int nPageIndex = pDocument->GetPageIndex(pPageDict->GetObjNum()); 1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (nPageIndex >= 0) 1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pPage = m_pFormFillEnv->GetPageView(nPageIndex); 1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pPage) { 1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int nPageIndex = GetPageIndexByAnnotDict(pDocument, pControlDict); 1084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (nPageIndex >= 0) 1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pPage = m_pFormFillEnv->GetPageView(nPageIndex); 1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pPage) 1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return nullptr; 1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return static_cast<CPDFSDK_Widget*>(pPage->GetAnnotByDict(pControlDict)); 1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::GetWidgets( 1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_WideString& sFieldName, 1204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::vector<CPDFSDK_Annot::ObservedPtr>* widgets) const { 1214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (int i = 0, sz = m_pInterForm->CountFields(sFieldName); i < sz; ++i) { 1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormField* pFormField = m_pInterForm->GetField(i, sFieldName); 1234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ASSERT(pFormField); 1244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann GetWidgets(pFormField, widgets); 1254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::GetWidgets( 1294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormField* pField, 1304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::vector<CPDFSDK_Annot::ObservedPtr>* widgets) const { 1314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (int i = 0, sz = pField->CountControls(); i < sz; ++i) { 1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormControl* pFormCtrl = pField->GetControl(i); 1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ASSERT(pFormCtrl); 1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl); 1354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pWidget) 1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann widgets->emplace_back(pWidget); 1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint CPDFSDK_InterForm::GetPageIndexByAnnotDict( 1414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Document* pDocument, 1424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pAnnotDict) const { 1434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ASSERT(pAnnotDict); 1444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (int i = 0, sz = pDocument->GetPageCount(); i < sz; i++) { 1464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Dictionary* pPageDict = pDocument->GetPage(i)) { 1474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDF_Array* pAnnots = pPageDict->GetArrayFor("Annots")) { 1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (int j = 0, jsz = pAnnots->GetCount(); j < jsz; j++) { 1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Object* pDict = pAnnots->GetDirectObjectAt(j); 1504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pAnnotDict == pDict) 1514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return i; 1524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 1564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return -1; 1584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::AddMap(CPDF_FormControl* pControl, 1614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDFSDK_Widget* pWidget) { 1624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_Map[pControl] = pWidget; 1634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::RemoveMap(CPDF_FormControl* pControl) { 1664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_Map.erase(pControl); 1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::EnableCalculate(bool bEnabled) { 1704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bCalculate = bEnabled; 1714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::IsCalculateEnabled() const { 1744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_bCalculate; 1754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifdef PDF_ENABLE_XFA 1784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::AddXFAMap(CXFA_FFWidget* hWidget, 1794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDFSDK_XFAWidget* pWidget) { 1804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ASSERT(hWidget); 1814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_XFAMap[hWidget] = pWidget; 1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::RemoveXFAMap(CXFA_FFWidget* hWidget) { 1854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ASSERT(hWidget); 1864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_XFAMap.erase(hWidget); 1874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPDFSDK_XFAWidget* CPDFSDK_InterForm::GetXFAWidget(CXFA_FFWidget* hWidget) { 1904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ASSERT(hWidget); 1914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann auto it = m_XFAMap.find(hWidget); 1924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return it != m_XFAMap.end() ? it->second : nullptr; 1934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::XfaEnableCalculate(bool bEnabled) { 1964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bXfaCalculate = bEnabled; 1974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 1984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::IsXfaCalculateEnabled() const { 1994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_bXfaCalculate; 2004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::IsXfaValidationsEnabled() { 2034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_bXfaValidationsEnabled; 2044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::XfaSetValidationsEnabled(bool bEnabled) { 2064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bXfaValidationsEnabled = bEnabled; 2074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::SynchronizeField(CPDF_FormField* pFormField, 2104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bSynchronizeElse) { 2114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { 2124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); 2134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) 2144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pWidget->Synchronize(bSynchronizeElse); 2154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif // PDF_ENABLE_XFA 2184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::OnCalculate(CPDF_FormField* pFormField) { 2204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_pFormFillEnv->IsJSInitiated()) 2214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 2224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_bBusy) 2244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 2254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bBusy = true; 2274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!IsCalculateEnabled()) { 2294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bBusy = false; 2304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 2314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann IJS_Runtime* pRuntime = m_pFormFillEnv->GetJSRuntime(); 2344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int nSize = m_pInterForm->CountFieldsInCalculationOrder(); 2354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (int i = 0; i < nSize; i++) { 2364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormField* pField = m_pInterForm->GetFieldInCalculationOrder(i); 2374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pField) 2384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann continue; 2394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int nType = pField->GetFieldType(); 2414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (nType != FIELDTYPE_COMBOBOX && nType != FIELDTYPE_TEXTFIELD) 2424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann continue; 2434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_AAction aAction = pField->GetAdditionalAction(); 2454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!aAction.GetDict() || !aAction.ActionExist(CPDF_AAction::Calculate)) 2464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann continue; 2474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Action action = aAction.GetAction(CPDF_AAction::Calculate); 2494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!action.GetDict()) 2504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann continue; 2514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString csJS = action.GetJavaScript(); 2534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (csJS.IsEmpty()) 2544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann continue; 2554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2565ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann IJS_EventContext* pContext = pRuntime->NewEventContext(); 2574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString sOldValue = pField->GetValue(); 2584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString sValue = sOldValue; 2594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bRC = true; 2604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pContext->OnField_Calculate(pFormField, pField, sValue, bRC); 2614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString sInfo; 2634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bRet = pContext->RunScript(csJS, &sInfo); 2645ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann pRuntime->ReleaseEventContext(pContext); 2654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bRet && bRC && sValue.Compare(sOldValue) != 0) 2664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pField->SetValue(sValue, true); 2674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bBusy = false; 2694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 2704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_WideString CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField, 2724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool& bFormatted) { 2734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString sValue = pFormField->GetValue(); 2744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_pFormFillEnv->IsJSInitiated()) { 2754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bFormatted = false; 2764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return sValue; 2774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann IJS_Runtime* pRuntime = m_pFormFillEnv->GetJSRuntime(); 2804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX && 2814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pFormField->CountSelectedItems() > 0) { 2824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int index = pFormField->GetSelectedIndex(0); 2834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (index >= 0) 2844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sValue = pFormField->GetOptionLabel(index); 2854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 2864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bFormatted = false; 2884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_AAction aAction = pFormField->GetAdditionalAction(); 2904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (aAction.GetDict() && aAction.ActionExist(CPDF_AAction::Format)) { 2914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Action action = aAction.GetAction(CPDF_AAction::Format); 2924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (action.GetDict()) { 2934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString script = action.GetJavaScript(); 2944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!script.IsEmpty()) { 2954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString Value = sValue; 2964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 2975ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann IJS_EventContext* pContext = pRuntime->NewEventContext(); 2984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pContext->OnField_Format(pFormField, Value, true); 2994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString sInfo; 3004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bRet = pContext->RunScript(script, &sInfo); 3015ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann pRuntime->ReleaseEventContext(pContext); 3024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bRet) { 3034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann sValue = Value; 3044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bFormatted = true; 3054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return sValue; 3104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 3114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::ResetFieldAppearance(CPDF_FormField* pFormField, 3134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_WideString* sValue, 3144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bValueChanged) { 3154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { 3164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); 3174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ASSERT(pFormCtrl); 3184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) 3194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pWidget->ResetAppearance(sValue, bValueChanged); 3204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 3224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::UpdateField(CPDF_FormField* pFormField) { 3245ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann auto formfiller = m_pFormFillEnv->GetInteractiveFormFiller(); 3254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) { 3264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormControl* pFormCtrl = pFormField->GetControl(i); 3274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ASSERT(pFormCtrl); 3284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) { 3304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann UnderlyingPageType* pPage = pWidget->GetUnderlyingPage(); 3315ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann m_pFormFillEnv->Invalidate( 3325ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann pPage, formfiller->GetViewBBox( 3335ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann m_pFormFillEnv->GetPageView(pPage, false), pWidget)); 3344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 3364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 3374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::OnKeyStrokeCommit(CPDF_FormField* pFormField, 3394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_WideString& csValue) { 3404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_AAction aAction = pFormField->GetAdditionalAction(); 3414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!aAction.GetDict() || !aAction.ActionExist(CPDF_AAction::KeyStroke)) 3424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 3434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Action action = aAction.GetAction(CPDF_AAction::KeyStroke); 3454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!action.GetDict()) 3464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 3474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDFSDK_ActionHandler* pActionHandler = m_pFormFillEnv->GetActionHander(); 3494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PDFSDK_FieldAction fa; 3504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fa.bModifier = m_pFormFillEnv->IsCTRLKeyDown(0); 3514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fa.bShift = m_pFormFillEnv->IsSHIFTKeyDown(0); 3524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fa.sValue = csValue; 3534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::KeyStroke, 3544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pFormFillEnv, pFormField, fa); 3554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return fa.bRC; 3564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 3574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::OnValidate(CPDF_FormField* pFormField, 3594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_WideString& csValue) { 3604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_AAction aAction = pFormField->GetAdditionalAction(); 3614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!aAction.GetDict() || !aAction.ActionExist(CPDF_AAction::Validate)) 3624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 3634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Action action = aAction.GetAction(CPDF_AAction::Validate); 3654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!action.GetDict()) 3664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 3674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDFSDK_ActionHandler* pActionHandler = m_pFormFillEnv->GetActionHander(); 3694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PDFSDK_FieldAction fa; 3704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fa.bModifier = m_pFormFillEnv->IsCTRLKeyDown(0); 3714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fa.bShift = m_pFormFillEnv->IsSHIFTKeyDown(0); 3724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fa.sValue = csValue; 3734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::Validate, 3744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pFormFillEnv, pFormField, fa); 3754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return fa.bRC; 3764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 3774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::DoAction_Hide(const CPDF_Action& action) { 3794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ASSERT(action.GetDict()); 3804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_ActionFields af(&action); 3824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::vector<CPDF_Object*> fieldObjects = af.GetAllFields(); 3834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::vector<CPDF_FormField*> fields = GetFieldFromObjects(fieldObjects); 3844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bHide = action.GetHideStatus(); 3864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bChanged = false; 3874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (CPDF_FormField* pField : fields) { 3894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (int i = 0, sz = pField->CountControls(); i < sz; ++i) { 3904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormControl* pControl = pField->GetControl(i); 3914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ASSERT(pControl); 3924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 3934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CPDFSDK_Widget* pWidget = GetWidget(pControl)) { 3944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t nFlags = pWidget->GetFlags(); 3954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nFlags &= ~ANNOTFLAG_INVISIBLE; 3964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nFlags &= ~ANNOTFLAG_NOVIEW; 3974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bHide) 3984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nFlags |= ANNOTFLAG_HIDDEN; 3994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann else 4004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nFlags &= ~ANNOTFLAG_HIDDEN; 4014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pWidget->SetFlags(nFlags); 4024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pWidget->GetPageView()->UpdateView(pWidget); 4034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bChanged = true; 4044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return bChanged; 4094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 4104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::DoAction_SubmitForm(const CPDF_Action& action) { 4124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString sDestination = action.GetFilePath(); 4134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sDestination.IsEmpty()) 4144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 4154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pActionDict = action.GetDict(); 4174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pActionDict->KeyExist("Fields")) { 4184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_ActionFields af(&action); 4194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t dwFlags = action.GetFlags(); 4204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::vector<CPDF_Object*> fieldObjects = af.GetAllFields(); 4214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::vector<CPDF_FormField*> fields = GetFieldFromObjects(fieldObjects); 4224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!fields.empty()) { 4234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bIncludeOrExclude = !(dwFlags & 0x01); 4245ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann if (!m_pInterForm->CheckRequiredFields(&fields, bIncludeOrExclude)) 4254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 4264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return SubmitFields(sDestination, fields, bIncludeOrExclude, false); 4284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4305ae9d0c6fd838a2967cca72aa5751b51dadc2769Philip P. Moltmann if (!m_pInterForm->CheckRequiredFields(nullptr, true)) 4314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 4324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return SubmitForm(sDestination, false); 4344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 4354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::SubmitFields(const CFX_WideString& csDestination, 4374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const std::vector<CPDF_FormField*>& fields, 4384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bIncludeOrExclude, 4394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bUrlEncoded) { 4404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf textBuf; 4414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ExportFieldsToFDFTextBuf(fields, bIncludeOrExclude, textBuf); 4424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint8_t* pBuffer = textBuf.GetBuffer(); 4444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_STRSIZE nBufSize = textBuf.GetLength(); 4454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bUrlEncoded && !FDFToURLEncodedData(pBuffer, nBufSize)) 4474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 4484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pFormFillEnv->JS_docSubmitForm(pBuffer, nBufSize, csDestination.c_str()); 4504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 4514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 4524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::FDFToURLEncodedData(CFX_WideString csFDFFile, 4544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString csTxtFile) { 4554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 4564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 4574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::FDFToURLEncodedData(uint8_t*& pBuf, 4594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_STRSIZE& nBufSize) { 4604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::unique_ptr<CFDF_Document> pFDF = 4614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFDF_Document::ParseMemory(pBuf, nBufSize); 4624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pFDF) 4634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 4644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pMainDict = pFDF->GetRoot()->GetDictFor("FDF"); 4664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pMainDict) 4674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 4684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Array* pFields = pMainDict->GetArrayFor("Fields"); 4704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pFields) 4714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 4724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf fdfEncodedData; 4744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (uint32_t i = 0; i < pFields->GetCount(); i++) { 4754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pField = pFields->GetDictAt(i); 4764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pField) 4774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann continue; 4784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString name; 4794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann name = pField->GetUnicodeTextFor("T"); 4804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString name_b = CFX_ByteString::FromUnicode(name); 4814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString csBValue = pField->GetStringFor("V"); 4824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString csWValue = PDF_DecodeText(csBValue); 4834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteString csValue_b = CFX_ByteString::FromUnicode(csWValue); 4844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fdfEncodedData << name_b.GetBuffer(name_b.GetLength()); 4864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann name_b.ReleaseBuffer(); 4874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fdfEncodedData << "="; 4884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fdfEncodedData << csValue_b.GetBuffer(csValue_b.GetLength()); 4894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann csValue_b.ReleaseBuffer(); 4904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (i != pFields->GetCount() - 1) 4914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fdfEncodedData << "&"; 4924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 4934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 4944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nBufSize = fdfEncodedData.GetLength(); 4954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pBuf = FX_Alloc(uint8_t, nBufSize); 4964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FXSYS_memcpy(pBuf, fdfEncodedData.GetBuffer(), nBufSize); 4974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 4984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 4994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::ExportFieldsToFDFTextBuf( 5014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const std::vector<CPDF_FormField*>& fields, 5024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bIncludeOrExclude, 5034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf& textBuf) { 5044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::unique_ptr<CFDF_Document> pFDF = 5054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pInterForm->ExportToFDF(m_pFormFillEnv->JS_docGetFilePath().AsStringC(), 5064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fields, bIncludeOrExclude, false); 5074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pFDF ? pFDF->WriteBuf(textBuf) : false; 5084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_WideString CPDFSDK_InterForm::GetTemporaryFileName( 5114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_WideString& sFileExt) { 5124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return L""; 5134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::SubmitForm(const CFX_WideString& sDestination, 5164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bUrlEncoded) { 5174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (sDestination.IsEmpty()) 5184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 5194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!m_pFormFillEnv || !m_pInterForm) 5214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 5224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::unique_ptr<CFDF_Document> pFDFDoc = m_pInterForm->ExportToFDF( 5244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pFormFillEnv->JS_docGetFilePath().AsStringC(), false); 5254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pFDFDoc) 5264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 5274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_ByteTextBuf FdfBuffer; 5294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pFDFDoc->WriteBuf(FdfBuffer)) 5304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 5314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint8_t* pBuffer = FdfBuffer.GetBuffer(); 5334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_STRSIZE nBufSize = FdfBuffer.GetLength(); 5344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bUrlEncoded && !FDFToURLEncodedData(pBuffer, nBufSize)) 5354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 5364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pFormFillEnv->JS_docSubmitForm(pBuffer, nBufSize, sDestination.c_str()); 5384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bUrlEncoded) 5394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FX_Free(pBuffer); 5404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 5424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf) { 5454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::unique_ptr<CFDF_Document> pFDF = m_pInterForm->ExportToFDF( 5464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pFormFillEnv->JS_docGetFilePath().AsStringC(), false); 5474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return pFDF && pFDF->WriteBuf(textBuf); 5484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action) { 5514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ASSERT(action.GetDict()); 5524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_Dictionary* pActionDict = action.GetDict(); 5544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!pActionDict->KeyExist("Fields")) 5554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pInterForm->ResetForm(true); 5564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_ActionFields af(&action); 5584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t dwFlags = action.GetFlags(); 5594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::vector<CPDF_Object*> fieldObjects = af.GetAllFields(); 5614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::vector<CPDF_FormField*> fields = GetFieldFromObjects(fieldObjects); 5624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pInterForm->ResetForm(fields, !(dwFlags & 0x01), true); 5634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::DoAction_ImportData(const CPDF_Action& action) { 5664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 5674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstd::vector<CPDF_FormField*> CPDFSDK_InterForm::GetFieldFromObjects( 5704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const std::vector<CPDF_Object*>& objects) const { 5714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::vector<CPDF_FormField*> fields; 5724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (CPDF_Object* pObject : objects) { 5734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pObject && pObject->IsString()) { 5744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString csName = pObject->GetUnicodeText(); 5754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPDF_FormField* pField = m_pInterForm->GetField(0, csName); 5764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pField) 5774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fields.push_back(pField); 5784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 5794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 5804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return fields; 5814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint CPDFSDK_InterForm::BeforeValueChange(CPDF_FormField* pField, 5844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_WideString& csValue) { 5854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int nType = pField->GetFieldType(); 5864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (nType != FIELDTYPE_COMBOBOX && nType != FIELDTYPE_TEXTFIELD) 5874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return 0; 5884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!OnKeyStrokeCommit(pField, csValue)) 5904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return -1; 5914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!OnValidate(pField, csValue)) 5934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return -1; 5944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return 1; 5964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 5974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 5984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::AfterValueChange(CPDF_FormField* pField) { 5994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifdef PDF_ENABLE_XFA 6004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann SynchronizeField(pField, false); 6014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif // PDF_ENABLE_XFA 6024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int nType = pField->GetFieldType(); 6034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD) { 6044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann OnCalculate(pField); 6054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bFormatted = false; 6064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString sValue = OnFormat(pField, bFormatted); 6074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ResetFieldAppearance(pField, bFormatted ? &sValue : nullptr, true); 6084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann UpdateField(pField); 6094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 6104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint CPDFSDK_InterForm::BeforeSelectionChange(CPDF_FormField* pField, 6134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_WideString& csValue) { 6144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pField->GetFieldType() != FIELDTYPE_LISTBOX) 6154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return 0; 6164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!OnKeyStrokeCommit(pField, csValue)) 6184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return -1; 6194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (!OnValidate(pField, csValue)) 6214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return -1; 6224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return 1; 6244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::AfterSelectionChange(CPDF_FormField* pField) { 6274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pField->GetFieldType() != FIELDTYPE_LISTBOX) 6284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 6294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann OnCalculate(pField); 6314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ResetFieldAppearance(pField, nullptr, true); 6324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann UpdateField(pField); 6334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::AfterCheckedStatusChange(CPDF_FormField* pField) { 6364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int nType = pField->GetFieldType(); 6374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (nType != FIELDTYPE_CHECKBOX && nType != FIELDTYPE_RADIOBUTTON) 6384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 6394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann OnCalculate(pField); 6414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann UpdateField(pField); 6424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint CPDFSDK_InterForm::BeforeFormReset(CPDF_InterForm* pForm) { 6454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return 0; 6464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::AfterFormReset(CPDF_InterForm* pForm) { 6494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann OnCalculate(nullptr); 6504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannint CPDFSDK_InterForm::BeforeFormImportData(CPDF_InterForm* pForm) { 6534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return 0; 6544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::AfterFormImportData(CPDF_InterForm* pForm) { 6574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann OnCalculate(nullptr); 6584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDFSDK_InterForm::IsNeedHighLight(int nFieldType) { 6614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (nFieldType < 1 || nFieldType > kNumFieldTypes) 6624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 6634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_bNeedHightlight[nFieldType - 1]; 6644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::RemoveAllHighLight() { 6674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (int i = 0; i < kNumFieldTypes; ++i) 6684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bNeedHightlight[i] = false; 6694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDFSDK_InterForm::SetHighlightColor(FX_COLORREF clr, int nFieldType) { 6724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (nFieldType < 0 || nFieldType > kNumFieldTypes) 6734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 6744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann switch (nFieldType) { 6754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann case 0: { 6764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann for (int i = 0; i < kNumFieldTypes; ++i) { 6774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_aHighlightColor[i] = clr; 6784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bNeedHightlight[i] = true; 6794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 6804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 6814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 6824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann default: { 6834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_aHighlightColor[nFieldType - 1] = clr; 6844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bNeedHightlight[nFieldType - 1] = true; 6854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann break; 6864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 6874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } 6884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 6894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 6904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannFX_COLORREF CPDFSDK_InterForm::GetHighlightColor(int nFieldType) { 6914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (nFieldType < 0 || nFieldType > kNumFieldTypes) 6924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return FXSYS_RGB(255, 255, 255); 6934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (nFieldType == 0) 6944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_aHighlightColor[0]; 6954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_aHighlightColor[nFieldType - 1]; 6964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann} 697