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 XFA_FXFA_FXFA_H_
8 #define XFA_FXFA_FXFA_H_
9 
10 #include <memory>
11 
12 #include "core/fxcrt/cfx_timer.h"
13 #include "core/fxcrt/fx_coordinates.h"
14 #include "core/fxcrt/retain_ptr.h"
15 #include "core/fxge/fx_dib.h"
16 #include "xfa/fxfa/fxfa_basic.h"
17 
18 class CXFA_FFDoc;
19 class CXFA_FFPageView;
20 class CXFA_FFWidget;
21 class CXFA_Submit;
22 class IFX_SeekableReadStream;
23 class IJS_Runtime;
24 
25 // Note, values must match fpdf_formfill.h JSPLATFORM_ALERT_BUTTON_* flags.
26 enum class AlertButton {
27   kDefault = 0,
28   kOK = 0,
29   kOKCancel = 1,
30   kYesNo = 2,
31   kYesNoCancel = 3,
32 };
33 
34 // Note, values must match fpdf_formfill.h JSPLATFORM_ALERT_ICON_* flags.
35 enum class AlertIcon {
36   kDefault = 0,
37   kError = 0,
38   kWarning = 1,
39   kQuestion = 2,
40   kStatus = 3,
41   kAsterisk = 4,
42 };
43 
44 // Note, values must match fpdf_formfill.h JSPLATFORM_ALERT_RETURN_* flags.
45 enum class AlertReturn {
46   kOK = 1,
47   kCancel = 2,
48   kNo = 3,
49   kYes = 4,
50 };
51 
52 // Note, values must match fpdf_formfill.h FORMTYPE_* flags.
53 enum class FormType {
54   kNone = 0,
55   kAcroForm = 1,
56   kXFAFull = 2,
57   kXFAForeground = 3,
58 };
59 
60 #define XFA_PRINTOPT_ShowDialog 0x00000001
61 #define XFA_PRINTOPT_CanCancel 0x00000002
62 #define XFA_PRINTOPT_ShrinkPage 0x00000004
63 #define XFA_PRINTOPT_AsImage 0x00000008
64 #define XFA_PRINTOPT_ReverseOrder 0x00000010
65 #define XFA_PRINTOPT_PrintAnnot 0x00000020
66 
67 #define XFA_PAGEVIEWEVENT_PostAdded 1
68 #define XFA_PAGEVIEWEVENT_PostRemoved 3
69 #define XFA_PAGEVIEWEVENT_StopLayout 4
70 
71 enum class XFA_EventError {
72   kError = -1,
73   kNotExist = 0,
74   kSuccess = 1,
75   kDisabled = 2,
76 };
77 
78 enum XFA_WidgetStatus {
79   XFA_WidgetStatus_None = 0,
80 
81   XFA_WidgetStatus_Access = 1 << 0,
82   XFA_WidgetStatus_ButtonDown = 1 << 1,
83   XFA_WidgetStatus_Disabled = 1 << 2,
84   XFA_WidgetStatus_Focused = 1 << 3,
85   XFA_WidgetStatus_Printable = 1 << 4,
86   XFA_WidgetStatus_RectCached = 1 << 5,
87   XFA_WidgetStatus_TextEditValueChanged = 1 << 6,
88   XFA_WidgetStatus_Viewable = 1 << 7,
89   XFA_WidgetStatus_Visible = 1 << 8
90 };
91 
92 // Probably should be called IXFA_AppDelegate.
93 class IXFA_AppProvider {
94  public:
95   virtual ~IXFA_AppProvider() = default;
96 
97   /**
98    * Returns the language of the running host application. Such as zh_CN
99    */
100   virtual WideString GetLanguage() = 0;
101 
102   /**
103    * Returns the platform of the machine running the script. Such as WIN
104    */
105   virtual WideString GetPlatform() = 0;
106 
107   /**
108    * Get application name, such as Phantom.
109    */
110   virtual WideString GetAppName() = 0;
111 
112   /**
113    * Get application message box title.
114    */
115   virtual WideString GetAppTitle() const = 0;
116 
117   /**
118    * Causes the system to play a sound.
119    * @param[in] dwType The system code for the appropriate sound.0 (Error)1
120    * (Warning)2 (Question)3 (Status)4 (Default)
121    */
122   virtual void Beep(uint32_t dwType) = 0;
123 
124   /**
125    * Displays a message box.
126    * @param[in] wsMessage    - Message string to display in box.
127    * @param[in] wsTitle      - Title string for box.
128    * @param[in] dwIconType   - Icon type, refer to XFA_MBICON.
129    * @param[in] dwButtonType - Button type, refer to XFA_MESSAGEBUTTON.
130    * @return A valid integer representing the value of the button pressed by the
131    * user, refer to XFA_ID.
132    */
133   virtual int32_t MsgBox(const WideString& wsMessage,
134                          const WideString& wsTitle,
135                          uint32_t dwIconType,
136                          uint32_t dwButtonType) = 0;
137 
138   /**
139    * Get a response from the user.
140    * @param[in] wsQuestion      - Message string to display in box.
141    * @param[in] wsTitle         - Title string for box.
142    * @param[in] wsDefaultAnswer - Initial contents for answer.
143    * @param[in] bMask           - Mask the user input with asterisks when true,
144    * @return A string containing the user's response.
145    */
146   virtual WideString Response(const WideString& wsQuestion,
147                               const WideString& wsTitle,
148                               const WideString& wsDefaultAnswer,
149                               bool bMask) = 0;
150 
151   /**
152    * Download something from somewhere.
153    * @param[in] wsURL - http, ftp, such as
154    * "http://www.w3.org/TR/REC-xml-names/".
155    */
156   virtual RetainPtr<IFX_SeekableReadStream> DownloadURL(
157       const WideString& wsURL) = 0;
158 
159   /**
160    * POST data to the given url.
161    * @param[in] wsURL         the URL being uploaded.
162    * @param[in] wsData        the data being uploaded.
163    * @param[in] wsContentType the content type of data including text/html,
164    * text/xml, text/plain, multipart/form-data,
165    *                          application/x-www-form-urlencoded,
166    * application/octet-stream, any valid MIME type.
167    * @param[in] wsEncode      the encode of data including UTF-8, UTF-16,
168    * ISO8859-1, any recognized [IANA]character encoding
169    * @param[in] wsHeader      any additional HTTP headers to be included in the
170    * post.
171    * @param[out] wsResponse   decoded response from server.
172    * @return true Server permitted the post request, false otherwise.
173    */
174   virtual bool PostRequestURL(const WideString& wsURL,
175                               const WideString& wsData,
176                               const WideString& wsContentType,
177                               const WideString& wsEncode,
178                               const WideString& wsHeader,
179                               WideString& wsResponse) = 0;
180 
181   /**
182    * PUT data to the given url.
183    * @param[in] wsURL         the URL being uploaded.
184    * @param[in] wsData            the data being uploaded.
185    * @param[in] wsEncode      the encode of data including UTF-8, UTF-16,
186    * ISO8859-1, any recognized [IANA]character encoding
187    * @return true Server permitted the post request, false otherwise.
188    */
189   virtual bool PutRequestURL(const WideString& wsURL,
190                              const WideString& wsData,
191                              const WideString& wsEncode) = 0;
192 
193   virtual TimerHandlerIface* GetTimerHandler() const = 0;
194 };
195 
196 class IXFA_DocEnvironment {
197  public:
198   virtual ~IXFA_DocEnvironment() = default;
199 
200   virtual void SetChangeMark(CXFA_FFDoc* hDoc) = 0;
201   virtual void InvalidateRect(CXFA_FFPageView* pPageView,
202                               const CFX_RectF& rt) = 0;
203   // Show or hide caret.
204   virtual void DisplayCaret(CXFA_FFWidget* hWidget,
205                             bool bVisible,
206                             const CFX_RectF* pRtAnchor) = 0;
207 
208   virtual bool GetPopupPos(CXFA_FFWidget* hWidget,
209                            float fMinPopup,
210                            float fMaxPopup,
211                            const CFX_RectF& rtAnchor,
212                            CFX_RectF* pPopupRect) = 0;
213   virtual bool PopupMenu(CXFA_FFWidget* hWidget, const CFX_PointF& ptPopup) = 0;
214 
215   // Specify dwFlags XFA_PAGEVIEWEVENT_Added, XFA_PAGEVIEWEVENT_Removing
216   virtual void PageViewEvent(CXFA_FFPageView* pPageView, uint32_t dwFlags) = 0;
217 
218   virtual void WidgetPostAdd(CXFA_FFWidget* hWidget) = 0;
219   virtual void WidgetPreRemove(CXFA_FFWidget* hWidget) = 0;
220   virtual int32_t CountPages(CXFA_FFDoc* hDoc) = 0;
221   virtual int32_t GetCurrentPage(CXFA_FFDoc* hDoc) = 0;
222   virtual void SetCurrentPage(CXFA_FFDoc* hDoc, int32_t iCurPage) = 0;
223   virtual bool IsCalculationsEnabled(CXFA_FFDoc* hDoc) = 0;
224   virtual void SetCalculationsEnabled(CXFA_FFDoc* hDoc, bool bEnabled) = 0;
225   virtual void GetTitle(CXFA_FFDoc* hDoc, WideString& wsTitle) = 0;
226   virtual void SetTitle(CXFA_FFDoc* hDoc, const WideString& wsTitle) = 0;
227   virtual void ExportData(CXFA_FFDoc* hDoc,
228                           const WideString& wsFilePath,
229                           bool bXDP) = 0;
230   virtual void GotoURL(CXFA_FFDoc* hDoc, const WideString& bsURL) = 0;
231   virtual bool IsValidationsEnabled(CXFA_FFDoc* hDoc) = 0;
232   virtual void SetValidationsEnabled(CXFA_FFDoc* hDoc, bool bEnabled) = 0;
233   virtual void SetFocusWidget(CXFA_FFDoc* hDoc, CXFA_FFWidget* hWidget) = 0;
234   virtual void Print(CXFA_FFDoc* hDoc,
235                      int32_t nStartPage,
236                      int32_t nEndPage,
237                      uint32_t dwOptions) = 0;
238   virtual FX_ARGB GetHighlightColor(CXFA_FFDoc* hDoc) = 0;
239   virtual IJS_Runtime* GetIJSRuntime(CXFA_FFDoc* hDoc) const = 0;
240   virtual RetainPtr<IFX_SeekableReadStream> OpenLinkedFile(
241       CXFA_FFDoc* hDoc,
242       const WideString& wsLink) = 0;
243 
244 #ifdef PDF_XFA_ELEMENT_SUBMIT_ENABLED
245   virtual bool Submit(CXFA_FFDoc* hDoc, CXFA_Submit* submit) = 0;
246 #endif  // PDF_XFA_ELEMENT_SUBMIT_ENABLED
247 };
248 
249 class IXFA_WidgetIterator {
250  public:
251   virtual ~IXFA_WidgetIterator() = default;
252 
253   virtual void Reset() = 0;
254   virtual CXFA_FFWidget* MoveToFirst() = 0;
255   virtual CXFA_FFWidget* MoveToLast() = 0;
256   virtual CXFA_FFWidget* MoveToNext() = 0;
257   virtual CXFA_FFWidget* MoveToPrevious() = 0;
258   virtual CXFA_FFWidget* GetCurrentWidget() = 0;
259   virtual bool SetCurrentWidget(CXFA_FFWidget* hWidget) = 0;
260 };
261 
262 #endif  // XFA_FXFA_FXFA_H_
263