summaryrefslogtreecommitdiff
path: root/xfa/src/fee/src/fee/fde_txtedtblock.h
blob: 60261d0a89b2ce924c84c6ac4d7fa85ff7a2900e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef XFA_SRC_FEE_SRC_FEE_FDE_TXTEDTBLOCK_H_
#define XFA_SRC_FEE_SRC_FEE_FDE_TXTEDTBLOCK_H_

#ifdef FDE_USEFORMATBLOCK
class CFDE_TxtEdtEngine;
class CFDE_TxtEdtBlock;
class CFDE_TxtEdtFieldFormatParser;
class CFDE_TxtEdtField;
class CFDE_TxtEdtField_Integer;
class CFDE_TxtEdtField_Float;
class CFDE_TxtEdtField_Password;
class CFDE_TxtEdtField_String;
class CFDE_TxtEdtField_Fixed;
#define FDE_FORMAT_EDIT_FIELD_HADERSIZE 3
#define FDE_FORMAT_EDIT_FIELD_TAILSIZE 1
enum FDE_FORMAT_FIELD_INSERT_RET {
  FDE_FORMAT_FIELD_INSERT_RET_S_NORMAL = 0,
  FDE_FORMAT_FIELD_INSERT_RET_S_FULL,
  FDE_FORMAT_FIELD_INSERT_RET_F_FULL,
  FDE_FORMAT_FIELD_INSERT_RET_F_INVALIDATE,
};
enum FDE_FORMAT_FIELD_DELETE_RET {
  FDE_FORMAT_FIELD_DELETE_RET_S = 0,
  FDE_FORMAT_FIELD_DELETE_RET_F_INVALIDATE,
  FDE_FORMAT_FIELD_DELETE_RET_F_BOUNDARY,
};
enum FDE_FORMAT_FIELD_VALIDATE_RET {
  FDE_FORMAT_FIELD_VALIDATE_S = 0,
  FDE_FORMAT_FIELD_VALIDATE_F_FULL,
  FDE_FORMAT_FIELD_VALIDATE_F_INVALIDATE,
};
enum FDE_FORMAT_CARET_DIRECTION {
  FDE_FORMAT_CARET_FORWARD,
  FDE_FORMAT_CARET_MIDDLE,
  FDE_FORMAT_CARET_BACKWARD
};
class CFDE_TxtEdtBlock {
 public:
  CFDE_TxtEdtBlock(CFDE_TxtEdtEngine* pEngine,
                   const CFX_WideString& wsBlock,
                   int32_t nPosition);
  ~CFDE_TxtEdtBlock();
  void GetDisplayText(CFX_WideString& wsDisplay);
  int32_t GetLength() const;
  void GetBlockText(CFX_WideString& wsBlock);
  int32_t CountField() const;
  void GetFieldText(int32_t nIndex, CFX_WideString& wsField);
  int32_t GetFieldTextLength() const;

  int32_t GetPos() const;
  void GetRealText(CFX_WideString& wsText) const;
  void Backup();
  void Restore();
  void SetIndex(int32_t nIndex) { m_nIndex = nIndex; }
  int32_t GetIndex() const { return m_nIndex; }

 private:
  CFDE_TxtEdtEngine* m_pEngine;
  int32_t m_nDisplayLength;
  int32_t m_nIndex;

  int32_t m_nPosition;
  CFX_ArrayTemplate<CFDE_TxtEdtField*> m_FieldArr;
  CFX_ArrayTemplate<CFDE_TxtEdtField*> m_EditFieldArr;
};
class CFDE_TxtEdtFieldFormatParser {
 public:
  CFDE_TxtEdtFieldFormatParser();
  ~CFDE_TxtEdtFieldFormatParser();
  FX_BOOL Parse(const CFX_WideString& wsFormat);
  int32_t CountItems() const;
  void GetItem(int32_t nIndex,
               CFX_WideString& wsKey,
               CFX_WideString& wsValue) const;

 private:
  typedef struct {
    int32_t nKeyStart;
    int32_t nKeyCount;
    int32_t nValStart;
    int32_t nValCount;
  } FDE_TXTEDTFORMATITEM, *FDE_LPTXTEDTFORMATITEM;

  CFX_WideString m_wsFormat;
  CFX_ArrayTemplate<FDE_LPTXTEDTFORMATITEM> m_ItemArr;
};
class CFDE_TxtEdtField {
 public:
  static CFDE_TxtEdtField* Create(const CFX_WideString& wsField,
                                  int32_t nIndex,
                                  CFDE_TxtEdtBlock* pBlock);
  virtual void Release();
  virtual int32_t Insert(int32_t nIndex,
                         const CFX_WideString& wsIns,
                         int32_t& nCaret,
                         FX_BOOL& bBefore);
  virtual int32_t Delete(int32_t nIndex,
                         int32_t nCount,
                         CFX_WideString& wsDel,
                         int32_t& nCaret,
                         FX_BOOL& bBefore);
  virtual int32_t Replace(int32_t nIndex,
                          int32_t nCount,
                          const CFX_WideString& wsIns,
                          CFX_WideString& wsDel,
                          int32_t& nCaret,
                          FX_BOOL& bBefore);
  virtual void GetDisplayText(CFX_WideString& wsDisplay);
  virtual int32_t GetDisplayLength();
  virtual void GetFieldText(CFX_WideString& wsField);
  virtual int32_t GetFieldTextLength() const;
  virtual int32_t GetRealIndex(int32_t nIndex) const;

