summaryrefslogtreecommitdiff
path: root/xfa/src/fee/src/fee/fde_txtedtblock.h
blob: 2805fbd35a167448736f4d1872b48b6dec92fee7 (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
// 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 _FDE_TXTEDTBLOCK_H
#define _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