| // Copyright 2014 PDFium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| |
| #ifndef _PWL_EDITCTRL_H_ |
| #define _PWL_EDITCTRL_H_ |
| |
| #include "../../../core/include/fxcrt/fx_string.h" |
| #include "../fxedit/fx_edit.h" |
| #include "PWL_Wnd.h" |
| |
| class CPWL_Caret; |
| class CPWL_Edit; |
| class CPWL_EditCtrl; |
| class IFX_Edit; |
| class IPWL_Edit_Notify; |
| struct CPVT_WordPlace; |
| |
| enum PWL_EDIT_ALIGNFORMAT_H |
| { |
| PEAH_LEFT = 0, |
| PEAH_MIDDLE, |
| PEAH_RIGHT |
| }; |
| |
| enum PWL_EDIT_ALIGNFORMAT_V |
| { |
| PEAV_TOP = 0, |
| PEAV_CENTER, |
| PEAV_BOTTOM |
| }; |
| |
| class IPWL_Edit_Notify |
| { |
| public: |
| virtual ~IPWL_Edit_Notify() { } |
| //when the position of caret is changed in edit |
| virtual void OnCaretMove(FX_INT32 x1, FX_INT32 y1, FX_INT32 x2, FX_INT32 y2) {} |
| virtual void OnContentChange(const CPDF_Rect& rcContent){} |
| //OprType: 0 InsertWord |
| //1 InsertReturn |
| //2 BackSpace |
| //3 Delete |
| //4 Clear |
| //5 InsertText |
| //6 SetText |
| virtual void OnInsertWord(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} |
| virtual void OnInsertReturn(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} |
| virtual void OnBackSpace(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} |
| virtual void OnDelete(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} |
| virtual void OnClear(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} |
| virtual void OnInsertText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} |
| virtual void OnSetText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){} |
| virtual void OnAddUndo(CPWL_Edit* pEdit) {} |
| }; |
| |
| class PWL_CLASS CPWL_EditCtrl : public CPWL_Wnd, public IFX_Edit_Notify |
| { |
| friend class CPWL_Edit_Notify; |
| |
| public: |
| CPWL_EditCtrl(); |
| virtual ~CPWL_EditCtrl(); |
| |
| public: |
| virtual void OnCreate(PWL_CREATEPARAM & cp); |
| virtual void OnCreated(); |
| |
| virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag); |
| virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag); |
| virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag); |
| virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag); |
| virtual FX_BOOL OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag); |
| virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam = 0, FX_INTPTR lParam = 0); |
| |
| virtual void CreateChildWnd(const PWL_CREATEPARAM & cp); |
| virtual void RePosChildWnd(); |
| virtual void SetFontSize(FX_FLOAT fFontSize); |
| virtual FX_FLOAT GetFontSize() const; |
| |
| public: |
| virtual void SetText(FX_LPCWSTR csText); |
| |
| virtual void CopyText(); |
| virtual void PasteText(); |
| virtual void CutText(); |
| |
| CPDF_Rect GetContentRect() const; |
| void GetCaretPos(FX_INT32& x, FX_INT32& y) const; |
| FX_BOOL IsModified() const; |
| |
| CFX_WideString GetText() const; |
| void SetSel(FX_INT32 nStartChar,FX_INT32 nEndChar); |
| void GetSel(FX_INT32 & nStartChar, FX_INT32 & nEndChar ) const; |
| void GetTextRange(const CPDF_Rect& rect, FX_INT32 & nStartChar, FX_INT32 & nEndChar) const; |
| CFX_WideString GetText(FX_INT32 & nStartChar, FX_INT32 & nEndChar) const; |
| void Clear(); |
| void SelectAll(); |
| |
| FX_INT32 GetCaret() const; |
| void SetCaret(FX_INT32 nPos); |
| FX_INT32 GetTotalWords() const; |
| |
| void Paint(); |
| |
| void EnableRefresh(FX_BOOL bRefresh); |
| CPDF_Point GetScrollPos() const; |
| void SetScrollPos(const CPDF_Point& point); |
| |
| void SetEditNotify(IPWL_Edit_Notify* pNotify) {m_pEditNotify = pNotify;} |
| |
| void SetCharSet(FX_BYTE nCharSet){m_nCharSet = nCharSet;} |
| FX_INT32 GetCharSet() const; |
| |
| void SetCodePage(FX_INT32 nCodePage){m_nCodePage = nCodePage;} |
| FX_INT32 GetCodePage() const {return m_nCodePage;} |
| |
| CPDF_Font * GetCaretFont() const; |
| FX_FLOAT GetCaretFontSize() const; |
| |
| FX_BOOL CanUndo() const; |
| FX_BOOL CanRedo() const; |
| void Redo(); |
| void Undo(); |
| |
| void SetReadyToInput(); |
| protected: |
| virtual void ShowVScrollBar(FX_BOOL bShow); |
| |
| virtual void InsertWord(FX_WORD word, FX_INT32 nCharset); |
| virtual void InsertReturn(); |
| virtual void InsertText(FX_LPCWSTR csText); |
| |
| virtual void SetCursor(); |
| FX_BOOL IsWndHorV(); |
| |
| void Delete(); |
| void Backspace(); |
| |
| protected: |
| void GetCaretInfo(CPDF_Point & ptHead, CPDF_Point & ptFoot) const; |
| void SetCaret(FX_BOOL bVisible, const CPDF_Point & ptHead, const CPDF_Point & ptFoot); |
| |
| void SetEditCaret(FX_BOOL bVisible); |
| |
| protected: |
| virtual void IOnSetScrollInfoX(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, |
| FX_FLOAT fContentMin, FX_FLOAT fContentMax, |
| FX_FLOAT fSmallStep, FX_FLOAT fBigStep){} |
| virtual void IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, |
| FX_FLOAT fContentMin, FX_FLOAT fContentMax, |
| FX_FLOAT fSmallStep, FX_FLOAT fBigStep); |
| virtual void IOnSetScrollPosX(FX_FLOAT fx){} |
| virtual void IOnSetScrollPosY(FX_FLOAT fy); |
| virtual void IOnSetCaret(FX_BOOL bVisible,const CPDF_Point & ptHead,const CPDF_Point & ptFoot, const CPVT_WordPlace& place); |
| virtual void IOnCaretChange(const CPVT_SecProps & secProps, const CPVT_WordProps & wordProps); |
| virtual void IOnContentChange(const CPDF_Rect& rcContent); |
| virtual void IOnInvalidateRect(CPDF_Rect * pRect); |
| |
| private: |
| void CreateEditCaret(const PWL_CREATEPARAM & cp); |
| |
| protected: |
| IFX_Edit* m_pEdit; |
| CPWL_Caret* m_pEditCaret; |
| FX_BOOL m_bMouseDown; |
| IPWL_Edit_Notify* m_pEditNotify; |
| |
| private: |
| FX_INT32 m_nCharSet; |
| FX_INT32 m_nCodePage; |
| }; |
| |
| #endif |
| |