diff options
Diffstat (limited to 'fpdfsdk/pdfwindow/PWL_EditCtrl.h')
-rw-r--r-- | fpdfsdk/pdfwindow/PWL_EditCtrl.h | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/fpdfsdk/pdfwindow/PWL_EditCtrl.h b/fpdfsdk/pdfwindow/PWL_EditCtrl.h new file mode 100644 index 0000000000..a61705648d --- /dev/null +++ b/fpdfsdk/pdfwindow/PWL_EditCtrl.h @@ -0,0 +1,181 @@ +// 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 FPDFSDK_PDFWINDOW_PWL_EDITCTRL_H_ +#define FPDFSDK_PDFWINDOW_PWL_EDITCTRL_H_ + +#include "core/fxcrt/include/fx_string.h" +#include "fpdfsdk/include/fxedit/fx_edit.h" +#include "fpdfsdk/pdfwindow/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(int32_t x1, int32_t y1, int32_t x2, int32_t y2) {} + virtual void OnContentChange(const CFX_FloatRect& 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 CPWL_EditCtrl : public CPWL_Wnd, public IFX_Edit_Notify { + friend class CPWL_Edit_Notify; + + public: + CPWL_EditCtrl(); + ~CPWL_EditCtrl() override; + + CFX_FloatRect GetContentRect() const; + void GetCaretPos(int32_t& x, int32_t& y) const; + + CFX_WideString GetText() const; + void SetSel(int32_t nStartChar, int32_t nEndChar); + void GetSel(int32_t& nStartChar, int32_t& nEndChar) const; + void GetTextRange(const CFX_FloatRect& rect, + int32_t& nStartChar, + int32_t& nEndChar) const; + CFX_WideString GetText(int32_t& nStartChar, int32_t& nEndChar) const; + void Clear(); + void SelectAll(); + + int32_t GetCaret() const; + void SetCaret(int32_t nPos); + int32_t GetTotalWords() const; + + void Paint(); + + void EnableRefresh(FX_BOOL bRefresh); + CFX_FloatPoint GetScrollPos() const; + void SetScrollPos(const CFX_FloatPoint& point); + + void SetEditNotify(IPWL_Edit_Notify* pNotify) { m_pEditNotify = pNotify; } + + void SetCharSet(uint8_t nCharSet) { m_nCharSet = nCharSet; } + int32_t GetCharSet() const; + + void SetCodePage(int32_t nCodePage) { m_nCodePage = nCodePage; } + int32_t 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(); + + // CPWL_Wnd + void OnCreate(PWL_CREATEPARAM& cp) override; + void OnCreated() override; + FX_BOOL OnKeyDown(uint16_t nChar, FX_DWORD nFlag) override; + FX_BOOL OnChar(uint16_t nChar, FX_DWORD nFlag) override; + FX_BOOL OnLButtonDown(const CFX_FloatPoint& point, FX_DWORD nFlag) override; + FX_BOOL OnLButtonUp(const CFX_FloatPoint& point, FX_DWORD nFlag) override; + FX_BOOL OnMouseMove(const CFX_FloatPoint& point, FX_DWORD nFlag) override; + void OnNotify(CPWL_Wnd* pWnd, + FX_DWORD msg, + intptr_t wParam = 0, + intptr_t lParam = 0) override; + void CreateChildWnd(const PWL_CREATEPARAM& cp) override; + void RePosChildWnd() override; + void SetFontSize(FX_FLOAT fFontSize) override; + FX_FLOAT GetFontSize() const override; + void SetCursor() override; + + protected: + // IFX_Edit_Notify + void IOnSetScrollInfoX(FX_FLOAT fPlateMin, + FX_FLOAT fPlateMax, + FX_FLOAT fContentMin, + FX_FLOAT fContentMax, + FX_FLOAT fSmallStep, + FX_FLOAT fBigStep) override {} + void IOnSetScrollInfoY(FX_FLOAT fPlateMin, + FX_FLOAT fPlateMax, + FX_FLOAT fContentMin, + FX_FLOAT fContentMax, + FX_FLOAT fSmallStep, + FX_FLOAT fBigStep) override; + void IOnSetScrollPosX(FX_FLOAT fx) override {} + void IOnSetScrollPosY(FX_FLOAT fy) override; + void IOnSetCaret(FX_BOOL bVisible, + const CFX_FloatPoint& ptHead, + const CFX_FloatPoint& ptFoot, + const CPVT_WordPlace& place) override; + void IOnCaretChange(const CPVT_SecProps& secProps, + const CPVT_WordProps& wordProps) override; + void IOnContentChange(const CFX_FloatRect& rcContent) override; + void IOnInvalidateRect(CFX_FloatRect* pRect) override; + + void InsertText(const FX_WCHAR* csText); + void SetText(const FX_WCHAR* csText); + void CopyText(); + void PasteText(); + void CutText(); + void ShowVScrollBar(FX_BOOL bShow); + void InsertWord(uint16_t word, int32_t nCharset); + void InsertReturn(); + + FX_BOOL IsWndHorV(); + + void Delete(); + void Backspace(); + + void GetCaretInfo(CFX_FloatPoint& ptHead, CFX_FloatPoint& ptFoot) const; + void SetCaret(FX_BOOL bVisible, + const CFX_FloatPoint& ptHead, + const CFX_FloatPoint& ptFoot); + + void SetEditCaret(FX_BOOL bVisible); + + 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: + int32_t m_nCharSet; + int32_t m_nCodePage; +}; + +#endif // FPDFSDK_PDFWINDOW_PWL_EDITCTRL_H_ |