Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fee / src / fee / fde_txtedtblock.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 _FDE_TXTEDTBLOCK_H\r
8 #define _FDE_TXTEDTBLOCK_H\r
9 #ifdef FDE_USEFORMATBLOCK\r
10 class CFDE_TxtEdtEngine;\r
11 class CFDE_TxtEdtBlock;\r
12 class CFDE_TxtEdtFieldFormatParser;\r
13 class CFDE_TxtEdtField;\r
14 class CFDE_TxtEdtField_Integer;\r
15 class CFDE_TxtEdtField_Float;\r
16 class CFDE_TxtEdtField_Password;\r
17 class CFDE_TxtEdtField_String;\r
18 class CFDE_TxtEdtField_Fixed;\r
19 #define FDE_FORMAT_EDIT_FIELD_HADERSIZE 3\r
20 #define FDE_FORMAT_EDIT_FIELD_TAILSIZE  1\r
21 enum FDE_FORMAT_FIELD_INSERT_RET {\r
22     FDE_FORMAT_FIELD_INSERT_RET_S_NORMAL = 0,\r
23     FDE_FORMAT_FIELD_INSERT_RET_S_FULL          ,\r
24     FDE_FORMAT_FIELD_INSERT_RET_F_FULL          ,\r
25     FDE_FORMAT_FIELD_INSERT_RET_F_INVALIDATE,\r
26 };\r
27 enum FDE_FORMAT_FIELD_DELETE_RET {\r
28     FDE_FORMAT_FIELD_DELETE_RET_S                       = 0     ,\r
29     FDE_FORMAT_FIELD_DELETE_RET_F_INVALIDATE    ,\r
30     FDE_FORMAT_FIELD_DELETE_RET_F_BOUNDARY              ,\r
31 };\r
32 enum FDE_FORMAT_FIELD_VALIDATE_RET {\r
33     FDE_FORMAT_FIELD_VALIDATE_S                 = 0     ,\r
34     FDE_FORMAT_FIELD_VALIDATE_F_FULL            ,\r
35     FDE_FORMAT_FIELD_VALIDATE_F_INVALIDATE      ,\r
36 };\r
37 enum FDE_FORMAT_CARET_DIRECTION {\r
38     FDE_FORMAT_CARET_FORWARD,\r
39     FDE_FORMAT_CARET_MIDDLE,\r
40     FDE_FORMAT_CARET_BACKWARD\r
41 };\r
42 class CFDE_TxtEdtBlock : public CFX_Object\r
43 {\r
44 public:\r
45     CFDE_TxtEdtBlock(CFDE_TxtEdtEngine * pEngine, const CFX_WideString &wsBlock, FX_INT32 nPosition);\r
46     ~CFDE_TxtEdtBlock();\r
47     void                GetDisplayText(CFX_WideString &wsDisplay);\r
48     FX_INT32    GetLength() const;\r
49     void                GetBlockText(CFX_WideString &wsBlock);\r
50     FX_INT32    CountField() const;\r
51     void                GetFieldText(FX_INT32 nIndex, CFX_WideString &wsField);\r
52     FX_INT32    GetFieldTextLength() const;\r
53 \r
54     FX_INT32    GetPos() const;\r
55     void                GetRealText(CFX_WideString &wsText) const;\r
56     void                Backup();\r
57     void                Restore();\r
58     void                SetIndex(FX_INT32 nIndex)\r
59     {\r
60         m_nIndex = nIndex;\r
61     }\r
62     FX_INT32    GetIndex() const\r
63     {\r
64         return m_nIndex;\r
65     }\r
66 private:\r
67     CFDE_TxtEdtEngine * m_pEngine;\r
68     FX_INT32 m_nDisplayLength;\r
69     FX_INT32 m_nIndex;\r
70 \r
71     FX_INT32    m_nPosition;\r
72     CFX_ArrayTemplate<CFDE_TxtEdtField*> m_FieldArr;\r
73     CFX_ArrayTemplate<CFDE_TxtEdtField*> m_EditFieldArr;\r
74 };\r
75 class CFDE_TxtEdtFieldFormatParser : public CFX_Object\r
76 {\r
77 public:\r
78     CFDE_TxtEdtFieldFormatParser();\r
79     ~CFDE_TxtEdtFieldFormatParser();\r
80     FX_BOOL             Parse(const CFX_WideString &wsFormat);\r
81     FX_INT32    CountItems() const;\r
82     void                GetItem(FX_INT32 nIndex, CFX_WideString &wsKey, CFX_WideString &wsValue) const;\r
83 private:\r
84     typedef struct : public CFX_Object {\r
85         FX_INT32 nKeyStart;\r
86         FX_INT32 nKeyCount;\r
87         FX_INT32 nValStart;\r
88         FX_INT32 nValCount;\r
89     } FDE_TXTEDTFORMATITEM, * FDE_LPTXTEDTFORMATITEM;\r
90 \r
91     CFX_WideString m_wsFormat;\r
92     CFX_ArrayTemplate<FDE_LPTXTEDTFORMATITEM> m_ItemArr;\r
93 };\r
94 class CFDE_TxtEdtField : public CFX_Object\r
95 {\r
96 public:\r
97     static CFDE_TxtEdtField * Create(const CFX_WideString &wsField, FX_INT32 nIndex, CFDE_TxtEdtBlock * pBlock);\r
98     virtual void                Release();\r
99     virtual FX_INT32    Insert( FX_INT32 nIndex, const CFX_WideString &wsIns,\r
100                                 FX_INT32 &nCaret, FX_BOOL &bBefore);\r
101     virtual FX_INT32    Delete( FX_INT32 nIndex, FX_INT32 nCount,\r
102                                 CFX_WideString &wsDel, FX_INT32 &nCaret,\r
103                                 FX_BOOL &bBefore);\r
104     virtual FX_INT32    Replace(FX_INT32 nIndex, FX_INT32 nCount,\r
105                                 const CFX_WideString &wsIns, CFX_WideString &wsDel,\r
106                                 FX_INT32 &nCaret, FX_BOOL &bBefore);\r
107     virtual void                GetDisplayText(CFX_WideString &wsDisplay);\r
108     virtual FX_INT32    GetDisplayLength();\r
109     virtual void                GetFieldText(CFX_WideString &wsField);\r
110     virtual FX_INT32    GetFieldTextLength() const;\r
111     virtual FX_INT32    GetRealIndex(FX_INT32 nIndex) const;\r
112 \r
113 \r
114     virtual FX_INT32    NormalizeCaretPos(      FX_INT32 nIndex,\r
115                                             FDE_FORMAT_CARET_DIRECTION eDirection = FDE_FORMAT_CARET_MIDDLE) const;\r
116 \r
117     virtual FX_BOOL             GetEditableRange(FX_INT32 &nBgn, FX_INT32 &nEnd) const;\r
118     virtual void                Backup();\r
119     virtual void                Restore();\r
120     virtual FX_BOOL             IsFix() const\r
121     {\r
122         return FALSE;\r
123     }\r
124     void                                SetIndex(FX_INT32 nIndex)\r
125     {\r
126         m_nIndex = nIndex;\r
127     }\r
128     FX_INT32                    GetIndex() const\r
129     {\r
130         return m_nIndex;\r
131     }\r
132     FX_INT32                    GetBlockIndex() const\r
133     {\r
134         return m_pBlock->GetIndex();\r
135     }\r
136 protected:\r
137     CFDE_TxtEdtField(FX_INT32 nIndex, CFDE_TxtEdtBlock * pBlock);\r
138     virtual                             ~CFDE_TxtEdtField() {}\r
139     virtual FX_INT32    Validate(const CFX_WideString & wsText) const;\r
140     virtual void                GetNormalizedFieldText(CFX_WideString &wsField) const;\r
141     FX_INT32            m_nLength;\r
142     CFX_WideString      m_wsField;\r
143     CFX_WideString      m_wsBackup;\r
144     FX_WCHAR            m_wcFill;\r
145     FX_BOOL                             m_bReserveSpace;\r
146     FX_BOOL                             m_bLeftAlignment;\r
147     FX_INT32                    m_nIndex;\r
148     CFDE_TxtEdtBlock *  m_pBlock;\r
149 };\r
150 class CFDE_TxtEdtField_Integer : public CFDE_TxtEdtField\r
151 {\r
152 public:\r
153     CFDE_TxtEdtField_Integer(const CFX_WideString &wsField, FX_INT32 nIndex, CFDE_TxtEdtBlock * pBlock);\r
154 protected:\r
155     virtual ~CFDE_TxtEdtField_Integer() {}\r
156     virtual FX_INT32    Validate(const CFX_WideString &wsText) const;\r
157 private:\r
158     FX_BOOL     m_bSign;\r
159 };\r
160 class CFDE_TxtEdtField_Float : public CFDE_TxtEdtField\r
161 {\r
162 public:\r
163     CFDE_TxtEdtField_Float(const CFX_WideString &wsField, FX_INT32 nIndex, CFDE_TxtEdtBlock * pBlock);\r
164 protected:\r
165     virtual ~CFDE_TxtEdtField_Float() {}\r
166     virtual FX_INT32    Validate(const CFX_WideString & wsText) const;\r
167 private:\r
168     FX_BOOL             m_bSigned;\r
169     FX_INT32    m_nIntPartlength;\r
170     FX_INT32    m_nDecPartLength;\r
171 };\r
172 class CFDE_TxtEdtField_Password : public CFDE_TxtEdtField\r
173 {\r
174 public:\r
175     CFDE_TxtEdtField_Password(const CFX_WideString &wsField, FX_INT32 nIndex, CFDE_TxtEdtBlock * pBlock);\r
176 \r
177 protected:\r
178     virtual ~CFDE_TxtEdtField_Password() {}\r
179     virtual void                GetNormalizedFieldText(CFX_WideString &wsField) const;\r
180 private:\r
181     FX_WCHAR    m_wcAlias;\r
182 };\r
183 class CFDE_TxtEdtField_String : public CFDE_TxtEdtField\r
184 {\r
185 public:\r
186     CFDE_TxtEdtField_String(const CFX_WideString &wsField, FX_INT32 nIndex, CFDE_TxtEdtBlock * pBlock);\r
187 protected:\r
188     virtual ~CFDE_TxtEdtField_String() {}\r
189 };\r
190 class CFDE_TxtEdtField_Fixed : public CFDE_TxtEdtField\r
191 {\r
192 public:\r
193     CFDE_TxtEdtField_Fixed(const CFX_WideString &wsField, FX_INT32 nIndex, CFDE_TxtEdtBlock * pBlock);\r
194     virtual FX_INT32    Insert( FX_INT32 nIndex, const CFX_WideString &wsIns,\r
195                                 FX_INT32 &nCaret, FX_BOOL &bBefore)\r
196     {\r
197         return FALSE;\r
198     }\r
199     virtual FX_INT32    Delete( FX_INT32 nIndex, FX_INT32 nCount, CFX_WideString &wsDel,\r
200                                 FX_INT32 &nCaret, FX_BOOL &bBefore)\r
201     {\r
202         return FALSE;\r
203     }\r
204     virtual FX_INT32    Replace(FX_INT32 nIndex, FX_INT32 nCount, const CFX_WideString &wsIns,\r
205                                 CFX_WideString &wsDel, FX_INT32 &nCaret, FX_BOOL &bBefore)\r
206     {\r
207         return FALSE;\r
208     }\r
209     virtual void                GetDisplayText(CFX_WideString &wsDisplay);\r
210     virtual FX_INT32    NormalizeCaretPos(      FX_INT32 nIndex,\r
211                                             FDE_FORMAT_CARET_DIRECTION eDirection ) const;\r
212     virtual FX_BOOL             GetEditableRange(FX_INT32 &nBgn, FX_INT32 &nEnd) const\r
213     {\r
214         return FALSE;\r
215     }\r
216     virtual void                Backup() {}\r
217     virtual void                Restore() {}\r
218 \r
219     virtual FX_BOOL             IsFix() const\r
220     {\r
221         return TRUE;\r
222     }\r
223 protected:\r
224     virtual ~CFDE_TxtEdtField_Fixed() {}\r
225 };\r
226 #endif\r
227 #endif\r