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 "fpdfsdk/include/fsdk_define.h" 19 #include "fpdfsdk/include/fx_systemhandler.h" 20 21 class CPDFSDK_PageView; 22 class CPDF_Annot; 23 class CPDF_Page; 24 class CFX_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 explicit CPDFSDK_Annot(CPDFSDK_PageView* pPageView); 72 virtual ~CPDFSDK_Annot() {} 73 74 #ifdef PDF_ENABLE_XFA 75 virtual FX_BOOL IsXFAField() { return FALSE; } 76 #endif // PDF_ENABLE_XFA 77 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 83 virtual CPDF_Annot* GetPDFAnnot() const { return nullptr; } 84 85 #ifdef PDF_ENABLE_XFA 86 virtual IXFA_Widget* GetXFAWidget() const { return nullptr; } 87 #endif // PDF_ENABLE_XFA 88 89 virtual CFX_ByteString GetType() const { return ""; } 90 virtual CFX_ByteString GetSubType() const { return ""; } 91 92 virtual void SetRect(const CPDF_Rect& rect) {} 93 virtual CPDF_Rect GetRect() const { return CPDF_Rect(); } 94 95 virtual void Annot_OnDraw(CFX_RenderDevice* pDevice, 96 CFX_Matrix* pUser2Device, 97 CPDF_RenderOptions* pOptions) {} 98 99 UnderlyingPageType* GetUnderlyingPage(); 100 CPDF_Page* GetPDFPage(); 101 #ifdef PDF_ENABLE_XFA 102 CPDFXFA_Page* GetPDFXFAPage(); 103 #endif // PDF_ENABLE_XFA 104 105 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 122 class 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(); 220 }; 221 222 #endif // FPDFSDK_INCLUDE_FSDK_BASEANNOT_H_ 223