1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file.
4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#ifndef CORE_INCLUDE_FPDFDOC_FPDF_DOC_H_
8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define CORE_INCLUDE_FPDFDOC_FPDF_DOC_H_
9e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <map>
11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <memory>
12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <vector>
13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fpdfapi/fpdf_parser.h"
15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fpdfapi/fpdf_render.h"
16e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFieldTree;
18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_AAction;
19e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_Action;
20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_ActionFields;
21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_Annot;
22e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_AnnotList;
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_ApSettings;
24e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_Bookmark;
25e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_BookmarkTree;
26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_DefaultAppearance;
27e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_Dest;
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_DocJSActions;
29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_FileSpec;
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_FormControl;
31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_FormField;
32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_FormNotify;
33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_IconFit;
34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_InterForm;
35e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_Link;
36e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_Metadata;
37e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_NumberTree;
38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_OCContext;
39e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_Page;
40e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPDF_RenderOptions;
41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_TextObject;
42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_ViewerPreferences;
43e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CXML_Element;
44e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_NameTree {
46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  explicit CPDF_NameTree(CPDF_Dictionary* pRoot) { m_pRoot = pRoot; }
48e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_NameTree(CPDF_Document* pDoc, const CFX_ByteStringC& category);
50e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Object* LookupValue(int nIndex, CFX_ByteString& csName) const;
52e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Object* LookupValue(const CFX_ByteString& csName) const;
54e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Array* LookupNamedDest(CPDF_Document* pDoc,
56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              const CFX_ByteStringC& sName);
57e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetIndex(const CFX_ByteString& csName) const;
59e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetCount() const;
61e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* GetRoot() const { return m_pRoot; }
63e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* m_pRoot;
66e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_BookmarkTree {
68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  explicit CPDF_BookmarkTree(CPDF_Document* pDoc) : m_pDocument(pDoc) {}
70e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Bookmark GetFirstChild(const CPDF_Bookmark& parent) const;
72e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Bookmark GetNextSibling(const CPDF_Bookmark& bookmark) const;
74e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Document* GetDocument() const { return m_pDocument; }
76e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Document* m_pDocument;
79e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFBOOKMARK_ITALIC 1
81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFBOOKMARK_BOLD 2
82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Bookmark {
83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Bookmark() : m_pDict(NULL) {}
85e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  explicit CPDF_Bookmark(CPDF_Dictionary* pDict) : m_pDict(pDict) {}
87e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* GetDict() const { return m_pDict; }
89e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  operator bool() const { return m_pDict != NULL; }
91e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD GetColorRef() const;
93e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD GetFontStyle() const;
95e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetTitle() const;
97e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dest GetDest(CPDF_Document* pDocument) const;
99e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Action GetAction() const;
101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* m_pDict;
103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFZOOM_XYZ 1
105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFZOOM_FITPAGE 2
106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFZOOM_FITHORZ 3
107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFZOOM_FITVERT 4
108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFZOOM_FITRECT 5
109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFZOOM_FITBBOX 6
110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFZOOM_FITBHORZ 7
111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFZOOM_FITBVERT 8
112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Dest {
113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dest() : m_pObj(nullptr) {}
115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  explicit CPDF_Dest(CPDF_Object* pObj) : m_pObj(pObj) {}
116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  operator bool() const { return m_pObj != NULL; }
118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Object* GetObject() const { return m_pObj; }
119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString GetRemoteName();
121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetPageIndex(CPDF_Document* pDoc);
122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD GetPageObjNum();
123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetZoomMode();
124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT GetParam(int index);
125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Object* m_pObj;
128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_OCContext : public IPDF_OCContext {
130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  enum UsageType { View = 0, Design, Print, Export };
132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  explicit CPDF_OCContext(CPDF_Document* pDoc, UsageType eUsageType = View);
134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ~CPDF_OCContext() override;
135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Document* GetDocument() const { return m_pDocument; }
137e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  UsageType GetUsageType() const { return m_eUsageType; }
139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL CheckOCGVisible(const CPDF_Dictionary* pOCGDict) override;
141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void ResetOCContext();
143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL LoadOCGStateFromConfig(const CFX_ByteStringC& csConfig,
146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                 const CPDF_Dictionary* pOCGDict,
147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                 FX_BOOL& bValidConfig) const;
148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL LoadOCGState(const CPDF_Dictionary* pOCGDict) const;
150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL GetOCGVisible(const CPDF_Dictionary* pOCGDict);
152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL GetOCGVE(CPDF_Array* pExpression,
154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   FX_BOOL bFromConfig,
155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   int nLevel = 0);
156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL LoadOCMDState(const CPDF_Dictionary* pOCMDDict, FX_BOOL bFromConfig);
158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Document* m_pDocument;
160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  UsageType m_eUsageType;
162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::map<const CPDF_Dictionary*, FX_BOOL> m_OCGStates;
164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_ActionFields {
167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // TODO(thestig): Examine why this cannot be explicit.
169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_ActionFields(const CPDF_Action* pAction) {
170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pAction = (CPDF_Action*)pAction;
171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // TODO(thestig): Replace this.
174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  operator CPDF_Action*() const { return m_pAction; }
175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD GetFieldsCount() const;
177e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::vector<CPDF_Object*> GetAllFields() const;
179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Object* GetField(FX_DWORD iIndex) const;
181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Action* m_pAction;
183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFNAMED_NEXTPAGE 1
186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFNAMED_PREVPAGE 2
187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFNAMED_FIRSTPAGE 3
188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFNAMED_LASTPAGE 4
189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define PDFJS_MAXLENGTH 64
190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Action {
191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  enum ActionType {
193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Unknown = 0,
194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    GoTo,
195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    GoToR,
196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    GoToE,
197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Launch,
198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Thread,
199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    URI,
200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Sound,
201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Movie,
202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Hide,
203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Named,
204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    SubmitForm,
205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ResetForm,
206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ImportData,
207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    JavaScript,
208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    SetOCGState,
209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Rendition,
210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Trans,
211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    GoTo3DView
212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  };
213e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Action() : m_pDict(nullptr) {}
215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  explicit CPDF_Action(CPDF_Dictionary* pDict) : m_pDict(pDict) {}
216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  operator bool() const { return m_pDict != NULL; }
218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* GetDict() const { return m_pDict; }
220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString GetTypeName() const { return m_pDict->GetString("S"); }
222e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ActionType GetType() const;
224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dest GetDest(CPDF_Document* pDoc) const;
226e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetFilePath() const;
228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL GetNewWindow() const { return m_pDict->GetBoolean("NewWindow"); }
230e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString GetURI(CPDF_Document* pDoc) const;
232e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL GetMouseMap() const { return m_pDict->GetBoolean("IsMap"); }
234e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_ActionFields GetWidgets() const { return this; }
236e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL GetHideStatus() const { return m_pDict->GetBoolean("H", TRUE); }
238e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString GetNamedAction() const { return m_pDict->GetString("N"); }
240e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD GetFlags() const { return m_pDict->GetInteger("Flags"); }
242e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetJavaScript() const;
244e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* GetAnnot() const;
246e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t GetOperationType() const;
248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Stream* GetSoundStream() const { return m_pDict->GetStream("Sound"); }
250e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT GetVolume() const { return m_pDict->GetNumber("Volume"); }
252e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL IsSynchronous() const { return m_pDict->GetBoolean("Synchronous"); }
254e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL IsRepeat() const { return m_pDict->GetBoolean("Repeat"); }
256e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL IsMixPlay() const { return m_pDict->GetBoolean("Mix"); }
258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD GetSubActionsCount() const;
260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Action GetSubAction(FX_DWORD iIndex) const;
262e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* m_pDict;
265e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_AAction {
267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // TODO(thestig): Examine why this cannot be explicit.
269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_AAction(CPDF_Dictionary* pDict = NULL) { m_pDict = pDict; }
270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  operator CPDF_Dictionary*() const { return m_pDict; }
272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  enum AActionType {
274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CursorEnter = 0,
275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CursorExit,
276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ButtonDown,
277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ButtonUp,
278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    GetFocus,
279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    LoseFocus,
280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    PageOpen,
281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    PageClose,
282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    PageVisible,
283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    PageInvisible,
284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    OpenPage,
285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ClosePage,
286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    KeyStroke,
287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Format,
288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Validate,
289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Calculate,
290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CloseDocument,
291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    SaveDocument,
292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    DocumentSaved,
293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    PrintDocument,
294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    DocumentPrinted
295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  };
296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL ActionExist(AActionType eType) const;
298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Action GetAction(AActionType eType) const;
300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* m_pDict;
302e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_DocJSActions {
304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  explicit CPDF_DocJSActions(CPDF_Document* pDoc);
306e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int CountJSActions() const;
308e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Action GetJSAction(int index, CFX_ByteString& csName) const;
310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Action GetJSAction(const CFX_ByteString& csName) const;
312e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int FindJSAction(const CFX_ByteString& csName) const;
314e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Document* GetDocument() const { return m_pDocument; }
316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Document* const m_pDocument;
319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_FileSpec {
321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FileSpec();
323e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  explicit CPDF_FileSpec(CPDF_Object* pObj) { m_pObj = pObj; }
325e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  operator CPDF_Object*() const { return m_pObj; }
327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL IsURL() const;
329e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL GetFileName(CFX_WideString& wsFileName) const;
331e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Stream* GetFileStream() const;
333e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void SetFileName(const CFX_WideStringC& wsFileName, FX_BOOL bURL = FALSE);
335e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Object* m_pObj;
338e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
339e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_LinkList {
341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_LinkList();
343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ~CPDF_LinkList();
344e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Link GetLinkAtPoint(CPDF_Page* pPage,
346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           FX_FLOAT pdf_x,
347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           FX_FLOAT pdf_y,
348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           int* z_order);
349e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann private:
351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const std::vector<CPDF_Dictionary*>* GetPageLinks(CPDF_Page* pPage);
352e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void LoadPageLinks(CPDF_Page* pPage, std::vector<CPDF_Dictionary*>* pList);
354e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::map<FX_DWORD, std::vector<CPDF_Dictionary*>> m_PageMap;
356e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
357e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Link {
359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Link() : m_pDict(nullptr) {}
361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  explicit CPDF_Link(CPDF_Dictionary* pDict) : m_pDict(pDict) {}
362e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* GetDict() const { return m_pDict; }
364e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_FloatRect GetRect();
366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dest GetDest(CPDF_Document* pDoc);
367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Action GetAction();
368e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* m_pDict;
371e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
372e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define ANNOTFLAG_INVISIBLE 0x0001
374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define ANNOTFLAG_HIDDEN 0x0002
375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define ANNOTFLAG_PRINT 0x0004
376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define ANNOTFLAG_NOZOOM 0x0008
377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define ANNOTFLAG_NOROTATE 0x0010
378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define ANNOTFLAG_NOVIEW 0x0020
379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define ANNOTFLAG_READONLY 0x0040
380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define ANNOTFLAG_LOCKED 0x0080
381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define ANNOTFLAG_TOGGLENOVIEW 0x0100
382e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Annot : public CFX_PrivateData {
384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  enum AppearanceMode { Normal, Rollover, Down };
386e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Annot(CPDF_Dictionary* pDict, CPDF_AnnotList* pList);
388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ~CPDF_Annot();
389e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString GetSubType() const;
391e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD GetFlags() const;
393e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetRect(CFX_FloatRect& rect) const;
395e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const CPDF_Dictionary* GetAnnotDict() const { return m_pAnnotDict; }
397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* GetAnnotDict() { return m_pAnnotDict; }
398e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL DrawAppearance(CPDF_Page* pPage,
400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         CFX_RenderDevice* pDevice,
401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         const CFX_Matrix* pUser2Device,
402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         AppearanceMode mode,
403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         const CPDF_RenderOptions* pOptions);
404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL DrawInContext(const CPDF_Page* pPage,
406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        CPDF_RenderContext* pContext,
407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        const CFX_Matrix* pUser2Device,
408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        AppearanceMode mode);
409e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void ClearCachedAP();
411e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void DrawBorder(CFX_RenderDevice* pDevice,
413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  const CFX_Matrix* pUser2Device,
414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  const CPDF_RenderOptions* pOptions);
415e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Form* GetAPForm(const CPDF_Page* pPage, AppearanceMode mode);
417e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann private:
419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* const m_pAnnotDict;
420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_AnnotList* const m_pList;
421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const CFX_ByteString m_sSubtype;
422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::map<CPDF_Stream*, CPDF_Form*> m_APMap;
423e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
424e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_AnnotList {
426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  explicit CPDF_AnnotList(CPDF_Page* pPage);
428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ~CPDF_AnnotList();
429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void DisplayAnnots(CPDF_Page* pPage,
431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     CPDF_RenderContext* pContext,
432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     FX_BOOL bPrinting,
433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     CFX_Matrix* pMatrix,
434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     FX_BOOL bShowWidget,
435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     CPDF_RenderOptions* pOptions) {
436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    DisplayAnnots(pPage, nullptr, pContext, bPrinting, pMatrix,
437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  bShowWidget ? 3 : 1, pOptions, nullptr);
438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void DisplayAnnots(CPDF_Page* pPage,
440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     CFX_RenderDevice* pDevice,
441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     CPDF_RenderContext* pContext,
442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     FX_BOOL bPrinting,
443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     CFX_Matrix* pMatrix,
444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     FX_DWORD dwAnnotFlags,
445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     CPDF_RenderOptions* pOptions,
446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     FX_RECT* pClipRect);
447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  size_t Count() const { return m_AnnotList.size(); }
448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Annot* GetAt(size_t index) const { return m_AnnotList[index]; }
449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const std::vector<CPDF_Annot*>& All() const { return m_AnnotList; }
450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Document* GetDocument() const { return m_pDocument; }
451ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void DisplayPass(CPDF_Page* pPage,
454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   CFX_RenderDevice* pDevice,
455ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   CPDF_RenderContext* pContext,
456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   FX_BOOL bPrinting,
457ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   CFX_Matrix* pMatrix,
458ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   FX_BOOL bWidget,
459ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   CPDF_RenderOptions* pOptions,
460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   FX_RECT* clip_rect);
461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
462ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Document* const m_pDocument;
463ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::vector<CPDF_Annot*> m_AnnotList;
464e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
465e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define COLORTYPE_TRANSPARENT 0
467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define COLORTYPE_GRAY 1
468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define COLORTYPE_RGB 2
469ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define COLORTYPE_CMYK 3
470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_DefaultAppearance {
471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // TODO(thestig): Examine why this cannot be explicit.
473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_DefaultAppearance(const CFX_ByteString& csDA = "") { m_csDA = csDA; }
474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_DefaultAppearance(const CPDF_DefaultAppearance& cDA) {
476ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA;
477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
478e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
479ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  operator CFX_ByteString() const { return m_csDA; }
480e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const CPDF_DefaultAppearance& operator=(const CFX_ByteString& csDA) {
482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_csDA = csDA;
483ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return *this;
484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
485e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
486ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const CPDF_DefaultAppearance& operator=(const CPDF_DefaultAppearance& cDA) {
487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA;
488ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return *this;
489ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
490e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
491ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL HasFont();
492e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
493ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString GetFontString();
494e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
495ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetFont(CFX_ByteString& csFontNameTag, FX_FLOAT& fFontSize);
496e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
497ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL HasColor(FX_BOOL bStrokingOperation = FALSE);
498e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
499ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString GetColorString(FX_BOOL bStrokingOperation = FALSE);
500e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
501ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetColor(int& iColorType,
502ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                FX_FLOAT fc[4],
503ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                FX_BOOL bStrokingOperation = FALSE);
504e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
505ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetColor(FX_ARGB& color,
506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                int& iColorType,
507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                FX_BOOL bStrokingOperation = FALSE);
508e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
509ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL HasTextMatrix();
510e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
511ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString GetTextMatrixString();
512e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
513ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_Matrix GetTextMatrix();
514e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
515ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
516ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString m_csDA;
517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
518ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELDTYPE_UNKNOWN 0
519ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELDTYPE_PUSHBUTTON 1
520ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELDTYPE_CHECKBOX 2
521ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELDTYPE_RADIOBUTTON 3
522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELDTYPE_COMBOBOX 4
523ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELDTYPE_LISTBOX 5
524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELDTYPE_TEXTFIELD 6
525ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FIELDTYPE_SIGNATURE 7
526ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_InterForm : public CFX_PrivateData {
527ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_InterForm(CPDF_Document* pDocument, FX_BOOL bUpdateAP);
529ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ~CPDF_InterForm();
530e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
531ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static void EnableUpdateAP(FX_BOOL bUpdateAP);
532e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
533ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static FX_BOOL UpdatingAPEnabled();
534e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
535ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static CFX_ByteString GenerateNewResourceName(const CPDF_Dictionary* pResDict,
536ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                const FX_CHAR* csType,
537ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                int iMinLen = 2,
538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                const FX_CHAR* csPrefix = "");
539e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static CPDF_Font* AddStandardFont(CPDF_Document* pDocument,
541ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    CFX_ByteString csFontName);
542e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
543ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static CFX_ByteString GetNativeFont(uint8_t iCharSet, void* pLogFont = NULL);
544e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
545ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static CFX_ByteString GetNativeFont(void* pLogFont = NULL);
546e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
547ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static uint8_t GetNativeCharSet();
548e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
549ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static CPDF_Font* AddNativeFont(uint8_t iCharSet, CPDF_Document* pDocument);
550e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static CPDF_Font* AddNativeFont(CPDF_Document* pDocument);
552e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
553ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL ValidateFieldName(CFX_WideString& csNewFieldName, int iType);
554e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
555ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL ValidateFieldName(const CPDF_FormField* pField,
556ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            CFX_WideString& csNewFieldName);
557e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL ValidateFieldName(const CPDF_FormControl* pControl,
559ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            CFX_WideString& csNewFieldName);
560e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD CountFields(const CFX_WideString& csFieldName = L"");
562e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
563ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* GetField(FX_DWORD index,
564ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           const CFX_WideString& csFieldName = L"");
565e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
566ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetAllFieldNames(CFX_WideStringArray& allFieldNames);
567e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* GetFieldByDict(CPDF_Dictionary* pFieldDict) const;
569e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* GetControlAtPoint(CPDF_Page* pPage,
571ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                      FX_FLOAT pdf_x,
572ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                      FX_FLOAT pdf_y,
573ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                      int* z_order) const;
574e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* GetControlByDict(const CPDF_Dictionary* pWidgetDict) const;
576e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
577ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Document* GetDocument() const { return m_pDocument; }
578e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
579ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* GetFormDict() const { return m_pFormDict; }
580e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL NeedConstructAP();
582e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
583ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void NeedConstructAP(FX_BOOL bNeedAP);
584e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int CountFieldsInCalculationOrder();
586e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
587ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* GetFieldInCalculationOrder(int index);
588e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
589ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int FindFieldInCalculationOrder(const CPDF_FormField* pField);
590e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
591ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD CountFormFonts();
592e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
593ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Font* GetFormFont(FX_DWORD index, CFX_ByteString& csNameTag);
594e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
595ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Font* GetFormFont(CFX_ByteString csNameTag);
596e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
597ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Font* GetFormFont(CFX_ByteString csFontName, CFX_ByteString& csNameTag);
598e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
599ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Font* GetNativeFormFont(uint8_t iCharSet, CFX_ByteString& csNameTag);
600e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
601ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Font* GetNativeFormFont(CFX_ByteString& csNameTag);
602e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
603ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL FindFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag);
604e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
605ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL FindFormFont(CFX_ByteString csFontName,
606ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       CPDF_Font*& pFont,
607ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       CFX_ByteString& csNameTag);
608e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
609ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  inline FX_BOOL FindFormFont(CFX_WideString csFontName,
610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              CPDF_Font*& pFont,
611ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              CFX_ByteString& csNameTag) {
612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FindFormFont(PDF_EncodeText(csFontName), pFont, csNameTag);
613ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
614e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
615ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void AddFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag);
616e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
617ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Font* AddNativeFormFont(uint8_t iCharSet, CFX_ByteString& csNameTag);
618e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
619ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Font* AddNativeFormFont(CFX_ByteString& csNameTag);
620e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
621ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void RemoveFormFont(const CPDF_Font* pFont);
622e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
623ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void RemoveFormFont(CFX_ByteString csNameTag);
624e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
625ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_DefaultAppearance GetDefaultAppearance();
626e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
627ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Font* GetDefaultFormFont();
628e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
629ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetFormAlignment();
630e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
631ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* CheckRequiredFields(
632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      const std::vector<CPDF_FormField*>* fields,
633ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bool bIncludeOrExclude) const;
634e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
635ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFDF_Document* ExportToFDF(const CFX_WideStringC& pdf_path,
636ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             bool bSimpleFileSpec = false) const;
637e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
638ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFDF_Document* ExportToFDF(const CFX_WideStringC& pdf_path,
639ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             const std::vector<CPDF_FormField*>& fields,
640ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             bool bIncludeOrExclude = true,
641ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             bool bSimpleFileSpec = false) const;
642e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
643ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL ImportFromFDF(const CFDF_Document* pFDFDoc, FX_BOOL bNotify = FALSE);
644e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
645ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  bool ResetForm(const std::vector<CPDF_FormField*>& fields,
646ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 bool bIncludeOrExclude = true,
647ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 bool bNotify = false);
648e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
649ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  bool ResetForm(bool bNotify = false);
650e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
651ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormNotify* GetFormNotify() const { return m_pFormNotify; }
652e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
653ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void SetFormNotify(const CPDF_FormNotify* pNotify);
654e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
655ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL IsUpdated() { return m_bUpdated; }
656e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
657ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void ClearUpdatedFlag() { m_bUpdated = FALSE; }
658e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
659ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL HasXFAForm() const;
660e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
661ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void FixPageFields(const CPDF_Page* pPage);
662e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
663ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
664ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static FX_BOOL m_bUpdateAP;
665e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
666ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void LoadField(CPDF_Dictionary* pFieldDict, int nLevel = 0);
667e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
668ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Object* GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name);
669e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
670ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* AddTerminalField(CPDF_Dictionary* pFieldDict);
671e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
672ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* AddControl(const CPDF_FormField* pField,
673ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                               CPDF_Dictionary* pWidgetDict);
674e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
675ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void FDF_ImportField(CPDF_Dictionary* pField,
676ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       const CFX_WideString& parent_name,
677ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       FX_BOOL bNotify = FALSE,
678ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       int nLevel = 0);
679e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
680ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL ValidateFieldName(CFX_WideString& csNewFieldName,
681ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            int iType,
682ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            const CPDF_FormField* pExcludedField,
683ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            const CPDF_FormControl* pExcludedControl);
684e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
685ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int CompareFieldName(const CFX_WideString& name1,
686ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       const CFX_WideString& name2);
687e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
688ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int CompareFieldName(const CFX_ByteString& name1,
689ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       const CFX_ByteString& name2);
690e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
691ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Document* const m_pDocument;
692e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
693ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL m_bGenerateAP;
694e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
695ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* m_pFormDict;
696e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
697ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::map<const CPDF_Dictionary*, CPDF_FormControl*> m_ControlMap;
698e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
699ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::unique_ptr<CFieldTree> m_pFieldTree;
700e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
701ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString m_bsEncoding;
702e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
703ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormNotify* m_pFormNotify;
704e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
705ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL m_bUpdated;
706ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  friend class CPDF_FormControl;
707ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  friend class CPDF_FormField;
708e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
709ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FORMFIELD_READONLY 0x01
710ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FORMFIELD_REQUIRED 0x02
711ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FORMFIELD_NOEXPORT 0x04
712ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FORMRADIO_NOTOGGLEOFF 0x100
713ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FORMRADIO_UNISON 0x200
714ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FORMTEXT_MULTILINE 0x100
715ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FORMTEXT_PASSWORD 0x200
716ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FORMTEXT_NOSCROLL 0x400
717ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FORMTEXT_COMB 0x800
718ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FORMCOMBO_EDIT 0x100
719ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FORMLIST_MULTISELECT 0x100
720ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_FormField {
721ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
722ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  enum Type {
723ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Unknown,
724ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    PushButton,
725ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    RadioButton,
726ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CheckBox,
727ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Text,
728ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    RichText,
729ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    File,
730ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ListBox,
731ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ComboBox,
732ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    Sign
733ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  };
734e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
735ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetFullName();
736e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
737ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  Type GetType() { return m_Type; }
738e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
739ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD GetFlags() { return m_Flags; }
740e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
741ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* GetFieldDict() const { return m_pDict; }
742e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
743ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void SetFieldDict(CPDF_Dictionary* pDict) { m_pDict = pDict; }
744e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
745ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL ResetField(FX_BOOL bNotify = FALSE);
746e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
747ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int CountControls() { return m_ControlList.GetSize(); }
748e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
749ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl* GetControl(int index) { return m_ControlList.GetAt(index); }
750e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
751ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetControlIndex(const CPDF_FormControl* pControl);
752e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
753ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetFieldType();
754e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
755ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_AAction GetAdditionalAction();
756e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
757ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetAlternateName();
758e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
759ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetMappingName();
760e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
761ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD GetFieldFlags();
762e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
763ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString GetDefaultStyle();
764e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
765ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetRichTextString();
766e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
767ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetValue();
768e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
769ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetDefaultValue();
770e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
771ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL SetValue(const CFX_WideString& value, FX_BOOL bNotify = FALSE);
772e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
773ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetMaxLen();
774e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
775ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int CountSelectedItems();
776e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
777ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetSelectedIndex(int index);
778e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
779ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL ClearSelection(FX_BOOL bNotify = FALSE);
780e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
781ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL IsItemSelected(int index);
782e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
783ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL SetItemSelection(int index,
784ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           FX_BOOL bSelected,
785ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           FX_BOOL bNotify = FALSE);
786e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
787ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL IsItemDefaultSelected(int index);
788e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
789ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetDefaultSelectedItem();
790e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
791ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int CountOptions();
792e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
793ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetOptionLabel(int index);
794e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
795ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetOptionValue(int index);
796e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
797ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int FindOption(CFX_WideString csOptLabel);
798e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
799ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int FindOptionValue(const CFX_WideString& csOptValue, int iStartIndex = 0);
800e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
801ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL CheckControl(int iControlIndex,
802ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       FX_BOOL bChecked,
803ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       FX_BOOL bNotify = FALSE);
804e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
805ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetTopVisibleIndex();
806e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
807ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int CountSelectedOptions();
808e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
809ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetSelectedOptionIndex(int index);
810e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
811ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL IsOptionSelected(int iOptIndex);
812e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
813ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL SelectOption(int iOptIndex,
814ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       FX_BOOL bSelected,
815ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       FX_BOOL bNotify = FALSE);
816e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
817ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL ClearSelectedOptions(FX_BOOL bNotify = FALSE);
818e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
819ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef PDF_ENABLE_XFA
820ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL ClearOptions(FX_BOOL bNotify = FALSE);
821e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
822ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int InsertOption(CFX_WideString csOptLabel,
823ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   int index = -1,
824ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   FX_BOOL bNotify = FALSE);
825ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif  // PDF_ENABLE_XFA
826e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
827ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT GetFontSize() { return m_FontSize; }
828e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
829ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Font* GetFont() { return m_pFont; }
830e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
831ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
832ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict);
833ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ~CPDF_FormField();
834e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
835ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetValue(FX_BOOL bDefault);
836e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
837ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL SetValue(const CFX_WideString& value,
838ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   FX_BOOL bDefault,
839ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   FX_BOOL bNotify);
840e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
841ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void SyncFieldFlags();
842e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
843ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int FindListSel(CPDF_String* str);
844e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
845ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetOptionText(int index, int sub_index);
846e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
847ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void LoadDA();
848e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
849ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void UpdateAP(CPDF_FormControl* pControl);
850e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
851ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetCheckValue(FX_BOOL bDefault);
852e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
853ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL SetCheckValue(const CFX_WideString& value,
854ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        FX_BOOL bDefault,
855ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        FX_BOOL bNotify);
856e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
857ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField::Type m_Type;
858ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_DWORD m_Flags;
859ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_InterForm* m_pForm;
860ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* m_pDict;
861ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ArrayTemplate<CPDF_FormControl*> m_ControlList;
862ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT m_FontSize;
863ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Font* m_pFont;
864e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
865ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  friend class CPDF_InterForm;
866ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  friend class CPDF_FormControl;
867e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
868ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict,
869ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                               const FX_CHAR* name,
870ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                               int nLevel = 0);
871ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_IconFit {
872ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
873ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  // TODO(thestig): Examine why this cannot be explicit.
874ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_IconFit(CPDF_Dictionary* pDict = NULL) { m_pDict = pDict; }
875e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
876ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  operator CPDF_Dictionary*() const { return m_pDict; }
877e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
878ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  enum ScaleMethod { Always = 0, Bigger, Smaller, Never };
879e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
880ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ScaleMethod GetScaleMethod();
881e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
882ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL IsProportionalScale();
883e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
884ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom);
885e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
886ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL GetFittingBounds();
887e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
888ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* m_pDict;
889e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
890e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
891ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define TEXTPOS_CAPTION 0
892ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define TEXTPOS_ICON 1
893ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define TEXTPOS_BELOW 2
894ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define TEXTPOS_ABOVE 3
895ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define TEXTPOS_RIGHT 4
896ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define TEXTPOS_LEFT 5
897ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define TEXTPOS_OVERLAID 6
898ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_FormControl {
899ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
900ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField::Type GetType() { return m_pField->GetType(); }
901e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
902ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_InterForm* GetInterForm() const { return m_pForm; }
903e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
904ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* GetField() const { return m_pField; }
905e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
906ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* GetWidget() const { return m_pWidgetDict; }
907e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
908ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_FloatRect GetRect() const;
909e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
910ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void DrawControl(CFX_RenderDevice* pDevice,
911ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   CFX_Matrix* pMatrix,
912ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   CPDF_Page* pPage,
913ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   CPDF_Annot::AppearanceMode mode,
914ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   const CPDF_RenderOptions* pOptions = NULL);
915e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
916ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString GetCheckedAPState();
917e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
918ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetExportValue();
919e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
920ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL IsChecked();
921e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
922ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL IsDefaultChecked();
923e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
924ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  enum HighlightingMode { None = 0, Invert, Outline, Push, Toggle };
925e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
926ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  HighlightingMode GetHighlightingMode();
927e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
928ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  bool HasMKEntry(CFX_ByteString csEntry) const;
929e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
930ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetRotation();
931e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
932ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  inline FX_ARGB GetBorderColor(int& iColorType) {
933ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return GetColor(iColorType, "BC");
934ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
935e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
936ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT GetOriginalBorderColor(int index) {
937ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return GetOriginalColor(index, "BC");
938ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
939e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
940ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4]) {
941ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    GetOriginalColor(iColorType, fc, "BC");
942ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
943e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
944ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_ARGB GetBackgroundColor(int& iColorType) {
945ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return GetColor(iColorType, "BG");
946ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
947e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
948ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT GetOriginalBackgroundColor(int index) {
949ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return GetOriginalColor(index, "BG");
950ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
951e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
952ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4]) {
953ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    GetOriginalColor(iColorType, fc, "BG");
954ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
955e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
956ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetNormalCaption() { return GetCaption("CA"); }
957e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
958ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetRolloverCaption() { return GetCaption("RC"); }
959e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
960ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetDownCaption() { return GetCaption("AC"); }
961e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
962ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Stream* GetNormalIcon() { return GetIcon("I"); }
963e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
964ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Stream* GetRolloverIcon() { return GetIcon("RI"); }
965e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
966ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Stream* GetDownIcon() { return GetIcon("IX"); }
967e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
968ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_IconFit GetIconFit();
969e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
970ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetTextPosition();
971e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
972ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Action GetAction();
973e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
974ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_AAction GetAdditionalAction();
975e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
976ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_DefaultAppearance GetDefaultAppearance();
977e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
978ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Font* GetDefaultControlFont();
979e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
980ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetControlAlignment();
981e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
982ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
983ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormControl(CPDF_FormField* pField, CPDF_Dictionary* pWidgetDict);
984e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
985ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString GetOnStateName();
986e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
987ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void SetOnStateName(const CFX_ByteString& csOn);
988e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
989ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void CheckControl(FX_BOOL bChecked);
990e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
991ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_ARGB GetColor(int& iColorType, CFX_ByteString csEntry);
992e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
993ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT GetOriginalColor(int index, CFX_ByteString csEntry);
994e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
995ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetOriginalColor(int& iColorType,
996ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        FX_FLOAT fc[4],
997ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        CFX_ByteString csEntry);
998e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
999ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetCaption(CFX_ByteString csEntry);
1000e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1001ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Stream* GetIcon(CFX_ByteString csEntry);
1002e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1003ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_ApSettings GetMK() const;
1004e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1005ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_InterForm* m_pForm;
1006e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1007ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_FormField* m_pField;
1008e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1009ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* m_pWidgetDict;
1010ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  friend class CPDF_InterForm;
1011ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  friend class CPDF_FormField;
1012ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
1013ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_FormNotify {
1014ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
1015ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual ~CPDF_FormNotify() {}
1016e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1017ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int BeforeValueChange(const CPDF_FormField* pField,
1018ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                CFX_WideString& csValue) {
1019ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return 0;
1020ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1021e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1022ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int AfterValueChange(const CPDF_FormField* pField) { return 0; }
1023e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1024ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int BeforeSelectionChange(const CPDF_FormField* pField,
1025ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    CFX_WideString& csValue) {
1026ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return 0;
1027ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1028e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1029ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int AfterSelectionChange(const CPDF_FormField* pField) { return 0; }
1030e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1031ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int AfterCheckedStatusChange(const CPDF_FormField* pField,
1032ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       const CFX_ByteArray& statusArray) {
1033ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return 0;
1034ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1035e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1036ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int BeforeFormReset(const CPDF_InterForm* pForm) { return 0; }
1037e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1038ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int AfterFormReset(const CPDF_InterForm* pForm) { return 0; }
1039e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1040ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int BeforeFormImportData(const CPDF_InterForm* pForm) { return 0; }
1041e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1042ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int AfterFormImportData(const CPDF_InterForm* pForm) { return 0; }
1043e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
1044ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL FPDF_GenerateAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);
1045ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_PageLabel {
1046ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
1047ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  explicit CPDF_PageLabel(CPDF_Document* pDocument) { m_pDocument = pDocument; }
1048e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1049ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetLabel(int nPage) const;
1050e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1051ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t GetPageByLabel(const CFX_ByteStringC& bsLabel) const;
1052e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1053ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t GetPageByLabel(const CFX_WideStringC& wsLabel) const;
1054e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1055ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
1056ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Document* m_pDocument;
1057e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
1058e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1059ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_Metadata {
1060ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
1061ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  explicit CPDF_Metadata(CPDF_Document* pDoc);
1062ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ~CPDF_Metadata();
1063e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1064ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const CXML_Element* GetRoot() const;
1065e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1066ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann private:
1067ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  std::unique_ptr<CXML_Element> m_pXmlElement;
1068e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
1069e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1070ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_ViewerPreferences {
1071ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
1072ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  explicit CPDF_ViewerPreferences(CPDF_Document* pDoc);
1073e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1074ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ~CPDF_ViewerPreferences();
1075e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1076ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL IsDirectionR2L() const;
1077e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1078ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL PrintScaling() const;
1079e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1080ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t NumCopies() const;
1081e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1082ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Array* PrintPageRange() const;
1083e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1084ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ByteString Duplex() const;
1085e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1086ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
1087ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Document* const m_pDoc;
1088e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
1089e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1090ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CPDF_ApSettings {
1091ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
1092ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  explicit CPDF_ApSettings(CPDF_Dictionary* pDict);
1093e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1094ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  bool HasMKEntry(const CFX_ByteStringC& csEntry) const;
1095ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetRotation() const;
1096e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1097ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_ARGB GetBorderColor(int& iColorType) const {
1098ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return GetColor(iColorType, "BC");
1099ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT GetOriginalBorderColor(int index) const {
1102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return GetOriginalColor(index, "BC");
1103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4]) const {
1106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    GetOriginalColor(iColorType, fc, "BC");
1107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_ARGB GetBackgroundColor(int& iColorType) const {
1110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return GetColor(iColorType, "BG");
1111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT GetOriginalBackgroundColor(int index) const {
1114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return GetOriginalColor(index, "BG");
1115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4]) const {
1118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    GetOriginalColor(iColorType, fc, "BG");
1119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetNormalCaption() const { return GetCaption("CA"); }
1122e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetRolloverCaption() const { return GetCaption("RC"); }
1124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetDownCaption() const { return GetCaption("AC"); }
1126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Stream* GetNormalIcon() const { return GetIcon("I"); }
1128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Stream* GetRolloverIcon() const { return GetIcon("RI"); }
1130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Stream* GetDownIcon() const { return GetIcon("IX"); }
1132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_IconFit GetIconFit() const;
1134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int GetTextPosition() const;
1136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected:
1138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  friend class CPDF_FormControl;
1139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_ARGB GetColor(int& iColorType, const CFX_ByteStringC& csEntry) const;
1141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT GetOriginalColor(int index, const CFX_ByteStringC& csEntry) const;
1143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void GetOriginalColor(int& iColorType,
1145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        FX_FLOAT fc[4],
1146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                        const CFX_ByteStringC& csEntry) const;
1147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideString GetCaption(const CFX_ByteStringC& csEntry) const;
1149e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Stream* GetIcon(const CFX_ByteStringC& csEntry) const;
1151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CPDF_Dictionary* const m_pDict;
1153e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
1154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString FILESPEC_EncodeFileName(const CFX_WideStringC& filepath);
1156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
1157e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#endif  // CORE_INCLUDE_FPDFDOC_FPDF_DOC_H_
1158