blob: 8273b41cc5aa73c77df01f705633a4054c4d7d85 [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
Tom Sepezcc205132017-05-16 14:01:47 -070010#include "core/fxcrt/cfx_unowned_ptr.h"
dsinclaira52ab742016-09-29 13:59:29 -070011#include "core/fxcrt/fx_string.h"
12#include "core/fxcrt/fx_system.h"
Tom Sepez77f6d0f2017-02-23 12:14:10 -080013#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
Tom Sepez9a3f8122015-04-07 15:35:48 -070014
Tom Sepezd6ae2af2017-02-16 11:49:55 -080015class CJS_EventContext;
Tom Sepez9a3f8122015-04-07 15:35:48 -070016class CPDFSDK_Annot;
Tom Sepez9a3f8122015-04-07 15:35:48 -070017class CPDF_Bookmark;
18class CPDF_FormField;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070019class Field;
20
Nico Weber9d8ec5a2015-08-04 13:00:21 -070021enum JS_EVENT_T {
22 JET_UNKNOWN,
23 JET_APP_INIT,
24 JET_DOC_OPEN,
25 JET_DOC_WILLPRINT,
26 JET_DOC_DIDPRINT,
27 JET_DOC_WILLSAVE,
28 JET_DOC_DIDSAVE,
29 JET_DOC_WILLCLOSE,
30 JET_PAGE_OPEN,
31 JET_PAGE_CLOSE,
32 JET_PAGE_INVIEW,
33 JET_PAGE_OUTVIEW,
34 JET_FIELD_MOUSEDOWN,
35 JET_FIELD_MOUSEUP,
36 JET_FIELD_MOUSEENTER,
37 JET_FIELD_MOUSEEXIT,
38 JET_FIELD_FOCUS,
39 JET_FIELD_BLUR,
40 JET_FIELD_KEYSTROKE,
41 JET_FIELD_VALIDATE,
42 JET_FIELD_CALCULATE,
43 JET_FIELD_FORMAT,
44 JET_SCREEN_FOCUS,
45 JET_SCREEN_BLUR,
46 JET_SCREEN_OPEN,
47 JET_SCREEN_CLOSE,
48 JET_SCREEN_MOUSEDOWN,
49 JET_SCREEN_MOUSEUP,
50 JET_SCREEN_MOUSEENTER,
51 JET_SCREEN_MOUSEEXIT,
52 JET_SCREEN_INVIEW,
53 JET_SCREEN_OUTVIEW,
54 JET_BATCH_EXEC,
55 JET_MENU_EXEC,
56 JET_CONSOLE_EXEC,
57 JET_EXTERNAL_EXEC,
58 JET_BOOKMARK_MOUSEUP,
59 JET_LINK_MOUSEUP
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070060};
61
Nico Weber9d8ec5a2015-08-04 13:00:21 -070062class CJS_EventHandler {
63 public:
Tom Sepezd6ae2af2017-02-16 11:49:55 -080064 explicit CJS_EventHandler(CJS_EventContext* pContext);
Nico Weber9d8ec5a2015-08-04 13:00:21 -070065 virtual ~CJS_EventHandler();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070066
Nico Weber9d8ec5a2015-08-04 13:00:21 -070067 void OnApp_Init();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070068
dsinclair4526faf2016-10-11 10:54:49 -070069 void OnDoc_Open(CPDFSDK_FormFillEnvironment* pFormFillEnv,
Ryan Harrison275e2602017-09-18 14:23:18 -040070 const WideString& strTargetName);
dsinclair4526faf2016-10-11 10:54:49 -070071 void OnDoc_WillPrint(CPDFSDK_FormFillEnvironment* pFormFillEnv);
72 void OnDoc_DidPrint(CPDFSDK_FormFillEnvironment* pFormFillEnv);
73 void OnDoc_WillSave(CPDFSDK_FormFillEnvironment* pFormFillEnv);
74 void OnDoc_DidSave(CPDFSDK_FormFillEnvironment* pFormFillEnv);
75 void OnDoc_WillClose(CPDFSDK_FormFillEnvironment* pFormFillEnv);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070076
dsinclair4526faf2016-10-11 10:54:49 -070077 void OnPage_Open(CPDFSDK_FormFillEnvironment* pFormFillEnv);
78 void OnPage_Close(CPDFSDK_FormFillEnvironment* pFormFillEnv);
79 void OnPage_InView(CPDFSDK_FormFillEnvironment* pFormFillEnv);
80 void OnPage_OutView(CPDFSDK_FormFillEnvironment* pFormFillEnv);
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070081
Nico Weber9d8ec5a2015-08-04 13:00:21 -070082 void OnField_Calculate(CPDF_FormField* pSource,
83 CPDF_FormField* pTarget,
Ryan Harrison275e2602017-09-18 14:23:18 -040084 WideString& Value,
tsepez4cf55152016-11-02 14:37:54 -070085 bool& bRc);
Nico Weber9d8ec5a2015-08-04 13:00:21 -070086 void OnField_Format(CPDF_FormField* pTarget,
Ryan Harrison275e2602017-09-18 14:23:18 -040087 WideString& Value,
tsepez4cf55152016-11-02 14:37:54 -070088 bool bWillCommit);
Ryan Harrison275e2602017-09-18 14:23:18 -040089 void OnField_Keystroke(WideString& strChange,
90 const WideString& strChangeEx,
tsepez4cf55152016-11-02 14:37:54 -070091 bool KeyDown,
92 bool bModifier,
Nico Weber9d8ec5a2015-08-04 13:00:21 -070093 int& nSelEnd,
94 int& nSelStart,
tsepez4cf55152016-11-02 14:37:54 -070095 bool bShift,
Nico Weber9d8ec5a2015-08-04 13:00:21 -070096 CPDF_FormField* pTarget,
Ryan Harrison275e2602017-09-18 14:23:18 -040097 WideString& Value,
tsepez4cf55152016-11-02 14:37:54 -070098 bool bWillCommit,
99 bool bFieldFull,
100 bool& bRc);
Ryan Harrison275e2602017-09-18 14:23:18 -0400101 void OnField_Validate(WideString& strChange,
102 const WideString& strChangeEx,
tsepez4cf55152016-11-02 14:37:54 -0700103 bool bKeyDown,
104 bool bModifier,
105 bool bShift,
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700106 CPDF_FormField* pTarget,
Ryan Harrison275e2602017-09-18 14:23:18 -0400107 WideString& Value,
tsepez4cf55152016-11-02 14:37:54 -0700108 bool& bRc);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700109
tsepez4cf55152016-11-02 14:37:54 -0700110 void OnField_MouseDown(bool bModifier, bool bShift, CPDF_FormField* pTarget);
111 void OnField_MouseEnter(bool bModifier, bool bShift, CPDF_FormField* pTarget);
112 void OnField_MouseExit(bool bModifier, bool bShift, CPDF_FormField* pTarget);
113 void OnField_MouseUp(bool bModifier, bool bShift, CPDF_FormField* pTarget);
114 void OnField_Blur(bool bModifier,
115 bool bShift,
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700116 CPDF_FormField* pTarget,
Ryan Harrison275e2602017-09-18 14:23:18 -0400117 const WideString& Value);
tsepez4cf55152016-11-02 14:37:54 -0700118 void OnField_Focus(bool bModifier,
119 bool bShift,
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700120 CPDF_FormField* pTarget,
Ryan Harrison275e2602017-09-18 14:23:18 -0400121 const WideString& Value);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700122
tsepez4cf55152016-11-02 14:37:54 -0700123 void OnScreen_Focus(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
124 void OnScreen_Blur(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
125 void OnScreen_Open(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
126 void OnScreen_Close(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
127 void OnScreen_MouseDown(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
128 void OnScreen_MouseUp(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
129 void OnScreen_MouseEnter(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
130 void OnScreen_MouseExit(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
131 void OnScreen_InView(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
132 void OnScreen_OutView(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700133
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700134 void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark);
dsinclair4526faf2016-10-11 10:54:49 -0700135 void OnLink_MouseUp(CPDFSDK_FormFillEnvironment* pFormFillEnv);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700136
dsinclair4526faf2016-10-11 10:54:49 -0700137 void OnMenu_Exec(CPDFSDK_FormFillEnvironment* pFormFillEnv,
Ryan Harrison275e2602017-09-18 14:23:18 -0400138 const WideString& strTargetName);
dsinclair4526faf2016-10-11 10:54:49 -0700139 void OnBatchExec(CPDFSDK_FormFillEnvironment* pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700140 void OnConsole_Exec();
141 void OnExternal_Exec();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700142
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700143 public:
144 void Initial(JS_EVENT_T type);
145 void Destroy();
tsepez4cf55152016-11-02 14:37:54 -0700146 bool IsValid();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700147
Ryan Harrison275e2602017-09-18 14:23:18 -0400148 WideString& Change();
149 WideString ChangeEx();
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700150 int CommitKey();
tsepez4cf55152016-11-02 14:37:54 -0700151 bool FieldFull();
152 bool KeyDown();
153 bool Modifier();
Dan Sinclair812e96c2017-03-13 16:43:37 -0400154 const wchar_t* Name();
155 const wchar_t* Type();
tsepez4cf55152016-11-02 14:37:54 -0700156 bool& Rc();
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700157 int& SelEnd();
158 int& SelStart();
tsepez4cf55152016-11-02 14:37:54 -0700159 bool Shift();
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700160 Field* Source();
161 Field* Target_Field();
Ryan Harrison275e2602017-09-18 14:23:18 -0400162 WideString& Value();
tsepez4cf55152016-11-02 14:37:54 -0700163 bool WillCommit();
Ryan Harrison275e2602017-09-18 14:23:18 -0400164 WideString TargetName();
Lei Zhanga6d9f0e2015-06-13 00:48:38 -0700165
Lei Zhang09985382015-08-14 22:23:47 -0700166 JS_EVENT_T EventType() { return m_eEventType; }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700167
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700168 public:
Tom Sepezcc205132017-05-16 14:01:47 -0700169 CFX_UnownedPtr<CJS_EventContext> const m_pJSEventContext;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700170 JS_EVENT_T m_eEventType;
tsepez4cf55152016-11-02 14:37:54 -0700171 bool m_bValid;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700172
Ryan Harrison275e2602017-09-18 14:23:18 -0400173 WideString m_strTargetName;
174 WideString m_strSourceName;
175 CFX_UnownedPtr<WideString> m_pWideStrChange;
176 WideString m_WideStrChangeDu;
177 WideString m_WideStrChangeEx;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700178 int m_nCommitKey;
tsepez4cf55152016-11-02 14:37:54 -0700179 bool m_bKeyDown;
180 bool m_bModifier;
181 bool m_bShift;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700182 int* m_pISelEnd;
183 int m_nSelEndDu;
184 int* m_pISelStart;
185 int m_nSelStartDu;
tsepez4cf55152016-11-02 14:37:54 -0700186 bool m_bWillCommit;
Ryan Harrison275e2602017-09-18 14:23:18 -0400187 CFX_UnownedPtr<WideString> m_pValue;
tsepez4cf55152016-11-02 14:37:54 -0700188 bool m_bFieldFull;
189 bool* m_pbRc;
190 bool m_bRcDu;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700191
Tom Sepezd0409af2017-05-25 15:53:57 -0700192 CFX_UnownedPtr<CPDF_Bookmark> m_pTargetBookMark;
Tom Sepez77f6d0f2017-02-23 12:14:10 -0800193 CPDFSDK_FormFillEnvironment::ObservedPtr m_pTargetFormFillEnv;
194 CPDFSDK_Annot::ObservedPtr m_pTargetAnnot;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700195};
196
Dan Sinclairf766ad22016-03-14 13:51:24 -0400197#endif // FPDFSDK_JAVASCRIPT_JS_EVENTHANDLER_H_