blob: 89308e63e4c84a0671c0971998bbfb3e01d7514b [file] [log] [blame]
Svet Ganovee451cb2014-05-21 09:38:09 -07001// 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
10class IPWL_NoteNotify;
11class IPWL_NoteHandler;
12class IPWL_NoteItem;
13class CPWL_NoteItem;
14class CPWL_Note;
15class CPWL_Label;
16class CPWL_Edit;
17class CPWL_Note_Icon;
18class CPWL_Note_CloseBox;
19class CPWL_Note_LBBox;
20class CPWL_Note_RBBox;
21class CPWL_Note_Edit;
22class CPWL_Note_Options;
23class CPWL_Note_Contents;
24class IPopup_Note;
25
26
27class IPWL_NoteNotify
28{
29public:
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
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