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