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 21class CPDFSDK_PageView; 22class CPDF_Annot; 23class CPDF_Page; 24class CFX_Matrix; 25class CPDF_RenderOptions; 26class CFX_RenderDevice; 27 28#define CFX_IntArray CFX_ArrayTemplate<int> 29 30class 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 69class 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 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(); 220}; 221 222#endif // FPDFSDK_INCLUDE_FSDK_BASEANNOT_H_ 223