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