  virtual int32_t NormalizeCaretPos(
      int32_t nIndex,
      FDE_FORMAT_CARET_DIRECTION eDirection = FDE_FORMAT_CARET_MIDDLE) const;

  virtual FX_BOOL GetEditableRange(int32_t& nBgn, int32_t& nEnd) const;
  virtual void Backup();
  virtual void Restore();
  virtual FX_BOOL IsFix() const { return FALSE; }
  void SetIndex(int32_t nIndex) { m_nIndex = nIndex; }
  int32_t GetIndex() const { return m_nIndex; }
  int32_t GetBlockIndex() const { return m_pBlock->GetIndex(); }

 protected:
  CFDE_TxtEdtField(int32_t nIndex, CFDE_TxtEdtBlock* pBlock);
  virtual ~CFDE_TxtEdtField() {}
  virtual int32_t Validate(const CFX_WideString& wsText) const;
  virtual void GetNormalizedFieldText(CFX_WideString& wsField) const;
  int32_t m_nLength;
  CFX_WideString m_wsField;
  CFX_WideString m_wsBackup;
  FX_WCHAR m_wcFill;
  FX_BOOL m_bReserveSpace;
  FX_BOOL m_bLeftAlignment;
  int32_t m_nIndex;
  CFDE_TxtEdtBlock* m_pBlock;
};
class CFDE_TxtEdtField_Integer : public CFDE_TxtEdtField {
 public:
  CFDE_TxtEdtField_Integer(const CFX_WideString& wsField,
                           int32_t nIndex,
                           CFDE_TxtEdtBlock* pBlock);

 protected:
  virtual ~CFDE_TxtEdtField_Integer() {}
  virtual int32_t Validate(const CFX_WideString& wsText) const;

 private:
  FX_BOOL m_bSign;
};
class CFDE_TxtEdtField_Float : public CFDE_TxtEdtField {
 public:
  CFDE_TxtEdtField_Float(const CFX_WideString& wsField,
                         int32_t nIndex,
                         CFDE_TxtEdtBlock* pBlock);

 protected:
  virtual ~CFDE_TxtEdtField_Float() {}
  virtual int32_t Validate(const CFX_WideString& wsText) const;

 private:
  FX_BOOL m_bSigned;
  int32_t m_nIntPartlength;
  int32_t m_nDecPartLength;
};
class CFDE_TxtEdtField_Password : public CFDE_TxtEdtField {
 public:
  CFDE_TxtEdtField_Password(const CFX_WideString& wsField,
                            int32_t nIndex,
                            CFDE_TxtEdtBlock* pBlock);

 protected:
  virtual ~CFDE_TxtEdtField_Password() {}
  virtual void GetNormalizedFieldText(CFX_WideString& wsField) const;

 private:
  FX_WCHAR m_wcAlias;
};
class CFDE_TxtEdtField_String : public CFDE_TxtEdtField {
 public:
  CFDE_TxtEdtField_String(const CFX_WideString& wsField,
                          int32_t nIndex,
                          CFDE_TxtEdtBlock* pBlock);

 protected:
  virtual ~CFDE_TxtEdtField_String() {}
};
class CFDE_TxtEdtField_Fixed : public CFDE_TxtEdtField {
 public:
  CFDE_TxtEdtField_Fixed(const CFX_WideString& wsField,
                         int32_t nIndex,
                         CFDE_TxtEdtBlock* pBlock);
  virtual int32_t Insert(int32_t nIndex,
                         const CFX_WideString& wsIns,
                         int32_t& nCaret,
                         FX_BOOL& bBefore) {
    return FALSE;
  }
  virtual int32_t Delete(int32_t nIndex,
                         int32_t nCount,
                         CFX_WideString& wsDel,
                         int32_t& nCaret,
                         FX_BOOL& bBefore) {
    return FALSE;
  }
  virtual int32_t Replace(int32_t nIndex,
                          int32_t nCount,
                          const CFX_WideString& wsIns,
                          CFX_WideString& wsDel,
                          int32_t& nCaret,
                          FX_BOOL& bBefore) {
    return FALSE;
  }
  virtual void GetDisplayText(CFX_WideString& wsDisplay);
  virtual int32_t NormalizeCaretPos(
      int32_t nIndex,
      FDE_FORMAT_CARET_DIRECTION eDirection) const;
  virtual FX_BOOL GetEditableRange(int32_t& nBgn, int32_t& nEnd) const {
    return FALSE;
  }
  virtual void Backup() {}
  virtual void Restore() {}

  virtual FX_BOOL IsFix() const { return TRUE; }

 protected:
  virtual ~CFDE_TxtEdtField_Fixed() {}
};
#endif

#endif  // XFA_SRC_FEE_SRC_FEE_FDE_TXTEDTBLOCK_H_