clang-format all pdfium code.
[pdfium.git] / fpdfsdk / include / pdfwindow / PWL_Note.h
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 FPDFSDK_INCLUDE_PDFWINDOW_PWL_NOTE_H_
8 #define FPDFSDK_INCLUDE_PDFWINDOW_PWL_NOTE_H_
9
10 #include "PWL_Button.h"
11 #include "PWL_Edit.h"
12 #include "PWL_ListCtrl.h"
13 #include "PWL_ScrollBar.h"
14 #include "PWL_Wnd.h"
15
16 class CPWL_Label;
17 class CPWL_Note;
18 class CPWL_NoteItem;
19 class CPWL_Note_CloseBox;
20 class CPWL_Note_Contents;
21 class CPWL_Note_Edit;
22 class CPWL_Note_Icon;
23 class CPWL_Note_LBBox;
24 class CPWL_Note_Options;
25 class CPWL_Note_RBBox;
26 class IPWL_NoteHandler;
27 class IPWL_NoteItem;
28 class IPWL_NoteNotify;
29 class IPopup_Note;
30
31 class IPWL_NoteNotify {
32  public:
33   virtual ~IPWL_NoteNotify() {}
34   virtual void OnNoteMove(const FX_RECT& rtWin) = 0;
35   virtual void OnNoteShow(FX_BOOL bShow) = 0;
36   virtual void OnNoteActivate(FX_BOOL bActive) = 0;
37   virtual void OnNoteClose() = 0;
38   virtual void OnItemCreate(IPWL_NoteItem* pItem) = 0;
39   virtual void OnItemDelete(IPWL_NoteItem* pItem) = 0;
40   virtual void OnSetAuthorName(IPWL_NoteItem* pItem) = 0;
41   virtual void OnSetBkColor(IPWL_NoteItem* pItem) = 0;
42   virtual void OnSetContents(IPWL_NoteItem* pItem) = 0;
43   virtual void OnSetDateTime(IPWL_NoteItem* pItem) = 0;
44   virtual void OnSetSubjectName(IPWL_NoteItem* pItem) = 0;
45   virtual void OnPopupMenu(int32_t x, int32_t y) = 0;
46   virtual void OnPopupMenu(IPWL_NoteItem* pItem, int32_t x, int32_t y) = 0;
47 };
48
49 class IPWL_NoteHandler {
50  public:
51   virtual ~IPWL_NoteHandler() {}
52   virtual void OnNoteColorChanged(const CPWL_Color& color) = 0;
53 };
54
55 class IPWL_NoteItem {
56  public:
57   virtual ~IPWL_NoteItem() {}
58   virtual void SetPrivateData(void* pData) = 0;
59   virtual void SetBkColor(const CPWL_Color& color) = 0;
60   virtual void SetSubjectName(const CFX_WideString& sName) = 0;
61   virtual void SetAuthorName(const CFX_WideString& sName) = 0;
62   virtual void SetDateTime(FX_SYSTEMTIME time) = 0;
63   virtual void SetContents(const CFX_WideString& sContents) = 0;
64
65   virtual IPWL_NoteItem* CreateSubItem() = 0;
66   virtual int32_t CountSubItems() const = 0;
67   virtual IPWL_NoteItem* GetSubItems(int32_t index) const = 0;
68   virtual void DeleteSubItem(IPWL_NoteItem* pNoteItem) = 0;
69   virtual void SetFocus() = 0;
70
71   virtual IPWL_NoteItem* GetParentItem() const = 0;
72   virtual void* GetPrivateData() const = 0;
73   virtual CFX_WideString GetAuthorName() const = 0;
74   virtual CPWL_Color GetBkColor() const = 0;
75   virtual CFX_WideString GetContents() const = 0;
76   virtual FX_SYSTEMTIME GetDateTime() const = 0;
77   virtual CFX_WideString GetSubjectName() const = 0;
78
79   virtual CPWL_Edit* GetEdit() const = 0;
80 };
81
82 class CPWL_Note_Icon : public CPWL_Wnd {
83  public:
84   CPWL_Note_Icon();
85   virtual ~CPWL_Note_Icon();
86
87   void SetIconType(int32_t nType);
88
89  public:
90  protected:
91   virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
92                                   CPDF_Matrix* pUser2Device);
93
94  private:
95   int32_t m_nType;
96 };
97
98 class CPWL_Note_CloseBox : public CPWL_Button {
99  public:
100   CPWL_Note_CloseBox();
101   virtual ~CPWL_Note_CloseBox();
102
103  protected:
104   virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
105                                   CPDF_Matrix* pUser2Device);
106   virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
107   virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
108
109  private:
110   FX_BOOL m_bMouseDown;
111 };
112
113 class CPWL_Note_LBBox : public CPWL_Wnd {
114  public:
115   CPWL_Note_LBBox();
116   virtual ~CPWL_Note_LBBox();
117
118  protected:
119   virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
120                                   CPDF_Matrix* pUser2Device);
121 };
122
123 class CPWL_Note_RBBox : public CPWL_Wnd {
124  public:
125   CPWL_Note_RBBox();
126   virtual ~CPWL_Note_RBBox();
127
128  protected:
129   virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
130                                   CPDF_Matrix* pUser2Device);
131 };
132
133 class CPWL_Note_Edit : public CPWL_Edit {
134  public:
135   CPWL_Note_Edit();
136   virtual ~CPWL_Note_Edit();
137
138   void EnableNotify(FX_BOOL bEnable) { m_bEnableNotify = bEnable; }
139   virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth);
140   FX_FLOAT GetItemLeftMargin();
141   FX_FLOAT GetItemRightMargin();
142
143   virtual void SetText(const FX_WCHAR* csText);
144
145  protected:
146   virtual void OnNotify(CPWL_Wnd* pWnd,
147                         FX_DWORD msg,
148                         intptr_t wParam = 0,
149                         intptr_t lParam = 0);
150   virtual void RePosChildWnd();
151   virtual void OnSetFocus();
152   virtual void OnKillFocus();
153
154  private:
155   FX_BOOL m_bEnableNotify;
156   FX_FLOAT m_fOldItemHeight;
157   FX_BOOL m_bSizeChanged;
158   FX_FLOAT m_fOldMin;
159   FX_FLOAT m_fOldMax;
160 };
161
162 class CPWL_Note_Options : public CPWL_Wnd {
163  public:
164   CPWL_Note_Options();
165   virtual ~CPWL_Note_Options();
166
167   CPDF_Rect GetContentRect() const;
168   virtual void SetTextColor(const CPWL_Color& color);
169   void SetText(const CFX_WideString& sText);
170
171  protected:
172   virtual void RePosChildWnd();
173   virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
174   virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
175                                   CPDF_Matrix* pUser2Device);
176
177  private:
178   CPWL_Label* m_pText;
179 };
180
181 class CPWL_Note_Contents : public CPWL_ListCtrl {
182  public:
183   CPWL_Note_Contents();
184   virtual ~CPWL_Note_Contents();
185
186   virtual CFX_ByteString GetClassName() const;
187   virtual void OnNotify(CPWL_Wnd* pWnd,
188                         FX_DWORD msg,
189                         intptr_t wParam = 0,
190                         intptr_t lParam = 0);
191   virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
192
193   void SetEditFocus(FX_BOOL bLast);
194   CPWL_Edit* GetEdit() const;
195
196  public:
197   void SetText(const CFX_WideString& sText);
198   CFX_WideString GetText() const;
199
200   CPWL_NoteItem* CreateSubItem();
201   void DeleteSubItem(IPWL_NoteItem* pNoteItem);
202   int32_t CountSubItems() const;
203   IPWL_NoteItem* GetSubItems(int32_t index) const;
204
205   virtual IPWL_NoteItem* GetHitNoteItem(const CPDF_Point& point);
206   void EnableRead(FX_BOOL bEnabled);
207   void EnableModify(FX_BOOL bEnabled);
208
209  protected:
210   virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
211
212  private:
213   CPWL_Note_Edit* m_pEdit;
214 };
215
216 class CPWL_NoteItem : public CPWL_Wnd, public IPWL_NoteItem {
217  public:
218   CPWL_NoteItem();
219   virtual ~CPWL_NoteItem();
220
221  public:
222   virtual void SetPrivateData(void* pData);
223   virtual void SetBkColor(const CPWL_Color& color);
224   virtual void SetSubjectName(const CFX_WideString& sName);
225   virtual void SetAuthorName(const CFX_WideString& sName);
226   virtual void SetDateTime(FX_SYSTEMTIME time);
227   virtual void SetContents(const CFX_WideString& sContents);
228
229   virtual IPWL_NoteItem* CreateSubItem();
230   virtual int32_t CountSubItems() const;
231   virtual IPWL_NoteItem* GetSubItems(int32_t index) const;
232   virtual void DeleteSubItem(IPWL_NoteItem* pNoteItem);
233   virtual void SetFocus() { SetNoteFocus(FALSE); }
234
235   virtual IPWL_NoteItem* GetParentItem() const;
236   virtual void* GetPrivateData() const;
237   virtual CFX_WideString GetAuthorName() const;
238   virtual CPWL_Color GetBkColor() const;
239   virtual CFX_WideString GetContents() const;
240   virtual FX_SYSTEMTIME GetDateTime() const;
241   virtual CFX_WideString GetSubjectName() const;
242   virtual FX_BOOL IsTopItem() const { return FALSE; }
243   virtual CPWL_Edit* GetEdit() const;
244
245  public:
246   virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
247   virtual FX_BOOL OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
248   virtual CFX_ByteString GetClassName() const;
249   virtual IPWL_NoteItem* GetHitNoteItem(const CPDF_Point& point);
250   virtual IPWL_NoteItem* GetFocusedNoteItem() const;
251
252   virtual void ResetSubjectName(int32_t nItemIndex);
253   void EnableRead(FX_BOOL bEnabled);
254   void EnableModify(FX_BOOL bEnabled);
255
256  protected:
257   virtual void RePosChildWnd();
258   virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
259
260   virtual void OnNotify(CPWL_Wnd* pWnd,
261                         FX_DWORD msg,
262                         intptr_t wParam = 0,
263                         intptr_t lParam = 0);
264
265  public:
266   virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth);
267   virtual FX_FLOAT GetItemLeftMargin();
268   virtual FX_FLOAT GetItemRightMargin();
269   CPWL_NoteItem* CreateNoteItem();
270   CPWL_NoteItem* GetParentNoteItem() const;
271
272   void SetNoteFocus(FX_BOOL bLast);
273   void OnContentsValidate();
274
275   void OnCreateNoteItem();
276
277  protected:
278   void PopupNoteItemMenu(const CPDF_Point& point);
279
280   virtual const CPWL_Note* GetNote() const;
281   virtual IPWL_NoteNotify* GetNoteNotify() const;
282
283  protected:
284   CPWL_Label* m_pSubject;
285   CPWL_Label* m_pDateTime;
286   CPWL_Note_Contents* m_pContents;
287
288  private:
289   void* m_pPrivateData;
290   FX_SYSTEMTIME m_dtNote;
291   CFX_WideString m_sAuthor;
292
293   FX_FLOAT m_fOldItemHeight;
294   FX_BOOL m_bSizeChanged;
295   FX_BOOL m_bAllowModify;
296 };
297
298 class CPWL_Note : public CPWL_NoteItem {
299  public:
300   CPWL_Note(IPopup_Note* pPopupNote,
301             IPWL_NoteNotify* pNoteNotify,
302             IPWL_NoteHandler* pNoteHandler);
303   virtual ~CPWL_Note();
304
305  public:
306   virtual void SetSubjectName(const CFX_WideString& sName);
307   virtual void SetAuthorName(const CFX_WideString& sName);
308   virtual CFX_WideString GetAuthorName() const;
309   virtual void SetBkColor(const CPWL_Color& color);
310   virtual void ResetSubjectName(int32_t nItemIndex) {}
311   virtual FX_BOOL IsTopItem() const { return TRUE; }
312   virtual const CPWL_Note* GetNote() const;
313   virtual IPWL_NoteNotify* GetNoteNotify() const;
314
315  public:
316   IPWL_NoteItem* Reply();
317   void EnableNotify(FX_BOOL bEnabled);
318   void SetIconType(int32_t nType);
319   void SetOptionsText(const CFX_WideString& sText);
320   void EnableRead(FX_BOOL bEnabled);
321   void EnableModify(FX_BOOL bEnabled);
322
323   CFX_WideString GetReplyString() const;
324   void SetReplyString(const CFX_WideString& string);
325
326   // 0-normal / 1-caption / 2-leftbottom corner / 3-rightbottom corner / 4-close
327   // / 5-options
328   int32_t NoteHitTest(const CPDF_Point& point) const;
329   CPDF_Rect GetCaptionRect() const { return m_rcCaption; }
330   IPopup_Note* GetPopupNote() const { return m_pPopupNote; }
331
332  public:
333   virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
334   virtual FX_BOOL OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
335   virtual FX_BOOL OnMouseWheel(short zDelta,
336                                const CPDF_Point& point,
337                                FX_DWORD nFlag);
338
339  protected:
340   virtual void RePosChildWnd();
341   virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
342
343   virtual void OnNotify(CPWL_Wnd* pWnd,
344                         FX_DWORD msg,
345                         intptr_t wParam = 0,
346                         intptr_t lParam = 0);
347
348   FX_BOOL ResetScrollBar();
349   void RePosNoteChildren();
350   FX_BOOL ScrollBarShouldVisible();
351
352  private:
353   CPWL_Label* m_pAuthor;
354   CPWL_Note_Icon* m_pIcon;
355   CPWL_Note_CloseBox* m_pCloseBox;
356   CPWL_Note_LBBox* m_pLBBox;
357   CPWL_Note_RBBox* m_pRBBox;
358   CPWL_ScrollBar* m_pContentsBar;
359   CPWL_Note_Options* m_pOptions;
360   IPWL_NoteNotify* m_pNoteNotify;
361   FX_BOOL m_bResizing;
362   PWL_SCROLL_INFO m_OldScrollInfo;
363   CPDF_Rect m_rcCaption;
364   FX_BOOL m_bEnalbleNotify;
365   IPopup_Note* m_pPopupNote;
366   CFX_WideString m_sReplyString;
367 };
368
369 #endif  // FPDFSDK_INCLUDE_PDFWINDOW_PWL_NOTE_H_