blob: ff8ff9e3017387cac02840f1f2c5b989c07df942 [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
Tom Sepezd6ae2af2017-02-16 11:49:55 -080013class CJS_EventContext;
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:
Tom Sepezd6ae2af2017-02-16 11:49:55 -080063 explicit CJS_EventHandler(CJS_EventContext* pContext);
Nico Weber9d8ec5a2015-08-04 13:00:21 -070064 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,
tsepez4cf55152016-11-02 14:37:54 -070084 bool& bRc);
Nico Weber9d8ec5a2015-08-04 13:00:21 -070085 void OnField_Format(CPDF_FormField* pTarget,
86 CFX_WideString& Value,
tsepez4cf55152016-11-02 14:37:54 -070087 bool bWillCommit);
Nico Weber9d8ec5a2015-08-04 13:00:21 -070088 void OnField_Keystroke(CFX_WideString& strChange,
89 const CFX_WideString& strChangeEx,
tsepez4cf55152016-11-02 14:37:54 -070090 bool KeyDown,
91 bool bModifier,
Nico Weber9d8ec5a2015-08-04 13:00:21 -070092 int& nSelEnd,
93 int& nSelStart,
tsepez4cf55152016-11-02 14:37:54 -070094 bool bShift,
Nico Weber9d8ec5a2015-08-04 13:00:21 -070095 CPDF_FormField* pTarget,
96 CFX_WideString& Value,
tsepez4cf55152016-11-02 14:37:54 -070097 bool bWillCommit,
98 bool bFieldFull,
99 bool& bRc);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700100 void OnField_Validate(CFX_WideString& strChange,
101 const CFX_WideString& strChangeEx,
tsepez4cf55152016-11-02 14:37:54 -0700102 bool bKeyDown,
103 bool bModifier,
104 bool bShift,
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700105 CPDF_FormField* pTarget,
106 CFX_WideString& Value,
tsepez4cf55152016-11-02 14:37:54 -0700107 bool& bRc);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700108
tsepez4cf55152016-11-02 14:37:54 -0700109 void OnField_MouseDown(bool bModifier, bool bShift, CPDF_FormField* pTarget);
110 void OnField_MouseEnter(bool bModifier, bool bShift, CPDF_FormField* pTarget);
111 void OnField_MouseExit(bool bModifier, bool bShift, CPDF_FormField* pTarget);
112 void OnField_MouseUp(bool bModifier, bool bShift, CPDF_FormField* pTarget);
113 void OnField_Blur(bool bModifier,
114 bool bShift,
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700115 CPDF_FormField* pTarget,
116 const CFX_WideString& Value);
tsepez4cf55152016-11-02 14:37:54 -0700117 void OnField_Focus(bool bModifier,
118 bool bShift,
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700119 CPDF_FormField* pTarget,
120 const CFX_WideString& Value);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700121
tsepez4cf55152016-11-02 14:37:54 -0700122 void OnScreen_Focus(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
123 void OnScreen_Blur(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
124 void OnScreen_Open(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
125 void OnScreen_Close(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
126 void OnScreen_MouseDown(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
127 void OnScreen_MouseUp(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
128 void OnScreen_MouseEnter(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
129 void OnScreen_MouseExit(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
130 void OnScreen_InView(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
131 void OnScreen_OutView(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700132
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700133 void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark);
dsinclair4526faf2016-10-11 10:54:49 -0700134 void OnLink_MouseUp(CPDFSDK_FormFillEnvironment* pFormFillEnv);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700135
dsinclair4526faf2016-10-11 10:54:49 -0700136 void OnMenu_Exec(CPDFSDK_FormFillEnvironment* pFormFillEnv,
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700137 const CFX_WideString& strTargetName);
dsinclair4526faf2016-10-11 10:54:49 -0700138 void OnBatchExec(CPDFSDK_FormFillEnvironment* pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700139 void OnConsole_Exec();
140 void OnExternal_Exec();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700141
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700142 public:
143 void Initial(JS_EVENT_T type);
144 void Destroy();
tsepez4cf55152016-11-02 14:37:54 -0700145 bool IsValid();
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700146
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700147 CFX_WideString& Change();
148 CFX_WideString ChangeEx();
149 int CommitKey();
tsepez4cf55152016-11-02 14:37:54 -0700150 bool FieldFull();
151 bool KeyDown();
152 bool Modifier();
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700153 const FX_WCHAR* Name();
154 const FX_WCHAR* Type();
tsepez4cf55152016-11-02 14:37:54 -0700155 bool& Rc();
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700156 int& SelEnd();
157 int& SelStart();
tsepez4cf55152016-11-02 14:37:54 -0700158 bool Shift();
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700159 Field* Source();
160 Field* Target_Field();
161 CFX_WideString& Value();
tsepez4cf55152016-11-02 14:37:54 -0700162 bool WillCommit();
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700163 CFX_WideString TargetName();
Lei Zhanga6d9f0e2015-06-13 00:48:38 -0700164
Lei Zhang09985382015-08-14 22:23:47 -0700165 JS_EVENT_T EventType() { return m_eEventType; }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700166
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700167 public:
Tom Sepezd6ae2af2017-02-16 11:49:55 -0800168 CJS_EventContext* const m_pJSEventContext; // Not Owned.
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700169 JS_EVENT_T m_eEventType;
tsepez4cf55152016-11-02 14:37:54 -0700170 bool m_bValid;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700171
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700172 CFX_WideString m_strTargetName;
173 CFX_WideString m_strSourceName;
174 CFX_WideString* m_pWideStrChange;
175 CFX_WideString m_WideStrChangeDu;
176 CFX_WideString m_WideStrChangeEx;
177 int m_nCommitKey;
tsepez4cf55152016-11-02 14:37:54 -0700178 bool m_bKeyDown;
179 bool m_bModifier;
180 bool m_bShift;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700181 int* m_pISelEnd;
182 int m_nSelEndDu;
183 int* m_pISelStart;
184 int m_nSelStartDu;
tsepez4cf55152016-11-02 14:37:54 -0700185 bool m_bWillCommit;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700186 CFX_WideString* m_pValue;
tsepez4cf55152016-11-02 14:37:54 -0700187 bool m_bFieldFull;
188 bool* m_pbRc;
189 bool m_bRcDu;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700190
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700191 CPDF_Bookmark* m_pTargetBookMark;
dsinclair4526faf2016-10-11 10:54:49 -0700192 CPDFSDK_FormFillEnvironment* m_pTargetFormFillEnv;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700193 CPDFSDK_Annot* m_pTargetAnnot;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700194};
195
Dan Sinclairf766ad22016-03-14 13:51:24 -0400196#endif // FPDFSDK_JAVASCRIPT_JS_EVENTHANDLER_H_