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