blob: 49c25de28462d3fa9d13845e8afd1693c371d0d0 [file] [log] [blame]
Svet Ganove6986e12015-06-04 14:52:15 -07001// Copyright 2014 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -08004
Svet Ganove6986e12015-06-04 14:52:15 -07005// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#ifndef FPDFSDK_INCLUDE_FSDK_BASEANNOT_H_
8#define FPDFSDK_INCLUDE_FSDK_BASEANNOT_H_
9
10#if _FX_OS_ == _FX_ANDROID_
11#include "time.h"
12#else
13#include <ctime>
14#endif
15
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080016#include "core/include/fpdfdoc/fpdf_doc.h"
17#include "core/include/fxcrt/fx_basic.h"
18#include "fpdfsdk/include/fsdk_define.h"
19#include "fpdfsdk/include/fx_systemhandler.h"
Svet Ganove6986e12015-06-04 14:52:15 -070020
21class CPDFSDK_PageView;
22class CPDF_Annot;
23class CPDF_Page;
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080024class CFX_Matrix;
Svet Ganove6986e12015-06-04 14:52:15 -070025class CPDF_RenderOptions;
26class CFX_RenderDevice;
27
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080028#define CFX_IntArray CFX_ArrayTemplate<int>
Svet Ganove6986e12015-06-04 14:52:15 -070029
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080030class CPDFSDK_DateTime {
31 public:
32 CPDFSDK_DateTime();
33 CPDFSDK_DateTime(const CFX_ByteString& dtStr);
34 CPDFSDK_DateTime(const CPDFSDK_DateTime& datetime);
35 CPDFSDK_DateTime(const FX_SYSTEMTIME& st);
36
37 CPDFSDK_DateTime& operator=(const CPDFSDK_DateTime& datetime);
38 CPDFSDK_DateTime& operator=(const FX_SYSTEMTIME& st);
39 FX_BOOL operator==(CPDFSDK_DateTime& datetime);
40 FX_BOOL operator!=(CPDFSDK_DateTime& datetime);
41 FX_BOOL operator>(CPDFSDK_DateTime& datetime);
42 FX_BOOL operator>=(CPDFSDK_DateTime& datetime);
43 FX_BOOL operator<(CPDFSDK_DateTime& datetime);
44 FX_BOOL operator<=(CPDFSDK_DateTime& datetime);
45 operator time_t();
46
47 CPDFSDK_DateTime& FromPDFDateTimeString(const CFX_ByteString& dtStr);
48 CFX_ByteString ToCommonDateTimeString();
49 CFX_ByteString ToPDFDateTimeString();
50 void ToSystemTime(FX_SYSTEMTIME& st);
51 CPDFSDK_DateTime ToGMT();
52 CPDFSDK_DateTime& AddDays(short days);
53 CPDFSDK_DateTime& AddSeconds(int seconds);
54
55 void ResetDateTime();
56
57 struct FX_DATETIME {
58 int16_t year;
59 uint8_t month;
60 uint8_t day;
61 uint8_t hour;
62 uint8_t minute;
63 uint8_t second;
64 int8_t tzHour;
65 uint8_t tzMinute;
66 } dt;
Svet Ganove6986e12015-06-04 14:52:15 -070067};
68
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080069class CPDFSDK_Annot {
70 public:
71 explicit CPDFSDK_Annot(CPDFSDK_PageView* pPageView);
72 virtual ~CPDFSDK_Annot() {}
Svet Ganove6986e12015-06-04 14:52:15 -070073
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080074#ifdef PDF_ENABLE_XFA
75 virtual FX_BOOL IsXFAField() { return FALSE; }
76#endif // PDF_ENABLE_XFA
Svet Ganove6986e12015-06-04 14:52:15 -070077
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080078 virtual FX_FLOAT GetMinWidth() const;
79 virtual FX_FLOAT GetMinHeight() const;
80 // define layout order to 5.
81 virtual int GetLayoutOrder() const { return 5; }
Svet Ganove6986e12015-06-04 14:52:15 -070082
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080083 virtual CPDF_Annot* GetPDFAnnot() const { return nullptr; }
Svet Ganove6986e12015-06-04 14:52:15 -070084
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080085#ifdef PDF_ENABLE_XFA
86 virtual IXFA_Widget* GetXFAWidget() const { return nullptr; }
87#endif // PDF_ENABLE_XFA
Svet Ganove6986e12015-06-04 14:52:15 -070088
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080089 virtual CFX_ByteString GetType() const { return ""; }
90 virtual CFX_ByteString GetSubType() const { return ""; }
Svet Ganove6986e12015-06-04 14:52:15 -070091
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080092 virtual void SetRect(const CPDF_Rect& rect) {}
93 virtual CPDF_Rect GetRect() const { return CPDF_Rect(); }
Svet Ganove6986e12015-06-04 14:52:15 -070094
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080095 virtual void Annot_OnDraw(CFX_RenderDevice* pDevice,
96 CFX_Matrix* pUser2Device,
97 CPDF_RenderOptions* pOptions) {}
Svet Ganove6986e12015-06-04 14:52:15 -070098
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -080099 UnderlyingPageType* GetUnderlyingPage();
100 CPDF_Page* GetPDFPage();
101#ifdef PDF_ENABLE_XFA
102 CPDFXFA_Page* GetPDFXFAPage();
103#endif // PDF_ENABLE_XFA
Svet Ganove6986e12015-06-04 14:52:15 -0700104
Philip P. Moltmannac3d58c2016-03-04 15:19:21 -0800105 void SetPage(CPDFSDK_PageView* pPageView) { m_pPageView = pPageView; }
106 CPDFSDK_PageView* GetPageView() const { return m_pPageView; }
107
108 // Tab Order
109 int GetTabOrder();
110 void SetTabOrder(int iTabOrder);
111
112 // Selection
113 FX_BOOL IsSelected();
114 void SetSelected(FX_BOOL bSelected);
115
116 protected:
117 CPDFSDK_PageView* m_pPageView;
118 FX_BOOL m_bSelected;
119 int m_nTabOrder;
120};
121
122class CPDFSDK_BAAnnot : public CPDFSDK_Annot {
123 public:
124 CPDFSDK_BAAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView);
125 ~CPDFSDK_BAAnnot() override {}
126
127#ifdef PDF_ENABLE_XFA
128 FX_BOOL IsXFAField() override;
129#endif // PDF_ENABLE_XFA
130
131 CFX_ByteString GetType() const override;
132 CFX_ByteString GetSubType() const override;
133 void SetRect(const CPDF_Rect& rect) override;
134 CPDF_Rect GetRect() const override;
135 CPDF_Annot* GetPDFAnnot() const override;
136 void Annot_OnDraw(CFX_RenderDevice* pDevice,
137 CFX_Matrix* pUser2Device,
138 CPDF_RenderOptions* pOptions) override;
139
140 CPDF_Dictionary* GetAnnotDict() const;
141
142 void SetContents(const CFX_WideString& sContents);
143 CFX_WideString GetContents() const;
144
145 void SetAnnotName(const CFX_WideString& sName);
146 CFX_WideString GetAnnotName() const;
147
148 void SetModifiedDate(const FX_SYSTEMTIME& st);
149 FX_SYSTEMTIME GetModifiedDate() const;
150
151 void SetFlags(int nFlags);
152 int GetFlags() const;
153
154 void SetAppState(const CFX_ByteString& str);
155 CFX_ByteString GetAppState() const;
156
157 void SetStructParent(int key);
158 int GetStructParent() const;
159
160 // border
161 void SetBorderWidth(int nWidth);
162 int GetBorderWidth() const;
163
164 // BBS_SOLID
165 // BBS_DASH
166 // BBS_BEVELED
167 // BBS_INSET
168 // BBS_UNDERLINE
169
170 void SetBorderStyle(int nStyle);
171 int GetBorderStyle() const;
172
173 void SetBorderDash(const CFX_IntArray& array);
174 void GetBorderDash(CFX_IntArray& array) const;
175
176 // The background of the annotation's icon when closed
177 // The title bar of the annotation's pop-up window
178 // The border of a link annotation
179
180 void SetColor(FX_COLORREF color);
181 void RemoveColor();
182 FX_BOOL GetColor(FX_COLORREF& color) const;
183
184 FX_BOOL IsVisible() const;
185 // action
186
187 CPDF_Action GetAction() const;
188 void SetAction(const CPDF_Action& a);
189 void RemoveAction();
190
191 CPDF_AAction GetAAction() const;
192 void SetAAction(const CPDF_AAction& aa);
193 void RemoveAAction();
194
195 virtual CPDF_Action GetAAction(CPDF_AAction::AActionType eAAT);
196
197 virtual FX_BOOL IsAppearanceValid();
198 virtual FX_BOOL IsAppearanceValid(CPDF_Annot::AppearanceMode mode);
199 virtual void DrawAppearance(CFX_RenderDevice* pDevice,
200 const CFX_Matrix* pUser2Device,
201 CPDF_Annot::AppearanceMode mode,
202 const CPDF_RenderOptions* pOptions);
203 void DrawBorder(CFX_RenderDevice* pDevice,
204 const CFX_Matrix* pUser2Device,
205 const CPDF_RenderOptions* pOptions);
206
207 void ClearCachedAP();
208
209 void WriteAppearance(const CFX_ByteString& sAPType,
210 const CPDF_Rect& rcBBox,
211 const CFX_Matrix& matrix,
212 const CFX_ByteString& sContents,
213 const CFX_ByteString& sAPState = "");
214
215 protected:
216 CPDF_Annot* m_pAnnot;
217
218 private:
219 FX_BOOL CreateFormFiller();
Svet Ganove6986e12015-06-04 14:52:15 -0700220};
221
222#endif // FPDFSDK_INCLUDE_FSDK_BASEANNOT_H_