summaryrefslogtreecommitdiff
path: root/fpdfsdk/include/cpdfsdk_interform.h
diff options
context:
space:
mode:
Diffstat (limited to 'fpdfsdk/include/cpdfsdk_interform.h')
-rw-r--r--fpdfsdk/include/cpdfsdk_interform.h144
1 files changed, 144 insertions, 0 deletions
diff --git a/fpdfsdk/include/cpdfsdk_interform.h b/fpdfsdk/include/cpdfsdk_interform.h
new file mode 100644
index 0000000000..2fd93f1d5d
--- /dev/null
+++ b/fpdfsdk/include/cpdfsdk_interform.h
@@ -0,0 +1,144 @@
+// 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_INCLUDE_CPDFSDK_INTERFORM_H_
+#define FPDFSDK_INCLUDE_CPDFSDK_INTERFORM_H_
+
+#include <map>
+#include <vector>
+
+#include "core/fpdfdoc/include/cpdf_action.h"
+#include "core/fpdfdoc/include/ipdf_formnotify.h"
+#include "core/fxcrt/include/fx_basic.h"
+#include "core/fxge/include/fx_dib.h"
+
+class CPDF_Dictionary;
+class CPDF_FormControl;
+class CPDF_FormField;
+class CPDF_InterForm;
+class CPDF_Object;
+class CPDFSDK_Document;
+class CPDFSDK_Widget;
+
+#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_Document* pDocument);
+ ~CPDFSDK_InterForm() override;
+
+ CPDF_InterForm* GetInterForm() const { return m_pInterForm.get(); }
+ CPDFSDK_Document* GetDocument() const { return m_pDocument; }
+
+ FX_BOOL HighlightWidgets();
+
+ CPDFSDK_Widget* GetSibling(CPDFSDK_Widget* pWidget, FX_BOOL bNext) const;
+ CPDFSDK_Widget* GetWidget(CPDF_FormControl* pControl,
+ bool createIfNeeded) const;
+ void GetWidgets(const CFX_WideString& sFieldName,
+ std::vector<CPDFSDK_Widget*>* widgets) const;
+ void GetWidgets(CPDF_FormField* pField,
+ std::vector<CPDFSDK_Widget*>* widgets) const;
+
+ void AddMap(CPDF_FormControl* pControl, CPDFSDK_Widget* pWidget);
+ void RemoveMap(CPDF_FormControl* pControl);
+
+ void EnableCalculate(FX_BOOL bEnabled);
+ FX_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(FX_BOOL bEnabled);
+ FX_BOOL IsXfaCalculateEnabled() const;
+ FX_BOOL IsXfaValidationsEnabled();
+ void XfaSetValidationsEnabled(FX_BOOL bEnabled);
+ void SynchronizeField(CPDF_FormField* pFormField, FX_BOOL bSynchronizeElse);
+#endif // PDF_ENABLE_XFA
+
+ FX_BOOL OnKeyStrokeCommit(CPDF_FormField* pFormField,
+ const CFX_WideString& csValue);
+ FX_BOOL OnValidate(CPDF_FormField* pFormField, const CFX_WideString& csValue);
+ void OnCalculate(CPDF_FormField* pFormField = nullptr);
+ CFX_WideString OnFormat(CPDF_FormField* pFormField, FX_BOOL& bFormated);
+
+ void ResetFieldAppearance(CPDF_FormField* pFormField,
+ const FX_WCHAR* sValue,
+ FX_BOOL bValueChanged);
+ void UpdateField(CPDF_FormField* pFormField);
+
+ FX_BOOL DoAction_Hide(const CPDF_Action& action);
+ FX_BOOL DoAction_SubmitForm(const CPDF_Action& action);
+ FX_BOOL DoAction_ResetForm(const CPDF_Action& action);
+ FX_BOOL DoAction_ImportData(const CPDF_Action& action);
+
+ std::vector<CPDF_FormField*> GetFieldFromObjects(
+ const std::vector<CPDF_Object*>& objects) const;
+ FX_BOOL IsValidField(CPDF_Dictionary* pFieldDict);
+ FX_BOOL SubmitFields(const CFX_WideString& csDestination,
+ const std::vector<CPDF_FormField*>& fields,
+ bool bIncludeOrExclude,
+ bool bUrlEncoded);
+ FX_BOOL SubmitForm(const CFX_WideString& sDestination, FX_BOOL bUrlEncoded);
+ FX_BOOL ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf);
+ FX_BOOL ExportFieldsToFDFTextBuf(const std::vector<CPDF_FormField*>& fields,
+ bool bIncludeOrExclude,
+ CFX_ByteTextBuf& textBuf);
+ CFX_WideString GetTemporaryFileName(const CFX_WideString& sFileExt);
+
+ FX_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;
+
+ FX_BOOL FDFToURLEncodedData(CFX_WideString csFDFFile,
+ CFX_WideString csTxtFile);
+ FX_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_Document* m_pDocument;
+ std::unique_ptr<CPDF_InterForm> m_pInterForm;
+ CPDFSDK_WidgetMap m_Map;
+#ifdef PDF_ENABLE_XFA
+ std::map<CXFA_FFWidget*, CPDFSDK_XFAWidget*> m_XFAMap;
+ FX_BOOL m_bXfaCalculate;
+ FX_BOOL m_bXfaValidationsEnabled;
+ static const int kNumFieldTypes = 7;
+#else // PDF_ENABLE_XFA
+ static const int kNumFieldTypes = 6;
+#endif // PDF_ENABLE_XFA
+ FX_BOOL m_bCalculate;
+ FX_BOOL m_bBusy;
+
+ FX_COLORREF m_aHighlightColor[kNumFieldTypes];
+ uint8_t m_iHighlightAlpha;
+ FX_BOOL m_bNeedHightlight[kNumFieldTypes];
+};
+
+#endif // FPDFSDK_INCLUDE_CPDFSDK_INTERFORM_H_