• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 PDFium Authors. All rights reserved.
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_XFA_FFWIDGETHANDLER_H_
8 #define XFA_FXFA_XFA_FFWIDGETHANDLER_H_
9 
10 #include <vector>
11 
12 #include "xfa/fxfa/cxfa_eventparam.h"
13 #include "xfa/fxfa/fxfa.h"
14 #include "xfa/fxfa/parser/cxfa_document.h"
15 
16 class CXFA_FFDocView;
17 enum class FWL_WidgetHit;
18 
19 class CXFA_FFWidgetHandler {
20  public:
21   explicit CXFA_FFWidgetHandler(CXFA_FFDocView* pDocView);
22   ~CXFA_FFWidgetHandler();
23 
24   CXFA_FFWidget* CreateWidget(CXFA_FFWidget* hParent,
25                               XFA_WIDGETTYPE eType,
26                               CXFA_FFWidget* hBefore = nullptr);
27 
28   bool OnMouseEnter(CXFA_FFWidget* hWidget);
29   bool OnMouseExit(CXFA_FFWidget* hWidget);
30   bool OnLButtonDown(CXFA_FFWidget* hWidget,
31                      uint32_t dwFlags,
32                      const CFX_PointF& point);
33   bool OnLButtonUp(CXFA_FFWidget* hWidget,
34                    uint32_t dwFlags,
35                    const CFX_PointF& point);
36   bool OnLButtonDblClk(CXFA_FFWidget* hWidget,
37                        uint32_t dwFlags,
38                        const CFX_PointF& point);
39   bool OnMouseMove(CXFA_FFWidget* hWidget,
40                    uint32_t dwFlags,
41                    const CFX_PointF& point);
42   bool OnMouseWheel(CXFA_FFWidget* hWidget,
43                     uint32_t dwFlags,
44                     int16_t zDelta,
45                     const CFX_PointF& point);
46   bool OnRButtonDown(CXFA_FFWidget* hWidget,
47                      uint32_t dwFlags,
48                      const CFX_PointF& point);
49   bool OnRButtonUp(CXFA_FFWidget* hWidget,
50                    uint32_t dwFlags,
51                    const CFX_PointF& point);
52   bool OnRButtonDblClk(CXFA_FFWidget* hWidget,
53                        uint32_t dwFlags,
54                        const CFX_PointF& point);
55 
56   bool OnKeyDown(CXFA_FFWidget* hWidget, uint32_t dwKeyCode, uint32_t dwFlags);
57   bool OnKeyUp(CXFA_FFWidget* hWidget, uint32_t dwKeyCode, uint32_t dwFlags);
58   bool OnChar(CXFA_FFWidget* hWidget, uint32_t dwChar, uint32_t dwFlags);
59   FWL_WidgetHit OnHitTest(CXFA_FFWidget* hWidget, const CFX_PointF& point);
60   bool OnSetCursor(CXFA_FFWidget* hWidget, const CFX_PointF& point);
61   void RenderWidget(CXFA_FFWidget* hWidget,
62                     CFX_Graphics* pGS,
63                     CFX_Matrix* pMatrix,
64                     bool bHighlight);
65   bool HasEvent(CXFA_WidgetAcc* pWidgetAcc, XFA_EVENTTYPE eEventType);
66   int32_t ProcessEvent(CXFA_WidgetAcc* pWidgetAcc, CXFA_EventParam* pParam);
67 
68  protected:
69   CXFA_Node* CreateWidgetFormItem(XFA_WIDGETTYPE eType,
70                                   CXFA_Node* pParent,
71                                   CXFA_Node* pBefore) const;
72 
73   CXFA_Node* CreatePushButton(CXFA_Node* pParent, CXFA_Node* pBefore) const;
74   CXFA_Node* CreateCheckButton(CXFA_Node* pParent, CXFA_Node* pBefore) const;
75   CXFA_Node* CreateExclGroup(CXFA_Node* pParent, CXFA_Node* pBefore) const;
76   CXFA_Node* CreateRadioButton(CXFA_Node* pParent, CXFA_Node* pBefore) const;
77   CXFA_Node* CreateDatetimeEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const;
78   CXFA_Node* CreateDecimalField(CXFA_Node* pParent, CXFA_Node* pBefore) const;
79   CXFA_Node* CreateNumericField(CXFA_Node* pParent, CXFA_Node* pBefore) const;
80   CXFA_Node* CreateSignature(CXFA_Node* pParent, CXFA_Node* pBefore) const;
81   CXFA_Node* CreateTextEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const;
82   CXFA_Node* CreateDropdownList(CXFA_Node* pParent, CXFA_Node* pBefore) const;
83   CXFA_Node* CreateListBox(CXFA_Node* pParent, CXFA_Node* pBefore) const;
84   CXFA_Node* CreateImageField(CXFA_Node* pParent, CXFA_Node* pBefore) const;
85   CXFA_Node* CreatePasswordEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const;
86   CXFA_Node* CreateField(XFA_Element eElement,
87                          CXFA_Node* pParent,
88                          CXFA_Node* pBefore) const;
89   CXFA_Node* CreateArc(CXFA_Node* pParent, CXFA_Node* pBefore) const;
90   CXFA_Node* CreateRectangle(CXFA_Node* pParent, CXFA_Node* pBefore) const;
91   CXFA_Node* CreateImage(CXFA_Node* pParent, CXFA_Node* pBefore) const;
92   CXFA_Node* CreateLine(CXFA_Node* pParent, CXFA_Node* pBefore) const;
93   CXFA_Node* CreateText(CXFA_Node* pParent, CXFA_Node* pBefore) const;
94   CXFA_Node* CreateDraw(XFA_Element eElement,
95                         CXFA_Node* pParent,
96                         CXFA_Node* pBefore) const;
97 
98   CXFA_Node* CreateSubform(CXFA_Node* pParent, CXFA_Node* pBefore) const;
99   CXFA_Node* CreateFormItem(XFA_Element eElement,
100                             CXFA_Node* pParent,
101                             CXFA_Node* pBefore) const;
102   CXFA_Node* CreateCopyNode(XFA_Element eElement,
103                             CXFA_Node* pParent,
104                             CXFA_Node* pBefore = nullptr) const;
105   CXFA_Node* CreateTemplateNode(XFA_Element eElement,
106                                 CXFA_Node* pParent,
107                                 CXFA_Node* pBefore) const;
108   CXFA_Node* CreateFontNode(CXFA_Node* pParent) const;
109   CXFA_Node* CreateMarginNode(CXFA_Node* pParent,
110                               uint32_t dwFlags,
111                               FX_FLOAT fInsets[4]) const;
112   CXFA_Node* CreateValueNode(XFA_Element eValue, CXFA_Node* pParent) const;
113   CXFA_Document* GetObjFactory() const;
114   CXFA_Document* GetXFADoc() const;
115 
116   CXFA_FFDocView* m_pDocView;
117 };
118 
119 #endif  //  XFA_FXFA_XFA_FFWIDGETHANDLER_H_
120