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_pEvi(pEvi), 16 m_pFormActionHandler(NULL), 17 m_pMediaActionHandler(NULL) 18 { 19 m_pFormActionHandler = new CPDFSDK_FormActionHandler; 20 } 21 22 CPDFSDK_ActionHandler::~CPDFSDK_ActionHandler() 23 { 24 if(m_pFormActionHandler) 25 { 26 delete m_pFormActionHandler; 27 m_pFormActionHandler = NULL; 28 } 29 } 30 31 void CPDFSDK_ActionHandler::SetFormActionHandler(CPDFSDK_FormActionHandler* pHandler) 32 { 33 ASSERT(pHandler != NULL); 34 ASSERT(m_pFormActionHandler == NULL); 35 m_pFormActionHandler = pHandler; 36 } 37 38 void CPDFSDK_ActionHandler::SetMediaActionHandler(CPDFSDK_MediaActionHandler* pHandler) 39 { 40 ASSERT(pHandler != NULL); 41 ASSERT(m_pMediaActionHandler == NULL); 42 m_pMediaActionHandler = pHandler; 43 } 44 45 void CPDFSDK_ActionHandler::Destroy() 46 { 47 delete this; 48 } 49 50 //document open 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 602 void CPDFSDK_ActionHandler::DoAction_GoToR(CPDFSDK_Document* pDocument, const CPDF_Action& action) 603 { 604 605 } 606 607 void CPDFSDK_ActionHandler::DoAction_Launch(CPDFSDK_Document* pDocument, const CPDF_Action& action) 608 { 609 610 } 611 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 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 634 void CPDFSDK_ActionHandler::DoAction_SetOCGState(CPDFSDK_Document* pDocument,/* CReader_DocView* pDocView,*/ const CPDF_Action& action) 635 { 636 } 637 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 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 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 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 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 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 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 836 FX_BOOL CPDFSDK_MediaActionHandler::DoAction_Rendition(const CPDF_Action& action, CPDFSDK_Document* pDocument) 837 { 838 return FALSE; 839 } 840 841 FX_BOOL CPDFSDK_MediaActionHandler::DoAction_Sound(const CPDF_Action& action, CPDFSDK_Document* pDocument) 842 { 843 return FALSE; 844 } 845 846 FX_BOOL CPDFSDK_MediaActionHandler::DoAction_Movie(const CPDF_Action& action, CPDFSDK_Document* pDocument) 847 { 848 return FALSE; 849 } 850 851