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 _FXFA_FORMFILLER_ANNOTHANDLER_IMP_H
8#define _FXFA_FORMFILLER_ANNOTHANDLER_IMP_H
9class CXFA_FFDocView;
10class CXFA_FFWidgetHandler : public IXFA_WidgetHandler {
11 public:
12  CXFA_FFWidgetHandler(CXFA_FFDocView* pDocView);
13  ~CXFA_FFWidgetHandler();
14  virtual IXFA_Widget* CreateWidget(IXFA_Widget* hParent,
15                                    XFA_WIDGETTYPE eType,
16                                    IXFA_Widget* hBefore = NULL);
17  virtual IXFA_PageView* GetPageView(IXFA_Widget* hWidget);
18  virtual void GetRect(IXFA_Widget* hWidget, CFX_RectF& rt);
19  virtual FX_DWORD GetStatus(IXFA_Widget* hWidget);
20  virtual FX_BOOL GetBBox(IXFA_Widget* hWidget,
21                          CFX_RectF& rtBox,
22                          FX_DWORD dwStatus,
23                          FX_BOOL bDrawFocus = FALSE);
24  virtual CXFA_WidgetAcc* GetDataAcc(IXFA_Widget* hWidget);
25  virtual void GetName(IXFA_Widget* hWidget,
26                       CFX_WideString& wsName,
27                       int32_t iNameType = 0);
28  virtual FX_BOOL GetToolTip(IXFA_Widget* hWidget, CFX_WideString& wsToolTip);
29  virtual void SetPrivateData(IXFA_Widget* hWidget,
30                              void* module_id,
31                              void* pData,
32                              PD_CALLBACK_FREEDATA callback);
33  virtual void* GetPrivateData(IXFA_Widget* hWidget, void* module_id);
34  virtual FX_BOOL OnMouseEnter(IXFA_Widget* hWidget);
35  virtual FX_BOOL OnMouseExit(IXFA_Widget* hWidget);
36  virtual FX_BOOL OnLButtonDown(IXFA_Widget* hWidget,
37                                FX_DWORD dwFlags,
38                                FX_FLOAT fx,
39                                FX_FLOAT fy);
40  virtual FX_BOOL OnLButtonUp(IXFA_Widget* hWidget,
41                              FX_DWORD dwFlags,
42                              FX_FLOAT fx,
43                              FX_FLOAT fy);
44  virtual FX_BOOL OnLButtonDblClk(IXFA_Widget* hWidget,
45                                  FX_DWORD dwFlags,
46                                  FX_FLOAT fx,
47                                  FX_FLOAT fy);
48  virtual FX_BOOL OnMouseMove(IXFA_Widget* hWidget,
49                              FX_DWORD dwFlags,
50                              FX_FLOAT fx,
51                              FX_FLOAT fy);
52  virtual FX_BOOL OnMouseWheel(IXFA_Widget* hWidget,
53                               FX_DWORD dwFlags,
54                               int16_t zDelta,
55                               FX_FLOAT fx,
56                               FX_FLOAT fy);
57  virtual FX_BOOL OnRButtonDown(IXFA_Widget* hWidget,
58                                FX_DWORD dwFlags,
59                                FX_FLOAT fx,
60                                FX_FLOAT fy);
61  virtual FX_BOOL OnRButtonUp(IXFA_Widget* hWidget,
62                              FX_DWORD dwFlags,
63                              FX_FLOAT fx,
64                              FX_FLOAT fy);
65  virtual FX_BOOL OnRButtonDblClk(IXFA_Widget* hWidget,
66                                  FX_DWORD dwFlags,
67                                  FX_FLOAT fx,
68                                  FX_FLOAT fy);
69
70  virtual FX_BOOL OnKeyDown(IXFA_Widget* hWidget,
71                            FX_DWORD dwKeyCode,
72                            FX_DWORD dwFlags);
73  virtual FX_BOOL OnKeyUp(IXFA_Widget* hWidget,
74                          FX_DWORD dwKeyCode,
75                          FX_DWORD dwFlags);
76  virtual FX_BOOL OnChar(IXFA_Widget* hWidget,
77                         FX_DWORD dwChar,
78                         FX_DWORD dwFlags);
79  virtual FX_DWORD OnHitTest(IXFA_Widget* hWidget, FX_FLOAT fx, FX_FLOAT fy);
80  virtual FX_BOOL OnSetCursor(IXFA_Widget* hWidget, FX_FLOAT fx, FX_FLOAT fy);
81  virtual void RenderWidget(IXFA_Widget* hWidget,
82                            CFX_Graphics* pGS,
83                            CFX_Matrix* pMatrix = NULL,
84                            FX_BOOL bHighlight = FALSE);
85  virtual FX_BOOL HasEvent(CXFA_WidgetAcc* pWidgetAcc,
86                           XFA_EVENTTYPE eEventType);
87  virtual int32_t ProcessEvent(CXFA_WidgetAcc* pWidgetAcc,
88                               CXFA_EventParam* pParam);
89
90 protected:
91  CXFA_Node* CreateWidgetFormItem(XFA_WIDGETTYPE eType,
92                                  CXFA_Node* pParent,
93                                  CXFA_Node* pBefore) const;
94
95  CXFA_Node* CreatePushButton(CXFA_Node* pParent, CXFA_Node* pBefore) const;
96  CXFA_Node* CreateCheckButton(CXFA_Node* pParent, CXFA_Node* pBefore) const;
97  CXFA_Node* CreateExclGroup(CXFA_Node* pParent, CXFA_Node* pBefore) const;
98  CXFA_Node* CreateRadioButton(CXFA_Node* pParent, CXFA_Node* pBefore) const;
99  CXFA_Node* CreateDatetimeEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const;
100  CXFA_Node* CreateDecimalField(CXFA_Node* pParent, CXFA_Node* pBefore) const;
101  CXFA_Node* CreateNumericField(CXFA_Node* pParent, CXFA_Node* pBefore) const;
102  CXFA_Node* CreateSignature(CXFA_Node* pParent, CXFA_Node* pBefore) const;
103  CXFA_Node* CreateTextEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const;
104  CXFA_Node* CreateDropdownList(CXFA_Node* pParent, CXFA_Node* pBefore) const;
105  CXFA_Node* CreateListBox(CXFA_Node* pParent, CXFA_Node* pBefore) const;
106  CXFA_Node* CreateImageField(CXFA_Node* pParent, CXFA_Node* pBefore) const;
107  CXFA_Node* CreatePasswordEdit(CXFA_Node* pParent, CXFA_Node* pBefore) const;
108  CXFA_Node* CreateField(XFA_ELEMENT eElement,
109                         CXFA_Node* pParent,
110                         CXFA_Node* pBefore) const;
111  CXFA_Node* CreateArc(CXFA_Node* pParent, CXFA_Node* pBefore) const;
112  CXFA_Node* CreateRectangle(CXFA_Node* pParent, CXFA_Node* pBefore) const;
113  CXFA_Node* CreateImage(CXFA_Node* pParent, CXFA_Node* pBefore) const;
114  CXFA_Node* CreateLine(CXFA_Node* pParent, CXFA_Node* pBefore) const;
115  CXFA_Node* CreateText(CXFA_Node* pParent, CXFA_Node* pBefore) const;
116  CXFA_Node* CreateDraw(XFA_ELEMENT eElement,
117                        CXFA_Node* pParent,
118                        CXFA_Node* pBefore) const;
119
120  CXFA_Node* CreateSubform(CXFA_Node* pParent, CXFA_Node* pBefore) const;
121  CXFA_Node* CreateFormItem(XFA_ELEMENT eElement,
122                            CXFA_Node* pParent,
123                            CXFA_Node* pBefore) const;
124  CXFA_Node* CreateCopyNode(XFA_ELEMENT eElement,
125                            CXFA_Node* pParent,
126                            CXFA_Node* pBefore = NULL) const;
127  CXFA_Node* CreateTemplateNode(XFA_ELEMENT eElement,
128                                CXFA_Node* pParent,
129                                CXFA_Node* pBefore) const;
130  CXFA_Node* CreateFontNode(CXFA_Node* pParent) const;
131  CXFA_Node* CreateMarginNode(CXFA_Node* pParent,
132                              FX_DWORD dwFlags,
133                              FX_FLOAT fInsets[4]) const;
134  CXFA_Node* CreateValueNode(XFA_ELEMENT eValue, CXFA_Node* pParent) const;
135  IXFA_ObjFactory* GetObjFactory() const;
136  CXFA_Document* GetXFADoc() const;
137
138  CXFA_FFDocView* m_pDocView;
139};
140class CXFA_FFMenuHandler : public IXFA_MenuHandler {
141 public:
142  CXFA_FFMenuHandler();
143  ~CXFA_FFMenuHandler();
144  virtual FX_BOOL CanCopy(IXFA_Widget* hWidget);
145  virtual FX_BOOL CanCut(IXFA_Widget* hWidget);
146  virtual FX_BOOL CanPaste(IXFA_Widget* hWidget);
147  virtual FX_BOOL CanSelectAll(IXFA_Widget* hWidget);
148  virtual FX_BOOL CanDelete(IXFA_Widget* hWidget);
149  virtual FX_BOOL CanDeSelect(IXFA_Widget* hWidget);
150  virtual FX_BOOL Copy(IXFA_Widget* hWidget, CFX_WideString& wsText);
151  virtual FX_BOOL Cut(IXFA_Widget* hWidget, CFX_WideString& wsText);
152  virtual FX_BOOL Paste(IXFA_Widget* hWidget, const CFX_WideString& wsText);
153  virtual FX_BOOL SelectAll(IXFA_Widget* hWidget);
154  virtual FX_BOOL Delete(IXFA_Widget* hWidget);
155  virtual FX_BOOL DeSelect(IXFA_Widget* hWidget);
156  virtual FX_BOOL CanUndo(IXFA_Widget* hWidget);
157  virtual FX_BOOL CanRedo(IXFA_Widget* hWidget);
158  virtual FX_BOOL Undo(IXFA_Widget* hWidget);
159  virtual FX_BOOL Redo(IXFA_Widget* hWidget);
160  virtual FX_BOOL GetSuggestWords(IXFA_Widget* hWidget,
161                                  CFX_PointF pointf,
162                                  CFX_ByteStringArray& sSuggest);
163  virtual FX_BOOL ReplaceSpellCheckWord(IXFA_Widget* hWidget,
164                                        CFX_PointF pointf,
165                                        const CFX_ByteStringC& bsReplace);
166};
167#endif
168