1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2014 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6*3ac0a46fSAndroid Build Coastguard Worker 7*3ac0a46fSAndroid Build Coastguard Worker #ifndef FPDFSDK_PWL_CPWL_EDIT_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define FPDFSDK_PWL_CPWL_EDIT_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include <memory> 11*3ac0a46fSAndroid Build Coastguard Worker #include <utility> 12*3ac0a46fSAndroid Build Coastguard Worker 13*3ac0a46fSAndroid Build Coastguard Worker #include "core/fpdfdoc/cpvt_wordrange.h" 14*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/fx_codepage.h" 15*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/unowned_ptr.h" 16*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/widestring.h" 17*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/pwl/cpwl_wnd.h" 18*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/pwl/ipwl_fillernotify.h" 19*3ac0a46fSAndroid Build Coastguard Worker 20*3ac0a46fSAndroid Build Coastguard Worker class CPDF_Font; 21*3ac0a46fSAndroid Build Coastguard Worker class CPWL_Caret; 22*3ac0a46fSAndroid Build Coastguard Worker class CPWL_EditImpl; 23*3ac0a46fSAndroid Build Coastguard Worker class IPWL_FillerNotify; 24*3ac0a46fSAndroid Build Coastguard Worker 25*3ac0a46fSAndroid Build Coastguard Worker enum PWL_EDIT_ALIGNFORMAT_H { PEAH_LEFT = 0, PEAH_MIDDLE, PEAH_RIGHT }; 26*3ac0a46fSAndroid Build Coastguard Worker 27*3ac0a46fSAndroid Build Coastguard Worker enum PWL_EDIT_ALIGNFORMAT_V { PEAV_TOP = 0, PEAV_CENTER, PEAV_BOTTOM }; 28*3ac0a46fSAndroid Build Coastguard Worker 29*3ac0a46fSAndroid Build Coastguard Worker class CPWL_Edit final : public CPWL_Wnd { 30*3ac0a46fSAndroid Build Coastguard Worker public: 31*3ac0a46fSAndroid Build Coastguard Worker CPWL_Edit(const CreateParams& cp, 32*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<IPWL_FillerNotify::PerWindowData> pAttachedData); 33*3ac0a46fSAndroid Build Coastguard Worker ~CPWL_Edit() override; 34*3ac0a46fSAndroid Build Coastguard Worker 35*3ac0a46fSAndroid Build Coastguard Worker // CPWL_Wnd: 36*3ac0a46fSAndroid Build Coastguard Worker bool RepositionChildWnd() override; 37*3ac0a46fSAndroid Build Coastguard Worker CFX_FloatRect GetClientRect() const override; 38*3ac0a46fSAndroid Build Coastguard Worker void DrawThisAppearance(CFX_RenderDevice* pDevice, 39*3ac0a46fSAndroid Build Coastguard Worker const CFX_Matrix& mtUser2Device) override; 40*3ac0a46fSAndroid Build Coastguard Worker bool OnMouseWheel(Mask<FWL_EVENTFLAG> nFlag, 41*3ac0a46fSAndroid Build Coastguard Worker const CFX_PointF& point, 42*3ac0a46fSAndroid Build Coastguard Worker const CFX_Vector& delta) override; 43*3ac0a46fSAndroid Build Coastguard Worker bool OnKeyDown(FWL_VKEYCODE nKeyCode, Mask<FWL_EVENTFLAG> nFlag) override; 44*3ac0a46fSAndroid Build Coastguard Worker bool OnChar(uint16_t nChar, Mask<FWL_EVENTFLAG> nFlag) override; 45*3ac0a46fSAndroid Build Coastguard Worker CFX_FloatRect GetFocusRect() const override; 46*3ac0a46fSAndroid Build Coastguard Worker void OnSetFocus() override; 47*3ac0a46fSAndroid Build Coastguard Worker void OnKillFocus() override; 48*3ac0a46fSAndroid Build Coastguard Worker void OnCreated() override; 49*3ac0a46fSAndroid Build Coastguard Worker void OnDestroy() override; 50*3ac0a46fSAndroid Build Coastguard Worker bool OnLButtonDown(Mask<FWL_EVENTFLAG> nFlag, 51*3ac0a46fSAndroid Build Coastguard Worker const CFX_PointF& point) override; 52*3ac0a46fSAndroid Build Coastguard Worker bool OnLButtonUp(Mask<FWL_EVENTFLAG> nFlag, const CFX_PointF& point) override; 53*3ac0a46fSAndroid Build Coastguard Worker bool OnLButtonDblClk(Mask<FWL_EVENTFLAG> nFlag, 54*3ac0a46fSAndroid Build Coastguard Worker const CFX_PointF& point) override; 55*3ac0a46fSAndroid Build Coastguard Worker bool OnRButtonUp(Mask<FWL_EVENTFLAG> nFlag, const CFX_PointF& point) override; 56*3ac0a46fSAndroid Build Coastguard Worker bool OnMouseMove(Mask<FWL_EVENTFLAG> nFlag, const CFX_PointF& point) override; 57*3ac0a46fSAndroid Build Coastguard Worker void SetScrollInfo(const PWL_SCROLL_INFO& info) override; 58*3ac0a46fSAndroid Build Coastguard Worker void SetScrollPosition(float pos) override; 59*3ac0a46fSAndroid Build Coastguard Worker void ScrollWindowVertically(float pos) override; 60*3ac0a46fSAndroid Build Coastguard Worker void CreateChildWnd(const CreateParams& cp) override; 61*3ac0a46fSAndroid Build Coastguard Worker void SetFontSize(float fFontSize) override; 62*3ac0a46fSAndroid Build Coastguard Worker float GetFontSize() const override; 63*3ac0a46fSAndroid Build Coastguard Worker void SetCursor() override; 64*3ac0a46fSAndroid Build Coastguard Worker WideString GetText() override; 65*3ac0a46fSAndroid Build Coastguard Worker WideString GetSelectedText() override; 66*3ac0a46fSAndroid Build Coastguard Worker void ReplaceAndKeepSelection(const WideString& text) override; 67*3ac0a46fSAndroid Build Coastguard Worker void ReplaceSelection(const WideString& text) override; 68*3ac0a46fSAndroid Build Coastguard Worker bool SelectAllText() override; 69*3ac0a46fSAndroid Build Coastguard Worker bool CanUndo() override; 70*3ac0a46fSAndroid Build Coastguard Worker bool CanRedo() override; 71*3ac0a46fSAndroid Build Coastguard Worker bool Undo() override; 72*3ac0a46fSAndroid Build Coastguard Worker bool Redo() override; 73*3ac0a46fSAndroid Build Coastguard Worker 74*3ac0a46fSAndroid Build Coastguard Worker void SetSelection(int32_t nStartChar, int32_t nEndChar); 75*3ac0a46fSAndroid Build Coastguard Worker std::pair<int32_t, int32_t> GetSelection() const; 76*3ac0a46fSAndroid Build Coastguard Worker void ClearSelection(); 77*3ac0a46fSAndroid Build Coastguard Worker 78*3ac0a46fSAndroid Build Coastguard Worker CFX_PointF GetScrollPos() const; 79*3ac0a46fSAndroid Build Coastguard Worker void SetScrollPos(const CFX_PointF& point); 80*3ac0a46fSAndroid Build Coastguard Worker SetCharSet(FX_Charset nCharSet)81*3ac0a46fSAndroid Build Coastguard Worker void SetCharSet(FX_Charset nCharSet) { m_nCharSet = nCharSet; } GetCharSet()82*3ac0a46fSAndroid Build Coastguard Worker FX_Charset GetCharSet() const { return m_nCharSet; } 83*3ac0a46fSAndroid Build Coastguard Worker 84*3ac0a46fSAndroid Build Coastguard Worker void SetReadyToInput(); 85*3ac0a46fSAndroid Build Coastguard Worker void SetAlignFormatVerticalCenter(); 86*3ac0a46fSAndroid Build Coastguard Worker void SetCharArray(int32_t nCharArray); 87*3ac0a46fSAndroid Build Coastguard Worker void SetLimitChar(int32_t nLimitChar); 88*3ac0a46fSAndroid Build Coastguard Worker bool CanSelectAll() const; 89*3ac0a46fSAndroid Build Coastguard Worker bool CanCopy() const; 90*3ac0a46fSAndroid Build Coastguard Worker bool CanCut() const; 91*3ac0a46fSAndroid Build Coastguard Worker void CutText(); 92*3ac0a46fSAndroid Build Coastguard Worker void SetText(const WideString& csText); 93*3ac0a46fSAndroid Build Coastguard Worker bool IsTextFull() const; 94*3ac0a46fSAndroid Build Coastguard Worker 95*3ac0a46fSAndroid Build Coastguard Worker static float GetCharArrayAutoFontSize(const CPDF_Font* pFont, 96*3ac0a46fSAndroid Build Coastguard Worker const CFX_FloatRect& rcPlate, 97*3ac0a46fSAndroid Build Coastguard Worker int32_t nCharArray); 98*3ac0a46fSAndroid Build Coastguard Worker 99*3ac0a46fSAndroid Build Coastguard Worker bool SetCaret(bool bVisible, 100*3ac0a46fSAndroid Build Coastguard Worker const CFX_PointF& ptHead, 101*3ac0a46fSAndroid Build Coastguard Worker const CFX_PointF& ptFoot); 102*3ac0a46fSAndroid Build Coastguard Worker 103*3ac0a46fSAndroid Build Coastguard Worker private: 104*3ac0a46fSAndroid Build Coastguard Worker // In case of implementation swallow the OnKeyDown event. If the event is 105*3ac0a46fSAndroid Build Coastguard Worker // swallowed, implementation may do other unexpected things, which is not the 106*3ac0a46fSAndroid Build Coastguard Worker // control means to do. 107*3ac0a46fSAndroid Build Coastguard Worker static bool IsProceedtoOnChar(FWL_VKEYCODE nKeyCode, 108*3ac0a46fSAndroid Build Coastguard Worker Mask<FWL_EVENTFLAG> nFlag); 109*3ac0a46fSAndroid Build Coastguard Worker 110*3ac0a46fSAndroid Build Coastguard Worker bool OnKeyDownInternal(FWL_VKEYCODE nKeyCode, Mask<FWL_EVENTFLAG> nFlag); 111*3ac0a46fSAndroid Build Coastguard Worker bool OnCharInternal(uint16_t nChar, Mask<FWL_EVENTFLAG> nFlag); 112*3ac0a46fSAndroid Build Coastguard Worker 113*3ac0a46fSAndroid Build Coastguard Worker void CopyText(); 114*3ac0a46fSAndroid Build Coastguard Worker void PasteText(); 115*3ac0a46fSAndroid Build Coastguard Worker void InsertWord(uint16_t word, FX_Charset nCharset); 116*3ac0a46fSAndroid Build Coastguard Worker void InsertReturn(); 117*3ac0a46fSAndroid Build Coastguard Worker bool IsWndHorV() const; 118*3ac0a46fSAndroid Build Coastguard Worker void Delete(); 119*3ac0a46fSAndroid Build Coastguard Worker void Backspace(); 120*3ac0a46fSAndroid Build Coastguard Worker void GetCaretInfo(CFX_PointF* ptHead, CFX_PointF* ptFoot) const; 121*3ac0a46fSAndroid Build Coastguard Worker void SetEditCaret(bool bVisible); 122*3ac0a46fSAndroid Build Coastguard Worker 123*3ac0a46fSAndroid Build Coastguard Worker void CreateEditCaret(const CreateParams& cp); 124*3ac0a46fSAndroid Build Coastguard Worker 125*3ac0a46fSAndroid Build Coastguard Worker CPVT_WordRange GetSelectWordRange() const; 126*3ac0a46fSAndroid Build Coastguard Worker bool IsVScrollBarVisible() const; 127*3ac0a46fSAndroid Build Coastguard Worker void SetParamByFlag(); 128*3ac0a46fSAndroid Build Coastguard Worker 129*3ac0a46fSAndroid Build Coastguard Worker bool m_bMouseDown = false; 130*3ac0a46fSAndroid Build Coastguard Worker bool m_bFocus = false; 131*3ac0a46fSAndroid Build Coastguard Worker FX_Charset m_nCharSet = FX_Charset::kDefault; 132*3ac0a46fSAndroid Build Coastguard Worker CFX_FloatRect m_rcOldWindow; 133*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<CPWL_EditImpl> const m_pEditImpl; 134*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<CPWL_Caret> m_pCaret; 135*3ac0a46fSAndroid Build Coastguard Worker }; 136*3ac0a46fSAndroid Build Coastguard Worker 137*3ac0a46fSAndroid Build Coastguard Worker #endif // FPDFSDK_PWL_CPWL_EDIT_H_ 138