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.
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
7 #ifndef FPDFSDK_INCLUDE_PDFWINDOW_PWL_NOTE_H_
8 #define FPDFSDK_INCLUDE_PDFWINDOW_PWL_NOTE_H_
10 #include "PWL_Button.h"
12 #include "PWL_ListCtrl.h"
13 #include "PWL_ScrollBar.h"
19 class CPWL_Note_CloseBox;
20 class CPWL_Note_Contents;
23 class CPWL_Note_LBBox;
24 class CPWL_Note_Options;
25 class CPWL_Note_RBBox;
26 class IPWL_NoteHandler;
28 class IPWL_NoteNotify;
34 virtual ~IPWL_NoteNotify() { }
35 virtual void OnNoteMove(const FX_RECT& rtWin) = 0;
36 virtual void OnNoteShow(bool bShow) = 0;
37 virtual void OnNoteActivate(bool bActive) = 0;
38 virtual void OnNoteClose() = 0;
39 virtual void OnItemCreate(IPWL_NoteItem* pItem) = 0;
40 virtual void OnItemDelete(IPWL_NoteItem* pItem) = 0;
41 virtual void OnSetAuthorName(IPWL_NoteItem* pItem) = 0;
42 virtual void OnSetBkColor(IPWL_NoteItem* pItem) = 0;
43 virtual void OnSetContents(IPWL_NoteItem* pItem) = 0;
44 virtual void OnSetDateTime(IPWL_NoteItem* pItem) = 0;
45 virtual void OnSetSubjectName(IPWL_NoteItem* pItem) = 0;
46 virtual void OnPopupMenu(int32_t x, int32_t y) = 0;
47 virtual void OnPopupMenu(IPWL_NoteItem* pItem, int32_t x, int32_t y) = 0;
50 class IPWL_NoteHandler
53 virtual ~IPWL_NoteHandler() { }
54 virtual void OnNoteColorChanged(const CPWL_Color& color) = 0;
60 virtual ~IPWL_NoteItem() { }
61 virtual void SetPrivateData(void* pData) = 0;
62 virtual void SetBkColor(const CPWL_Color& color) = 0;
63 virtual void SetSubjectName(const CFX_WideString& sName) = 0;
64 virtual void SetAuthorName(const CFX_WideString& sName) = 0;
65 virtual void SetDateTime(FX_SYSTEMTIME time) = 0;
66 virtual void SetContents(const CFX_WideString& sContents) = 0;
68 virtual IPWL_NoteItem* CreateSubItem() = 0;
69 virtual int32_t CountSubItems() const = 0;
70 virtual IPWL_NoteItem* GetSubItems(int32_t index) const = 0;
71 virtual void DeleteSubItem(IPWL_NoteItem* pNoteItem) = 0;
72 virtual void SetFocus() = 0;
74 virtual IPWL_NoteItem* GetParentItem() const = 0;
75 virtual void* GetPrivateData() const = 0;
76 virtual CFX_WideString GetAuthorName() const = 0;
77 virtual CPWL_Color GetBkColor() const = 0;
78 virtual CFX_WideString GetContents() const = 0;
79 virtual FX_SYSTEMTIME GetDateTime() const = 0;
80 virtual CFX_WideString GetSubjectName() const = 0;
82 virtual CPWL_Edit* GetEdit() const = 0;
85 class PWL_CLASS CPWL_Note_Icon : public CPWL_Wnd
89 virtual ~CPWL_Note_Icon();
91 void SetIconType(int32_t nType);
96 virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
102 class CPWL_Note_CloseBox : public CPWL_Button
105 CPWL_Note_CloseBox();
106 virtual ~CPWL_Note_CloseBox();
109 virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
110 virtual bool OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
111 virtual bool OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
117 class CPWL_Note_LBBox : public CPWL_Wnd
121 virtual ~CPWL_Note_LBBox();
124 virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
127 class CPWL_Note_RBBox : public CPWL_Wnd
131 virtual ~CPWL_Note_RBBox();
134 virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
137 class CPWL_Note_Edit : public CPWL_Edit
141 virtual ~CPWL_Note_Edit();
143 void EnableNotify(bool bEnable) {m_bEnableNotify = bEnable;}
144 virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth);
145 FX_FLOAT GetItemLeftMargin();
146 FX_FLOAT GetItemRightMargin();
148 virtual void SetText(const FX_WCHAR* csText);
151 virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0);
152 virtual void RePosChildWnd();
153 virtual void OnSetFocus();
154 virtual void OnKillFocus();
157 bool m_bEnableNotify;
158 FX_FLOAT m_fOldItemHeight;
164 class CPWL_Note_Options : public CPWL_Wnd
168 virtual ~CPWL_Note_Options();
170 CPDF_Rect GetContentRect() const;
171 virtual void SetTextColor(const CPWL_Color & color);
172 void SetText(const CFX_WideString& sText);
175 virtual void RePosChildWnd();
176 virtual void CreateChildWnd(const PWL_CREATEPARAM & cp);
177 virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
183 class CPWL_Note_Contents : public CPWL_ListCtrl
186 CPWL_Note_Contents();
187 virtual ~CPWL_Note_Contents();
189 virtual CFX_ByteString GetClassName() const;
190 virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0);
191 virtual bool OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
193 void SetEditFocus(bool bLast);
194 CPWL_Edit* GetEdit() const;
197 void SetText(const CFX_WideString& sText);
198 CFX_WideString GetText() const;
200 CPWL_NoteItem* CreateSubItem();
201 void DeleteSubItem(IPWL_NoteItem* pNoteItem);
202 int32_t CountSubItems() const;
203 IPWL_NoteItem* GetSubItems(int32_t index) const;
205 virtual IPWL_NoteItem* GetHitNoteItem(const CPDF_Point& point);
206 void EnableRead(bool bEnabled);
207 void EnableModify(bool bEnabled);
210 virtual void CreateChildWnd(const PWL_CREATEPARAM & cp);
213 CPWL_Note_Edit* m_pEdit;
216 class PWL_CLASS CPWL_NoteItem : public CPWL_Wnd, public IPWL_NoteItem
220 virtual ~CPWL_NoteItem();
223 virtual void SetPrivateData(void* pData);
224 virtual void SetBkColor(const CPWL_Color& color);
225 virtual void SetSubjectName(const CFX_WideString& sName);
226 virtual void SetAuthorName(const CFX_WideString& sName);
227 virtual void SetDateTime(FX_SYSTEMTIME time);
228 virtual void SetContents(const CFX_WideString& sContents);
230 virtual IPWL_NoteItem* CreateSubItem();
231 virtual int32_t CountSubItems() const;
232 virtual IPWL_NoteItem* GetSubItems(int32_t index) const;
233 virtual void DeleteSubItem(IPWL_NoteItem* pNoteItem);
234 virtual void SetFocus(){SetNoteFocus(false);}
236 virtual IPWL_NoteItem* GetParentItem() const;
237 virtual void* GetPrivateData() const;
238 virtual CFX_WideString GetAuthorName() const;
239 virtual CPWL_Color GetBkColor() const;
240 virtual CFX_WideString GetContents() const;
241 virtual FX_SYSTEMTIME GetDateTime() const;
242 virtual CFX_WideString GetSubjectName() const;
243 virtual bool IsTopItem() const { return false;}
244 virtual CPWL_Edit* GetEdit() const;
247 virtual bool OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
248 virtual bool OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
249 virtual CFX_ByteString GetClassName() const;
250 virtual IPWL_NoteItem* GetHitNoteItem(const CPDF_Point& point);
251 virtual IPWL_NoteItem* GetFocusedNoteItem() const;
253 virtual void ResetSubjectName(int32_t nItemIndex);
254 void EnableRead(bool bEnabled);
255 void EnableModify(bool bEnabled);
258 virtual void RePosChildWnd();
259 virtual void CreateChildWnd(const PWL_CREATEPARAM & cp);
261 virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0);
264 virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth);
265 virtual FX_FLOAT GetItemLeftMargin();
266 virtual FX_FLOAT GetItemRightMargin();
267 CPWL_NoteItem* CreateNoteItem();
268 CPWL_NoteItem* GetParentNoteItem() const;
270 void SetNoteFocus(bool bLast);
271 void OnContentsValidate();
273 void OnCreateNoteItem();
276 void PopupNoteItemMenu(const CPDF_Point& point);
278 virtual const CPWL_Note* GetNote() const;
279 virtual IPWL_NoteNotify* GetNoteNotify() const;
282 CPWL_Label* m_pSubject;
283 CPWL_Label* m_pDateTime;
284 CPWL_Note_Contents* m_pContents;
287 void* m_pPrivateData;
288 FX_SYSTEMTIME m_dtNote;
289 CFX_WideString m_sAuthor;
291 FX_FLOAT m_fOldItemHeight;
296 class PWL_CLASS CPWL_Note : public CPWL_NoteItem
299 CPWL_Note(IPopup_Note* pPopupNote, IPWL_NoteNotify* pNoteNotify, IPWL_NoteHandler* pNoteHandler);
300 virtual ~CPWL_Note();
303 virtual void SetSubjectName(const CFX_WideString& sName);
304 virtual void SetAuthorName(const CFX_WideString& sName);
305 virtual CFX_WideString GetAuthorName() const;
306 virtual void SetBkColor(const CPWL_Color& color);
307 virtual void ResetSubjectName(int32_t nItemIndex){}
308 virtual bool IsTopItem() const {return true;}
309 virtual const CPWL_Note* GetNote() const;
310 virtual IPWL_NoteNotify* GetNoteNotify() const;
313 IPWL_NoteItem* Reply();
314 void EnableNotify(bool bEnabled);
315 void SetIconType(int32_t nType);
316 void SetOptionsText(const CFX_WideString& sText);
317 void EnableRead(bool bEnabled);
318 void EnableModify(bool bEnabled);
320 CFX_WideString GetReplyString() const;
321 void SetReplyString(const CFX_WideString& string);
323 //0-normal / 1-caption / 2-leftbottom corner / 3-rightbottom corner / 4-close / 5-options
324 int32_t NoteHitTest(const CPDF_Point& point) const;
325 CPDF_Rect GetCaptionRect() const {return m_rcCaption;}
326 IPopup_Note* GetPopupNote() const {return m_pPopupNote;}
329 virtual bool OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
330 virtual bool OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
331 virtual bool OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag);
334 virtual void RePosChildWnd();
335 virtual void CreateChildWnd(const PWL_CREATEPARAM & cp);
337 virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0);
339 bool ResetScrollBar();
340 void RePosNoteChildren();
341 bool ScrollBarShouldVisible();
344 CPWL_Label* m_pAuthor;
345 CPWL_Note_Icon* m_pIcon;
346 CPWL_Note_CloseBox* m_pCloseBox;
347 CPWL_Note_LBBox* m_pLBBox;
348 CPWL_Note_RBBox* m_pRBBox;
349 CPWL_ScrollBar* m_pContentsBar;
350 CPWL_Note_Options* m_pOptions;
351 IPWL_NoteNotify* m_pNoteNotify;
353 PWL_SCROLL_INFO m_OldScrollInfo;
354 CPDF_Rect m_rcCaption;
355 bool m_bEnalbleNotify;
356 IPopup_Note* m_pPopupNote;
357 CFX_WideString m_sReplyString;
360 #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_NOTE_H_