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 _PWL_NOTE_H_ 8 #define _PWL_NOTE_H_ 9 10 class IPWL_NoteNotify; 11 class IPWL_NoteHandler; 12 class IPWL_NoteItem; 13 class CPWL_NoteItem; 14 class CPWL_Note; 15 class CPWL_Label; 16 class CPWL_Edit; 17 class CPWL_Note_Icon; 18 class CPWL_Note_CloseBox; 19 class CPWL_Note_LBBox; 20 class CPWL_Note_RBBox; 21 class CPWL_Note_Edit; 22 class CPWL_Note_Options; 23 class CPWL_Note_Contents; 24 class IPopup_Note; 25 26 27 class IPWL_NoteNotify 28 { 29 public: 30 virtual void OnNoteMove(const FX_RECT& rtWin) = 0; 31 virtual void OnNoteShow(FX_BOOL bShow) = 0; 32 virtual void OnNoteActivate(FX_BOOL bActive) = 0; 33 virtual void OnNoteClose() = 0; 34 virtual void OnItemCreate(IPWL_NoteItem* pItem) = 0; 35 virtual void OnItemDelete(IPWL_NoteItem* pItem) = 0; 36 virtual void OnSetAuthorName(IPWL_NoteItem* pItem) = 0; 37 virtual void OnSetBkColor(IPWL_NoteItem* pItem) = 0; 38 virtual void OnSetContents(IPWL_NoteItem* pItem) = 0; 39 virtual void OnSetDateTime(IPWL_NoteItem* pItem) = 0; 40 virtual void OnSetSubjectName(IPWL_NoteItem* pItem) = 0; 41 virtual void OnPopupMenu(FX_INT32 x, FX_INT32 y) = 0; 42 virtual void OnPopupMenu(IPWL_NoteItem* pItem, FX_INT32 x, FX_INT32 y) = 0; 43 }; 44 45 class IPWL_NoteHandler 46 { 47 public: 48 virtual void OnNoteColorChanged(const CPWL_Color& color) = 0; 49 }; 50 51 class IPWL_NoteItem 52 { 53 public: 54 virtual void SetPrivateData(void* pData) = 0; 55 virtual void SetBkColor(const CPWL_Color& color) = 0; 56 virtual void SetSubjectName(const CFX_WideString& sName) = 0; 57 virtual void SetAuthorName(const CFX_WideString& sName) = 0; 58 virtual void SetDateTime(FX_SYSTEMTIME time) = 0; 59 virtual void SetContents(const CFX_WideString& sContents) = 0; 60 61 virtual IPWL_NoteItem* CreateSubItem() = 0; 62 virtual FX_INT32 CountSubItems() const = 0; 63 virtual IPWL_NoteItem* GetSubItems(FX_INT32 index) const = 0; 64 virtual void DeleteSubItem(IPWL_NoteItem* pNoteItem) = 0; 65 virtual void SetFocus() = 0; 66 67 virtual IPWL_NoteItem* GetParentItem() const = 0; 68 virtual void* GetPrivateData() const = 0; 69 virtual CFX_WideString GetAuthorName() const = 0; 70 virtual CPWL_Color GetBkColor() const = 0; 71 virtual CFX_WideString GetContents() const = 0; 72 virtual FX_SYSTEMTIME GetDateTime() const = 0; 73 virtual CFX_WideString GetSubjectName() const = 0; 74 75 virtual CPWL_Edit* GetEdit() const = 0; 76 }; 77 78 class PWL_CLASS CPWL_Note_Icon : public CPWL_Wnd 79 { 80 public: 81 CPWL_Note_Icon(); 82 virtual ~CPWL_Note_Icon(); 83 84 void SetIconType(FX_INT32 nType); 85 86 public: 87 88 protected: 89 virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); 90 91 private: 92 FX_INT32 m_nType; 93 }; 94 95 class CPWL_Note_CloseBox : public CPWL_Button 96 { 97 public: 98 CPWL_Note_CloseBox(); 99 virtual ~CPWL_Note_CloseBox(); 100 101 protected: 102 virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); 103 virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag); 104 virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag); 105 106 private: 107 FX_BOOL m_bMouseDown; 108 }; 109 110 class CPWL_Note_LBBox : public CPWL_Wnd 111 { 112 public: 113 CPWL_Note_LBBox(); 114 virtual ~CPWL_Note_LBBox(); 115 116 protected: 117 virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); 118 }; 119 120 class CPWL_Note_RBBox : public CPWL_Wnd 121 { 122 public: 123 CPWL_Note_RBBox(); 124 virtual ~CPWL_Note_RBBox(); 125 126 protected: 127 virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); 128 }; 129 130 class CPWL_Note_Edit : public CPWL_Edit 131 { 132 public: 133 CPWL_Note_Edit(); 134 virtual ~CPWL_Note_Edit(); 135 136 void EnableNotify(FX_BOOL bEnable) {m_bEnableNotify = bEnable;} 137 virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth); 138 FX_FLOAT GetItemLeftMargin(); 139 FX_FLOAT GetItemRightMargin(); 140 141 virtual void SetText(FX_LPCWSTR csText); 142 143 protected: 144 virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam = 0, FX_INTPTR lParam = 0); 145 virtual void RePosChildWnd(); 146 virtual void OnSetFocus(); 147 virtual void OnKillFocus(); 148 149 private: 150 FX_BOOL m_bEnableNotify; 151 FX_FLOAT m_fOldItemHeight; 152 FX_BOOL m_bSizeChanged; 153 FX_FLOAT m_fOldMin; 154 FX_FLOAT m_fOldMax; 155 }; 156 157 class CPWL_Note_Options : public CPWL_Wnd 158 { 159 public: 160 CPWL_Note_Options(); 161 virtual ~CPWL_Note_Options(); 162 163 CPDF_Rect GetContentRect() const; 164 virtual void SetTextColor(const CPWL_Color & color); 165 void SetText(const CFX_WideString& sText); 166 167 protected: 168 virtual void RePosChildWnd(); 169 virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); 170 virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); 171 172 private: 173 CPWL_Label* m_pText; 174 }; 175 176 class CPWL_Note_Contents : public CPWL_ListCtrl 177 { 178 public: 179 CPWL_Note_Contents(); 180 virtual ~CPWL_Note_Contents(); 181 182 virtual CFX_ByteString GetClassName() const; 183 virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam = 0, FX_INTPTR lParam = 0); 184 virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); 185 186 void SetEditFocus(FX_BOOL bLast); 187 CPWL_Edit* GetEdit() const; 188 189 public: 190 void SetText(const CFX_WideString& sText); 191 CFX_WideString GetText() const; 192 193 CPWL_NoteItem* CreateSubItem(); 194 void DeleteSubItem(IPWL_NoteItem* pNoteItem); 195 FX_INT32 CountSubItems() const; 196 IPWL_NoteItem* GetSubItems(FX_INT32 index) const; 197 198 virtual IPWL_NoteItem* GetHitNoteItem(const CPDF_Point& point); 199 void EnableRead(FX_BOOL bEnabled); 200 void EnableModify(FX_BOOL bEnabled); 201 202 protected: 203 virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); 204 205 private: 206 CPWL_Note_Edit* m_pEdit; 207 }; 208 209 class PWL_CLASS CPWL_NoteItem : public CPWL_Wnd, public IPWL_NoteItem 210 { 211 public: 212 CPWL_NoteItem(); 213 virtual ~CPWL_NoteItem(); 214 215 public: 216 virtual void SetPrivateData(void* pData); 217 virtual void SetBkColor(const CPWL_Color& color); 218 virtual void SetSubjectName(const CFX_WideString& sName); 219 virtual void SetAuthorName(const CFX_WideString& sName); 220 virtual void SetDateTime(FX_SYSTEMTIME time); 221 virtual void SetContents(const CFX_WideString& sContents); 222 223 virtual IPWL_NoteItem* CreateSubItem(); 224 virtual FX_INT32 CountSubItems() const; 225 virtual IPWL_NoteItem* GetSubItems(FX_INT32 index) const; 226 virtual void DeleteSubItem(IPWL_NoteItem* pNoteItem); 227 virtual void SetFocus(){SetNoteFocus(FALSE);} 228 229 virtual IPWL_NoteItem* GetParentItem() const; 230 virtual void* GetPrivateData() const; 231 virtual CFX_WideString GetAuthorName() const; 232 virtual CPWL_Color GetBkColor() const; 233 virtual CFX_WideString GetContents() const; 234 virtual FX_SYSTEMTIME GetDateTime() const; 235 virtual CFX_WideString GetSubjectName() const; 236 virtual FX_BOOL IsTopItem() const { return FALSE;} 237 virtual CPWL_Edit* GetEdit() const; 238 239 public: 240 virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag); 241 virtual FX_BOOL OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag); 242 virtual CFX_ByteString GetClassName() const; 243 virtual IPWL_NoteItem* GetHitNoteItem(const CPDF_Point& point); 244 virtual IPWL_NoteItem* GetFocusedNoteItem() const; 245 246 virtual void ResetSubjectName(FX_INT32 nItemIndex); 247 void EnableRead(FX_BOOL bEnabled); 248 void EnableModify(FX_BOOL bEnabled); 249 250 protected: 251 virtual void RePosChildWnd(); 252 virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); 253 254 virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam = 0, FX_INTPTR lParam = 0); 255 256 public: 257 virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth); 258 virtual FX_FLOAT GetItemLeftMargin(); 259 virtual FX_FLOAT GetItemRightMargin(); 260 CPWL_NoteItem* CreateNoteItem(); 261 CPWL_NoteItem* GetParentNoteItem() const; 262 263 void SetNoteFocus(FX_BOOL bLast); 264 void OnContentsValidate(); 265 266 void OnCreateNoteItem(); 267 268 protected: 269 void PopupNoteItemMenu(const CPDF_Point& point); 270 271 virtual const CPWL_Note* GetNote() const; 272 virtual IPWL_NoteNotify* GetNoteNotify() const; 273 274 protected: 275 CPWL_Label* m_pSubject; 276 CPWL_Label* m_pDateTime; 277 CPWL_Note_Contents* m_pContents; 278 279 private: 280 void* m_pPrivateData; 281 FX_SYSTEMTIME m_dtNote; 282 CFX_WideString m_sAuthor; 283 284 FX_FLOAT m_fOldItemHeight; 285 FX_BOOL m_bSizeChanged; 286 FX_BOOL m_bAllowModify; 287 }; 288 289 class PWL_CLASS CPWL_Note : public CPWL_NoteItem 290 { 291 public: 292 CPWL_Note(IPopup_Note* pPopupNote, IPWL_NoteNotify* pNoteNotify, IPWL_NoteHandler* pNoteHandler); 293 virtual ~CPWL_Note(); 294 295 public: 296 virtual void SetSubjectName(const CFX_WideString& sName); 297 virtual void SetAuthorName(const CFX_WideString& sName); 298 virtual CFX_WideString GetAuthorName() const; 299 virtual void SetBkColor(const CPWL_Color& color); 300 virtual void ResetSubjectName(FX_INT32 nItemIndex){} 301 virtual FX_BOOL IsTopItem() const {return TRUE;} 302 virtual const CPWL_Note* GetNote() const; 303 virtual IPWL_NoteNotify* GetNoteNotify() const; 304 305 public: 306 IPWL_NoteItem* Reply(); 307 void EnableNotify(FX_BOOL bEnabled); 308 void SetIconType(FX_INT32 nType); 309 void SetOptionsText(const CFX_WideString& sText); 310 void EnableRead(FX_BOOL bEnabled); 311 void EnableModify(FX_BOOL bEnabled); 312 313 CFX_WideString GetReplyString() const; 314 void SetReplyString(const CFX_WideString& string); 315 316 //0-normal / 1-caption / 2-leftbottom corner / 3-rightbottom corner / 4-close / 5-options 317 FX_INT32 NoteHitTest(const CPDF_Point& point) const; 318 CPDF_Rect GetCaptionRect() const {return m_rcCaption;} 319 IPopup_Note* GetPopupNote() const {return m_pPopupNote;} 320 321 public: 322 virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag); 323 virtual FX_BOOL OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag); 324 virtual FX_BOOL OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag); 325 326 protected: 327 virtual void RePosChildWnd(); 328 virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); 329 330 virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam = 0, FX_INTPTR lParam = 0); 331 332 FX_BOOL ResetScrollBar(); 333 void RePosNoteChildren(); 334 FX_BOOL ScrollBarShouldVisible(); 335 336 private: 337 CPWL_Label* m_pAuthor; 338 CPWL_Note_Icon* m_pIcon; 339 CPWL_Note_CloseBox* m_pCloseBox; 340 CPWL_Note_LBBox* m_pLBBox; 341 CPWL_Note_RBBox* m_pRBBox; 342 CPWL_ScrollBar* m_pContentsBar; 343 CPWL_Note_Options* m_pOptions; 344 IPWL_NoteNotify* m_pNoteNotify; 345 FX_BOOL m_bResizing; 346 PWL_SCROLL_INFO m_OldScrollInfo; 347 CPDF_Rect m_rcCaption; 348 FX_BOOL m_bEnalbleNotify; 349 IPopup_Note* m_pPopupNote; 350 IPWL_NoteHandler* m_pNoteHandler; 351 CFX_WideString m_sReplyString; 352 }; 353 354 #endif 355 356