summaryrefslogtreecommitdiff
path: root/core/fpdfdoc/cpdf_interactiveform.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfdoc/cpdf_interactiveform.h')
-rw-r--r--core/fpdfdoc/cpdf_interactiveform.h111
1 files changed, 111 insertions, 0 deletions
diff --git a/core/fpdfdoc/cpdf_interactiveform.h b/core/fpdfdoc/cpdf_interactiveform.h
new file mode 100644
index 0000000000..ebbbe2778c
--- /dev/null
+++ b/core/fpdfdoc/cpdf_interactiveform.h
@@ -0,0 +1,111 @@
+// 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 CORE_FPDFDOC_CPDF_INTERACTIVEFORM_H_
+#define CORE_FPDFDOC_CPDF_INTERACTIVEFORM_H_
+
+#include <map>
+#include <memory>
+#include <vector>
+
+#include "core/fpdfapi/parser/fpdf_parser_decode.h"
+#include "core/fpdfdoc/cpdf_defaultappearance.h"
+#include "core/fpdfdoc/cpdf_formfield.h"
+#include "core/fxcrt/fx_string.h"
+#include "core/fxcrt/fx_system.h"
+#include "core/fxcrt/unowned_ptr.h"
+
+class CFieldTree;
+class CFDF_Document;
+class CPDF_Document;
+class CPDF_Dictionary;
+class CPDF_Font;
+class CPDF_FormControl;
+class CPDF_Object;
+class CPDF_Page;
+class IPDF_FormNotify;
+
+CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict,
+ CPDF_Document* pDocument,
+ ByteString* csNameTag);
+
+class CPDF_InterForm {
+ public:
+ explicit CPDF_InterForm(CPDF_Document* pDocument);
+ ~CPDF_InterForm();
+
+ static void SetUpdateAP(bool bUpdateAP);
+ static bool IsUpdateAPEnabled();
+ static CPDF_Font* AddStandardFont(CPDF_Document* pDocument,
+ ByteString csFontName);
+ static ByteString GetNativeFont(uint8_t iCharSet, void* pLogFont);
+ static uint8_t GetNativeCharSet();
+ static CPDF_Font* AddNativeFont(uint8_t iCharSet, CPDF_Document* pDocument);
+ static CPDF_Font* AddNativeFont(CPDF_Document* pDocument);
+
+ size_t CountFields(const WideString& csFieldName) const;
+ CPDF_FormField* GetField(uint32_t index, const WideString& csFieldName) const;
+ CPDF_FormField* GetFieldByDict(CPDF_Dictionary* pFieldDict) const;
+
+ CPDF_FormControl* GetControlAtPoint(CPDF_Page* pPage,
+ const CFX_PointF& point,
+ int* z_order) const;
+ CPDF_FormControl* GetControlByDict(const CPDF_Dictionary* pWidgetDict) const;
+
+ bool NeedConstructAP() const;
+ int CountFieldsInCalculationOrder();
+ CPDF_FormField* GetFieldInCalculationOrder(int index);
+ int FindFieldInCalculationOrder(const CPDF_FormField* pField);
+
+ CPDF_Font* GetFormFont(ByteString csNameTag) const;
+ CPDF_DefaultAppearance GetDefaultAppearance() const;
+ int GetFormAlignment() const;
+
+ bool CheckRequiredFields(const std::vector<CPDF_FormField*>* fields,
+ bool bIncludeOrExclude) const;
+
+ std::unique_ptr<CFDF_Document> ExportToFDF(const WideString& pdf_path,
+ bool bSimpleFileSpec) const;
+
+ std::unique_ptr<CFDF_Document> ExportToFDF(
+ const WideString& pdf_path,
+ const std::vector<CPDF_FormField*>& fields,
+ bool bIncludeOrExclude,
+ bool bSimpleFileSpec) const;
+
+ void ResetForm(NotificationOption notify);
+
+ // TODO(tsepez): Use a span.
+ void ResetForm(const std::vector<CPDF_FormField*>& fields,
+ bool bIncludeOrExclude,
+ NotificationOption notify);
+
+ void SetFormNotify(IPDF_FormNotify* pNotify);
+ bool HasXFAForm() const;
+ void FixPageFields(CPDF_Page* pPage);
+
+ IPDF_FormNotify* GetFormNotify() const { return m_pFormNotify.Get(); }
+ CPDF_Document* GetDocument() const { return m_pDocument.Get(); }
+ CPDF_Dictionary* GetFormDict() const { return m_pFormDict.Get(); }
+
+ private:
+ void LoadField(CPDF_Dictionary* pFieldDict, int nLevel);
+ void AddTerminalField(CPDF_Dictionary* pFieldDict);
+ CPDF_FormControl* AddControl(CPDF_FormField* pField,
+ CPDF_Dictionary* pWidgetDict);
+
+ static bool s_bUpdateAP;
+
+ UnownedPtr<CPDF_Document> const m_pDocument;
+ UnownedPtr<CPDF_Dictionary> m_pFormDict;
+ std::map<const CPDF_Dictionary*, std::unique_ptr<CPDF_FormControl>>
+ m_ControlMap;
+ std::unique_ptr<CFieldTree> m_pFieldTree;
+ ByteString m_bsEncoding;
+ UnownedPtr<IPDF_FormNotify> m_pFormNotify;
+};
+
+#endif // CORE_FPDFDOC_CPDF_INTERACTIVEFORM_H_