Clean up CPDF_AnnotList.
[pdfium.git] / fpdfsdk / include / fsdk_baseannot.h
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
20 class CPDFSDK_PageView;
21 class CPDF_Annot;
22 class CPDF_Page;
23 class CPDF_Rect;
24 class CPDF_Matrix;
25 class CPDF_RenderOptions;
26 class CFX_RenderDevice;
27
28 #define CFX_IntArray CFX_ArrayTemplate<int>
29
30 class 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;
67 };
68
69 class CPDFSDK_Annot {
70  public:
71   CPDFSDK_Annot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView);
72   virtual ~CPDFSDK_Annot();
73
74  public:
75   virtual FX_FLOAT GetMinWidth() const;
76   virtual FX_FLOAT GetMinHeight() const;
77   // define layout order to 5.
78   virtual int GetLayoutOrder() const { return 5; }
79
80  public:
81   CPDF_Annot* GetPDFAnnot();
82
83   void SetPage(CPDFSDK_PageView* pPageView);
84   CPDFSDK_PageView* GetPageView();
85   FX_DWORD GetFlags();
86
87   // Tab Order
88   int GetTabOrder();
89   void SetTabOrder(int iTabOrder);
90
91   // Selection
92   FX_BOOL IsSelected();
93   void SetSelected(FX_BOOL bSelected);
94
95   CFX_ByteString GetType() const;
96   virtual CFX_ByteString GetSubType() const;
97
98   CPDF_Page* GetPDFPage();
99
100  public:
101   CPDF_Dictionary* GetAnnotDict() const;
102
103   void SetRect(const CPDF_Rect& rect);
104   CPDF_Rect GetRect() const;
105
106   void SetContents(const CFX_WideString& sContents);
107   CFX_WideString GetContents() const;
108
109   void SetAnnotName(const CFX_WideString& sName);
110   CFX_WideString GetAnnotName() const;
111
112   void SetModifiedDate(const FX_SYSTEMTIME& st);
113   FX_SYSTEMTIME GetModifiedDate() const;
114
115   void SetFlags(int nFlags);
116   int GetFlags() const;
117
118   void SetAppState(const CFX_ByteString& str);
119   CFX_ByteString GetAppState() const;
120
121   void SetStructParent(int key);
122   int GetStructParent() const;
123
124   // border
125   void SetBorderWidth(int nWidth);
126   int GetBorderWidth() const;
127
128   // BBS_SOLID
129   // BBS_DASH
130   // BBS_BEVELED
131   // BBS_INSET
132   // BBS_UNDERLINE
133
134   void SetBorderStyle(int nStyle);
135   int GetBorderStyle() const;
136
137   void SetBorderDash(const CFX_IntArray& array);
138   void GetBorderDash(CFX_IntArray& array) const;
139
140   // The background of the annotation's icon when closed
141   // The title bar of the annotation's pop-up window
142   // The border of a link annotation
143
144   void SetColor(FX_COLORREF color);
145   void RemoveColor();
146   FX_BOOL GetColor(FX_COLORREF& color) const;
147
148   FX_BOOL IsVisible() const;
149   // action
150
151   CPDF_Action GetAction() const;
152   void SetAction(const CPDF_Action& a);
153   void RemoveAction();
154
155   CPDF_AAction GetAAction() const;
156   void SetAAction(const CPDF_AAction& aa);
157   void RemoveAAction();
158
159   virtual CPDF_Action GetAAction(CPDF_AAction::AActionType eAAT);
160
161  public:
162   FX_BOOL IsAppearanceValid();
163   FX_BOOL IsAppearanceValid(CPDF_Annot::AppearanceMode mode);
164   void DrawAppearance(CFX_RenderDevice* pDevice,
165                       const CPDF_Matrix* pUser2Device,
166                       CPDF_Annot::AppearanceMode mode,
167                       const CPDF_RenderOptions* pOptions);
168   void DrawBorder(CFX_RenderDevice* pDevice,
169                   const CPDF_Matrix* pUser2Device,
170                   const CPDF_RenderOptions* pOptions);
171
172   void ClearCachedAP();
173
174   void WriteAppearance(const CFX_ByteString& sAPType,
175                        const CPDF_Rect& rcBBox,
176                        const CPDF_Matrix& matrix,
177                        const CFX_ByteString& sContents,
178                        const CFX_ByteString& sAPState = "");
179
180  public:
181   virtual void Annot_OnDraw(CFX_RenderDevice* pDevice,
182                             CPDF_Matrix* pUser2Device,
183                             CPDF_RenderOptions* pOptions);
184
185  public:
186  private:
187   FX_BOOL CreateFormFiller();
188
189  protected:
190   CPDF_Annot* m_pAnnot;
191   CPDFSDK_PageView* m_pPageView;
192   FX_BOOL m_bSelected;
193   int m_nTabOrder;
194 };
195
196 #endif  // FPDFSDK_INCLUDE_FSDK_BASEANNOT_H_