Home | History | Annotate | Download | only in src
      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