FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentOpenAction( const CPDF_Action& action, CPDFSDK_Document* pDocument, CFX_PtrList& list) { CPDF_Dictionary* pDict = action.GetDict(); if (list.Find(pDict)) return FALSE; list.AddTail(pDict); CPDFDoc_Environment* pEnv = pDocument->GetEnv(); ASSERT(pEnv); if (action.GetType() == CPDF_Action::JavaScript) { if (pEnv->IsJSInitiated()) { CFX_WideString swJS = action.GetJavaScript(); if (!swJS.IsEmpty()) { RunDocumentOpenJavaScript(pDocument, L"", swJS); } } } else { DoAction_NoJs(action, pDocument); } for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { CPDF_Action subaction = action.GetSubAction(i); if (!ExecuteDocumentOpenAction(subaction, pDocument, list)) return FALSE; } return TRUE; }
FX_BOOL CPDFSDK_ActionHandler::ExecuteBookMark(const CPDF_Action& action, CPDFSDK_Document* pDocument, /*CReader_DocView* pDocView,*/ CPDF_Bookmark* pBookmark, CFX_PtrList& list) { ASSERT(pDocument != NULL); if (list.Find((CPDF_Dictionary*)action)) return FALSE; list.AddTail((CPDF_Dictionary*)action); CPDFDoc_Environment* pEnv = pDocument->GetEnv(); ASSERT(pEnv); if (action.GetType() == CPDF_Action::JavaScript) { if(pEnv->IsJSInitiated()) { CFX_WideString swJS = action.GetJavaScript(); if (!swJS.IsEmpty()) { IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); ASSERT(pRuntime != NULL); pRuntime->SetReaderDocument(pDocument); IFXJS_Context* pContext = pRuntime->NewContext(); ASSERT(pContext != NULL); pContext->OnBookmark_MouseUp(pBookmark); CFX_WideString csInfo; FX_BOOL bRet = pContext->RunScript(swJS, csInfo); if (!bRet) { //CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo); } pRuntime->ReleaseContext(pContext); } } } else { DoAction_NoJs(action, pDocument/*, pDocView*/); } // if (!IsValidDocView(pDocument, pDocView)) // return FALSE; for (FX_INT32 i=0,sz=action.GetSubActionsCount(); i<sz; i++) { CPDF_Action subaction = action.GetSubAction(i); if (!ExecuteBookMark(subaction, pDocument,/* pDocView,*/ pBookmark, list)) return FALSE; } return TRUE; }
FX_BOOL CPDFSDK_ActionHandler::ExecuteBookMark(const CPDF_Action& action, CPDFSDK_Document* pDocument, CPDF_Bookmark* pBookmark, CFX_PtrList& list) { ASSERT(pDocument != NULL); CPDF_Dictionary* pDict = action.GetDict(); if (list.Find(pDict)) return FALSE; list.AddTail(pDict); CPDFDoc_Environment* pEnv = pDocument->GetEnv(); ASSERT(pEnv); if (action.GetType() == CPDF_Action::JavaScript) { if (pEnv->IsJSInitiated()) { CFX_WideString swJS = action.GetJavaScript(); if (!swJS.IsEmpty()) { IJS_Runtime* pRuntime = pDocument->GetJsRuntime(); pRuntime->SetReaderDocument(pDocument); IJS_Context* pContext = pRuntime->NewContext(); pContext->OnBookmark_MouseUp(pBookmark); CFX_WideString csInfo; FX_BOOL bRet = pContext->RunScript(swJS, &csInfo); if (!bRet) { // FIXME: return error. } pRuntime->ReleaseContext(pContext); } } } else { DoAction_NoJs(action, pDocument); } for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) { CPDF_Action subaction = action.GetSubAction(i); if (!ExecuteBookMark(subaction, pDocument, pBookmark, list)) return FALSE; } return TRUE; }
FX_BOOL CPDFSDK_ActionHandler::ExecuteFieldAction(const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument,/* CReader_DocView* pDocView,*/ CPDF_FormField* pFormField, PDFSDK_FieldAction& data, CFX_PtrList& list) { ASSERT(pDocument != NULL); if (list.Find((CPDF_Dictionary*)action)) return FALSE; list.AddTail((CPDF_Dictionary*)action); CPDFDoc_Environment* pEnv = pDocument->GetEnv(); ASSERT(pEnv); if (action.GetType() == CPDF_Action::JavaScript) { if(pEnv->IsJSInitiated()) { CFX_WideString swJS = action.GetJavaScript(); if (!swJS.IsEmpty()) { RunFieldJavaScript(pDocument, pFormField, type, data, swJS); if (!IsValidField(pDocument, pFormField->GetFieldDict())) return FALSE; } } } else { DoAction_NoJs(action, pDocument/*, pDocView*/); // if (!IsValidDocView(pDocument, pDocView)) // return FALSE; } for (FX_INT32 i=0,sz=action.GetSubActionsCount(); i<sz; i++) { CPDF_Action subaction = action.GetSubAction(i); if (!ExecuteFieldAction(subaction, type, pDocument,/* pDocView,*/ pFormField, data, list)) return FALSE; } return TRUE; }
FX_BOOL CPDFSDK_ActionHandler::ExecuteScreenAction(const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument,/* CReader_DocView* pDocView,*/ CPDFSDK_Annot* pScreen, CFX_PtrList& list) { ASSERT(pDocument != NULL); if (list.Find((CPDF_Dictionary*)action)) return FALSE; list.AddTail((CPDF_Dictionary*)action); CPDFDoc_Environment* pEnv = pDocument->GetEnv(); ASSERT(pEnv); if (action.GetType() == CPDF_Action::JavaScript) { if(pEnv->IsJSInitiated()) { CFX_WideString swJS = action.GetJavaScript(); if (!swJS.IsEmpty()) { IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); ASSERT(pRuntime != NULL); pRuntime->SetReaderDocument(pDocument); IFXJS_Context* pContext = pRuntime->NewContext(); ASSERT(pContext != NULL); // switch (type) // { // case CPDF_AAction::CursorEnter: // pContext->OnScreen_MouseEnter(IsCTRLpressed(), IsSHIFTpressed(), pScreen); // break; // case CPDF_AAction::CursorExit: // pContext->OnScreen_MouseExit(IsCTRLpressed(), IsSHIFTpressed(), pScreen); // break; // case CPDF_AAction::ButtonDown: // pContext->OnScreen_MouseDown(IsCTRLpressed(), IsSHIFTpressed(), pScreen); // break; // case CPDF_AAction::ButtonUp: // pContext->OnScreen_MouseUp(IsCTRLpressed(), IsSHIFTpressed(), pScreen); // break; // case CPDF_AAction::GetFocus: // pContext->OnScreen_Focus(IsCTRLpressed(), IsSHIFTpressed(), pScreen); // break; // case CPDF_AAction::LoseFocus: // pContext->OnScreen_Blur(IsCTRLpressed(), IsSHIFTpressed(), pScreen); // break; // case CPDF_AAction::PageOpen: // pContext->OnScreen_Open(IsCTRLpressed(), IsSHIFTpressed(), pScreen); // break; // case CPDF_AAction::PageClose: // pContext->OnScreen_Close(IsCTRLpressed(), IsSHIFTpressed(), pScreen); // break; // case CPDF_AAction::PageVisible: // pContext->OnScreen_InView(IsCTRLpressed(), IsSHIFTpressed(), pScreen); // break; // case CPDF_AAction::PageInvisible: // pContext->OnScreen_OutView(IsCTRLpressed(), IsSHIFTpressed(), pScreen); // break; // default: // ASSERT(FALSE); // break; // } CFX_WideString csInfo; FX_BOOL bRet = pContext->RunScript(swJS, csInfo); if (!bRet) { //CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo); } pRuntime->ReleaseContext(pContext); } } } else { DoAction_NoJs(action, pDocument/*, pDocView*/); } // if (!IsValidDocView(pDocument, pDocView)) // return FALSE; for (FX_INT32 i=0,sz=action.GetSubActionsCount(); i<sz; i++) { CPDF_Action subaction = action.GetSubAction(i); if (!ExecuteScreenAction(subaction, type, pDocument,/* pDocView,*/ pScreen, list)) return FALSE; } return TRUE; }