• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
EnableNotify(FX_BOOL bEnable)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);
SetFocus()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;
IsTopItem()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);
ResetSubjectName(FX_INT32 nItemIndex)300 	virtual void						ResetSubjectName(FX_INT32 nItemIndex){}
IsTopItem()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;
GetCaptionRect()318 	CPDF_Rect							GetCaptionRect() const {return m_rcCaption;}
GetPopupNote()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