|  | // Copyright 2014 The PDFium Authors | 
|  | // 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_PWL_CPWL_EDIT_H_ | 
|  | #define FPDFSDK_PWL_CPWL_EDIT_H_ | 
|  |  | 
|  | #include <memory> | 
|  | #include <utility> | 
|  |  | 
|  | #include "core/fpdfdoc/cpvt_wordrange.h" | 
|  | #include "core/fxcrt/fx_codepage.h" | 
|  | #include "core/fxcrt/unowned_ptr.h" | 
|  | #include "core/fxcrt/widestring.h" | 
|  | #include "fpdfsdk/pwl/cpwl_wnd.h" | 
|  | #include "fpdfsdk/pwl/ipwl_fillernotify.h" | 
|  |  | 
|  | class CPDF_Font; | 
|  | class CPWL_Caret; | 
|  | class CPWL_EditImpl; | 
|  | class IPWL_FillerNotify; | 
|  |  | 
|  | 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 CPWL_Edit final : public CPWL_Wnd { | 
|  | public: | 
|  | CPWL_Edit(const CreateParams& cp, | 
|  | std::unique_ptr<IPWL_FillerNotify::PerWindowData> pAttachedData); | 
|  | ~CPWL_Edit() override; | 
|  |  | 
|  | // CPWL_Wnd: | 
|  | bool RepositionChildWnd() override; | 
|  | CFX_FloatRect GetClientRect() const override; | 
|  | void DrawThisAppearance(CFX_RenderDevice* pDevice, | 
|  | const CFX_Matrix& mtUser2Device) override; | 
|  | bool OnMouseWheel(Mask<FWL_EVENTFLAG> nFlag, | 
|  | const CFX_PointF& point, | 
|  | const CFX_Vector& delta) override; | 
|  | bool OnKeyDown(FWL_VKEYCODE nKeyCode, Mask<FWL_EVENTFLAG> nFlag) override; | 
|  | bool OnChar(uint16_t nChar, Mask<FWL_EVENTFLAG> nFlag) override; | 
|  | CFX_FloatRect GetFocusRect() const override; | 
|  | void OnSetFocus() override; | 
|  | void OnKillFocus() override; | 
|  | void OnCreated() override; | 
|  | void OnDestroy() override; | 
|  | bool OnLButtonDown(Mask<FWL_EVENTFLAG> nFlag, | 
|  | const CFX_PointF& point) override; | 
|  | bool OnLButtonUp(Mask<FWL_EVENTFLAG> nFlag, const CFX_PointF& point) override; | 
|  | bool OnLButtonDblClk(Mask<FWL_EVENTFLAG> nFlag, | 
|  | const CFX_PointF& point) override; | 
|  | bool OnRButtonUp(Mask<FWL_EVENTFLAG> nFlag, const CFX_PointF& point) override; | 
|  | bool OnMouseMove(Mask<FWL_EVENTFLAG> nFlag, const CFX_PointF& point) override; | 
|  | void SetScrollInfo(const PWL_SCROLL_INFO& info) override; | 
|  | void SetScrollPosition(float pos) override; | 
|  | void ScrollWindowVertically(float pos) override; | 
|  | void CreateChildWnd(const CreateParams& cp) override; | 
|  | void SetFontSize(float fFontSize) override; | 
|  | float GetFontSize() const override; | 
|  | void SetCursor() override; | 
|  | WideString GetText() override; | 
|  | WideString GetSelectedText() override; | 
|  | void ReplaceAndKeepSelection(const WideString& text) override; | 
|  | void ReplaceSelection(const WideString& text) override; | 
|  | bool SelectAllText() override; | 
|  | bool CanUndo() override; | 
|  | bool CanRedo() override; | 
|  | bool Undo() override; | 
|  | bool Redo() override; | 
|  |  | 
|  | void SetSelection(int32_t nStartChar, int32_t nEndChar); | 
|  | std::pair<int32_t, int32_t> GetSelection() const; | 
|  | void ClearSelection(); | 
|  |  | 
|  | CFX_PointF GetScrollPos() const; | 
|  | void SetScrollPos(const CFX_PointF& point); | 
|  |  | 
|  | void SetCharSet(FX_Charset nCharSet) { m_nCharSet = nCharSet; } | 
|  | FX_Charset GetCharSet() const { return m_nCharSet; } | 
|  |  | 
|  | void SetReadyToInput(); | 
|  | void SetAlignFormatVerticalCenter(); | 
|  | void SetCharArray(int32_t nCharArray); | 
|  | void SetLimitChar(int32_t nLimitChar); | 
|  | bool CanSelectAll() const; | 
|  | bool CanCopy() const; | 
|  | bool CanCut() const; | 
|  | void CutText(); | 
|  | void SetText(const WideString& csText); | 
|  | bool IsTextFull() const; | 
|  |  | 
|  | static float GetCharArrayAutoFontSize(const CPDF_Font* pFont, | 
|  | const CFX_FloatRect& rcPlate, | 
|  | int32_t nCharArray); | 
|  |  | 
|  | bool SetCaret(bool bVisible, | 
|  | const CFX_PointF& ptHead, | 
|  | const CFX_PointF& ptFoot); | 
|  |  | 
|  | private: | 
|  | // In case of implementation swallow the OnKeyDown event. If the event is | 
|  | // swallowed, implementation may do other unexpected things, which is not the | 
|  | // control means to do. | 
|  | static bool IsProceedtoOnChar(FWL_VKEYCODE nKeyCode, | 
|  | Mask<FWL_EVENTFLAG> nFlag); | 
|  |  | 
|  | bool OnKeyDownInternal(FWL_VKEYCODE nKeyCode, Mask<FWL_EVENTFLAG> nFlag); | 
|  | bool OnCharInternal(uint16_t nChar, Mask<FWL_EVENTFLAG> nFlag); | 
|  |  | 
|  | void CopyText(); | 
|  | void PasteText(); | 
|  | void InsertWord(uint16_t word, FX_Charset nCharset); | 
|  | void InsertReturn(); | 
|  | bool IsWndHorV() const; | 
|  | void Delete(); | 
|  | void Backspace(); | 
|  | void GetCaretInfo(CFX_PointF* ptHead, CFX_PointF* ptFoot) const; | 
|  | void SetEditCaret(bool bVisible); | 
|  |  | 
|  | void CreateEditCaret(const CreateParams& cp); | 
|  |  | 
|  | CPVT_WordRange GetSelectWordRange() const; | 
|  | bool IsVScrollBarVisible() const; | 
|  | void SetParamByFlag(); | 
|  |  | 
|  | bool m_bMouseDown = false; | 
|  | bool m_bFocus = false; | 
|  | FX_Charset m_nCharSet = FX_Charset::kDefault; | 
|  | CFX_FloatRect m_rcOldWindow; | 
|  | std::unique_ptr<CPWL_EditImpl> const m_pEditImpl; | 
|  | UnownedPtr<CPWL_Caret> m_pCaret; | 
|  | }; | 
|  |  | 
|  | #endif  // FPDFSDK_PWL_CPWL_EDIT_H_ |