• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 The PDFium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 
7 #ifndef XFA_FXFA_CXFA_FFTEXTEDIT_H_
8 #define XFA_FXFA_CXFA_FFTEXTEDIT_H_
9 
10 #include "core/fxcrt/fx_coordinates.h"
11 #include "core/fxcrt/widestring.h"
12 #include "v8/include/cppgc/prefinalizer.h"
13 #include "xfa/fxfa/cxfa_fffield.h"
14 
15 class CFX_Matrix;
16 class CXFA_FFWidget;
17 
18 namespace pdfium {
19 class CFWL_EventTextWillChange;
20 class CFWL_Widget;
21 class IFWL_WidgetDelegate;
22 }  // namespace pdfium
23 
24 class CXFA_FFTextEdit : public CXFA_FFField {
25   CPPGC_USING_PRE_FINALIZER(CXFA_FFTextEdit, PreFinalize);
26 
27  public:
28   CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
29   ~CXFA_FFTextEdit() override;
30 
31   void PreFinalize();
32 
33   void Trace(cppgc::Visitor* visitor) const override;
34 
35   // CXFA_FFField
36   bool LoadWidget() override;
37   void UpdateWidgetProperty() override;
38   bool AcceptsFocusOnButtonDown(
39       Mask<XFA_FWL_KeyFlag> dwFlags,
40       const CFX_PointF& point,
41       CFWL_MessageMouse::MouseCommand command) override;
42   bool OnLButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
43                      const CFX_PointF& point) override;
44   bool OnRButtonDown(Mask<XFA_FWL_KeyFlag> dwFlags,
45                      const CFX_PointF& point) override;
46   bool OnRButtonUp(Mask<XFA_FWL_KeyFlag> dwFlags,
47                    const CFX_PointF& point) override;
48   [[nodiscard]] bool OnSetFocus(CXFA_FFWidget* pOldWidget) override;
49   [[nodiscard]] bool OnKillFocus(CXFA_FFWidget* pNewWidget) override;
50   void OnProcessMessage(CFWL_Message* pMessage) override;
51   void OnProcessEvent(pdfium::CFWL_Event* pEvent) override;
52   void OnDrawWidget(CFGAS_GEGraphics* pGraphics,
53                     const CFX_Matrix& matrix) override;
54 
55   void OnTextWillChange(pdfium::CFWL_Widget* pWidget,
56                         pdfium::CFWL_EventTextWillChange* change);
57   void OnTextFull(CFWL_Widget* pWidget);
58 
59   // CXFA_FFWidget
60   bool CanUndo() override;
61   bool CanRedo() override;
62   bool CanCopy() override;
63   bool CanCut() override;
64   bool CanPaste() override;
65   bool CanSelectAll() override;
66   bool Undo() override;
67   bool Redo() override;
68   std::optional<WideString> Copy() override;
69   std::optional<WideString> Cut() override;
70   bool Paste(const WideString& wsPaste) override;
71   void SelectAll() override;
72   void Delete() override;
73   void DeSelect() override;
74   WideString GetText() override;
75   FormFieldType GetFormFieldType() override;
76 
77  protected:
78   explicit CXFA_FFTextEdit(CXFA_Node* pNode);
79   uint32_t GetAlignment();
80 
81   cppgc::Member<IFWL_WidgetDelegate> m_pOldDelegate;
82 
83  private:
84   bool CommitData() override;
85   bool UpdateFWLData() override;
86   bool IsDataChanged() override;
87   void ValidateNumberField(const WideString& wsText);
88 };
89 
90 #endif  // XFA_FXFA_CXFA_FFTEXTEDIT_H_
91