blob: 666ef8410dc0da298dbfb35e5795643bc5874cd0 [file] [log] [blame]
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07001// 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.
Lei Zhanga6d9f0e2015-06-13 00:48:38 -07004
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07005// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
Dan Sinclairf766ad22016-03-14 13:51:24 -04007#ifndef FPDFSDK_JAVASCRIPT_JS_EVENTHANDLER_H_
8#define FPDFSDK_JAVASCRIPT_JS_EVENTHANDLER_H_
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07009
dsinclaira52ab742016-09-29 13:59:29 -070010#include "core/fxcrt/fx_string.h"
11#include "core/fxcrt/fx_system.h"
Tom Sepez9a3f8122015-04-07 15:35:48 -070012
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070013class CJS_Context;
Tom Sepez9a3f8122015-04-07 15:35:48 -070014class CPDFSDK_Annot;
dsinclair4526faf2016-10-11 10:54:49 -070015class CPDFSDK_FormFillEnvironment;
Tom Sepez9a3f8122015-04-07 15:35:48 -070016class CPDF_Bookmark;
17class CPDF_FormField;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070018class Field;
19
Nico Weber9d8ec5a2015-08-04 13:00:21 -070020enum 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
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070059};
60
Nico Weber9d8ec5a2015-08-04 13:00:21 -070061class CJS_EventHandler {
62 public:
63 CJS_EventHandler(CJS_Context* pContext);
64 virtual ~CJS_EventHandler();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070065
Nico Weber9d8ec5a2015-08-04 13:00:21 -070066 void OnApp_Init();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070067
dsinclair4526faf2016-10-11 10:54:49 -070068 void OnDoc_Open(CPDFSDK_FormFillEnvironment* pFormFillEnv,
69 const CFX_WideString& strTargetName);
70 void OnDoc_WillPrint(CPDFSDK_FormFillEnvironment* pFormFillEnv);
71 void OnDoc_DidPrint(CPDFSDK_FormFillEnvironment* pFormFillEnv);
72 void OnDoc_WillSave(CPDFSDK_FormFillEnvironment* pFormFillEnv);
73 void OnDoc_DidSave(CPDFSDK_FormFillEnvironment* pFormFillEnv);
74 void OnDoc_WillClose(CPDFSDK_FormFillEnvironment* pFormFillEnv);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070075
dsinclair4526faf2016-10-11 10:54:49 -070076 void OnPage_Open(CPDFSDK_FormFillEnvironment* pFormFillEnv);
77 void OnPage_Close(CPDFSDK_FormFillEnvironment* pFormFillEnv);
78 void OnPage_InView(CPDFSDK_FormFillEnvironment* pFormFillEnv);
79 void OnPage_OutView(CPDFSDK_FormFillEnvironment* pFormFillEnv);
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070080
Nico Weber9d8ec5a2015-08-04 13:00:21 -070081 void OnField_Calculate(CPDF_FormField* pSource,
82 CPDF_FormField* pTarget,
83 CFX_WideString& Value,
84 FX_BOOL& bRc);
85 void OnField_Format(CPDF_FormField* pTarget,
86 CFX_WideString& Value,
87 FX_BOOL bWillCommit);
88 void OnField_Keystroke(CFX_WideString& strChange,
89 const CFX_WideString& strChangeEx,
90 FX_BOOL KeyDown,
91 FX_BOOL bModifier,
92 int& nSelEnd,
93 int& nSelStart,
94 FX_BOOL bShift,
95 CPDF_FormField* pTarget,
96 CFX_WideString& Value,
97 FX_BOOL bWillCommit,
98 FX_BOOL bFieldFull,
99 FX_BOOL& bRc);
100 void OnField_Validate(CFX_WideString& strChange,
101 const CFX_WideString& strChangeEx,
102 FX_BOOL bKeyDown,
103 FX_BOOL bModifier,
104 FX_BOOL bShift,
105 CPDF_FormField* pTarget,
106 CFX_WideString& Value,
107 FX_BOOL& bRc);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700108
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700109 void OnField_MouseDown(FX_BOOL bModifier,
110 FX_BOOL bShift,
111 CPDF_FormField* pTarget);
112 void OnField_MouseEnter(FX_BOOL bModifier,
113 FX_BOOL bShift,
114 CPDF_FormField* pTarget);
115 void OnField_MouseExit(FX_BOOL bModifier,
116 FX_BOOL bShift,
117 CPDF_FormField* pTarget);
118 void OnField_MouseUp(FX_BOOL bModifier,
119 FX_BOOL bShift,
120 CPDF_FormField* pTarget);
121 void OnField_Blur(FX_BOOL bModifier,
122 FX_BOOL bShift,
123 CPDF_FormField* pTarget,
124 const CFX_WideString& Value);
125 void OnField_Focus(FX_BOOL bModifier,
126 FX_BOOL bShift,
127 CPDF_FormField* pTarget,
128 const CFX_WideString& Value);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700129
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700130 void OnScreen_Focus(FX_BOOL bModifier,
131 FX_BOOL bShift,
132 CPDFSDK_Annot* pScreen);
133 void OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
134 void OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
135 void OnScreen_Close(FX_BOOL bModifier,
136 FX_BOOL bShift,
137 CPDFSDK_Annot* pScreen);
138 void OnScreen_MouseDown(FX_BOOL bModifier,
139 FX_BOOL bShift,
140 CPDFSDK_Annot* pScreen);
141 void OnScreen_MouseUp(FX_BOOL bModifier,
142 FX_BOOL bShift,
143 CPDFSDK_Annot* pScreen);
144 void OnScreen_MouseEnter(FX_BOOL bModifier,
145 FX_BOOL bShift,
146 CPDFSDK_Annot* pScreen);
147 void OnScreen_MouseExit(FX_BOOL bModifier,
148 FX_BOOL bShift,
149 CPDFSDK_Annot* pScreen);
150 void OnScreen_InView(FX_BOOL bModifier,
151 FX_BOOL bShift,
152 CPDFSDK_Annot* pScreen);
153 void OnScreen_OutView(FX_BOOL bModifier,
154 FX_BOOL bShift,
155 CPDFSDK_Annot* pScreen);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700156
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700157 void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark);
dsinclair4526faf2016-10-11 10:54:49 -0700158 void OnLink_MouseUp(CPDFSDK_FormFillEnvironment* pFormFillEnv);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700159
dsinclair4526faf2016-10-11 10:54:49 -0700160 void OnMenu_Exec(CPDFSDK_FormFillEnvironment* pFormFillEnv,
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700161 const CFX_WideString& strTargetName);
dsinclair4526faf2016-10-11 10:54:49 -0700162 void OnBatchExec(CPDFSDK_FormFillEnvironment* pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700163 void OnConsole_Exec();
164 void OnExternal_Exec();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700165
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700166 public:
167 void Initial(JS_EVENT_T type);
168 void Destroy();
169 FX_BOOL IsValid();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700170
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700171 CFX_WideString& Change();
172 CFX_WideString ChangeEx();
173 int CommitKey();
174 FX_BOOL FieldFull();
175 FX_BOOL KeyDown();
176 FX_BOOL Modifier();
177 const FX_WCHAR* Name();
178 const FX_WCHAR* Type();
179 FX_BOOL& Rc();
180 int& SelEnd();
181 int& SelStart();
182 FX_BOOL Shift();
183 Field* Source();
184 Field* Target_Field();
185 CFX_WideString& Value();
186 FX_BOOL WillCommit();
187 CFX_WideString TargetName();
Lei Zhanga6d9f0e2015-06-13 00:48:38 -0700188
Lei Zhang09985382015-08-14 22:23:47 -0700189 JS_EVENT_T EventType() { return m_eEventType; }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700190
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700191 public:
192 CJS_Context* m_pJSContext;
193 JS_EVENT_T m_eEventType;
194 FX_BOOL m_bValid;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700195
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700196 CFX_WideString m_strTargetName;
197 CFX_WideString m_strSourceName;
198 CFX_WideString* m_pWideStrChange;
199 CFX_WideString m_WideStrChangeDu;
200 CFX_WideString m_WideStrChangeEx;
201 int m_nCommitKey;
202 FX_BOOL m_bKeyDown;
203 FX_BOOL m_bModifier;
204 FX_BOOL m_bShift;
205 int* m_pISelEnd;
206 int m_nSelEndDu;
207 int* m_pISelStart;
208 int m_nSelStartDu;
209 FX_BOOL m_bWillCommit;
210 CFX_WideString* m_pValue;
211 FX_BOOL m_bFieldFull;
212 FX_BOOL* m_pbRc;
213 FX_BOOL m_bRcDu;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700214
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700215 CPDF_Bookmark* m_pTargetBookMark;
dsinclair4526faf2016-10-11 10:54:49 -0700216 CPDFSDK_FormFillEnvironment* m_pTargetFormFillEnv;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700217 CPDFSDK_Annot* m_pTargetAnnot;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700218};
219
Dan Sinclairf766ad22016-03-14 13:51:24 -0400220#endif // FPDFSDK_JAVASCRIPT_JS_EVENTHANDLER_H_