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