1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file. 4e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#ifndef FPDFSDK_INCLUDE_PDFWINDOW_PWL_EDIT_H_ 8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define FPDFSDK_INCLUDE_PDFWINDOW_PWL_EDIT_H_ 9e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 10e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../../core/include/fxcrt/fx_basic.h" 11e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "PWL_EditCtrl.h" 12e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "PWL_Wnd.h" 13e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 14e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPWL_Edit; 15e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass IPWL_Filler_Notify; 16e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass IPWL_SpellCheck; 17e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 18e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass IPWL_Filler_Notify 19e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 20e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic: 21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual ~IPWL_Filler_Notify() { } 22e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void QueryWherePopup(void* pPrivateData, FX_FLOAT fPopupMin,FX_FLOAT fPopupMax, 23e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_INT32 & nRet, FX_FLOAT & fPopupRet) = 0; //nRet: (0:bottom 1:top) 24e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void OnBeforeKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, FX_INT32 nKeyCode, 25e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFX_WideString & strChange, const CFX_WideString& strChangeEx, 26e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov int nSelStart, int nSelEnd, 27e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL bKeyDown, FX_BOOL & bRC, FX_BOOL & bExit, FX_DWORD nFlag) = 0; 28e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void OnAfterKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, FX_BOOL & bExit, FX_DWORD nFlag) = 0; 29e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 30e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 31e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass PWL_CLASS CPWL_Edit : public CPWL_EditCtrl, public IFX_Edit_OprNotify 32e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 33e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic: 34e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPWL_Edit(); 35e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual ~CPWL_Edit(); 36e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 37e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic: 38e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CFX_ByteString GetClassName() const; 39e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void OnDestroy(); 40e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void OnCreated(); 41e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void RePosChildWnd(); 42e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPDF_Rect GetClientRect() const; 43e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 44e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream); 45e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device); 46e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 47e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag); 48e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL OnLButtonDblClk(const CPDF_Point & point, FX_DWORD nFlag); 49e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag); 50e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag); 51e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 52e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag); 53e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); 54e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 55e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual CPDF_Rect GetFocusRect() const; 56e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 57e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic: 58e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void SetAlignFormatH(PWL_EDIT_ALIGNFORMAT_H nFormat = PEAH_LEFT, FX_BOOL bPaint = TRUE); //0:left 1:right 2:middle 59e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void SetAlignFormatV(PWL_EDIT_ALIGNFORMAT_V nFormat = PEAV_TOP, FX_BOOL bPaint = TRUE); //0:top 1:bottom 2:center 60e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 61e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void SetCharArray(FX_INT32 nCharArray); 62e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void SetLimitChar(FX_INT32 nLimitChar); 63e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 64e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void SetHorzScale(FX_INT32 nHorzScale, FX_BOOL bPaint = TRUE); 65e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void SetCharSpace(FX_FLOAT fCharSpace, FX_BOOL bPaint = TRUE); 66e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 67e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE); 68e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 69e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void EnableSpellCheck(FX_BOOL bEnabled); 70e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 71e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL CanSelectAll() const; 72e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL CanClear() const; 73e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL CanCopy() const; 74e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL CanCut() const; 75e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL CanPaste() const; 76e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 77e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void CopyText(); 78e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void PasteText(); 79e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void CutText(); 80e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 81e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void SetText(FX_LPCWSTR csText); 82e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void ReplaceSel(FX_LPCWSTR csText); 83e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 84e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFX_ByteString GetTextAppearanceStream(const CPDF_Point & ptOffset) const; 85e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFX_ByteString GetCaretAppearanceStream(const CPDF_Point & ptOffset) const; 86e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CFX_ByteString GetSelectAppearanceStream(const CPDF_Point & ptOffset) const; 87e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 88e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL IsTextFull() const; 89e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 90e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov static FX_FLOAT GetCharArrayAutoFontSize(CPDF_Font* pFont, const CPDF_Rect& rcPlate, FX_INT32 nCharArray); 91e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 92e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void SetFillerNotify(IPWL_Filler_Notify* pNotify) {m_pFillerNotify = pNotify;} 93e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 94e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void GeneratePageObjects(CPDF_PageObjects* pPageObjects, 95e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov const CPDF_Point& ptOffset, CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray); 96e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void GeneratePageObjects(CPDF_PageObjects* pPageObjects, 97e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov const CPDF_Point& ptOffset); 98e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 99e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprotected: 100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void OnSetFocus(); 101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void OnKillFocus(); 102e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprotected: 104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void OnInsertWord(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace); 105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void OnInsertReturn(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace); 106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void OnBackSpace(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace); 107e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void OnDelete(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace); 108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void OnClear(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace); 109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void OnSetText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace); 110e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void OnInsertText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace); 111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void OnAddUndo(IFX_Edit_UndoItem* pUndoItem); 112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprivate: 114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordRange GetSelectWordRange() const; 115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov virtual void ShowVScrollBar(FX_BOOL bShow); 116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL IsVScrollBarVisible() const; 117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void SetParamByFlag(); 118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT GetCharArrayAutoFontSize(FX_INT32 nCharArray); 120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Point GetWordRightBottomPoint(const CPVT_WordPlace& wpWord); 121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 122e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordRange CombineWordRange(const CPVT_WordRange& wr1, const CPVT_WordRange& wr2); 123e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordRange GetLatinWordsRange(const CPDF_Point & point) const; 124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordRange GetLatinWordsRange(const CPVT_WordPlace & place) const; 125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordRange GetArabicWordsRange(const CPVT_WordPlace & place) const; 126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordRange GetSameWordsRange(const CPVT_WordPlace & place, FX_BOOL bLatin, FX_BOOL bArabic) const; 127e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void AjustArabicWords(const CPVT_WordRange& wr); 129e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic: 130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL IsProceedtoOnChar(FX_WORD nKeyCode, FX_DWORD nFlag); 131e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprivate: 132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov IPWL_Filler_Notify* m_pFillerNotify; 133e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov IPWL_SpellCheck* m_pSpellCheck; 134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL m_bFocus; 135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Rect m_rcOldWindow; 136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic: 137e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void AttachFFLData(void* pData) {m_pFormFiller = pData;} 138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprivate: 139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov void* m_pFormFiller; 140e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_EDIT_H_ 143