Index: xfa/src/fxfa/src/parser/xfa_script_layoutpseudomodel.cpp |
diff --git a/xfa/src/fxfa/src/parser/xfa_script_layoutpseudomodel.cpp b/xfa/src/fxfa/src/parser/xfa_script_layoutpseudomodel.cpp |
index 0b344129dc1ea9bc4cfa2d4acdba2e75b80f6c69..851dbcdac2795b39387ef54f5b7bc39176875c85 100644 |
--- a/xfa/src/fxfa/src/parser/xfa_script_layoutpseudomodel.cpp |
+++ b/xfa/src/fxfa/src/parser/xfa_script_layoutpseudomodel.cpp |
@@ -1,551 +1,551 @@ |
-// 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_layoutpseudomodel.h" |
-#include "xfa_document_layout_imp.h" |
-#include "xfa_layout_appadapter.h" |
-CScript_LayoutPseudoModel::CScript_LayoutPseudoModel(CXFA_Document* pDocument) |
- : CXFA_OrdinaryObject(pDocument, XFA_ELEMENT_LayoutPseudoModel) { |
- m_uScriptHash = XFA_HASHCODE_Layout; |
-} |
-CScript_LayoutPseudoModel::~CScript_LayoutPseudoModel() {} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Ready( |
- 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_READY); |
- return; |
- } |
- int32_t iStatus = pNotify->GetLayoutStatus(); |
- FXJSE_Value_SetBoolean(hValue, iStatus >= 2); |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_HWXY( |
- CFXJSE_Arguments* pArguments, |
- XFA_LAYOUTMODEL_HWXY layoutModel) { |
- int32_t iLength = pArguments->GetLength(); |
- if (iLength < 1 || iLength > 3) { |
- const FX_WCHAR* methodName = NULL; |
- switch (layoutModel) { |
- case XFA_LAYOUTMODEL_H: |
- methodName = L"h"; |
- break; |
- case XFA_LAYOUTMODEL_W: |
- methodName = L"w"; |
- break; |
- case XFA_LAYOUTMODEL_X: |
- methodName = L"x"; |
- break; |
- case XFA_LAYOUTMODEL_Y: |
- methodName = L"y"; |
- break; |
- } |
- ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, methodName); |
- return; |
- } |
- CXFA_Node* pNode = NULL; |
- CFX_WideString wsUnit = FX_WSTRC(L"pt"); |
- int32_t iIndex = 0; |
- if (iLength >= 1) { |
- pNode = (CXFA_Node*)pArguments->GetObject(0); |
- } |
- if (iLength >= 2) { |
- CFX_ByteString bsUnit = pArguments->GetUTF8String(1); |
- if (!bsUnit.IsEmpty()) { |
- wsUnit = CFX_WideString::FromUTF8(bsUnit, bsUnit.GetLength()); |
- } |
- } |
- if (iLength >= 3) { |
- iIndex = pArguments->GetInt32(2); |
- } |
- if (!pNode) { |
- return; |
- } |
- IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); |
- if (!pDocLayout) { |
- return; |
- } |
- CFX_RectF rtRect; |
- CXFA_Measurement measure; |
- CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); |
- if (!pLayoutItem) { |
- return; |
- } |
- while (iIndex > 0 && pLayoutItem) { |
- pLayoutItem = pLayoutItem->GetNext(); |
- iIndex--; |
- } |
- FXJSE_HVALUE hValue = pArguments->GetReturnValue(); |
- if (!pLayoutItem) { |
- FXJSE_Value_SetFloat(hValue, 0); |
- return; |
- } |
- pLayoutItem->GetRect(rtRect, TRUE); |
- switch (layoutModel) { |
- case XFA_LAYOUTMODEL_H: |
- measure.Set(rtRect.height, XFA_UNIT_Pt); |
- break; |
- case XFA_LAYOUTMODEL_W: |
- measure.Set(rtRect.width, XFA_UNIT_Pt); |
- break; |
- case XFA_LAYOUTMODEL_X: |
- measure.Set(rtRect.left, XFA_UNIT_Pt); |
- break; |
- case XFA_LAYOUTMODEL_Y: |
- measure.Set(rtRect.top, XFA_UNIT_Pt); |
- break; |
- } |
- XFA_UNIT unit = measure.GetUnit(wsUnit); |
- FX_FLOAT fValue = measure.ToUnit(unit); |
- fValue = FXSYS_round(fValue * 1000) / 1000.0f; |
- if (hValue) { |
- FXJSE_Value_SetFloat(hValue, fValue); |
- } |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_H( |
- CFXJSE_Arguments* pArguments) { |
- Script_LayoutPseudoModel_HWXY(pArguments, XFA_LAYOUTMODEL_H); |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_W( |
- CFXJSE_Arguments* pArguments) { |
- Script_LayoutPseudoModel_HWXY(pArguments, XFA_LAYOUTMODEL_W); |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_X( |
- CFXJSE_Arguments* pArguments) { |
- Script_LayoutPseudoModel_HWXY(pArguments, XFA_LAYOUTMODEL_X); |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Y( |
- CFXJSE_Arguments* pArguments) { |
- Script_LayoutPseudoModel_HWXY(pArguments, XFA_LAYOUTMODEL_Y); |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_NumberedPageCount( |
- CFXJSE_Arguments* pArguments, |
- FX_BOOL bNumbered) { |
- IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); |
- if (!pDocLayout) { |
- return; |
- } |
- int32_t iPageCount = 0; |
- int32_t iPageNum = pDocLayout->CountPages(); |
- if (bNumbered) { |
- for (int32_t i = 0; i < iPageNum; i++) { |
- IXFA_LayoutPage* pLayoutPage = pDocLayout->GetPage(i); |
- if (!pLayoutPage) { |
- continue; |
- } |
- CXFA_Node* pMasterPage = pLayoutPage->GetMasterPage(); |
- if (pMasterPage->GetInteger(XFA_ATTRIBUTE_Numbered)) { |
- iPageCount++; |
- } |
- } |
- } else { |
- iPageCount = iPageNum; |
- } |
- FXJSE_HVALUE hValue = pArguments->GetReturnValue(); |
- if (hValue) { |
- FXJSE_Value_SetInteger(hValue, iPageCount); |
- } |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageCount( |
- CFXJSE_Arguments* pArguments) { |
- Script_LayoutPseudoModel_NumberedPageCount(pArguments, TRUE); |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageSpan( |
- CFXJSE_Arguments* pArguments) { |
- int32_t iLength = pArguments->GetLength(); |
- if (iLength != 1) { |
- ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"pageSpan"); |
- return; |
- } |
- CXFA_Node* pNode = NULL; |
- if (iLength >= 1) { |
- pNode = (CXFA_Node*)pArguments->GetObject(0); |
- } |
- if (!pNode) { |
- return; |
- } |
- IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); |
- if (!pDocLayout) { |
- return; |
- } |
- FXJSE_HVALUE hValue = pArguments->GetReturnValue(); |
- CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); |
- if (!pLayoutItem) { |
- FXJSE_Value_SetInteger(hValue, -1); |
- return; |
- } |
- int32_t iLast = pLayoutItem->GetLast()->GetPage()->GetPageIndex(); |
- int32_t iFirst = pLayoutItem->GetFirst()->GetPage()->GetPageIndex(); |
- int32_t iPageSpan = iLast - iFirst + 1; |
- if (hValue) { |
- FXJSE_Value_SetInteger(hValue, iPageSpan); |
- } |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Page( |
- CFXJSE_Arguments* pArguments) { |
- Script_LayoutPseudoModel_PageImp(pArguments, FALSE); |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_GetObjArray( |
- IXFA_DocLayout* pDocLayout, |
- int32_t iPageNo, |
- const CFX_WideString& wsType, |
- FX_BOOL bOnPageArea, |
- CXFA_NodeArray& retArray) { |
- CXFA_ContainerLayoutItem* pLayoutPage = |
- (CXFA_ContainerLayoutItem*)pDocLayout->GetPage(iPageNo); |
- if (!pLayoutPage) { |
- return; |
- } |
- if (wsType == FX_WSTRC(L"pageArea")) { |
- if (CXFA_Node* pMasterPage = pLayoutPage->m_pFormNode) { |
- retArray.Add(pMasterPage); |
- } |
- return; |
- } |
- if (wsType == FX_WSTRC(L"contentArea")) { |
- for (CXFA_LayoutItem* pItem = pLayoutPage->m_pFirstChild; pItem; |
- pItem = pItem->m_pNextSibling) { |
- if (pItem->m_pFormNode->GetClassID() == XFA_ELEMENT_ContentArea) { |
- retArray.Add(pItem->m_pFormNode); |
- } |
- } |
- return; |
- } |
- CFX_MapPtrToPtr formItems; |
- formItems.InitHashTable(256, TRUE); |
- if (wsType.IsEmpty()) { |
- if (CXFA_Node* pMasterPage = pLayoutPage->m_pFormNode) { |
- retArray.Add(pMasterPage); |
- } |
- for (CXFA_LayoutItem* pItem = pLayoutPage->m_pFirstChild; pItem; |
- pItem = pItem->m_pNextSibling) { |
- if (pItem->m_pFormNode->GetClassID() == XFA_ELEMENT_ContentArea) { |
- retArray.Add(pItem->m_pFormNode); |
- if (!bOnPageArea) { |
- CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem, |
- CXFA_TraverseStrategy_ContentLayoutItem> |
- iterator((CXFA_ContentLayoutItem*)pItem->m_pFirstChild); |
- for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent(); |
- pItemChild; pItemChild = iterator.MoveToNext()) { |
- if (!pItemChild->IsContentLayoutItem()) { |
- continue; |
- } |
- XFA_ELEMENT eElementType = pItemChild->m_pFormNode->GetClassID(); |
- if (eElementType != XFA_ELEMENT_Field && |
- eElementType != XFA_ELEMENT_Draw && |
- eElementType != XFA_ELEMENT_Subform && |
- eElementType != XFA_ELEMENT_Area) { |
- continue; |
- } |
- if (formItems.GetValueAt(pItemChild->m_pFormNode)) { |
- continue; |
- } |
- formItems.SetAt(pItemChild->m_pFormNode, this); |
- retArray.Add(pItemChild->m_pFormNode); |
- } |
- } |
- } else { |
- if (bOnPageArea) { |
- CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem, |
- CXFA_TraverseStrategy_ContentLayoutItem> |
- iterator((CXFA_ContentLayoutItem*)pItem); |
- for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent(); |
- pItemChild; pItemChild = iterator.MoveToNext()) { |
- if (!pItemChild->IsContentLayoutItem()) { |
- continue; |
- } |
- XFA_ELEMENT eElementType = pItemChild->m_pFormNode->GetClassID(); |
- if (eElementType != XFA_ELEMENT_Field && |
- eElementType != XFA_ELEMENT_Draw && |
- eElementType != XFA_ELEMENT_Subform && |
- eElementType != XFA_ELEMENT_Area) { |
- continue; |
- } |
- if (formItems.GetValueAt(pItemChild->m_pFormNode)) { |
- continue; |
- } |
- formItems.SetAt(pItemChild->m_pFormNode, this); |
- retArray.Add(pItemChild->m_pFormNode); |
- } |
- } |
- } |
- } |
- return; |
- } |
- XFA_ELEMENT eType = XFA_ELEMENT_UNKNOWN; |
- if (wsType == FX_WSTRC(L"field")) { |
- eType = XFA_ELEMENT_Field; |
- } else if (wsType == FX_WSTRC(L"draw")) { |
- eType = XFA_ELEMENT_Draw; |
- } else if (wsType == FX_WSTRC(L"subform")) { |
- eType = XFA_ELEMENT_Subform; |
- } else if (wsType == FX_WSTRC(L"area")) { |
- eType = XFA_ELEMENT_Area; |
- } |
- if (eType != XFA_ELEMENT_UNKNOWN) { |
- for (CXFA_LayoutItem* pItem = pLayoutPage->m_pFirstChild; pItem; |
- pItem = pItem->m_pNextSibling) { |
- if (pItem->m_pFormNode->GetClassID() == XFA_ELEMENT_ContentArea) { |
- if (!bOnPageArea) { |
- CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem, |
- CXFA_TraverseStrategy_ContentLayoutItem> |
- iterator((CXFA_ContentLayoutItem*)pItem->m_pFirstChild); |
- for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent(); |
- pItemChild; pItemChild = iterator.MoveToNext()) { |
- if (!pItemChild->IsContentLayoutItem()) { |
- continue; |
- } |
- if (pItemChild->m_pFormNode->GetClassID() != eType) { |
- continue; |
- } |
- if (formItems.GetValueAt(pItemChild->m_pFormNode)) { |
- continue; |
- } |
- formItems.SetAt(pItemChild->m_pFormNode, this); |
- retArray.Add(pItemChild->m_pFormNode); |
- } |
- } |
- } else { |
- if (bOnPageArea) { |
- CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem, |
- CXFA_TraverseStrategy_ContentLayoutItem> |
- iterator((CXFA_ContentLayoutItem*)pItem); |
- for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent(); |
- pItemChild; pItemChild = iterator.MoveToNext()) { |
- if (!pItemChild->IsContentLayoutItem()) { |
- continue; |
- } |
- if (pItemChild->m_pFormNode->GetClassID() != eType) { |
- continue; |
- } |
- if (formItems.GetValueAt(pItemChild->m_pFormNode)) { |
- continue; |
- } |
- formItems.SetAt(pItemChild->m_pFormNode, this); |
- retArray.Add(pItemChild->m_pFormNode); |
- } |
- } |
- } |
- } |
- return; |
- } |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageContent( |
- CFXJSE_Arguments* pArguments) { |
- int32_t iLength = pArguments->GetLength(); |
- if (iLength < 1 || iLength > 3) { |
- ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"pageContent"); |
- return; |
- } |
- int32_t iIndex = 0; |
- CFX_WideString wsType; |
- FX_BOOL bOnPageArea = FALSE; |
- if (iLength >= 1) { |
- iIndex = pArguments->GetInt32(0); |
- } |
- if (iLength >= 2) { |
- CFX_ByteString bsType = pArguments->GetUTF8String(1); |
- wsType = CFX_WideString::FromUTF8(bsType, bsType.GetLength()); |
- } |
- if (iLength >= 3) { |
- bOnPageArea = pArguments->GetInt32(2) == 0 ? FALSE : TRUE; |
- } |
- IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); |
- if (!pNotify) { |
- return; |
- } |
- IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); |
- if (!pDocLayout) { |
- return; |
- } |
- CXFA_NodeArray retArray; |
- Script_LayoutPseudoModel_GetObjArray(pDocLayout, iIndex, wsType, bOnPageArea, |
- retArray); |
- CXFA_ArrayNodeList* pArrayNodeList = new CXFA_ArrayNodeList(m_pDocument); |
- pArrayNodeList->SetArrayNodeList(retArray); |
- FXJSE_Value_SetObject(pArguments->GetReturnValue(), |
- (CXFA_Object*)pArrayNodeList, |
- m_pDocument->GetScriptContext()->GetJseNormalClass()); |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPageCount( |
- CFXJSE_Arguments* pArguments) { |
- Script_LayoutPseudoModel_NumberedPageCount(pArguments, FALSE); |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPageCountInBatch( |
- CFXJSE_Arguments* pArguments) { |
- IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); |
- if (!pNotify) { |
- return; |
- } |
- IXFA_Doc* hDoc = pNotify->GetHDOC(); |
- int32_t iPageCount = pNotify->GetDocProvider()->AbsPageCountInBatch(hDoc); |
- FXJSE_HVALUE hValue = pArguments->GetReturnValue(); |
- if (hValue) { |
- FXJSE_Value_SetInteger(hValue, iPageCount); |
- } |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_SheetCountInBatch( |
- CFXJSE_Arguments* pArguments) { |
- IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); |
- if (!pNotify) { |
- return; |
- } |
- IXFA_Doc* hDoc = pNotify->GetHDOC(); |
- int32_t iPageCount = pNotify->GetDocProvider()->SheetCountInBatch(hDoc); |
- FXJSE_HVALUE hValue = pArguments->GetReturnValue(); |
- if (hValue) { |
- FXJSE_Value_SetInteger(hValue, iPageCount); |
- } |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Relayout( |
- CFXJSE_Arguments* pArguments) { |
- CXFA_Node* pRootNode = m_pDocument->GetRoot(); |
- CXFA_Node* pFormRoot = pRootNode->GetFirstChildByClass(XFA_ELEMENT_Form); |
- FXSYS_assert(pFormRoot); |
- CXFA_Node* pContentRootNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild); |
- CXFA_LayoutProcessor* pLayoutProcessor = m_pDocument->GetLayoutProcessor(); |
- if (pContentRootNode) { |
- pLayoutProcessor->AddChangedContainer(pContentRootNode); |
- } |
- pLayoutProcessor->SetForceReLayout(TRUE); |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPageSpan( |
- CFXJSE_Arguments* pArguments) { |
- Script_LayoutPseudoModel_PageSpan(pArguments); |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPageInBatch( |
- CFXJSE_Arguments* pArguments) { |
- int32_t iLength = pArguments->GetLength(); |
- if (iLength != 1) { |
- ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, |
- L"absPageInBatch"); |
- return; |
- } |
- CXFA_Node* pNode = NULL; |
- if (iLength >= 1) { |
- pNode = (CXFA_Node*)pArguments->GetObject(0); |
- } |
- if (!pNode) { |
- return; |
- } |
- IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); |
- if (!pNotify) { |
- return; |
- } |
- IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); |
- if (!pDocLayout) { |
- return; |
- } |
- IXFA_Widget* hWidget = pNotify->GetHWidget(pDocLayout->GetLayoutItem(pNode)); |
- if (!hWidget) { |
- return; |
- } |
- IXFA_Doc* hDoc = pNotify->GetHDOC(); |
- int32_t iPageCount = pNotify->GetDocProvider()->AbsPageInBatch(hDoc, hWidget); |
- FXJSE_HVALUE hValue = pArguments->GetReturnValue(); |
- if (hValue) { |
- FXJSE_Value_SetInteger(hValue, iPageCount); |
- } |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_SheetInBatch( |
- CFXJSE_Arguments* pArguments) { |
- int32_t iLength = pArguments->GetLength(); |
- if (iLength != 1) { |
- ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, |
- L"sheetInBatch"); |
- return; |
- } |
- CXFA_Node* pNode = NULL; |
- if (iLength >= 1) { |
- pNode = (CXFA_Node*)pArguments->GetObject(0); |
- } |
- if (!pNode) { |
- return; |
- } |
- IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); |
- if (!pNotify) { |
- return; |
- } |
- IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); |
- if (!pDocLayout) { |
- return; |
- } |
- IXFA_Widget* hWidget = pNotify->GetHWidget(pDocLayout->GetLayoutItem(pNode)); |
- if (!hWidget) { |
- return; |
- } |
- IXFA_Doc* hDoc = pNotify->GetHDOC(); |
- int32_t iPageCount = pNotify->GetDocProvider()->SheetInBatch(hDoc, hWidget); |
- FXJSE_HVALUE hValue = pArguments->GetReturnValue(); |
- if (hValue) { |
- FXJSE_Value_SetInteger(hValue, iPageCount); |
- } |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Sheet( |
- CFXJSE_Arguments* pArguments) { |
- Script_LayoutPseudoModel_PageImp(pArguments, TRUE); |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_RelayoutPageArea( |
- CFXJSE_Arguments* pArguments) {} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_SheetCount( |
- CFXJSE_Arguments* pArguments) { |
- Script_LayoutPseudoModel_NumberedPageCount(pArguments, FALSE); |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPage( |
- CFXJSE_Arguments* pArguments) { |
- Script_LayoutPseudoModel_PageImp(pArguments, TRUE); |
-} |
-void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageImp( |
- CFXJSE_Arguments* pArguments, |
- FX_BOOL bAbsPage) { |
- int32_t iLength = pArguments->GetLength(); |
- if (iLength != 1) { |
- const FX_WCHAR* methodName; |
- if (bAbsPage) { |
- methodName = L"absPage"; |
- } else { |
- methodName = L"page"; |
- } |
- ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, methodName); |
- return; |
- } |
- CXFA_Node* pNode = NULL; |
- if (iLength >= 1) { |
- pNode = (CXFA_Node*)pArguments->GetObject(0); |
- } |
- int32_t iPage = 0; |
- FXJSE_HVALUE hValue = pArguments->GetReturnValue(); |
- if (!pNode && hValue) { |
- FXJSE_Value_SetInteger(hValue, iPage); |
- } |
- IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); |
- if (!pDocLayout) { |
- return; |
- } |
- CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); |
- if (!pLayoutItem) { |
- FXJSE_Value_SetInteger(hValue, -1); |
- return; |
- } |
- iPage = pLayoutItem->GetFirst()->GetPage()->GetPageIndex(); |
- if (hValue) { |
- FXJSE_Value_SetInteger(hValue, bAbsPage ? iPage : iPage + 1); |
- } |
-} |
+// 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_layoutpseudomodel.h" |
+#include "xfa_document_layout_imp.h" |
+#include "xfa_layout_appadapter.h" |
+CScript_LayoutPseudoModel::CScript_LayoutPseudoModel(CXFA_Document* pDocument) |
+ : CXFA_OrdinaryObject(pDocument, XFA_ELEMENT_LayoutPseudoModel) { |
+ m_uScriptHash = XFA_HASHCODE_Layout; |
+} |
+CScript_LayoutPseudoModel::~CScript_LayoutPseudoModel() {} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Ready( |
+ 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_READY); |
+ return; |
+ } |
+ int32_t iStatus = pNotify->GetLayoutStatus(); |
+ FXJSE_Value_SetBoolean(hValue, iStatus >= 2); |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_HWXY( |
+ CFXJSE_Arguments* pArguments, |
+ XFA_LAYOUTMODEL_HWXY layoutModel) { |
+ int32_t iLength = pArguments->GetLength(); |
+ if (iLength < 1 || iLength > 3) { |
+ const FX_WCHAR* methodName = NULL; |
+ switch (layoutModel) { |
+ case XFA_LAYOUTMODEL_H: |
+ methodName = L"h"; |
+ break; |
+ case XFA_LAYOUTMODEL_W: |
+ methodName = L"w"; |
+ break; |
+ case XFA_LAYOUTMODEL_X: |
+ methodName = L"x"; |
+ break; |
+ case XFA_LAYOUTMODEL_Y: |
+ methodName = L"y"; |
+ break; |
+ } |
+ ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, methodName); |
+ return; |
+ } |
+ CXFA_Node* pNode = NULL; |
+ CFX_WideString wsUnit = FX_WSTRC(L"pt"); |
+ int32_t iIndex = 0; |
+ if (iLength >= 1) { |
+ pNode = (CXFA_Node*)pArguments->GetObject(0); |
+ } |
+ if (iLength >= 2) { |
+ CFX_ByteString bsUnit = pArguments->GetUTF8String(1); |
+ if (!bsUnit.IsEmpty()) { |
+ wsUnit = CFX_WideString::FromUTF8(bsUnit, bsUnit.GetLength()); |
+ } |
+ } |
+ if (iLength >= 3) { |
+ iIndex = pArguments->GetInt32(2); |
+ } |
+ if (!pNode) { |
+ return; |
+ } |
+ IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); |
+ if (!pDocLayout) { |
+ return; |
+ } |
+ CFX_RectF rtRect; |
+ CXFA_Measurement measure; |
+ CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); |
+ if (!pLayoutItem) { |
+ return; |
+ } |
+ while (iIndex > 0 && pLayoutItem) { |
+ pLayoutItem = pLayoutItem->GetNext(); |
+ iIndex--; |
+ } |
+ FXJSE_HVALUE hValue = pArguments->GetReturnValue(); |
+ if (!pLayoutItem) { |
+ FXJSE_Value_SetFloat(hValue, 0); |
+ return; |
+ } |
+ pLayoutItem->GetRect(rtRect, TRUE); |
+ switch (layoutModel) { |
+ case XFA_LAYOUTMODEL_H: |
+ measure.Set(rtRect.height, XFA_UNIT_Pt); |
+ break; |
+ case XFA_LAYOUTMODEL_W: |
+ measure.Set(rtRect.width, XFA_UNIT_Pt); |
+ break; |
+ case XFA_LAYOUTMODEL_X: |
+ measure.Set(rtRect.left, XFA_UNIT_Pt); |
+ break; |
+ case XFA_LAYOUTMODEL_Y: |
+ measure.Set(rtRect.top, XFA_UNIT_Pt); |
+ break; |
+ } |
+ XFA_UNIT unit = measure.GetUnit(wsUnit); |
+ FX_FLOAT fValue = measure.ToUnit(unit); |
+ fValue = FXSYS_round(fValue * 1000) / 1000.0f; |
+ if (hValue) { |
+ FXJSE_Value_SetFloat(hValue, fValue); |
+ } |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_H( |
+ CFXJSE_Arguments* pArguments) { |
+ Script_LayoutPseudoModel_HWXY(pArguments, XFA_LAYOUTMODEL_H); |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_W( |
+ CFXJSE_Arguments* pArguments) { |
+ Script_LayoutPseudoModel_HWXY(pArguments, XFA_LAYOUTMODEL_W); |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_X( |
+ CFXJSE_Arguments* pArguments) { |
+ Script_LayoutPseudoModel_HWXY(pArguments, XFA_LAYOUTMODEL_X); |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Y( |
+ CFXJSE_Arguments* pArguments) { |
+ Script_LayoutPseudoModel_HWXY(pArguments, XFA_LAYOUTMODEL_Y); |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_NumberedPageCount( |
+ CFXJSE_Arguments* pArguments, |
+ FX_BOOL bNumbered) { |
+ IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); |
+ if (!pDocLayout) { |
+ return; |
+ } |
+ int32_t iPageCount = 0; |
+ int32_t iPageNum = pDocLayout->CountPages(); |
+ if (bNumbered) { |
+ for (int32_t i = 0; i < iPageNum; i++) { |
+ IXFA_LayoutPage* pLayoutPage = pDocLayout->GetPage(i); |
+ if (!pLayoutPage) { |
+ continue; |
+ } |
+ CXFA_Node* pMasterPage = pLayoutPage->GetMasterPage(); |
+ if (pMasterPage->GetInteger(XFA_ATTRIBUTE_Numbered)) { |
+ iPageCount++; |
+ } |
+ } |
+ } else { |
+ iPageCount = iPageNum; |
+ } |
+ FXJSE_HVALUE hValue = pArguments->GetReturnValue(); |
+ if (hValue) { |
+ FXJSE_Value_SetInteger(hValue, iPageCount); |
+ } |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageCount( |
+ CFXJSE_Arguments* pArguments) { |
+ Script_LayoutPseudoModel_NumberedPageCount(pArguments, TRUE); |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageSpan( |
+ CFXJSE_Arguments* pArguments) { |
+ int32_t iLength = pArguments->GetLength(); |
+ if (iLength != 1) { |
+ ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"pageSpan"); |
+ return; |
+ } |
+ CXFA_Node* pNode = NULL; |
+ if (iLength >= 1) { |
+ pNode = (CXFA_Node*)pArguments->GetObject(0); |
+ } |
+ if (!pNode) { |
+ return; |
+ } |
+ IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); |
+ if (!pDocLayout) { |
+ return; |
+ } |
+ FXJSE_HVALUE hValue = pArguments->GetReturnValue(); |
+ CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); |
+ if (!pLayoutItem) { |
+ FXJSE_Value_SetInteger(hValue, -1); |
+ return; |
+ } |
+ int32_t iLast = pLayoutItem->GetLast()->GetPage()->GetPageIndex(); |
+ int32_t iFirst = pLayoutItem->GetFirst()->GetPage()->GetPageIndex(); |
+ int32_t iPageSpan = iLast - iFirst + 1; |
+ if (hValue) { |
+ FXJSE_Value_SetInteger(hValue, iPageSpan); |
+ } |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Page( |
+ CFXJSE_Arguments* pArguments) { |
+ Script_LayoutPseudoModel_PageImp(pArguments, FALSE); |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_GetObjArray( |
+ IXFA_DocLayout* pDocLayout, |
+ int32_t iPageNo, |
+ const CFX_WideString& wsType, |
+ FX_BOOL bOnPageArea, |
+ CXFA_NodeArray& retArray) { |
+ CXFA_ContainerLayoutItem* pLayoutPage = |
+ (CXFA_ContainerLayoutItem*)pDocLayout->GetPage(iPageNo); |
+ if (!pLayoutPage) { |
+ return; |
+ } |
+ if (wsType == FX_WSTRC(L"pageArea")) { |
+ if (CXFA_Node* pMasterPage = pLayoutPage->m_pFormNode) { |
+ retArray.Add(pMasterPage); |
+ } |
+ return; |
+ } |
+ if (wsType == FX_WSTRC(L"contentArea")) { |
+ for (CXFA_LayoutItem* pItem = pLayoutPage->m_pFirstChild; pItem; |
+ pItem = pItem->m_pNextSibling) { |
+ if (pItem->m_pFormNode->GetClassID() == XFA_ELEMENT_ContentArea) { |
+ retArray.Add(pItem->m_pFormNode); |
+ } |
+ } |
+ return; |
+ } |
+ CFX_MapPtrToPtr formItems; |
+ formItems.InitHashTable(256, TRUE); |
+ if (wsType.IsEmpty()) { |
+ if (CXFA_Node* pMasterPage = pLayoutPage->m_pFormNode) { |
+ retArray.Add(pMasterPage); |
+ } |
+ for (CXFA_LayoutItem* pItem = pLayoutPage->m_pFirstChild; pItem; |
+ pItem = pItem->m_pNextSibling) { |
+ if (pItem->m_pFormNode->GetClassID() == XFA_ELEMENT_ContentArea) { |
+ retArray.Add(pItem->m_pFormNode); |
+ if (!bOnPageArea) { |
+ CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem, |
+ CXFA_TraverseStrategy_ContentLayoutItem> |
+ iterator((CXFA_ContentLayoutItem*)pItem->m_pFirstChild); |
+ for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent(); |
+ pItemChild; pItemChild = iterator.MoveToNext()) { |
+ if (!pItemChild->IsContentLayoutItem()) { |
+ continue; |
+ } |
+ XFA_ELEMENT eElementType = pItemChild->m_pFormNode->GetClassID(); |
+ if (eElementType != XFA_ELEMENT_Field && |
+ eElementType != XFA_ELEMENT_Draw && |
+ eElementType != XFA_ELEMENT_Subform && |
+ eElementType != XFA_ELEMENT_Area) { |
+ continue; |
+ } |
+ if (formItems.GetValueAt(pItemChild->m_pFormNode)) { |
+ continue; |
+ } |
+ formItems.SetAt(pItemChild->m_pFormNode, this); |
+ retArray.Add(pItemChild->m_pFormNode); |
+ } |
+ } |
+ } else { |
+ if (bOnPageArea) { |
+ CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem, |
+ CXFA_TraverseStrategy_ContentLayoutItem> |
+ iterator((CXFA_ContentLayoutItem*)pItem); |
+ for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent(); |
+ pItemChild; pItemChild = iterator.MoveToNext()) { |
+ if (!pItemChild->IsContentLayoutItem()) { |
+ continue; |
+ } |
+ XFA_ELEMENT eElementType = pItemChild->m_pFormNode->GetClassID(); |
+ if (eElementType != XFA_ELEMENT_Field && |
+ eElementType != XFA_ELEMENT_Draw && |
+ eElementType != XFA_ELEMENT_Subform && |
+ eElementType != XFA_ELEMENT_Area) { |
+ continue; |
+ } |
+ if (formItems.GetValueAt(pItemChild->m_pFormNode)) { |
+ continue; |
+ } |
+ formItems.SetAt(pItemChild->m_pFormNode, this); |
+ retArray.Add(pItemChild->m_pFormNode); |
+ } |
+ } |
+ } |
+ } |
+ return; |
+ } |
+ XFA_ELEMENT eType = XFA_ELEMENT_UNKNOWN; |
+ if (wsType == FX_WSTRC(L"field")) { |
+ eType = XFA_ELEMENT_Field; |
+ } else if (wsType == FX_WSTRC(L"draw")) { |
+ eType = XFA_ELEMENT_Draw; |
+ } else if (wsType == FX_WSTRC(L"subform")) { |
+ eType = XFA_ELEMENT_Subform; |
+ } else if (wsType == FX_WSTRC(L"area")) { |
+ eType = XFA_ELEMENT_Area; |
+ } |
+ if (eType != XFA_ELEMENT_UNKNOWN) { |
+ for (CXFA_LayoutItem* pItem = pLayoutPage->m_pFirstChild; pItem; |
+ pItem = pItem->m_pNextSibling) { |
+ if (pItem->m_pFormNode->GetClassID() == XFA_ELEMENT_ContentArea) { |
+ if (!bOnPageArea) { |
+ CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem, |
+ CXFA_TraverseStrategy_ContentLayoutItem> |
+ iterator((CXFA_ContentLayoutItem*)pItem->m_pFirstChild); |
+ for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent(); |
+ pItemChild; pItemChild = iterator.MoveToNext()) { |
+ if (!pItemChild->IsContentLayoutItem()) { |
+ continue; |
+ } |
+ if (pItemChild->m_pFormNode->GetClassID() != eType) { |
+ continue; |
+ } |
+ if (formItems.GetValueAt(pItemChild->m_pFormNode)) { |
+ continue; |
+ } |
+ formItems.SetAt(pItemChild->m_pFormNode, this); |
+ retArray.Add(pItemChild->m_pFormNode); |
+ } |
+ } |
+ } else { |
+ if (bOnPageArea) { |
+ CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem, |
+ CXFA_TraverseStrategy_ContentLayoutItem> |
+ iterator((CXFA_ContentLayoutItem*)pItem); |
+ for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent(); |
+ pItemChild; pItemChild = iterator.MoveToNext()) { |
+ if (!pItemChild->IsContentLayoutItem()) { |
+ continue; |
+ } |
+ if (pItemChild->m_pFormNode->GetClassID() != eType) { |
+ continue; |
+ } |
+ if (formItems.GetValueAt(pItemChild->m_pFormNode)) { |
+ continue; |
+ } |
+ formItems.SetAt(pItemChild->m_pFormNode, this); |
+ retArray.Add(pItemChild->m_pFormNode); |
+ } |
+ } |
+ } |
+ } |
+ return; |
+ } |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageContent( |
+ CFXJSE_Arguments* pArguments) { |
+ int32_t iLength = pArguments->GetLength(); |
+ if (iLength < 1 || iLength > 3) { |
+ ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"pageContent"); |
+ return; |
+ } |
+ int32_t iIndex = 0; |
+ CFX_WideString wsType; |
+ FX_BOOL bOnPageArea = FALSE; |
+ if (iLength >= 1) { |
+ iIndex = pArguments->GetInt32(0); |
+ } |
+ if (iLength >= 2) { |
+ CFX_ByteString bsType = pArguments->GetUTF8String(1); |
+ wsType = CFX_WideString::FromUTF8(bsType, bsType.GetLength()); |
+ } |
+ if (iLength >= 3) { |
+ bOnPageArea = pArguments->GetInt32(2) == 0 ? FALSE : TRUE; |
+ } |
+ IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); |
+ if (!pNotify) { |
+ return; |
+ } |
+ IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); |
+ if (!pDocLayout) { |
+ return; |
+ } |
+ CXFA_NodeArray retArray; |
+ Script_LayoutPseudoModel_GetObjArray(pDocLayout, iIndex, wsType, bOnPageArea, |
+ retArray); |
+ CXFA_ArrayNodeList* pArrayNodeList = new CXFA_ArrayNodeList(m_pDocument); |
+ pArrayNodeList->SetArrayNodeList(retArray); |
+ FXJSE_Value_SetObject(pArguments->GetReturnValue(), |
+ (CXFA_Object*)pArrayNodeList, |
+ m_pDocument->GetScriptContext()->GetJseNormalClass()); |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPageCount( |
+ CFXJSE_Arguments* pArguments) { |
+ Script_LayoutPseudoModel_NumberedPageCount(pArguments, FALSE); |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPageCountInBatch( |
+ CFXJSE_Arguments* pArguments) { |
+ IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); |
+ if (!pNotify) { |
+ return; |
+ } |
+ IXFA_Doc* hDoc = pNotify->GetHDOC(); |
+ int32_t iPageCount = pNotify->GetDocProvider()->AbsPageCountInBatch(hDoc); |
+ FXJSE_HVALUE hValue = pArguments->GetReturnValue(); |
+ if (hValue) { |
+ FXJSE_Value_SetInteger(hValue, iPageCount); |
+ } |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_SheetCountInBatch( |
+ CFXJSE_Arguments* pArguments) { |
+ IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); |
+ if (!pNotify) { |
+ return; |
+ } |
+ IXFA_Doc* hDoc = pNotify->GetHDOC(); |
+ int32_t iPageCount = pNotify->GetDocProvider()->SheetCountInBatch(hDoc); |
+ FXJSE_HVALUE hValue = pArguments->GetReturnValue(); |
+ if (hValue) { |
+ FXJSE_Value_SetInteger(hValue, iPageCount); |
+ } |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Relayout( |
+ CFXJSE_Arguments* pArguments) { |
+ CXFA_Node* pRootNode = m_pDocument->GetRoot(); |
+ CXFA_Node* pFormRoot = pRootNode->GetFirstChildByClass(XFA_ELEMENT_Form); |
+ FXSYS_assert(pFormRoot); |
+ CXFA_Node* pContentRootNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild); |
+ CXFA_LayoutProcessor* pLayoutProcessor = m_pDocument->GetLayoutProcessor(); |
+ if (pContentRootNode) { |
+ pLayoutProcessor->AddChangedContainer(pContentRootNode); |
+ } |
+ pLayoutProcessor->SetForceReLayout(TRUE); |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPageSpan( |
+ CFXJSE_Arguments* pArguments) { |
+ Script_LayoutPseudoModel_PageSpan(pArguments); |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPageInBatch( |
+ CFXJSE_Arguments* pArguments) { |
+ int32_t iLength = pArguments->GetLength(); |
+ if (iLength != 1) { |
+ ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, |
+ L"absPageInBatch"); |
+ return; |
+ } |
+ CXFA_Node* pNode = NULL; |
+ if (iLength >= 1) { |
+ pNode = (CXFA_Node*)pArguments->GetObject(0); |
+ } |
+ if (!pNode) { |
+ return; |
+ } |
+ IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); |
+ if (!pNotify) { |
+ return; |
+ } |
+ IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); |
+ if (!pDocLayout) { |
+ return; |
+ } |
+ IXFA_Widget* hWidget = pNotify->GetHWidget(pDocLayout->GetLayoutItem(pNode)); |
+ if (!hWidget) { |
+ return; |
+ } |
+ IXFA_Doc* hDoc = pNotify->GetHDOC(); |
+ int32_t iPageCount = pNotify->GetDocProvider()->AbsPageInBatch(hDoc, hWidget); |
+ FXJSE_HVALUE hValue = pArguments->GetReturnValue(); |
+ if (hValue) { |
+ FXJSE_Value_SetInteger(hValue, iPageCount); |
+ } |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_SheetInBatch( |
+ CFXJSE_Arguments* pArguments) { |
+ int32_t iLength = pArguments->GetLength(); |
+ if (iLength != 1) { |
+ ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, |
+ L"sheetInBatch"); |
+ return; |
+ } |
+ CXFA_Node* pNode = NULL; |
+ if (iLength >= 1) { |
+ pNode = (CXFA_Node*)pArguments->GetObject(0); |
+ } |
+ if (!pNode) { |
+ return; |
+ } |
+ IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify(); |
+ if (!pNotify) { |
+ return; |
+ } |
+ IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); |
+ if (!pDocLayout) { |
+ return; |
+ } |
+ IXFA_Widget* hWidget = pNotify->GetHWidget(pDocLayout->GetLayoutItem(pNode)); |
+ if (!hWidget) { |
+ return; |
+ } |
+ IXFA_Doc* hDoc = pNotify->GetHDOC(); |
+ int32_t iPageCount = pNotify->GetDocProvider()->SheetInBatch(hDoc, hWidget); |
+ FXJSE_HVALUE hValue = pArguments->GetReturnValue(); |
+ if (hValue) { |
+ FXJSE_Value_SetInteger(hValue, iPageCount); |
+ } |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Sheet( |
+ CFXJSE_Arguments* pArguments) { |
+ Script_LayoutPseudoModel_PageImp(pArguments, TRUE); |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_RelayoutPageArea( |
+ CFXJSE_Arguments* pArguments) {} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_SheetCount( |
+ CFXJSE_Arguments* pArguments) { |
+ Script_LayoutPseudoModel_NumberedPageCount(pArguments, FALSE); |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPage( |
+ CFXJSE_Arguments* pArguments) { |
+ Script_LayoutPseudoModel_PageImp(pArguments, TRUE); |
+} |
+void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageImp( |
+ CFXJSE_Arguments* pArguments, |
+ FX_BOOL bAbsPage) { |
+ int32_t iLength = pArguments->GetLength(); |
+ if (iLength != 1) { |
+ const FX_WCHAR* methodName; |
+ if (bAbsPage) { |
+ methodName = L"absPage"; |
+ } else { |
+ methodName = L"page"; |
+ } |
+ ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, methodName); |
+ return; |
+ } |
+ CXFA_Node* pNode = NULL; |
+ if (iLength >= 1) { |
+ pNode = (CXFA_Node*)pArguments->GetObject(0); |
+ } |
+ int32_t iPage = 0; |
+ FXJSE_HVALUE hValue = pArguments->GetReturnValue(); |
+ if (!pNode && hValue) { |
+ FXJSE_Value_SetInteger(hValue, iPage); |
+ } |
+ IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout(); |
+ if (!pDocLayout) { |
+ return; |
+ } |
+ CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); |
+ if (!pLayoutItem) { |
+ FXJSE_Value_SetInteger(hValue, -1); |
+ return; |
+ } |
+ iPage = pLayoutItem->GetFirst()->GetPage()->GetPageIndex(); |
+ if (hValue) { |
+ FXJSE_Value_SetInteger(hValue, bAbsPage ? iPage : iPage + 1); |
+ } |
+} |