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