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 { 32 public: 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 72 class CPDFSDK_Annot 73 { 74 public: 75 CPDFSDK_Annot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView); 76 virtual ~CPDFSDK_Annot(); 77 public: 78 virtual FX_FLOAT GetMinWidth() const; 79 virtual FX_FLOAT GetMinHeight() const; 80 //define layout order to 5. GetLayoutOrder()81 virtual int GetLayoutOrder() const { return 5; } 82 83 public: 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 103 public: 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 164 public: 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 178 public: 179 virtual void Annot_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,CPDF_RenderOptions* pOptions); 180 public: 181 182 183 private: 184 FX_BOOL CreateFormFiller(); 185 protected: 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