OLD | NEW |
| (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 "fpdfsdk/fpdfxfa/cpdfxfa_app.h" | |
8 | |
9 #include <memory> | |
10 | |
11 #include "fpdfsdk/cpdfsdk_formfillenvironment.h" | |
12 #include "fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h" | |
13 #include "fpdfsdk/fsdk_define.h" | |
14 #include "fpdfsdk/javascript/cjs_runtime.h" | |
15 #include "fxjs/fxjs_v8.h" | |
16 #include "xfa/fxfa/xfa_ffapp.h" | |
17 #include "xfa/fxfa/xfa_fontmgr.h" | |
18 | |
19 CPDFXFA_App::CPDFXFA_App() { | |
20 m_pXFAApp = pdfium::MakeUnique<CXFA_FFApp>(this); | |
21 m_pXFAApp->SetDefaultFontMgr(pdfium::MakeUnique<CXFA_DefFontMgr>()); | |
22 } | |
23 | |
24 CPDFXFA_App::~CPDFXFA_App() {} | |
25 | |
26 v8::Isolate* CPDFXFA_App::GetJSERuntime() const { | |
27 if (!m_pFormFillEnv) | |
28 return nullptr; | |
29 | |
30 // XFA requires V8, if we have V8 then we have a CJS_Runtime and not the stub. | |
31 CJS_Runtime* runtime = | |
32 static_cast<CJS_Runtime*>(m_pFormFillEnv->GetJSRuntime()); | |
33 return runtime->GetIsolate(); | |
34 } | |
35 | |
36 void CPDFXFA_App::SetFormFillEnv(CPDFSDK_FormFillEnvironment* pFormFillEnv) { | |
37 m_pFormFillEnv = pFormFillEnv; | |
38 } | |
39 | |
40 void CPDFXFA_App::GetAppName(CFX_WideString& wsName) { | |
41 if (m_pFormFillEnv) | |
42 wsName = m_pFormFillEnv->FFI_GetAppName(); | |
43 } | |
44 | |
45 void CPDFXFA_App::GetLanguage(CFX_WideString& wsLanguage) { | |
46 if (m_pFormFillEnv) | |
47 wsLanguage = m_pFormFillEnv->GetLanguage(); | |
48 } | |
49 | |
50 void CPDFXFA_App::GetPlatform(CFX_WideString& wsPlatform) { | |
51 if (m_pFormFillEnv) { | |
52 wsPlatform = m_pFormFillEnv->GetPlatform(); | |
53 } | |
54 } | |
55 | |
56 void CPDFXFA_App::Beep(uint32_t dwType) { | |
57 if (m_pFormFillEnv) | |
58 m_pFormFillEnv->JS_appBeep(dwType); | |
59 } | |
60 | |
61 int32_t CPDFXFA_App::MsgBox(const CFX_WideString& wsMessage, | |
62 const CFX_WideString& wsTitle, | |
63 uint32_t dwIconType, | |
64 uint32_t dwButtonType) { | |
65 if (!m_pFormFillEnv) | |
66 return -1; | |
67 | |
68 uint32_t iconType = 0; | |
69 int iButtonType = 0; | |
70 switch (dwIconType) { | |
71 case XFA_MBICON_Error: | |
72 iconType |= 0; | |
73 break; | |
74 case XFA_MBICON_Warning: | |
75 iconType |= 1; | |
76 break; | |
77 case XFA_MBICON_Question: | |
78 iconType |= 2; | |
79 break; | |
80 case XFA_MBICON_Status: | |
81 iconType |= 3; | |
82 break; | |
83 } | |
84 switch (dwButtonType) { | |
85 case XFA_MB_OK: | |
86 iButtonType |= 0; | |
87 break; | |
88 case XFA_MB_OKCancel: | |
89 iButtonType |= 1; | |
90 break; | |
91 case XFA_MB_YesNo: | |
92 iButtonType |= 2; | |
93 break; | |
94 case XFA_MB_YesNoCancel: | |
95 iButtonType |= 3; | |
96 break; | |
97 } | |
98 int32_t iRet = m_pFormFillEnv->JS_appAlert(wsMessage.c_str(), wsTitle.c_str(), | |
99 iButtonType, iconType); | |
100 switch (iRet) { | |
101 case 1: | |
102 return XFA_IDOK; | |
103 case 2: | |
104 return XFA_IDCancel; | |
105 case 3: | |
106 return XFA_IDNo; | |
107 case 4: | |
108 return XFA_IDYes; | |
109 } | |
110 return XFA_IDYes; | |
111 } | |
112 | |
113 CFX_WideString CPDFXFA_App::Response(const CFX_WideString& wsQuestion, | |
114 const CFX_WideString& wsTitle, | |
115 const CFX_WideString& wsDefaultAnswer, | |
116 FX_BOOL bMark) { | |
117 CFX_WideString wsAnswer; | |
118 if (!m_pFormFillEnv) | |
119 return wsAnswer; | |
120 | |
121 int nLength = 2048; | |
122 char* pBuff = new char[nLength]; | |
123 nLength = m_pFormFillEnv->JS_appResponse(wsQuestion.c_str(), wsTitle.c_str(), | |
124 wsDefaultAnswer.c_str(), nullptr, | |
125 bMark, pBuff, nLength); | |
126 if (nLength > 0) { | |
127 nLength = nLength > 2046 ? 2046 : nLength; | |
128 pBuff[nLength] = 0; | |
129 pBuff[nLength + 1] = 0; | |
130 wsAnswer = CFX_WideString::FromUTF16LE( | |
131 reinterpret_cast<const unsigned short*>(pBuff), | |
132 nLength / sizeof(unsigned short)); | |
133 } | |
134 delete[] pBuff; | |
135 return wsAnswer; | |
136 } | |
137 | |
138 IFX_SeekableReadStream* CPDFXFA_App::DownloadURL(const CFX_WideString& wsURL) { | |
139 return m_pFormFillEnv ? m_pFormFillEnv->DownloadFromURL(wsURL.c_str()) | |
140 : nullptr; | |
141 } | |
142 | |
143 FX_BOOL CPDFXFA_App::PostRequestURL(const CFX_WideString& wsURL, | |
144 const CFX_WideString& wsData, | |
145 const CFX_WideString& wsContentType, | |
146 const CFX_WideString& wsEncode, | |
147 const CFX_WideString& wsHeader, | |
148 CFX_WideString& wsResponse) { | |
149 if (!m_pFormFillEnv) | |
150 return FALSE; | |
151 | |
152 wsResponse = m_pFormFillEnv->PostRequestURL( | |
153 wsURL.c_str(), wsData.c_str(), wsContentType.c_str(), wsEncode.c_str(), | |
154 wsHeader.c_str()); | |
155 return TRUE; | |
156 } | |
157 | |
158 FX_BOOL CPDFXFA_App::PutRequestURL(const CFX_WideString& wsURL, | |
159 const CFX_WideString& wsData, | |
160 const CFX_WideString& wsEncode) { | |
161 return m_pFormFillEnv && | |
162 m_pFormFillEnv->PutRequestURL(wsURL.c_str(), wsData.c_str(), | |
163 wsEncode.c_str()); | |
164 } | |
165 | |
166 void CPDFXFA_App::LoadString(int32_t iStringID, CFX_WideString& wsString) { | |
167 switch (iStringID) { | |
168 case XFA_IDS_ValidateFailed: | |
169 wsString = L"%s validation failed"; | |
170 return; | |
171 case XFA_IDS_CalcOverride: | |
172 wsString = L"Calculate Override"; | |
173 return; | |
174 case XFA_IDS_ModifyField: | |
175 wsString = L"Are you sure you want to modify this field?"; | |
176 return; | |
177 case XFA_IDS_NotModifyField: | |
178 wsString = L"You are not allowed to modify this field."; | |
179 return; | |
180 case XFA_IDS_AppName: | |
181 wsString = L"pdfium"; | |
182 return; | |
183 case XFA_IDS_Unable_TO_SET: | |
184 wsString = L"Unable to set "; | |
185 return; | |
186 case XFA_IDS_INVAlID_PROP_SET: | |
187 wsString = L"Invalid property set operation."; | |
188 return; | |
189 case XFA_IDS_NOT_DEFAUL_VALUE: | |
190 wsString = L" doesn't have a default property."; | |
191 return; | |
192 case XFA_IDS_UNABLE_SET_LANGUAGE: | |
193 wsString = L"Unable to set language value."; | |
194 return; | |
195 case XFA_IDS_UNABLE_SET_NUMPAGES: | |
196 wsString = L"Unable to set numPages value."; | |
197 return; | |
198 case XFA_IDS_UNABLE_SET_PLATFORM: | |
199 wsString = L"Unable to set platform value."; | |
200 return; | |
201 case XFA_IDS_UNABLE_SET_VARIATION: | |
202 wsString = L"Unable to set variation value."; | |
203 return; | |
204 case XFA_IDS_UNABLE_SET_VERSION: | |
205 wsString = L"Unable to set version value."; | |
206 return; | |
207 case XFA_IDS_UNABLE_SET_READY: | |
208 wsString = L"Unable to set ready value."; | |
209 return; | |
210 case XFA_IDS_COMPILER_ERROR: | |
211 wsString = L"Compiler error."; | |
212 return; | |
213 case XFA_IDS_DIVIDE_ZERO: | |
214 wsString = L"Divide by zero."; | |
215 return; | |
216 case XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT: | |
217 wsString = | |
218 L"An attempt was made to reference property '%s' of a non-object in " | |
219 L"SOM expression %s."; | |
220 return; | |
221 case XFA_IDS_INDEX_OUT_OF_BOUNDS: | |
222 wsString = L"Index value is out of bounds."; | |
223 return; | |
224 case XFA_IDS_INCORRECT_NUMBER_OF_METHOD: | |
225 wsString = L"Incorrect number of parameters calling method '%s'."; | |
226 return; | |
227 case XFA_IDS_ARGUMENT_MISMATCH: | |
228 wsString = L"Argument mismatch in property or function argument."; | |
229 return; | |
230 case XFA_IDS_NOT_HAVE_PROPERTY: | |
231 wsString = L"'%s' doesn't have property '%s'."; | |
232 return; | |
233 case XFA_IDS_VIOLATE_BOUNDARY: | |
234 wsString = | |
235 L"The element [%s] has violated its allowable number of occurrences."; | |
236 return; | |
237 case XFA_IDS_SERVER_DENY: | |
238 wsString = L"Server does not permit."; | |
239 return; | |
240 case XFA_IDS_ValidateLimit: | |
241 wsString = | |
242 L"Message limit exceeded. Remaining %d validation errors not " | |
243 L"reported."; | |
244 return; | |
245 case XFA_IDS_ValidateNullWarning: | |
246 wsString = | |
247 L"%s cannot be blank. To ignore validations for %s, click Ignore."; | |
248 return; | |
249 case XFA_IDS_ValidateNullError: | |
250 wsString = L"%s cannot be blank."; | |
251 return; | |
252 case XFA_IDS_ValidateWarning: | |
253 wsString = | |
254 L"The value you entered for %s is invalid. To ignore validations for " | |
255 L"%s, click Ignore."; | |
256 return; | |
257 case XFA_IDS_ValidateError: | |
258 wsString = L"The value you entered for %s is invalid."; | |
259 return; | |
260 } | |
261 } | |
262 | |
263 IFWL_AdapterTimerMgr* CPDFXFA_App::GetTimerMgr() { | |
264 CXFA_FWLAdapterTimerMgr* pAdapter = nullptr; | |
265 if (m_pFormFillEnv) | |
266 pAdapter = new CXFA_FWLAdapterTimerMgr(m_pFormFillEnv); | |
267 return pAdapter; | |
268 } | |
OLD | NEW |