// 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_IFDE_TXTEDTBUF_H_
#define XFA_SRC_FEE_IFDE_TXTEDTBUF_H_

#include "core/include/fxcrt/fx_basic.h"

#define FDE_DEFCHUNKLENGTH (1024)

class IFDE_TxtEdtBuf {
 public:
  virtual ~IFDE_TxtEdtBuf() {}
  virtual void Release() = 0;

  virtual FX_BOOL SetChunkSize(int32_t nChunkSize) = 0;
  virtual int32_t GetChunkSize() const = 0;
  virtual int32_t GetTextLength() const = 0;
  virtual void SetText(const CFX_WideString& wsText) = 0;
  virtual void GetText(CFX_WideString& wsText) const = 0;
  virtual FX_WCHAR GetCharByIndex(int32_t nIndex) const = 0;
  virtual void GetRange(CFX_WideString& wsText,
                        int32_t nBegin,
                        int32_t nCount = -1) const = 0;

  virtual void Insert(int32_t nPos,
                      const FX_WCHAR* lpText,
                      int32_t nLength = 1) = 0;
  virtual void Delete(int32_t nIndex, int32_t nLength = 1) = 0;

  virtual void Clear(FX_BOOL bRelease = TRUE) = 0;

  virtual FX_BOOL Optimize(IFX_Pause* pPause = NULL) = 0;
};

#endif  // XFA_SRC_FEE_IFDE_TXTEDTBUF_H_
