1// 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.
4
5// 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
16#include "../../core/include/fpdfdoc/fpdf_doc.h"
17#include "../../core/include/fxcrt/fx_basic.h"
18#include "fx_systemhandler.h"
19
20class CPDFSDK_PageView;
21class CPDF_Annot;
22class CPDF_Page;
23class CPDF_Rect;
24class CPDF_Matrix;
25class CPDF_RenderOptions;
26class CFX_RenderDevice;
27
28#define CFX_IntArray				CFX_ArrayTemplate<int>
29
30class  CPDFSDK_DateTime
31{
32public:
33	CPDFSDK_DateTime();
34	CPDFSDK_DateTime(const CFX_ByteString& dtStr);
35	CPDFSDK_DateTime(const CPDFSDK_DateTime& datetime);
36	CPDFSDK_DateTime(const FX_SYSTEMTIME& st);
37
38
39	CPDFSDK_DateTime&	operator = (const CPDFSDK_DateTime& datetime);
40	CPDFSDK_DateTime&	operator = (const FX_SYSTEMTIME& st);
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	FX_BOOL				operator < (CPDFSDK_DateTime& datetime);
46	FX_BOOL				operator <= (CPDFSDK_DateTime& datetime);
47						operator time_t();
48
49	CPDFSDK_DateTime&	FromPDFDateTimeString(const CFX_ByteString& dtStr);
50	CFX_ByteString		ToCommonDateTimeString();
51	CFX_ByteString		ToPDFDateTimeString();
52	void				ToSystemTime(FX_SYSTEMTIME& st);
53	CPDFSDK_DateTime	ToGMT();
54	CPDFSDK_DateTime&	AddDays(short days);
55	CPDFSDK_DateTime&	AddSeconds(int seconds);
56
57	void				ResetDateTime();
58
59	struct FX_DATETIME
60	{
61		FX_SHORT	year;
62		FX_BYTE		month;
63		FX_BYTE		day;
64		FX_BYTE		hour;
65		FX_BYTE		minute;
66		FX_BYTE		second;
67		FX_INT8 	tzHour;
68		FX_BYTE		tzMinute;
69	}dt;
70};
71
72class CPDFSDK_Annot
73{
74public:
75	CPDFSDK_Annot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView);
76	virtual ~CPDFSDK_Annot();
77public:
78	virtual FX_FLOAT			GetMinWidth() const;
79	virtual FX_FLOAT			GetMinHeight() const;
80	//define layout order to 5.
81	virtual int					GetLayoutOrder() const { return 5; }
82
83public:
84	CPDF_Annot*					GetPDFAnnot();
85
86	void						SetPage(CPDFSDK_PageView* pPageView);
87	CPDFSDK_PageView*			GetPageView();
88	FX_DWORD					GetFlags();
89
90	// Tab Order
91	int							GetTabOrder();
92	void						SetTabOrder(int iTabOrder);
93
94	// Selection
95	FX_BOOL						IsSelected();
96	void						SetSelected(FX_BOOL bSelected);
97
98	CFX_ByteString				GetType() const;
99	virtual CFX_ByteString		GetSubType() const;
100
101	CPDF_Page*					GetPDFPage();
102
103public:
104	CPDF_Dictionary*			GetAnnotDict() const;
105
106	void						SetRect(const CPDF_Rect& rect);
107	CPDF_Rect					GetRect() const;
108
109	void						SetContents(const CFX_WideString& sContents);
110	CFX_WideString				GetContents() const;
111
112	void						SetAnnotName(const CFX_WideString& sName);
113	CFX_WideString				GetAnnotName() const;
114
115	void						SetModifiedDate(const FX_SYSTEMTIME& st);
116	FX_SYSTEMTIME				GetModifiedDate() const;
117
118	void						SetFlags(int nFlags);
119	int							GetFlags() const;
120
121	void						SetAppState(const CFX_ByteString& str);
122	CFX_ByteString				GetAppState() const;
123
124	void						SetStructParent(int key);
125	int							GetStructParent() const;
126
127	//border
128	void						SetBorderWidth(int nWidth);
129	int							GetBorderWidth() const;
130
131	//BBS_SOLID
132	//BBS_DASH
133	//BBS_BEVELED
134	//BBS_INSET
135	//BBS_UNDERLINE
136
137	void						SetBorderStyle(int nStyle);
138	int							GetBorderStyle() const;
139
140	void						SetBorderDash(const CFX_IntArray& array);
141	void						GetBorderDash(CFX_IntArray& array) const;
142
143	//The background of the annotation's icon when closed
144	//The title bar of the annotation's pop-up window
145	//The border of a link annotation
146
147	void						SetColor(FX_COLORREF color);
148	void						RemoveColor();
149	FX_BOOL						GetColor(FX_COLORREF& color) const;
150
151	FX_BOOL						IsVisible() const;
152	//action
153
154	CPDF_Action					GetAction() const;
155	void						SetAction(const CPDF_Action& a);
156	void						RemoveAction();
157
158	CPDF_AAction				GetAAction() const;
159	void						SetAAction(const CPDF_AAction& aa);
160	void						RemoveAAction();
161
162	virtual CPDF_Action			GetAAction(CPDF_AAction::AActionType eAAT);
163
164public:
165	FX_BOOL						IsAppearanceValid();
166	FX_BOOL						IsAppearanceValid(CPDF_Annot::AppearanceMode mode);
167	void						DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device,
168		CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions);
169	void						DrawBorder(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device,
170		const CPDF_RenderOptions* pOptions);
171
172	void						ClearCachedAP();
173
174	void						WriteAppearance(const CFX_ByteString& sAPType, const CPDF_Rect& rcBBox,
175		const CPDF_Matrix& matrix, const CFX_ByteString& sContents,
176		const CFX_ByteString& sAPState = "");
177
178public:
179	virtual void			Annot_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,CPDF_RenderOptions* pOptions);
180public:
181
182
183private:
184	FX_BOOL CreateFormFiller();
185protected:
186	CPDF_Annot*			m_pAnnot;
187	CPDFSDK_PageView*	m_pPageView;
188	FX_BOOL				m_bSelected;
189	int					m_nTabOrder;
190
191};
192
193#endif  // FPDFSDK_INCLUDE_FSDK_BASEANNOT_H_
194