Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fee / include / ifde_txtedtengine.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 _IFDE_TXTEDTENGINE_H\r
8 #define _IFDE_TXTEDTENGINE_H\r
9 class IFDE_TxtEdtBuf;\r
10 class IFDE_TxtEdtPage;\r
11 class IFDE_TxtEdtEngine;\r
12 class IFDE_TxtEdtEventSink;\r
13 class IFDE_TxtEdtParag;\r
14 #define FDE_TXTEDT_FIND_FLAGS_Prev              (0L << 0)\r
15 #define FDE_TXTEDT_FIND_FLAGS_Next              (1L << 0)\r
16 #define FDE_TXTEDT_FIND_FLAGS_WholeWord (1L << 1)\r
17 #define FDE_TXTEDT_FIND_FLAGS_NoCase    (1L << 2)\r
18 typedef struct _FDE_HTXTEDTFIND {\r
19     FX_LPVOID pData;\r
20 } * FDE_HTXTEDTFIND;\r
21 #define FDE_TEXTEDITMODE_MultiLines             (1L << 0)\r
22 #define FDE_TEXTEDITMODE_AutoLineWrap   (1L << 1)\r
23 #define FDE_TEXTEDITMODE_ReadOnly               (1L << 2)\r
24 #define FDE_TEXTEDITMODE_LimitArea_Vert (1L << 3)\r
25 #define FDE_TEXTEDITMODE_LimitArea_Horz (1L << 4)\r
26 #define FDE_TEXTEDITMODE_NoRedoUndo             (1L << 5)\r
27 #define FDE_TEXTEDITMODE_FIELD_TAB              (1L << 6)\r
28 #define FDE_TEXTEDITMODE_FIELD_AUTO             (1L << 7)\r
29 #define FDE_TEXTEDITMODE_Validate               (1L << 8)\r
30 #define FDE_TEXTEDITMODE_Password               (1L << 9)\r
31 #define FDE_TEXTEDITALIGN_Left                  (0L << 0)\r
32 #define FDE_TEXTEDITALIGN_Center                (1L << 0)\r
33 #define FDE_TEXTEDITALIGN_Right                 (2L << 0)\r
34 #define FDE_TEXTEDITALIGN_Normal                (1L << 3)\r
35 #define FDE_TEXTEDITALIGN_Justified             (1L << 4)\r
36 #define FDE_TEXTEDITALIGN_Distributed   (1L << 5)\r
37 #define FDE_TEXTEDITLAYOUT_DocVertical          (1L << 0)\r
38 #define FDE_TEXTEDITLAYOUT_CharVertial          (1L << 1)\r
39 #define FDE_TEXTEDITLAYOUT_LineReserve          (1L << 2)\r
40 #define FDE_TEXTEDITLAYOUT_RTL                          (1L << 3)\r
41 #define FDE_TEXTEDITLAYOUT_CombText                     (1L << 4)\r
42 #define FDE_TEXTEDITLAYOUT_ExpandTab            (1L << 5)\r
43 #define FDE_TEXTEDITLAYOUT_ArabicContext        (1L << 6)\r
44 #define FDE_TEXTEDITLAYOUT_ArabicShapes         (1L << 7)\r
45 #define FDE_TEXTEDITLAYOUT_LastLineHeight       (1L << 8)\r
46 enum FDE_TXTEDTMOVECARET {\r
47     MC_MoveNone = 0     ,\r
48     MC_Left                     ,\r
49     MC_Right            ,\r
50     MC_Up                       ,\r
51     MC_Down                     ,\r
52     MC_WordBackward     ,\r
53     MC_WordForward      ,\r
54     MC_LineStart        ,\r
55     MC_LineEnd          ,\r
56     MC_ParagStart       ,\r
57     MC_ParagEnd         ,\r
58     MC_PageUp           ,\r
59     MC_PageDown         ,\r
60     MC_Home                     ,\r
61     MC_End                      ,\r
62 };\r
63 enum FDE_TXTEDT_MODIFY_RET {\r
64     FDE_TXTEDT_MODIFY_RET_F_Tab                 = -6,\r
65     FDE_TXTEDT_MODIFY_RET_F_Locked              = -5,\r
66     FDE_TXTEDT_MODIFY_RET_F_Invalidate  = -4,\r
67     FDE_TXTEDT_MODIFY_RET_F_Boundary    = -3,\r
68     FDE_TXTEDT_MODIFY_RET_F_Full                = -2,\r
69     FDE_TXTEDT_MODIFY_RET_F_Normal              = -1,\r
70     FDE_TXTEDT_MODIFY_RET_S_Normal              = 0,\r
71     FDE_TXTEDT_MODIFY_RET_S_Full                = 1,\r
72     FDE_TXTEDT_MODIFY_RET_S_Part                = 2,\r
73     FDE_TXTEDT_MODIFY_RET_S_Empty               = 3,\r
74     FDE_TXTEDT_MODIFY_RET_T_Tab                 = 4,\r
75 };\r
76 enum FDE_TXTEDIT_LINEEND {\r
77     FDE_TXTEDIT_LINEEND_Auto,\r
78     FDE_TXTEDIT_LINEEND_CRLF,\r
79     FDE_TXTEDIT_LINEEND_CR,\r
80     FDE_TXTEDIT_LINEEND_LF,\r
81 };\r
82 struct _FDE_TXTEDTPARAMS : public CFX_Object {\r
83     _FDE_TXTEDTPARAMS()\r
84         : fPlateWidth(0)\r
85         , fPlateHeight(0)\r
86         , nLineCount(0)\r
87         , dwLayoutStyles(0)\r
88         , dwAlignment(0)\r
89         , dwMode(0)\r
90         , pFont(NULL)\r
91         , fFontSize(10.0f)\r
92         , dwFontColor(0xff000000)\r
93         , fLineSpace(10.0f)\r
94         , fTabWidth(36)\r
95         , bTabEquidistant(FALSE)\r
96         , wDefChar(0xFEFF)\r
97         , wLineBreakChar('\n')\r
98         , nCharRotation(0)\r
99         , nLineEnd(0)\r
100         , nHorzScale(100)\r
101         , fCharSpace(0)\r
102         , pEventSink(NULL)\r
103     {\r
104     }\r
105     FX_FLOAT    fPlateWidth;\r
106     FX_FLOAT    fPlateHeight;\r
107     FX_INT32    nLineCount;\r
108     FX_DWORD    dwLayoutStyles;\r
109     FX_DWORD    dwAlignment;\r
110     FX_DWORD    dwMode;\r
111     IFX_Font    *pFont;\r
112     FX_FLOAT    fFontSize;\r
113     FX_ARGB             dwFontColor;\r
114     FX_FLOAT    fLineSpace;\r
115     FX_FLOAT    fTabWidth;\r
116     FX_BOOL             bTabEquidistant;\r
117     FX_WCHAR    wDefChar;\r
118     FX_WCHAR    wLineBreakChar;\r
119     FX_INT32    nCharRotation;\r
120     FX_INT32    nLineEnd;\r
121     FX_INT32    nHorzScale;\r
122     FX_FLOAT    fCharSpace;\r
123     IFDE_TxtEdtEventSink * pEventSink;\r
124 };\r
125 typedef _FDE_TXTEDTPARAMS       FDE_TXTEDTPARAMS;\r
126 typedef _FDE_TXTEDTPARAMS*      FDE_LPTXTEDTPARAMS;\r
127 enum FDE_TXTEDT_TEXTCHANGE_TYPE {\r
128     FDE_TXTEDT_TEXTCHANGE_TYPE_Insert   = 0     ,\r
129     FDE_TXTEDT_TEXTCHANGE_TYPE_Delete           ,\r
130     FDE_TXTEDT_TEXTCHANGE_TYPE_Replace          ,\r
131 };\r
132 struct _FDE_TXTEDT_TEXTCHANGE_INFO : public CFX_Object {\r
133     FX_INT32            nChangeType;\r
134     CFX_WideString      wsInsert;\r
135     CFX_WideString      wsDelete;\r
136     CFX_WideString  wsPrevText;\r
137 };\r
138 typedef _FDE_TXTEDT_TEXTCHANGE_INFO             FDE_TXTEDT_TEXTCHANGE_INFO;\r
139 typedef _FDE_TXTEDT_TEXTCHANGE_INFO*    FDE_LPTXTEDT_TEXTCHANGE_INFO;\r
140 class IFDE_TxtEdtEventSink\r
141 {\r
142 public:\r
143     virtual void        On_CaretChanged(IFDE_TxtEdtEngine * pEdit, FX_INT32 nPage, FX_BOOL bVisible = TRUE) = 0;\r
144     virtual void        On_TextChanged(IFDE_TxtEdtEngine * pEdit, FDE_TXTEDT_TEXTCHANGE_INFO &ChangeInfo) = 0;\r
145     virtual void        On_PageCountChanged(IFDE_TxtEdtEngine * pEdit) = 0;\r
146     virtual void        On_SelChanged(IFDE_TxtEdtEngine * pEdit) = 0;\r
147     virtual FX_BOOL     On_PageLoad(IFDE_TxtEdtEngine * pEdit, FX_INT32 nPageIndex, FX_INT32 nPurpose) = 0;\r
148     virtual FX_BOOL     On_PageUnload(IFDE_TxtEdtEngine * pEdit, FX_INT32 nPageIndex, FX_INT32 nPurpose) = 0;\r
149     virtual FX_BOOL     On_PageChange(IFDE_TxtEdtEngine * pEdit, FX_INT32 nPageIndex) = 0;\r
150     virtual void        On_AddDoRecord(IFDE_TxtEdtEngine * pEdit, FX_BSTR bsDoRecord) = 0;\r
151     virtual FX_BOOL On_ValidateField(IFDE_TxtEdtEngine * pEdit, FX_INT32 nBlockIndex, FX_INT32 nFieldIndex, \\r
152                                      const CFX_WideString &wsFieldText, FX_INT32 nCharIndex) = 0;\r
153     virtual FX_BOOL On_ValidateBlock(IFDE_TxtEdtEngine * pEdit, FX_INT32 nBlockIndex) = 0;\r
154     virtual FX_BOOL On_GetBlockFormatText(IFDE_TxtEdtEngine * pEdit, FX_INT32 nBlockIndex, CFX_WideString &wsBlockText) = 0;\r
155     virtual FX_BOOL On_Validate(IFDE_TxtEdtEngine * pEdit, CFX_WideString &wsText) = 0;\r
156 };\r
157 class IFX_CharIter\r
158 {\r
159 public:\r
160     virtual void                Release() = 0;\r
161     virtual FX_BOOL             Next(FX_BOOL bPrev = FALSE) = 0;\r
162     virtual FX_WCHAR    GetChar() = 0;\r
163     virtual void                SetAt(FX_INT32 nIndex) = 0;\r
164     virtual FX_INT32    GetAt() const = 0;\r
165     virtual FX_BOOL             IsEOF(FX_BOOL bTail = TRUE) const = 0;\r
166     virtual IFX_CharIter * Clone() = 0;\r
167 };\r
168 class IFDE_TxtEdtEngine\r
169 {\r
170 public:\r
171     static IFDE_TxtEdtEngine*           Create();\r
172 \r
173     virtual void                                        Release() = 0;\r
174     virtual void                                        SetEditParams(const FDE_TXTEDTPARAMS &params) = 0;\r
175     virtual const FDE_TXTEDTPARAMS* GetEditParams() const = 0;\r
176 \r
177     virtual FX_INT32                            CountPages() const = 0;\r
178     virtual IFDE_TxtEdtPage*            GetPage(FX_INT32 nIndex) = 0;\r
179     virtual FX_BOOL                                     SetBufChunkSize(FX_INT32 nChunkSize) = 0;\r
180     virtual void                SetTextByStream(IFX_Stream * pStream) = 0;\r
181     virtual void                                        SetText(const CFX_WideString &wsText) = 0;\r
182     virtual FX_INT32                            GetTextLength() const = 0;\r
183     virtual void                                        GetText(CFX_WideString &wsText, FX_INT32 nStart, FX_INT32 nCount = -1) = 0;\r
184     virtual void                                        ClearText() = 0;\r
185 \r
186     virtual FX_INT32                            GetCaretRect(CFX_RectF &rtCaret) const = 0;\r
187     virtual FX_INT32                            GetCaretPos() const = 0;\r
188     virtual FX_INT32                            SetCaretPos(FX_INT32 nIndex, FX_BOOL bBefore = TRUE) = 0;\r
189     virtual FX_INT32                            MoveCaretPos(FDE_TXTEDTMOVECARET eMoveCaret, FX_BOOL bShift = FALSE, FX_BOOL bCtrl = FALSE) = 0;\r
190 \r
191     virtual void                                        Lock() = 0;\r
192     virtual void                                        Unlock() = 0;\r
193     virtual FX_BOOL                                     IsLocked() const = 0;\r
194 \r
195     virtual FX_INT32                            Insert(FX_INT32 nStart, FX_LPCWSTR lpText, FX_INT32 nLength) = 0;\r
196     virtual FX_INT32                            Delete(FX_INT32 nStart, FX_BOOL bBackspace = FALSE) = 0;\r
197     virtual FX_INT32                            DeleteRange(FX_INT32 nStart, FX_INT32 nCount = -1) = 0;\r
198     virtual FX_INT32                            Replace(FX_INT32 nStart, FX_INT32 nLength, const CFX_WideString &wsReplace) = 0;\r
199     virtual void                                        SetLimit(FX_INT32 nLimit) = 0;\r
200     virtual void                                        SetAliasChar(FX_WCHAR wAlias) = 0;\r
201     virtual void                                        SetFormatBlock(FX_INT32 nIndex, const CFX_WideString &wsBlockFormat) = 0;\r
202     virtual FX_INT32                            CountEditBlocks() const = 0;\r
203     virtual void                                        GetEditBlockText(FX_INT32 nIndex, CFX_WideString &wsBlockText) const = 0;\r
204     virtual FX_INT32                            CountEditFields(FX_INT32 nBlockIndex) const = 0;\r
205     virtual void                                        GetEditFieldText(FX_INT32 nBlockIndex, FX_INT32 nFieldIndex, CFX_WideString &wsFieldText) const = 0;\r
206     virtual void                                        StartEdit() = 0;\r
207     virtual void                                        EndEdit() = 0;\r
208     virtual void                                        AddSelRange(FX_INT32 nStart, FX_INT32 nCount = -1) = 0;\r
209     virtual FX_INT32                            CountSelRanges() = 0;\r
210     virtual FX_INT32                            GetSelRange(FX_INT32 nIndex, FX_INT32 &nStart) = 0;\r
211     virtual void                                        ClearSelection() = 0;\r
212 \r
213     virtual FX_BOOL                                     Redo(FX_BSTR bsRedo) = 0;\r
214     virtual FX_BOOL                                     Undo(FX_BSTR bsUndo) = 0;\r
215 \r
216     virtual FX_INT32                            StartLayout() = 0;\r
217     virtual FX_INT32                            DoLayout(IFX_Pause *pPause) = 0;\r
218     virtual void                                        EndLayout() = 0;\r
219 \r
220     virtual FX_BOOL                                     Optimize(IFX_Pause * pPause = NULL) = 0;\r
221     virtual FX_INT32                            CountParags() const = 0;\r
222     virtual IFDE_TxtEdtParag*           GetParag(FX_INT32 nParagIndex) const = 0;\r
223     virtual IFX_CharIter*                       CreateCharIter() = 0;\r
224 };\r
225 class IFDE_TxtEdtParag\r
226 {\r
227 public:\r
228     virtual FX_INT32                    GetTextLength() const = 0;\r
229     virtual     FX_INT32                        GetStartIndex() const = 0;\r
230     virtual FX_INT32                    CountLines() const = 0;\r
231     virtual void                                GetLineRange(FX_INT32 nLineIndex, FX_INT32& nStart, FX_INT32& nCount) const = 0;\r
232 };\r
233 #endif\r