14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/cscript_hostpseudomodel.h"
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <memory>
104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fxjs/cfxjse_arguments.h"
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/app/xfa_ffnotify.h"
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/cxfa_document.h"
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/cxfa_layoutprocessor.h"
154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/cxfa_scriptcontext.h"
164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/xfa_localemgr.h"
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/xfa_object.h"
184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/xfa_resolvenode_rs.h"
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fxfa/parser/xfa_utils.h"
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannnamespace {
224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCXFA_Node* ToNode(CFXJSE_Value* pValue, CFXJSE_Class* pClass) {
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return static_cast<CXFA_Node*>(pValue->ToHostObject(pClass));
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}  // namespace
284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCScript_HostPseudoModel::CScript_HostPseudoModel(CXFA_Document* pDocument)
304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    : CXFA_Object(pDocument,
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                  XFA_ObjectType::Object,
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                  XFA_Element::HostPseudoModel,
334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                  CFX_WideStringC(L"hostPseudoModel")) {}
344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCScript_HostPseudoModel::~CScript_HostPseudoModel() {}
364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::AppType(CFXJSE_Value* pValue,
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                      bool bSetting,
394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                      XFA_ATTRIBUTE eAttribute) {
404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify)
424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetString("Exchange");
484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::CalculationsEnabled(CFXJSE_Value* pValue,
514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                  bool bSetting,
524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                  XFA_ATTRIBUTE eAttribute) {
534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFDoc* hDoc = pNotify->GetHDOC();
584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNotify->GetDocEnvironment()->SetCalculationsEnabled(hDoc,
604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                         pValue->ToBoolean());
614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetBoolean(pNotify->GetDocEnvironment()->IsCalculationsEnabled(hDoc));
644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::CurrentPage(CFXJSE_Value* pValue,
674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                          bool bSetting,
684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                          XFA_ATTRIBUTE eAttribute) {
694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFDoc* hDoc = pNotify->GetHDOC();
744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNotify->GetDocEnvironment()->SetCurrentPage(hDoc, pValue->ToInteger());
764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetInteger(pNotify->GetDocEnvironment()->GetCurrentPage(hDoc));
794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::Language(CFXJSE_Value* pValue,
824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       bool bSetting,
834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       XFA_ATTRIBUTE eAttribute) {
844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify)
864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowSetLanguageException();
894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetString(
9233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann      pNotify->GetAppProvider()->GetLanguage().UTF8Encode().AsStringC());
934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::NumPages(CFXJSE_Value* pValue,
964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       bool bSetting,
974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       XFA_ATTRIBUTE eAttribute) {
984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFDoc* hDoc = pNotify->GetHDOC();
1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowSetNumPagesException();
1054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetInteger(pNotify->GetDocEnvironment()->CountPages(hDoc));
1084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::Platform(CFXJSE_Value* pValue,
1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       bool bSetting,
1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                       XFA_ATTRIBUTE eAttribute) {
1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify)
1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowSetPlatformException();
1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetString(
12133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann      pNotify->GetAppProvider()->GetPlatform().UTF8Encode().AsStringC());
1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
12333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann
1244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::Title(CFXJSE_Value* pValue,
1254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    bool bSetting,
1264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                    XFA_ATTRIBUTE eAttribute) {
1274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pDocument->GetScriptContext()->IsRunAtClient()) {
1284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
1294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
1314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFDoc* hDoc = pNotify->GetHDOC();
1354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNotify->GetDocEnvironment()->SetTitle(hDoc, pValue->ToWideString());
1374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
1384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsTitle;
1404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->GetDocEnvironment()->GetTitle(hDoc, wsTitle);
14133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  pValue->SetString(wsTitle.UTF8Encode().AsStringC());
1424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::ValidationsEnabled(CFXJSE_Value* pValue,
1454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                 bool bSetting,
1464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                 XFA_ATTRIBUTE eAttribute) {
1474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
1484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
1494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
1504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFDoc* hDoc = pNotify->GetHDOC();
1524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
1534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNotify->GetDocEnvironment()->SetValidationsEnabled(hDoc,
1544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                        pValue->ToBoolean());
1554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
1564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bEnabled = pNotify->GetDocEnvironment()->IsValidationsEnabled(hDoc);
1584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetBoolean(bEnabled);
1594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::Variation(CFXJSE_Value* pValue,
1624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        bool bSetting,
1634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                        XFA_ATTRIBUTE eAttribute) {
1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pDocument->GetScriptContext()->IsRunAtClient())
1654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
1664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
1684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify)
1694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
1704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
1714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowSetVariationException();
1724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
1734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetString("Full");
1754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::Version(CFXJSE_Value* pValue,
1784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                      bool bSetting,
1794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                      XFA_ATTRIBUTE eAttribute) {
1804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
1814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
1834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
1854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowSetVersionException();
1864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
1874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetString("11");
1894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
1904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::Name(CFXJSE_Value* pValue,
1924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   bool bSetting,
1934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                   XFA_ATTRIBUTE eAttribute) {
1944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
1954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
1964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
1974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
1984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bSetting) {
1994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowInvalidPropertyException();
2004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
2014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pValue->SetString(
20333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann      pNotify->GetAppProvider()->GetAppName().UTF8Encode().AsStringC());
2044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::GotoURL(CFXJSE_Arguments* pArguments) {
2074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pDocument->GetScriptContext()->IsRunAtClient()) {
2084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
2094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
2114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 1) {
2124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"gotoURL");
2134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
2144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
2164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
2174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
2184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFDoc* hDoc = pNotify->GetHDOC();
2204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsURL;
2214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 1) {
2224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_ByteString bsURL = pArguments->GetUTF8String(0);
2234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsURL = CFX_WideString::FromUTF8(bsURL.AsStringC());
2244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->GetDocEnvironment()->GotoURL(hDoc, wsURL);
2264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::OpenList(CFXJSE_Arguments* pArguments) {
2284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pDocument->GetScriptContext()->IsRunAtClient()) {
2294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
2304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
2324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 1) {
2334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"openList");
2344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
2354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
2374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
2384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
2394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = nullptr;
2414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 1) {
2424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    std::unique_ptr<CFXJSE_Value> pValue(pArguments->GetValue(0));
2434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pValue->IsObject()) {
2444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNode = ToNode(pValue.get(), nullptr);
2454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (pValue->IsString()) {
2464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
2474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pScriptContext)
2484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return;
2494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Object* pObject = pScriptContext->GetThisObject();
2514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pObject)
2524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return;
2534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Parent |
2554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        XFA_RESOLVENODE_Siblings;
2564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_RESOLVENODE_RS resoveNodeRS;
2574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      int32_t iRet = pScriptContext->ResolveObjects(
2584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pObject, pValue->ToWideString().AsStringC(), resoveNodeRS, dwFlag);
2594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (iRet < 1 || !resoveNodeRS.nodes[0]->IsNode())
2604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return;
2614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
2624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNode = resoveNodeRS.nodes[0]->AsNode();
2634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
2644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_LayoutProcessor* pDocLayout = m_pDocument->GetDocLayout();
2664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pDocLayout) {
2674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
2684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFWidget* hWidget =
2704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNotify->GetHWidget(pDocLayout->GetLayoutItem(pNode));
2714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!hWidget) {
2724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
2734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->GetDocEnvironment()->SetFocusWidget(pNotify->GetHDOC(), hWidget);
2754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->OpenDropDownList(hWidget);
2764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
2774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::Response(CFXJSE_Arguments* pArguments) {
2784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
2794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength < 1 || iLength > 4) {
2804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"response");
2814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
2824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
2844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
2854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
2864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsQuestion;
2884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsTitle;
2894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsDefaultAnswer;
2904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bMark = false;
2914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 1) {
2924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_ByteString bsQuestion = pArguments->GetUTF8String(0);
2934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsQuestion = CFX_WideString::FromUTF8(bsQuestion.AsStringC());
2944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 2) {
2964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_ByteString bsTitle = pArguments->GetUTF8String(1);
2974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsTitle = CFX_WideString::FromUTF8(bsTitle.AsStringC());
2984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
2994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 3) {
3004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_ByteString bsDefaultAnswer = pArguments->GetUTF8String(2);
3014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsDefaultAnswer = CFX_WideString::FromUTF8(bsDefaultAnswer.AsStringC());
3024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 4) {
3044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bMark = pArguments->GetInt32(3) == 0 ? false : true;
3054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsAnswer = pNotify->GetAppProvider()->Response(
3074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      wsQuestion, wsTitle, wsDefaultAnswer, bMark);
3084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFXJSE_Value* pValue = pArguments->GetReturnValue();
3094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pValue)
31033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    pValue->SetString(wsAnswer.UTF8Encode().AsStringC());
3114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
3134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::DocumentInBatch(CFXJSE_Arguments* pArguments) {
3144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (CFXJSE_Value* pValue = pArguments->GetReturnValue())
3154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetInteger(0);
3164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstatic int32_t XFA_FilterName(const CFX_WideStringC& wsExpression,
3184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              int32_t nStart,
3194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                              CFX_WideString& wsFilter) {
3204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ASSERT(nStart > -1);
3214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = wsExpression.GetLength();
3224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (nStart >= iLength) {
3234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return iLength;
3244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_WCHAR* pBuf = wsFilter.GetBuffer(iLength - nStart);
3264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t nCount = 0;
3274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const FX_WCHAR* pSrc = wsExpression.c_str();
3284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  FX_WCHAR wCur;
3294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  while (nStart < iLength) {
3304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wCur = pSrc[nStart++];
3314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (wCur == ',') {
3324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      break;
3334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
3344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pBuf[nCount++] = wCur;
3354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  wsFilter.ReleaseBuffer(nCount);
3374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  wsFilter.TrimLeft();
3384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  wsFilter.TrimRight();
3394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return nStart;
3404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::ResetData(CFXJSE_Arguments* pArguments) {
3424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
3434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength < 0 || iLength > 1) {
3444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"resetData");
3454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
3464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
3484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
3494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
3504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsExpression;
3524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 1) {
3534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_ByteString bsExpression = pArguments->GetUTF8String(0);
3544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsExpression = CFX_WideString::FromUTF8(bsExpression.AsStringC());
3554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (wsExpression.IsEmpty()) {
3574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNotify->ResetData();
3584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
3594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iStart = 0;
3614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsName;
3624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = nullptr;
3634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iExpLength = wsExpression.GetLength();
3644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  while (iStart < iExpLength) {
3654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    iStart = XFA_FilterName(wsExpression.AsStringC(), iStart, wsName);
3664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
3674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pScriptContext) {
3684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return;
3694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
3704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CXFA_Object* pObject = pScriptContext->GetThisObject();
3714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!pObject) {
3724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return;
3734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
3744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Parent |
3754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                      XFA_RESOLVENODE_Siblings;
3764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    XFA_RESOLVENODE_RS resoveNodeRS;
3774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    int32_t iRet = pScriptContext->ResolveObjects(pObject, wsName.AsStringC(),
3784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                  resoveNodeRS, dwFlag);
3794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (iRet < 1 || !resoveNodeRS.nodes[0]->IsNode()) {
3804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      continue;
3814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
3824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNode = resoveNodeRS.nodes[0]->AsNode();
3834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNotify->ResetData(pNode->GetWidgetData());
3844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNode) {
3864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pNotify->ResetData();
3874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
3894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::Beep(CFXJSE_Arguments* pArguments) {
3904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pDocument->GetScriptContext()->IsRunAtClient()) {
3914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
3924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
3944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength < 0 || iLength > 1) {
3954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"beep");
3964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
3974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
3984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
3994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
4004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
4014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dwType = 4;
4034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 1) {
4044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    dwType = pArguments->GetInt32(0);
4054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->GetAppProvider()->Beep(dwType);
4074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::SetFocus(CFXJSE_Arguments* pArguments) {
4094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pDocument->GetScriptContext()->IsRunAtClient()) {
4104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
4114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
4134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 1) {
4144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"setFocus");
4154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
4164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
4184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
4194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
4204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = nullptr;
4224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 1) {
4234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    std::unique_ptr<CFXJSE_Value> pValue(pArguments->GetValue(0));
4244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (pValue->IsObject()) {
4254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNode = ToNode(pValue.get(), nullptr);
4264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    } else if (pValue->IsString()) {
4274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
4284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pScriptContext)
4294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return;
4304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      CXFA_Object* pObject = pScriptContext->GetThisObject();
4324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (!pObject)
4334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return;
4344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Parent |
4364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                        XFA_RESOLVENODE_Siblings;
4374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_RESOLVENODE_RS resoveNodeRS;
4384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      int32_t iRet = pScriptContext->ResolveObjects(
4394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann          pObject, pValue->ToWideString().AsStringC(), resoveNodeRS, dwFlag);
4404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      if (iRet < 1 || !resoveNodeRS.nodes[0]->IsNode())
4414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann        return;
4424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      pNode = resoveNodeRS.nodes[0]->AsNode();
4444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
4454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->SetFocusWidgetNode(pNode);
4474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
4494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::GetFocus(CFXJSE_Arguments* pArguments) {
4504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
4514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
4524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
4534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_Node* pNode = pNotify->GetFocusWidgetNode();
4554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNode) {
4564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
4574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pArguments->GetReturnValue()->Assign(
4594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      m_pDocument->GetScriptContext()->GetJSValueFromMap(pNode));
4604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
4614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::MessageBox(CFXJSE_Arguments* pArguments) {
4624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pDocument->GetScriptContext()->IsRunAtClient()) {
4634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
4644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
4664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength < 1 || iLength > 4) {
4674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"messageBox");
4684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
4694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
4714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
4724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
4734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsMessage;
4754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString bsTitle;
4764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dwMessageType = XFA_MBICON_Error;
4774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dwButtonType = XFA_MB_OK;
4784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 1) {
4794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!ValidateArgsForMsg(pArguments, 0, wsMessage)) {
4804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return;
4814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
4824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 2) {
4844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (!ValidateArgsForMsg(pArguments, 1, bsTitle)) {
4854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      return;
4864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
4874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 3) {
4894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    dwMessageType = pArguments->GetInt32(2);
4904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (dwMessageType > XFA_MBICON_Status) {
4914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      dwMessageType = XFA_MBICON_Error;
4924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
4934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
4944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 4) {
4954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    dwButtonType = pArguments->GetInt32(3);
4964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    if (dwButtonType > XFA_MB_YesNoCancel) {
4974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      dwButtonType = XFA_MB_OK;
4984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    }
4994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iValue = pNotify->GetAppProvider()->MsgBox(
5014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      wsMessage, bsTitle, dwMessageType, dwButtonType);
5024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFXJSE_Value* pValue = pArguments->GetReturnValue();
5034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pValue)
5044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetInteger(iValue);
5054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CScript_HostPseudoModel::ValidateArgsForMsg(CFXJSE_Arguments* pArguments,
5074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                 int32_t iArgIndex,
5084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                                                 CFX_WideString& wsValue) {
5094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pArguments || iArgIndex < 0) {
5104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
5114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bIsJsType = false;
5134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (m_pDocument->GetScriptContext()->GetType() ==
5144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann      XFA_SCRIPTLANGTYPE_Javascript) {
5154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bIsJsType = true;
5164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  std::unique_ptr<CFXJSE_Value> pValueArg(pArguments->GetValue(iArgIndex));
5184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pValueArg->IsString() && bIsJsType) {
5194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowArgumentMismatchException();
5204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return false;
5214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pValueArg->IsNull()) {
52333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    wsValue = L"";
5244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
5254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsValue = pValueArg->ToWideString();
5264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
5284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::DocumentCountInBatch(
5304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFXJSE_Arguments* pArguments) {
5314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (CFXJSE_Value* pValue = pArguments->GetReturnValue())
5324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    pValue->SetInteger(0);
5334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
5344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::Print(CFXJSE_Arguments* pArguments) {
5354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!m_pDocument->GetScriptContext()->IsRunAtClient()) {
5364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
5374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
5394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength != 8) {
5404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"print");
5414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
5424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
5444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
5454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
5464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFDoc* hDoc = pNotify->GetHDOC();
5484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  uint32_t dwOptions = 0;
5494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bShowDialog = true;
5504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 1) {
5514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bShowDialog = pArguments->GetInt32(0) == 0 ? false : true;
5524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bShowDialog) {
5544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    dwOptions |= XFA_PRINTOPT_ShowDialog;
5554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t nStartPage = 0;
5574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 2) {
5584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    nStartPage = pArguments->GetInt32(1);
5594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t nEndPage = 0;
5614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 3) {
5624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    nEndPage = pArguments->GetInt32(2);
5634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bCanCancel = true;
5654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 4) {
5664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bCanCancel = pArguments->GetInt32(3) == 0 ? false : true;
5674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bCanCancel) {
5694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    dwOptions |= XFA_PRINTOPT_CanCancel;
5704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bShrinkPage = true;
5724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 5) {
5734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bShrinkPage = pArguments->GetInt32(4) == 0 ? false : true;
5744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bShrinkPage) {
5764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    dwOptions |= XFA_PRINTOPT_ShrinkPage;
5774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bAsImage = true;
5794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 6) {
5804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bAsImage = pArguments->GetInt32(5) == 0 ? false : true;
5814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bAsImage) {
5834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    dwOptions |= XFA_PRINTOPT_AsImage;
5844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bReverseOrder = true;
5864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 7) {
5874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bAsImage = pArguments->GetInt32(5) == 0 ? false : true;
5884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bReverseOrder = pArguments->GetInt32(6) == 0 ? false : true;
5904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bReverseOrder) {
5914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    dwOptions |= XFA_PRINTOPT_ReverseOrder;
5924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bPrintAnnot = true;
5944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 8) {
5954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bPrintAnnot = pArguments->GetInt32(7) == 0 ? false : true;
5964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
5974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (bPrintAnnot) {
5984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    dwOptions |= XFA_PRINTOPT_PrintAnnot;
5994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->GetDocEnvironment()->Print(hDoc, nStartPage, nEndPage, dwOptions);
6014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::ImportData(CFXJSE_Arguments* pArguments) {
6044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
6054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength < 0 || iLength > 1) {
6064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"importData");
6074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
6084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // Not implemented.
6104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::ExportData(CFXJSE_Arguments* pArguments) {
6134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t iLength = pArguments->GetLength();
6144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength < 0 || iLength > 2) {
6154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    ThrowParamCountMismatchException(L"exportData");
6164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
6174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
6194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
6204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
6214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFDoc* hDoc = pNotify->GetHDOC();
6234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsFilePath;
6244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool bXDP = true;
6254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 1) {
6264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    CFX_ByteString bsFilePath = pArguments->GetUTF8String(0);
6274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    wsFilePath = CFX_WideString::FromUTF8(bsFilePath.AsStringC());
6284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (iLength >= 2) {
6304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    bXDP = pArguments->GetInt32(1) == 0 ? false : true;
6314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->GetDocEnvironment()->ExportData(hDoc, wsFilePath, bXDP);
6334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::PageUp(CFXJSE_Arguments* pArguments) {
6364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
6374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
6384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
6394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFDoc* hDoc = pNotify->GetHDOC();
6414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t nCurPage = pNotify->GetDocEnvironment()->GetCurrentPage(hDoc);
6424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t nNewPage = 0;
6434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (nCurPage <= 1) {
6444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
6454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  nNewPage = nCurPage - 1;
6474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->GetDocEnvironment()->SetCurrentPage(hDoc, nNewPage);
6484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::PageDown(CFXJSE_Arguments* pArguments) {
6514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
6524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
6534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
6544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFDoc* hDoc = pNotify->GetHDOC();
6564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t nCurPage = pNotify->GetDocEnvironment()->GetCurrentPage(hDoc);
6574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t nPageCount = pNotify->GetDocEnvironment()->CountPages(hDoc);
6584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!nPageCount || nCurPage == nPageCount) {
6594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
6604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t nNewPage = 0;
6624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (nCurPage >= nPageCount) {
6634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    nNewPage = nPageCount - 1;
6644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  } else {
6654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    nNewPage = nCurPage + 1;
6664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6674d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pNotify->GetDocEnvironment()->SetCurrentPage(hDoc, nNewPage);
6684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::CurrentDateTime(CFXJSE_Arguments* pArguments) {
6714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
6724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (!pNotify) {
6734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    return;
6744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
6754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_WideString wsDataTime = pNotify->GetCurrentDateTime();
6764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFXJSE_Value* pValue = pArguments->GetReturnValue();
6774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pValue)
67833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann    pValue->SetString(wsDataTime.UTF8Encode().AsStringC());
6794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::ThrowSetLanguageException() const {
6824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ThrowException(L"Unable to set language value.");
6834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::ThrowSetNumPagesException() const {
6864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ThrowException(L"Unable to set numPages value.");
6874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::ThrowSetPlatformException() const {
6904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ThrowException(L"Unable to set platform value.");
6914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::ThrowSetVariationException() const {
6944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ThrowException(L"Unable to set variation value.");
6954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
6964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
6974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CScript_HostPseudoModel::ThrowSetVersionException() const {
6984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ThrowException(L"Unable to set version value.");
6994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
700