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
10class CFX_Graphics;
11class CPDF_Document;
12class CXFA_Node;
13class CXFA_NodeList;
14class CXFA_WidgetAcc;
15class IFDE_XMLElement;
16class IFWL_AdapterTimerMgr;
17class IFX_Font;
18class IXFA_App;
19class IXFA_AppProvider;
20class IXFA_ChecksumContext;
21class IXFA_DocHandler;
22class IXFA_DocProvider;
23class IXFA_DocView;
24class IXFA_FontMgr;
25class IXFA_MenuHandler;
26class IXFA_PageView;
27class IXFA_PageViewRender;
28class IXFA_WidgetAccIterator;
29class IXFA_WidgetHandler;
30class IXFA_WidgetIterator;
31
32class IXFA_Doc {
33 public:
34  virtual ~IXFA_Doc() {}
35
36 protected:
37  IXFA_Doc() {}
38};
39
40class IXFA_Widget {
41 public:
42  virtual ~IXFA_Widget() {}
43
44 protected:
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.
163class IXFA_AppProvider {
164 public:
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;
173  virtual void SetFoxitAppType(const CFX_WideStringC& 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;
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;
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};
290class 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};
304class 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};
319class IXFA_MenuHandler {
320 public:
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
362class IXFA_DocProvider {
363 public:
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;
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  }
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
473class IXFA_DocHandler {
474 public:
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};
510enum 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
547class CXFA_EventParam {
548 public:
549  CXFA_EventParam() {
550    m_pTarget = NULL;
551    m_eType = XFA_EVENT_Unknown;
552    m_wsResult.Empty();
553    Reset();
554  }
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
600enum XFA_WIDGETORDER {
601  XFA_WIDGETORDER_PreOrder,
602};
603class IXFA_DocView {
604 public:
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
636class IXFA_PageView {
637 public:
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};
657class CXFA_RenderOptions {
658 public:
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
667class 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:
678  ~IXFA_RenderContext() {}
679};
680IXFA_RenderContext* XFA_RenderContext_Create();
681enum 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
710class IXFA_WidgetHandler {
711 public:
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};
797class 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:
809  ~IXFA_WidgetIterator() {}
810};
811class 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:
824  ~IXFA_WidgetAccIterator() {}
825};
826IXFA_WidgetAccIterator* XFA_WidgetAccIterator_Create(
827    CXFA_WidgetAcc* pTravelRoot,
828    XFA_WIDGETORDER eOrder = XFA_WIDGETORDER_PreOrder);
829class 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:
841  ~IXFA_ChecksumContext() {}
842};
843IXFA_ChecksumContext* XFA_Checksum_Create();
844
845#endif  // FXFA_H_
846