Fix IWYU in formfiller/ directory.
[pdfium.git] / fpdfsdk / include / fsdk_annothandler.h
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 _FSDK_ANNOTHANDLER_H_
8 #define _FSDK_ANNOTHANDLER_H_
9
10 #include "../../core/include/fxcrt/fx_basic.h"
11
12 class CFFL_IFormFiller;
13 class CFX_RenderDevice;
14 class CPDFDoc_Environment;
15 class CPDFSDK_Annot;
16 class CPDFSDK_PageView;
17 class CPDF_Annot;
18 class CPDF_Matrix;
19 class CPDF_Point;
20 class CPDF_Rect;
21
22 class IPDFSDK_AnnotHandler
23 {
24
25 public:
26         virtual ~IPDFSDK_AnnotHandler() {};
27
28         virtual CFX_ByteString          GetType() = 0;
29
30         virtual CFX_ByteString          GetName() = 0;
31
32         virtual FX_BOOL                         CanAnswer(CPDFSDK_Annot* pAnnot) = 0;
33         
34
35         virtual CPDFSDK_Annot*          NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage) = 0;
36
37         virtual void                            ReleaseAnnot(CPDFSDK_Annot* pAnnot) = 0;
38
39         virtual void                            DeleteAnnot(CPDFSDK_Annot* pAnnot) = 0;
40         
41
42         virtual CPDF_Rect                               GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot) = 0;
43         
44         virtual FX_BOOL                         HitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point) = 0;
45         
46
47         virtual void                            OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, 
48                 CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
49                 FX_DWORD dwFlags) = 0;
50         
51         virtual void                            OnDrawSleep(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, 
52                 CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
53                 const CPDF_Rect& rcWindow, FX_DWORD dwFlags) = 0;
54         
55
56         
57
58         virtual void                            OnCreate(CPDFSDK_Annot* pAnnot) = 0;
59
60         virtual void                            OnLoad(CPDFSDK_Annot* pAnnot) = 0;
61
62         virtual void                            OnDelete(CPDFSDK_Annot* pAnnot) = 0;
63
64         virtual void                            OnRelease(CPDFSDK_Annot* pAnnot) = 0;
65         
66
67         virtual void                            OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0;
68         virtual void                            OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0;
69         
70
71         virtual FX_BOOL                         OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
72         virtual FX_BOOL                         OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
73         virtual FX_BOOL                         OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
74         virtual FX_BOOL                         OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
75         virtual FX_BOOL                         OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point) = 0;
76         virtual FX_BOOL                         OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
77         virtual FX_BOOL                         OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
78         virtual FX_BOOL                         OnRButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
79 //by wjm.
80         virtual FX_BOOL                         OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags) = 0;
81         virtual FX_BOOL                         OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) = 0;
82         virtual FX_BOOL                         OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) =0 ;
83
84         virtual void                            OnDeSelected(CPDFSDK_Annot* pAnnot) = 0;
85         virtual void                            OnSelected(CPDFSDK_Annot* pAnnot) = 0;
86
87         virtual FX_BOOL                         OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0;
88         virtual FX_BOOL                         OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0;
89
90 };
91
92
93 class CPDFSDK_BFAnnotHandler:public IPDFSDK_AnnotHandler
94 {
95 public:
96         CPDFSDK_BFAnnotHandler(CPDFDoc_Environment* pApp) : m_pApp(pApp), m_pFormFiller(NULL) {}
97         virtual ~CPDFSDK_BFAnnotHandler() {}
98 public:
99
100         virtual CFX_ByteString          GetType()  {return CFX_ByteString("Widget");}
101
102         virtual CFX_ByteString          GetName()  {return CFX_ByteString("WidgetHandler");}
103         
104         virtual FX_BOOL                         CanAnswer(CPDFSDK_Annot* pAnnot);
105
106         virtual CPDFSDK_Annot*          NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage);
107
108         virtual void                            ReleaseAnnot(CPDFSDK_Annot* pAnnot)  ;
109
110         virtual void                            DeleteAnnot(CPDFSDK_Annot* pAnnot) {}
111         
112
113         virtual CPDF_Rect                               GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot) ;
114         
115         virtual FX_BOOL                         HitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point);
116         
117
118         virtual void                            OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, 
119                 CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
120                  FX_DWORD dwFlags) ;
121         
122         virtual void                            OnDrawSleep(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, 
123                 CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
124                 const CPDF_Rect& rcWindow, FX_DWORD dwFlags) {}
125         
126
127         virtual void                            OnCreate(CPDFSDK_Annot* pAnnot) ;
128
129         virtual void                            OnLoad(CPDFSDK_Annot* pAnnot) ;
130
131         virtual void                            OnDelete(CPDFSDK_Annot* pAnnot) {}
132
133         virtual void                            OnRelease(CPDFSDK_Annot* pAnnot) {}
134         
135
136         virtual void                            OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) ;
137         virtual void                            OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) ;
138         
139
140         virtual FX_BOOL                         OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
141         virtual FX_BOOL                         OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
142         virtual FX_BOOL                         OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
143         virtual FX_BOOL                         OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
144         virtual FX_BOOL                         OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point) ;
145         virtual FX_BOOL                         OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
146         virtual FX_BOOL                         OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
147         virtual FX_BOOL                         OnRButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) {return FALSE;}
148         
149 //by wjm.
150         virtual FX_BOOL                         OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags);
151         virtual FX_BOOL                         OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
152         virtual FX_BOOL                         OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
153
154         virtual void                            OnDeSelected(CPDFSDK_Annot* pAnnot) {}
155         virtual void                            OnSelected(CPDFSDK_Annot* pAnnot) {}
156
157         virtual FX_BOOL                         OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
158         virtual FX_BOOL                         OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
159
160         void                                            SetFormFiller(CFFL_IFormFiller* pFiller){m_pFormFiller = pFiller;}
161         CFFL_IFormFiller*                       GetFormFiller() {return m_pFormFiller;}
162 private:
163
164         CPDFDoc_Environment*            m_pApp;
165         CFFL_IFormFiller*                       m_pFormFiller;
166 };
167
168 #define CBA_AnnotHandlerArray CFX_ArrayTemplate<IPDFSDK_AnnotHandler*>
169 class CPDFSDK_AnnotHandlerMgr
170 {
171 public:
172         // Destroy the handler
173         CPDFSDK_AnnotHandlerMgr(CPDFDoc_Environment* pApp);
174         virtual ~CPDFSDK_AnnotHandlerMgr() ;
175
176 public:
177         void                                            RegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler);
178         void                                            UnRegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler);
179
180         virtual CPDFSDK_Annot*          NewAnnot(CPDF_Annot * pAnnot, CPDFSDK_PageView *pPageView);
181         virtual void                            ReleaseAnnot(CPDFSDK_Annot * pAnnot);
182         
183         virtual void                            Annot_OnCreate(CPDFSDK_Annot* pAnnot);
184         virtual void                            Annot_OnLoad(CPDFSDK_Annot* pAnnot);
185 public:
186         IPDFSDK_AnnotHandler*           GetAnnotHandler(CPDFSDK_Annot* pAnnot) const;
187         virtual void                            Annot_OnDraw(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot,
188                 CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,FX_DWORD dwFlags);
189
190         virtual void                            Annot_OnMouseEnter(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags);
191         virtual void                            Annot_OnMouseExit(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags);
192
193         virtual FX_BOOL                         Annot_OnLButtonDown(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
194         virtual FX_BOOL                         Annot_OnLButtonUp(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
195         virtual FX_BOOL                         Annot_OnLButtonDblClk(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
196         
197         virtual FX_BOOL                         Annot_OnMouseMove(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
198         virtual FX_BOOL                         Annot_OnMouseWheel(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point);
199         virtual FX_BOOL                         Annot_OnRButtonDown(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
200         virtual FX_BOOL                         Annot_OnRButtonUp(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
201
202
203         virtual FX_BOOL                         Annot_OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags);
204         virtual FX_BOOL                         Annot_OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
205         virtual FX_BOOL                         Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
206
207         virtual FX_BOOL                         Annot_OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
208         virtual FX_BOOL                         Annot_OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
209
210         virtual CPDF_Rect                       Annot_OnGetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot);
211         virtual FX_BOOL                         Annot_OnHitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point);
212
213 private:
214         IPDFSDK_AnnotHandler*                   GetAnnotHandler(const CFX_ByteString& sType) const;
215         CPDFSDK_Annot*                          GetNextAnnot(CPDFSDK_Annot* pSDKAnnot,FX_BOOL bNext);
216 private:
217         CBA_AnnotHandlerArray           m_Handlers;
218         CFX_MapByteStringToPtr          m_mapType2Handler;
219         CPDFDoc_Environment*            m_pApp;
220 };
221
222 //#define CBF_Page2Accessible    CFX_MapPtrTemplate<CPDFSDK_PageView*, IAccessible*>
223
224 typedef int (*AI_COMPARE) (CPDFSDK_Annot* p1, CPDFSDK_Annot* p2);
225
226 class CPDFSDK_AnnotIterator
227 {
228 public:
229     CPDFSDK_AnnotIterator(CPDFSDK_PageView * pPageView, FX_BOOL bReverse,
230                 FX_BOOL bIgnoreTopmost=FALSE,FX_BOOL bCircle=FALSE,CFX_PtrArray* pList=NULL);
231     virtual ~CPDFSDK_AnnotIterator() { }
232
233         virtual CPDFSDK_Annot*  Next (const CPDFSDK_Annot* pCurrent) ;
234         virtual CPDFSDK_Annot*  Prev (const CPDFSDK_Annot* pCurrent) ;  
235         virtual CPDFSDK_Annot*  Next(int& index ) ;
236         virtual CPDFSDK_Annot*  Prev(int& index ) ;
237         virtual int             Count(){return m_pIteratorAnnotList.GetSize();}
238
239         virtual FX_BOOL         InitIteratorAnnotList(CPDFSDK_PageView * pPageView,CFX_PtrArray* pList=NULL);
240
241         void                                    InsertSort(CFX_PtrArray &arrayList, AI_COMPARE pCompare);
242
243 protected:
244         CPDFSDK_Annot*  NextAnnot (const CPDFSDK_Annot* pCurrent) ;
245         CPDFSDK_Annot*  PrevAnnot (const CPDFSDK_Annot* pCurrent) ;
246         CPDFSDK_Annot*  NextAnnot(int& index ) ;
247         CPDFSDK_Annot*  PrevAnnot(int& index ) ;
248
249         CFX_PtrArray         m_pIteratorAnnotList;
250         FX_BOOL                      m_bReverse;
251         FX_BOOL              m_bIgnoreTopmost;
252         FX_BOOL              m_bCircle;
253 };
254
255
256
257 #endif
258