Use override in more classes in core/
[pdfium.git] / fpdfsdk / include / pdfwindow / PWL_Edit.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_EDIT_H_
8 #define FPDFSDK_INCLUDE_PDFWINDOW_PWL_EDIT_H_
9
10 #include "../../../core/include/fxcrt/fx_basic.h"
11 #include "PWL_EditCtrl.h"
12 #include "PWL_Wnd.h"
13
14 class CPWL_Edit;
15 class IPWL_Filler_Notify;
16 class IPWL_SpellCheck;
17
18 class IPWL_Filler_Notify {
19  public:
20   virtual ~IPWL_Filler_Notify() {}
21   virtual void QueryWherePopup(
22       void* pPrivateData,
23       FX_FLOAT fPopupMin,
24       FX_FLOAT fPopupMax,
25       int32_t& nRet,
26       FX_FLOAT& fPopupRet) = 0;  // nRet: (0:bottom 1:top)
27   virtual void OnBeforeKeyStroke(FX_BOOL bEditOrList,
28                                  void* pPrivateData,
29                                  int32_t nKeyCode,
30                                  CFX_WideString& strChange,
31                                  const CFX_WideString& strChangeEx,
32                                  int nSelStart,
33                                  int nSelEnd,
34                                  FX_BOOL bKeyDown,
35                                  FX_BOOL& bRC,
36                                  FX_BOOL& bExit,
37                                  FX_DWORD nFlag) = 0;
38   virtual void OnAfterKeyStroke(FX_BOOL bEditOrList,
39                                 void* pPrivateData,
40                                 FX_BOOL& bExit,
41                                 FX_DWORD nFlag) = 0;
42 };
43
44 class CPWL_Edit : public CPWL_EditCtrl, public IFX_Edit_OprNotify {
45  public:
46   CPWL_Edit();
47   virtual ~CPWL_Edit();
48
49  public:
50   virtual CFX_ByteString GetClassName() const;
51   virtual void OnDestroy();
52   virtual void OnCreated();
53   virtual void RePosChildWnd();
54   virtual CPDF_Rect GetClientRect() const;
55
56   virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream);
57   virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
58                                   CPDF_Matrix* pUser2Device);
59
60   virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
61   virtual FX_BOOL OnLButtonDblClk(const CPDF_Point& point, FX_DWORD nFlag);
62   virtual FX_BOOL OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
63   virtual FX_BOOL OnMouseWheel(short zDelta,
64                                const CPDF_Point& point,
65                                FX_DWORD nFlag);
66
67   virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
68   virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag);
69
70   virtual CPDF_Rect GetFocusRect() const;
71
72  public:
73   void SetAlignFormatH(PWL_EDIT_ALIGNFORMAT_H nFormat = PEAH_LEFT,
74                        FX_BOOL bPaint = TRUE);  // 0:left 1:right 2:middle
75   void SetAlignFormatV(PWL_EDIT_ALIGNFORMAT_V nFormat = PEAV_TOP,
76                        FX_BOOL bPaint = TRUE);  // 0:top 1:bottom 2:center
77
78   void SetCharArray(int32_t nCharArray);
79   void SetLimitChar(int32_t nLimitChar);
80
81   void SetHorzScale(int32_t nHorzScale, FX_BOOL bPaint = TRUE);
82   void SetCharSpace(FX_FLOAT fCharSpace, FX_BOOL bPaint = TRUE);
83
84   void SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE);
85
86   void EnableSpellCheck(FX_BOOL bEnabled);
87
88   FX_BOOL CanSelectAll() const;
89   FX_BOOL CanClear() const;
90   FX_BOOL CanCopy() const;
91   FX_BOOL CanCut() const;
92   FX_BOOL CanPaste() const;
93
94   virtual void CopyText();
95   virtual void PasteText();
96   virtual void CutText();
97
98   virtual void SetText(const FX_WCHAR* csText);
99   void ReplaceSel(const FX_WCHAR* csText);
100
101   CFX_ByteString GetTextAppearanceStream(const CPDF_Point& ptOffset) const;
102   CFX_ByteString GetCaretAppearanceStream(const CPDF_Point& ptOffset) const;
103   CFX_ByteString GetSelectAppearanceStream(const CPDF_Point& ptOffset) const;
104
105   FX_BOOL IsTextFull() const;
106
107   static FX_FLOAT GetCharArrayAutoFontSize(CPDF_Font* pFont,
108                                            const CPDF_Rect& rcPlate,
109                                            int32_t nCharArray);
110
111   void SetFillerNotify(IPWL_Filler_Notify* pNotify) {
112     m_pFillerNotify = pNotify;
113   }
114
115   void GeneratePageObjects(CPDF_PageObjects* pPageObjects,
116                            const CPDF_Point& ptOffset,
117                            CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray);
118   void GeneratePageObjects(CPDF_PageObjects* pPageObjects,
119                            const CPDF_Point& ptOffset);
120
121  protected:
122   virtual void OnSetFocus();
123   virtual void OnKillFocus();
124
125  protected:
126   virtual void OnInsertWord(const CPVT_WordPlace& place,
127                             const CPVT_WordPlace& oldplace);
128   virtual void OnInsertReturn(const CPVT_WordPlace& place,
129                               const CPVT_WordPlace& oldplace);
130   virtual void OnBackSpace(const CPVT_WordPlace& place,
131                            const CPVT_WordPlace& oldplace);
132   virtual void OnDelete(const CPVT_WordPlace& place,
133                         const CPVT_WordPlace& oldplace);
134   virtual void OnClear(const CPVT_WordPlace& place,
135                        const CPVT_WordPlace& oldplace);
136   virtual void OnSetText(const CPVT_WordPlace& place,
137                          const CPVT_WordPlace& oldplace);
138   virtual void OnInsertText(const CPVT_WordPlace& place,
139                             const CPVT_WordPlace& oldplace);
140   virtual void OnAddUndo(IFX_Edit_UndoItem* pUndoItem);
141
142  private:
143   CPVT_WordRange GetSelectWordRange() const;
144   virtual void ShowVScrollBar(FX_BOOL bShow);
145   FX_BOOL IsVScrollBarVisible() const;
146   void SetParamByFlag();
147
148   FX_FLOAT GetCharArrayAutoFontSize(int32_t nCharArray);
149   CPDF_Point GetWordRightBottomPoint(const CPVT_WordPlace& wpWord);
150
151   CPVT_WordRange CombineWordRange(const CPVT_WordRange& wr1,
152                                   const CPVT_WordRange& wr2);
153   CPVT_WordRange GetLatinWordsRange(const CPDF_Point& point) const;
154   CPVT_WordRange GetLatinWordsRange(const CPVT_WordPlace& place) const;
155   CPVT_WordRange GetArabicWordsRange(const CPVT_WordPlace& place) const;
156   CPVT_WordRange GetSameWordsRange(const CPVT_WordPlace& place,
157                                    FX_BOOL bLatin,
158                                    FX_BOOL bArabic) const;
159
160  public:
161   FX_BOOL IsProceedtoOnChar(FX_WORD nKeyCode, FX_DWORD nFlag);
162
163  private:
164   IPWL_Filler_Notify* m_pFillerNotify;
165   IPWL_SpellCheck* m_pSpellCheck;
166   FX_BOOL m_bFocus;
167   CPDF_Rect m_rcOldWindow;
168
169  public:
170   void AttachFFLData(void* pData) { m_pFormFiller = pData; }
171
172  private:
173   void* m_pFormFiller;
174 };
175
176 #endif  // FPDFSDK_INCLUDE_PDFWINDOW_PWL_EDIT_H_