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