Initial commit.
[pdfium.git] / fpdfsdk / include / fxedit / fx_edit.h
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4  \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #ifndef _FX_EDIT_H_\r
8 #define _FX_EDIT_H_\r
9 \r
10 #define PVTWORD_STYLE_NORMAL                            0x0000L\r
11 #define PVTWORD_STYLE_HIGHLIGHT                         0x0001L\r
12 #define PVTWORD_STYLE_UNDERLINE                         0x0002L\r
13 #define PVTWORD_STYLE_CROSSOUT                          0x0004L\r
14 #define PVTWORD_STYLE_SQUIGGLY                          0x0008L\r
15 #define PVTWORD_STYLE_DUALCROSSOUT                      0x0010L\r
16 #define PVTWORD_STYLE_BOLD                                      0x0020L\r
17 #define PVTWORD_STYLE_ITALIC                            0x0040L\r
18 \r
19 #define FX_EDIT_ISLATINWORD(u)  (u == 0x2D || (u <= 0x005A && u >= 0x0041) || (u <= 0x007A && u >= 0x0061) || (u <= 0x02AF && u >= 0x00C0))\r
20 \r
21 #ifdef FX_READER_DLL\r
22         #ifdef FXET_EXPORT\r
23                 #define FXET_CLASS __declspec(dllexport)\r
24         #else\r
25                 #define FXET_CLASS\r
26         #endif\r
27 #else\r
28         #define FXET_CLASS\r
29 #endif\r
30 \r
31 #ifndef DEFAULT_CHARSET\r
32 #define DEFAULT_CHARSET         1\r
33 #endif \r
34 \r
35 class IFX_Edit_FontMap;\r
36 class IFX_Edit_Notify;\r
37 class IFX_Edit_Iterator;\r
38 class IFX_Edit_UndoItem;\r
39 class IFX_Edit;\r
40 class IFX_List_Notify;\r
41 class IFX_List;\r
42 class IFX_SystemHandler;\r
43 \r
44 class IFX_Edit_FontMap\r
45 {\r
46 public:\r
47         //map a fontindex to pdf font.\r
48         virtual CPDF_Font *                                             GetPDFFont(FX_INT32 nFontIndex) = 0;\r
49         //get the alias of a pdf font.\r
50         virtual CFX_ByteString                                  GetPDFFontAlias(FX_INT32 nFontIndex) = 0;\r
51         //get the index of a font that can show a word.\r
52         virtual FX_INT32                                                GetWordFontIndex(FX_WORD word, FX_INT32 charset, FX_INT32 nFontIndex) = 0;\r
53         //get the charcode of word from unicode\r
54         virtual FX_INT32                                                CharCodeFromUnicode(FX_INT32 nFontIndex, FX_WORD word) = 0;\r
55         //get the charset of unicode\r
56         virtual FX_INT32                                                CharSetFromUnicode(FX_WORD word, FX_INT32 nOldCharset) = 0;\r
57 };\r
58 \r
59 class IFX_Edit_Notify\r
60 {\r
61         //this class is implemented by user\r
62 public:\r
63         //set the horizontal scrollbar information.\r
64         virtual void                                                    IOnSetScrollInfoX(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, \r
65                                                                                                 FX_FLOAT fContentMin, FX_FLOAT fContentMax, \r
66                                                                                                 FX_FLOAT fSmallStep, FX_FLOAT fBigStep) = 0;\r
67         //set the vertical scrollbar information.\r
68         virtual void                                                    IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, \r
69                                                                                                 FX_FLOAT fContentMin, FX_FLOAT fContentMax, \r
70                                                                                                 FX_FLOAT fSmallStep, FX_FLOAT fBigStep) = 0;\r
71         //set the position of horizontal scrollbar.\r
72         virtual void                                                    IOnSetScrollPosX(FX_FLOAT fx) = 0;\r
73         //set the position of vertical scrollbar.\r
74         virtual void                                                    IOnSetScrollPosY(FX_FLOAT fy) = 0;\r
75         //set the caret information.\r
76         virtual void                                                    IOnSetCaret(FX_BOOL bVisible,const CPDF_Point & ptHead,const CPDF_Point & ptFoot, const CPVT_WordPlace& place) = 0;\r
77         //if the caret position is changed ,send the information of current postion to user.\r
78         virtual void                                                    IOnCaretChange(const CPVT_SecProps & secProps, const CPVT_WordProps & wordProps) = 0;\r
79         //if the text area is changed, send the information to user.\r
80         virtual void                                                    IOnContentChange(const CPDF_Rect& rcContent) = 0;\r
81         //Invalidate the rectangle relative to the bounding box of edit.\r
82         virtual void                                                    IOnInvalidateRect(CPDF_Rect * pRect) = 0;\r
83 };\r
84 \r
85 class IFX_Edit_OprNotify\r
86 {\r
87         //this class is implemented by user\r
88 public:\r
89         //OprType: 0\r
90         virtual void                                                    OnInsertWord(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0;\r
91         //OprType: 1\r
92         virtual void                                                    OnInsertReturn(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0;\r
93         //OprType: 2\r
94         virtual void                                                    OnBackSpace(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0;\r
95         //OprType: 3\r
96         virtual void                                                    OnDelete(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0;\r
97         //OprType: 4\r
98         virtual void                                                    OnClear(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0;\r
99         //OprType: 5\r
100         virtual void                                                    OnInsertText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0;\r
101         //OprType: 6\r
102         virtual void                                                    OnSetText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0;\r
103         //\r
104         virtual void                                                    OnAddUndo(IFX_Edit_UndoItem* pUndoItem) = 0;\r
105 };\r
106 \r
107 class IFX_Edit_Iterator\r
108 {\r
109 public:\r
110         virtual ~IFX_Edit_Iterator()  {}\r
111 public:\r
112         //move the current position to the next word.\r
113         virtual FX_BOOL                                                 NextWord() = 0;\r
114         //move the current position to the next line.\r
115         virtual FX_BOOL                                                 NextLine() = 0;\r
116         //move the current position to the next section. \r
117         virtual FX_BOOL                                                 NextSection() = 0;\r
118 \r
119         //move the current position to the previous word.\r
120         virtual FX_BOOL                                                 PrevWord() = 0;\r
121         //move the current position to the previous line.\r
122         virtual FX_BOOL                                                 PrevLine() = 0;\r
123         //move the current position to the previous section. \r
124         virtual FX_BOOL                                                 PrevSection() = 0;\r
125 \r
126         //get the information of the current word.\r
127         virtual FX_BOOL                                                 GetWord(CPVT_Word & word) const = 0;\r
128         //get the information of the current line.\r
129         virtual FX_BOOL                                                 GetLine(CPVT_Line & line) const = 0;\r
130         //get the information of the current section.\r
131         virtual FX_BOOL                                                 GetSection(CPVT_Section & section) const = 0;\r
132         //set the current position.\r
133         virtual void                                                    SetAt(FX_INT32 nWordIndex) = 0;\r
134         //set the current position.\r
135         virtual void                                                    SetAt(const CPVT_WordPlace & place) = 0;\r
136         //get the current position.\r
137         virtual const CPVT_WordPlace &                  GetAt() const = 0;\r
138 \r
139         //get the edit which this iterator belongs to\r
140         virtual IFX_Edit*                                               GetEdit() const = 0;\r
141 };\r
142 \r
143 class IFX_Edit_UndoItem\r
144 {\r
145 public:\r
146         virtual void                                                    Undo() = 0;\r
147         virtual void                                                    Redo() = 0;\r
148         virtual CFX_WideString                                  GetUndoTitle() = 0;\r
149         virtual void                                                    Release() = 0;\r
150 };\r
151 \r
152 class FXET_CLASS IFX_Edit\r
153 {\r
154 public:\r
155         static IFX_Edit*                                                NewEdit();\r
156         static  void                                                    DelEdit(IFX_Edit* pEdit);\r
157 \r
158 public:\r
159         //set a IFX_Edit_FontMap pointer implemented by user.\r
160         virtual void                                                    SetFontMap(IFX_Edit_FontMap* pFontMap) = 0;\r
161         //if user don't like to use FontMap, implement VTProvider and set it directly.\r
162         virtual void                                                    SetVTProvider(IPDF_VariableText_Provider* pProvider) = 0;\r
163         //set a IFX_Edit_Notify pointer implemented by user.\r
164         virtual void                                                    SetNotify(IFX_Edit_Notify * pNotify) = 0;\r
165         virtual void                                                    SetOprNotify(IFX_Edit_OprNotify* pOprNotify) = 0;\r
166         //get a pointer allocated by CPDF_Edit, by this pointer, user can iterate the contents of edit, but don't need to release.\r
167         virtual IFX_Edit_Iterator*                              GetIterator() = 0;\r
168         //get a VT pointer relative to this edit.\r
169         virtual IPDF_VariableText*                              GetVariableText() = 0;\r
170         //get the IFX_Edit_FontMap pointer set by user.\r
171         virtual IFX_Edit_FontMap*                               GetFontMap() = 0;\r
172 \r
173         //initialize the edit.\r
174         virtual void                                                    Initialize() = 0;\r
175 \r
176         //set the bounding box of the text area.\r
177         virtual void                                                    SetPlateRect(const CPDF_Rect & rect, FX_BOOL bPaint = TRUE) = 0;\r
178         //set the scroll origin\r
179         virtual void                                                    SetScrollPos(const CPDF_Point & point) = 0;\r
180 \r
181         //set the horizontal text alignment in text box, nFormat (0:left 1:middle 2:right).\r
182         virtual void                                                    SetAlignmentH(FX_INT32 nFormat = 0, FX_BOOL bPaint = TRUE) = 0;\r
183         //set the vertical text alignment in text box, nFormat (0:top 1:center 2:bottom).\r
184         virtual void                                                    SetAlignmentV(FX_INT32 nFormat = 0, FX_BOOL bPaint = TRUE) = 0;\r
185         //if the text is shown in secret , set a character for substitute.\r
186         virtual void                                                    SetPasswordChar(FX_WORD wSubWord = '*', FX_BOOL bPaint = TRUE) = 0;\r
187         //set the maximal count of words of the text.\r
188         virtual void                                                    SetLimitChar(FX_INT32 nLimitChar = 0, FX_BOOL bPaint = TRUE) = 0;\r
189         //if set the count of charArray , then all words is shown in equal space.\r
190         virtual void                                                    SetCharArray(FX_INT32 nCharArray = 0, FX_BOOL bPaint = TRUE) = 0;\r
191         //set the space of two characters.\r
192         virtual void                                                    SetCharSpace(FX_FLOAT fCharSpace = 0.0f, FX_BOOL bPaint = TRUE) = 0;\r
193         //set the horizontal scale of all characters.\r
194         virtual void                                                    SetHorzScale(FX_INT32 nHorzScale = 100, FX_BOOL bPaint = TRUE) = 0;\r
195         //set the leading of all lines\r
196         virtual void                                                    SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE) = 0;\r
197         //if set, CRLF is allowed.\r
198         virtual void                                                    SetMultiLine(FX_BOOL bMultiLine = TRUE, FX_BOOL bPaint = TRUE) = 0;\r
199         //if set, all words auto fit the width of the bounding box.     \r
200         virtual void                                                    SetAutoReturn(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) = 0;\r
201         //if set, a font size is calculated to full fit the bounding box.\r
202         virtual void                                                    SetAutoFontSize(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) = 0;\r
203         //is set, the text is allowed to scroll.\r
204         virtual void                                                    SetAutoScroll(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) = 0;\r
205         //set the font size of all words.\r
206         virtual void                                                    SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint = TRUE) = 0;\r
207         //the text is allowed to auto-scroll, allow the text overflow?\r
208         virtual void                                                    SetTextOverflow(FX_BOOL bAllowed = FALSE, FX_BOOL bPaint = TRUE) = 0;\r
209 \r
210         //query if the edit is richedit.\r
211         virtual FX_BOOL                                                 IsRichText() const = 0;\r
212         //set the edit is richedit.\r
213         virtual void                                                    SetRichText(FX_BOOL bRichText = TRUE, FX_BOOL bPaint = TRUE) = 0;\r
214         //set the fontsize of selected text.\r
215         virtual FX_BOOL                                                 SetRichFontSize(FX_FLOAT fFontSize) = 0;        \r
216         //set the fontindex of selected text, user can change the font of selected text.\r
217         virtual FX_BOOL                                                 SetRichFontIndex(FX_INT32 nFontIndex) = 0;\r
218         //set the textcolor of selected text.\r
219         virtual FX_BOOL                                                 SetRichTextColor(FX_COLORREF dwColor) = 0;\r
220         //set the text script type of selected text. (0:normal 1:superscript 2:subscript)\r
221         virtual FX_BOOL                                                 SetRichTextScript(FX_INT32 nScriptType) = 0;    \r
222         //set the bold font style of selected text.\r
223         virtual FX_BOOL                                                 SetRichTextBold(FX_BOOL bBold = TRUE) = 0;\r
224         //set the italic font style of selected text.\r
225         virtual FX_BOOL                                                 SetRichTextItalic(FX_BOOL bItalic = TRUE) = 0;\r
226         //set the underline style of selected text.\r
227         virtual FX_BOOL                                                 SetRichTextUnderline(FX_BOOL bUnderline = TRUE) = 0;\r
228         //set the crossout style of selected text.\r
229         virtual FX_BOOL                                                 SetRichTextCrossout(FX_BOOL bCrossout = TRUE) = 0;\r
230         //set the charspace of selected text, in user coordinate.\r
231         virtual FX_BOOL                                                 SetRichTextCharSpace(FX_FLOAT fCharSpace) = 0;\r
232         //set the horizontal scale of selected text, default value is 100.\r
233         virtual FX_BOOL                                                 SetRichTextHorzScale(FX_INT32 nHorzScale = 100) = 0;\r
234         //set the leading of selected section, in user coordinate.\r
235         virtual FX_BOOL                                                 SetRichTextLineLeading(FX_FLOAT fLineLeading) = 0;\r
236         //set the indent of selected section, in user coordinate.\r
237         virtual FX_BOOL                                                 SetRichTextLineIndent(FX_FLOAT fLineIndent) = 0;\r
238         //set the alignment of selected section, nAlignment(0:left 1:middle 2:right)\r
239         virtual FX_BOOL                                                 SetRichTextAlignment(FX_INT32 nAlignment) = 0;\r
240 \r
241         //set the selected range of text.\r
242         //if nStartChar == 0 and nEndChar == -1, select all the text.\r
243         virtual void                                                    SetSel(FX_INT32 nStartChar,FX_INT32 nEndChar) = 0;\r
244         //get the selected range of text.\r
245         virtual void                                                    GetSel(FX_INT32 & nStartChar, FX_INT32 & nEndChar) const = 0;\r
246         //select all the text.\r
247         virtual void                                                    SelectAll() = 0;\r
248         //set text is not selected.\r
249         virtual void                                                    SelectNone() = 0;               \r
250         //get the caret position.\r
251         virtual FX_INT32                                                GetCaret() const = 0;\r
252         virtual CPVT_WordPlace                                  GetCaretWordPlace() const = 0;\r
253         //get the string of selected text.\r
254         virtual CFX_WideString                                  GetSelText() const = 0;\r
255         //get the text conent\r
256         virtual CFX_WideString                                  GetText() const = 0;\r
257         //query if any text is selected.\r
258         virtual FX_BOOL                                                 IsSelected() const = 0; \r
259         //get the scroll origin\r
260         virtual CPDF_Point                                              GetScrollPos() const = 0;\r
261         //get the bounding box of the text area.\r
262         virtual CPDF_Rect                                               GetPlateRect() const = 0;\r
263         //get the fact area of the text.\r
264         virtual CPDF_Rect                                               GetContentRect() const = 0;\r
265         //get the visible word range\r
266         virtual CPVT_WordRange                                  GetVisibleWordRange() const = 0;\r
267         //get the whole word range\r
268         virtual CPVT_WordRange                                  GetWholeWordRange() const = 0;\r
269         //get the word range of select text\r
270         virtual CPVT_WordRange                                  GetSelectWordRange() const = 0;\r
271 \r
272         //send the mousedown message to edit for response.\r
273         //if Shift key is hold, bShift is TRUE, is Ctrl key is hold, bCtrl is TRUE.\r
274         virtual void                                                    OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
275         //send the mousemove message to edit when mouse down is TRUE.\r
276         virtual void                                                    OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
277         //send the UP key message to edit.\r
278         virtual void                                                    OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
279         //send the DOWN key message to edit.\r
280         virtual void                                                    OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
281         //send the LEFT key message to edit.\r
282         virtual void                                                    OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
283         //send the RIGHT key message to edit.\r
284         virtual void                                                    OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
285         //send the HOME key message to edit.\r
286         virtual void                                                    OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
287         //send the END key message to edit.\r
288         virtual void                                                    OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
289 \r
290         //put text into edit.\r
291         virtual void                                                    SetText(FX_LPCWSTR text,FX_INT32 charset = DEFAULT_CHARSET,\r
292                                                                                                         const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL) = 0;   \r
293         //insert a word into the edit.\r
294         virtual FX_BOOL                                                 InsertWord(FX_WORD word, FX_INT32 charset = DEFAULT_CHARSET, const CPVT_WordProps * pWordProps = NULL) = 0;\r
295         //insert a return into the edit.\r
296         virtual FX_BOOL                                                 InsertReturn(const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL) = 0;      \r
297         //insert text into the edit.\r
298         virtual FX_BOOL                                                 InsertText(FX_LPCWSTR text, FX_INT32 charset = DEFAULT_CHARSET,\r
299                                                                                                         const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL) = 0;\r
300         //do backspace operation.\r
301         virtual FX_BOOL                                                 Backspace() = 0;\r
302         //do delete operation.\r
303         virtual FX_BOOL                                                 Delete() = 0;   \r
304         //delete the selected text.\r
305         virtual FX_BOOL                                                 Clear() = 0;\r
306 \r
307         //do Redo operation.\r
308         virtual FX_BOOL                                                 Redo() = 0;\r
309         //do Undo operation.\r
310         virtual FX_BOOL                                                 Undo() = 0;\r
311         //move caret\r
312         virtual void                                                    SetCaret(FX_INT32 nPos) = 0;\r
313 \r
314         //arrange all words over again\r
315         virtual void                                                    Paint() = 0;\r
316         \r
317         //allow to refresh screen?\r
318         virtual void                                                    EnableRefresh(FX_BOOL bRefresh) = 0;\r
319 \r
320         virtual void                                                    RefreshWordRange(const CPVT_WordRange& wr) = 0;\r
321 \r
322         //allow undo/redo?\r
323         virtual void                                                    EnableUndo(FX_BOOL bUndo) = 0;\r
324 \r
325         //allow notify?\r
326         virtual void                                                    EnableNotify(FX_BOOL bNotify) = 0;\r
327 \r
328         //allow opr notify?\r
329         virtual void                                                    EnableOprNotify(FX_BOOL bNotify) = 0;\r
330 \r
331         //map word place to word index.\r
332         virtual FX_INT32                                                WordPlaceToWordIndex(const CPVT_WordPlace & place) const = 0;\r
333         //map word index to word place.\r
334         virtual CPVT_WordPlace                                  WordIndexToWordPlace(FX_INT32 index) const = 0;\r
335 \r
336         //get the beginning position of a line\r
337         virtual CPVT_WordPlace                                  GetLineBeginPlace(const CPVT_WordPlace & place) const = 0;\r
338 \r
339         //get the ending position of a line\r
340         virtual CPVT_WordPlace                                  GetLineEndPlace(const CPVT_WordPlace & place) const = 0;\r
341 \r
342         //get the beginning position of a section\r
343         virtual CPVT_WordPlace                                  GetSectionBeginPlace(const CPVT_WordPlace & place) const = 0;\r
344 \r
345         //get the ending position of a section\r
346         virtual CPVT_WordPlace                                  GetSectionEndPlace(const CPVT_WordPlace & place) const = 0;\r
347 \r
348         //search a wordplace form point\r
349         virtual CPVT_WordPlace                                  SearchWordPlace(const CPDF_Point& point) const = 0;\r
350 \r
351         //get the font size of non_rich text or default font size of richtext.\r
352         virtual FX_FLOAT                                                GetFontSize() const = 0;\r
353         //get the mask character.\r
354         virtual FX_WORD                                                 GetPasswordChar() const = 0;\r
355         //get the count of charArray\r
356         virtual FX_INT32                                                GetCharArray() const = 0;\r
357         //get the horizontal scale of all characters\r
358         virtual FX_INT32                                                GetHorzScale() const = 0;\r
359         //get the space of two characters\r
360         virtual FX_FLOAT                                                GetCharSpace() const = 0;\r
361         //get the latin words of specified range\r
362         virtual CFX_WideString                                  GetRangeText(const CPVT_WordRange & range) const = 0;\r
363         //is the text full in bounding box\r
364         virtual FX_BOOL                                                 IsTextFull() const = 0;\r
365         virtual FX_BOOL                                                 CanUndo() const = 0;\r
366         virtual FX_BOOL                                                 CanRedo() const = 0;\r
367         //if the content is changed after settext?\r
368         virtual FX_BOOL                                                 IsModified() const = 0;\r
369         //get the total words in edit\r
370         virtual FX_INT32                                                GetTotalWords() const = 0;\r
371 \r
372         virtual void                                                    AddUndoItem(IFX_Edit_UndoItem* pUndoItem) = 0;\r
373 \r
374 public:\r
375         static CFX_ByteString                                   GetEditAppearanceStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset, \r
376                                                                                                         const CPVT_WordRange* pRange = NULL, \r
377                                                                                                         FX_BOOL bContinuous = TRUE, FX_WORD SubWord = 0);\r
378         static CFX_ByteString                                   GetSelectAppearanceStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset, const CPVT_WordRange* pRange = NULL);\r
379         static void                                                             DrawEdit(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, FX_COLORREF crTextFill, FX_COLORREF crTextStroke,\r
380                                                                                                         const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, IFX_SystemHandler* pSystemHandler, void* pFFLData);\r
381         static void                                                             DrawUnderline(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, FX_COLORREF color,\r
382                                                                                                         const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange);\r
383         static void                                                             DrawRichEdit(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit,  \r
384                                                                                                         const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange);\r
385         static void                                                             GeneratePageObjects(CPDF_PageObjects* pPageObjects, IFX_Edit* pEdit,\r
386                                                                                                         const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, FX_COLORREF crText, CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray);\r
387         static void                                                             GenerateRichPageObjects(CPDF_PageObjects* pPageObjects, IFX_Edit* pEdit,\r
388                                                                                                         const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray);\r
389         static void                                                             GenerateUnderlineObjects(CPDF_PageObjects* pPageObjects, IFX_Edit* pEdit,\r
390                                                                                                         const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, FX_COLORREF color);\r
391 };\r
392 \r
393 class IFX_List_Notify\r
394 {\r
395         //this class is implemented by user\r
396 public:\r
397         //set the horizontal scrollbar information.\r
398         virtual void                                                    IOnSetScrollInfoX(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, \r
399                                                                                                 FX_FLOAT fContentMin, FX_FLOAT fContentMax, \r
400                                                                                                 FX_FLOAT fSmallStep, FX_FLOAT fBigStep) = 0;\r
401         //set the vertical scrollbar information.\r
402         virtual void                                                    IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, \r
403                                                                                                 FX_FLOAT fContentMin, FX_FLOAT fContentMax, \r
404                                                                                                 FX_FLOAT fSmallStep, FX_FLOAT fBigStep) = 0;\r
405         //set the position of horizontal scrollbar.\r
406         virtual void                                                    IOnSetScrollPosX(FX_FLOAT fx) = 0;\r
407         //set the position of vertical scrollbar.\r
408         virtual void                                                    IOnSetScrollPosY(FX_FLOAT fy) = 0;\r
409         //Invalidate the rectangle relative to the bounding box of edit.\r
410         virtual void                                                    IOnInvalidateRect(CPDF_Rect * pRect) = 0;\r
411 };\r
412 \r
413 class FXET_CLASS IFX_List\r
414 {\r
415 public:\r
416         static IFX_List*                                                NewList();\r
417         static void                                                             DelList(IFX_List* pList);\r
418 \r
419 public:\r
420         virtual void                                                    SetFontMap(IFX_Edit_FontMap * pFontMap) = 0;\r
421         virtual void                                                    SetNotify(IFX_List_Notify * pNotify) = 0;\r
422 \r
423         virtual void                                                    SetPlateRect(const CPDF_Rect & rect) = 0;\r
424         virtual void                                                    SetFontSize(FX_FLOAT fFontSize) = 0;\r
425 \r
426         virtual CPDF_Rect                                               GetPlateRect() const = 0;\r
427         virtual CPDF_Rect                                               GetContentRect() const = 0;\r
428 \r
429         virtual FX_FLOAT                                                GetFontSize() const = 0;\r
430         virtual IFX_Edit*                                               GetItemEdit(FX_INT32 nIndex) const = 0;\r
431         virtual FX_INT32                                                GetCount() const = 0;\r
432         virtual FX_BOOL                                                 IsItemSelected(FX_INT32 nIndex) const = 0;\r
433         virtual FX_FLOAT                                                GetFirstHeight() const = 0;\r
434         \r
435         virtual void                                                    SetMultipleSel(FX_BOOL bMultiple) = 0;\r
436         virtual FX_BOOL                                                 IsMultipleSel() const = 0;      \r
437         virtual FX_BOOL                                                 IsValid(FX_INT32 nItemIndex) const = 0;\r
438         virtual FX_INT32                                                FindNext(FX_INT32 nIndex,FX_WCHAR nChar) const = 0;     \r
439 \r
440         virtual void                                                    SetScrollPos(const CPDF_Point & point) = 0;\r
441         virtual void                                                    ScrollToListItem(FX_INT32 nItemIndex) = 0;\r
442         virtual CPDF_Rect                                               GetItemRect(FX_INT32 nIndex) const = 0;\r
443         virtual FX_INT32                                                GetCaret() const = 0;\r
444         virtual FX_INT32                                                GetSelect() const = 0;  \r
445         virtual FX_INT32                                                GetTopItem() const = 0;\r
446         virtual FX_INT32                                                GetItemIndex(const CPDF_Point & point) const = 0;\r
447         virtual FX_INT32                                                GetFirstSelected() const = 0;\r
448 \r
449         virtual void                                                    AddString(FX_LPCWSTR string) = 0;\r
450         virtual void                                                    SetTopItem(FX_INT32 nIndex) = 0;        \r
451         virtual void                                                    Select(FX_INT32 nItemIndex) = 0;\r
452         virtual void                                                    SetCaret(FX_INT32 nItemIndex) = 0;\r
453         virtual void                                                    Empty() = 0;\r
454         virtual void                                                    Cancel() = 0;\r
455         virtual CFX_WideString                                  GetText() const = 0;\r
456 \r
457 \r
458         virtual void                                                    OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
459         virtual void                                                    OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
460         virtual void                                                    OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
461         virtual void                                                    OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
462         virtual void                                                    OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
463         virtual void                                                    OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
464         virtual void                                                    OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
465         virtual void                                                    OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
466         virtual void                                                    OnVK(FX_INT32 nItemIndex,FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
467         virtual FX_BOOL                                                 OnChar(FX_WORD nChar,FX_BOOL bShift,FX_BOOL bCtrl) = 0;\r
468 };\r
469 \r
470 #endif \r
471 \r