Merge to XFA: Use stdint.h types throughout PDFium.
[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\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(int32_t nIndex);\r
25     virtual int32_t     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     int32_t             m_nCurChunk;\r
33     int32_t             m_nCurIndex;\r
34     int32_t             m_nIndex;\r
35     FX_BOOL                     m_bInField;\r
36 #ifdef FDE_USEFORMATBLOCK\r
37     FX_BOOL                     m_bForDisplay;\r
38     int32_t             m_nAliasCount;\r
39 #endif\r
40     FX_WCHAR            m_Alias;\r
41 };\r
42 class CFDE_TxtEdtBuf : public IFDE_TxtEdtBuf\r
43 {\r
44     friend class CFDE_TxtEdtBufIter;\r
45     struct _FDE_CHUNKHEADER {\r
46         int32_t 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 {\r
52         int32_t nChunkIndex;\r
53         int32_t 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(int32_t nDefChunkSize = FDE_DEFCHUNKLENGTH);\r
60 \r
61     virtual     void            Release();\r
62     virtual FX_BOOL             SetChunkSize(int32_t nChunkSize);\r
63     virtual int32_t     GetChunkSize() const;\r
64     virtual     int32_t 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(int32_t nIndex) const;\r
68     virtual void                GetRange(CFX_WideString &wsText, int32_t nBegine, int32_t nCount = -1) const;\r
69 \r
70     virtual void                Insert(int32_t nPos, FX_LPCWSTR lpText, int32_t nLength = 1);\r
71     virtual void                Delete(int32_t nIndex, int32_t 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(int32_t nDefChunkCount, int32_t nChunkSize);\r
80     int32_t     CP2Index(const FDE_CHUNKPLACE & cp) const;\r
81     void                Index2CP(int32_t nIndex, FDE_CHUNKPLACE & cp) const;\r
82 \r
83     int32_t                     m_nChunkSize;\r
84 \r
85     int32_t                     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