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