// Copyright 2014 PDFium Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
#include "xfa/src/foxitlib.h" | |
#include "xfa/src/fxfa/src/common/xfa_utils.h" | |
#include "xfa/src/fxfa/src/common/xfa_object.h" | |
#include "xfa/src/fxfa/src/common/xfa_document.h" | |
#include "xfa/src/fxfa/src/common/xfa_parser.h" | |
#include "xfa/src/fxfa/src/common/xfa_script.h" | |
#include "xfa/src/fxfa/src/common/xfa_docdata.h" | |
#include "xfa/src/fxfa/src/common/xfa_doclayout.h" | |
#include "xfa/src/fxfa/src/common/xfa_localemgr.h" | |
#include "xfa/src/fxfa/src/common/xfa_fm2jsapi.h" | |
#include "xfa_script_hostpseudomodel.h" | |
CScript_HostPseudoModel::CScript_HostPseudoModel(CXFA_Document* pDocument) | |
: CXFA_OrdinaryObject(pDocument, XFA_ELEMENT_HostPseudoModel) { | |
m_uScriptHash = XFA_HASHCODE_Host; | |
} | |
CScript_HostPseudoModel::~CScript_HostPseudoModel() {} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_LoadString( | |
FXJSE_HVALUE hValue, | |
IXFA_Notify* pNotify, | |
FX_DWORD dwFlag) { | |
CFX_WideString wsValue; | |
pNotify->GetAppProvider()->LoadString(dwFlag, wsValue); | |
FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsValue)); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_AppType( | |
FXJSE_HVALUE hValue, | |
FX_BOOL bSetting, | |
XFA_ATTRIBUTE eAttribute) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
if (bSetting) { | |
ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); | |
return; | |
} | |
CFX_WideString wsAppType; | |
pNotify->GetAppProvider()->GetAppType(wsAppType); | |
FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsAppType)); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_FoxitAppType( | |
FXJSE_HVALUE hValue, | |
FX_BOOL bSetting, | |
XFA_ATTRIBUTE eAttribute) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
if (bSetting) { | |
ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); | |
return; | |
} | |
CFX_WideString wsAppType; | |
pNotify->GetAppProvider()->GetFoxitAppType(wsAppType); | |
FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsAppType)); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_CalculationsEnabled( | |
FXJSE_HVALUE hValue, | |
FX_BOOL bSetting, | |
XFA_ATTRIBUTE eAttribute) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
IXFA_Doc* hDoc = pNotify->GetHDOC(); | |
if (bSetting) { | |
pNotify->GetDocProvider()->SetCalculationsEnabled( | |
hDoc, FXJSE_Value_ToBoolean(hValue)); | |
return; | |
} | |
FX_BOOL bEnabled = pNotify->GetDocProvider()->IsCalculationsEnabled(hDoc); | |
FXJSE_Value_SetBoolean(hValue, bEnabled); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_CurrentPage( | |
FXJSE_HVALUE hValue, | |
FX_BOOL bSetting, | |
XFA_ATTRIBUTE eAttribute) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
IXFA_Doc* hDoc = pNotify->GetHDOC(); | |
if (bSetting) { | |
pNotify->GetDocProvider()->SetCurrentPage(hDoc, | |
FXJSE_Value_ToInteger(hValue)); | |
return; | |
} | |
int32_t iCurrentPage = pNotify->GetDocProvider()->GetCurrentPage(hDoc); | |
FXJSE_Value_SetInteger(hValue, iCurrentPage); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_Language( | |
FXJSE_HVALUE hValue, | |
FX_BOOL bSetting, | |
XFA_ATTRIBUTE eAttribute) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
if (bSetting) { | |
ThrowScriptErrorMessage(XFA_IDS_UNABLE_SET_LANGUAGE); | |
return; | |
} | |
CFX_WideString wsLanguage; | |
pNotify->GetAppProvider()->GetLanguage(wsLanguage); | |
FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsLanguage)); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_NumPages( | |
FXJSE_HVALUE hValue, | |
FX_BOOL bSetting, | |
XFA_ATTRIBUTE eAttribute) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
IXFA_Doc* hDoc = pNotify->GetHDOC(); | |
if (bSetting) { | |
ThrowScriptErrorMessage(XFA_IDS_UNABLE_SET_NUMPAGES); | |
return; | |
} | |
int32_t iNumPages = pNotify->GetDocProvider()->CountPages(hDoc); | |
FXJSE_Value_SetInteger(hValue, iNumPages); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_Platform( | |
FXJSE_HVALUE hValue, | |
FX_BOOL bSetting, | |
XFA_ATTRIBUTE eAttribute) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
if (bSetting) { | |
ThrowScriptErrorMessage(XFA_IDS_UNABLE_SET_PLATFORM); | |
return; | |
} | |
CFX_WideString wsPlatform; | |
pNotify->GetAppProvider()->GetPlatform(wsPlatform); | |
FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsPlatform)); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_Title( | |
FXJSE_HVALUE hValue, | |
FX_BOOL bSetting, | |
XFA_ATTRIBUTE eAttribute) { | |
if (!m_pDocument->GetScriptContext()->IsRunAtClient()) { | |
return; | |
} | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
IXFA_Doc* hDoc = pNotify->GetHDOC(); | |
if (bSetting) { | |
CFX_ByteString bsValue; | |
FXJSE_Value_ToUTF8String(hValue, bsValue); | |
pNotify->GetDocProvider()->SetTitle( | |
hDoc, CFX_WideString::FromUTF8(bsValue, bsValue.GetLength())); | |
return; | |
} | |
CFX_WideString wsTitle; | |
pNotify->GetDocProvider()->GetTitle(hDoc, wsTitle); | |
FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsTitle)); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_ValidationsEnabled( | |
FXJSE_HVALUE hValue, | |
FX_BOOL bSetting, | |
XFA_ATTRIBUTE eAttribute) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
IXFA_Doc* hDoc = pNotify->GetHDOC(); | |
if (bSetting) { | |
pNotify->GetDocProvider()->SetValidationsEnabled( | |
hDoc, FXJSE_Value_ToBoolean(hValue)); | |
return; | |
} | |
FX_BOOL bEnabled = pNotify->GetDocProvider()->IsValidationsEnabled(hDoc); | |
FXJSE_Value_SetBoolean(hValue, bEnabled); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_Variation( | |
FXJSE_HVALUE hValue, | |
FX_BOOL bSetting, | |
XFA_ATTRIBUTE eAttribute) { | |
if (!m_pDocument->GetScriptContext()->IsRunAtClient()) { | |
return; | |
} | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
if (bSetting) { | |
ThrowScriptErrorMessage(XFA_IDS_UNABLE_SET_VARIATION); | |
return; | |
} | |
CFX_WideString wsVariation; | |
pNotify->GetAppProvider()->GetVariation(wsVariation); | |
FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsVariation)); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_Version( | |
FXJSE_HVALUE hValue, | |
FX_BOOL bSetting, | |
XFA_ATTRIBUTE eAttribute) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
if (bSetting) { | |
ThrowScriptErrorMessage(XFA_IDS_UNABLE_SET_VERSION); | |
return; | |
} | |
CFX_WideString wsVersion; | |
pNotify->GetAppProvider()->GetVersion(wsVersion); | |
FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsVersion)); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_FoxitVersion( | |
FXJSE_HVALUE hValue, | |
FX_BOOL bSetting, | |
XFA_ATTRIBUTE eAttribute) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
if (bSetting) { | |
ThrowScriptErrorMessage(XFA_IDS_UNABLE_SET_VERSION); | |
return; | |
} | |
CFX_WideString wsVersion; | |
pNotify->GetAppProvider()->GetFoxitVersion(wsVersion); | |
FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsVersion)); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_Name( | |
FXJSE_HVALUE hValue, | |
FX_BOOL bSetting, | |
XFA_ATTRIBUTE eAttribute) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
if (bSetting) { | |
ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); | |
return; | |
} | |
CFX_WideString wsAppName; | |
pNotify->GetAppProvider()->GetAppName(wsAppName); | |
FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsAppName)); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_FoxitName( | |
FXJSE_HVALUE hValue, | |
FX_BOOL bSetting, | |
XFA_ATTRIBUTE eAttribute) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
if (bSetting) { | |
ThrowScriptErrorMessage(XFA_IDS_INVAlID_PROP_SET); | |
return; | |
} | |
CFX_WideString wsFoxitAppName; | |
pNotify->GetAppProvider()->GetFoxitAppName(wsFoxitAppName); | |
FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsFoxitAppName)); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_GotoURL( | |
CFXJSE_Arguments* pArguments) { | |
if (!m_pDocument->GetScriptContext()->IsRunAtClient()) { | |
return; | |
} | |
int32_t iLength = pArguments->GetLength(); | |
if (iLength != 1) { | |
ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"gotoURL"); | |
return; | |
} | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
IXFA_Doc* hDoc = pNotify->GetHDOC(); | |
CFX_WideString wsURL; | |
if (iLength >= 1) { | |
CFX_ByteString bsURL = pArguments->GetUTF8String(0); | |
wsURL = CFX_WideString::FromUTF8(bsURL, bsURL.GetLength()); | |
} | |
pNotify->GetDocProvider()->GotoURL(hDoc, wsURL); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_OpenList( | |
CFXJSE_Arguments* pArguments) { | |
if (!m_pDocument->GetScriptContext()->IsRunAtClient()) { | |
return; | |
} | |
int32_t iLength = pArguments->GetLength(); | |
if (iLength != 1) { | |
ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"openList"); | |
return; | |
} | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
CXFA_Node* pNode = NULL; | |
if (iLength >= 1) { | |
FXJSE_HVALUE hValue = pArguments->GetValue(0); | |
if (FXJSE_Value_IsObject(hValue)) { | |
pNode = (CXFA_Node*)FXJSE_Value_ToObject(hValue, NULL); | |
} else if (FXJSE_Value_IsUTF8String(hValue)) { | |
CFX_ByteString bsString; | |
FXJSE_Value_ToUTF8String(hValue, bsString); | |
CFX_WideString wsExpression = | |
CFX_WideString::FromUTF8(bsString, bsString.GetLength()); | |
IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); | |
if (!pScriptContext) { | |
FXJSE_Value_Release(hValue); | |
return; | |
} | |
CXFA_Object* pObject = pScriptContext->GetThisObject(); | |
if (!pObject) { | |
FXJSE_Value_Release(hValue); | |
return; | |
} | |
FX_DWORD dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Parent | | |
XFA_RESOLVENODE_Siblings; | |
XFA_RESOLVENODE_RS resoveNodeRS; | |
int32_t iRet = pScriptContext->ResolveObjects(pObject, wsExpression, | |
resoveNodeRS, dwFlag); | |
if (iRet < 1 || !resoveNodeRS.nodes[0]->IsNode()) { | |
FXJSE_Value_Release(hValue); | |
return; | |
} | |
pNode = (CXFA_Node*)resoveNodeRS.nodes[0]; | |
} | |
FXJSE_Value_Release(hValue); | |
} | |
IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); | |
if (!pDocLayout) { | |
return; | |
} | |
IXFA_Widget* hWidget = pNotify->GetHWidget(pDocLayout->GetLayoutItem(pNode)); | |
if (!hWidget) { | |
return; | |
} | |
pNotify->GetDocProvider()->SetFocusWidget(pNotify->GetHDOC(), hWidget); | |
pNotify->OpenDropDownList(hWidget); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_Response( | |
CFXJSE_Arguments* pArguments) { | |
int32_t iLength = pArguments->GetLength(); | |
if (iLength < 1 || iLength > 4) { | |
ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"response"); | |
return; | |
} | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
CFX_WideString wsQuestion; | |
CFX_WideString wsTitle; | |
CFX_WideString wsDefaultAnswer; | |
FX_BOOL bMark = FALSE; | |
if (iLength >= 1) { | |
CFX_ByteString bsQuestion = pArguments->GetUTF8String(0); | |
wsQuestion = CFX_WideString::FromUTF8(bsQuestion, bsQuestion.GetLength()); | |
} | |
if (iLength >= 2) { | |
CFX_ByteString bsTitle = pArguments->GetUTF8String(1); | |
wsTitle = CFX_WideString::FromUTF8(bsTitle, bsTitle.GetLength()); | |
} | |
if (iLength >= 3) { | |
CFX_ByteString bsDefaultAnswer = pArguments->GetUTF8String(2); | |
wsDefaultAnswer = | |
CFX_WideString::FromUTF8(bsDefaultAnswer, bsDefaultAnswer.GetLength()); | |
} | |
if (iLength >= 4) { | |
bMark = pArguments->GetInt32(3) == 0 ? FALSE : TRUE; | |
} | |
CFX_WideString wsAnswer; | |
pNotify->GetAppProvider()->Response(wsAnswer, wsQuestion, wsTitle, | |
wsDefaultAnswer, bMark); | |
FXJSE_HVALUE hValue = pArguments->GetReturnValue(); | |
if (hValue) { | |
FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsAnswer)); | |
} | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_DocumentInBatch( | |
CFXJSE_Arguments* pArguments) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
int32_t iCur = pNotify->GetAppProvider()->GetCurDocumentInBatch(); | |
FXJSE_HVALUE hValue = pArguments->GetReturnValue(); | |
if (hValue) { | |
FXJSE_Value_SetInteger(hValue, iCur); | |
} | |
} | |
static int32_t XFA_FilterName(const CFX_WideStringC& wsExpression, | |
int32_t nStart, | |
CFX_WideString& wsFilter) { | |
FXSYS_assert(nStart > -1); | |
int32_t iLength = wsExpression.GetLength(); | |
if (nStart >= iLength) { | |
return iLength; | |
} | |
FX_WCHAR* pBuf = wsFilter.GetBuffer(iLength - nStart); | |
int32_t nCount = 0; | |
const FX_WCHAR* pSrc = wsExpression.GetPtr(); | |
FX_WCHAR wCur; | |
while (nStart < iLength) { | |
wCur = pSrc[nStart++]; | |
if (wCur == ',') { | |
break; | |
} | |
pBuf[nCount++] = wCur; | |
} | |
wsFilter.ReleaseBuffer(nCount); | |
wsFilter.TrimLeft(); | |
wsFilter.TrimRight(); | |
return nStart; | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_ResetData( | |
CFXJSE_Arguments* pArguments) { | |
int32_t iLength = pArguments->GetLength(); | |
if (iLength < 0 || iLength > 1) { | |
ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"resetData"); | |
return; | |
} | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
CFX_WideString wsExpression; | |
if (iLength >= 1) { | |
CFX_ByteString bsExpression = pArguments->GetUTF8String(0); | |
wsExpression = | |
CFX_WideString::FromUTF8(bsExpression, bsExpression.GetLength()); | |
} | |
if (wsExpression.IsEmpty()) { | |
pNotify->ResetData(); | |
return; | |
} | |
int32_t iStart = 0; | |
CFX_WideString wsName; | |
CXFA_Node* pNode = NULL; | |
int32_t iExpLength = wsExpression.GetLength(); | |
while (iStart < iExpLength) { | |
iStart = XFA_FilterName(wsExpression, iStart, wsName); | |
IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); | |
if (!pScriptContext) { | |
return; | |
} | |
CXFA_Object* pObject = pScriptContext->GetThisObject(); | |
if (!pObject) { | |
return; | |
} | |
FX_DWORD dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Parent | | |
XFA_RESOLVENODE_Siblings; | |
XFA_RESOLVENODE_RS resoveNodeRS; | |
int32_t iRet = | |
pScriptContext->ResolveObjects(pObject, wsName, resoveNodeRS, dwFlag); | |
if (iRet < 1 || !resoveNodeRS.nodes[0]->IsNode()) { | |
continue; | |
} | |
pNode = (CXFA_Node*)resoveNodeRS.nodes[0]; | |
pNotify->ResetData(pNode->GetWidgetData()); | |
} | |
if (!pNode) { | |
pNotify->ResetData(); | |
} | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_Beep( | |
CFXJSE_Arguments* pArguments) { | |
if (!m_pDocument->GetScriptContext()->IsRunAtClient()) { | |
return; | |
} | |
int32_t iLength = pArguments->GetLength(); | |
if (iLength < 0 || iLength > 1) { | |
ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"beep"); | |
return; | |
} | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
FX_DWORD dwType = 4; | |
if (iLength >= 1) { | |
dwType = pArguments->GetInt32(0); | |
} | |
pNotify->GetAppProvider()->Beep(dwType); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_SetFocus( | |
CFXJSE_Arguments* pArguments) { | |
if (!m_pDocument->GetScriptContext()->IsRunAtClient()) { | |
return; | |
} | |
int32_t iLength = pArguments->GetLength(); | |
if (iLength != 1) { | |
ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"setFocus"); | |
return; | |
} | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
CXFA_Node* pNode = NULL; | |
if (iLength >= 1) { | |
FXJSE_HVALUE hValue = pArguments->GetValue(0); | |
if (FXJSE_Value_IsObject(hValue)) { | |
pNode = (CXFA_Node*)FXJSE_Value_ToObject(hValue, NULL); | |
} else if (FXJSE_Value_IsUTF8String(hValue)) { | |
CFX_ByteString bsString; | |
FXJSE_Value_ToUTF8String(hValue, bsString); | |
CFX_WideString wsExpression = | |
CFX_WideString::FromUTF8(bsString, bsString.GetLength()); | |
IXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext(); | |
if (!pScriptContext) { | |
FXJSE_Value_Release(hValue); | |
return; | |
} | |
CXFA_Object* pObject = pScriptContext->GetThisObject(); | |
if (!pObject) { | |
FXJSE_Value_Release(hValue); | |
return; | |
} | |
FX_DWORD dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Parent | | |
XFA_RESOLVENODE_Siblings; | |
XFA_RESOLVENODE_RS resoveNodeRS; | |
int32_t iRet = pScriptContext->ResolveObjects(pObject, wsExpression, | |
resoveNodeRS, dwFlag); | |
if (iRet < 1 || !resoveNodeRS.nodes[0]->IsNode()) { | |
FXJSE_Value_Release(hValue); | |
return; | |
} | |
pNode = (CXFA_Node*)resoveNodeRS.nodes[0]; | |
} | |
FXJSE_Value_Release(hValue); | |
} | |
pNotify->SetFocusWidgetNode(pNode); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_GetFocus( | |
CFXJSE_Arguments* pArguments) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
CXFA_Node* pNode = pNotify->GetFocusWidgetNode(); | |
if (!pNode) { | |
return; | |
} | |
FXJSE_Value_Set(pArguments->GetReturnValue(), | |
m_pDocument->GetScriptContext()->GetJSValueFromMap(pNode)); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_MessageBox( | |
CFXJSE_Arguments* pArguments) { | |
if (!m_pDocument->GetScriptContext()->IsRunAtClient()) { | |
return; | |
} | |
int32_t iLength = pArguments->GetLength(); | |
if (iLength < 1 || iLength > 4) { | |
ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"messageBox"); | |
return; | |
} | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
CFX_WideString wsMessage; | |
CFX_WideString bsTitle; | |
FX_DWORD dwMessageType = XFA_MBICON_Error; | |
FX_DWORD dwButtonType = XFA_MB_OK; | |
if (iLength >= 1) { | |
if (!Script_HostPseudoModel_ValidateArgsForMsg(pArguments, 0, wsMessage)) { | |
return; | |
} | |
} | |
if (iLength >= 2) { | |
if (!Script_HostPseudoModel_ValidateArgsForMsg(pArguments, 1, bsTitle)) { | |
return; | |
} | |
} | |
if (iLength >= 3) { | |
dwMessageType = pArguments->GetInt32(2); | |
if (dwMessageType > XFA_MBICON_Status) { | |
dwMessageType = XFA_MBICON_Error; | |
} | |
} | |
if (iLength >= 4) { | |
dwButtonType = pArguments->GetInt32(3); | |
if (dwButtonType > XFA_MB_YesNoCancel) { | |
dwButtonType = XFA_MB_OK; | |
} | |
} | |
int32_t iValue = pNotify->GetAppProvider()->MsgBox( | |
wsMessage, bsTitle, dwMessageType, dwButtonType); | |
FXJSE_HVALUE hValue = pArguments->GetReturnValue(); | |
if (hValue) { | |
FXJSE_Value_SetInteger(hValue, iValue); | |
} | |
} | |
FX_BOOL CScript_HostPseudoModel::Script_HostPseudoModel_ValidateArgsForMsg( | |
CFXJSE_Arguments* pArguments, | |
int32_t iArgIndex, | |
CFX_WideString& wsValue) { | |
if (pArguments == NULL || iArgIndex < 0) { | |
return FALSE; | |
} | |
FX_BOOL bIsJsType = FALSE; | |
if (m_pDocument->GetScriptContext()->GetType() == | |
XFA_SCRIPTLANGTYPE_Javascript) { | |
bIsJsType = TRUE; | |
} | |
FXJSE_HVALUE hValueArg = pArguments->GetValue(iArgIndex); | |
if (!FXJSE_Value_IsUTF8String(hValueArg) && bIsJsType) { | |
ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH); | |
FXJSE_Value_Release(hValueArg); | |
return FALSE; | |
} | |
if (FXJSE_Value_IsNull(hValueArg)) { | |
wsValue = FX_WSTRC(L""); | |
} else { | |
CFX_ByteString byMessage; | |
FXJSE_Value_ToUTF8String(hValueArg, byMessage); | |
wsValue = CFX_WideString::FromUTF8(byMessage, byMessage.GetLength()); | |
} | |
FXJSE_Value_Release(hValueArg); | |
return TRUE; | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_DocumentCountInBatch( | |
CFXJSE_Arguments* pArguments) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
int32_t iValue = pNotify->GetAppProvider()->GetDocumentCountInBatch(); | |
FXJSE_HVALUE hValue = pArguments->GetReturnValue(); | |
if (hValue) { | |
FXJSE_Value_SetInteger(hValue, iValue); | |
} | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_Print( | |
CFXJSE_Arguments* pArguments) { | |
if (!m_pDocument->GetScriptContext()->IsRunAtClient()) { | |
return; | |
} | |
int32_t iLength = pArguments->GetLength(); | |
if (iLength != 8) { | |
ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"print"); | |
return; | |
} | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
IXFA_Doc* hDoc = pNotify->GetHDOC(); | |
FX_DWORD dwOptions = 0; | |
FX_BOOL bShowDialog = TRUE; | |
if (iLength >= 1) { | |
bShowDialog = pArguments->GetInt32(0) == 0 ? FALSE : TRUE; | |
} | |
if (bShowDialog) { | |
dwOptions |= XFA_PRINTOPT_ShowDialog; | |
} | |
int32_t nStartPage = 0; | |
if (iLength >= 2) { | |
nStartPage = pArguments->GetInt32(1); | |
} | |
int32_t nEndPage = 0; | |
if (iLength >= 3) { | |
nEndPage = pArguments->GetInt32(2); | |
} | |
FX_BOOL bCanCancel = TRUE; | |
if (iLength >= 4) { | |
bCanCancel = pArguments->GetInt32(3) == 0 ? FALSE : TRUE; | |
} | |
if (bCanCancel) { | |
dwOptions |= XFA_PRINTOPT_CanCancel; | |
} | |
FX_BOOL bShrinkPage = TRUE; | |
if (iLength >= 5) { | |
bShrinkPage = pArguments->GetInt32(4) == 0 ? FALSE : TRUE; | |
} | |
if (bShrinkPage) { | |
dwOptions |= XFA_PRINTOPT_ShrinkPage; | |
} | |
FX_BOOL bAsImage = TRUE; | |
if (iLength >= 6) { | |
bAsImage = pArguments->GetInt32(5) == 0 ? FALSE : TRUE; | |
} | |
if (bAsImage) { | |
dwOptions |= XFA_PRINTOPT_AsImage; | |
} | |
FX_BOOL bReverseOrder = TRUE; | |
if (iLength >= 7) { | |
bAsImage = pArguments->GetInt32(5) == 0 ? FALSE : TRUE; | |
} | |
bReverseOrder = pArguments->GetInt32(6) == 0 ? FALSE : TRUE; | |
if (bReverseOrder) { | |
dwOptions |= XFA_PRINTOPT_ReverseOrder; | |
} | |
FX_BOOL bPrintAnnot = TRUE; | |
if (iLength >= 8) { | |
bPrintAnnot = pArguments->GetInt32(7) == 0 ? FALSE : TRUE; | |
} | |
if (bPrintAnnot) { | |
dwOptions |= XFA_PRINTOPT_PrintAnnot; | |
} | |
pNotify->GetDocProvider()->Print(hDoc, nStartPage, nEndPage, dwOptions); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_ImportData( | |
CFXJSE_Arguments* pArguments) { | |
int32_t iLength = pArguments->GetLength(); | |
if (iLength < 0 || iLength > 1) { | |
ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"importData"); | |
return; | |
} | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
CFX_WideString wsFilePath; | |
if (iLength > 0) { | |
CFX_ByteString bsFilePath = pArguments->GetUTF8String(0); | |
wsFilePath = CFX_WideString::FromUTF8(bsFilePath, bsFilePath.GetLength()); | |
} | |
IXFA_Doc* hDoc = pNotify->GetHDOC(); | |
pNotify->GetDocProvider()->ImportData(hDoc, wsFilePath); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_ExportData( | |
CFXJSE_Arguments* pArguments) { | |
int32_t iLength = pArguments->GetLength(); | |
if (iLength < 0 || iLength > 2) { | |
ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"exportData"); | |
return; | |
} | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
IXFA_Doc* hDoc = pNotify->GetHDOC(); | |
CFX_WideString wsFilePath; | |
FX_BOOL bXDP = TRUE; | |
if (iLength >= 1) { | |
CFX_ByteString bsFilePath = pArguments->GetUTF8String(0); | |
wsFilePath = CFX_WideString::FromUTF8(bsFilePath, bsFilePath.GetLength()); | |
} | |
if (iLength >= 2) { | |
bXDP = pArguments->GetInt32(1) == 0 ? FALSE : TRUE; | |
} | |
pNotify->GetDocProvider()->ExportData(hDoc, wsFilePath, bXDP); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_PageUp( | |
CFXJSE_Arguments* pArguments) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
IXFA_Doc* hDoc = pNotify->GetHDOC(); | |
int32_t nCurPage = pNotify->GetDocProvider()->GetCurrentPage(hDoc); | |
int32_t nNewPage = 0; | |
if (nCurPage <= 1) { | |
return; | |
} | |
nNewPage = nCurPage - 1; | |
pNotify->GetDocProvider()->SetCurrentPage(hDoc, nNewPage); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_PageDown( | |
CFXJSE_Arguments* pArguments) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
IXFA_Doc* hDoc = pNotify->GetHDOC(); | |
int32_t nCurPage = pNotify->GetDocProvider()->GetCurrentPage(hDoc); | |
int32_t nPageCount = pNotify->GetDocProvider()->CountPages(hDoc); | |
if (!nPageCount || nCurPage == nPageCount) { | |
return; | |
} | |
int32_t nNewPage = 0; | |
if (nCurPage >= nPageCount) { | |
nNewPage = nPageCount - 1; | |
} else { | |
nNewPage = nCurPage + 1; | |
} | |
pNotify->GetDocProvider()->SetCurrentPage(hDoc, nNewPage); | |
} | |
void CScript_HostPseudoModel::Script_HostPseudoModel_CurrentDateTime( | |
CFXJSE_Arguments* pArguments) { | |
IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); | |
if (!pNotify) { | |
return; | |
} | |
CFX_WideString wsDataTime = pNotify->GetCurrentDateTime(); | |
FXJSE_HVALUE hValue = pArguments->GetReturnValue(); | |
if (hValue) { | |
FXJSE_Value_SetUTF8String(hValue, FX_UTF8Encode(wsDataTime)); | |
} | |
} |