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 FPDFSDK_SRC_JAVASCRIPT_JS_EVENTHANDLER_H_
8 #define FPDFSDK_SRC_JAVASCRIPT_JS_EVENTHANDLER_H_
9 
10 #include "core/include/fxcrt/fx_string.h"
11 #include "core/include/fxcrt/fx_system.h"
12 
13 class CJS_Context;
14 class CPDFSDK_Annot;
15 class CPDFSDK_Document;
16 class CPDF_Bookmark;
17 class CPDF_FormField;
18 class Field;
19 
20 enum JS_EVENT_T {
21   JET_UNKNOWN,
22   JET_APP_INIT,
23   JET_DOC_OPEN,
24   JET_DOC_WILLPRINT,
25   JET_DOC_DIDPRINT,
26   JET_DOC_WILLSAVE,
27   JET_DOC_DIDSAVE,
28   JET_DOC_WILLCLOSE,
29   JET_PAGE_OPEN,
30   JET_PAGE_CLOSE,
31   JET_PAGE_INVIEW,
32   JET_PAGE_OUTVIEW,
33   JET_FIELD_MOUSEDOWN,
34   JET_FIELD_MOUSEUP,
35   JET_FIELD_MOUSEENTER,
36   JET_FIELD_MOUSEEXIT,
37   JET_FIELD_FOCUS,
38   JET_FIELD_BLUR,
39   JET_FIELD_KEYSTROKE,
40   JET_FIELD_VALIDATE,
41   JET_FIELD_CALCULATE,
42   JET_FIELD_FORMAT,
43   JET_SCREEN_FOCUS,
44   JET_SCREEN_BLUR,
45   JET_SCREEN_OPEN,
46   JET_SCREEN_CLOSE,
47   JET_SCREEN_MOUSEDOWN,
48   JET_SCREEN_MOUSEUP,
49   JET_SCREEN_MOUSEENTER,
50   JET_SCREEN_MOUSEEXIT,
51   JET_SCREEN_INVIEW,
52   JET_SCREEN_OUTVIEW,
53   JET_BATCH_EXEC,
54   JET_MENU_EXEC,
55   JET_CONSOLE_EXEC,
56   JET_EXTERNAL_EXEC,
57   JET_BOOKMARK_MOUSEUP,
58   JET_LINK_MOUSEUP
59 };
60 
61 class CJS_EventHandler {
62  public:
63   CJS_EventHandler(CJS_Context* pContext);
64   virtual ~CJS_EventHandler();
65 
66   void OnApp_Init();
67 
68   void OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName);
69   void OnDoc_WillPrint(CPDFSDK_Document* pDoc);
70   void OnDoc_DidPrint(CPDFSDK_Document* pDoc);
71   void OnDoc_WillSave(CPDFSDK_Document* pDoc);
72   void OnDoc_DidSave(CPDFSDK_Document* pDoc);
73   void OnDoc_WillClose(CPDFSDK_Document* pDoc);
74 
75   void OnPage_Open(CPDFSDK_Document* pDoc);
76   void OnPage_Close(CPDFSDK_Document* pDoc);
77   void OnPage_InView(CPDFSDK_Document* pTarget);
78   void OnPage_OutView(CPDFSDK_Document* pTarget);
79 
80   void OnField_Calculate(CPDF_FormField* pSource,
81                          CPDF_FormField* pTarget,
82                          CFX_WideString& Value,
83                          FX_BOOL& bRc);
84   void OnField_Format(CPDF_FormField* pTarget,
85                       CFX_WideString& Value,
86                       FX_BOOL bWillCommit);
87   void OnField_Keystroke(CFX_WideString& strChange,
88                          const CFX_WideString& strChangeEx,
89                          FX_BOOL KeyDown,
90                          FX_BOOL bModifier,
91                          int& nSelEnd,
92                          int& nSelStart,
93                          FX_BOOL bShift,
94                          CPDF_FormField* pTarget,
95                          CFX_WideString& Value,
96                          FX_BOOL bWillCommit,
97                          FX_BOOL bFieldFull,
98                          FX_BOOL& bRc);
99   void OnField_Validate(CFX_WideString& strChange,
100                         const CFX_WideString& strChangeEx,
101                         FX_BOOL bKeyDown,
102                         FX_BOOL bModifier,
103                         FX_BOOL bShift,
104                         CPDF_FormField* pTarget,
105                         CFX_WideString& Value,
106                         FX_BOOL& bRc);
107 
108   void OnField_MouseDown(FX_BOOL bModifier,
109                          FX_BOOL bShift,
110                          CPDF_FormField* pTarget);
111   void OnField_MouseEnter(FX_BOOL bModifier,
112                           FX_BOOL bShift,
113                           CPDF_FormField* pTarget);
114   void OnField_MouseExit(FX_BOOL bModifier,
115                          FX_BOOL bShift,
116                          CPDF_FormField* pTarget);
117   void OnField_MouseUp(FX_BOOL bModifier,
118                        FX_BOOL bShift,
119                        CPDF_FormField* pTarget);
120   void OnField_Blur(FX_BOOL bModifier,
121                     FX_BOOL bShift,
122                     CPDF_FormField* pTarget,
123                     const CFX_WideString& Value);
124   void OnField_Focus(FX_BOOL bModifier,
125                      FX_BOOL bShift,
126                      CPDF_FormField* pTarget,
127                      const CFX_WideString& Value);
128 
129   void OnScreen_Focus(FX_BOOL bModifier,
130                       FX_BOOL bShift,
131                       CPDFSDK_Annot* pScreen);
132   void OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
133   void OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
134   void OnScreen_Close(FX_BOOL bModifier,
135                       FX_BOOL bShift,
136                       CPDFSDK_Annot* pScreen);
137   void OnScreen_MouseDown(FX_BOOL bModifier,
138                           FX_BOOL bShift,
139                           CPDFSDK_Annot* pScreen);
140   void OnScreen_MouseUp(FX_BOOL bModifier,
141                         FX_BOOL bShift,
142                         CPDFSDK_Annot* pScreen);
143   void OnScreen_MouseEnter(FX_BOOL bModifier,
144                            FX_BOOL bShift,
145                            CPDFSDK_Annot* pScreen);
146   void OnScreen_MouseExit(FX_BOOL bModifier,
147                           FX_BOOL bShift,
148                           CPDFSDK_Annot* pScreen);
149   void OnScreen_InView(FX_BOOL bModifier,
150                        FX_BOOL bShift,
151                        CPDFSDK_Annot* pScreen);
152   void OnScreen_OutView(FX_BOOL bModifier,
153                         FX_BOOL bShift,
154                         CPDFSDK_Annot* pScreen);
155 
156   void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark);
157   void OnLink_MouseUp(CPDFSDK_Document* pTarget);
158 
159   void OnMenu_Exec(CPDFSDK_Document* pTarget,
160                    const CFX_WideString& strTargetName);
161   void OnBatchExec(CPDFSDK_Document* pTarget);
162   void OnConsole_Exec();
163   void OnExternal_Exec();
164 
165  public:
166   void Initial(JS_EVENT_T type);
167   void Destroy();
168   FX_BOOL IsValid();
169 
170   CFX_WideString& Change();
171   CFX_WideString ChangeEx();
172   int CommitKey();
173   FX_BOOL FieldFull();
174   FX_BOOL KeyDown();
175   FX_BOOL Modifier();
176   const FX_WCHAR* Name();
177   const FX_WCHAR* Type();
178   FX_BOOL& Rc();
179   int& SelEnd();
180   int& SelStart();
181   FX_BOOL Shift();
182   Field* Source();
183   Field* Target_Field();
184   CFX_WideString& Value();
185   FX_BOOL WillCommit();
186   CFX_WideString TargetName();
187 
EventType()188   JS_EVENT_T EventType() { return m_eEventType; }
189 
190  public:
191   CJS_Context* m_pJSContext;
192   JS_EVENT_T m_eEventType;
193   FX_BOOL m_bValid;
194 
195   CFX_WideString m_strTargetName;
196   CFX_WideString m_strSourceName;
197   CFX_WideString* m_pWideStrChange;
198   CFX_WideString m_WideStrChangeDu;
199   CFX_WideString m_WideStrChangeEx;
200   int m_nCommitKey;
201   FX_BOOL m_bKeyDown;
202   FX_BOOL m_bModifier;
203   FX_BOOL m_bShift;
204   int* m_pISelEnd;
205   int m_nSelEndDu;
206   int* m_pISelStart;
207   int m_nSelStartDu;
208   FX_BOOL m_bWillCommit;
209   CFX_WideString* m_pValue;
210   FX_BOOL m_bFieldFull;
211   FX_BOOL* m_pbRc;
212   FX_BOOL m_bRcDu;
213 
214   CPDFSDK_Document* m_pSourceDoc;
215   CPDF_Bookmark* m_pTargetBookMark;
216   CPDFSDK_Document* m_pTargetDoc;
217   CPDFSDK_Annot* m_pTargetAnnot;
218 };
219 
220 #endif  // FPDFSDK_SRC_JAVASCRIPT_JS_EVENTHANDLER_H_
221