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 #ifndef FXFA_H_
8 #define FXFA_H_
9 
10 class CFX_Graphics;
11 class CPDF_Document;
12 class CXFA_Node;
13 class CXFA_NodeList;
14 class CXFA_WidgetAcc;
15 class IFDE_XMLElement;
16 class IFWL_AdapterTimerMgr;
17 class IFX_Font;
18 class IXFA_App;
19 class IXFA_AppProvider;
20 class IXFA_ChecksumContext;
21 class IXFA_DocHandler;
22 class IXFA_DocProvider;
23 class IXFA_DocView;
24 class IXFA_FontMgr;
25 class IXFA_MenuHandler;
26 class IXFA_PageView;
27 class IXFA_PageViewRender;
28 class IXFA_WidgetAccIterator;
29 class IXFA_WidgetHandler;
30 class IXFA_WidgetIterator;
31 
32 class IXFA_Doc {
33  public:
~IXFA_Doc()34   virtual ~IXFA_Doc() {}
35 
36  protected:
IXFA_Doc()37   IXFA_Doc() {}
38 };
39 
40 class IXFA_Widget {
41  public:
~IXFA_Widget()42   virtual ~IXFA_Widget() {}
43 
44  protected:
IXFA_Widget()45   IXFA_Widget() {}
46 };
47 
48 #include "fxfa_basic.h"
49 #include "fxfa_widget.h"
50 #define XFA_MBICON_Error 0
51 #define XFA_MBICON_Warning 1
52 #define XFA_MBICON_Question 2
53 #define XFA_MBICON_Status 3
54 #define XFA_MB_OK 0
55 #define XFA_MB_OKCancel 1
56 #define XFA_MB_YesNo 2
57 #define XFA_MB_YesNoCancel 3
58 #define XFA_IDOK 1
59 #define XFA_IDCancel 2
60 #define XFA_IDNo 3
61 #define XFA_IDYes 4
62 #define XFA_IDS_ValidateFailed 1
63 #define XFA_IDS_CalcOverride 2
64 #define XFA_IDS_ModifyField 3
65 #define XFA_IDS_NotModifyField 4
66 #define XFA_IDS_AppName 5
67 #define XFA_IDS_ImageFilter 6
68 #define XFA_IDS_UNKNOW_CATCHED 7
69 #define XFA_IDS_Unable_TO_SET 8
70 #define XFA_IDS_VALUE_EXCALMATORY 9
71 #define XFA_IDS_INVALID_ENUM_VALUE 10
72 #define XFA_IDS_UNSUPPORT_METHOD 11
73 #define XFA_IDS_UNSUPPORT_PROP 12
74 #define XFA_IDS_INVAlID_PROP_SET 13
75 #define XFA_IDS_NOT_DEFAUL_VALUE 14
76 #define XFA_IDS_UNABLE_SET_LANGUAGE 15
77 #define XFA_IDS_UNABLE_SET_NUMPAGES 16
78 #define XFA_IDS_UNABLE_SET_PLATFORM 17
79 #define XFA_IDS_UNABLE_SET_VALIDATIONENABLE 18
80 #define XFA_IDS_UNABLE_SET_VARIATION 19
81 #define XFA_IDS_UNABLE_SET_VERSION 20
82 #define XFA_IDS_UNABLE_SET_READY 21
83 #define XFA_IDS_NUMBER_OF_OCCUR 22
84 #define XFA_IDS_UNABLE_SET_CLASS_NAME 23
85 #define XFA_IDS_UNABLE_SET_LENGTH_VALUE 24
86 #define XFA_IDS_UNSUPPORT_CHAR 25
87 #define XFA_IDS_BAD_SUFFIX 26
88 #define XFA_IDS_EXPECTED_IDENT 27
89 #define XFA_IDS_EXPECTED_STRING 28
90 #define XFA_IDS_INVALIDATE_CHAR 29
91 #define XFA_IDS_REDEFINITION 30
92 #define XFA_IDS_INVALIDATE_TOKEN 31
93 #define XFA_IDS_INVALIDATE_EXPRESSION 32
94 #define XFA_IDS_UNDEFINE_IDENTIFIER 33
95 #define XFA_IDS_INVALIDATE_LEFTVALUE 34
96 #define XFA_IDS_COMPILER_ERROR 35
97 #define XFA_IDS_CANNOT_MODIFY_VALUE 36
98 #define XFA_IDS_ERROR_PARAMETERS 37
99 #define XFA_IDS_EXPECT_ENDIF 38
100 #define XFA_IDS_UNEXPECTED_EXPRESSION 39
101 #define XFA_IDS_CONDITION_IS_NULL 40
102 #define XFA_IDS_ILLEGALBREAK 41
103 #define XFA_IDS_ILLEGALCONTINUE 42
104 #define XFA_IDS_EXPECTED_OPERATOR 43
105 #define XFA_IDS_DIVIDE_ZERO 44
106 #define XFA_IDS_CANNOT_COVERT_OBJECT 45
107 #define XFA_IDS_NOT_FOUND_CONTAINER 46
108 #define XFA_IDS_NOT_FOUND_PROPERTY 47
109 #define XFA_IDS_NOT_FOUND_METHOD 48
110 #define XFA_IDS_NOT_FOUND_CONST 49
111 #define XFA_IDS_NOT_ASSIGN_OBJECT 50
112 #define XFA_IDS_IVALIDATE_INSTRUCTION 51
113 #define XFA_IDS_EXPECT_NUMBER 52
114 #define XFA_IDS_VALIDATE_OUT_ARRAY 53
115 #define XFA_IDS_CANNOT_ASSIGN_IDENT 54
116 #define XFA_IDS_NOT_FOUNT_FUNCTION 55
117 #define XFA_IDS_NOT_ARRAY 56
118 #define XFA_IDS_OUT_ARRAY 57
119 #define XFA_IDS_NOT_SUPPORT_CALC 58
120 #define XFA_IDS_ARGUMENT_NOT_ARRAY 59
121 #define XFA_IDS_ARGUMENT_EXPECT_CONTAINER 60
122 #define XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT 61
123 #define XFA_IDS_FUNCTION_IS_BUILDIN 62
124 #define XFA_IDS_ERROR_MSG 63
125 #define XFA_IDS_INDEX_OUT_OF_BOUNDS 64
126 #define XFA_IDS_INCORRECT_NUMBER_OF_METHOD 65
127 #define XFA_IDS_ARGUMENT_MISMATCH 66
128 #define XFA_IDS_INVALID_ENUMERATE 67
129 #define XFA_IDS_INVALID_APPEND 68
130 #define XFA_IDS_SOM_EXPECTED_LIST 69
131 #define XFA_IDS_NOT_HAVE_PROPERTY 70
132 #define XFA_IDS_INVALID_NODE_TYPE 71
133 #define XFA_IDS_VIOLATE_BOUNDARY 72
134 #define XFA_IDS_SERVER_DENY 73
135 #define XFA_IDS_StringWeekDay_Sun 74
136 #define XFA_IDS_StringWeekDay_Mon 75
137 #define XFA_IDS_StringWeekDay_Tue 76
138 #define XFA_IDS_StringWeekDay_Wed 77
139 #define XFA_IDS_StringWeekDay_Thu 78
140 #define XFA_IDS_StringWeekDay_Fri 79
141 #define XFA_IDS_StringWeekDay_Sat 80
142 #define XFA_IDS_StringMonth_Jan 81
143 #define XFA_IDS_StringMonth_Feb 82
144 #define XFA_IDS_StringMonth_March 83
145 #define XFA_IDS_StringMonth_April 84
146 #define XFA_IDS_StringMonth_May 85
147 #define XFA_IDS_StringMonth_June 86
148 #define XFA_IDS_StringMonth_July 87
149 #define XFA_IDS_StringMonth_Aug 88
150 #define XFA_IDS_StringMonth_Sept 89
151 #define XFA_IDS_StringMonth_Oct 90
152 #define XFA_IDS_StringMonth_Nov 91
153 #define XFA_IDS_StringMonth_Dec 92
154 #define XFA_IDS_String_Today 93
155 #define XFA_IDS_ValidateLimit 94
156 #define XFA_IDS_ValidateNullWarning 95
157 #define XFA_IDS_ValidateNullError 96
158 #define XFA_IDS_ValidateWarning 97
159 #define XFA_IDS_ValidateError 98
160 #define XFA_IDS_ValidateNumberError 99
161 
162 // Probably should be called IXFA_AppDelegate.
163 class IXFA_AppProvider {
164  public:
~IXFA_AppProvider()165   virtual ~IXFA_AppProvider() {}
166 
167   /**
168    * Specifies the name of the client application in which a form currently
169    * exists. Such as Exchange-Pro.
170    */
171   virtual void SetAppType(const CFX_WideStringC& wsAppType) = 0;
172   virtual void GetAppType(CFX_WideString& wsAppType) = 0;
SetFoxitAppType(const CFX_WideStringC & wsFoxitAppType)173   virtual void SetFoxitAppType(const CFX_WideStringC& wsFoxitAppType) {}
GetFoxitAppType(CFX_WideString & wsFoxitAppType)174   virtual void GetFoxitAppType(CFX_WideString& wsFoxitAppType) {
175     wsFoxitAppType.Empty();
176   }
177 
178   /**
179    * Returns the language of the running host application. Such as zh_CN
180    */
181   virtual void GetLanguage(CFX_WideString& wsLanguage) = 0;
182 
183   /**
184    * Returns the platform of the machine running the script. Such as WIN
185    */
186   virtual void GetPlatform(CFX_WideString& wsPlatform) = 0;
187 
188   /**
189    * Indicates the packaging of the application that is running the script. Such
190    * as Full
191    */
192   virtual void GetVariation(CFX_WideString& wsVariation) = 0;
193 
194   /**
195    * Indicates the version number of the current application. Such as 9
196    */
197   virtual void GetVersion(CFX_WideString& wsVersion) = 0;
GetFoxitVersion(CFX_WideString & wsFoxitVersion)198   virtual void GetFoxitVersion(CFX_WideString& wsFoxitVersion) {
199     wsFoxitVersion.Empty();
200   }
201 
202   /**
203    * Get application name, such as Phantom.
204    */
205   virtual void GetAppName(CFX_WideString& wsName) = 0;
GetFoxitAppName(CFX_WideString & wsFoxitName)206   virtual void GetFoxitAppName(CFX_WideString& wsFoxitName) {
207     wsFoxitName.Empty();
208   }
209 
210   /**
211    * Causes the system to play a sound.
212    * @param[in] dwType The system code for the appropriate sound.0 (Error)1
213    * (Warning)2 (Question)3 (Status)4 (Default)
214    */
215   virtual void Beep(FX_DWORD dwType) = 0;
216 
217   /**
218    * Displays a message box.
219    * @param[in] dwIconType    Icon type, refer to XFA_MBICON.
220    * @param[in] dwButtonType  Button type, refer to XFA_MESSAGEBUTTON.
221    * @return A valid integer representing the value of the button pressed by the
222    * user, refer to XFA_ID.
223    */
224   virtual int32_t MsgBox(const CFX_WideStringC& wsMessage,
225                          const CFX_WideStringC& wsTitle = FX_WSTRC(L""),
226                          FX_DWORD dwIconType = 0,
227                          FX_DWORD dwButtonType = 0) = 0;
228 
229   /**
230    * Get a response from the user.
231    * @param[in] bMark - Mask the user input with * (asterisks) when true,
232    */
233   virtual void Response(CFX_WideString& wsAnswer,
234                         const CFX_WideStringC& wsQuestion,
235                         const CFX_WideStringC& wsTitle = FX_WSTRC(L""),
236                         const CFX_WideStringC& wsDefaultAnswer = FX_WSTRC(L""),
237                         FX_BOOL bMark = TRUE) = 0;
238 
239   virtual int32_t GetDocumentCountInBatch() = 0;
240   virtual int32_t GetCurDocumentInBatch() = 0;
241 
242   /**
243    * Download something from somewhere.
244    * @param[in] wsURL - http, ftp, such as
245    * "http://www.w3.org/TR/REC-xml-names/".
246    */
247   virtual IFX_FileRead* DownloadURL(const CFX_WideStringC& wsURL) = 0;
248 
249   /**
250    * POST data to the given url.
251    * @param[in] wsURL         the URL being uploaded.
252    * @param[in] wsData        the data being uploaded.
253    * @param[in] wsContentType the content type of data including text/html,
254    * text/xml, text/plain, multipart/form-data,
255    *                          application/x-www-form-urlencoded,
256    * application/octet-stream, any valid MIME type.
257    * @param[in] wsEncode      the encode of data including UTF-8, UTF-16,
258    * ISO8859-1, any recognized [IANA]character encoding
259    * @param[in] wsHeader      any additional HTTP headers to be included in the
260    * post.
261    * @param[out] wsResponse   decoded response from server.
262    * @return TRUE Server permitted the post request, FALSE otherwise.
263    */
264   virtual FX_BOOL PostRequestURL(const CFX_WideStringC& wsURL,
265                                  const CFX_WideStringC& wsData,
266                                  const CFX_WideStringC& wsContentType,
267                                  const CFX_WideStringC& wsEncode,
268                                  const CFX_WideStringC& wsHeader,
269                                  CFX_WideString& wsResponse) = 0;
270 
271   /**
272    * PUT data to the given url.
273    * @param[in] wsURL         the URL being uploaded.
274    * @param[in] wsData            the data being uploaded.
275    * @param[in] wsEncode      the encode of data including UTF-8, UTF-16,
276    * ISO8859-1, any recognized [IANA]character encoding
277    * @return TRUE Server permitted the post request, FALSE otherwise.
278    */
279   virtual FX_BOOL PutRequestURL(const CFX_WideStringC& wsURL,
280                                 const CFX_WideStringC& wsData,
281                                 const CFX_WideStringC& wsEncode) = 0;
282 
283   virtual void LoadString(int32_t iStringID, CFX_WideString& wsString) = 0;
284   virtual FX_BOOL ShowFileDialog(const CFX_WideStringC& wsTitle,
285                                  const CFX_WideStringC& wsFilter,
286                                  CFX_WideStringArray& wsPathArr,
287                                  FX_BOOL bOpen = TRUE) = 0;
288   virtual IFWL_AdapterTimerMgr* GetTimerMgr() = 0;
289 };
290 class IXFA_FontMgr {
291  public:
292   static IXFA_FontMgr* CreateDefault();
293   virtual ~IXFA_FontMgr();
294 
295   virtual IFX_Font* GetFont(IXFA_Doc* hDoc,
296                             const CFX_WideStringC& wsFontFamily,
297                             FX_DWORD dwFontStyles,
298                             FX_WORD wCodePage = 0xFFFF) = 0;
299   virtual IFX_Font* GetDefaultFont(IXFA_Doc* hDoc,
300                                    const CFX_WideStringC& wsFontFamily,
301                                    FX_DWORD dwFontStyles,
302                                    FX_WORD wCodePage = 0xFFFF) = 0;
303 };
304 class IXFA_App {
305  public:
306   static IXFA_App* Create(IXFA_AppProvider* pProvider);
307   virtual ~IXFA_App();
308 
309   virtual IXFA_DocHandler* GetDocHandler() = 0;
310   virtual IXFA_Doc* CreateDoc(IXFA_DocProvider* pProvider,
311                               IFX_FileRead* pStream,
312                               FX_BOOL bTakeOverFile = TRUE) = 0;
313   virtual IXFA_Doc* CreateDoc(IXFA_DocProvider* pProvider,
314                               CPDF_Document* pPDFDoc) = 0;
315   virtual IXFA_AppProvider* GetAppProvider() = 0;
316   virtual void SetDefaultFontMgr(IXFA_FontMgr* pFontMgr) = 0;
317   virtual IXFA_MenuHandler* GetMenuHandler() = 0;
318 };
319 class IXFA_MenuHandler {
320  public:
~IXFA_MenuHandler()321   virtual ~IXFA_MenuHandler() {}
322 
323   virtual FX_BOOL CanCopy(IXFA_Widget* hWidget) = 0;
324   virtual FX_BOOL CanCut(IXFA_Widget* hWidget) = 0;
325   virtual FX_BOOL CanPaste(IXFA_Widget* hWidget) = 0;
326   virtual FX_BOOL CanSelectAll(IXFA_Widget* hWidget) = 0;
327   virtual FX_BOOL CanDelete(IXFA_Widget* hWidget) = 0;
328   virtual FX_BOOL CanDeSelect(IXFA_Widget* hWidget) = 0;
329   virtual FX_BOOL Copy(IXFA_Widget* hWidget, CFX_WideString& wsText) = 0;
330   virtual FX_BOOL Cut(IXFA_Widget* hWidget, CFX_WideString& wsText) = 0;
331   virtual FX_BOOL Paste(IXFA_Widget* hWidget, const CFX_WideString& wsText) = 0;
332   virtual FX_BOOL SelectAll(IXFA_Widget* hWidget) = 0;
333   virtual FX_BOOL Delete(IXFA_Widget* hWidget) = 0;
334   virtual FX_BOOL DeSelect(IXFA_Widget* hWidget) = 0;
335   virtual FX_BOOL CanUndo(IXFA_Widget* hWidget) = 0;
336   virtual FX_BOOL CanRedo(IXFA_Widget* hWidget) = 0;
337   virtual FX_BOOL Undo(IXFA_Widget* hWidget) = 0;
338   virtual FX_BOOL Redo(IXFA_Widget* hWidget) = 0;
339   virtual FX_BOOL GetSuggestWords(IXFA_Widget* hWidget,
340                                   CFX_PointF pointf,
341                                   CFX_ByteStringArray& sSuggest) = 0;
342   virtual FX_BOOL ReplaceSpellCheckWord(IXFA_Widget* hWidget,
343                                         CFX_PointF pointf,
344                                         const CFX_ByteStringC& bsReplace) = 0;
345 };
346 #define XFA_INVALIDATE_AllPages 0x00000000
347 #define XFA_INVALIDATE_CurrentPage 0x00000001
348 #define XFA_PRINTOPT_ShowDialog 0x00000001
349 #define XFA_PRINTOPT_CanCancel 0x00000002
350 #define XFA_PRINTOPT_ShrinkPage 0x00000004
351 #define XFA_PRINTOPT_AsImage 0x00000008
352 #define XFA_PRINTOPT_ReverseOrder 0x00000010
353 #define XFA_PRINTOPT_PrintAnnot 0x00000020
354 #define XFA_PAGEVIEWEVENT_PostAdded 1
355 #define XFA_PAGEVIEWEVENT_PostRemoved 3
356 #define XFA_WIDGETEVENT_PostAdded 2
357 #define XFA_WIDGETEVENT_PreRemoved 3
358 #define XFA_WIDGETEVENT_PostContentChanged 6
359 #define XFA_WIDGETEVENT_ListItemRemoved 7
360 #define XFA_WIDGETEVENT_ListItemAdded 8
361 #define XFA_WIDGETEVENT_AccessChanged 9
362 class IXFA_DocProvider {
363  public:
~IXFA_DocProvider()364   virtual ~IXFA_DocProvider() {}
365 
366   virtual void SetChangeMark(IXFA_Doc* hDoc) = 0;
367   virtual void InvalidateRect(IXFA_PageView* pPageView,
368                               const CFX_RectF& rt,
369                               FX_DWORD dwFlags = 0) = 0;
370   virtual void DisplayCaret(IXFA_Widget* hWidget,
371                             FX_BOOL bVisible,
372                             const CFX_RectF* pRtAnchor) = 0;
373   virtual FX_BOOL GetPopupPos(IXFA_Widget* hWidget,
374                               FX_FLOAT fMinPopup,
375                               FX_FLOAT fMaxPopup,
376                               const CFX_RectF& rtAnchor,
377                               CFX_RectF& rtPopup) = 0;
378   virtual FX_BOOL PopupMenu(IXFA_Widget* hWidget,
379                             CFX_PointF ptPopup,
380                             const CFX_RectF* pRectExclude = NULL) = 0;
381   virtual void PageViewEvent(IXFA_PageView* pPageView, FX_DWORD dwFlags) = 0;
382   virtual void WidgetEvent(IXFA_Widget* hWidget,
383                            CXFA_WidgetAcc* pWidgetData,
384                            FX_DWORD dwEvent,
385                            void* pParam = NULL,
386                            void* pAdditional = NULL) = 0;
RenderCustomWidget(IXFA_Widget * hWidget,CFX_Graphics * pGS,CFX_Matrix * pMatrix,const CFX_RectF & rtUI)387   virtual FX_BOOL RenderCustomWidget(IXFA_Widget* hWidget,
388                                      CFX_Graphics* pGS,
389                                      CFX_Matrix* pMatrix,
390                                      const CFX_RectF& rtUI) {
391     return FALSE;
392   }
393   virtual int32_t CountPages(IXFA_Doc* hDoc) = 0;
394   virtual int32_t GetCurrentPage(IXFA_Doc* hDoc) = 0;
395   virtual void SetCurrentPage(IXFA_Doc* hDoc, int32_t iCurPage) = 0;
396   virtual FX_BOOL IsCalculationsEnabled(IXFA_Doc* hDoc) = 0;
397   virtual void SetCalculationsEnabled(IXFA_Doc* hDoc, FX_BOOL bEnabled) = 0;
398   virtual void GetTitle(IXFA_Doc* hDoc, CFX_WideString& wsTitle) = 0;
399   virtual void SetTitle(IXFA_Doc* hDoc, const CFX_WideStringC& wsTitle) = 0;
400   virtual void ExportData(IXFA_Doc* hDoc,
401                           const CFX_WideStringC& wsFilePath,
402                           FX_BOOL bXDP = TRUE) = 0;
403   virtual void ImportData(IXFA_Doc* hDoc,
404                           const CFX_WideStringC& wsFilePath) = 0;
405   virtual void GotoURL(IXFA_Doc* hDoc,
406                        const CFX_WideStringC& bsURL,
407                        FX_BOOL bAppend = TRUE) = 0;
408   virtual FX_BOOL IsValidationsEnabled(IXFA_Doc* hDoc) = 0;
409   virtual void SetValidationsEnabled(IXFA_Doc* hDoc, FX_BOOL bEnabled) = 0;
410   virtual void SetFocusWidget(IXFA_Doc* hDoc, IXFA_Widget* hWidget) = 0;
411   virtual void Print(IXFA_Doc* hDoc,
412                      int32_t nStartPage,
413                      int32_t nEndPage,
414                      FX_DWORD dwOptions) = 0;
415   virtual int32_t AbsPageCountInBatch(IXFA_Doc* hDoc) = 0;
416   virtual int32_t AbsPageInBatch(IXFA_Doc* hDoc, IXFA_Widget* hWidget) = 0;
417   virtual int32_t SheetCountInBatch(IXFA_Doc* hDoc) = 0;
418   virtual int32_t SheetInBatch(IXFA_Doc* hDoc, IXFA_Widget* hWidget) = 0;
419   virtual int32_t Verify(IXFA_Doc* hDoc,
420                          CXFA_Node* pSigNode,
421                          FX_BOOL bUsed = TRUE) {
422     return 0;
423   }
424   virtual FX_BOOL Sign(IXFA_Doc* hDoc,
425                        CXFA_NodeList* pNodeList,
426                        const CFX_WideStringC& wsExpression,
427                        const CFX_WideStringC& wsXMLIdent,
428                        const CFX_WideStringC& wsValue = FX_WSTRC(L"open"),
429                        FX_BOOL bUsed = TRUE) {
430     return 0;
431   }
Enumerate(IXFA_Doc * hDoc)432   virtual CXFA_NodeList* Enumerate(IXFA_Doc* hDoc) { return 0; }
433   virtual FX_BOOL Clear(IXFA_Doc* hDoc,
434                         CXFA_Node* pSigNode,
435                         FX_BOOL bCleared = TRUE) {
436     return 0;
437   }
438   virtual void GetURL(IXFA_Doc* hDoc, CFX_WideString& wsDocURL) = 0;
439   virtual FX_ARGB GetHighlightColor(IXFA_Doc* hDoc) = 0;
440   virtual void AddDoRecord(IXFA_Widget* hWidget) = 0;
441 
442   virtual FX_BOOL SubmitData(IXFA_Doc* hDoc, CXFA_Submit submit) = 0;
443   virtual FX_BOOL CheckWord(IXFA_Doc* hDoc, const CFX_ByteStringC& sWord) = 0;
444   virtual FX_BOOL GetSuggestWords(IXFA_Doc* hDoc,
445                                   const CFX_ByteStringC& sWord,
446                                   CFX_ByteStringArray& sSuggest) = 0;
447   virtual FX_BOOL GetPDFScriptObject(IXFA_Doc* hDoc,
448                                      const CFX_ByteStringC& utf8Name,
449                                      FXJSE_HVALUE hValue) = 0;
450   virtual FX_BOOL GetGlobalProperty(IXFA_Doc* hDoc,
451                                     const CFX_ByteStringC& szPropName,
452                                     FXJSE_HVALUE hValue) = 0;
453   virtual FX_BOOL SetGlobalProperty(IXFA_Doc* hDoc,
454                                     const CFX_ByteStringC& szPropName,
455                                     FXJSE_HVALUE hValue) = 0;
456   virtual CPDF_Document* OpenPDF(IXFA_Doc* hDoc,
457                                  IFX_FileRead* pFile,
458                                  FX_BOOL bTakeOverFile) = 0;
459   virtual IFX_FileRead* OpenLinkedFile(IXFA_Doc* hDoc,
460                                        const CFX_WideString& wsLink) = 0;
461 };
462 #define XFA_DOCVIEW_View 0x00000000
463 #define XFA_DOCVIEW_MasterPage 0x00000001
464 #define XFA_DOCVIEW_Design 0x00000002
465 #define XFA_DOCTYPE_Dynamic 0
466 #define XFA_DOCTYPE_Static 1
467 #define XFA_DOCTYPE_XDP 2
468 #define XFA_PARSESTATUS_StatusErr -3
469 #define XFA_PARSESTATUS_StreamErr -2
470 #define XFA_PARSESTATUS_SyntaxErr -1
471 #define XFA_PARSESTATUS_Ready 0
472 #define XFA_PARSESTATUS_Done 100
473 class IXFA_DocHandler {
474  public:
~IXFA_DocHandler()475   virtual ~IXFA_DocHandler() {}
476 
477   virtual void ReleaseDoc(IXFA_Doc* hDoc) = 0;
478   virtual IXFA_DocProvider* GetDocProvider(IXFA_Doc* hDoc) = 0;
479 
480   virtual FX_DWORD GetDocType(IXFA_Doc* hDoc) = 0;
481   virtual int32_t StartLoad(IXFA_Doc* hDoc) = 0;
482   virtual int32_t DoLoad(IXFA_Doc* hDoc, IFX_Pause* pPause = NULL) = 0;
483   virtual void StopLoad(IXFA_Doc* hDoc) = 0;
484 
485   virtual IXFA_DocView* CreateDocView(IXFA_Doc* hDoc, FX_DWORD dwView = 0) = 0;
486 
487   virtual int32_t CountPackages(IXFA_Doc* hDoc) = 0;
488   virtual void GetPackageName(IXFA_Doc* hDoc,
489                               int32_t iPackage,
490                               CFX_WideStringC& wsPackage) = 0;
491 
492   virtual FX_BOOL SavePackage(IXFA_Doc* hDoc,
493                               const CFX_WideStringC& wsPackage,
494                               IFX_FileWrite* pFile,
495                               IXFA_ChecksumContext* pCSContext = NULL) = 0;
496   virtual FX_BOOL CloseDoc(IXFA_Doc* hDoc) = 0;
497 
498   virtual FX_BOOL ImportData(IXFA_Doc* hDoc,
499                              IFX_FileRead* pStream,
500                              FX_BOOL bXDP = TRUE) = 0;
501   virtual void SetJSERuntime(IXFA_Doc* hDoc, FXJSE_HRUNTIME hRuntime) = 0;
502   virtual FXJSE_HVALUE GetXFAScriptObject(IXFA_Doc* hDoc) = 0;
503   virtual XFA_ATTRIBUTEENUM GetRestoreState(IXFA_Doc* hDoc) = 0;
504   virtual FX_BOOL RunDocScript(IXFA_Doc* hDoc,
505                                XFA_SCRIPTTYPE eScriptType,
506                                const CFX_WideStringC& wsScript,
507                                FXJSE_HVALUE hRetValue,
508                                FXJSE_HVALUE hThisObject) = 0;
509 };
510 enum XFA_EVENTTYPE {
511   XFA_EVENT_Click,
512   XFA_EVENT_Change,
513   XFA_EVENT_DocClose,
514   XFA_EVENT_DocReady,
515   XFA_EVENT_Enter,
516   XFA_EVENT_Exit,
517   XFA_EVENT_Full,
518   XFA_EVENT_IndexChange,
519   XFA_EVENT_Initialize,
520   XFA_EVENT_MouseDown,
521   XFA_EVENT_MouseEnter,
522   XFA_EVENT_MouseExit,
523   XFA_EVENT_MouseUp,
524   XFA_EVENT_PostExecute,
525   XFA_EVENT_PostOpen,
526   XFA_EVENT_PostPrint,
527   XFA_EVENT_PostSave,
528   XFA_EVENT_PostSign,
529   XFA_EVENT_PostSubmit,
530   XFA_EVENT_PreExecute,
531   XFA_EVENT_PreOpen,
532   XFA_EVENT_PrePrint,
533   XFA_EVENT_PreSave,
534   XFA_EVENT_PreSign,
535   XFA_EVENT_PreSubmit,
536   XFA_EVENT_Ready,
537   XFA_EVENT_InitCalculate,
538   XFA_EVENT_InitVariables,
539   XFA_EVENT_Calculate,
540   XFA_EVENT_Validate,
541   XFA_EVENT_Unknown,
542 };
543 #define XFA_VALIDATE_preSubmit 1
544 #define XFA_VALIDATE_prePrint 2
545 #define XFA_VALIDATE_preExecute 3
546 #define XFA_VALIDATE_preSave 4
547 class CXFA_EventParam {
548  public:
CXFA_EventParam()549   CXFA_EventParam() {
550     m_pTarget = NULL;
551     m_eType = XFA_EVENT_Unknown;
552     m_wsResult.Empty();
553     Reset();
554   }
Reset()555   void Reset() {
556     m_wsChange.Empty();
557     m_iCommitKey = 0;
558     m_wsFullText.Empty();
559     m_bKeyDown = FALSE;
560     m_bModifier = FALSE;
561     m_wsNewContentType.Empty();
562     m_wsNewText.Empty();
563     m_wsPrevContentType.Empty();
564     m_wsPrevText.Empty();
565     m_bReenter = FALSE;
566     m_iSelEnd = 0;
567     m_iSelStart = 0;
568     m_bShift = FALSE;
569     m_wsSoapFaultCode.Empty();
570     m_wsSoapFaultString.Empty();
571     m_bIsFormReady = FALSE;
572     m_iValidateActivities = XFA_VALIDATE_preSubmit;
573   }
574   CXFA_WidgetAcc* m_pTarget;
575   XFA_EVENTTYPE m_eType;
576   CFX_WideString m_wsResult;
577   FX_BOOL m_bCancelAction;
578   int32_t m_iCommitKey;
579   FX_BOOL m_bKeyDown;
580   FX_BOOL m_bModifier;
581   FX_BOOL m_bReenter;
582   int32_t m_iSelEnd;
583   int32_t m_iSelStart;
584   FX_BOOL m_bShift;
585   CFX_WideString m_wsChange;
586   CFX_WideString m_wsFullText;
587   CFX_WideString m_wsNewContentType;
588   CFX_WideString m_wsNewText;
589   CFX_WideString m_wsPrevContentType;
590   CFX_WideString m_wsPrevText;
591   CFX_WideString m_wsSoapFaultCode;
592   CFX_WideString m_wsSoapFaultString;
593   FX_BOOL m_bIsFormReady;
594   int32_t m_iValidateActivities;
595 };
596 #define XFA_EVENTERROR_Sucess 1
597 #define XFA_EVENTERROR_Error -1
598 #define XFA_EVENTERROR_NotExist 0
599 #define XFA_EVENTERROR_Disabled 2
600 enum XFA_WIDGETORDER {
601   XFA_WIDGETORDER_PreOrder,
602 };
603 class IXFA_DocView {
604  public:
~IXFA_DocView()605   virtual ~IXFA_DocView() {}
606 
607   virtual IXFA_Doc* GetDoc() = 0;
608   virtual int32_t StartLayout(int32_t iStartPage = 0) = 0;
609   virtual int32_t DoLayout(IFX_Pause* pPause = NULL) = 0;
610   virtual void StopLayout() = 0;
611 
612   virtual int32_t GetLayoutStatus() = 0;
613   virtual void UpdateDocView() = 0;
614   virtual int32_t CountPageViews() = 0;
615   virtual IXFA_PageView* GetPageView(int32_t nIndex) = 0;
616   virtual IXFA_Widget* GetWidgetByName(const CFX_WideStringC& wsName) = 0;
617   virtual CXFA_WidgetAcc* GetWidgetAccByName(const CFX_WideStringC& wsName) = 0;
618   virtual void ResetWidgetData(CXFA_WidgetAcc* pWidgetAcc = NULL) = 0;
619   virtual int32_t ProcessWidgetEvent(CXFA_EventParam* pParam,
620                                      CXFA_WidgetAcc* pWidgetAcc = NULL) = 0;
621   virtual IXFA_WidgetHandler* GetWidgetHandler() = 0;
622   virtual IXFA_WidgetIterator* CreateWidgetIterator() = 0;
623   virtual IXFA_WidgetAccIterator* CreateWidgetAccIterator(
624       XFA_WIDGETORDER eOrder = XFA_WIDGETORDER_PreOrder) = 0;
625   virtual IXFA_Widget* GetFocusWidget() = 0;
626   virtual void KillFocus() = 0;
627   virtual FX_BOOL SetFocus(IXFA_Widget* hWidget) = 0;
628 };
629 #define XFA_TRAVERSEWAY_Tranvalse 0x0001
630 #define XFA_TRAVERSEWAY_Form 0x0002
631 #define XFA_WIDGETFILTER_Visible 0x0001
632 #define XFA_WIDGETFILTER_Viewable 0x0010
633 #define XFA_WIDGETFILTER_Printable 0x0020
634 #define XFA_WIDGETFILTER_Field 0x0100
635 #define XFA_WIDGETFILTER_AllType 0x0F00
636 class IXFA_PageView {
637  public:
~IXFA_PageView()638   virtual ~IXFA_PageView() {}
639 
640   virtual IXFA_DocView* GetDocView() = 0;
641   virtual int32_t GetPageViewIndex() = 0;
642   virtual void GetPageViewRect(CFX_RectF& rtPage) = 0;
643 
644   virtual void GetDisplayMatrix(CFX_Matrix& mt,
645                                 const CFX_Rect& rtDisp,
646                                 int32_t iRotate) = 0;
647 
648   virtual int32_t LoadPageView(IFX_Pause* pPause = NULL) = 0;
649   virtual void UnloadPageView() = 0;
650   virtual IXFA_Widget* GetWidgetByPos(FX_FLOAT fx, FX_FLOAT fy) = 0;
651   virtual IXFA_WidgetIterator* CreateWidgetIterator(
652       FX_DWORD dwTraverseWay = XFA_TRAVERSEWAY_Form,
653       FX_DWORD dwWidgetFilter = XFA_WIDGETFILTER_Visible |
654                                 XFA_WIDGETFILTER_Viewable |
655                                 XFA_WIDGETFILTER_AllType) = 0;
656 };
657 class CXFA_RenderOptions {
658  public:
CXFA_RenderOptions()659   CXFA_RenderOptions() : m_bPrint(FALSE), m_bHighlight(TRUE) {}
660   FX_BOOL m_bPrint;
661   FX_BOOL m_bHighlight;
662 };
663 #define XFA_RENDERSTATUS_Ready 1
664 #define XFA_RENDERSTATUS_ToBeContinued 2
665 #define XFA_RENDERSTATUS_Done 3
666 #define XFA_RENDERSTATUS_Failed -1
667 class IXFA_RenderContext {
668  public:
669   virtual void Release() = 0;
670   virtual int32_t StartRender(IXFA_PageView* pPageView,
671                               CFX_Graphics* pGS,
672                               const CFX_Matrix& pMatrix,
673                               const CXFA_RenderOptions& options) = 0;
674   virtual int32_t DoRender(IFX_Pause* pPause = NULL) = 0;
675   virtual void StopRender() = 0;
676 
677  protected:
~IXFA_RenderContext()678   ~IXFA_RenderContext() {}
679 };
680 IXFA_RenderContext* XFA_RenderContext_Create();
681 enum XFA_WIDGETTYPE {
682   XFA_WIDGETTYPE_Barcode,
683   XFA_WIDGETTYPE_PushButton,
684   XFA_WIDGETTYPE_CheckButton,
685   XFA_WIDGETTYPE_RadioButton,
686   XFA_WIDGETTYPE_DatetimeEdit,
687   XFA_WIDGETTYPE_DecimalField,
688   XFA_WIDGETTYPE_NumericField,
689   XFA_WIDGETTYPE_Signature,
690   XFA_WIDGETTYPE_TextEdit,
691   XFA_WIDGETTYPE_DropdownList,
692   XFA_WIDGETTYPE_ListBox,
693   XFA_WIDGETTYPE_ImageField,
694   XFA_WIDGETTYPE_PasswordEdit,
695   XFA_WIDGETTYPE_Arc,
696   XFA_WIDGETTYPE_Rectangle,
697   XFA_WIDGETTYPE_Image,
698   XFA_WIDGETTYPE_Line,
699   XFA_WIDGETTYPE_Text,
700   XFA_WIDGETTYPE_ExcludeGroup,
701   XFA_WIDGETTYPE_Subform,
702   XFA_WIDGETTYPE_Unknown,
703 };
704 #define XFA_WIDGETSTATUS_Visible 0x00000001
705 #define XFA_WIDGETSTATUS_Invisible 0x00000002
706 #define XFA_WIDGETSTATUS_Hidden 0x00000004
707 #define XFA_WIDGETSTATUS_Viewable 0x00000010
708 #define XFA_WIDGETSTATUS_Printable 0x00000020
709 #define XFA_WIDGETSTATUS_Focused 0x00000100
710 class IXFA_WidgetHandler {
711  public:
~IXFA_WidgetHandler()712   virtual ~IXFA_WidgetHandler() {}
713 
714   virtual IXFA_Widget* CreateWidget(IXFA_Widget* hParent,
715                                     XFA_WIDGETTYPE eType,
716                                     IXFA_Widget* hBefore = NULL) = 0;
717   virtual IXFA_PageView* GetPageView(IXFA_Widget* hWidget) = 0;
718   virtual void GetRect(IXFA_Widget* hWidget, CFX_RectF& rt) = 0;
719   virtual FX_DWORD GetStatus(IXFA_Widget* hWidget) = 0;
720   virtual FX_BOOL GetBBox(IXFA_Widget* hWidget,
721                           CFX_RectF& rtBox,
722                           FX_DWORD dwStatus,
723                           FX_BOOL bDrawFocus = FALSE) = 0;
724   virtual CXFA_WidgetAcc* GetDataAcc(IXFA_Widget* hWidget) = 0;
725 
726   virtual void GetName(IXFA_Widget* hWidget,
727                        CFX_WideString& wsName,
728                        int32_t iNameType = 0) = 0;
729   virtual FX_BOOL GetToolTip(IXFA_Widget* hWidget,
730                              CFX_WideString& wsToolTip) = 0;
731   virtual void SetPrivateData(IXFA_Widget* hWidget,
732                               void* module_id,
733                               void* pData,
734                               PD_CALLBACK_FREEDATA callback) = 0;
735   virtual void* GetPrivateData(IXFA_Widget* hWidget, void* module_id) = 0;
736   virtual FX_BOOL OnMouseEnter(IXFA_Widget* hWidget) = 0;
737   virtual FX_BOOL OnMouseExit(IXFA_Widget* hWidget) = 0;
738   virtual FX_BOOL OnLButtonDown(IXFA_Widget* hWidget,
739                                 FX_DWORD dwFlags,
740                                 FX_FLOAT fx,
741                                 FX_FLOAT fy) = 0;
742   virtual FX_BOOL OnLButtonUp(IXFA_Widget* hWidget,
743                               FX_DWORD dwFlags,
744                               FX_FLOAT fx,
745                               FX_FLOAT fy) = 0;
746   virtual FX_BOOL OnLButtonDblClk(IXFA_Widget* hWidget,
747                                   FX_DWORD dwFlags,
748                                   FX_FLOAT fx,
749                                   FX_FLOAT fy) = 0;
750   virtual FX_BOOL OnMouseMove(IXFA_Widget* hWidget,
751                               FX_DWORD dwFlags,
752                               FX_FLOAT fx,
753                               FX_FLOAT fy) = 0;
754   virtual FX_BOOL OnMouseWheel(IXFA_Widget* hWidget,
755                                FX_DWORD dwFlags,
756                                int16_t zDelta,
757                                FX_FLOAT fx,
758                                FX_FLOAT fy) = 0;
759   virtual FX_BOOL OnRButtonDown(IXFA_Widget* hWidget,
760                                 FX_DWORD dwFlags,
761                                 FX_FLOAT fx,
762                                 FX_FLOAT fy) = 0;
763   virtual FX_BOOL OnRButtonUp(IXFA_Widget* hWidget,
764                               FX_DWORD dwFlags,
765                               FX_FLOAT fx,
766                               FX_FLOAT fy) = 0;
767   virtual FX_BOOL OnRButtonDblClk(IXFA_Widget* hWidget,
768                                   FX_DWORD dwFlags,
769                                   FX_FLOAT fx,
770                                   FX_FLOAT fy) = 0;
771 
772   virtual FX_BOOL OnKeyDown(IXFA_Widget* hWidget,
773                             FX_DWORD dwKeyCode,
774                             FX_DWORD dwFlags) = 0;
775   virtual FX_BOOL OnKeyUp(IXFA_Widget* hWidget,
776                           FX_DWORD dwKeyCode,
777                           FX_DWORD dwFlags) = 0;
778   virtual FX_BOOL OnChar(IXFA_Widget* hWidget,
779                          FX_DWORD dwChar,
780                          FX_DWORD dwFlags) = 0;
781   virtual FX_DWORD OnHitTest(IXFA_Widget* hWidget,
782                              FX_FLOAT fx,
783                              FX_FLOAT fy) = 0;
784   virtual FX_BOOL OnSetCursor(IXFA_Widget* hWidget,
785                               FX_FLOAT fx,
786                               FX_FLOAT fy) = 0;
787 
788   virtual void RenderWidget(IXFA_Widget* hWidget,
789                             CFX_Graphics* pGS,
790                             CFX_Matrix* pMatrix = NULL,
791                             FX_BOOL bHighlight = FALSE) = 0;
792   virtual FX_BOOL HasEvent(CXFA_WidgetAcc* pWidgetAcc,
793                            XFA_EVENTTYPE eEventType) = 0;
794   virtual int32_t ProcessEvent(CXFA_WidgetAcc* pWidgetAcc,
795                                CXFA_EventParam* pParam) = 0;
796 };
797 class IXFA_WidgetIterator {
798  public:
799   virtual void Release() = 0;
800   virtual void Reset() = 0;
801   virtual IXFA_Widget* MoveToFirst() = 0;
802   virtual IXFA_Widget* MoveToLast() = 0;
803   virtual IXFA_Widget* MoveToNext() = 0;
804   virtual IXFA_Widget* MoveToPrevious() = 0;
805   virtual IXFA_Widget* GetCurrentWidget() = 0;
806   virtual FX_BOOL SetCurrentWidget(IXFA_Widget* hWidget) = 0;
807 
808  protected:
~IXFA_WidgetIterator()809   ~IXFA_WidgetIterator() {}
810 };
811 class IXFA_WidgetAccIterator {
812  public:
813   virtual void Release() = 0;
814   virtual void Reset() = 0;
815   virtual CXFA_WidgetAcc* MoveToFirst() = 0;
816   virtual CXFA_WidgetAcc* MoveToLast() = 0;
817   virtual CXFA_WidgetAcc* MoveToNext() = 0;
818   virtual CXFA_WidgetAcc* MoveToPrevious() = 0;
819   virtual CXFA_WidgetAcc* GetCurrentWidgetAcc() = 0;
820   virtual FX_BOOL SetCurrentWidgetAcc(CXFA_WidgetAcc* hWidget) = 0;
821   virtual void SkipTree() = 0;
822 
823  protected:
~IXFA_WidgetAccIterator()824   ~IXFA_WidgetAccIterator() {}
825 };
826 IXFA_WidgetAccIterator* XFA_WidgetAccIterator_Create(
827     CXFA_WidgetAcc* pTravelRoot,
828     XFA_WIDGETORDER eOrder = XFA_WIDGETORDER_PreOrder);
829 class IXFA_ChecksumContext {
830  public:
831   virtual void Release() = 0;
832 
833   virtual FX_BOOL StartChecksum() = 0;
834   virtual FX_BOOL UpdateChecksum(IFX_FileRead* pSrcFile,
835                                  FX_FILESIZE offset = 0,
836                                  size_t size = 0) = 0;
837   virtual void FinishChecksum() = 0;
838   virtual void GetChecksum(CFX_ByteString& bsChecksum) = 0;
839 
840  protected:
~IXFA_ChecksumContext()841   ~IXFA_ChecksumContext() {}
842 };
843 IXFA_ChecksumContext* XFA_Checksum_Create();
844 
845 #endif  // FXFA_H_
846