You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
5.5 KiB
143 lines
5.5 KiB
// 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 <map> |
|
#include <memory> |
|
#include <vector> |
|
|
|
#include "core/fpdfdoc/cpdf_action.h" |
|
#include "core/fpdfdoc/ipdf_formnotify.h" |
|
#include "core/fxcrt/fx_basic.h" |
|
#include "core/fxge/fx_dib.h" |
|
#include "fpdfsdk/cpdfsdk_widget.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 : 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; } |
|
|
|
bool HighlightWidgets(); |
|
|
|
CPDFSDK_Widget* GetSibling(CPDFSDK_Widget* pWidget, bool bNext) const; |
|
CPDFSDK_Widget* GetWidget(CPDF_FormControl* pControl) const; |
|
void GetWidgets(const CFX_WideString& sFieldName, |
|
std::vector<CPDFSDK_Annot::ObservedPtr>* widgets) const; |
|
void GetWidgets(CPDF_FormField* pField, |
|
std::vector<CPDFSDK_Annot::ObservedPtr>* 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, bool bSynchronizeElse); |
|
#endif // PDF_ENABLE_XFA |
|
|
|
bool OnKeyStrokeCommit(CPDF_FormField* pFormField, |
|
const CFX_WideString& csValue); |
|
bool OnValidate(CPDF_FormField* pFormField, const CFX_WideString& csValue); |
|
void OnCalculate(CPDF_FormField* pFormField = nullptr); |
|
CFX_WideString OnFormat(CPDF_FormField* pFormField, bool& bFormatted); |
|
|
|
void ResetFieldAppearance(CPDF_FormField* pFormField, |
|
const CFX_WideString* sValue, |
|
bool bValueChanged); |
|
void UpdateField(CPDF_FormField* pFormField); |
|
|
|
bool DoAction_Hide(const CPDF_Action& action); |
|
bool DoAction_SubmitForm(const CPDF_Action& action); |
|
bool DoAction_ResetForm(const CPDF_Action& action); |
|
bool DoAction_ImportData(const CPDF_Action& action); |
|
|
|
std::vector<CPDF_FormField*> GetFieldFromObjects( |
|
const std::vector<CPDF_Object*>& objects) const; |
|
bool IsValidField(CPDF_Dictionary* pFieldDict); |
|
bool SubmitFields(const CFX_WideString& csDestination, |
|
const std::vector<CPDF_FormField*>& fields, |
|
bool bIncludeOrExclude, |
|
bool bUrlEncoded); |
|
bool SubmitForm(const CFX_WideString& sDestination, bool bUrlEncoded); |
|
bool ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf); |
|
bool ExportFieldsToFDFTextBuf(const std::vector<CPDF_FormField*>& fields, |
|
bool bIncludeOrExclude, |
|
CFX_ByteTextBuf& textBuf); |
|
CFX_WideString GetTemporaryFileName(const CFX_WideString& sFileExt); |
|
|
|
bool IsNeedHighLight(int nFieldType); |
|
void RemoveAllHighLight(); |
|
void SetHighlightAlpha(uint8_t alpha) { m_iHighlightAlpha = alpha; } |
|
uint8_t GetHighlightAlpha() { return m_iHighlightAlpha; } |
|
void SetHighlightColor(FX_COLORREF clr, int nFieldType); |
|
FX_COLORREF GetHighlightColor(int nFieldType); |
|
|
|
private: |
|
// IPDF_FormNotify: |
|
int BeforeValueChange(CPDF_FormField* pField, |
|
const CFX_WideString& csValue) override; |
|
void AfterValueChange(CPDF_FormField* pField) override; |
|
int BeforeSelectionChange(CPDF_FormField* pField, |
|
const CFX_WideString& csValue) override; |
|
void AfterSelectionChange(CPDF_FormField* pField) override; |
|
void AfterCheckedStatusChange(CPDF_FormField* pField) override; |
|
int BeforeFormReset(CPDF_InterForm* pForm) override; |
|
void AfterFormReset(CPDF_InterForm* pForm) override; |
|
int BeforeFormImportData(CPDF_InterForm* pForm) override; |
|
void AfterFormImportData(CPDF_InterForm* pForm) override; |
|
|
|
bool FDFToURLEncodedData(CFX_WideString csFDFFile, CFX_WideString csTxtFile); |
|
bool FDFToURLEncodedData(uint8_t*& pBuf, FX_STRSIZE& nBufSize); |
|
int GetPageIndexByAnnotDict(CPDF_Document* pDocument, |
|
CPDF_Dictionary* pAnnotDict) const; |
|
|
|
using CPDFSDK_WidgetMap = std::map<CPDF_FormControl*, CPDFSDK_Widget*>; |
|
|
|
CPDFSDK_FormFillEnvironment* m_pFormFillEnv; // Not owned. |
|
std::unique_ptr<CPDF_InterForm> m_pInterForm; |
|
CPDFSDK_WidgetMap m_Map; |
|
#ifdef PDF_ENABLE_XFA |
|
std::map<CXFA_FFWidget*, CPDFSDK_XFAWidget*> m_XFAMap; |
|
bool m_bXfaCalculate; |
|
bool m_bXfaValidationsEnabled; |
|
static const int kNumFieldTypes = 7; |
|
#else // PDF_ENABLE_XFA |
|
static const int kNumFieldTypes = 6; |
|
#endif // PDF_ENABLE_XFA |
|
bool m_bCalculate; |
|
bool m_bBusy; |
|
|
|
FX_COLORREF m_aHighlightColor[kNumFieldTypes]; |
|
uint8_t m_iHighlightAlpha; |
|
bool m_bNeedHightlight[kNumFieldTypes]; |
|
}; |
|
|
|
#endif // FPDFSDK_CPDFSDK_INTERFORM_H_
|
|
|