1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Copyright 2014 PDFium Authors. All rights reserved. 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Use of this source code is governed by a BSD-style license that can be 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// found in the LICENSE file. 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef _PWL_NOTE_H_ 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define _PWL_NOTE_H_ 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass IPWL_NoteNotify; 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass IPWL_NoteHandler; 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass IPWL_NoteItem; 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass CPWL_NoteItem; 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass CPWL_Note; 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass CPWL_Label; 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass CPWL_Edit; 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass CPWL_Note_Icon; 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass CPWL_Note_CloseBox; 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass CPWL_Note_LBBox; 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass CPWL_Note_RBBox; 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass CPWL_Note_Edit; 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass CPWL_Note_Options; 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass CPWL_Note_Contents; 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass IPopup_Note; 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass IPWL_NoteNotify 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpublic: 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org virtual void OnNoteMove(const FX_RECT& rtWin) = 0; 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org virtual void OnNoteShow(FX_BOOL bShow) = 0; 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org virtual void OnNoteActivate(FX_BOOL bActive) = 0; 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org virtual void OnNoteClose() = 0; 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org virtual void OnItemCreate(IPWL_NoteItem* pItem) = 0; 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org virtual void OnItemDelete(IPWL_NoteItem* pItem) = 0; 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org virtual void OnSetAuthorName(IPWL_NoteItem* pItem) = 0; 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org virtual void OnSetBkColor(IPWL_NoteItem* pItem) = 0; 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org virtual void OnSetContents(IPWL_NoteItem* pItem) = 0; 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org virtual void OnSetDateTime(IPWL_NoteItem* pItem) = 0; 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org virtual void OnSetSubjectName(IPWL_NoteItem* pItem) = 0; 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 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 45class IPWL_NoteHandler 46{ 47public: 48 virtual void OnNoteColorChanged(const CPWL_Color& color) = 0; 49}; 50 51class IPWL_NoteItem 52{ 53public: 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 78class PWL_CLASS CPWL_Note_Icon : public CPWL_Wnd 79{ 80public: 81 CPWL_Note_Icon(); 82 virtual ~CPWL_Note_Icon(); 83 84 void SetIconType(FX_INT32 nType); 85 86public: 87 88protected: 89 virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); 90 91private: 92 FX_INT32 m_nType; 93}; 94 95class CPWL_Note_CloseBox : public CPWL_Button 96{ 97public: 98 CPWL_Note_CloseBox(); 99 virtual ~CPWL_Note_CloseBox(); 100 101protected: 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 106private: 107 FX_BOOL m_bMouseDown; 108}; 109 110class CPWL_Note_LBBox : public CPWL_Wnd 111{ 112public: 113 CPWL_Note_LBBox(); 114 virtual ~CPWL_Note_LBBox(); 115 116protected: 117 virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); 118}; 119 120class CPWL_Note_RBBox : public CPWL_Wnd 121{ 122public: 123 CPWL_Note_RBBox(); 124 virtual ~CPWL_Note_RBBox(); 125 126protected: 127 virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); 128}; 129 130class CPWL_Note_Edit : public CPWL_Edit 131{ 132public: 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 143protected: 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 149private: 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 157class CPWL_Note_Options : public CPWL_Wnd 158{ 159public: 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 167protected: 168 virtual void RePosChildWnd(); 169 virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); 170 virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); 171 172private: 173 CPWL_Label* m_pText; 174}; 175 176class CPWL_Note_Contents : public CPWL_ListCtrl 177{ 178public: 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 189public: 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 202protected: 203 virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); 204 205private: 206 CPWL_Note_Edit* m_pEdit; 207}; 208 209class PWL_CLASS CPWL_NoteItem : public CPWL_Wnd, public IPWL_NoteItem 210{ 211public: 212 CPWL_NoteItem(); 213 virtual ~CPWL_NoteItem(); 214 215public: 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 239public: 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 250protected: 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 256public: 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 268protected: 269 void PopupNoteItemMenu(const CPDF_Point& point); 270 271 virtual const CPWL_Note* GetNote() const; 272 virtual IPWL_NoteNotify* GetNoteNotify() const; 273 274protected: 275 CPWL_Label* m_pSubject; 276 CPWL_Label* m_pDateTime; 277 CPWL_Note_Contents* m_pContents; 278 279private: 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 289class PWL_CLASS CPWL_Note : public CPWL_NoteItem 290{ 291public: 292 CPWL_Note(IPopup_Note* pPopupNote, IPWL_NoteNotify* pNoteNotify, IPWL_NoteHandler* pNoteHandler); 293 virtual ~CPWL_Note(); 294 295public: 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 305public: 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 321public: 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 326protected: 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 336private: 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