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

Side by Side Diff: xfa/fxfa/parser/xfa_script_hostpseudomodel.cpp

Issue 2161193002: Rename the CScript_* files to match class names. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 5 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/fxfa/parser/xfa_script_hostpseudomodel.h"
8
9 #include "fxjs/include/cfxjse_arguments.h"
10 #include "xfa/fxfa/app/xfa_ffnotify.h"
11 #include "xfa/fxfa/parser/xfa_doclayout.h"
12 #include "xfa/fxfa/parser/xfa_document.h"
13 #include "xfa/fxfa/parser/xfa_document_layout_imp.h"
14 #include "xfa/fxfa/parser/xfa_localemgr.h"
15 #include "xfa/fxfa/parser/xfa_object.h"
16 #include "xfa/fxfa/parser/xfa_script.h"
17 #include "xfa/fxfa/parser/xfa_script_imp.h"
18 #include "xfa/fxfa/parser/xfa_utils.h"
19
20 namespace {
21
22 CXFA_Node* ToNode(CFXJSE_Value* pValue, CFXJSE_Class* pClass) {
23 return static_cast<CXFA_Node*>(pValue->ToHostObject(pClass));
24 }
25
26 } // namespace
27
28 CScript_HostPseudoModel::CScript_HostPseudoModel(CXFA_Document* pDocument)
29 : CXFA_Object(pDocument,
30 XFA_ObjectType::Object,
31 XFA_Element::HostPseudoModel,
32 CFX_WideStringC(L"hostPseudoModel")) {}
33
34 CScript_HostPseudoModel::~CScript_HostPseudoModel() {}
35
36 void CScript_HostPseudoModel::LoadString(CFXJSE_Value* pValue,
37 CXFA_FFNotify* pNotify,
38 uint32_t dwFlag) {
39 CFX_WideString wsValue;
40 pNotify->GetAppProvider()->LoadString(dwFlag, wsValue);
41 pValue->SetString(FX_UTF8Encode(wsValue).AsStringC());
42 }
43
44 void CScript_HostPseudoModel::AppType(CFXJSE_Value* pValue,
45 FX_BOOL bSetting,
46 XFA_ATTRIBUTE eAttribute) {
47 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
48 if (!pNotify) {
49 return;
50 }
51 if (bSetting) {
52 ThrowException(XFA_IDS_INVAlID_PROP_SET);
53 return;
54 }
55 CFX_WideString wsAppType;
56 pNotify->GetAppProvider()->GetAppType(wsAppType);
57 pValue->SetString(FX_UTF8Encode(wsAppType).AsStringC());
58 }
59
60 void CScript_HostPseudoModel::CalculationsEnabled(CFXJSE_Value* pValue,
61 FX_BOOL bSetting,
62 XFA_ATTRIBUTE eAttribute) {
63 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
64 if (!pNotify) {
65 return;
66 }
67 CXFA_FFDoc* hDoc = pNotify->GetHDOC();
68 if (bSetting) {
69 pNotify->GetDocProvider()->SetCalculationsEnabled(hDoc,
70 pValue->ToBoolean());
71 return;
72 }
73 pValue->SetBoolean(pNotify->GetDocProvider()->IsCalculationsEnabled(hDoc));
74 }
75
76 void CScript_HostPseudoModel::CurrentPage(CFXJSE_Value* pValue,
77 FX_BOOL bSetting,
78 XFA_ATTRIBUTE eAttribute) {
79 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
80 if (!pNotify) {
81 return;
82 }
83 CXFA_FFDoc* hDoc = pNotify->GetHDOC();
84 if (bSetting) {
85 pNotify->GetDocProvider()->SetCurrentPage(hDoc, pValue->ToInteger());
86 return;
87 }
88 pValue->SetInteger(pNotify->GetDocProvider()->GetCurrentPage(hDoc));
89 }
90
91 void CScript_HostPseudoModel::Language(CFXJSE_Value* pValue,
92 FX_BOOL bSetting,
93 XFA_ATTRIBUTE eAttribute) {
94 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
95 if (!pNotify) {
96 return;
97 }
98 if (bSetting) {
99 ThrowException(XFA_IDS_UNABLE_SET_LANGUAGE);
100 return;
101 }
102 CFX_WideString wsLanguage;
103 pNotify->GetAppProvider()->GetLanguage(wsLanguage);
104 pValue->SetString(FX_UTF8Encode(wsLanguage).AsStringC());
105 }
106
107 void CScript_HostPseudoModel::NumPages(CFXJSE_Value* pValue,
108 FX_BOOL bSetting,
109 XFA_ATTRIBUTE eAttribute) {
110 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
111 if (!pNotify) {
112 return;
113 }
114 CXFA_FFDoc* hDoc = pNotify->GetHDOC();
115 if (bSetting) {
116 ThrowException(XFA_IDS_UNABLE_SET_NUMPAGES);
117 return;
118 }
119 pValue->SetInteger(pNotify->GetDocProvider()->CountPages(hDoc));
120 }
121
122 void CScript_HostPseudoModel::Platform(CFXJSE_Value* pValue,
123 FX_BOOL bSetting,
124 XFA_ATTRIBUTE eAttribute) {
125 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
126 if (!pNotify) {
127 return;
128 }
129 if (bSetting) {
130 ThrowException(XFA_IDS_UNABLE_SET_PLATFORM);
131 return;
132 }
133 CFX_WideString wsPlatform;
134 pNotify->GetAppProvider()->GetPlatform(wsPlatform);
135 pValue->SetString(FX_UTF8Encode(wsPlatform).AsStringC());
136 }
137 void CScript_HostPseudoModel::Title(CFXJSE_Value* pValue,
138 FX_BOOL bSetting,
139 XFA_ATTRIBUTE eAttribute) {
140 if (!m_pDocument->GetScriptContext()->IsRunAtClient()) {
141 return;
142 }
143 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
144 if (!pNotify) {
145 return;
146 }
147 CXFA_FFDoc* hDoc = pNotify->GetHDOC();
148 if (bSetting) {
149 pNotify->GetDocProvider()->SetTitle(hDoc, pValue->ToWideString());
150 return;
151 }
152 CFX_WideString wsTitle;
153 pNotify->GetDocProvider()->GetTitle(hDoc, wsTitle);
154 pValue->SetString(FX_UTF8Encode(wsTitle).AsStringC());
155 }
156
157 void CScript_HostPseudoModel::ValidationsEnabled(CFXJSE_Value* pValue,
158 FX_BOOL bSetting,
159 XFA_ATTRIBUTE eAttribute) {
160 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
161 if (!pNotify) {
162 return;
163 }
164 CXFA_FFDoc* hDoc = pNotify->GetHDOC();
165 if (bSetting) {
166 pNotify->GetDocProvider()->SetValidationsEnabled(hDoc, pValue->ToBoolean());
167 return;
168 }
169 FX_BOOL bEnabled = pNotify->GetDocProvider()->IsValidationsEnabled(hDoc);
170 pValue->SetBoolean(bEnabled);
171 }
172 void CScript_HostPseudoModel::Variation(CFXJSE_Value* pValue,
173 FX_BOOL bSetting,
174 XFA_ATTRIBUTE eAttribute) {
175 if (!m_pDocument->GetScriptContext()->IsRunAtClient()) {
176 return;
177 }
178 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
179 if (!pNotify) {
180 return;
181 }
182 if (bSetting) {
183 ThrowException(XFA_IDS_UNABLE_SET_VARIATION);
184 return;
185 }
186 CFX_WideString wsVariation;
187 pNotify->GetAppProvider()->GetVariation(wsVariation);
188 pValue->SetString(FX_UTF8Encode(wsVariation).AsStringC());
189 }
190
191 void CScript_HostPseudoModel::Version(CFXJSE_Value* pValue,
192 FX_BOOL bSetting,
193 XFA_ATTRIBUTE eAttribute) {
194 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
195 if (!pNotify) {
196 return;
197 }
198 if (bSetting) {
199 ThrowException(XFA_IDS_UNABLE_SET_VERSION);
200 return;
201 }
202 CFX_WideString wsVersion;
203 pNotify->GetAppProvider()->GetVersion(wsVersion);
204 pValue->SetString(FX_UTF8Encode(wsVersion).AsStringC());
205 }
206
207 void CScript_HostPseudoModel::Name(CFXJSE_Value* pValue,
208 FX_BOOL bSetting,
209 XFA_ATTRIBUTE eAttribute) {
210 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
211 if (!pNotify) {
212 return;
213 }
214 if (bSetting) {
215 ThrowException(XFA_IDS_INVAlID_PROP_SET);
216 return;
217 }
218 CFX_WideString wsAppName;
219 pNotify->GetAppProvider()->GetAppName(wsAppName);
220 pValue->SetString(FX_UTF8Encode(wsAppName).AsStringC());
221 }
222
223 void CScript_HostPseudoModel::GotoURL(CFXJSE_Arguments* pArguments) {
224 if (!m_pDocument->GetScriptContext()->IsRunAtClient()) {
225 return;
226 }
227 int32_t iLength = pArguments->GetLength();
228 if (iLength != 1) {
229 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"gotoURL");
230 return;
231 }
232 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
233 if (!pNotify) {
234 return;
235 }
236 CXFA_FFDoc* hDoc = pNotify->GetHDOC();
237 CFX_WideString wsURL;
238 if (iLength >= 1) {
239 CFX_ByteString bsURL = pArguments->GetUTF8String(0);
240 wsURL = CFX_WideString::FromUTF8(bsURL.AsStringC());
241 }
242 pNotify->GetDocProvider()->GotoURL(hDoc, wsURL);
243 }
244 void CScript_HostPseudoModel::OpenList(CFXJSE_Arguments* pArguments) {
245 if (!m_pDocument->GetScriptContext()->IsRunAtClient()) {
246 return;
247 }
248 int32_t iLength = pArguments->GetLength();
249 if (iLength != 1) {
250 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"openList");
251 return;
252 }
253 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
254 if (!pNotify) {
255 return;
256 }
257 CXFA_Node* pNode = nullptr;
258 if (iLength >= 1) {
259 std::unique_ptr<CFXJSE_Value> pValue(pArguments->GetValue(0));
260 if (pValue->IsObject()) {
261 pNode = ToNode(pValue.get(), nullptr);
262 } else if (pValue->IsString()) {
263 CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
264 if (!pScriptContext)
265 return;
266
267 CXFA_Object* pObject = pScriptContext->GetThisObject();
268 if (!pObject)
269 return;
270
271 uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Parent |
272 XFA_RESOLVENODE_Siblings;
273 XFA_RESOLVENODE_RS resoveNodeRS;
274 int32_t iRet = pScriptContext->ResolveObjects(
275 pObject, pValue->ToWideString().AsStringC(), resoveNodeRS, dwFlag);
276 if (iRet < 1 || !resoveNodeRS.nodes[0]->IsNode())
277 return;
278
279 pNode = resoveNodeRS.nodes[0]->AsNode();
280 }
281 }
282 CXFA_LayoutProcessor* pDocLayout = m_pDocument->GetDocLayout();
283 if (!pDocLayout) {
284 return;
285 }
286 CXFA_FFWidget* hWidget =
287 pNotify->GetHWidget(pDocLayout->GetLayoutItem(pNode));
288 if (!hWidget) {
289 return;
290 }
291 pNotify->GetDocProvider()->SetFocusWidget(pNotify->GetHDOC(), hWidget);
292 pNotify->OpenDropDownList(hWidget);
293 }
294 void CScript_HostPseudoModel::Response(CFXJSE_Arguments* pArguments) {
295 int32_t iLength = pArguments->GetLength();
296 if (iLength < 1 || iLength > 4) {
297 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"response");
298 return;
299 }
300 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
301 if (!pNotify) {
302 return;
303 }
304 CFX_WideString wsQuestion;
305 CFX_WideString wsTitle;
306 CFX_WideString wsDefaultAnswer;
307 FX_BOOL bMark = FALSE;
308 if (iLength >= 1) {
309 CFX_ByteString bsQuestion = pArguments->GetUTF8String(0);
310 wsQuestion = CFX_WideString::FromUTF8(bsQuestion.AsStringC());
311 }
312 if (iLength >= 2) {
313 CFX_ByteString bsTitle = pArguments->GetUTF8String(1);
314 wsTitle = CFX_WideString::FromUTF8(bsTitle.AsStringC());
315 }
316 if (iLength >= 3) {
317 CFX_ByteString bsDefaultAnswer = pArguments->GetUTF8String(2);
318 wsDefaultAnswer = CFX_WideString::FromUTF8(bsDefaultAnswer.AsStringC());
319 }
320 if (iLength >= 4) {
321 bMark = pArguments->GetInt32(3) == 0 ? FALSE : TRUE;
322 }
323 CFX_WideString wsAnswer = pNotify->GetAppProvider()->Response(
324 wsQuestion, wsTitle, wsDefaultAnswer, bMark);
325 CFXJSE_Value* pValue = pArguments->GetReturnValue();
326 if (pValue)
327 pValue->SetString(FX_UTF8Encode(wsAnswer).AsStringC());
328 }
329
330 void CScript_HostPseudoModel::DocumentInBatch(CFXJSE_Arguments* pArguments) {
331 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
332 if (!pNotify) {
333 return;
334 }
335 int32_t iCur = pNotify->GetAppProvider()->GetCurDocumentInBatch();
336 CFXJSE_Value* pValue = pArguments->GetReturnValue();
337 if (pValue)
338 pValue->SetInteger(iCur);
339 }
340 static int32_t XFA_FilterName(const CFX_WideStringC& wsExpression,
341 int32_t nStart,
342 CFX_WideString& wsFilter) {
343 ASSERT(nStart > -1);
344 int32_t iLength = wsExpression.GetLength();
345 if (nStart >= iLength) {
346 return iLength;
347 }
348 FX_WCHAR* pBuf = wsFilter.GetBuffer(iLength - nStart);
349 int32_t nCount = 0;
350 const FX_WCHAR* pSrc = wsExpression.c_str();
351 FX_WCHAR wCur;
352 while (nStart < iLength) {
353 wCur = pSrc[nStart++];
354 if (wCur == ',') {
355 break;
356 }
357 pBuf[nCount++] = wCur;
358 }
359 wsFilter.ReleaseBuffer(nCount);
360 wsFilter.TrimLeft();
361 wsFilter.TrimRight();
362 return nStart;
363 }
364 void CScript_HostPseudoModel::ResetData(CFXJSE_Arguments* pArguments) {
365 int32_t iLength = pArguments->GetLength();
366 if (iLength < 0 || iLength > 1) {
367 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"resetData");
368 return;
369 }
370 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
371 if (!pNotify) {
372 return;
373 }
374 CFX_WideString wsExpression;
375 if (iLength >= 1) {
376 CFX_ByteString bsExpression = pArguments->GetUTF8String(0);
377 wsExpression = CFX_WideString::FromUTF8(bsExpression.AsStringC());
378 }
379 if (wsExpression.IsEmpty()) {
380 pNotify->ResetData();
381 return;
382 }
383 int32_t iStart = 0;
384 CFX_WideString wsName;
385 CXFA_Node* pNode = nullptr;
386 int32_t iExpLength = wsExpression.GetLength();
387 while (iStart < iExpLength) {
388 iStart = XFA_FilterName(wsExpression.AsStringC(), iStart, wsName);
389 CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
390 if (!pScriptContext) {
391 return;
392 }
393 CXFA_Object* pObject = pScriptContext->GetThisObject();
394 if (!pObject) {
395 return;
396 }
397 uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Parent |
398 XFA_RESOLVENODE_Siblings;
399 XFA_RESOLVENODE_RS resoveNodeRS;
400 int32_t iRet = pScriptContext->ResolveObjects(pObject, wsName.AsStringC(),
401 resoveNodeRS, dwFlag);
402 if (iRet < 1 || !resoveNodeRS.nodes[0]->IsNode()) {
403 continue;
404 }
405 pNode = resoveNodeRS.nodes[0]->AsNode();
406 pNotify->ResetData(pNode->GetWidgetData());
407 }
408 if (!pNode) {
409 pNotify->ResetData();
410 }
411 }
412 void CScript_HostPseudoModel::Beep(CFXJSE_Arguments* pArguments) {
413 if (!m_pDocument->GetScriptContext()->IsRunAtClient()) {
414 return;
415 }
416 int32_t iLength = pArguments->GetLength();
417 if (iLength < 0 || iLength > 1) {
418 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"beep");
419 return;
420 }
421 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
422 if (!pNotify) {
423 return;
424 }
425 uint32_t dwType = 4;
426 if (iLength >= 1) {
427 dwType = pArguments->GetInt32(0);
428 }
429 pNotify->GetAppProvider()->Beep(dwType);
430 }
431 void CScript_HostPseudoModel::SetFocus(CFXJSE_Arguments* pArguments) {
432 if (!m_pDocument->GetScriptContext()->IsRunAtClient()) {
433 return;
434 }
435 int32_t iLength = pArguments->GetLength();
436 if (iLength != 1) {
437 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"setFocus");
438 return;
439 }
440 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
441 if (!pNotify) {
442 return;
443 }
444 CXFA_Node* pNode = nullptr;
445 if (iLength >= 1) {
446 std::unique_ptr<CFXJSE_Value> pValue(pArguments->GetValue(0));
447 if (pValue->IsObject()) {
448 pNode = ToNode(pValue.get(), nullptr);
449 } else if (pValue->IsString()) {
450 CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
451 if (!pScriptContext)
452 return;
453
454 CXFA_Object* pObject = pScriptContext->GetThisObject();
455 if (!pObject)
456 return;
457
458 uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Parent |
459 XFA_RESOLVENODE_Siblings;
460 XFA_RESOLVENODE_RS resoveNodeRS;
461 int32_t iRet = pScriptContext->ResolveObjects(
462 pObject, pValue->ToWideString().AsStringC(), resoveNodeRS, dwFlag);
463 if (iRet < 1 || !resoveNodeRS.nodes[0]->IsNode())
464 return;
465
466 pNode = resoveNodeRS.nodes[0]->AsNode();
467 }
468 }
469 pNotify->SetFocusWidgetNode(pNode);
470 }
471
472 void CScript_HostPseudoModel::GetFocus(CFXJSE_Arguments* pArguments) {
473 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
474 if (!pNotify) {
475 return;
476 }
477 CXFA_Node* pNode = pNotify->GetFocusWidgetNode();
478 if (!pNode) {
479 return;
480 }
481 pArguments->GetReturnValue()->Assign(
482 m_pDocument->GetScriptContext()->GetJSValueFromMap(pNode));
483 }
484 void CScript_HostPseudoModel::MessageBox(CFXJSE_Arguments* pArguments) {
485 if (!m_pDocument->GetScriptContext()->IsRunAtClient()) {
486 return;
487 }
488 int32_t iLength = pArguments->GetLength();
489 if (iLength < 1 || iLength > 4) {
490 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"messageBox");
491 return;
492 }
493 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
494 if (!pNotify) {
495 return;
496 }
497 CFX_WideString wsMessage;
498 CFX_WideString bsTitle;
499 uint32_t dwMessageType = XFA_MBICON_Error;
500 uint32_t dwButtonType = XFA_MB_OK;
501 if (iLength >= 1) {
502 if (!ValidateArgsForMsg(pArguments, 0, wsMessage)) {
503 return;
504 }
505 }
506 if (iLength >= 2) {
507 if (!ValidateArgsForMsg(pArguments, 1, bsTitle)) {
508 return;
509 }
510 }
511 if (iLength >= 3) {
512 dwMessageType = pArguments->GetInt32(2);
513 if (dwMessageType > XFA_MBICON_Status) {
514 dwMessageType = XFA_MBICON_Error;
515 }
516 }
517 if (iLength >= 4) {
518 dwButtonType = pArguments->GetInt32(3);
519 if (dwButtonType > XFA_MB_YesNoCancel) {
520 dwButtonType = XFA_MB_OK;
521 }
522 }
523 int32_t iValue = pNotify->GetAppProvider()->MsgBox(
524 wsMessage, bsTitle, dwMessageType, dwButtonType);
525 CFXJSE_Value* pValue = pArguments->GetReturnValue();
526 if (pValue)
527 pValue->SetInteger(iValue);
528 }
529 FX_BOOL CScript_HostPseudoModel::ValidateArgsForMsg(
530 CFXJSE_Arguments* pArguments,
531 int32_t iArgIndex,
532 CFX_WideString& wsValue) {
533 if (!pArguments || iArgIndex < 0) {
534 return FALSE;
535 }
536 FX_BOOL bIsJsType = FALSE;
537 if (m_pDocument->GetScriptContext()->GetType() ==
538 XFA_SCRIPTLANGTYPE_Javascript) {
539 bIsJsType = TRUE;
540 }
541 std::unique_ptr<CFXJSE_Value> pValueArg(pArguments->GetValue(iArgIndex));
542 if (!pValueArg->IsString() && bIsJsType) {
543 ThrowException(XFA_IDS_ARGUMENT_MISMATCH);
544 return FALSE;
545 }
546 if (pValueArg->IsNull()) {
547 wsValue = FX_WSTRC(L"");
548 } else {
549 wsValue = pValueArg->ToWideString();
550 }
551 return TRUE;
552 }
553 void CScript_HostPseudoModel::DocumentCountInBatch(
554 CFXJSE_Arguments* pArguments) {
555 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
556 if (!pNotify) {
557 return;
558 }
559 int32_t iValue = pNotify->GetAppProvider()->GetDocumentCountInBatch();
560 CFXJSE_Value* pValue = pArguments->GetReturnValue();
561 if (pValue)
562 pValue->SetInteger(iValue);
563 }
564 void CScript_HostPseudoModel::Print(CFXJSE_Arguments* pArguments) {
565 if (!m_pDocument->GetScriptContext()->IsRunAtClient()) {
566 return;
567 }
568 int32_t iLength = pArguments->GetLength();
569 if (iLength != 8) {
570 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"print");
571 return;
572 }
573 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
574 if (!pNotify) {
575 return;
576 }
577 CXFA_FFDoc* hDoc = pNotify->GetHDOC();
578 uint32_t dwOptions = 0;
579 FX_BOOL bShowDialog = TRUE;
580 if (iLength >= 1) {
581 bShowDialog = pArguments->GetInt32(0) == 0 ? FALSE : TRUE;
582 }
583 if (bShowDialog) {
584 dwOptions |= XFA_PRINTOPT_ShowDialog;
585 }
586 int32_t nStartPage = 0;
587 if (iLength >= 2) {
588 nStartPage = pArguments->GetInt32(1);
589 }
590 int32_t nEndPage = 0;
591 if (iLength >= 3) {
592 nEndPage = pArguments->GetInt32(2);
593 }
594 FX_BOOL bCanCancel = TRUE;
595 if (iLength >= 4) {
596 bCanCancel = pArguments->GetInt32(3) == 0 ? FALSE : TRUE;
597 }
598 if (bCanCancel) {
599 dwOptions |= XFA_PRINTOPT_CanCancel;
600 }
601 FX_BOOL bShrinkPage = TRUE;
602 if (iLength >= 5) {
603 bShrinkPage = pArguments->GetInt32(4) == 0 ? FALSE : TRUE;
604 }
605 if (bShrinkPage) {
606 dwOptions |= XFA_PRINTOPT_ShrinkPage;
607 }
608 FX_BOOL bAsImage = TRUE;
609 if (iLength >= 6) {
610 bAsImage = pArguments->GetInt32(5) == 0 ? FALSE : TRUE;
611 }
612 if (bAsImage) {
613 dwOptions |= XFA_PRINTOPT_AsImage;
614 }
615 FX_BOOL bReverseOrder = TRUE;
616 if (iLength >= 7) {
617 bAsImage = pArguments->GetInt32(5) == 0 ? FALSE : TRUE;
618 }
619 bReverseOrder = pArguments->GetInt32(6) == 0 ? FALSE : TRUE;
620 if (bReverseOrder) {
621 dwOptions |= XFA_PRINTOPT_ReverseOrder;
622 }
623 FX_BOOL bPrintAnnot = TRUE;
624 if (iLength >= 8) {
625 bPrintAnnot = pArguments->GetInt32(7) == 0 ? FALSE : TRUE;
626 }
627 if (bPrintAnnot) {
628 dwOptions |= XFA_PRINTOPT_PrintAnnot;
629 }
630 pNotify->GetDocProvider()->Print(hDoc, nStartPage, nEndPage, dwOptions);
631 }
632 void CScript_HostPseudoModel::ImportData(CFXJSE_Arguments* pArguments) {
633 int32_t iLength = pArguments->GetLength();
634 if (iLength < 0 || iLength > 1) {
635 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"importData");
636 return;
637 }
638 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
639 if (!pNotify) {
640 return;
641 }
642 CFX_WideString wsFilePath;
643 if (iLength > 0) {
644 CFX_ByteString bsFilePath = pArguments->GetUTF8String(0);
645 wsFilePath = CFX_WideString::FromUTF8(bsFilePath.AsStringC());
646 }
647 CXFA_FFDoc* hDoc = pNotify->GetHDOC();
648 pNotify->GetDocProvider()->ImportData(hDoc, wsFilePath);
649 }
650 void CScript_HostPseudoModel::ExportData(CFXJSE_Arguments* pArguments) {
651 int32_t iLength = pArguments->GetLength();
652 if (iLength < 0 || iLength > 2) {
653 ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"exportData");
654 return;
655 }
656 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
657 if (!pNotify) {
658 return;
659 }
660 CXFA_FFDoc* hDoc = pNotify->GetHDOC();
661 CFX_WideString wsFilePath;
662 FX_BOOL bXDP = TRUE;
663 if (iLength >= 1) {
664 CFX_ByteString bsFilePath = pArguments->GetUTF8String(0);
665 wsFilePath = CFX_WideString::FromUTF8(bsFilePath.AsStringC());
666 }
667 if (iLength >= 2) {
668 bXDP = pArguments->GetInt32(1) == 0 ? FALSE : TRUE;
669 }
670 pNotify->GetDocProvider()->ExportData(hDoc, wsFilePath, bXDP);
671 }
672
673 void CScript_HostPseudoModel::PageUp(CFXJSE_Arguments* pArguments) {
674 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
675 if (!pNotify) {
676 return;
677 }
678 CXFA_FFDoc* hDoc = pNotify->GetHDOC();
679 int32_t nCurPage = pNotify->GetDocProvider()->GetCurrentPage(hDoc);
680 int32_t nNewPage = 0;
681 if (nCurPage <= 1) {
682 return;
683 }
684 nNewPage = nCurPage - 1;
685 pNotify->GetDocProvider()->SetCurrentPage(hDoc, nNewPage);
686 }
687
688 void CScript_HostPseudoModel::PageDown(CFXJSE_Arguments* pArguments) {
689 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
690 if (!pNotify) {
691 return;
692 }
693 CXFA_FFDoc* hDoc = pNotify->GetHDOC();
694 int32_t nCurPage = pNotify->GetDocProvider()->GetCurrentPage(hDoc);
695 int32_t nPageCount = pNotify->GetDocProvider()->CountPages(hDoc);
696 if (!nPageCount || nCurPage == nPageCount) {
697 return;
698 }
699 int32_t nNewPage = 0;
700 if (nCurPage >= nPageCount) {
701 nNewPage = nPageCount - 1;
702 } else {
703 nNewPage = nCurPage + 1;
704 }
705 pNotify->GetDocProvider()->SetCurrentPage(hDoc, nNewPage);
706 }
707
708 void CScript_HostPseudoModel::CurrentDateTime(CFXJSE_Arguments* pArguments) {
709 CXFA_FFNotify* pNotify = m_pDocument->GetNotify();
710 if (!pNotify) {
711 return;
712 }
713 CFX_WideString wsDataTime = pNotify->GetCurrentDateTime();
714 CFXJSE_Value* pValue = pArguments->GetReturnValue();
715 if (pValue)
716 pValue->SetString(FX_UTF8Encode(wsDataTime).AsStringC());
717 }
OLDNEW
« no previous file with comments | « xfa/fxfa/parser/xfa_script_hostpseudomodel.h ('k') | xfa/fxfa/parser/xfa_script_layoutpseudomodel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698