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.
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
26 FP_CURRENTVALUEINDICES,
50 class CJS_WideStringArray
53 CJS_WideStringArray(){}
54 virtual ~CJS_WideStringArray()
56 for (int i=0,sz=m_Data.GetSize(); i<sz; i++)
57 delete m_Data.GetAt(i);
61 void Add(const CFX_WideString& string)
63 m_Data.Add(new CFX_WideString(string));
68 return m_Data.GetSize();
71 CFX_WideString GetAt(int i) const
73 return *m_Data.GetAt(i);
77 CFX_ArrayTemplate<CFX_WideString*> m_Data;
82 CFX_WideString sFieldName;
84 enum FIELD_PROP eProp;
87 CFX_ByteString string;
88 CFX_WideString widestring;
91 CFX_DWordArray wordarray;
92 CJS_WideStringArray widestringarray;
95 class Field : public CJS_EmbedObj
98 Field(CJS_Object* pJSObject);
101 FX_BOOL alignment(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
102 FX_BOOL borderStyle(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
103 FX_BOOL buttonAlignX(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
104 FX_BOOL buttonAlignY(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
105 FX_BOOL buttonFitBounds(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
106 FX_BOOL buttonPosition(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
107 FX_BOOL buttonScaleHow(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
108 FX_BOOL buttonScaleWhen(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
109 FX_BOOL calcOrderIndex(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
110 FX_BOOL charLimit(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
111 FX_BOOL comb(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
112 FX_BOOL commitOnSelChange(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
113 FX_BOOL currentValueIndices(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
114 FX_BOOL defaultStyle(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
115 FX_BOOL defaultValue(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
116 FX_BOOL doNotScroll(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
117 FX_BOOL doNotSpellCheck(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
118 FX_BOOL delay(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
119 FX_BOOL display(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
120 FX_BOOL doc(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
121 FX_BOOL editable(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
122 FX_BOOL exportValues(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
123 FX_BOOL fileSelect(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
124 FX_BOOL fillColor(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
125 FX_BOOL hidden(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
126 FX_BOOL highlight(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
127 FX_BOOL lineWidth(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
128 FX_BOOL multiline(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
129 FX_BOOL multipleSelection(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
130 FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
131 FX_BOOL numItems(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
132 FX_BOOL page(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
133 FX_BOOL password(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
134 FX_BOOL print(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
135 FX_BOOL radiosInUnison(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
136 FX_BOOL readonly(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
137 FX_BOOL rect(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
138 FX_BOOL required(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
139 FX_BOOL richText(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
140 FX_BOOL richValue(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
141 FX_BOOL rotation(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
142 FX_BOOL strokeColor(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
143 FX_BOOL style(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
144 FX_BOOL submitName(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
145 FX_BOOL textColor(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
146 FX_BOOL textFont(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
147 FX_BOOL textSize(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
148 FX_BOOL type(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
149 FX_BOOL userName(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
150 FX_BOOL value(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
151 FX_BOOL valueAsString(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
152 FX_BOOL source(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError);
154 FX_BOOL browseForFileToSubmit(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
155 FX_BOOL buttonGetCaption(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
156 FX_BOOL buttonGetIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
157 FX_BOOL buttonImportIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
158 FX_BOOL buttonSetCaption(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
159 FX_BOOL buttonSetIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
160 FX_BOOL checkThisBox(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
161 FX_BOOL clearItems(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
162 FX_BOOL defaultIsChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
163 FX_BOOL deleteItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
164 FX_BOOL getArray(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
165 FX_BOOL getItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
166 FX_BOOL getLock(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
167 FX_BOOL insertItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
168 FX_BOOL isBoxChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
169 FX_BOOL isDefaultChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
170 FX_BOOL setAction(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
171 FX_BOOL setFocus(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
172 FX_BOOL setItems(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
173 FX_BOOL setLock(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
174 FX_BOOL signatureGetModifications(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
175 FX_BOOL signatureGetSeedValue(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
176 FX_BOOL signatureInfo(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
177 FX_BOOL signatureSetSeedValue(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
178 FX_BOOL signatureSign(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
179 FX_BOOL signatureValidate(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError);
182 static void SetAlignment(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string);
183 static void SetBorderStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string);
184 static void SetButtonAlignX(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
185 static void SetButtonAlignY(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
186 static void SetButtonFitBounds(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
187 static void SetButtonPosition(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
188 static void SetButtonScaleHow(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
189 static void SetButtonScaleWhen(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
190 static void SetCalcOrderIndex(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
191 static void SetCharLimit(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
192 static void SetComb(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
193 static void SetCommitOnSelChange(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
194 static void SetCurrentValueIndices(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_DWordArray& array);
195 static void SetDefaultStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex);
196 static void SetDefaultValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_WideString& string);
197 static void SetDoNotScroll(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
198 static void SetDisplay(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
199 static void SetFillColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color);
200 static void SetHidden(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
201 static void SetHighlight(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string);
202 static void SetLineWidth(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
203 static void SetMultiline(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
204 static void SetMultipleSelection(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
205 static void SetPassword(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
206 static void SetRect(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPDF_Rect& rect);
207 static void SetRichText(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
208 static void SetRichValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex);
209 static void SetRotation(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
210 static void SetStrokeColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color);
211 static void SetStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string);
212 static void SetTextColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color);
213 static void SetTextFont(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string);
214 static void SetTextSize(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
215 static void SetUserName(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_WideString& string);
216 static void SetValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CJS_WideStringArray& strArray);
219 static void AddField(CPDFSDK_Document* pDocument, int nPageIndex, int nFieldType,
220 const CFX_WideString& sName, const CPDF_Rect& rcCoords);
222 static void UpdateFormField(CPDFSDK_Document* pDocument, CPDF_FormField* pFormField,
223 FX_BOOL bChangeMark, FX_BOOL bResetAP, FX_BOOL bRefresh);
224 static void UpdateFormControl(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl,
225 FX_BOOL bChangeMark, FX_BOOL bResetAP, FX_BOOL bRefresh);
227 static CPDFSDK_Widget* GetWidget(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl);
228 static void GetFormFields(CPDFSDK_Document* pDocument, const CFX_WideString& csFieldName, CFX_PtrArray& FieldsArray);
230 static void DoDelay(CPDFSDK_Document* pDocument, CJS_DelayData* pData);
233 FX_BOOL AttachField(Document* pDocument, const CFX_WideString& csFieldName);
234 void SetDelay(FX_BOOL bDelay);
235 void SetIsolate(v8::Isolate* isolate) {m_isolate = isolate;}
237 void ParseFieldName(const std::wstring &strFieldNameParsed,std::wstring &strFieldName,int & iControlNo);
238 void GetFormFields(const CFX_WideString& csFieldName, CFX_PtrArray& FieldsArray);
239 CPDF_FormControl* GetSmartFieldControl(CPDF_FormField* pFormField);
240 FX_BOOL ValueIsOccur(CPDF_FormField* pFormField, CFX_WideString csOptLabel);
242 void AddDelay_Int(enum FIELD_PROP prop, FX_INT32 n);
243 void AddDelay_Bool(enum FIELD_PROP prop,bool b);
244 void AddDelay_String(enum FIELD_PROP prop, const CFX_ByteString& string);
245 void AddDelay_WideString(enum FIELD_PROP prop, const CFX_WideString& string);
246 void AddDelay_Rect(enum FIELD_PROP prop, const CPDF_Rect& rect);
247 void AddDelay_Color(enum FIELD_PROP prop, const CPWL_Color& color);
248 void AddDelay_WordArray(enum FIELD_PROP prop, const CFX_DWordArray& array);
249 void AddDelay_WideStringArray(enum FIELD_PROP prop, const CJS_WideStringArray& array);
254 CPDFSDK_Document* m_pDocument;
255 CFX_WideString m_FieldName;
256 int m_nFormControlIndex;
260 v8::Isolate* m_isolate;
263 class CJS_Field : public CJS_Object
266 CJS_Field(JSFXObject pObject) : CJS_Object(pObject) {};
267 virtual ~CJS_Field(void){};
269 virtual FX_BOOL InitInstance(IFXJS_Context* cc);
271 DECLARE_JS_CLASS(CJS_Field);
273 JS_STATIC_PROP(alignment, Field);
274 JS_STATIC_PROP(borderStyle, Field);
275 JS_STATIC_PROP(buttonAlignX, Field);
276 JS_STATIC_PROP(buttonAlignY, Field);
277 JS_STATIC_PROP(buttonFitBounds, Field);
278 JS_STATIC_PROP(buttonPosition, Field);
279 JS_STATIC_PROP(buttonScaleHow, Field);
280 JS_STATIC_PROP(buttonScaleWhen, Field);
281 JS_STATIC_PROP(calcOrderIndex, Field);
282 JS_STATIC_PROP(charLimit, Field);
283 JS_STATIC_PROP(comb, Field);
284 JS_STATIC_PROP(commitOnSelChange, Field);
285 JS_STATIC_PROP(currentValueIndices, Field);
286 JS_STATIC_PROP(defaultStyle, Field);
287 JS_STATIC_PROP(defaultValue, Field);
288 JS_STATIC_PROP(doNotScroll, Field);
289 JS_STATIC_PROP(doNotSpellCheck, Field);
290 JS_STATIC_PROP(delay, Field);
291 JS_STATIC_PROP(display, Field);
292 JS_STATIC_PROP(doc, Field);
293 JS_STATIC_PROP(editable, Field);
294 JS_STATIC_PROP(exportValues, Field);
295 JS_STATIC_PROP(fileSelect, Field);
296 JS_STATIC_PROP(fillColor, Field);
297 JS_STATIC_PROP(hidden, Field);
298 JS_STATIC_PROP(highlight, Field);
299 JS_STATIC_PROP(lineWidth, Field);
300 JS_STATIC_PROP(multiline, Field);
301 JS_STATIC_PROP(multipleSelection, Field);
302 JS_STATIC_PROP(name, Field);
303 JS_STATIC_PROP(numItems, Field);
304 JS_STATIC_PROP(page, Field);
305 JS_STATIC_PROP(password, Field);
306 JS_STATIC_PROP(print, Field);
307 JS_STATIC_PROP(radiosInUnison, Field);
308 JS_STATIC_PROP(readonly, Field);
309 JS_STATIC_PROP(rect, Field);
310 JS_STATIC_PROP(required, Field);
311 JS_STATIC_PROP(richText, Field);
312 JS_STATIC_PROP(richValue, Field);
313 JS_STATIC_PROP(rotation, Field);
314 JS_STATIC_PROP(strokeColor, Field);
315 JS_STATIC_PROP(style, Field);
316 JS_STATIC_PROP(submitName, Field);
317 JS_STATIC_PROP(textColor, Field);
318 JS_STATIC_PROP(textFont, Field);
319 JS_STATIC_PROP(textSize, Field);
320 JS_STATIC_PROP(type, Field);
321 JS_STATIC_PROP(userName, Field);
322 JS_STATIC_PROP(value, Field);
323 JS_STATIC_PROP(valueAsString, Field);
324 JS_STATIC_PROP(source, Field);
326 JS_STATIC_METHOD(browseForFileToSubmit, Field);
327 JS_STATIC_METHOD(buttonGetCaption, Field);
328 JS_STATIC_METHOD(buttonGetIcon, Field);
329 JS_STATIC_METHOD(buttonImportIcon, Field);
330 JS_STATIC_METHOD(buttonSetCaption, Field);
331 JS_STATIC_METHOD(buttonSetIcon, Field);
332 JS_STATIC_METHOD(checkThisBox, Field);
333 JS_STATIC_METHOD(clearItems, Field);
334 JS_STATIC_METHOD(defaultIsChecked, Field);
335 JS_STATIC_METHOD(deleteItemAt, Field);
336 JS_STATIC_METHOD(getArray, Field);
337 JS_STATIC_METHOD(getItemAt, Field);
338 JS_STATIC_METHOD(getLock, Field);
339 JS_STATIC_METHOD(insertItemAt, Field);
340 JS_STATIC_METHOD(isBoxChecked, Field);
341 JS_STATIC_METHOD(isDefaultChecked, Field);
342 JS_STATIC_METHOD(setAction, Field);
343 JS_STATIC_METHOD(setFocus, Field);
344 JS_STATIC_METHOD(setItems, Field);
345 JS_STATIC_METHOD(setLock, Field);
346 JS_STATIC_METHOD(signatureGetModifications, Field);
347 JS_STATIC_METHOD(signatureGetSeedValue, Field);
348 JS_STATIC_METHOD(signatureInfo, Field);
349 JS_STATIC_METHOD(signatureSetSeedValue, Field);
350 JS_STATIC_METHOD(signatureSign, Field);
351 JS_STATIC_METHOD(signatureValidate, Field);