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_EDITCTRL_H_ 8 #define FPDFSDK_INCLUDE_PDFWINDOW_PWL_EDITCTRL_H_ 9 10 #include "../../../core/include/fxcrt/fx_string.h" 11 #include "../fxedit/fx_edit.h" 12 #include "PWL_Wnd.h" 13 14 class CPWL_Caret; 15 class CPWL_Edit; 16 class CPWL_EditCtrl; 17 class IFX_Edit; 18 class IPWL_Edit_Notify; 19 struct CPVT_WordPlace; 20 21 enum PWL_EDIT_ALIGNFORMAT_H 22 { 23 PEAH_LEFT = 0, 24 PEAH_MIDDLE, 25 PEAH_RIGHT 26 }; 27 28 enum PWL_EDIT_ALIGNFORMAT_V 29 { 30 PEAV_TOP = 0, 31 PEAV_CENTER, 32 PEAV_BOTTOM 33 }; 34 35 class IPWL_Edit_Notify 36 { 37 public: ~IPWL_Edit_Notify()38 virtual ~IPWL_Edit_Notify() { } 39 //when the position of caret is changed in edit OnCaretMove(FX_INT32 x1,FX_INT32 y1,FX_INT32 x2,FX_INT32 y2)40 virtual void OnCaretMove(FX_INT32 x1, FX_INT32 y1, FX_INT32 x2, FX_INT32 y2) {} OnContentChange(const CPDF_Rect & rcContent)41 virtual void OnContentChange(const CPDF_Rect& rcContent){} 42 //OprType: 0 InsertWord 43 //1 InsertReturn 44 //2 BackSpace 45 //3 Delete 46 //4 Clear 47 //5 InsertText 48 //6 SetText OnInsertWord(const CPVT_WordPlace & place,const CPVT_WordPlace & oldplace)49 virtual void OnInsertWord(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} OnInsertReturn(const CPVT_WordPlace & place,const CPVT_WordPlace & oldplace)50 virtual void OnInsertReturn(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} OnBackSpace(const CPVT_WordPlace & place,const CPVT_WordPlace & oldplace)51 virtual void OnBackSpace(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} OnDelete(const CPVT_WordPlace & place,const CPVT_WordPlace & oldplace)52 virtual void OnDelete(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} OnClear(const CPVT_WordPlace & place,const CPVT_WordPlace & oldplace)53 virtual void OnClear(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} OnInsertText(const CPVT_WordPlace & place,const CPVT_WordPlace & oldplace)54 virtual void OnInsertText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} OnSetText(const CPVT_WordPlace & place,const CPVT_WordPlace & oldplace)55 virtual void OnSetText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} OnAddUndo(CPWL_Edit * pEdit)56 virtual void OnAddUndo(CPWL_Edit* pEdit) {} 57 }; 58 59 class PWL_CLASS CPWL_EditCtrl : public CPWL_Wnd, public IFX_Edit_Notify 60 { 61 friend class CPWL_Edit_Notify; 62 63 public: 64 CPWL_EditCtrl(); 65 virtual ~CPWL_EditCtrl(); 66 67 public: 68 virtual void OnCreate(PWL_CREATEPARAM & cp); 69 virtual void OnCreated(); 70 71 virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag); 72 virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); 73 virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag); 74 virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag); 75 virtual FX_BOOL OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag); 76 virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam = 0, FX_INTPTR lParam = 0); 77 78 virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); 79 virtual void RePosChildWnd(); 80 virtual void SetFontSize(FX_FLOAT fFontSize); 81 virtual FX_FLOAT GetFontSize() const; 82 83 public: 84 virtual void SetText(FX_LPCWSTR csText); 85 86 virtual void CopyText(); 87 virtual void PasteText(); 88 virtual void CutText(); 89 90 CPDF_Rect GetContentRect() const; 91 void GetCaretPos(FX_INT32& x, FX_INT32& y) const; 92 FX_BOOL IsModified() const; 93 94 CFX_WideString GetText() const; 95 void SetSel(FX_INT32 nStartChar,FX_INT32 nEndChar); 96 void GetSel(FX_INT32 & nStartChar, FX_INT32 & nEndChar ) const; 97 void GetTextRange(const CPDF_Rect& rect, FX_INT32 & nStartChar, FX_INT32 & nEndChar) const; 98 CFX_WideString GetText(FX_INT32 & nStartChar, FX_INT32 & nEndChar) const; 99 void Clear(); 100 void SelectAll(); 101 102 FX_INT32 GetCaret() const; 103 void SetCaret(FX_INT32 nPos); 104 FX_INT32 GetTotalWords() const; 105 106 void Paint(); 107 108 void EnableRefresh(FX_BOOL bRefresh); 109 CPDF_Point GetScrollPos() const; 110 void SetScrollPos(const CPDF_Point& point); 111 SetEditNotify(IPWL_Edit_Notify * pNotify)112 void SetEditNotify(IPWL_Edit_Notify* pNotify) {m_pEditNotify = pNotify;} 113 SetCharSet(FX_BYTE nCharSet)114 void SetCharSet(FX_BYTE nCharSet){m_nCharSet = nCharSet;} 115 FX_INT32 GetCharSet() const; 116 SetCodePage(FX_INT32 nCodePage)117 void SetCodePage(FX_INT32 nCodePage){m_nCodePage = nCodePage;} GetCodePage()118 FX_INT32 GetCodePage() const {return m_nCodePage;} 119 120 CPDF_Font * GetCaretFont() const; 121 FX_FLOAT GetCaretFontSize() const; 122 123 FX_BOOL CanUndo() const; 124 FX_BOOL CanRedo() const; 125 void Redo(); 126 void Undo(); 127 128 void SetReadyToInput(); 129 protected: 130 virtual void ShowVScrollBar(FX_BOOL bShow); 131 132 virtual void InsertWord(FX_WORD word, FX_INT32 nCharset); 133 virtual void InsertReturn(); 134 virtual void InsertText(FX_LPCWSTR csText); 135 136 virtual void SetCursor(); 137 FX_BOOL IsWndHorV(); 138 139 void Delete(); 140 void Backspace(); 141 142 protected: 143 void GetCaretInfo(CPDF_Point & ptHead, CPDF_Point & ptFoot) const; 144 void SetCaret(FX_BOOL bVisible, const CPDF_Point & ptHead, const CPDF_Point & ptFoot); 145 146 void SetEditCaret(FX_BOOL bVisible); 147 148 protected: IOnSetScrollInfoX(FX_FLOAT fPlateMin,FX_FLOAT fPlateMax,FX_FLOAT fContentMin,FX_FLOAT fContentMax,FX_FLOAT fSmallStep,FX_FLOAT fBigStep)149 virtual void IOnSetScrollInfoX(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, 150 FX_FLOAT fContentMin, FX_FLOAT fContentMax, 151 FX_FLOAT fSmallStep, FX_FLOAT fBigStep){} 152 virtual void IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, 153 FX_FLOAT fContentMin, FX_FLOAT fContentMax, 154 FX_FLOAT fSmallStep, FX_FLOAT fBigStep); IOnSetScrollPosX(FX_FLOAT fx)155 virtual void IOnSetScrollPosX(FX_FLOAT fx){} 156 virtual void IOnSetScrollPosY(FX_FLOAT fy); 157 virtual void IOnSetCaret(FX_BOOL bVisible,const CPDF_Point & ptHead,const CPDF_Point & ptFoot, const CPVT_WordPlace& place); 158 virtual void IOnCaretChange(const CPVT_SecProps & secProps, const CPVT_WordProps & wordProps); 159 virtual void IOnContentChange(const CPDF_Rect& rcContent); 160 virtual void IOnInvalidateRect(CPDF_Rect * pRect); 161 162 private: 163 void CreateEditCaret(const PWL_CREATEPARAM & cp); 164 165 protected: 166 IFX_Edit* m_pEdit; 167 CPWL_Caret* m_pEditCaret; 168 FX_BOOL m_bMouseDown; 169 IPWL_Edit_Notify* m_pEditNotify; 170 171 private: 172 FX_INT32 m_nCharSet; 173 FX_INT32 m_nCodePage; 174 }; 175 176 #endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_EDITCTRL_H_ 177