Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1420)

Side by Side Diff: xfa/src/fxfa/parser/xfa_script_layoutpseudomodel.cpp

Issue 1803723002: Move xfa/src up to xfa/. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Rebase to master Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "xfa/src/fxfa/parser/xfa_script_layoutpseudomodel.h"
8
9 #include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h"
10 #include "xfa/src/fxfa/parser/xfa_docdata.h"
11 #include "xfa/src/fxfa/parser/xfa_doclayout.h"
12 #include "xfa/src/fxfa/parser/xfa_document.h"
13 #include "xfa/src/fxfa/parser/xfa_document_layout_imp.h"
14 #include "xfa/src/fxfa/parser/xfa_layout_appadapter.h"
15 #include "xfa/src/fxfa/parser/xfa_localemgr.h"
16 #include "xfa/src/fxfa/parser/xfa_object.h"
17 #include "xfa/src/fxfa/parser/xfa_parser.h"
18 #include "xfa/src/fxfa/parser/xfa_script.h"
19 #include "xfa/src/fxfa/parser/xfa_utils.h"
20
21 CScript_LayoutPseudoModel::CScript_LayoutPseudoModel(CXFA_Document* pDocument)
22 : CXFA_OrdinaryObject(pDocument, XFA_ELEMENT_LayoutPseudoModel) {
23 m_uScriptHash = XFA_HASHCODE_Layout;
24 }
25 CScript_LayoutPseudoModel::~CScript_LayoutPseudoModel() {}
26 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Ready(
27 FXJSE_HVALUE hValue,
28 FX_BOOL bSetting,
29 XFA_ATTRIBUTE eAttribute) {
30 IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify();
31 if (!pNotify) {
32 return;
33 }
34 if (bSetting) {
35 ThrowScriptErrorMessage(XFA_IDS_UNABLE_SET_READY);
36 return;
37 }
38 int32_t iStatus = pNotify->GetLayoutStatus();
39 FXJSE_Value_SetBoolean(hValue, iStatus >= 2);
40 }
41 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_HWXY(
42 CFXJSE_Arguments* pArguments,
43 XFA_LAYOUTMODEL_HWXY layoutModel) {
44 int32_t iLength = pArguments->GetLength();
45 if (iLength < 1 || iLength > 3) {
46 const FX_WCHAR* methodName = NULL;
47 switch (layoutModel) {
48 case XFA_LAYOUTMODEL_H:
49 methodName = L"h";
50 break;
51 case XFA_LAYOUTMODEL_W:
52 methodName = L"w";
53 break;
54 case XFA_LAYOUTMODEL_X:
55 methodName = L"x";
56 break;
57 case XFA_LAYOUTMODEL_Y:
58 methodName = L"y";
59 break;
60 }
61 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, methodName);
62 return;
63 }
64 CXFA_Node* pNode = NULL;
65 CFX_WideString wsUnit = FX_WSTRC(L"pt");
66 int32_t iIndex = 0;
67 if (iLength >= 1) {
68 pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
69 }
70 if (iLength >= 2) {
71 CFX_ByteString bsUnit = pArguments->GetUTF8String(1);
72 if (!bsUnit.IsEmpty()) {
73 wsUnit = CFX_WideString::FromUTF8(bsUnit, bsUnit.GetLength());
74 }
75 }
76 if (iLength >= 3) {
77 iIndex = pArguments->GetInt32(2);
78 }
79 if (!pNode) {
80 return;
81 }
82 IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout();
83 if (!pDocLayout) {
84 return;
85 }
86 CFX_RectF rtRect;
87 CXFA_Measurement measure;
88 CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode);
89 if (!pLayoutItem) {
90 return;
91 }
92 while (iIndex > 0 && pLayoutItem) {
93 pLayoutItem = pLayoutItem->GetNext();
94 iIndex--;
95 }
96 FXJSE_HVALUE hValue = pArguments->GetReturnValue();
97 if (!pLayoutItem) {
98 FXJSE_Value_SetFloat(hValue, 0);
99 return;
100 }
101 pLayoutItem->GetRect(rtRect, TRUE);
102 switch (layoutModel) {
103 case XFA_LAYOUTMODEL_H:
104 measure.Set(rtRect.height, XFA_UNIT_Pt);
105 break;
106 case XFA_LAYOUTMODEL_W:
107 measure.Set(rtRect.width, XFA_UNIT_Pt);
108 break;
109 case XFA_LAYOUTMODEL_X:
110 measure.Set(rtRect.left, XFA_UNIT_Pt);
111 break;
112 case XFA_LAYOUTMODEL_Y:
113 measure.Set(rtRect.top, XFA_UNIT_Pt);
114 break;
115 }
116 XFA_UNIT unit = measure.GetUnit(wsUnit);
117 FX_FLOAT fValue = measure.ToUnit(unit);
118 fValue = FXSYS_round(fValue * 1000) / 1000.0f;
119 if (hValue) {
120 FXJSE_Value_SetFloat(hValue, fValue);
121 }
122 }
123 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_H(
124 CFXJSE_Arguments* pArguments) {
125 Script_LayoutPseudoModel_HWXY(pArguments, XFA_LAYOUTMODEL_H);
126 }
127 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_W(
128 CFXJSE_Arguments* pArguments) {
129 Script_LayoutPseudoModel_HWXY(pArguments, XFA_LAYOUTMODEL_W);
130 }
131 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_X(
132 CFXJSE_Arguments* pArguments) {
133 Script_LayoutPseudoModel_HWXY(pArguments, XFA_LAYOUTMODEL_X);
134 }
135 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Y(
136 CFXJSE_Arguments* pArguments) {
137 Script_LayoutPseudoModel_HWXY(pArguments, XFA_LAYOUTMODEL_Y);
138 }
139 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_NumberedPageCount(
140 CFXJSE_Arguments* pArguments,
141 FX_BOOL bNumbered) {
142 IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout();
143 if (!pDocLayout) {
144 return;
145 }
146 int32_t iPageCount = 0;
147 int32_t iPageNum = pDocLayout->CountPages();
148 if (bNumbered) {
149 for (int32_t i = 0; i < iPageNum; i++) {
150 IXFA_LayoutPage* pLayoutPage = pDocLayout->GetPage(i);
151 if (!pLayoutPage) {
152 continue;
153 }
154 CXFA_Node* pMasterPage = pLayoutPage->GetMasterPage();
155 if (pMasterPage->GetInteger(XFA_ATTRIBUTE_Numbered)) {
156 iPageCount++;
157 }
158 }
159 } else {
160 iPageCount = iPageNum;
161 }
162 FXJSE_HVALUE hValue = pArguments->GetReturnValue();
163 if (hValue) {
164 FXJSE_Value_SetInteger(hValue, iPageCount);
165 }
166 }
167 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageCount(
168 CFXJSE_Arguments* pArguments) {
169 Script_LayoutPseudoModel_NumberedPageCount(pArguments, TRUE);
170 }
171 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageSpan(
172 CFXJSE_Arguments* pArguments) {
173 int32_t iLength = pArguments->GetLength();
174 if (iLength != 1) {
175 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"pageSpan");
176 return;
177 }
178 CXFA_Node* pNode = NULL;
179 if (iLength >= 1) {
180 pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
181 }
182 if (!pNode) {
183 return;
184 }
185 IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout();
186 if (!pDocLayout) {
187 return;
188 }
189 FXJSE_HVALUE hValue = pArguments->GetReturnValue();
190 CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode);
191 if (!pLayoutItem) {
192 FXJSE_Value_SetInteger(hValue, -1);
193 return;
194 }
195 int32_t iLast = pLayoutItem->GetLast()->GetPage()->GetPageIndex();
196 int32_t iFirst = pLayoutItem->GetFirst()->GetPage()->GetPageIndex();
197 int32_t iPageSpan = iLast - iFirst + 1;
198 if (hValue) {
199 FXJSE_Value_SetInteger(hValue, iPageSpan);
200 }
201 }
202 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Page(
203 CFXJSE_Arguments* pArguments) {
204 Script_LayoutPseudoModel_PageImp(pArguments, FALSE);
205 }
206 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_GetObjArray(
207 IXFA_DocLayout* pDocLayout,
208 int32_t iPageNo,
209 const CFX_WideString& wsType,
210 FX_BOOL bOnPageArea,
211 CXFA_NodeArray& retArray) {
212 CXFA_ContainerLayoutItem* pLayoutPage =
213 (CXFA_ContainerLayoutItem*)pDocLayout->GetPage(iPageNo);
214 if (!pLayoutPage) {
215 return;
216 }
217 if (wsType == FX_WSTRC(L"pageArea")) {
218 if (CXFA_Node* pMasterPage = pLayoutPage->m_pFormNode) {
219 retArray.Add(pMasterPage);
220 }
221 return;
222 }
223 if (wsType == FX_WSTRC(L"contentArea")) {
224 for (CXFA_LayoutItem* pItem = pLayoutPage->m_pFirstChild; pItem;
225 pItem = pItem->m_pNextSibling) {
226 if (pItem->m_pFormNode->GetClassID() == XFA_ELEMENT_ContentArea) {
227 retArray.Add(pItem->m_pFormNode);
228 }
229 }
230 return;
231 }
232 CFX_MapPtrToPtr formItems;
233 formItems.InitHashTable(256, TRUE);
234 if (wsType.IsEmpty()) {
235 if (CXFA_Node* pMasterPage = pLayoutPage->m_pFormNode) {
236 retArray.Add(pMasterPage);
237 }
238 for (CXFA_LayoutItem* pItem = pLayoutPage->m_pFirstChild; pItem;
239 pItem = pItem->m_pNextSibling) {
240 if (pItem->m_pFormNode->GetClassID() == XFA_ELEMENT_ContentArea) {
241 retArray.Add(pItem->m_pFormNode);
242 if (!bOnPageArea) {
243 CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem,
244 CXFA_TraverseStrategy_ContentLayoutItem>
245 iterator((CXFA_ContentLayoutItem*)pItem->m_pFirstChild);
246 for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent();
247 pItemChild; pItemChild = iterator.MoveToNext()) {
248 if (!pItemChild->IsContentLayoutItem()) {
249 continue;
250 }
251 XFA_ELEMENT eElementType = pItemChild->m_pFormNode->GetClassID();
252 if (eElementType != XFA_ELEMENT_Field &&
253 eElementType != XFA_ELEMENT_Draw &&
254 eElementType != XFA_ELEMENT_Subform &&
255 eElementType != XFA_ELEMENT_Area) {
256 continue;
257 }
258 if (formItems.GetValueAt(pItemChild->m_pFormNode)) {
259 continue;
260 }
261 formItems.SetAt(pItemChild->m_pFormNode, this);
262 retArray.Add(pItemChild->m_pFormNode);
263 }
264 }
265 } else {
266 if (bOnPageArea) {
267 CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem,
268 CXFA_TraverseStrategy_ContentLayoutItem>
269 iterator((CXFA_ContentLayoutItem*)pItem);
270 for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent();
271 pItemChild; pItemChild = iterator.MoveToNext()) {
272 if (!pItemChild->IsContentLayoutItem()) {
273 continue;
274 }
275 XFA_ELEMENT eElementType = pItemChild->m_pFormNode->GetClassID();
276 if (eElementType != XFA_ELEMENT_Field &&
277 eElementType != XFA_ELEMENT_Draw &&
278 eElementType != XFA_ELEMENT_Subform &&
279 eElementType != XFA_ELEMENT_Area) {
280 continue;
281 }
282 if (formItems.GetValueAt(pItemChild->m_pFormNode)) {
283 continue;
284 }
285 formItems.SetAt(pItemChild->m_pFormNode, this);
286 retArray.Add(pItemChild->m_pFormNode);
287 }
288 }
289 }
290 }
291 return;
292 }
293 XFA_ELEMENT eType = XFA_ELEMENT_UNKNOWN;
294 if (wsType == FX_WSTRC(L"field")) {
295 eType = XFA_ELEMENT_Field;
296 } else if (wsType == FX_WSTRC(L"draw")) {
297 eType = XFA_ELEMENT_Draw;
298 } else if (wsType == FX_WSTRC(L"subform")) {
299 eType = XFA_ELEMENT_Subform;
300 } else if (wsType == FX_WSTRC(L"area")) {
301 eType = XFA_ELEMENT_Area;
302 }
303 if (eType != XFA_ELEMENT_UNKNOWN) {
304 for (CXFA_LayoutItem* pItem = pLayoutPage->m_pFirstChild; pItem;
305 pItem = pItem->m_pNextSibling) {
306 if (pItem->m_pFormNode->GetClassID() == XFA_ELEMENT_ContentArea) {
307 if (!bOnPageArea) {
308 CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem,
309 CXFA_TraverseStrategy_ContentLayoutItem>
310 iterator((CXFA_ContentLayoutItem*)pItem->m_pFirstChild);
311 for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent();
312 pItemChild; pItemChild = iterator.MoveToNext()) {
313 if (!pItemChild->IsContentLayoutItem()) {
314 continue;
315 }
316 if (pItemChild->m_pFormNode->GetClassID() != eType) {
317 continue;
318 }
319 if (formItems.GetValueAt(pItemChild->m_pFormNode)) {
320 continue;
321 }
322 formItems.SetAt(pItemChild->m_pFormNode, this);
323 retArray.Add(pItemChild->m_pFormNode);
324 }
325 }
326 } else {
327 if (bOnPageArea) {
328 CXFA_NodeIteratorTemplate<CXFA_ContentLayoutItem,
329 CXFA_TraverseStrategy_ContentLayoutItem>
330 iterator((CXFA_ContentLayoutItem*)pItem);
331 for (CXFA_ContentLayoutItem* pItemChild = iterator.GetCurrent();
332 pItemChild; pItemChild = iterator.MoveToNext()) {
333 if (!pItemChild->IsContentLayoutItem()) {
334 continue;
335 }
336 if (pItemChild->m_pFormNode->GetClassID() != eType) {
337 continue;
338 }
339 if (formItems.GetValueAt(pItemChild->m_pFormNode)) {
340 continue;
341 }
342 formItems.SetAt(pItemChild->m_pFormNode, this);
343 retArray.Add(pItemChild->m_pFormNode);
344 }
345 }
346 }
347 }
348 return;
349 }
350 }
351 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageContent(
352 CFXJSE_Arguments* pArguments) {
353 int32_t iLength = pArguments->GetLength();
354 if (iLength < 1 || iLength > 3) {
355 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"pageContent");
356 return;
357 }
358 int32_t iIndex = 0;
359 CFX_WideString wsType;
360 FX_BOOL bOnPageArea = FALSE;
361 if (iLength >= 1) {
362 iIndex = pArguments->GetInt32(0);
363 }
364 if (iLength >= 2) {
365 CFX_ByteString bsType = pArguments->GetUTF8String(1);
366 wsType = CFX_WideString::FromUTF8(bsType, bsType.GetLength());
367 }
368 if (iLength >= 3) {
369 bOnPageArea = pArguments->GetInt32(2) == 0 ? FALSE : TRUE;
370 }
371 IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify();
372 if (!pNotify) {
373 return;
374 }
375 IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout();
376 if (!pDocLayout) {
377 return;
378 }
379 CXFA_NodeArray retArray;
380 Script_LayoutPseudoModel_GetObjArray(pDocLayout, iIndex, wsType, bOnPageArea,
381 retArray);
382 CXFA_ArrayNodeList* pArrayNodeList = new CXFA_ArrayNodeList(m_pDocument);
383 pArrayNodeList->SetArrayNodeList(retArray);
384 FXJSE_Value_SetObject(pArguments->GetReturnValue(),
385 (CXFA_Object*)pArrayNodeList,
386 m_pDocument->GetScriptContext()->GetJseNormalClass());
387 }
388 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPageCount(
389 CFXJSE_Arguments* pArguments) {
390 Script_LayoutPseudoModel_NumberedPageCount(pArguments, FALSE);
391 }
392 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPageCountInBatch(
393 CFXJSE_Arguments* pArguments) {
394 IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify();
395 if (!pNotify) {
396 return;
397 }
398 IXFA_Doc* hDoc = pNotify->GetHDOC();
399 int32_t iPageCount = pNotify->GetDocProvider()->AbsPageCountInBatch(hDoc);
400 FXJSE_HVALUE hValue = pArguments->GetReturnValue();
401 if (hValue) {
402 FXJSE_Value_SetInteger(hValue, iPageCount);
403 }
404 }
405 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_SheetCountInBatch(
406 CFXJSE_Arguments* pArguments) {
407 IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify();
408 if (!pNotify) {
409 return;
410 }
411 IXFA_Doc* hDoc = pNotify->GetHDOC();
412 int32_t iPageCount = pNotify->GetDocProvider()->SheetCountInBatch(hDoc);
413 FXJSE_HVALUE hValue = pArguments->GetReturnValue();
414 if (hValue) {
415 FXJSE_Value_SetInteger(hValue, iPageCount);
416 }
417 }
418 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Relayout(
419 CFXJSE_Arguments* pArguments) {
420 CXFA_Node* pRootNode = m_pDocument->GetRoot();
421 CXFA_Node* pFormRoot = pRootNode->GetFirstChildByClass(XFA_ELEMENT_Form);
422 FXSYS_assert(pFormRoot);
423 CXFA_Node* pContentRootNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild);
424 CXFA_LayoutProcessor* pLayoutProcessor = m_pDocument->GetLayoutProcessor();
425 if (pContentRootNode) {
426 pLayoutProcessor->AddChangedContainer(pContentRootNode);
427 }
428 pLayoutProcessor->SetForceReLayout(TRUE);
429 }
430 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPageSpan(
431 CFXJSE_Arguments* pArguments) {
432 Script_LayoutPseudoModel_PageSpan(pArguments);
433 }
434 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPageInBatch(
435 CFXJSE_Arguments* pArguments) {
436 int32_t iLength = pArguments->GetLength();
437 if (iLength != 1) {
438 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD,
439 L"absPageInBatch");
440 return;
441 }
442 CXFA_Node* pNode = NULL;
443 if (iLength >= 1) {
444 pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
445 }
446 if (!pNode) {
447 return;
448 }
449 IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify();
450 if (!pNotify) {
451 return;
452 }
453 IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout();
454 if (!pDocLayout) {
455 return;
456 }
457 IXFA_Widget* hWidget = pNotify->GetHWidget(pDocLayout->GetLayoutItem(pNode));
458 if (!hWidget) {
459 return;
460 }
461 IXFA_Doc* hDoc = pNotify->GetHDOC();
462 int32_t iPageCount = pNotify->GetDocProvider()->AbsPageInBatch(hDoc, hWidget);
463 FXJSE_HVALUE hValue = pArguments->GetReturnValue();
464 if (hValue) {
465 FXJSE_Value_SetInteger(hValue, iPageCount);
466 }
467 }
468 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_SheetInBatch(
469 CFXJSE_Arguments* pArguments) {
470 int32_t iLength = pArguments->GetLength();
471 if (iLength != 1) {
472 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD,
473 L"sheetInBatch");
474 return;
475 }
476 CXFA_Node* pNode = NULL;
477 if (iLength >= 1) {
478 pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
479 }
480 if (!pNode) {
481 return;
482 }
483 IXFA_Notify* pNotify = m_pDocument->GetParser()->GetNotify();
484 if (!pNotify) {
485 return;
486 }
487 IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout();
488 if (!pDocLayout) {
489 return;
490 }
491 IXFA_Widget* hWidget = pNotify->GetHWidget(pDocLayout->GetLayoutItem(pNode));
492 if (!hWidget) {
493 return;
494 }
495 IXFA_Doc* hDoc = pNotify->GetHDOC();
496 int32_t iPageCount = pNotify->GetDocProvider()->SheetInBatch(hDoc, hWidget);
497 FXJSE_HVALUE hValue = pArguments->GetReturnValue();
498 if (hValue) {
499 FXJSE_Value_SetInteger(hValue, iPageCount);
500 }
501 }
502 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_Sheet(
503 CFXJSE_Arguments* pArguments) {
504 Script_LayoutPseudoModel_PageImp(pArguments, TRUE);
505 }
506 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_RelayoutPageArea(
507 CFXJSE_Arguments* pArguments) {}
508 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_SheetCount(
509 CFXJSE_Arguments* pArguments) {
510 Script_LayoutPseudoModel_NumberedPageCount(pArguments, FALSE);
511 }
512 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_AbsPage(
513 CFXJSE_Arguments* pArguments) {
514 Script_LayoutPseudoModel_PageImp(pArguments, TRUE);
515 }
516 void CScript_LayoutPseudoModel::Script_LayoutPseudoModel_PageImp(
517 CFXJSE_Arguments* pArguments,
518 FX_BOOL bAbsPage) {
519 int32_t iLength = pArguments->GetLength();
520 if (iLength != 1) {
521 const FX_WCHAR* methodName;
522 if (bAbsPage) {
523 methodName = L"absPage";
524 } else {
525 methodName = L"page";
526 }
527 ThrowScriptErrorMessage(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, methodName);
528 return;
529 }
530 CXFA_Node* pNode = NULL;
531 if (iLength >= 1) {
532 pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
533 }
534 int32_t iPage = 0;
535 FXJSE_HVALUE hValue = pArguments->GetReturnValue();
536 if (!pNode && hValue) {
537 FXJSE_Value_SetInteger(hValue, iPage);
538 }
539 IXFA_DocLayout* pDocLayout = m_pDocument->GetDocLayout();
540 if (!pDocLayout) {
541 return;
542 }
543 CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode);
544 if (!pLayoutItem) {
545 FXJSE_Value_SetInteger(hValue, -1);
546 return;
547 }
548 iPage = pLayoutItem->GetFirst()->GetPage()->GetPageIndex();
549 if (hValue) {
550 FXJSE_Value_SetInteger(hValue, bAbsPage ? iPage : iPage + 1);
551 }
552 }
OLDNEW
« no previous file with comments | « xfa/src/fxfa/parser/xfa_script_layoutpseudomodel.h ('k') | xfa/src/fxfa/parser/xfa_script_logpseudomodel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698