xref: /aosp_15_r20/external/pdfium/fpdfsdk/pwl/cpwl_edit.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
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