clang-format all pdfium code.
[pdfium.git] / fpdfsdk / include / pdfwindow / PWL_EditCtrl.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_EDITCTRL_H_
8 #define FPDFSDK_INCLUDE_PDFWINDOW_PWL_EDITCTRL_H_
9
10 #include "../../../core/include/fxcrt/fx_string.h"
11 #include "../fxedit/fx_edit.h"
12 #include "PWL_Wnd.h"
13
14 class CPWL_Caret;
15 class CPWL_Edit;
16 class CPWL_EditCtrl;
17 class IFX_Edit;
18 class IPWL_Edit_Notify;
19 struct CPVT_WordPlace;
20
21 enum PWL_EDIT_ALIGNFORMAT_H { PEAH_LEFT = 0, PEAH_MIDDLE, PEAH_RIGHT };
22
23 enum PWL_EDIT_ALIGNFORMAT_V { PEAV_TOP = 0, PEAV_CENTER, PEAV_BOTTOM };
24
25 class IPWL_Edit_Notify {
26  public:
27   virtual ~IPWL_Edit_Notify() {}
28   // when the position of caret is changed in edit
29   virtual void OnCaretMove(int32_t x1, int32_t y1, int32_t x2, int32_t y2) {}
30   virtual void OnContentChange(const CPDF_Rect& rcContent) {}
31   // OprType: 0 InsertWord
32   // 1 InsertReturn
33   // 2 BackSpace
34   // 3 Delete
35   // 4 Clear
36   // 5 InsertText
37   // 6 SetText
38   virtual void OnInsertWord(const CPVT_WordPlace& place,
39                             const CPVT_WordPlace& oldplace) {}
40   virtual void OnInsertReturn(const CPVT_WordPlace& place,
41                               const CPVT_WordPlace& oldplace) {}
42   virtual void OnBackSpace(const CPVT_WordPlace& place,
43                            const CPVT_WordPlace& oldplace) {}
44   virtual void OnDelete(const CPVT_WordPlace& place,
45                         const CPVT_WordPlace& oldplace) {}
46   virtual void OnClear(const CPVT_WordPlace& place,
47                        const CPVT_WordPlace& oldplace) {}
48   virtual void OnInsertText(const CPVT_WordPlace& place,
49                             const CPVT_WordPlace& oldplace) {}
50   virtual void OnSetText(const CPVT_WordPlace& place,
51                          const CPVT_WordPlace& oldplace) {}
52   virtual void OnAddUndo(CPWL_Edit* pEdit) {}
53 };
54
55 class CPWL_EditCtrl : public CPWL_Wnd, public IFX_Edit_Notify {
56   friend class CPWL_Edit_Notify;
57
58  public:
59   CPWL_EditCtrl();
60   virtual ~CPWL_EditCtrl();
61
62  public:
63   virtual void OnCreate(PWL_CREATEPARAM& cp);
64   virtual void OnCreated();
65
66   virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
67   virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag);
68   virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
69   virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
70   virtual FX_BOOL OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag);
71   virtual void OnNotify(CPWL_Wnd* pWnd,
72                         FX_DWORD msg,
73                         intptr_t wParam = 0,
74                         intptr_t lParam = 0);
75
76   virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
77   virtual void RePosChildWnd();
78   virtual void SetFontSize(FX_FLOAT fFontSize);
79   virtual FX_FLOAT GetFontSize() const;
80
81  public:
82   virtual void SetText(const FX_WCHAR* csText);
83
84   virtual void CopyText();
85   virtual void PasteText();
86   virtual void CutText();
87
88   CPDF_Rect GetContentRect() const;
89   void GetCaretPos(int32_t& x, int32_t& y) const;
90   FX_BOOL IsModified() const;
91
92   CFX_WideString GetText() const;
93   void SetSel(int32_t nStartChar, int32_t nEndChar);
94   void GetSel(int32_t& nStartChar, int32_t& nEndChar) const;
95   void GetTextRange(const CPDF_Rect& rect,
96                     int32_t& nStartChar,
97                     int32_t& nEndChar) const;
98   CFX_WideString GetText(int32_t& nStartChar, int32_t& nEndChar) const;
99   void Clear();
100   void SelectAll();
101
102   int32_t GetCaret() const;
103   void SetCaret(int32_t nPos);
104   int32_t GetTotalWords() const;
105
106   void Paint();
107
108   void EnableRefresh(FX_BOOL bRefresh);
109   CPDF_Point GetScrollPos() const;
110   void SetScrollPos(const CPDF_Point& point);
111
112   void SetEditNotify(IPWL_Edit_Notify* pNotify) { m_pEditNotify = pNotify; }
113
114   void SetCharSet(uint8_t nCharSet) { m_nCharSet = nCharSet; }
115   int32_t GetCharSet() const;
116
117   void SetCodePage(int32_t nCodePage) { m_nCodePage = nCodePage; }
118   int32_t GetCodePage() const { return m_nCodePage; }
119
120   CPDF_Font* GetCaretFont() const;
121   FX_FLOAT GetCaretFontSize() const;
122
123   FX_BOOL CanUndo() const;
124   FX_BOOL CanRedo() const;
125   void Redo();
126   void Undo();
127
128   void SetReadyToInput();
129
130  protected:
131   virtual void ShowVScrollBar(FX_BOOL bShow);
132
133   virtual void InsertWord(FX_WORD word, int32_t nCharset);
134   virtual void InsertReturn();
135   virtual void InsertText(const FX_WCHAR* csText);
136
137   virtual void SetCursor();
138   FX_BOOL IsWndHorV();
139
140   void Delete();
141   void Backspace();
142
143  protected:
144   void GetCaretInfo(CPDF_Point& ptHead, CPDF_Point& ptFoot) const;
145   void SetCaret(FX_BOOL bVisible,
146                 const CPDF_Point& ptHead,
147                 const CPDF_Point& ptFoot);
148
149   void SetEditCaret(FX_BOOL bVisible);
150
151  protected:
152   virtual void IOnSetScrollInfoX(FX_FLOAT fPlateMin,
153                                  FX_FLOAT fPlateMax,
154                                  FX_FLOAT fContentMin,
155                                  FX_FLOAT fContentMax,
156                                  FX_FLOAT fSmallStep,
157                                  FX_FLOAT fBigStep) {}
158   virtual void IOnSetScrollInfoY(FX_FLOAT fPlateMin,
159                                  FX_FLOAT fPlateMax,
160                                  FX_FLOAT fContentMin,
161                                  FX_FLOAT fContentMax,
162                                  FX_FLOAT fSmallStep,
163                                  FX_FLOAT fBigStep);
164   virtual void IOnSetScrollPosX(FX_FLOAT fx) {}
165   virtual void IOnSetScrollPosY(FX_FLOAT fy);
166   virtual void IOnSetCaret(FX_BOOL bVisible,
167                            const CPDF_Point& ptHead,
168                            const CPDF_Point& ptFoot,
169                            const CPVT_WordPlace& place);
170   virtual void IOnCaretChange(const CPVT_SecProps& secProps,
171                               const CPVT_WordProps& wordProps);
172   virtual void IOnContentChange(const CPDF_Rect& rcContent);
173   virtual void IOnInvalidateRect(CPDF_Rect* pRect);
174
175  private:
176   void CreateEditCaret(const PWL_CREATEPARAM& cp);
177
178  protected:
179   IFX_Edit* m_pEdit;
180   CPWL_Caret* m_pEditCaret;
181   FX_BOOL m_bMouseDown;
182   IPWL_Edit_Notify* m_pEditNotify;
183
184  private:
185   int32_t m_nCharSet;
186   int32_t m_nCodePage;
187 };
188
189 #endif  // FPDFSDK_INCLUDE_PDFWINDOW_PWL_EDITCTRL_H_