Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / fpdfsdk / src / fpdfxfa / fpdfxfa_app.cpp
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4  \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #include "../../include/fsdk_define.h"\r
8 #include "../../include/fpdfformfill.h"\r
9 #include "../../include/fsdk_mgr.h"\r
10 #include "../../include/fpdfxfa/fpdfxfa_doc.h"\r
11 #include "../../include/fpdfxfa/fpdfxfa_util.h"\r
12 #include "../../include/jsapi/fxjs_v8.h"\r
13 #include "../../include/javascript/IJavaScript.h"\r
14 #include "../../include/fpdfxfa/fpdfxfa_app.h"\r
15 CPDFXFA_App* CPDFXFA_App::m_pApp = NULL;\r
16 \r
17 CPDFXFA_App* FPDFXFA_GetApp()\r
18 {\r
19         if (!CPDFXFA_App::m_pApp)\r
20                 CPDFXFA_App::m_pApp = FX_NEW CPDFXFA_App();\r
21 \r
22         return CPDFXFA_App::m_pApp;\r
23 }\r
24 \r
25 void FPDFXFA_ReleaseApp()\r
26 {\r
27         if (CPDFXFA_App::m_pApp)\r
28                 delete CPDFXFA_App::m_pApp;\r
29         CPDFXFA_App::m_pApp = NULL;\r
30 }\r
31 \r
32 CJS_RuntimeFactory* g_GetJSRuntimeFactory()\r
33 {\r
34         static CJS_RuntimeFactory g_JSRuntimeFactory;\r
35         return &g_JSRuntimeFactory;\r
36 }\r
37 \r
38 CPDFXFA_App::CPDFXFA_App() : \r
39         m_pXFAApp(NULL), \r
40         m_pFontMgr(NULL),\r
41         m_hJSERuntime(NULL),\r
42         //m_pJSRuntime(NULL),\r
43         //m_pEnv(NULL),\r
44         m_csAppType(JS_STR_VIEWERTYPE_STANDARD)\r
45 {\r
46         m_pJSRuntimeFactory = NULL;\r
47         m_pJSRuntimeFactory = g_GetJSRuntimeFactory();\r
48         m_pJSRuntimeFactory->AddRef();\r
49         m_pEnvList.RemoveAll(); \r
50         m_bInitRuntime = FALSE;\r
51 }\r
52 //IFXJS_Runtime* CPDFXFA_App::GetJSRuntime()\r
53 //{\r
54 //      FXSYS_assert(m_pJSRuntimeFactory);\r
55 //      if(!m_pJSRuntime)\r
56 //              m_pJSRuntime = m_pJSRuntimeFactory->NewJSRuntime(this);\r
57 //      return m_pJSRuntime;\r
58 //}\r
59 \r
60 CPDFXFA_App::~CPDFXFA_App()\r
61 {\r
62         if (m_pFontMgr)\r
63         {\r
64                 m_pFontMgr->Release();\r
65                 m_pFontMgr = NULL;\r
66         }\r
67 \r
68         if (m_pXFAApp)\r
69         {\r
70                 m_pXFAApp->Release();\r
71                 m_pXFAApp = NULL;\r
72         }\r
73 \r
74         //if (m_pJSRuntime && m_pJSRuntimeFactory)\r
75         //      m_pJSRuntimeFactory->DeleteJSRuntime(m_pJSRuntime);\r
76         m_pJSRuntimeFactory->Release();\r
77 \r
78 \r
79         if (m_hJSERuntime)\r
80         {\r
81                 FXJSE_Runtime_Release(m_hJSERuntime);\r
82                 m_hJSERuntime = NULL;\r
83         }\r
84 \r
85         FXJSE_Finalize();\r
86 \r
87         BC_Library_Destory();\r
88 }\r
89 \r
90 FX_BOOL CPDFXFA_App::Initialize()\r
91 {\r
92         BC_Library_Init();\r
93 \r
94         FXJSE_Initialize();\r
95         m_hJSERuntime = FXJSE_Runtime_Create();\r
96 \r
97         if (!m_hJSERuntime) \r
98                 return FALSE;\r
99 \r
100         //m_pJSRuntime = m_pJSRuntimeFactory->NewJSRuntime(this);\r
101         \r
102         m_pXFAApp = IXFA_App::Create(this);\r
103         if (!m_pXFAApp)\r
104                 return FALSE;\r
105 \r
106         m_pFontMgr = XFA_GetDefaultFontMgr();\r
107         if (!m_pFontMgr)\r
108                 return FALSE;\r
109 \r
110         m_pXFAApp->SetDefaultFontMgr(m_pFontMgr);\r
111 \r
112         return TRUE;\r
113 }\r
114 \r
115 FX_BOOL CPDFXFA_App::AddFormFillEnv(CPDFDoc_Environment* pEnv)\r
116 {\r
117         if (!pEnv) return FALSE;\r
118 \r
119         m_pEnvList.Add(pEnv);\r
120         return TRUE;\r
121 }\r
122 \r
123 FX_BOOL CPDFXFA_App::RemoveFormFillEnv(CPDFDoc_Environment* pEnv)\r
124 {\r
125         if (!pEnv) return FALSE;\r
126 \r
127         int nFind = m_pEnvList.Find(pEnv);\r
128         if (nFind != -1) {\r
129                 m_pEnvList.RemoveAt(nFind);\r
130                 return TRUE;\r
131         }\r
132 \r
133         return FALSE;\r
134 }\r
135 void CPDFXFA_App::ReleaseRuntime() \r
136 {\r
137         v8::Persistent<v8::Context> context;\r
138         JS_ReleaseRuntime((IJS_Runtime*)m_hJSERuntime, context);\r
139 }\r
140 \r
141 void CPDFXFA_App::GetAppType(CFX_WideString &wsAppType)\r
142 {\r
143         wsAppType = m_csAppType;\r
144 }\r
145 \r
146 void CPDFXFA_App::GetAppName(CFX_WideString& wsName)\r
147 {\r
148         CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);\r
149         if (pEnv)\r
150         {\r
151                 wsName = pEnv->FFI_GetAppName();\r
152         }\r
153 }\r
154 \r
155 void CPDFXFA_App::SetAppType(FX_WSTR wsAppType)\r
156 {\r
157         m_csAppType = wsAppType;\r
158 }\r
159 \r
160 void CPDFXFA_App::GetLanguage(CFX_WideString &wsLanguage)\r
161 {\r
162         CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);\r
163         if (pEnv)\r
164         {\r
165                 wsLanguage = pEnv->FFI_GetLanguage();\r
166         }\r
167 }\r
168 \r
169 void CPDFXFA_App::GetPlatform(CFX_WideString &wsPlatform)\r
170 {\r
171         CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);\r
172         if (pEnv)\r
173         {\r
174                 wsPlatform = pEnv->FFI_GetPlatform();\r
175         }\r
176 }\r
177 \r
178 void CPDFXFA_App::GetVariation(CFX_WideString &wsVariation)\r
179 {\r
180         wsVariation = JS_STR_VIEWERVARIATION;\r
181 }\r
182 \r
183 void CPDFXFA_App::GetVersion(CFX_WideString &wsVersion)\r
184 {\r
185         wsVersion = JS_STR_VIEWERVERSION_XFA;\r
186 }\r
187 \r
188 void CPDFXFA_App::Beep(FX_DWORD dwType)\r
189 {\r
190         CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);\r
191         if (pEnv)\r
192         {\r
193                 pEnv->JS_appBeep(dwType);\r
194         }\r
195 }\r
196 \r
197 FX_INT32 CPDFXFA_App::MsgBox(FX_WSTR wsMessage, FX_WSTR wsTitle, FX_DWORD dwIconType, FX_DWORD dwButtonType)\r
198 {\r
199         CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);\r
200         if (!pEnv) \r
201                 return -1;\r
202 \r
203         FX_DWORD iconType = 0;\r
204         int iButtonType = 0;\r
205         switch (dwIconType)\r
206         {\r
207         case XFA_MBICON_Error:\r
208                 iconType |= 0;\r
209                 break;\r
210         case XFA_MBICON_Warning:\r
211                 iconType |= 1;\r
212                 break;\r
213         case XFA_MBICON_Question:\r
214                 iconType |= 2;\r
215                 break;\r
216         case XFA_MBICON_Status:\r
217                 iconType |= 3;\r
218                 break;\r
219         }\r
220         switch (dwButtonType)\r
221         {\r
222         case  XFA_MB_OK:\r
223                 iButtonType |= 0;\r
224                 break;\r
225         case XFA_MB_OKCancel:\r
226                 iButtonType |= 1;\r
227                 break;\r
228         case XFA_MB_YesNo:\r
229                 iButtonType |= 2;\r
230                 break;\r
231         case XFA_MB_YesNoCancel:\r
232                 iButtonType |= 3;\r
233                 break;\r
234         }\r
235         FX_INT32 iRet = pEnv->JS_appAlert(wsMessage.GetPtr(), wsTitle.GetPtr(), iButtonType, iconType);\r
236         switch (iRet)\r
237         {\r
238         case 1:\r
239                 return XFA_IDOK;\r
240         case 2:\r
241                 return XFA_IDCancel;\r
242         case 3:\r
243                 return XFA_IDNo;\r
244         case 4:\r
245                 return XFA_IDYes;\r
246         }\r
247         return XFA_IDYes;\r
248 }\r
249 \r
250 void CPDFXFA_App::Response(CFX_WideString &wsAnswer, FX_WSTR wsQuestion, FX_WSTR wsTitle, FX_WSTR wsDefaultAnswer, FX_BOOL bMark)\r
251 {\r
252         CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);\r
253         if (pEnv)\r
254         {\r
255                 int nLength = 2048;\r
256                 char* pBuff = new char[nLength];\r
257                 nLength = pEnv->JS_appResponse(wsQuestion.GetPtr(), wsTitle.GetPtr(), wsDefaultAnswer.GetPtr(), NULL, bMark, pBuff, nLength);\r
258                 if(nLength > 0)\r
259                 {\r
260                         nLength = nLength>2046?2046:nLength;\r
261                         pBuff[nLength] = 0;\r
262                         pBuff[nLength+1] = 0;\r
263                         wsAnswer = CFX_WideString::FromUTF16LE((unsigned short*)pBuff, nLength);\r
264                 }\r
265                 delete[] pBuff;\r
266         }\r
267 }\r
268 \r
269 FX_INT32 CPDFXFA_App::GetCurDocumentInBatch()\r
270 {\r
271         CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);\r
272         if (pEnv)\r
273         {\r
274                 return pEnv->FFI_GetCurDocument();\r
275         }\r
276         return 0;\r
277 }\r
278 \r
279 FX_INT32 CPDFXFA_App::GetDocumentCountInBatch()\r
280 {\r
281         CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);\r
282         if (pEnv)\r
283         {\r
284                 return pEnv->FFI_GetDocumentCount();\r
285         }\r
286 \r
287         return 0;\r
288 }\r
289 \r
290 IFX_FileRead* CPDFXFA_App::DownloadURL(FX_WSTR wsURL)\r
291 {\r
292         CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);\r
293         if (pEnv)\r
294         {\r
295                 return pEnv->FFI_DownloadFromURL(wsURL.GetPtr());\r
296         }\r
297         return NULL;\r
298 }\r
299 \r
300 FX_BOOL CPDFXFA_App::PostRequestURL(FX_WSTR wsURL, FX_WSTR wsData, FX_WSTR wsContentType, \r
301         FX_WSTR wsEncode, FX_WSTR wsHeader, CFX_WideString &wsResponse)\r
302 {\r
303         CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);\r
304         if (pEnv)\r
305         {\r
306                 wsResponse = pEnv->FFI_PostRequestURL(wsURL.GetPtr(), wsData.GetPtr(), wsContentType.GetPtr(), wsEncode.GetPtr(), wsHeader.GetPtr());\r
307                 return TRUE;\r
308         }\r
309         return FALSE;\r
310 }\r
311 \r
312 FX_BOOL CPDFXFA_App::PutRequestURL(FX_WSTR wsURL, FX_WSTR wsData, FX_WSTR wsEncode)\r
313 {\r
314         CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);\r
315         if (pEnv)\r
316         {\r
317                 return pEnv->FFI_PutRequestURL(wsURL.GetPtr(), wsData.GetPtr(), wsEncode.GetPtr());\r
318         }\r
319         return FALSE;\r
320 }\r
321 \r
322 void CPDFXFA_App::LoadString(FX_INT32 iStringID, CFX_WideString &wsString)\r
323 {\r
324         switch (iStringID)\r
325         {\r
326         case XFA_IDS_ValidateFailed:\r
327                 wsString = L"%s validate failed";\r
328                 return;\r
329         case XFA_IDS_CalcOverride:\r
330                 wsString = L"Calculate Override";\r
331                 return;\r
332         case XFA_IDS_ModifyField:\r
333                 wsString = L"Are you sure you want to modify this field?";\r
334                 return;\r
335         case XFA_IDS_NotModifyField:\r
336                 wsString = L"You are not allowed to modify this field.";\r
337                 return;\r
338         case XFA_IDS_AppName:\r
339                 wsString = L"Foxit";\r
340                 return;\r
341         case XFA_IDS_ImageFilter:\r
342                 wsString = L"Image Files(*.bmp;*.jpg;*.png;*.gif;*.tif)|*.bmp;*.jpg;*.png;*.gif;*.tif|All Files(*.*)|*.*||";\r
343                 return;\r
344         case XFA_IDS_UNKNOW_CATCHED:\r
345                 wsString = L"unknown error is catched!";\r
346                 return;\r
347         case XFA_IDS_Unable_TO_SET:\r
348                 wsString = L"Unable to set ";\r
349                 return;\r
350         case XFA_IDS_VALUE_EXCALMATORY:\r
351                 wsString = L" value!";\r
352                 return;\r
353         case XFA_IDS_INVALID_ENUM_VALUE:\r
354                 wsString = L"Invalid enumerated value: ";\r
355                 return;\r
356         case XFA_IDS_UNSUPPORT_METHOD:\r
357                 wsString = L"unsupport %s method.";\r
358                 return;\r
359         case XFA_IDS_UNSUPPORT_PROP:\r
360                 wsString = L"unsupport %s property.";\r
361                 return;\r
362         case XFA_IDS_INVAlID_PROP_SET:\r
363                 wsString = L"Invalid property set operation;";\r
364                 return;\r
365         case XFA_IDS_NOT_DEFAUL_VALUE:\r
366                 wsString = L" doesn't have a default property";\r
367                 return;\r
368         case XFA_IDS_UNABLE_SET_LANGUAGE:\r
369                 wsString = L"Unable to set language value!";\r
370                 return;\r
371         case XFA_IDS_UNABLE_SET_NUMPAGES:\r
372                 wsString = L"Unable to set numPages value!";\r
373                 return;\r
374         case XFA_IDS_UNABLE_SET_PLATFORM:\r
375                 wsString = L"Unable to set platform value!";\r
376                 return;\r
377         case XFA_IDS_UNABLE_SET_VALIDATIONENABLE:\r
378                 wsString = L"Unable to set validationsEnabled value!";\r
379                 return;\r
380         case XFA_IDS_UNABLE_SET_VARIATION:\r
381                 wsString = L"Unable to set variation value!";\r
382                 return;\r
383         case XFA_IDS_UNABLE_SET_VERSION:\r
384                 wsString = L"Unable to set version value!";\r
385                 return;\r
386         case XFA_IDS_UNABLE_SET_READY:\r
387                 wsString = L"Unable to set ready value!";\r
388                 return;\r
389         case XFA_IDS_NUMBER_OF_OCCUR:\r
390                 wsString = L"The element [%s] has violated its allowable number of occurrences";\r
391                 return;\r
392         case XFA_IDS_UNABLE_SET_CLASS_NAME:\r
393                 wsString = L"Unable to set className value!";\r
394                 return;\r
395         case XFA_IDS_UNABLE_SET_LENGTH_VALUE:\r
396                 wsString = L"Unable to set length value!";\r
397                 return;\r
398         case XFA_IDS_UNSUPPORT_CHAR:\r
399                 wsString = L"unsupported char '%c'";\r
400                 return;\r
401         case XFA_IDS_BAD_SUFFIX:\r
402                 wsString = L"bad suffix on number";\r
403                 return;\r
404         case XFA_IDS_EXPECTED_IDENT:\r
405                 wsString = L"expected identifier instead of '%s'";\r
406                 return;\r
407         case XFA_IDS_EXPECTED_STRING:\r
408                 wsString = L"expected '%s' instead of '%s'";\r
409                 return;\r
410         case XFA_IDS_INVALIDATE_CHAR:\r
411                 wsString = L"invalidate char '%c'";\r
412                 return;\r
413         case XFA_IDS_REDEFINITION:\r
414                 wsString = L"'%s' redefinition ";\r
415                 return;\r
416         case XFA_IDS_INVALIDATE_TOKEN:\r
417                 wsString = L"invalidate token '%s'";\r
418                 return;\r
419         case XFA_IDS_INVALIDATE_EXPRESSION:\r
420                 wsString = L"invalidate expression '%s'";\r
421                 return;\r
422         case XFA_IDS_UNDEFINE_IDENTIFIER:\r
423                 wsString = L"undefined identifier '%s'";\r
424                 return;\r
425         case XFA_IDS_INVALIDATE_LEFTVALUE:\r
426                 wsString = L"invalidate left-value '%s'";\r
427                 return;\r
428         case XFA_IDS_COMPILER_ERROR:\r
429                 wsString = L"compiler error";\r
430                 return;\r
431         case XFA_IDS_CANNOT_MODIFY_VALUE:\r
432                 wsString = L"can't modify the '%s' value";\r
433                 return;\r
434         case XFA_IDS_ERROR_PARAMETERS:\r
435                 wsString = L"function '%s' has not %d parameters";\r
436                 return;\r
437         case XFA_IDS_EXPECT_ENDIF:\r
438                 wsString = L"expected 'endif' instead of '%s'";\r
439                 return;\r
440         case XFA_IDS_UNEXPECTED_EXPRESSION:\r
441                 wsString = L"unexpected expression '%s'";\r
442                 return;\r
443         case XFA_IDS_CONDITION_IS_NULL:\r
444                 wsString = L"condition is null";\r
445                 return;\r
446         case XFA_IDS_ILLEGALBREAK:\r
447                 wsString = L"illegal break";\r
448                 return;\r
449         case XFA_IDS_ILLEGALCONTINUE:\r
450                 wsString = L"illegal continue";\r
451                 return;\r
452         case XFA_IDS_EXPECTED_OPERATOR:\r
453                 wsString = L"expected operator '%s' instead of '%s'";\r
454                 return;\r
455         case XFA_IDS_DIVIDE_ZERO:\r
456                 wsString = L"divide by zero";\r
457                 return;\r
458         case XFA_IDS_CANNOT_COVERT_OBJECT:\r
459                 wsString = L"%s.%s can not covert to object";\r
460                 return;\r
461         case XFA_IDS_NOT_FOUND_CONTAINER:\r
462                 wsString = L"can not found container '%s'";\r
463                 return;\r
464         case XFA_IDS_NOT_FOUND_PROPERTY:\r
465                 wsString = L"can not found property '%s'";\r
466                 return;\r
467         case XFA_IDS_NOT_FOUND_METHOD:\r
468                 wsString = L"can not found method '%s'";\r
469                 return;\r
470         case XFA_IDS_NOT_FOUND_CONST:\r
471                 wsString = L"can not found const '%s'";\r
472                 return;\r
473         case XFA_IDS_NOT_ASSIGN_OBJECT:\r
474                 wsString = L"can not direct assign value to object";\r
475                 return;\r
476         case XFA_IDS_IVALIDATE_INSTRUCTION:\r
477                 wsString = L"invalidate instruction";\r
478                 return;\r
479         case XFA_IDS_EXPECT_NUMBER:\r
480                 wsString = L"expected number instead of '%s'";\r
481                 return;\r
482         case XFA_IDS_VALIDATE_OUT_ARRAY:\r
483                 wsString = L"validate access index '%s' out of array";\r
484                 return;\r
485         case XFA_IDS_CANNOT_ASSIGN_IDENT:\r
486                 wsString = L"can not assign to %s";\r
487                 return;\r
488         case XFA_IDS_NOT_FOUNT_FUNCTION:\r
489                 wsString = L"can not found '%s' function";\r
490                 return;\r
491         case XFA_IDS_NOT_ARRAY:\r
492                 wsString = L"'%s' doesn't an array";\r
493                 return;\r
494         case XFA_IDS_OUT_ARRAY:\r
495                 wsString = L"out of range of '%s' array";\r
496                 return;\r
497         case XFA_IDS_NOT_SUPPORT_CALC:\r
498                 wsString = L"'%s' operator can not support array calculate";\r
499                 return;\r
500         case XFA_IDS_ARGUMENT_NOT_ARRAY:\r
501                 wsString = L"'%s' function's %d argument can not be array";\r
502                 return;\r
503         case XFA_IDS_ARGUMENT_EXPECT_CONTAINER:\r
504                 wsString = L"'%s' argument expected a container";\r
505                 return;\r
506         case XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT:\r
507                 wsString = L"an attempt was made to reference property '%s' of a non-object in SOM expression %s";\r
508                 return;\r
509         case XFA_IDS_FUNCTION_IS_BUILDIN:\r
510                 wsString = L"function '%s' is buildin";\r
511                 return;\r
512         case XFA_IDS_ERROR_MSG:\r
513                 wsString = L"%s : %s";\r
514                 return;\r
515         case XFA_IDS_INDEX_OUT_OF_BOUNDS:\r
516                 wsString = L"Index value is out of bounds";\r
517                 return;\r
518         case XFA_IDS_INCORRECT_NUMBER_OF_METHOD:\r
519                 wsString = L"Incorrect number of parameters calling method '%s'";\r
520                 return;\r
521         case XFA_IDS_ARGUMENT_MISMATCH:\r
522                 wsString = L"Argument mismatch in property or function argument";\r
523                 return;\r
524         case XFA_IDS_INVALID_ENUMERATE:\r
525                 wsString = L"Invalid enumerated value: %s";\r
526                 return;\r
527         case XFA_IDS_INVALID_APPEND:\r
528                 wsString = L"Invalid append operation: %s cannot have a child element of %s";\r
529                 return;\r
530         case XFA_IDS_SOM_EXPECTED_LIST:\r
531                 wsString = L"SOM expression returned list when single result was expected";\r
532                 return;\r
533         case XFA_IDS_NOT_HAVE_PROPERTY:\r
534                 wsString = L"'%s' doesn't have property '%s'";\r
535                 return;\r
536         case XFA_IDS_INVALID_NODE_TYPE:\r
537                 wsString = L"Invalid node type : '%s'";\r
538                 return;\r
539         case XFA_IDS_VIOLATE_BOUNDARY:\r
540                 wsString = L"The element [%s] has violated its allowable number of occurrences";\r
541                 return;\r
542         case XFA_IDS_SERVER_DENY:\r
543                 wsString = L"Server does not permit";\r
544                 return;\r
545         /*case XFA_IDS_StringWeekDay_Sun:\r
546                 wsString = L"?¨¹¨¨?";\r
547                 return;\r
548         case XFA_IDS_StringWeekDay_Mon:\r
549                 wsString = L"?¨¹¨°?";\r
550                 return;\r
551         case XFA_IDS_StringWeekDay_Tue:\r
552                 wsString = L"?¨¹?t";\r
553                 return;\r
554         case XFA_IDS_StringWeekDay_Wed:\r
555                 wsString = L"?¨¹¨¨y";\r
556                 return;\r
557         case XFA_IDS_StringWeekDay_Thu:\r
558                 wsString = L"?¨¹??";\r
559                 return;\r
560         case XFA_IDS_StringWeekDay_Fri:\r
561                 wsString = L"?¨¹??";\r
562                 return;\r
563         case XFA_IDS_StringWeekDay_Sat:\r
564                 wsString = L"?¨¹¨¢¨´";\r
565                 return;\r
566         case XFA_IDS_StringMonth_Jan:\r
567                 wsString = L"1??";\r
568                 return;\r
569         case XFA_IDS_StringMonth_Feb:\r
570                 wsString = L"2??";\r
571                 return;\r
572         case XFA_IDS_StringMonth_March:\r
573                 wsString = L"3??";\r
574                 return;\r
575         case XFA_IDS_StringMonth_April:\r
576                 wsString = L"4??";\r
577                 return;\r
578         case XFA_IDS_StringMonth_May:\r
579                 wsString = L"5??";\r
580                 return;\r
581         case XFA_IDS_StringMonth_June:\r
582                 wsString = L"6??";\r
583                 return;\r
584         case XFA_IDS_StringMonth_July:\r
585                 wsString = L"7??";\r
586                 return;\r
587         case XFA_IDS_StringMonth_Aug:\r
588                 wsString = L"8??";\r
589                 return;\r
590         case XFA_IDS_StringMonth_Sept:\r
591                 wsString = L"9??";\r
592                 return;\r
593         case XFA_IDS_StringMonth_Oct:\r
594                 wsString = L"10??";\r
595                 return;\r
596         case XFA_IDS_StringMonth_Nov:\r
597                 wsString = L"11??";\r
598                 return;\r
599         case XFA_IDS_StringMonth_Dec:\r
600                 wsString = L"12??";\r
601                 return;\r
602         case XFA_IDS_String_Today:\r
603                 wsString = L"??¨¬¨¬";\r
604                 return;*/\r
605         case XFA_IDS_ValidateLimit:\r
606                 wsString = FX_WSTRC(L"Message limit exceeded. Remaining %d validation errors not reported.");\r
607                 return;\r
608         case XFA_IDS_ValidateNullWarning:\r
609                 wsString = FX_WSTRC(L"%s cannot be left blank. To ignore validations for %s, click Ignore.");\r
610                 return;\r
611         case XFA_IDS_ValidateNullError:\r
612                 wsString = FX_WSTRC(L"%s cannot be left blank.");\r
613                 return;\r
614         case XFA_IDS_ValidateWarning:\r
615                 wsString = FX_WSTRC(L"The value you entered for %s is invalid. To ignore validations for %s, click Ignore.");\r
616                 return;\r
617         case XFA_IDS_ValidateError:\r
618                 wsString = FX_WSTRC(L"The value you entered for %s is invalid.");\r
619                 return;\r
620         }\r
621 \r
622 }\r
623 \r
624 FX_BOOL CPDFXFA_App::ShowFileDialog(FX_WSTR wsTitle, FX_WSTR wsFilter, CFX_WideStringArray &wsPathArr, FX_BOOL bOpen)\r
625 {\r
626         //if (m_pEnv)\r
627         //{\r
628         //      return m_pEnv->FFI_ShowFileDialog(wsTitle.GetPtr(), wsFilter.GetPtr(), wsPathArr, bOpen);\r
629         //}\r
630         return FALSE;\r
631 }\r
632 \r
633 IFWL_AdapterTimerMgr* CPDFXFA_App::GetTimerMgr()\r
634 {\r
635         CXFA_FWLAdapterTimerMgr* pAdapter = NULL;\r
636         CPDFDoc_Environment* pEnv = m_pEnvList.GetAt(0);\r
637         if (pEnv)\r
638                 pAdapter = FX_NEW CXFA_FWLAdapterTimerMgr(pEnv);\r
639         return pAdapter;\r
640 }\r