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