Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fee / src / fee / fde_txtedtbuf.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_TXTEDTBUF_H\r
8 #define _FDE_TXTEDTBUF_H\r
9 class IFX_CharIter;\r
10 class CFDE_TxtEdtBufIter;\r
11 class CFDE_TxtEdtBuf;\r
12 class CFDE_TxtEdtBufIter : public IFX_CharIter, public CFX_Object\r
13 {\r
14 public:\r
15 #ifdef FDE_USEFORMATBLOCK\r
16     CFDE_TxtEdtBufIter(CFDE_TxtEdtBuf * pBuf, FX_BOOL bForDisplay = TRUE);\r
17 #else\r
18     CFDE_TxtEdtBufIter(CFDE_TxtEdtBuf * pBuf, FX_WCHAR wcAlias = 0);\r
19 #endif\r
20 \r
21     virtual void                Release();\r
22     virtual FX_BOOL             Next(FX_BOOL bPrev = FALSE);\r
23     virtual FX_WCHAR    GetChar();\r
24     virtual void                SetAt(FX_INT32 nIndex);\r
25     virtual FX_INT32    GetAt() const;\r
26     virtual FX_BOOL             IsEOF(FX_BOOL bTail = TRUE) const;\r
27     virtual IFX_CharIter * Clone();\r
28 protected:\r
29     ~CFDE_TxtEdtBufIter();\r
30 private:\r
31     CFDE_TxtEdtBuf*     m_pBuf;\r
32     FX_INT32            m_nCurChunk;\r
33     FX_INT32            m_nCurIndex;\r
34     FX_INT32            m_nIndex;\r
35     FX_BOOL                     m_bInField;\r
36 #ifdef FDE_USEFORMATBLOCK\r
37     FX_BOOL                     m_bForDisplay;\r
38     FX_INT32            m_nAliasCount;\r
39 #endif\r
40     FX_WCHAR            m_Alias;\r
41 };\r
42 class CFDE_TxtEdtBuf : public IFDE_TxtEdtBuf, public CFX_Object\r
43 {\r
44     friend class CFDE_TxtEdtBufIter;\r
45     struct _FDE_CHUNKHEADER : public CFX_Object {\r
46         FX_INT32        nUsed;\r
47         FX_WCHAR        wChars[1];\r
48     };\r
49     typedef _FDE_CHUNKHEADER    FDE_CHUNKHEADER;\r
50     typedef _FDE_CHUNKHEADER*   FDE_LPCHUNKHEADER;\r
51     struct _FDE_CHUNKPLACE : public CFX_Object {\r
52         FX_INT32        nChunkIndex;\r
53         FX_INT32        nCharIndex;\r
54     };\r
55     typedef _FDE_CHUNKPLACE             FDE_CHUNKPLACE;\r
56     typedef _FDE_CHUNKPLACE*    FDE_LPCHUNKPLACE;\r
57 \r
58 public:\r
59     CFDE_TxtEdtBuf(FX_INT32 nDefChunkSize = FDE_DEFCHUNKLENGTH);\r
60 \r
61     virtual     void            Release();\r
62     virtual FX_BOOL             SetChunkSize(FX_INT32 nChunkSize);\r
63     virtual FX_INT32    GetChunkSize() const;\r
64     virtual     FX_INT32        GetTextLength() const;\r
65     virtual void                SetText(const CFX_WideString &wsText);\r
66     virtual void                GetText(CFX_WideString &wsText) const;\r
67     virtual FX_WCHAR    GetCharByIndex(FX_INT32 nIndex) const;\r
68     virtual void                GetRange(CFX_WideString &wsText, FX_INT32 nBegine, FX_INT32 nCount = -1) const;\r
69 \r
70     virtual void                Insert(FX_INT32 nPos, FX_LPCWSTR lpText, FX_INT32 nLength = 1);\r
71     virtual void                Delete(FX_INT32 nIndex, FX_INT32 nLength = 1);\r
72     virtual void                Clear(FX_BOOL bRelease = TRUE);\r
73 \r
74     virtual FX_BOOL             Optimize(IFX_Pause * pPause = NULL);\r
75 \r
76 protected:\r
77     virtual ~CFDE_TxtEdtBuf();\r
78 private:\r
79     void                ResetChunkBuffer(FX_INT32 nDefChunkCount, FX_INT32 nChunkSize);\r
80     FX_INT32    CP2Index(const FDE_CHUNKPLACE & cp) const;\r
81     void                Index2CP(FX_INT32 nIndex, FDE_CHUNKPLACE & cp) const;\r
82 \r
83     FX_INT32                    m_nChunkSize;\r
84 \r
85     FX_INT32                    m_nTotal;\r
86     FX_BOOL                             m_bChanged;\r
87     CFX_PtrArray                m_Chunks;\r
88     IFX_MEMAllocator *  m_pAllocator;\r
89 };\r
90 #endif\r