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