• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "../include/fsdk_define.h"
8 #include "../include/fsdk_mgr.h"
9 #include "../include/fsdk_actionhandler.h"
10 #include "../include/javascript/IJavaScript.h"
11 
12 /* -------------------------- CBA_ActionHandler -------------------------- */
13 
CPDFSDK_ActionHandler(CPDFDoc_Environment * pEvi)14 CPDFSDK_ActionHandler::CPDFSDK_ActionHandler(CPDFDoc_Environment* pEvi) :
15 	m_pEvi(pEvi),
16 	m_pFormActionHandler(NULL),
17 	m_pMediaActionHandler(NULL)
18 {
19 		m_pFormActionHandler = new CPDFSDK_FormActionHandler;
20 }
21 
~CPDFSDK_ActionHandler()22 CPDFSDK_ActionHandler::~CPDFSDK_ActionHandler()
23 {
24 	if(m_pFormActionHandler)
25 	{
26 		delete m_pFormActionHandler;
27 		m_pFormActionHandler = NULL;
28 	}
29 }
30 
SetFormActionHandler(CPDFSDK_FormActionHandler * pHandler)31 void CPDFSDK_ActionHandler::SetFormActionHandler(CPDFSDK_FormActionHandler* pHandler)
32 {
33 	ASSERT(pHandler != NULL);
34 	ASSERT(m_pFormActionHandler == NULL);
35 	m_pFormActionHandler = pHandler;
36 }
37 
SetMediaActionHandler(CPDFSDK_MediaActionHandler * pHandler)38 void CPDFSDK_ActionHandler::SetMediaActionHandler(CPDFSDK_MediaActionHandler* pHandler)
39 {
40 	ASSERT(pHandler != NULL);
41 	ASSERT(m_pMediaActionHandler == NULL);
42 	m_pMediaActionHandler = pHandler;
43 }
44 
Destroy()45 void CPDFSDK_ActionHandler::Destroy()
46 {
47 	delete this;
48 }
49 
50 //document open
DoAction_DocOpen(const CPDF_Action & action,CPDFSDK_Document * pDocument)51 FX_BOOL	CPDFSDK_ActionHandler::DoAction_DocOpen(const CPDF_Action& action, CPDFSDK_Document* pDocument
52 												/*CReader_Document* pDocument, CReader_DocView *pDocView*/)
53 {
54 	CFX_PtrList list;
55 	return ExecuteDocumentOpenAction(action, pDocument, /*pDocView, */list);
56 }
57 
58 //document open
DoAction_JavaScript(const CPDF_Action & JsAction,CFX_WideString csJSName,CPDFSDK_Document * pDocument)59 FX_BOOL	CPDFSDK_ActionHandler::DoAction_JavaScript(const CPDF_Action& JsAction,CFX_WideString csJSName,
60 							CPDFSDK_Document* pDocument/*, CReader_DocView *pDocView*/)
61 {
62 	if (JsAction.GetType() == CPDF_Action::JavaScript)
63 	{
64 		CFX_WideString swJS = JsAction.GetJavaScript();
65 		if (!swJS.IsEmpty())
66 		{
67 			RunDocumentOpenJavaScript(pDocument, csJSName, swJS);
68 			return TRUE;
69 		}
70 	}
71 
72 	return FALSE;
73 }
74 
DoAction_FieldJavaScript(const CPDF_Action & JsAction,CPDF_AAction::AActionType type,CPDFSDK_Document * pDocument,CPDF_FormField * pFormField,PDFSDK_FieldAction & data)75 FX_BOOL	CPDFSDK_ActionHandler::DoAction_FieldJavaScript(const CPDF_Action& JsAction, CPDF_AAction::AActionType type,
76 									CPDFSDK_Document* pDocument, CPDF_FormField* pFormField,
77 									PDFSDK_FieldAction& data)
78 {
79 	CPDFDoc_Environment* pEnv = pDocument->GetEnv();
80 	ASSERT(pEnv);
81 	if (pEnv->IsJSInitiated() && JsAction.GetType() == CPDF_Action::JavaScript)
82 	{
83 		CFX_WideString swJS = JsAction.GetJavaScript();
84 		if (!swJS.IsEmpty())
85 		{
86 			RunFieldJavaScript(pDocument, pFormField, type, data, swJS);
87 			return TRUE;
88 		}
89 	}
90 	return FALSE;
91 }
92 
DoAction_Page(const CPDF_Action & action,enum CPDF_AAction::AActionType eType,CPDFSDK_Document * pDocument)93 FX_BOOL	CPDFSDK_ActionHandler::DoAction_Page(const CPDF_Action& action, enum CPDF_AAction::AActionType eType,
94 										CPDFSDK_Document* pDocument/*, CReader_DocView *pDocView*/)
95 {
96 	CFX_PtrList list;
97 	return ExecuteDocumentPageAction(action, eType, pDocument,/* pDocView,*/ list);
98 }
99 
DoAction_Document(const CPDF_Action & action,enum CPDF_AAction::AActionType eType,CPDFSDK_Document * pDocument)100 FX_BOOL	CPDFSDK_ActionHandler::DoAction_Document(const CPDF_Action& action, enum CPDF_AAction::AActionType eType,
101 											 CPDFSDK_Document* pDocument/*, CReader_DocView *pDocView*/)
102 {
103 	CFX_PtrList list;
104 	return ExecuteDocumentPageAction(action, eType, pDocument,/* pDocView,*/ list);
105 }
106 
DoAction_BookMark(CPDF_Bookmark * pBookMark,const CPDF_Action & action,CPDF_AAction::AActionType type,CPDFSDK_Document * pDocument)107 FX_BOOL	CPDFSDK_ActionHandler::DoAction_BookMark(CPDF_Bookmark *pBookMark, const CPDF_Action& action, CPDF_AAction::AActionType type,
108 							CPDFSDK_Document* pDocument/*, CReader_DocView *pDocView*/)
109 {
110 	CFX_PtrList list;
111 	return this->ExecuteBookMark(action, pDocument,/* pDocView,*/ pBookMark, list);
112 }
113 
DoAction_Screen(const CPDF_Action & action,CPDF_AAction::AActionType type,CPDFSDK_Document * pDocument,CPDFSDK_Annot * pScreen)114 FX_BOOL	CPDFSDK_ActionHandler::DoAction_Screen(const CPDF_Action& action, CPDF_AAction::AActionType type,
115 										CPDFSDK_Document* pDocument,/* CReader_DocView *pDocView,*/ CPDFSDK_Annot* pScreen)
116 {
117 	CFX_PtrList list;
118 	return this->ExecuteScreenAction(action, type, pDocument,/* pDocView,*/ pScreen, list);
119 }
120 
DoAction_Link(const CPDF_Action & action,CPDFSDK_Document * pDocument)121 FX_BOOL	CPDFSDK_ActionHandler::DoAction_Link(const CPDF_Action& action,
122 										CPDFSDK_Document* pDocument/*, CReader_DocView *pDocView*/)
123 {
124 	CFX_PtrList list;
125 	return ExecuteLinkAction(action, pDocument,/* pDocView,*/ list);
126 }
127 
DoAction_Field(const CPDF_Action & action,CPDF_AAction::AActionType type,CPDFSDK_Document * pDocument,CPDF_FormField * pFormField,PDFSDK_FieldAction & data)128 FX_BOOL	CPDFSDK_ActionHandler::DoAction_Field(const CPDF_Action& action, CPDF_AAction::AActionType type,
129 										CPDFSDK_Document* pDocument,/* CReader_DocView *pDocView,*/
130 										CPDF_FormField* pFormField, PDFSDK_FieldAction& data)
131 {
132 	CFX_PtrList list;
133 	return ExecuteFieldAction(action, type, pDocument,/* pDocView,*/ pFormField, data, list);
134 }
135 
ExecuteDocumentOpenAction(const CPDF_Action & action,CPDFSDK_Document * pDocument,CFX_PtrList & list)136 FX_BOOL	CPDFSDK_ActionHandler::ExecuteDocumentOpenAction(const CPDF_Action& action, CPDFSDK_Document* pDocument,
137 													 /*CReader_DocView *pDocView,*/ CFX_PtrList& list)
138 {
139 	ASSERT(pDocument != NULL);
140 
141 	if (list.Find((CPDF_Dictionary*)action))
142 		return FALSE;
143 	list.AddTail((CPDF_Dictionary*)action);
144 
145 	CPDFDoc_Environment* pEnv = pDocument->GetEnv();
146 	ASSERT(pEnv);
147 	if (action.GetType() == CPDF_Action::JavaScript)
148 	{
149 		if(pEnv->IsJSInitiated())
150 		{
151 			CFX_WideString swJS = action.GetJavaScript();
152 			if (!swJS.IsEmpty())
153 			{
154 				RunDocumentOpenJavaScript(pDocument, L"", swJS);
155 			}
156 		}
157 	}
158 	else
159 	{
160 		DoAction_NoJs(action, pDocument/*, pDocView*/);
161 	}
162 
163 // 	if (!IsValidDocView(pDocument, pDocView))
164 // 		return FALSE;
165 
166 	for (FX_INT32 i=0,sz=action.GetSubActionsCount(); i<sz; i++)
167 	{
168 		CPDF_Action subaction = action.GetSubAction(i);
169 		if (!ExecuteDocumentOpenAction(subaction, pDocument,/* pDocView,*/ list)) return FALSE;
170 	}
171 
172 	return TRUE;
173 }
174 
ExecuteLinkAction(const CPDF_Action & action,CPDFSDK_Document * pDocument,CFX_PtrList & list)175 FX_BOOL CPDFSDK_ActionHandler::ExecuteLinkAction(const CPDF_Action& action,	CPDFSDK_Document* pDocument,
176 												 /*CReader_DocView* pDocView,*/ CFX_PtrList& list)
177 {
178 	ASSERT(pDocument != NULL);
179 
180 	if (list.Find((CPDF_Dictionary*)action))
181 		return FALSE;
182 	list.AddTail((CPDF_Dictionary*)action);
183 
184 	CPDFDoc_Environment* pEnv = pDocument->GetEnv();
185 	ASSERT(pEnv);
186 	if (action.GetType() == CPDF_Action::JavaScript)
187 	{
188 		if(pEnv->IsJSInitiated())
189 		{
190 			CFX_WideString swJS = action.GetJavaScript();
191 			if (!swJS.IsEmpty())
192 			{
193 				IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); //????
194 				ASSERT(pRuntime != NULL);
195 
196 				pRuntime->SetReaderDocument(pDocument);
197 
198 				IFXJS_Context* pContext = pRuntime->NewContext();
199 				ASSERT(pContext != NULL);
200 
201 				pContext->OnLink_MouseUp(pDocument);
202 
203 				CFX_WideString csInfo;
204 				FX_BOOL bRet = pContext->RunScript(swJS, csInfo);
205 				if (!bRet)
206 				{
207 					//CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo);
208 				}
209 
210 				pRuntime->ReleaseContext(pContext);
211 			}
212 		}
213 	}
214 	else
215 	{
216 		DoAction_NoJs(action, pDocument/*, pDocView*/);
217 	}
218 
219 // 	if (!IsValidDocView(pDocument, pDocView))
220 // 		return FALSE;
221 
222 	for (FX_INT32 i=0,sz=action.GetSubActionsCount(); i<sz; i++)
223 	{
224 		CPDF_Action subaction = action.GetSubAction(i);
225 		if (!ExecuteLinkAction(subaction, pDocument,/* pDocView,*/ list)) return FALSE;
226 	}
227 
228 	return TRUE;
229 }
230 
ExecuteDocumentPageAction(const CPDF_Action & action,CPDF_AAction::AActionType type,CPDFSDK_Document * pDocument,CFX_PtrList & list)231 FX_BOOL	CPDFSDK_ActionHandler::ExecuteDocumentPageAction(const CPDF_Action& action, CPDF_AAction::AActionType type,
232 												 CPDFSDK_Document* pDocument,/* CReader_DocView* pDocView,*/ CFX_PtrList& list)
233 {
234 	ASSERT(pDocument != NULL);
235 
236 	if (list.Find((CPDF_Dictionary*)action))
237 		return FALSE;
238 	list.AddTail((CPDF_Dictionary*)action);
239 
240 	CPDFDoc_Environment* pEnv = pDocument->GetEnv();
241 	ASSERT(pEnv);
242 	if (action.GetType() == CPDF_Action::JavaScript)
243 	{
244 		if(pEnv->IsJSInitiated())
245 		{
246 			CFX_WideString swJS = action.GetJavaScript();
247 			if (!swJS.IsEmpty())
248 			{
249 				RunDocumentPageJavaScript(pDocument, type, swJS);
250 			}
251 		}
252 	}
253 	else
254 	{
255 		DoAction_NoJs(action, pDocument/*, pDocView*/);
256 	}
257 
258 	if (!IsValidDocView(pDocument/*, pDocView*/))
259 		return FALSE;
260 
261 	for (FX_INT32 i=0,sz=action.GetSubActionsCount(); i<sz; i++)
262 	{
263 		CPDF_Action subaction = action.GetSubAction(i);
264 		if (!ExecuteDocumentPageAction(subaction, type, pDocument,/* pDocView,*/ list)) return FALSE;
265 	}
266 
267 	return TRUE;
268 }
269 
IsValidField(CPDFSDK_Document * pDocument,CPDF_Dictionary * pFieldDict)270 FX_BOOL	CPDFSDK_ActionHandler::IsValidField(CPDFSDK_Document* pDocument, CPDF_Dictionary* pFieldDict)
271 {
272 	ASSERT(m_pEvi != NULL);
273 	ASSERT(pDocument != NULL);
274 	ASSERT(pFieldDict != NULL);
275 
276 	if (1/*m_pApp->IsValidDocument(pDocument)*/)
277 	{
278 		CPDFSDK_InterForm* pInterForm = pDocument->GetInterForm();
279 		ASSERT(pInterForm != NULL);
280 
281 		CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
282 		ASSERT(pPDFInterForm != NULL);
283 
284 		return pPDFInterForm->GetFieldByDict(pFieldDict) != NULL;
285 	}
286 
287 	return FALSE;
288 }
289 
ExecuteFieldAction(const CPDF_Action & action,CPDF_AAction::AActionType type,CPDFSDK_Document * pDocument,CPDF_FormField * pFormField,PDFSDK_FieldAction & data,CFX_PtrList & list)290 FX_BOOL	CPDFSDK_ActionHandler::ExecuteFieldAction(const CPDF_Action& action, CPDF_AAction::AActionType type,
291 										  CPDFSDK_Document* pDocument,/* CReader_DocView* pDocView,*/ CPDF_FormField* pFormField,
292 										  PDFSDK_FieldAction& data, CFX_PtrList& list)
293 {
294 	ASSERT(pDocument != NULL);
295 
296 	if (list.Find((CPDF_Dictionary*)action))
297 		return FALSE;
298 	list.AddTail((CPDF_Dictionary*)action);
299 
300 	CPDFDoc_Environment* pEnv = pDocument->GetEnv();
301 	ASSERT(pEnv);
302 	if (action.GetType() == CPDF_Action::JavaScript)
303 	{
304 		if(pEnv->IsJSInitiated())
305 		{
306 			CFX_WideString swJS = action.GetJavaScript();
307 			if (!swJS.IsEmpty())
308 			{
309 				RunFieldJavaScript(pDocument, pFormField, type, data, swJS);
310 				if (!IsValidField(pDocument, pFormField->GetFieldDict()))
311 					return FALSE;
312 			}
313 		}
314 	}
315 	else
316 	{
317 		DoAction_NoJs(action, pDocument/*, pDocView*/);
318 // 		if (!IsValidDocView(pDocument, pDocView))
319 // 			return FALSE;
320 	}
321 
322 	for (FX_INT32 i=0,sz=action.GetSubActionsCount(); i<sz; i++)
323 	{
324 		CPDF_Action subaction = action.GetSubAction(i);
325 		if (!ExecuteFieldAction(subaction, type, pDocument,/* pDocView,*/ pFormField, data, list)) return FALSE;
326 	}
327 
328 	return TRUE;
329 }
330 
ExecuteScreenAction(const CPDF_Action & action,CPDF_AAction::AActionType type,CPDFSDK_Document * pDocument,CPDFSDK_Annot * pScreen,CFX_PtrList & list)331 FX_BOOL CPDFSDK_ActionHandler::ExecuteScreenAction(const CPDF_Action& action, CPDF_AAction::AActionType type,
332 										CPDFSDK_Document* pDocument,/* CReader_DocView* pDocView,*/ CPDFSDK_Annot* pScreen, CFX_PtrList& list)
333 {
334 	ASSERT(pDocument != NULL);
335 
336 	if (list.Find((CPDF_Dictionary*)action))
337 		return FALSE;
338 	list.AddTail((CPDF_Dictionary*)action);
339 
340 	CPDFDoc_Environment* pEnv = pDocument->GetEnv();
341 	ASSERT(pEnv);
342 	if (action.GetType() == CPDF_Action::JavaScript)
343 	{
344 		if(pEnv->IsJSInitiated())
345 		{
346 			CFX_WideString swJS = action.GetJavaScript();
347 			if (!swJS.IsEmpty())
348 			{
349 				IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime();
350 				ASSERT(pRuntime != NULL);
351 
352 				pRuntime->SetReaderDocument(pDocument);
353 
354 				IFXJS_Context* pContext = pRuntime->NewContext();
355 				ASSERT(pContext != NULL);
356 
357 	// 			switch (type)
358 	// 			{
359 	// 			case CPDF_AAction::CursorEnter:
360 	// 				pContext->OnScreen_MouseEnter(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
361 	// 				break;
362 	// 			case CPDF_AAction::CursorExit:
363 	// 				pContext->OnScreen_MouseExit(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
364 	// 				break;
365 	// 			case CPDF_AAction::ButtonDown:
366 	// 				pContext->OnScreen_MouseDown(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
367 	// 				break;
368 	// 			case CPDF_AAction::ButtonUp:
369 	// 				pContext->OnScreen_MouseUp(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
370 	// 				break;
371 	// 			case CPDF_AAction::GetFocus:
372 	// 				pContext->OnScreen_Focus(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
373 	// 				break;
374 	// 			case CPDF_AAction::LoseFocus:
375 	// 				pContext->OnScreen_Blur(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
376 	// 				break;
377 	// 			case CPDF_AAction::PageOpen:
378 	// 				pContext->OnScreen_Open(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
379 	// 				break;
380 	// 			case CPDF_AAction::PageClose:
381 	// 				pContext->OnScreen_Close(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
382 	// 				break;
383 	// 			case CPDF_AAction::PageVisible:
384 	// 				pContext->OnScreen_InView(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
385 	// 				break;
386 	// 			case CPDF_AAction::PageInvisible:
387 	// 				pContext->OnScreen_OutView(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
388 	// 				break;
389 	// 			default:
390 	// 				ASSERT(FALSE);
391 	// 				break;
392 	// 			}
393 
394 				CFX_WideString csInfo;
395 				FX_BOOL bRet = pContext->RunScript(swJS, csInfo);
396 				if (!bRet)
397 				{
398 					//CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo);
399 				}
400 
401 				pRuntime->ReleaseContext(pContext);
402 			}
403 		}
404 	}
405 	else
406 	{
407 		DoAction_NoJs(action, pDocument/*, pDocView*/);
408 	}
409 
410 // 	if (!IsValidDocView(pDocument, pDocView))
411 // 		return FALSE;
412 
413 	for (FX_INT32 i=0,sz=action.GetSubActionsCount(); i<sz; i++)
414 	{
415 		CPDF_Action subaction = action.GetSubAction(i);
416 		if (!ExecuteScreenAction(subaction, type, pDocument,/* pDocView,*/ pScreen, list)) return FALSE;
417 	}
418 
419 	return TRUE;
420 }
421 
ExecuteBookMark(const CPDF_Action & action,CPDFSDK_Document * pDocument,CPDF_Bookmark * pBookmark,CFX_PtrList & list)422 FX_BOOL	CPDFSDK_ActionHandler::ExecuteBookMark(const CPDF_Action& action, CPDFSDK_Document* pDocument,
423 										/*CReader_DocView* pDocView,*/ CPDF_Bookmark* pBookmark, CFX_PtrList& list)
424 {
425 	ASSERT(pDocument != NULL);
426 
427 	if (list.Find((CPDF_Dictionary*)action))
428 		return FALSE;
429 	list.AddTail((CPDF_Dictionary*)action);
430 
431 	CPDFDoc_Environment* pEnv = pDocument->GetEnv();
432 	ASSERT(pEnv);
433 	if (action.GetType() == CPDF_Action::JavaScript)
434 	{
435 		if(pEnv->IsJSInitiated())
436 		{
437 			CFX_WideString swJS = action.GetJavaScript();
438 			if (!swJS.IsEmpty())
439 			{
440 				IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime();
441 				ASSERT(pRuntime != NULL);
442 
443 				pRuntime->SetReaderDocument(pDocument);
444 
445 				IFXJS_Context* pContext = pRuntime->NewContext();
446 				ASSERT(pContext != NULL);
447 
448 				pContext->OnBookmark_MouseUp(pBookmark);
449 
450 				CFX_WideString csInfo;
451 				FX_BOOL bRet = pContext->RunScript(swJS, csInfo);
452 				if (!bRet)
453 				{
454 					//CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo);
455 				}
456 
457 				pRuntime->ReleaseContext(pContext);
458 			}
459 		}
460 	}
461 	else
462 	{
463 		DoAction_NoJs(action, pDocument/*, pDocView*/);
464 	}
465 
466 // 	if (!IsValidDocView(pDocument, pDocView))
467 // 		return FALSE;
468 
469 	for (FX_INT32 i=0,sz=action.GetSubActionsCount(); i<sz; i++)
470 	{
471 		CPDF_Action subaction = action.GetSubAction(i);
472 		if (!ExecuteBookMark(subaction, pDocument,/* pDocView,*/ pBookmark, list)) return FALSE;
473 	}
474 
475 	return TRUE;
476 }
477 
DoAction_NoJs(const CPDF_Action & action,CPDFSDK_Document * pDocument)478 void CPDFSDK_ActionHandler::DoAction_NoJs(const CPDF_Action& action, CPDFSDK_Document* pDocument/*, CReader_DocView* pDocView*/)
479 {
480 	ASSERT(pDocument != NULL);
481 
482 	switch (action.GetType())
483 	{
484 	case CPDF_Action::GoTo:
485 		DoAction_GoTo(pDocument,/* pDocView,*/ action);
486 		break;
487 	case CPDF_Action::GoToR:
488 		DoAction_GoToR(pDocument, action);
489 		break;
490 	case CPDF_Action::GoToE:
491 		break;
492 	case CPDF_Action::Launch:
493 		DoAction_Launch(pDocument, action);
494 		break;
495 	case CPDF_Action::Thread:
496 		break;
497 	case CPDF_Action::URI:
498 		DoAction_URI(pDocument, action);
499 		break;
500 	case CPDF_Action::Sound:
501 		if (m_pMediaActionHandler)
502 		{
503 			m_pMediaActionHandler->DoAction_Sound(action, pDocument/*, pDocView*/);
504 		}
505 		break;
506 	case CPDF_Action::Movie:
507 		if (m_pMediaActionHandler)
508 		{
509 			m_pMediaActionHandler->DoAction_Movie(action, pDocument/*, pDocView*/);
510 		}
511 		break;
512 	case CPDF_Action::Hide:
513 		if (m_pFormActionHandler)
514 		{
515 			m_pFormActionHandler->DoAction_Hide(action, pDocument);
516 		}
517 		break;
518 	case CPDF_Action::Named:
519 		DoAction_Named(pDocument, action);
520 		break;
521 	case CPDF_Action::SubmitForm:
522 		if (m_pFormActionHandler)
523 		{
524 			m_pFormActionHandler->DoAction_SubmitForm(action, pDocument/*, pDocView*/);
525 		}
526 		break;
527 	case CPDF_Action::ResetForm:
528 		if (m_pFormActionHandler)
529 		{
530 			m_pFormActionHandler->DoAction_ResetForm(action, pDocument);
531 		}
532 		break;
533 	case CPDF_Action::ImportData:
534 		if (m_pFormActionHandler)
535 		{
536 			m_pFormActionHandler->DoAction_ImportData(action, pDocument/*, pDocView*/);
537 		}
538 		break;
539 	case CPDF_Action::JavaScript:
540 		ASSERT(FALSE);
541 		break;
542 	case CPDF_Action::SetOCGState:
543 		DoAction_SetOCGState(pDocument, /*pDocView,*/ action);
544 		break;
545 	case CPDF_Action::Rendition:
546 		if (m_pMediaActionHandler)
547 		{
548 			m_pMediaActionHandler->DoAction_Rendition(action, pDocument/*, pDocView*/);
549 		}
550 		break;
551 	case CPDF_Action::Trans:
552 		break;
553 	case CPDF_Action::GoTo3DView:
554 		break;
555 	default:
556 		break;
557 	}
558 }
559 
IsValidDocView(CPDFSDK_Document * pDocument)560 FX_BOOL	CPDFSDK_ActionHandler::IsValidDocView(CPDFSDK_Document* pDocument/*, CReader_DocView* pDocView*/)
561 {
562 	ASSERT(pDocument != NULL);
563 	//ASSERT(pDocView != NULL);
564 
565 	//return pDocument->IsValidDocView(pDocView);
566 	return TRUE;
567 }
568 
DoAction_GoTo(CPDFSDK_Document * pDocument,const CPDF_Action & action)569 void CPDFSDK_ActionHandler::DoAction_GoTo(CPDFSDK_Document* pDocument, /*CReader_DocView* pDocView,*/
570 								  const CPDF_Action& action)
571 {
572 	ASSERT(pDocument != NULL);
573 //	ASSERT(pDocView != NULL);
574 	ASSERT(action != NULL);
575 
576 	CPDF_Document* pPDFDocument = pDocument->GetDocument();
577 	ASSERT(pPDFDocument != NULL);
578 	CPDFDoc_Environment* pApp = pDocument->GetEnv();
579 	ASSERT(pApp != NULL);
580 
581 	CPDF_Dest MyDest = action.GetDest(pPDFDocument);
582 	int nPageIndex = MyDest.GetPageIndex(pPDFDocument);
583 	int nFitType = MyDest.GetZoomMode();
584 	const CPDF_Array * pMyArray = (CPDF_Array*)MyDest.m_pObj;
585 	float* pPosAry = NULL;
586 	int sizeOfAry = 0;
587 	if (pMyArray != NULL)
588 	{
589 		pPosAry = new float[pMyArray->GetCount()];
590 		int j = 0;
591 		for (int i = 2; i < (int)pMyArray->GetCount(); i++)
592 		{
593 			pPosAry[j++] = pMyArray->GetFloat(i);
594 		}
595 		sizeOfAry = j;
596 	}
597 	pApp->FFI_DoGoToAction(nPageIndex, nFitType, pPosAry, sizeOfAry);
598 	if(pPosAry)
599 		delete[] pPosAry;
600 }
601 
DoAction_GoToR(CPDFSDK_Document * pDocument,const CPDF_Action & action)602 void CPDFSDK_ActionHandler::DoAction_GoToR(CPDFSDK_Document* pDocument, const CPDF_Action& action)
603 {
604 
605 }
606 
DoAction_Launch(CPDFSDK_Document * pDocument,const CPDF_Action & action)607 void CPDFSDK_ActionHandler::DoAction_Launch(CPDFSDK_Document* pDocument, const CPDF_Action& action)
608 {
609 
610 }
611 
DoAction_URI(CPDFSDK_Document * pDocument,const CPDF_Action & action)612 void CPDFSDK_ActionHandler::DoAction_URI(CPDFSDK_Document* pDocument, const CPDF_Action& action)
613 {
614  	ASSERT(pDocument != NULL);
615  	ASSERT(action != NULL);
616 
617  	CPDFDoc_Environment* pApp = pDocument->GetEnv();
618  	ASSERT(pApp != NULL);
619 
620  	CFX_ByteString sURI = action.GetURI(pDocument->GetDocument());
621  	pApp->FFI_DoURIAction(FX_LPCSTR(sURI));
622 }
623 
DoAction_Named(CPDFSDK_Document * pDocument,const CPDF_Action & action)624 void CPDFSDK_ActionHandler::DoAction_Named(CPDFSDK_Document* pDocument, const CPDF_Action& action)
625 {
626  	ASSERT(pDocument != NULL);
627  	ASSERT(action != NULL);
628 
629  	CFX_ByteString csName = action.GetNamedAction();
630  	pDocument->GetEnv()->FFI_ExecuteNamedAction(csName);
631 }
632 
633 
DoAction_SetOCGState(CPDFSDK_Document * pDocument,const CPDF_Action & action)634 void CPDFSDK_ActionHandler::DoAction_SetOCGState(CPDFSDK_Document* pDocument,/* CReader_DocView* pDocView,*/ const CPDF_Action& action)
635 {
636 }
637 
RunFieldJavaScript(CPDFSDK_Document * pDocument,CPDF_FormField * pFormField,CPDF_AAction::AActionType type,PDFSDK_FieldAction & data,const CFX_WideString & script)638 void CPDFSDK_ActionHandler::RunFieldJavaScript(CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, CPDF_AAction::AActionType type,
639 										PDFSDK_FieldAction& data, const CFX_WideString& script)
640 {
641 	ASSERT(type != CPDF_AAction::Calculate);
642 	ASSERT(type != CPDF_AAction::Format);
643 
644 	ASSERT(pDocument != NULL);
645 
646 	IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime();
647 	ASSERT(pRuntime != NULL);
648 
649 	pRuntime->SetReaderDocument(pDocument);
650 
651 	IFXJS_Context* pContext = pRuntime->NewContext();
652 	ASSERT(pContext != NULL);
653 
654 	switch (type)
655 	{
656 	case CPDF_AAction::CursorEnter:
657 		pContext->OnField_MouseEnter(data.bModifier, data.bShift, pFormField);
658 		break;
659 	case CPDF_AAction::CursorExit:
660 		pContext->OnField_MouseExit(data.bModifier, data.bShift, pFormField);
661 		break;
662 	case CPDF_AAction::ButtonDown:
663 		pContext->OnField_MouseDown(data.bModifier, data.bShift, pFormField);
664 		break;
665 	case CPDF_AAction::ButtonUp:
666 		pContext->OnField_MouseUp(data.bModifier, data.bShift, pFormField);
667 		break;
668 	case CPDF_AAction::GetFocus:
669 		pContext->OnField_Focus(data.bModifier, data.bShift, pFormField, data.sValue);
670 		break;
671 	case CPDF_AAction::LoseFocus:
672 		pContext->OnField_Blur(data.bModifier, data.bShift, pFormField, data.sValue);
673 		break;
674 	case CPDF_AAction::KeyStroke:
675 		pContext->OnField_Keystroke(data.nCommitKey, data.sChange, data.sChangeEx, data.bKeyDown,
676 			data.bModifier, data.nSelEnd, data.nSelStart, data.bShift, pFormField, data.sValue,
677 			data.bWillCommit, data.bFieldFull, data.bRC);
678 		break;
679 	case CPDF_AAction::Validate:
680 		pContext->OnField_Validate(data.sChange, data.sChangeEx, data.bKeyDown, data.bModifier,
681 			data.bShift, pFormField, data.sValue, data.bRC);
682 		break;
683 	default:
684 		ASSERT(FALSE);
685 		break;
686 	}
687 
688 	CFX_WideString csInfo;
689 	FX_BOOL bRet = pContext->RunScript(script, csInfo);
690 	if (!bRet)
691 	{
692 		//CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo);
693 	}
694 
695 	pRuntime->ReleaseContext(pContext);
696 }
697 
RunDocumentOpenJavaScript(CPDFSDK_Document * pDocument,const CFX_WideString & sScriptName,const CFX_WideString & script)698 void CPDFSDK_ActionHandler::RunDocumentOpenJavaScript(CPDFSDK_Document* pDocument, const CFX_WideString& sScriptName, const CFX_WideString& script)
699 {
700 	ASSERT(pDocument != NULL);
701 
702 	IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime();
703 	ASSERT(pRuntime != NULL);
704 
705 	pRuntime->SetReaderDocument(pDocument);
706 
707 	IFXJS_Context* pContext = pRuntime->NewContext();
708 	ASSERT(pContext != NULL);
709 
710 	pContext->OnDoc_Open(pDocument, sScriptName);
711 
712 	CFX_WideString csInfo;
713 	FX_BOOL bRet = pContext->RunScript(script, csInfo);
714 	if (!bRet)
715 	{
716 		//CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo);
717 	}
718 
719 	pRuntime->ReleaseContext(pContext);
720 }
721 
RunDocumentPageJavaScript(CPDFSDK_Document * pDocument,CPDF_AAction::AActionType type,const CFX_WideString & script)722 void CPDFSDK_ActionHandler::RunDocumentPageJavaScript(CPDFSDK_Document* pDocument, CPDF_AAction::AActionType type, const CFX_WideString& script)
723 {
724 	ASSERT(pDocument != NULL);
725 
726 	IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime();
727 	ASSERT(pRuntime != NULL);
728 
729 	pRuntime->SetReaderDocument(pDocument);
730 
731 	IFXJS_Context* pContext = pRuntime->NewContext();
732 	ASSERT(pContext != NULL);
733 
734 	switch (type)
735 	{
736 	case CPDF_AAction::OpenPage:
737 		pContext->OnPage_Open(pDocument);
738 		break;
739 	case CPDF_AAction::ClosePage:
740 		pContext->OnPage_Close(pDocument);
741 		break;
742 	case CPDF_AAction::CloseDocument:
743 		pContext->OnDoc_WillClose(pDocument);
744 		break;
745 	case CPDF_AAction::SaveDocument:
746 		pContext->OnDoc_WillSave(pDocument);
747 		break;
748 	case CPDF_AAction::DocumentSaved:
749 		pContext->OnDoc_DidSave(pDocument);
750 		break;
751 	case CPDF_AAction::PrintDocument:
752 		pContext->OnDoc_WillPrint(pDocument);
753 		break;
754 	case CPDF_AAction::DocumentPrinted:
755 		pContext->OnDoc_DidPrint(pDocument);
756 		break;
757 	case CPDF_AAction::PageVisible:
758 		pContext->OnPage_InView(pDocument);
759 		break;
760 	case CPDF_AAction::PageInvisible:
761 		pContext->OnPage_OutView(pDocument);
762 		break;
763 	default:
764 		ASSERT(FALSE);
765 		break;
766 	}
767 
768 	CFX_WideString csInfo;
769 	FX_BOOL bRet = pContext->RunScript(script, csInfo);
770 	if (!bRet)
771 	{
772 		//CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo);
773 	}
774 
775 	pRuntime->ReleaseContext(pContext);
776 }
777 
778 
DoAction_Hide(const CPDF_Action & action,CPDFSDK_Document * pDocument)779 FX_BOOL	CPDFSDK_FormActionHandler::DoAction_Hide(const CPDF_Action& action, CPDFSDK_Document* pDocument)
780 {
781 	ASSERT(pDocument != NULL);
782 
783 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
784 	ASSERT(pInterForm != NULL);
785 
786 	if (pInterForm->DoAction_Hide(action))
787 	{
788 		pDocument->SetChangeMark();
789 		return TRUE;
790 	}
791 
792 	return FALSE;
793 }
794 
DoAction_SubmitForm(const CPDF_Action & action,CPDFSDK_Document * pDocument)795 FX_BOOL	CPDFSDK_FormActionHandler::DoAction_SubmitForm(const CPDF_Action& action, CPDFSDK_Document* pDocument)
796 {
797 	ASSERT(pDocument != NULL);
798 
799 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
800 	ASSERT(pInterForm != NULL);
801 
802 	return pInterForm->DoAction_SubmitForm(action);
803 }
804 
DoAction_ResetForm(const CPDF_Action & action,CPDFSDK_Document * pDocument)805 FX_BOOL	CPDFSDK_FormActionHandler::DoAction_ResetForm(const CPDF_Action& action, CPDFSDK_Document* pDocument)
806 {
807 	ASSERT(pDocument != NULL);
808 
809 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
810 	ASSERT(pInterForm != NULL);
811 
812 	if (pInterForm->DoAction_ResetForm(action))
813 	{
814 		return TRUE;
815 	}
816 
817 	return FALSE;
818 }
819 
DoAction_ImportData(const CPDF_Action & action,CPDFSDK_Document * pDocument)820 FX_BOOL	CPDFSDK_FormActionHandler::DoAction_ImportData(const CPDF_Action& action, CPDFSDK_Document* pDocument)
821 {
822 	ASSERT(pDocument != NULL);
823 
824 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
825 	ASSERT(pInterForm != NULL);
826 
827 	if (pInterForm->DoAction_ImportData(action))
828 	{
829 		pDocument->SetChangeMark();
830 		return TRUE;
831 	}
832 
833 	return FALSE;
834 }
835 
DoAction_Rendition(const CPDF_Action & action,CPDFSDK_Document * pDocument)836 FX_BOOL	CPDFSDK_MediaActionHandler::DoAction_Rendition(const CPDF_Action& action, CPDFSDK_Document* pDocument)
837 {
838 	return FALSE;
839 }
840 
DoAction_Sound(const CPDF_Action & action,CPDFSDK_Document * pDocument)841 FX_BOOL	CPDFSDK_MediaActionHandler::DoAction_Sound(const CPDF_Action& action, CPDFSDK_Document* pDocument)
842 {
843 	return FALSE;
844 }
845 
DoAction_Movie(const CPDF_Action & action,CPDFSDK_Document * pDocument)846 FX_BOOL	CPDFSDK_MediaActionHandler::DoAction_Movie(const CPDF_Action& action, CPDFSDK_Document* pDocument)
847 {
848 	return FALSE;
849 }
850 
851