OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "xfa/fxfa/parser/cscript_layoutpseudomodel.h" | 7 #include "xfa/fxfa/parser/cscript_layoutpseudomodel.h" |
8 | 8 |
9 #include <set> | 9 #include <set> |
10 | 10 |
(...skipping 14 matching lines...) Expand all Loading... |
25 | 25 |
26 CScript_LayoutPseudoModel::CScript_LayoutPseudoModel(CXFA_Document* pDocument) | 26 CScript_LayoutPseudoModel::CScript_LayoutPseudoModel(CXFA_Document* pDocument) |
27 : CXFA_Object(pDocument, | 27 : CXFA_Object(pDocument, |
28 XFA_ObjectType::Object, | 28 XFA_ObjectType::Object, |
29 XFA_Element::LayoutPseudoModel, | 29 XFA_Element::LayoutPseudoModel, |
30 CFX_WideStringC(L"layoutPseudoModel")) {} | 30 CFX_WideStringC(L"layoutPseudoModel")) {} |
31 | 31 |
32 CScript_LayoutPseudoModel::~CScript_LayoutPseudoModel() {} | 32 CScript_LayoutPseudoModel::~CScript_LayoutPseudoModel() {} |
33 | 33 |
34 void CScript_LayoutPseudoModel::Ready(CFXJSE_Value* pValue, | 34 void CScript_LayoutPseudoModel::Ready(CFXJSE_Value* pValue, |
35 FX_BOOL bSetting, | 35 bool bSetting, |
36 XFA_ATTRIBUTE eAttribute) { | 36 XFA_ATTRIBUTE eAttribute) { |
37 CXFA_FFNotify* pNotify = m_pDocument->GetNotify(); | 37 CXFA_FFNotify* pNotify = m_pDocument->GetNotify(); |
38 if (!pNotify) { | 38 if (!pNotify) { |
39 return; | 39 return; |
40 } | 40 } |
41 if (bSetting) { | 41 if (bSetting) { |
42 ThrowException(XFA_IDS_UNABLE_SET_READY); | 42 ThrowException(XFA_IDS_UNABLE_SET_READY); |
43 return; | 43 return; |
44 } | 44 } |
45 int32_t iStatus = pNotify->GetLayoutStatus(); | 45 int32_t iStatus = pNotify->GetLayoutStatus(); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 } | 98 } |
99 while (iIndex > 0 && pLayoutItem) { | 99 while (iIndex > 0 && pLayoutItem) { |
100 pLayoutItem = pLayoutItem->GetNext(); | 100 pLayoutItem = pLayoutItem->GetNext(); |
101 iIndex--; | 101 iIndex--; |
102 } | 102 } |
103 CFXJSE_Value* pValue = pArguments->GetReturnValue(); | 103 CFXJSE_Value* pValue = pArguments->GetReturnValue(); |
104 if (!pLayoutItem) { | 104 if (!pLayoutItem) { |
105 pValue->SetFloat(0); | 105 pValue->SetFloat(0); |
106 return; | 106 return; |
107 } | 107 } |
108 pLayoutItem->GetRect(rtRect, TRUE); | 108 pLayoutItem->GetRect(rtRect, true); |
109 switch (layoutModel) { | 109 switch (layoutModel) { |
110 case XFA_LAYOUTMODEL_H: | 110 case XFA_LAYOUTMODEL_H: |
111 measure.Set(rtRect.height, XFA_UNIT_Pt); | 111 measure.Set(rtRect.height, XFA_UNIT_Pt); |
112 break; | 112 break; |
113 case XFA_LAYOUTMODEL_W: | 113 case XFA_LAYOUTMODEL_W: |
114 measure.Set(rtRect.width, XFA_UNIT_Pt); | 114 measure.Set(rtRect.width, XFA_UNIT_Pt); |
115 break; | 115 break; |
116 case XFA_LAYOUTMODEL_X: | 116 case XFA_LAYOUTMODEL_X: |
117 measure.Set(rtRect.left, XFA_UNIT_Pt); | 117 measure.Set(rtRect.left, XFA_UNIT_Pt); |
118 break; | 118 break; |
(...skipping 18 matching lines...) Expand all Loading... |
137 | 137 |
138 void CScript_LayoutPseudoModel::X(CFXJSE_Arguments* pArguments) { | 138 void CScript_LayoutPseudoModel::X(CFXJSE_Arguments* pArguments) { |
139 HWXY(pArguments, XFA_LAYOUTMODEL_X); | 139 HWXY(pArguments, XFA_LAYOUTMODEL_X); |
140 } | 140 } |
141 | 141 |
142 void CScript_LayoutPseudoModel::Y(CFXJSE_Arguments* pArguments) { | 142 void CScript_LayoutPseudoModel::Y(CFXJSE_Arguments* pArguments) { |
143 HWXY(pArguments, XFA_LAYOUTMODEL_Y); | 143 HWXY(pArguments, XFA_LAYOUTMODEL_Y); |
144 } | 144 } |
145 | 145 |
146 void CScript_LayoutPseudoModel::NumberedPageCount(CFXJSE_Arguments* pArguments, | 146 void CScript_LayoutPseudoModel::NumberedPageCount(CFXJSE_Arguments* pArguments, |
147 FX_BOOL bNumbered) { | 147 bool bNumbered) { |
148 CXFA_LayoutProcessor* pDocLayout = m_pDocument->GetDocLayout(); | 148 CXFA_LayoutProcessor* pDocLayout = m_pDocument->GetDocLayout(); |
149 if (!pDocLayout) { | 149 if (!pDocLayout) { |
150 return; | 150 return; |
151 } | 151 } |
152 int32_t iPageCount = 0; | 152 int32_t iPageCount = 0; |
153 int32_t iPageNum = pDocLayout->CountPages(); | 153 int32_t iPageNum = pDocLayout->CountPages(); |
154 if (bNumbered) { | 154 if (bNumbered) { |
155 for (int32_t i = 0; i < iPageNum; i++) { | 155 for (int32_t i = 0; i < iPageNum; i++) { |
156 CXFA_ContainerLayoutItem* pLayoutPage = pDocLayout->GetPage(i); | 156 CXFA_ContainerLayoutItem* pLayoutPage = pDocLayout->GetPage(i); |
157 if (!pLayoutPage) { | 157 if (!pLayoutPage) { |
158 continue; | 158 continue; |
159 } | 159 } |
160 CXFA_Node* pMasterPage = pLayoutPage->GetMasterPage(); | 160 CXFA_Node* pMasterPage = pLayoutPage->GetMasterPage(); |
161 if (pMasterPage->GetInteger(XFA_ATTRIBUTE_Numbered)) { | 161 if (pMasterPage->GetInteger(XFA_ATTRIBUTE_Numbered)) { |
162 iPageCount++; | 162 iPageCount++; |
163 } | 163 } |
164 } | 164 } |
165 } else { | 165 } else { |
166 iPageCount = iPageNum; | 166 iPageCount = iPageNum; |
167 } | 167 } |
168 CFXJSE_Value* pValue = pArguments->GetReturnValue(); | 168 CFXJSE_Value* pValue = pArguments->GetReturnValue(); |
169 if (pValue) | 169 if (pValue) |
170 pValue->SetInteger(iPageCount); | 170 pValue->SetInteger(iPageCount); |
171 } | 171 } |
172 | 172 |
173 void CScript_LayoutPseudoModel::PageCount(CFXJSE_Arguments* pArguments) { | 173 void CScript_LayoutPseudoModel::PageCount(CFXJSE_Arguments* pArguments) { |
174 NumberedPageCount(pArguments, TRUE); | 174 NumberedPageCount(pArguments, true); |
175 } | 175 } |
176 | 176 |
177 void CScript_LayoutPseudoModel::PageSpan(CFXJSE_Arguments* pArguments) { | 177 void CScript_LayoutPseudoModel::PageSpan(CFXJSE_Arguments* pArguments) { |
178 int32_t iLength = pArguments->GetLength(); | 178 int32_t iLength = pArguments->GetLength(); |
179 if (iLength != 1) { | 179 if (iLength != 1) { |
180 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"pageSpan"); | 180 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"pageSpan"); |
181 return; | 181 return; |
182 } | 182 } |
183 CXFA_Node* pNode = nullptr; | 183 CXFA_Node* pNode = nullptr; |
184 if (iLength >= 1) { | 184 if (iLength >= 1) { |
(...skipping 13 matching lines...) Expand all Loading... |
198 return; | 198 return; |
199 } | 199 } |
200 int32_t iLast = pLayoutItem->GetLast()->GetPage()->GetPageIndex(); | 200 int32_t iLast = pLayoutItem->GetLast()->GetPage()->GetPageIndex(); |
201 int32_t iFirst = pLayoutItem->GetFirst()->GetPage()->GetPageIndex(); | 201 int32_t iFirst = pLayoutItem->GetFirst()->GetPage()->GetPageIndex(); |
202 int32_t iPageSpan = iLast - iFirst + 1; | 202 int32_t iPageSpan = iLast - iFirst + 1; |
203 if (pValue) | 203 if (pValue) |
204 pValue->SetInteger(iPageSpan); | 204 pValue->SetInteger(iPageSpan); |
205 } | 205 } |
206 | 206 |
207 void CScript_LayoutPseudoModel::Page(CFXJSE_Arguments* pArguments) { | 207 void CScript_LayoutPseudoModel::Page(CFXJSE_Arguments* pArguments) { |
208 PageImp(pArguments, FALSE); | 208 PageImp(pArguments, false); |
209 } | 209 } |
210 | 210 |
211 void CScript_LayoutPseudoModel::GetObjArray(CXFA_LayoutProcessor* pDocLayout, | 211 void CScript_LayoutPseudoModel::GetObjArray(CXFA_LayoutProcessor* pDocLayout, |
212 int32_t iPageNo, | 212 int32_t iPageNo, |
213 const CFX_WideString& wsType, | 213 const CFX_WideString& wsType, |
214 FX_BOOL bOnPageArea, | 214 bool bOnPageArea, |
215 CXFA_NodeArray& retArray) { | 215 CXFA_NodeArray& retArray) { |
216 CXFA_ContainerLayoutItem* pLayoutPage = pDocLayout->GetPage(iPageNo); | 216 CXFA_ContainerLayoutItem* pLayoutPage = pDocLayout->GetPage(iPageNo); |
217 if (!pLayoutPage) { | 217 if (!pLayoutPage) { |
218 return; | 218 return; |
219 } | 219 } |
220 if (wsType == FX_WSTRC(L"pageArea")) { | 220 if (wsType == FX_WSTRC(L"pageArea")) { |
221 if (CXFA_Node* pMasterPage = pLayoutPage->m_pFormNode) { | 221 if (CXFA_Node* pMasterPage = pLayoutPage->m_pFormNode) { |
222 retArray.Add(pMasterPage); | 222 retArray.Add(pMasterPage); |
223 } | 223 } |
224 return; | 224 return; |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 } | 341 } |
342 | 342 |
343 void CScript_LayoutPseudoModel::PageContent(CFXJSE_Arguments* pArguments) { | 343 void CScript_LayoutPseudoModel::PageContent(CFXJSE_Arguments* pArguments) { |
344 int32_t iLength = pArguments->GetLength(); | 344 int32_t iLength = pArguments->GetLength(); |
345 if (iLength < 1 || iLength > 3) { | 345 if (iLength < 1 || iLength > 3) { |
346 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"pageContent"); | 346 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"pageContent"); |
347 return; | 347 return; |
348 } | 348 } |
349 int32_t iIndex = 0; | 349 int32_t iIndex = 0; |
350 CFX_WideString wsType; | 350 CFX_WideString wsType; |
351 FX_BOOL bOnPageArea = FALSE; | 351 bool bOnPageArea = false; |
352 if (iLength >= 1) { | 352 if (iLength >= 1) { |
353 iIndex = pArguments->GetInt32(0); | 353 iIndex = pArguments->GetInt32(0); |
354 } | 354 } |
355 if (iLength >= 2) { | 355 if (iLength >= 2) { |
356 CFX_ByteString bsType = pArguments->GetUTF8String(1); | 356 CFX_ByteString bsType = pArguments->GetUTF8String(1); |
357 wsType = CFX_WideString::FromUTF8(bsType.AsStringC()); | 357 wsType = CFX_WideString::FromUTF8(bsType.AsStringC()); |
358 } | 358 } |
359 if (iLength >= 3) { | 359 if (iLength >= 3) { |
360 bOnPageArea = pArguments->GetInt32(2) == 0 ? FALSE : TRUE; | 360 bOnPageArea = pArguments->GetInt32(2) == 0 ? false : true; |
361 } | 361 } |
362 CXFA_FFNotify* pNotify = m_pDocument->GetNotify(); | 362 CXFA_FFNotify* pNotify = m_pDocument->GetNotify(); |
363 if (!pNotify) { | 363 if (!pNotify) { |
364 return; | 364 return; |
365 } | 365 } |
366 CXFA_LayoutProcessor* pDocLayout = m_pDocument->GetDocLayout(); | 366 CXFA_LayoutProcessor* pDocLayout = m_pDocument->GetDocLayout(); |
367 if (!pDocLayout) { | 367 if (!pDocLayout) { |
368 return; | 368 return; |
369 } | 369 } |
370 CXFA_NodeArray retArray; | 370 CXFA_NodeArray retArray; |
371 GetObjArray(pDocLayout, iIndex, wsType, bOnPageArea, retArray); | 371 GetObjArray(pDocLayout, iIndex, wsType, bOnPageArea, retArray); |
372 CXFA_ArrayNodeList* pArrayNodeList = new CXFA_ArrayNodeList(m_pDocument); | 372 CXFA_ArrayNodeList* pArrayNodeList = new CXFA_ArrayNodeList(m_pDocument); |
373 pArrayNodeList->SetArrayNodeList(retArray); | 373 pArrayNodeList->SetArrayNodeList(retArray); |
374 pArguments->GetReturnValue()->SetObject( | 374 pArguments->GetReturnValue()->SetObject( |
375 pArrayNodeList, m_pDocument->GetScriptContext()->GetJseNormalClass()); | 375 pArrayNodeList, m_pDocument->GetScriptContext()->GetJseNormalClass()); |
376 } | 376 } |
377 | 377 |
378 void CScript_LayoutPseudoModel::AbsPageCount(CFXJSE_Arguments* pArguments) { | 378 void CScript_LayoutPseudoModel::AbsPageCount(CFXJSE_Arguments* pArguments) { |
379 NumberedPageCount(pArguments, FALSE); | 379 NumberedPageCount(pArguments, false); |
380 } | 380 } |
381 | 381 |
382 void CScript_LayoutPseudoModel::AbsPageCountInBatch( | 382 void CScript_LayoutPseudoModel::AbsPageCountInBatch( |
383 CFXJSE_Arguments* pArguments) { | 383 CFXJSE_Arguments* pArguments) { |
384 CFXJSE_Value* pValue = pArguments->GetReturnValue(); | 384 CFXJSE_Value* pValue = pArguments->GetReturnValue(); |
385 if (pValue) | 385 if (pValue) |
386 pValue->SetInteger(0); | 386 pValue->SetInteger(0); |
387 } | 387 } |
388 | 388 |
389 void CScript_LayoutPseudoModel::SheetCountInBatch( | 389 void CScript_LayoutPseudoModel::SheetCountInBatch( |
390 CFXJSE_Arguments* pArguments) { | 390 CFXJSE_Arguments* pArguments) { |
391 CFXJSE_Value* pValue = pArguments->GetReturnValue(); | 391 CFXJSE_Value* pValue = pArguments->GetReturnValue(); |
392 if (pValue) | 392 if (pValue) |
393 pValue->SetInteger(0); | 393 pValue->SetInteger(0); |
394 } | 394 } |
395 | 395 |
396 void CScript_LayoutPseudoModel::Relayout(CFXJSE_Arguments* pArguments) { | 396 void CScript_LayoutPseudoModel::Relayout(CFXJSE_Arguments* pArguments) { |
397 CXFA_Node* pRootNode = m_pDocument->GetRoot(); | 397 CXFA_Node* pRootNode = m_pDocument->GetRoot(); |
398 CXFA_Node* pFormRoot = pRootNode->GetFirstChildByClass(XFA_Element::Form); | 398 CXFA_Node* pFormRoot = pRootNode->GetFirstChildByClass(XFA_Element::Form); |
399 ASSERT(pFormRoot); | 399 ASSERT(pFormRoot); |
400 CXFA_Node* pContentRootNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild); | 400 CXFA_Node* pContentRootNode = pFormRoot->GetNodeItem(XFA_NODEITEM_FirstChild); |
401 CXFA_LayoutProcessor* pLayoutProcessor = m_pDocument->GetLayoutProcessor(); | 401 CXFA_LayoutProcessor* pLayoutProcessor = m_pDocument->GetLayoutProcessor(); |
402 if (pContentRootNode) { | 402 if (pContentRootNode) { |
403 pLayoutProcessor->AddChangedContainer(pContentRootNode); | 403 pLayoutProcessor->AddChangedContainer(pContentRootNode); |
404 } | 404 } |
405 pLayoutProcessor->SetForceReLayout(TRUE); | 405 pLayoutProcessor->SetForceReLayout(true); |
406 } | 406 } |
407 | 407 |
408 void CScript_LayoutPseudoModel::AbsPageSpan(CFXJSE_Arguments* pArguments) { | 408 void CScript_LayoutPseudoModel::AbsPageSpan(CFXJSE_Arguments* pArguments) { |
409 PageSpan(pArguments); | 409 PageSpan(pArguments); |
410 } | 410 } |
411 | 411 |
412 void CScript_LayoutPseudoModel::AbsPageInBatch(CFXJSE_Arguments* pArguments) { | 412 void CScript_LayoutPseudoModel::AbsPageInBatch(CFXJSE_Arguments* pArguments) { |
413 if (pArguments->GetLength() != 1) { | 413 if (pArguments->GetLength() != 1) { |
414 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"absPageInBatch"); | 414 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"absPageInBatch"); |
415 return; | 415 return; |
416 } | 416 } |
417 | 417 |
418 CFXJSE_Value* pValue = pArguments->GetReturnValue(); | 418 CFXJSE_Value* pValue = pArguments->GetReturnValue(); |
419 if (pValue) | 419 if (pValue) |
420 pValue->SetInteger(0); | 420 pValue->SetInteger(0); |
421 } | 421 } |
422 | 422 |
423 void CScript_LayoutPseudoModel::SheetInBatch(CFXJSE_Arguments* pArguments) { | 423 void CScript_LayoutPseudoModel::SheetInBatch(CFXJSE_Arguments* pArguments) { |
424 if (pArguments->GetLength() != 1) { | 424 if (pArguments->GetLength() != 1) { |
425 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"sheetInBatch"); | 425 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"sheetInBatch"); |
426 return; | 426 return; |
427 } | 427 } |
428 | 428 |
429 CFXJSE_Value* pValue = pArguments->GetReturnValue(); | 429 CFXJSE_Value* pValue = pArguments->GetReturnValue(); |
430 if (pValue) | 430 if (pValue) |
431 pValue->SetInteger(0); | 431 pValue->SetInteger(0); |
432 } | 432 } |
433 | 433 |
434 void CScript_LayoutPseudoModel::Sheet(CFXJSE_Arguments* pArguments) { | 434 void CScript_LayoutPseudoModel::Sheet(CFXJSE_Arguments* pArguments) { |
435 PageImp(pArguments, TRUE); | 435 PageImp(pArguments, true); |
436 } | 436 } |
437 | 437 |
438 void CScript_LayoutPseudoModel::RelayoutPageArea(CFXJSE_Arguments* pArguments) { | 438 void CScript_LayoutPseudoModel::RelayoutPageArea(CFXJSE_Arguments* pArguments) { |
439 } | 439 } |
440 | 440 |
441 void CScript_LayoutPseudoModel::SheetCount(CFXJSE_Arguments* pArguments) { | 441 void CScript_LayoutPseudoModel::SheetCount(CFXJSE_Arguments* pArguments) { |
442 NumberedPageCount(pArguments, FALSE); | 442 NumberedPageCount(pArguments, false); |
443 } | 443 } |
444 | 444 |
445 void CScript_LayoutPseudoModel::AbsPage(CFXJSE_Arguments* pArguments) { | 445 void CScript_LayoutPseudoModel::AbsPage(CFXJSE_Arguments* pArguments) { |
446 PageImp(pArguments, TRUE); | 446 PageImp(pArguments, true); |
447 } | 447 } |
448 | 448 |
449 void CScript_LayoutPseudoModel::PageImp(CFXJSE_Arguments* pArguments, | 449 void CScript_LayoutPseudoModel::PageImp(CFXJSE_Arguments* pArguments, |
450 FX_BOOL bAbsPage) { | 450 bool bAbsPage) { |
451 int32_t iLength = pArguments->GetLength(); | 451 int32_t iLength = pArguments->GetLength(); |
452 if (iLength != 1) { | 452 if (iLength != 1) { |
453 const FX_WCHAR* methodName; | 453 const FX_WCHAR* methodName; |
454 if (bAbsPage) { | 454 if (bAbsPage) { |
455 methodName = L"absPage"; | 455 methodName = L"absPage"; |
456 } else { | 456 } else { |
457 methodName = L"page"; | 457 methodName = L"page"; |
458 } | 458 } |
459 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, methodName); | 459 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, methodName); |
460 return; | 460 return; |
(...skipping 13 matching lines...) Expand all Loading... |
474 } | 474 } |
475 CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); | 475 CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode); |
476 if (!pLayoutItem) { | 476 if (!pLayoutItem) { |
477 pValue->SetInteger(-1); | 477 pValue->SetInteger(-1); |
478 return; | 478 return; |
479 } | 479 } |
480 iPage = pLayoutItem->GetFirst()->GetPage()->GetPageIndex(); | 480 iPage = pLayoutItem->GetFirst()->GetPage()->GetPageIndex(); |
481 if (pValue) | 481 if (pValue) |
482 pValue->SetInteger(bAbsPage ? iPage : iPage + 1); | 482 pValue->SetInteger(bAbsPage ? iPage : iPage + 1); |
483 } | 483 } |
OLD | NEW |