diff options
Diffstat (limited to 'xfa/fde/cfde_txtedtengine.h')
-rw-r--r-- | xfa/fde/cfde_txtedtengine.h | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/xfa/fde/cfde_txtedtengine.h b/xfa/fde/cfde_txtedtengine.h new file mode 100644 index 0000000000..afe55ce505 --- /dev/null +++ b/xfa/fde/cfde_txtedtengine.h @@ -0,0 +1,183 @@ +// 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_FDE_CFDE_TXTEDTENGINE_H_ +#define XFA_FDE_CFDE_TXTEDTENGINE_H_ + +#include "xfa/fde/ifde_txtedtengine.h" + +class CFDE_TxtEdtBuf; +class CFDE_TxtEdtParag; +class CFX_TxtBreak; +class IFDE_TxtEdtDoRecord; +class IFX_CharIter; + +class CFDE_TxtEdtEngine { + public: + CFDE_TxtEdtEngine(); + + void Release(); + + void SetEditParams(const FDE_TXTEDTPARAMS& params); + FDE_TXTEDTPARAMS* GetEditParams(); + + int32_t CountPages() const; + IFDE_TxtEdtPage* GetPage(int32_t nIndex); + + FX_BOOL SetBufChunkSize(int32_t nChunkSize); + void SetTextByStream(IFX_Stream* pStream); + void SetText(const CFX_WideString& wsText); + int32_t GetTextLength() const; + void GetText(CFX_WideString& wsText, int32_t nStart, int32_t nCount = -1); + void ClearText(); + + int32_t GetCaretRect(CFX_RectF& rtCaret) const; + int32_t GetCaretPos() const; + int32_t SetCaretPos(int32_t nIndex, FX_BOOL bBefore); + int32_t MoveCaretPos(FDE_TXTEDTMOVECARET eMoveCaret, + FX_BOOL bShift = FALSE, + FX_BOOL bCtrl = FALSE); + void Lock(); + void Unlock(); + FX_BOOL IsLocked() const; + + int32_t Insert(int32_t nStart, const FX_WCHAR* lpText, int32_t nLength); + int32_t Delete(int32_t nStart, FX_BOOL bBackspace = FALSE); + int32_t DeleteRange(int32_t nStart, int32_t nCount = -1); + int32_t Replace(int32_t nStart, + int32_t nLength, + const CFX_WideString& wsReplace); + + void SetLimit(int32_t nLimit); + void SetAliasChar(FX_WCHAR wcAlias); + + void RemoveSelRange(int32_t nStart, int32_t nCount = -1); + + void AddSelRange(int32_t nStart, int32_t nCount = -1); + int32_t CountSelRanges(); + int32_t GetSelRange(int32_t nIndex, int32_t& nStart); + void ClearSelection(); + + FX_BOOL Redo(const IFDE_TxtEdtDoRecord* pRecord); + FX_BOOL Undo(const IFDE_TxtEdtDoRecord* pRecord); + + int32_t StartLayout(); + int32_t DoLayout(IFX_Pause* pPause); + void EndLayout(); + + FX_BOOL Optimize(IFX_Pause* pPause = NULL); + int32_t CountParags() const; + CFDE_TxtEdtParag* GetParag(int32_t nParagIndex) const; + IFX_CharIter* CreateCharIter(); + CFDE_TxtEdtBuf* GetTextBuf() const; + int32_t GetTextBufLength() const; + CFX_TxtBreak* GetTextBreak() const; + int32_t GetLineCount() const; + int32_t GetPageLineCount() const; + + int32_t Line2Parag(int32_t nStartParag, + int32_t nStartLineofParag, + int32_t nLineIndex, + int32_t& nStartLine) const; + FX_WCHAR GetAliasChar() const { return m_wcAliasChar; } + + protected: + ~CFDE_TxtEdtEngine(); + + private: + friend class CFDE_TxtEdtDoRecord_Insert; + friend class CFDE_TxtEdtDoRecord_DeleteRange; + friend class CFDE_TxtEdtPage; + + struct FDE_TXTEDTSELRANGE { + int32_t nStart; + int32_t nCount; + }; + + struct FDE_TXTEDTPARAGPOS { + int32_t nParagIndex; + int32_t nCharIndex; + }; + + void Inner_Insert(int32_t nStart, const FX_WCHAR* lpText, int32_t nLength); + void GetPreDeleteText(CFX_WideString& wsText, + int32_t nIndex, + int32_t nLength); + void GetPreInsertText(CFX_WideString& wsText, + int32_t nIndex, + const FX_WCHAR* lpText, + int32_t nLength); + void GetPreReplaceText(CFX_WideString& wsText, + int32_t nIndex, + int32_t nOriginLength, + const FX_WCHAR* lpText, + int32_t nLength); + + void Inner_DeleteRange(int32_t nStart, int32_t nCount = -1); + void DeleteRange_DoRecord(int32_t nStart, + int32_t nCount, + FX_BOOL bSel = FALSE); + void ResetEngine(); + void RebuildParagraphs(); + void RemoveAllParags(); + void RemoveAllPages(); + void UpdateParags(); + void UpdatePages(); + void UpdateTxtBreak(); + + FX_BOOL ReplaceParagEnd(FX_WCHAR*& lpText, + int32_t& nLength, + FX_BOOL bPreIsCR = FALSE); + void RecoverParagEnd(CFX_WideString& wsText); + int32_t MovePage2Char(int32_t nIndex); + void TextPos2ParagPos(int32_t nIndex, FDE_TXTEDTPARAGPOS& ParagPos) const; + int32_t MoveForward(FX_BOOL& bBefore); + int32_t MoveBackward(FX_BOOL& bBefore); + FX_BOOL MoveUp(CFX_PointF& ptCaret); + FX_BOOL MoveDown(CFX_PointF& ptCaret); + FX_BOOL MoveLineStart(); + FX_BOOL MoveLineEnd(); + FX_BOOL MoveParagStart(); + FX_BOOL MoveParagEnd(); + FX_BOOL MoveHome(); + FX_BOOL MoveEnd(); + FX_BOOL IsFitArea(CFX_WideString& wsText); + void UpdateCaretRect(int32_t nIndex, FX_BOOL bBefore = TRUE); + void GetCaretRect(CFX_RectF& rtCaret, + int32_t nPageIndex, + int32_t nCaret, + FX_BOOL bBefore = TRUE); + void UpdateCaretIndex(const CFX_PointF& ptCaret); + + FX_BOOL IsSelect(); + void DeleteSelect(); + + CFDE_TxtEdtBuf* m_pTxtBuf; + CFX_TxtBreak* m_pTextBreak; + FDE_TXTEDTPARAMS m_Param; + CFX_ArrayTemplate<IFDE_TxtEdtPage*> m_PagePtrArray; + CFX_ArrayTemplate<CFDE_TxtEdtParag*> m_ParagPtrArray; + CFX_ArrayTemplate<FDE_TXTEDTSELRANGE*> m_SelRangePtrArr; + int32_t m_nPageLineCount; + int32_t m_nLineCount; + int32_t m_nAnchorPos; + int32_t m_nLayoutPos; + FX_FLOAT m_fCaretPosReserve; + int32_t m_nCaret; + FX_BOOL m_bBefore; + int32_t m_nCaretPage; + CFX_RectF m_rtCaret; + uint32_t m_dwFindFlags; + FX_BOOL m_bLock; + int32_t m_nLimit; + FX_WCHAR m_wcAliasChar; + int32_t m_nFirstLineEnd; + FX_BOOL m_bAutoLineEnd; + FX_WCHAR m_wLineEnd; + FDE_TXTEDT_TEXTCHANGE_INFO m_ChangeInfo; +}; + +#endif // XFA_FDE_CFDE_TXTEDTENGINE_H_ |