1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _JS_EVENTHANDLER_H_
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _JS_EVENTHANDLER_H_
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CJS_Context;
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass Field;
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovenum JS_EVENT_T
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_UNKNOWN,
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_APP_INIT,
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_DOC_OPEN,
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_DOC_WILLPRINT,
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_DOC_DIDPRINT,
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_DOC_WILLSAVE,
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_DOC_DIDSAVE,
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_DOC_WILLCLOSE,
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_PAGE_OPEN,
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_PAGE_CLOSE,
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_PAGE_INVIEW,
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_PAGE_OUTVIEW,
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_FIELD_MOUSEDOWN,
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_FIELD_MOUSEUP,
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_FIELD_MOUSEENTER,
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_FIELD_MOUSEEXIT,
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_FIELD_FOCUS,
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_FIELD_BLUR,
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_FIELD_KEYSTROKE,
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_FIELD_VALIDATE,
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_FIELD_CALCULATE,
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_FIELD_FORMAT,
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_SCREEN_FOCUS,
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_SCREEN_BLUR,
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_SCREEN_OPEN,
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_SCREEN_CLOSE,
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_SCREEN_MOUSEDOWN,
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_SCREEN_MOUSEUP,
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_SCREEN_MOUSEENTER,
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_SCREEN_MOUSEEXIT,
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_SCREEN_INVIEW,
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_SCREEN_OUTVIEW,
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_BATCH_EXEC,
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_MENU_EXEC,
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_CONSOLE_EXEC,
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_EXTERNAL_EXEC,
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_BOOKMARK_MOUSEUP,
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JET_LINK_MOUSEUP
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CJS_EventHandler
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_EventHandler(CJS_Context * pContext);
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CJS_EventHandler();
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnApp_Init();
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName);
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnDoc_WillPrint(CPDFSDK_Document* pDoc);
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnDoc_DidPrint(CPDFSDK_Document* pDoc);
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnDoc_WillSave(CPDFSDK_Document* pDoc);
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnDoc_DidSave(CPDFSDK_Document* pDoc);
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnDoc_WillClose(CPDFSDK_Document* pDoc);
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnPage_Open(CPDFSDK_Document* pDoc);
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnPage_Close(CPDFSDK_Document* pDoc);
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnPage_InView(CPDFSDK_Document* pTarget);
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnPage_OutView(CPDFSDK_Document* pTarget);
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnField_Calculate(CPDF_FormField* pSource, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc);
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnField_Format(int nCommitKey, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit);
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnField_Keystroke(int nCommitKey, CFX_WideString& strChange, const CFX_WideString& strChangeEx,
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								FX_BOOL KeyDown, FX_BOOL bModifier, int &nSelEnd,int &nSelStart, FX_BOOL bShift,
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit,
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								FX_BOOL bFieldFull, FX_BOOL &bRc);
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnField_Validate(CFX_WideString& strChange, const CFX_WideString& strChangeEx, FX_BOOL bKeyDown,
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc);
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnField_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget);
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnField_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget);
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnField_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget);
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnField_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget);
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnField_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value);
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnField_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value);
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnScreen_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnScreen_Close(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnScreen_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnScreen_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnScreen_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnScreen_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnScreen_InView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnScreen_OutView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnBookmark_MouseUp(CPDF_Bookmark* pBookMark);
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnLink_MouseUp(CPDFSDK_Document* pTarget);
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnMenu_Exec(CPDFSDK_Document* pTarget, const CFX_WideString& strTargetName);
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnBatchExec(CPDFSDK_Document *pTarget);
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnConsole_Exec();
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					OnExternal_Exec();
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void					Initial(JS_EVENT_T type);
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void					Destroy();
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					IsValid();
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString&			Change();
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString			ChangeEx();
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int						CommitKey();
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					FieldFull();
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					KeyDown();
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					Modifier();
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_LPCWSTR				Name();
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_LPCWSTR				Type();
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL&				Rc();
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int&					SelEnd();
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int&					SelStart();
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					Shift();
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	Field*					Source();
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	Field*					Target_Field();
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString&			Value();
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					WillCommit();
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString			TargetName();
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_EVENT_T				EventType() {return m_eEventType;};
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context*			m_pJSContext;
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_EVENT_T				m_eEventType;
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					m_bValid;
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString			m_strTargetName;
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString			m_strSourceName;
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString*			m_pWideStrChange;
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString			m_WideStrChangeDu;
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString			m_WideStrChangeEx;
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int						m_nCommitKey;
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					m_bKeyDown;
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					m_bModifier;
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					m_bShift;
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int*					m_pISelEnd;
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int						m_nSelEndDu;
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int*					m_pISelStart;
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int						m_nSelStartDu;
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					m_bWillCommit;
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString*			m_pValue;
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					m_bFieldFull;
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL*				m_pbRc;
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL					m_bRcDu;
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document*		m_pSourceDoc;
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Bookmark*			m_pTargetBookMark;
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document*		m_pTargetDoc;
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Annot*			m_pTargetAnnot;
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif //_JS_EVENTHANDLER_H_
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
168