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 #include "../../include/javascript/JavaScript.h"
8 #include "../../include/javascript/IJavaScript.h"
9 #include "../../include/javascript/JS_Define.h"
10 #include "../../include/javascript/JS_Object.h"
11 #include "../../include/javascript/JS_Value.h"
12 #include "../../include/javascript/Field.h"
13 #include "../../include/javascript/JS_EventHandler.h"
14 #include "../../include/javascript/JS_Context.h"
15 #include "../../include/javascript/JS_Runtime.h"
16 #include "../../include/javascript/Document.h"
17 #include "../../include/javascript/color.h"
18 #include "../../include/javascript/PublicMethods.h"
19 #include "../../include/javascript/Icon.h"
20 
21 
22 /* ---------------------- Field ---------------------- */
23 
24 BEGIN_JS_STATIC_CONST(CJS_Field)
END_JS_STATIC_CONST()25 END_JS_STATIC_CONST()
26 
27 BEGIN_JS_STATIC_PROP(CJS_Field)
28 	JS_STATIC_PROP_ENTRY(alignment)
29 	JS_STATIC_PROP_ENTRY(borderStyle)
30 	JS_STATIC_PROP_ENTRY(buttonAlignX)
31 	JS_STATIC_PROP_ENTRY(buttonAlignY)
32 	JS_STATIC_PROP_ENTRY(buttonFitBounds)
33 	JS_STATIC_PROP_ENTRY(buttonPosition)
34 	JS_STATIC_PROP_ENTRY(buttonScaleHow)
35 	JS_STATIC_PROP_ENTRY(buttonScaleWhen)
36 	JS_STATIC_PROP_ENTRY(calcOrderIndex)
37 	JS_STATIC_PROP_ENTRY(charLimit)
38 	JS_STATIC_PROP_ENTRY(comb)
39 	JS_STATIC_PROP_ENTRY(commitOnSelChange)
40 	JS_STATIC_PROP_ENTRY(currentValueIndices)
41 	JS_STATIC_PROP_ENTRY(defaultStyle)
42 	JS_STATIC_PROP_ENTRY(defaultValue)
43 	JS_STATIC_PROP_ENTRY(doNotScroll)
44 	JS_STATIC_PROP_ENTRY(doNotSpellCheck)
45 	JS_STATIC_PROP_ENTRY(delay)
46 	JS_STATIC_PROP_ENTRY(display)
47 	JS_STATIC_PROP_ENTRY(doc)
48 	JS_STATIC_PROP_ENTRY(editable)
49 	JS_STATIC_PROP_ENTRY(exportValues)
50 	JS_STATIC_PROP_ENTRY(hidden)
51 	JS_STATIC_PROP_ENTRY(fileSelect)
52 	JS_STATIC_PROP_ENTRY(fillColor)
53 	JS_STATIC_PROP_ENTRY(lineWidth)
54 	JS_STATIC_PROP_ENTRY(highlight)
55 	JS_STATIC_PROP_ENTRY(multiline)
56 	JS_STATIC_PROP_ENTRY(multipleSelection)
57 	JS_STATIC_PROP_ENTRY(name)
58 	JS_STATIC_PROP_ENTRY(numItems)
59 	JS_STATIC_PROP_ENTRY(page)
60 	JS_STATIC_PROP_ENTRY(password)
61 	JS_STATIC_PROP_ENTRY(print)
62 	JS_STATIC_PROP_ENTRY(radiosInUnison)
63 	JS_STATIC_PROP_ENTRY(readonly)
64 	JS_STATIC_PROP_ENTRY(rect)
65 	JS_STATIC_PROP_ENTRY(required)
66 	JS_STATIC_PROP_ENTRY(richText)
67 	JS_STATIC_PROP_ENTRY(richValue)
68 	JS_STATIC_PROP_ENTRY(rotation)
69 	JS_STATIC_PROP_ENTRY(strokeColor)
70 	JS_STATIC_PROP_ENTRY(style)
71 	JS_STATIC_PROP_ENTRY(submitName)
72 	JS_STATIC_PROP_ENTRY(textColor)
73 	JS_STATIC_PROP_ENTRY(textFont)
74 	JS_STATIC_PROP_ENTRY(textSize)
75 	JS_STATIC_PROP_ENTRY(type)
76 	JS_STATIC_PROP_ENTRY(userName)
77 	JS_STATIC_PROP_ENTRY(value)
78 	JS_STATIC_PROP_ENTRY(valueAsString)
79 	JS_STATIC_PROP_ENTRY(source)
80 END_JS_STATIC_PROP()
81 
82 BEGIN_JS_STATIC_METHOD(CJS_Field)
83 	JS_STATIC_METHOD_ENTRY(browseForFileToSubmit)
84 	JS_STATIC_METHOD_ENTRY(buttonGetCaption)
85 	JS_STATIC_METHOD_ENTRY(buttonGetIcon)
86 	JS_STATIC_METHOD_ENTRY(buttonImportIcon)
87 	JS_STATIC_METHOD_ENTRY(buttonSetCaption)
88 	JS_STATIC_METHOD_ENTRY(buttonSetIcon)
89 	JS_STATIC_METHOD_ENTRY(checkThisBox)
90 	JS_STATIC_METHOD_ENTRY(clearItems)
91 	JS_STATIC_METHOD_ENTRY(defaultIsChecked)
92 	JS_STATIC_METHOD_ENTRY(deleteItemAt)
93 	JS_STATIC_METHOD_ENTRY(getArray )
94 	JS_STATIC_METHOD_ENTRY(getItemAt)
95 	JS_STATIC_METHOD_ENTRY(getLock)
96 	JS_STATIC_METHOD_ENTRY(insertItemAt)
97 	JS_STATIC_METHOD_ENTRY(isBoxChecked)
98 	JS_STATIC_METHOD_ENTRY(isDefaultChecked)
99 	JS_STATIC_METHOD_ENTRY(setAction)
100 	JS_STATIC_METHOD_ENTRY(setFocus)
101 	JS_STATIC_METHOD_ENTRY(setItems)
102 	JS_STATIC_METHOD_ENTRY(setLock)
103 	JS_STATIC_METHOD_ENTRY(signatureGetModifications)
104 	JS_STATIC_METHOD_ENTRY(signatureGetSeedValue)
105 	JS_STATIC_METHOD_ENTRY(signatureInfo)
106 	JS_STATIC_METHOD_ENTRY(signatureSetSeedValue)
107 	JS_STATIC_METHOD_ENTRY(signatureSign)
108 	JS_STATIC_METHOD_ENTRY(signatureValidate)
109 END_JS_STATIC_METHOD()
110 
111 IMPLEMENT_JS_CLASS(CJS_Field, Field)
112 
113 FX_BOOL	CJS_Field::InitInstance(IFXJS_Context* cc)
114 {
115 	CJS_Context* pContext = (CJS_Context*)cc;
116 	ASSERT(pContext != NULL);
117 
118 	Field* pField = (Field*)GetEmbedObject();
119 	ASSERT(pField != NULL);
120 
121 	pField->SetIsolate(pContext->GetJSRuntime()->GetIsolate());
122 
123 	return TRUE;
124 };
125 
Field(CJS_Object * pJSObject)126 Field::Field(CJS_Object* pJSObject): CJS_EmbedObj(pJSObject),
127 	m_pJSDoc(NULL),
128 	m_pDocument(NULL),
129 	m_nFormControlIndex(-1),
130 	m_bCanSet(FALSE),
131 	m_bDelay(FALSE),
132 	m_isolate(NULL)
133 {
134 }
135 
~Field()136 Field::~Field()
137 {
138 }
139 
140 //note: iControlNo = -1, means not a widget.
ParseFieldName(const std::wstring & strFieldNameParsed,std::wstring & strFieldName,int & iControlNo)141 void Field::ParseFieldName(const std::wstring &strFieldNameParsed,std::wstring &strFieldName,int & iControlNo)
142 {
143 	int iStart = strFieldNameParsed.find_last_of(L'.');
144 	if (iStart == -1)
145 	{
146 		strFieldName = strFieldNameParsed;
147 		iControlNo = -1;
148 		return;
149 	}
150 	std::wstring suffixal = strFieldNameParsed.substr(iStart+1);
151 	iControlNo = FXSYS_wtoi(suffixal.c_str());
152 	if (iControlNo == 0)
153 	{
154 		int iStart;
155 		while((iStart = suffixal.find_last_of(L" ")) != -1)
156 		{
157 			suffixal.erase(iStart,1);
158 		}
159 
160 		if (suffixal.compare(L"0") != 0)
161 		{
162 			strFieldName = strFieldNameParsed;
163 			iControlNo = -1;
164 			return;
165 		}
166 
167 	}
168 	strFieldName = strFieldNameParsed.substr(0,iStart);
169 }
170 
AttachField(Document * pDocument,const CFX_WideString & csFieldName)171 FX_BOOL Field::AttachField(Document* pDocument, const CFX_WideString& csFieldName)
172 {
173 	ASSERT(pDocument != NULL);
174 	m_pJSDoc = pDocument;
175 
176 	m_pDocument = pDocument->GetReaderDoc();
177 	ASSERT(m_pDocument != NULL);
178 
179 	m_bCanSet = m_pDocument->GetPermissions(FPDFPERM_FILL_FORM) ||
180 		m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) ||
181 		m_pDocument->GetPermissions(FPDFPERM_MODIFY);
182 
183 	CPDFSDK_InterForm* pRDInterForm = m_pDocument->GetInterForm();
184 	ASSERT(pRDInterForm != NULL);
185 
186 	CPDF_InterForm* pInterForm = pRDInterForm->GetInterForm();
187 	ASSERT(pInterForm != NULL);
188 
189 	CFX_WideString swFieldNameTemp = csFieldName;
190 	swFieldNameTemp.Replace(L"..", L".");
191 
192 	if (pInterForm->CountFields(swFieldNameTemp) <= 0)
193 	{
194 		std::wstring strFieldName;
195 		int iControlNo = -1;
196 		ParseFieldName(swFieldNameTemp.c_str(), strFieldName, iControlNo);
197 		if (iControlNo == -1) return FALSE;
198 
199 		m_FieldName = strFieldName.c_str();
200 		m_nFormControlIndex = iControlNo;
201 		return TRUE;
202 	}
203 
204 	m_FieldName = swFieldNameTemp;
205 	m_nFormControlIndex = -1;
206 
207 	return TRUE;
208 }
209 
GetFormFields(CPDFSDK_Document * pDocument,const CFX_WideString & csFieldName,CFX_PtrArray & FieldArray)210 void Field::GetFormFields(CPDFSDK_Document* pDocument, const CFX_WideString& csFieldName, CFX_PtrArray& FieldArray)
211 {
212 	ASSERT(pDocument != NULL);
213 
214 	CPDFSDK_InterForm* pReaderInterForm = pDocument->GetInterForm();
215 	ASSERT(pReaderInterForm != NULL);
216 
217 	CPDF_InterForm* pInterForm = pReaderInterForm->GetInterForm();
218 	ASSERT(pInterForm != NULL);
219 
220 	ASSERT(FieldArray.GetSize() == 0);
221 
222 	for (int i=0,sz=pInterForm->CountFields(csFieldName); i<sz; i++)
223 	{
224 		if (CPDF_FormField* pFormField = pInterForm->GetField(i, csFieldName))
225 			FieldArray.Add((void*)pFormField);
226 	}
227 }
228 
GetFormFields(const CFX_WideString & csFieldName,CFX_PtrArray & FieldArray)229 void Field::GetFormFields(const CFX_WideString& csFieldName, CFX_PtrArray& FieldArray)
230 {
231 	ASSERT(m_pDocument != NULL);
232 
233 	Field::GetFormFields(m_pDocument, csFieldName, FieldArray);
234 }
235 
UpdateFormField(CPDFSDK_Document * pDocument,CPDF_FormField * pFormField,FX_BOOL bChangeMark,FX_BOOL bResetAP,FX_BOOL bRefresh)236 void Field::UpdateFormField(CPDFSDK_Document* pDocument, CPDF_FormField* pFormField,
237 							FX_BOOL bChangeMark, FX_BOOL bResetAP, FX_BOOL bRefresh)
238 {
239 	ASSERT(pDocument != NULL);
240 	ASSERT(pFormField != NULL);
241 
242 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
243 	ASSERT(pInterForm != NULL);
244 
245 	CFX_PtrArray widgets;
246 	pInterForm->GetWidgets(pFormField, widgets);
247 
248 	if (bResetAP)
249 	{
250 		int nFieldType = pFormField->GetFieldType();
251 		if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_TEXTFIELD)
252 		{
253 			for (int i=0,sz=widgets.GetSize(); i<sz; i++)
254 			{
255 				CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets.GetAt(i);
256 				ASSERT(pWidget != NULL);
257 
258 				FX_BOOL bFormated = FALSE;
259 				CFX_WideString sValue = pWidget->OnFormat(0, bFormated);
260 				if (bFormated)
261 					pWidget->ResetAppearance(sValue.c_str(), FALSE);
262 				else
263 					pWidget->ResetAppearance(NULL, FALSE);
264 			}
265 		}
266 		else
267 		{
268 			for (int i=0,sz=widgets.GetSize(); i<sz; i++)
269 			{
270 				CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets.GetAt(i);
271 				ASSERT(pWidget != NULL);
272 
273 				pWidget->ResetAppearance(NULL, FALSE);
274 			}
275 		}
276 	}
277 
278 	if (bRefresh)
279 	{
280 		for (int i=0,sz=widgets.GetSize(); i<sz; i++)
281 		{
282 			CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets.GetAt(i);
283 			ASSERT(pWidget != NULL);
284 
285 			CPDFSDK_InterForm * pInterForm = pWidget->GetInterForm();
286 			CPDFSDK_Document* pDoc = pInterForm->GetDocument();
287 // 			CReader_Page* pPage = pWidget->GetPage();
288  			ASSERT(pDoc != NULL);
289 			pDoc->UpdateAllViews(NULL, pWidget);
290 		}
291 	}
292 
293 	if (bChangeMark)
294 		pDocument->SetChangeMark();
295 }
296 
UpdateFormControl(CPDFSDK_Document * pDocument,CPDF_FormControl * pFormControl,FX_BOOL bChangeMark,FX_BOOL bResetAP,FX_BOOL bRefresh)297 void Field::UpdateFormControl(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl,
298 							FX_BOOL bChangeMark, FX_BOOL bResetAP, FX_BOOL bRefresh)
299 {
300 	ASSERT(pDocument != NULL);
301 	ASSERT(pFormControl != NULL);
302 
303 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
304 	ASSERT(pInterForm != NULL);
305 
306 	CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl);
307 
308 	if (pWidget)
309 	{
310 		if (bResetAP)
311 		{
312 			int nFieldType = pWidget->GetFieldType();
313 			if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_TEXTFIELD)
314 			{
315 				FX_BOOL bFormated = FALSE;
316 				CFX_WideString sValue = pWidget->OnFormat(0, bFormated);
317 				if (bFormated)
318 					pWidget->ResetAppearance(sValue.c_str(), FALSE);
319 				else
320 					pWidget->ResetAppearance(NULL, FALSE);
321 			}
322 			else
323 			{
324 				pWidget->ResetAppearance(NULL, FALSE);
325 			}
326 		}
327 
328 		if (bRefresh)
329 		{
330 			CPDFSDK_InterForm * pInterForm = pWidget->GetInterForm();
331 			CPDFSDK_Document* pDoc = pInterForm->GetDocument();
332 			ASSERT(pDoc != NULL);
333 			pDoc->UpdateAllViews(NULL, pWidget);
334 		}
335 
336 	}
337 
338 	if (bChangeMark)
339 		pDocument->SetChangeMark();
340 }
341 
GetWidget(CPDFSDK_Document * pDocument,CPDF_FormControl * pFormControl)342 CPDFSDK_Widget* Field::GetWidget(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl)
343 {
344 	ASSERT(pDocument != NULL);
345 	ASSERT(pFormControl != NULL);
346 
347 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
348 	ASSERT(pInterForm != NULL);
349 
350 	return pInterForm->GetWidget(pFormControl);
351 }
352 
ValueIsOccur(CPDF_FormField * pFormField,CFX_WideString csOptLabel)353 FX_BOOL Field::ValueIsOccur(CPDF_FormField* pFormField, CFX_WideString csOptLabel)
354 {
355 	ASSERT(pFormField != NULL);
356 
357 	for (int i=0,sz = pFormField->CountOptions(); i < sz; i++)
358 	{
359 		if (csOptLabel.Compare(pFormField->GetOptionLabel(i)) == 0)
360 			return TRUE;
361 	}
362 
363 	return FALSE;
364 }
365 
GetSmartFieldControl(CPDF_FormField * pFormField)366 CPDF_FormControl* Field::GetSmartFieldControl(CPDF_FormField* pFormField)
367 {
368 	ASSERT(pFormField != NULL);
369 	if(!pFormField->CountControls() || m_nFormControlIndex>=pFormField->CountControls()) return NULL;
370 
371 	if (m_nFormControlIndex<0)
372 		return pFormField->GetControl(0);
373 	else
374 		return pFormField->GetControl(m_nFormControlIndex);
375 }
376 
377 /* ---------------------------------------- property ---------------------------------------- */
378 
alignment(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)379 FX_BOOL Field::alignment(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
380 {
381 	ASSERT(m_pDocument != NULL);
382 
383 	if (vp.IsSetting())
384 	{
385 		if (!m_bCanSet) return FALSE;
386 
387 		CFX_ByteString alignStr;
388 		vp >> alignStr;
389 
390 		if (m_bDelay)
391 		{
392 			AddDelay_String(FP_ALIGNMENT, alignStr);
393 		}
394 		else
395 		{
396 			Field::SetAlignment(m_pDocument, m_FieldName, m_nFormControlIndex, alignStr);
397 		}
398 	}
399 	else
400 	{
401 		CFX_PtrArray FieldArray;
402 		GetFormFields(m_FieldName, FieldArray);
403 		if (FieldArray.GetSize() <= 0) return FALSE;
404 
405 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
406 		ASSERT(pFormField != NULL);
407 
408 		if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
409 			return FALSE;
410 
411 		CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
412 		if (!pFormControl)return FALSE;
413 
414 		switch (pFormControl->GetControlAlignment())
415 		{
416 			case 1:
417 				vp << L"center";
418 				break;
419 			case 0:
420 				vp << L"left";
421 				break;
422 			case 2:
423 				vp << L"right";
424 				break;
425 			default:
426 				vp << L"";
427 		}
428 	}
429 
430 	return TRUE;
431 }
432 
SetAlignment(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,const CFX_ByteString & string)433 void Field::SetAlignment(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex,
434 						 const CFX_ByteString& string)
435 {
436 	//Not supported.
437 }
438 
borderStyle(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)439 FX_BOOL Field::borderStyle(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
440 {
441 	ASSERT(m_pDocument != NULL);
442 
443 	if (vp.IsSetting())
444 	{
445 		if (!m_bCanSet) return FALSE;
446 
447 		CFX_ByteString strType = "";
448 		vp >> strType;
449 
450 		if (m_bDelay)
451 		{
452 			AddDelay_String(FP_BORDERSTYLE, strType);
453 		}
454 		else
455 		{
456 			Field::SetBorderStyle(m_pDocument, m_FieldName, m_nFormControlIndex, strType);
457 		}
458 	}
459 	else
460 	{
461 		CFX_PtrArray FieldArray;
462 		GetFormFields(m_FieldName, FieldArray);
463 		if (FieldArray.GetSize() <= 0) return FALSE;
464 
465 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
466 		if (!pFormField) return FALSE;
467 
468 		CPDFSDK_Widget* pWidget = GetWidget(m_pDocument, GetSmartFieldControl(pFormField));
469 		if (!pWidget) return FALSE;
470 
471 		int nBorderstyle = pWidget->GetBorderStyle();
472 
473 		switch (nBorderstyle)
474 		{
475 			case BBS_SOLID:
476 				vp << L"solid";
477 				break;
478 			case BBS_DASH:
479 				vp << L"dashed";
480 				break;
481 			case BBS_BEVELED:
482 				vp << L"beveled";
483 				break;
484 			case BBS_INSET:
485 				vp << L"inset";
486 				break;
487 			case BBS_UNDERLINE:
488 				vp << L"underline";
489 				break;
490 			default:
491 				vp << L"";
492 				break;
493 		}
494 	}
495 
496 	return TRUE;
497 }
498 
SetBorderStyle(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,const CFX_ByteString & string)499 void Field::SetBorderStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex,
500 						   const CFX_ByteString& string)
501 {
502 	ASSERT(pDocument != NULL);
503 
504 	int nBorderStyle = 0;
505 
506 	if (string == "solid")
507 		nBorderStyle = BBS_SOLID;
508 	else if (string == "beveled")
509 		nBorderStyle = BBS_BEVELED;
510 	else if (string == "dashed")
511 		nBorderStyle = BBS_DASH;
512 	else if (string == "inset")
513 		nBorderStyle = BBS_INSET;
514 	else if (string == "underline")
515 		nBorderStyle = BBS_UNDERLINE;
516 	else return;
517 
518 	CFX_PtrArray FieldArray;
519 	GetFormFields(pDocument, swFieldName, FieldArray);
520 
521 	for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
522 	{
523 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
524 		ASSERT(pFormField != NULL);
525 
526 		if (nControlIndex < 0)
527 		{
528 			FX_BOOL bSet = FALSE;
529 			for (int j=0,jsz = pFormField->CountControls(); j<jsz; j++)
530 			{
531 				if (CPDFSDK_Widget* pWidget = GetWidget(pDocument, pFormField->GetControl(j)))
532 				{
533 					if (pWidget->GetBorderStyle() != nBorderStyle)
534 					{
535 						pWidget->SetBorderStyle(nBorderStyle);
536 						bSet = TRUE;
537 					}
538 				}
539 			}
540 			if (bSet) UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
541 		}
542 		else
543 		{
544 			if(nControlIndex >= pFormField->CountControls()) return;
545 			if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex))
546 			{
547 				if (CPDFSDK_Widget* pWidget = GetWidget(pDocument, pFormControl))
548 				{
549 					if (pWidget->GetBorderStyle() != nBorderStyle)
550 					{
551 						pWidget->SetBorderStyle(nBorderStyle);
552 						UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE);
553 					}
554 				}
555 			}
556 		}
557 	}
558 }
559 
buttonAlignX(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)560 FX_BOOL Field::buttonAlignX(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
561 {
562 	ASSERT(m_pDocument != NULL);
563 
564 	if (vp.IsSetting())
565 	{
566 		if (!m_bCanSet) return FALSE;
567 
568 		int nVP;
569 		vp >> nVP;
570 
571 		if (m_bDelay)
572 		{
573 			AddDelay_Int(FP_BUTTONALIGNX, nVP);
574 		}
575 		else
576 		{
577 			Field::SetButtonAlignX(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
578 		}
579 	}
580 	else
581 	{
582 		CFX_PtrArray FieldArray;
583 		GetFormFields(m_FieldName,FieldArray);
584 		if (FieldArray.GetSize() <= 0) return FALSE;
585 
586 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
587 		ASSERT(pFormField != NULL);
588 
589 		if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
590 			return FALSE;
591 
592 		CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
593 		if (!pFormControl)return FALSE;
594 
595 		CPDF_IconFit IconFit = pFormControl->GetIconFit();
596 
597 		FX_FLOAT fLeft,fBottom;
598 		IconFit.GetIconPosition(fLeft,fBottom);
599 
600 		vp << (FX_INT32)fLeft;
601 	}
602 
603 	return TRUE;
604 }
605 
SetButtonAlignX(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,int number)606 void Field::SetButtonAlignX(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
607 {
608 	//Not supported.
609 }
610 
buttonAlignY(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)611 FX_BOOL Field::buttonAlignY(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
612 {
613 	ASSERT(m_pDocument != NULL);
614 
615 	if (vp.IsSetting())
616 	{
617 		if (!m_bCanSet) return FALSE;
618 
619 		int nVP;
620 		vp >> nVP;
621 
622 		if (m_bDelay)
623 		{
624 			AddDelay_Int(FP_BUTTONALIGNY, nVP);
625 		}
626 		else
627 		{
628 			Field::SetButtonAlignY(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
629 		}
630 	}
631 	else
632 	{
633 		CFX_PtrArray FieldArray;
634 		GetFormFields(m_FieldName,FieldArray);
635 		if (FieldArray.GetSize() <= 0) return FALSE;
636 
637 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
638 		ASSERT(pFormField != NULL);
639 
640 		if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
641 			return FALSE;
642 
643 		CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
644 		if (!pFormControl)return FALSE;
645 
646 		CPDF_IconFit IconFit = pFormControl->GetIconFit();
647 
648 		FX_FLOAT fLeft,fBottom;
649 		IconFit.GetIconPosition(fLeft,fBottom);
650 
651 		vp <<  (FX_INT32)fBottom;
652 	}
653 
654 	return TRUE;
655 }
656 
SetButtonAlignY(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,int number)657 void Field::SetButtonAlignY(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
658 {
659 	//Not supported.
660 }
661 
buttonFitBounds(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)662 FX_BOOL Field::buttonFitBounds(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
663 {
664 	ASSERT(m_pDocument != NULL);
665 
666 	if (vp.IsSetting())
667 	{
668 		if (!m_bCanSet) return FALSE;
669 
670 		bool bVP;
671 		vp >> bVP;
672 
673 		if (m_bDelay)
674 		{
675 			AddDelay_Bool(FP_BUTTONFITBOUNDS, bVP);
676 		}
677 		else
678 		{
679 			Field::SetButtonFitBounds(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
680 		}
681 	}
682 	else
683 	{
684 		CFX_PtrArray FieldArray;
685 		GetFormFields(m_FieldName,FieldArray);
686 		if (FieldArray.GetSize() <= 0) return FALSE;
687 
688 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
689 		ASSERT(pFormField != NULL);
690 
691 		if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
692 			return FALSE;
693 
694 		CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
695 		if (!pFormControl)return FALSE;
696 
697 		CPDF_IconFit IconFit = pFormControl->GetIconFit();
698 		vp << IconFit.GetFittingBounds();
699 	}
700 
701 	return TRUE;
702 }
703 
SetButtonFitBounds(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,bool b)704 void Field::SetButtonFitBounds(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
705 {
706 	//Not supported.
707 }
708 
buttonPosition(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)709 FX_BOOL Field::buttonPosition(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
710 {
711 	ASSERT(m_pDocument != NULL);
712 
713 	if (vp.IsSetting())
714 	{
715 		if (!m_bCanSet) return FALSE;
716 
717 		int nVP;
718 		vp >> nVP;
719 
720 		if (m_bDelay)
721 		{
722 			AddDelay_Int(FP_BUTTONPOSITION, nVP);
723 		}
724 		else
725 		{
726 			Field::SetButtonPosition(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
727 		}
728 	}
729 	else
730 	{
731 		CFX_PtrArray FieldArray;
732 		GetFormFields(m_FieldName,FieldArray);
733 		if (FieldArray.GetSize() <= 0) return FALSE;
734 
735 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
736 		ASSERT(pFormField != NULL);
737 
738 		if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
739 			return FALSE;
740 
741 		CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
742 		if (!pFormControl)return FALSE;
743 
744 		vp <<  pFormControl->GetTextPosition();
745 	}
746 	return TRUE;
747 }
748 
SetButtonPosition(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,int number)749 void Field::SetButtonPosition(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
750 {
751 	//Not supported.
752 }
753 
buttonScaleHow(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)754 FX_BOOL Field::buttonScaleHow(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
755 {
756 	ASSERT(m_pDocument != NULL);
757 
758 	if (vp.IsSetting())
759 	{
760 		if (!m_bCanSet) return FALSE;
761 
762 		int nVP;
763 		vp >> nVP;
764 
765 		if (m_bDelay)
766 		{
767 			AddDelay_Int(FP_BUTTONSCALEHOW, nVP);
768 		}
769 		else
770 		{
771 			Field::SetButtonScaleHow(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
772 		}
773 	}
774 	else
775 	{
776 		CFX_PtrArray FieldArray;
777 		GetFormFields(m_FieldName, FieldArray);
778 		if (FieldArray.GetSize() <= 0) return FALSE;
779 
780 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
781 		ASSERT(pFormField != NULL);
782 
783 		if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
784 			return FALSE;
785 
786 		CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
787 		if (!pFormControl)return FALSE;
788 
789 		CPDF_IconFit IconFit = pFormControl->GetIconFit();
790 		if (IconFit.IsProportionalScale())
791 			vp << (FX_INT32)0;
792 		else
793 			vp << (FX_INT32)1;
794 	}
795 
796 	return TRUE;
797 }
798 
SetButtonScaleHow(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,int number)799 void Field::SetButtonScaleHow(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
800 {
801 	//Not supported.
802 }
803 
buttonScaleWhen(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)804 FX_BOOL Field::buttonScaleWhen(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
805 {
806 	ASSERT(m_pDocument != NULL);
807 
808 	if (vp.IsSetting())
809 	{
810 		if (!m_bCanSet) return FALSE;
811 
812 		int nVP;
813 		vp >> nVP;
814 
815 		if (m_bDelay)
816 		{
817 			AddDelay_Int(FP_BUTTONSCALEWHEN, nVP);
818 		}
819 		else
820 		{
821 			Field::SetButtonScaleWhen(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
822 		}
823 	}
824 	else
825 	{
826 		CFX_PtrArray FieldArray;
827 		GetFormFields(m_FieldName,FieldArray);
828 		if (FieldArray.GetSize() <= 0) return FALSE;
829 
830 		CPDF_FormField* pFormField = (CPDF_FormField*) FieldArray.ElementAt(0);
831 		ASSERT(pFormField != NULL);
832 
833 		if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
834 			return FALSE;
835 
836 		CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
837 		if (!pFormControl) return FALSE;
838 
839 		CPDF_IconFit IconFit = pFormControl->GetIconFit();
840 		int ScaleM = IconFit.GetScaleMethod();
841 		switch (ScaleM)
842 		{
843 			case CPDF_IconFit::Always :
844 				vp <<  (FX_INT32) CPDF_IconFit::Always;
845 				break;
846 			case CPDF_IconFit::Bigger :
847 				vp <<  (FX_INT32) CPDF_IconFit::Bigger;
848 				break;
849 			case CPDF_IconFit::Never :
850 				vp <<  (FX_INT32) CPDF_IconFit::Never;
851 				break;
852 			case CPDF_IconFit::Smaller :
853 				vp <<  (FX_INT32) CPDF_IconFit::Smaller;
854 				break;
855 		}
856 	}
857 
858 	return TRUE;
859 }
860 
SetButtonScaleWhen(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,int number)861 void Field::SetButtonScaleWhen(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
862 {
863 	//Not supported.
864 }
865 
calcOrderIndex(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)866 FX_BOOL Field::calcOrderIndex(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
867 {
868 	ASSERT(m_pDocument != NULL);
869 
870 	if (vp.IsSetting())
871 	{
872 		if (!m_bCanSet) return FALSE;
873 
874 		int nVP;
875 		vp >> nVP;
876 
877 		if (m_bDelay)
878 		{
879 			AddDelay_Int(FP_CALCORDERINDEX, nVP);
880 		}
881 		else
882 		{
883 			Field::SetCalcOrderIndex(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
884 		}
885 	}
886 	else
887 	{
888 		CFX_PtrArray FieldArray;
889 		GetFormFields(m_FieldName, FieldArray);
890 		if (FieldArray.GetSize() <= 0) return FALSE;
891 
892 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
893 		ASSERT(pFormField != NULL);
894 
895 		if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX && pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
896 			return FALSE;
897 
898 		CPDFSDK_InterForm* pRDInterForm = m_pDocument->GetInterForm();
899 		ASSERT(pRDInterForm != NULL);
900 
901 		CPDF_InterForm* pInterForm = pRDInterForm->GetInterForm();
902 		ASSERT(pInterForm != NULL);
903 
904 		vp << (FX_INT32)pInterForm->FindFieldInCalculationOrder(pFormField);
905 	}
906 
907 	return TRUE;
908 }
909 
SetCalcOrderIndex(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,int number)910 void Field::SetCalcOrderIndex(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
911 {
912 	//Not supported.
913 }
914 
charLimit(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)915 FX_BOOL Field::charLimit(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
916 {
917 	ASSERT(m_pDocument != NULL);
918 
919 	if (vp.IsSetting())
920 	{
921 		if (!m_bCanSet) return FALSE;
922 
923 		int nVP;
924 		vp >> nVP;
925 
926 		if (m_bDelay)
927 		{
928 			AddDelay_Int(FP_CHARLIMIT, nVP);
929 		}
930 		else
931 		{
932 			Field::SetCharLimit(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
933 		}
934 	}
935 	else
936 	{
937 		CFX_PtrArray FieldArray;
938 		GetFormFields(m_FieldName, FieldArray);
939 		if (FieldArray.GetSize() <= 0) return FALSE;
940 
941 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
942 		ASSERT(pFormField != NULL);
943 
944 		if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
945 			return FALSE;
946 
947 		vp << (FX_INT32)pFormField->GetMaxLen();
948 	}
949 	return TRUE;
950 }
951 
SetCharLimit(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,int number)952 void Field::SetCharLimit(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
953 {
954 	//Not supported.
955 }
956 
comb(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)957 FX_BOOL Field::comb(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
958 {
959 	ASSERT(m_pDocument != NULL);
960 
961 	if (vp.IsSetting())
962 	{
963 		if (!m_bCanSet) return FALSE;
964 
965 		bool bVP;
966 		vp >> bVP;
967 
968 		if (m_bDelay)
969 		{
970 			AddDelay_Bool(FP_COMB, bVP);
971 		}
972 		else
973 		{
974 			Field::SetComb(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
975 		}
976 	}
977 	else
978 	{
979 		CFX_PtrArray FieldArray;
980 		GetFormFields(m_FieldName,FieldArray);
981 		if (FieldArray.GetSize() <= 0) return FALSE;
982 
983 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
984 		ASSERT(pFormField != NULL);
985 
986 		if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
987 			return FALSE;
988 
989 		if (pFormField->GetFieldFlags() & FIELDFLAG_COMB)
990 			vp << true;
991 		else
992 			vp << false;
993 	}
994 
995 	return TRUE;
996 }
997 
SetComb(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,bool b)998 void Field::SetComb(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
999 {
1000 	//Not supported.
1001 }
1002 
commitOnSelChange(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1003 FX_BOOL Field::commitOnSelChange(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1004 {
1005 	ASSERT(m_pDocument != NULL);
1006 
1007 	if (vp.IsSetting())
1008 	{
1009 		if (!m_bCanSet) return FALSE;
1010 
1011 		bool bVP;
1012 		vp >> bVP;
1013 
1014 		if (m_bDelay)
1015 		{
1016 			AddDelay_Bool(FP_COMMITONSELCHANGE, bVP);
1017 		}
1018 		else
1019 		{
1020 			Field::SetCommitOnSelChange(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
1021 		}
1022 	}
1023 	else
1024 	{
1025 		CFX_PtrArray FieldArray;
1026 		GetFormFields(m_FieldName,FieldArray);
1027 		if (FieldArray.GetSize() <= 0) return FALSE;
1028 
1029 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1030 		ASSERT(pFormField != NULL);
1031 
1032 		if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX && pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
1033 			return FALSE;
1034 
1035 		if (pFormField->GetFieldFlags() & FIELDFLAG_COMMITONSELCHANGE)
1036 			vp << true;
1037 		else
1038 			vp << false;
1039 	}
1040 
1041 	return TRUE;
1042 }
1043 
SetCommitOnSelChange(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,bool b)1044 void Field::SetCommitOnSelChange(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
1045 {
1046 	//Not supported.
1047 }
1048 
currentValueIndices(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1049 FX_BOOL Field::currentValueIndices(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1050 {
1051 	ASSERT(m_pDocument != NULL);
1052 
1053 	if (vp.IsSetting())
1054 	{
1055 		if (!m_bCanSet) return FALSE;
1056 
1057 		CFX_DWordArray array;
1058 
1059 		if (vp.GetType() == VT_number)
1060 		{
1061 			int iSelecting = 0;
1062 			vp >> iSelecting;
1063 			array.Add(iSelecting);
1064 		}
1065 		else if (vp.IsArrayObject())
1066 		{
1067 			CJS_Array SelArray(m_isolate);
1068 			CJS_Value SelValue(m_isolate);
1069 			int iSelecting;
1070 			vp >> SelArray;
1071 			for (int i=0,sz=SelArray.GetLength(); i<sz; i++)
1072 			{
1073 				SelArray.GetElement(i,SelValue);
1074 				iSelecting = SelValue.ToInt();
1075 				array.Add(iSelecting);
1076 			}
1077 		}
1078 
1079 		if (m_bDelay)
1080 		{
1081 			AddDelay_WordArray(FP_CURRENTVALUEINDICES, array);
1082 		}
1083 		else
1084 		{
1085 			Field::SetCurrentValueIndices(m_pDocument, m_FieldName, m_nFormControlIndex, array);
1086 		}
1087 	}
1088 	else
1089 	{
1090 		CFX_PtrArray FieldArray;
1091 		GetFormFields(m_FieldName,FieldArray);
1092 		if (FieldArray.GetSize() <= 0) return FALSE;
1093 
1094 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1095 		ASSERT(pFormField != NULL);
1096 
1097 		if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX && pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
1098 			return FALSE;
1099 
1100 		if (pFormField->CountSelectedItems() == 1)
1101 			vp << pFormField->GetSelectedIndex(0);
1102 		else if (pFormField->CountSelectedItems() > 1)
1103 		{
1104 			CJS_Array SelArray(m_isolate);
1105 			for (int i=0,sz=pFormField->CountSelectedItems(); i<sz; i++)
1106 			{
1107 				SelArray.SetElement(i, CJS_Value(m_isolate,pFormField->GetSelectedIndex(i)));
1108 			}
1109 			vp << SelArray;
1110 		}
1111 		else
1112 			vp << -1;
1113 	}
1114 
1115 	return TRUE;
1116 }
1117 
SetCurrentValueIndices(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,const CFX_DWordArray & array)1118 void Field::SetCurrentValueIndices(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex,
1119 								   const CFX_DWordArray& array)
1120 {
1121 	ASSERT(pDocument != NULL);
1122 
1123 	CFX_PtrArray FieldArray;
1124 	GetFormFields(pDocument, swFieldName, FieldArray);
1125 
1126 	for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
1127 	{
1128 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
1129 		ASSERT(pFormField != NULL);
1130 
1131 		int nFieldType = pFormField->GetFieldType();
1132 		if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_LISTBOX)
1133 		{
1134 			FX_DWORD dwFieldFlags = pFormField->GetFieldFlags();
1135 			pFormField->ClearSelection(TRUE);
1136 
1137 			for (int i=0,sz=array.GetSize(); i<sz; i++)
1138 			{
1139 				if (i>0 && !(dwFieldFlags & (1<<21)))
1140 				{
1141 					break;
1142 				}
1143 
1144 				int iSelecting = (FX_INT32)array.GetAt(i);
1145 				if (iSelecting < pFormField->CountOptions() && !pFormField->IsItemSelected(iSelecting))
1146 					pFormField->SetItemSelection(iSelecting, TRUE);
1147 
1148 			}
1149 			UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
1150 		}
1151 	}
1152 }
1153 
defaultStyle(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1154 FX_BOOL Field::defaultStyle(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1155 {
1156 	// MQG sError = JSGetStringFromID(IDS_STRING_NOTSUPPORT);
1157 	return FALSE;
1158 
1159 	if (vp.IsSetting())
1160 	{
1161 		if (!m_bCanSet) return FALSE;
1162 
1163 		;
1164 	}
1165 	else
1166 	{
1167 		;
1168 	}
1169 	return TRUE;
1170 }
1171 
SetDefaultStyle(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex)1172 void Field::SetDefaultStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex)
1173 {
1174 	//Not supported.
1175 }
1176 
defaultValue(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1177 FX_BOOL Field::defaultValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1178 {
1179 	ASSERT(m_pDocument != NULL);
1180 
1181 	if (vp.IsSetting())
1182 	{
1183 		if (!m_bCanSet) return FALSE;
1184 
1185 		CFX_WideString WideStr;
1186 		vp >> WideStr;
1187 
1188 		if (m_bDelay)
1189 		{
1190 			AddDelay_WideString(FP_DEFAULTVALUE, WideStr);
1191 		}
1192 		else
1193 		{
1194 			Field::SetDefaultValue(m_pDocument, m_FieldName, m_nFormControlIndex, WideStr);
1195 		}
1196 	}
1197 	else
1198 	{
1199 		CFX_PtrArray FieldArray;
1200 		GetFormFields(m_FieldName,FieldArray);
1201 		if (FieldArray.GetSize() <= 0) return FALSE;
1202 
1203 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1204 		ASSERT(pFormField != NULL);
1205 
1206 		if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON ||
1207 			pFormField->GetFieldType() == FIELDTYPE_SIGNATURE)
1208 			return FALSE;
1209 
1210 		vp << pFormField->GetDefaultValue();
1211 	}
1212 	return TRUE;
1213 }
1214 
SetDefaultValue(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,const CFX_WideString & string)1215 void Field::SetDefaultValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex,
1216 							const CFX_WideString& string)
1217 {
1218 	//Not supported.
1219 }
1220 
doNotScroll(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1221 FX_BOOL Field::doNotScroll(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1222 {
1223 	ASSERT(m_pDocument != NULL);
1224 
1225 	if (vp.IsSetting())
1226 	{
1227 		if (!m_bCanSet) return FALSE;
1228 
1229 		bool bVP;
1230 		vp >> bVP;
1231 
1232 		if (m_bDelay)
1233 		{
1234 			AddDelay_Bool(FP_DONOTSCROLL, bVP);
1235 		}
1236 		else
1237 		{
1238 			Field::SetDoNotScroll(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
1239 		}
1240 	}
1241 	else
1242 	{
1243 		CFX_PtrArray FieldArray;
1244 		GetFormFields(m_FieldName,FieldArray);
1245 		if (FieldArray.GetSize() <= 0) return FALSE;
1246 
1247 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1248 		ASSERT(pFormField != NULL);
1249 
1250 		if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
1251 			return FALSE;
1252 
1253 		if (pFormField->GetFieldFlags() & FIELDFLAG_DONOTSCROLL)
1254 			vp << true;
1255 		else
1256 			vp << false;
1257 	}
1258 
1259 	return TRUE;
1260 }
1261 
SetDoNotScroll(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,bool b)1262 void Field::SetDoNotScroll(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
1263 {
1264 	//Not supported.
1265 }
1266 
doNotSpellCheck(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1267 FX_BOOL Field::doNotSpellCheck(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1268 {
1269 	ASSERT(m_pDocument != NULL);
1270 
1271 	if (vp.IsSetting())
1272 	{
1273 		if (!m_bCanSet) return FALSE;
1274 
1275 		bool bVP;
1276 		vp >> bVP;
1277 	}
1278 	else
1279 	{
1280 		CFX_PtrArray FieldArray;
1281 		GetFormFields(m_FieldName,FieldArray);
1282 		if (FieldArray.GetSize() <= 0) return FALSE;
1283 
1284 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1285 		ASSERT(pFormField != NULL);
1286 
1287 		if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD &&
1288 			pFormField->GetFieldType() != FIELDTYPE_COMBOBOX)
1289 			return FALSE;
1290 
1291 		if (pFormField->GetFieldFlags() & FIELDFLAG_DONOTSPELLCHECK)
1292 			vp << true;
1293 		else
1294 			vp << false;
1295 	}
1296 
1297 	return TRUE;
1298 }
1299 
SetDelay(FX_BOOL bDelay)1300 void Field::SetDelay(FX_BOOL bDelay)
1301 {
1302 	m_bDelay = bDelay;
1303 
1304 	if (!m_bDelay)
1305 	{
1306 		if (m_pJSDoc)
1307 			m_pJSDoc->DoFieldDelay(m_FieldName, m_nFormControlIndex);
1308 	}
1309 }
1310 
delay(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1311 FX_BOOL Field::delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1312 {
1313 	if (vp.IsSetting())
1314 	{
1315 		if (!m_bCanSet) return FALSE;
1316 
1317 		bool bVP;
1318 		vp >> bVP;
1319 
1320 		SetDelay(bVP);
1321 	}
1322 	else
1323 	{
1324 		vp << m_bDelay;
1325 	}
1326 	return TRUE;
1327 }
1328 
display(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1329 FX_BOOL Field::display(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1330 {
1331 	ASSERT(m_pDocument != NULL);
1332 
1333 	if (vp.IsSetting())
1334 	{
1335 		if (!m_bCanSet) return FALSE;
1336 
1337 		int nVP;
1338 		vp >> nVP;
1339 
1340 		if (m_bDelay)
1341 		{
1342 			AddDelay_Int(FP_DISPLAY, nVP);
1343 		}
1344 		else
1345 		{
1346 			Field::SetDisplay(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
1347 		}
1348 	}
1349 	else
1350 	{
1351 		CFX_PtrArray FieldArray;
1352 		GetFormFields(m_FieldName,FieldArray);
1353 		if (FieldArray.GetSize() <= 0) return FALSE;
1354 
1355 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1356 		ASSERT(pFormField != NULL);
1357 
1358 		CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
1359 		ASSERT(pInterForm != NULL);
1360 
1361 		CPDFSDK_Widget* pWidget = pInterForm->GetWidget(GetSmartFieldControl(pFormField));
1362 		if (!pWidget)return FALSE;
1363 
1364 		FX_DWORD dwFlag = pWidget->GetFlags();
1365 
1366 		if (ANNOTFLAG_INVISIBLE & dwFlag || ANNOTFLAG_HIDDEN & dwFlag)
1367 		{
1368 			vp << (FX_INT32)1;
1369 		}
1370 		else
1371 		{
1372 			if (ANNOTFLAG_PRINT & dwFlag)
1373 			{
1374 				if (ANNOTFLAG_NOVIEW & dwFlag)
1375 				{
1376 					vp << (FX_INT32)3;
1377 				}
1378 				else
1379 				{
1380 					vp << (FX_INT32)0;
1381 				}
1382 			}
1383 			else
1384 			{
1385 				vp << (FX_INT32)2;
1386 			}
1387 		}
1388 	}
1389 
1390 	return TRUE;
1391 }
1392 
SetDisplay(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,int number)1393 void Field::SetDisplay(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
1394 {
1395 	ASSERT(pDocument != NULL);
1396 
1397 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
1398 	ASSERT(pInterForm != NULL);
1399 
1400 	CFX_PtrArray FieldArray;
1401 	GetFormFields(pDocument, swFieldName, FieldArray);
1402 
1403 	for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
1404 	{
1405 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
1406 		ASSERT(pFormField != NULL);
1407 
1408 		if (nControlIndex < 0)
1409 		{
1410 			FX_BOOL bSet = FALSE;
1411 			for (int j=0,jsz = pFormField->CountControls(); j<jsz; j++)
1412 			{
1413 				CPDF_FormControl* pFormControl = pFormField->GetControl(j);
1414 				ASSERT(pFormControl != NULL);
1415 
1416 				if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
1417 				{
1418 					FX_DWORD dwFlag = pWidget->GetFlags();
1419 					switch (number)
1420 					{
1421 					case 0:
1422 						dwFlag &= (~ANNOTFLAG_INVISIBLE);
1423 						dwFlag &= (~ANNOTFLAG_HIDDEN);
1424 						dwFlag &= (~ANNOTFLAG_NOVIEW);
1425 						dwFlag |= ANNOTFLAG_PRINT;
1426 						break;
1427 					case 1:
1428 						dwFlag &= (~ANNOTFLAG_INVISIBLE);
1429 						dwFlag &= (~ANNOTFLAG_NOVIEW);
1430 						dwFlag |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
1431 						break;
1432 					case 2:
1433 						dwFlag &= (~ANNOTFLAG_INVISIBLE);
1434 						dwFlag &= (~ANNOTFLAG_PRINT);
1435 						dwFlag &= (~ANNOTFLAG_HIDDEN);
1436 						dwFlag &= (~ANNOTFLAG_NOVIEW);
1437 						break;
1438 					case 3:
1439 						dwFlag |= ANNOTFLAG_NOVIEW;
1440 						dwFlag |= ANNOTFLAG_PRINT;
1441 						dwFlag &= (~ANNOTFLAG_HIDDEN);
1442 						break;
1443 					}
1444 
1445 					if (dwFlag != pWidget->GetFlags())
1446 					{
1447 						pWidget->SetFlags(dwFlag);
1448 						bSet = TRUE;
1449 					}
1450 				}
1451 			}
1452 
1453 			if (bSet) UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
1454 		}
1455 		else
1456 		{
1457 			if(nControlIndex >= pFormField->CountControls()) return;
1458 			if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex))
1459 			{
1460 				if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
1461 				{
1462 
1463 					FX_DWORD dwFlag = pWidget->GetFlags();
1464 					switch (number)
1465 					{
1466 					case 0:
1467 						dwFlag &= (~ANNOTFLAG_INVISIBLE);
1468 						dwFlag &= (~ANNOTFLAG_HIDDEN);
1469 						dwFlag &= (~ANNOTFLAG_NOVIEW);
1470 						dwFlag |= ANNOTFLAG_PRINT;
1471 						break;
1472 					case 1:
1473 						dwFlag &= (~ANNOTFLAG_INVISIBLE);
1474 						dwFlag &= (~ANNOTFLAG_NOVIEW);
1475 						dwFlag |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
1476 						break;
1477 					case 2:
1478 						dwFlag &= (~ANNOTFLAG_INVISIBLE);
1479 						dwFlag &= (~ANNOTFLAG_PRINT);
1480 						dwFlag &= (~ANNOTFLAG_HIDDEN);
1481 						dwFlag &= (~ANNOTFLAG_NOVIEW);
1482 						break;
1483 					case 3:
1484 						dwFlag |= ANNOTFLAG_NOVIEW;
1485 						dwFlag |= ANNOTFLAG_PRINT;
1486 						dwFlag &= (~ANNOTFLAG_HIDDEN);
1487 						break;
1488 					}
1489 					if (dwFlag != pWidget->GetFlags())
1490 					{
1491 						pWidget->SetFlags(dwFlag);
1492 						UpdateFormControl(pDocument, pFormControl, TRUE, FALSE, TRUE);
1493 					}
1494 				}
1495 			}
1496 		}
1497 	}
1498 }
1499 
doc(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1500 FX_BOOL Field::doc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1501 {
1502 	if (!vp.IsGetting()) {
1503 		return FALSE;
1504 	}
1505 	vp << m_pJSDoc->GetCJSDoc();
1506 	return TRUE;
1507 }
1508 
editable(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1509 FX_BOOL Field::editable(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1510 {
1511 	ASSERT(m_pDocument != NULL);
1512 	if (vp.IsSetting())
1513 	{
1514 		if (!m_bCanSet) return FALSE;
1515 
1516 		bool bVP;
1517 		vp >> bVP;
1518 	}
1519 	else
1520 	{
1521 		CFX_PtrArray FieldArray;
1522 		GetFormFields(m_FieldName, FieldArray);
1523 		if (FieldArray.GetSize() <= 0) return FALSE;
1524 
1525 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1526 		ASSERT(pFormField != NULL);
1527 
1528 		if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX)
1529 			return FALSE;
1530 
1531 		if (pFormField->GetFieldFlags() & FIELDFLAG_EDIT)
1532 			vp << true;
1533 		else
1534 			vp << false;
1535 	}
1536 
1537 	return TRUE;
1538 }
1539 
exportValues(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1540 FX_BOOL Field::exportValues(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1541 {
1542 	ASSERT(m_pDocument != NULL);
1543 
1544 	CFX_PtrArray FieldArray;
1545 	GetFormFields(m_FieldName,FieldArray);
1546 	if (FieldArray.GetSize() <= 0) return FALSE;
1547 
1548 	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1549 	ASSERT(pFormField != NULL);
1550 
1551 	if (pFormField->GetFieldType() != FIELDTYPE_CHECKBOX &&
1552 		pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON)
1553 		return FALSE;
1554 
1555 	if (vp.IsSetting())
1556 	{
1557 		if (!m_bCanSet) return FALSE;
1558 		if (!vp.IsArrayObject())return FALSE;
1559 	}
1560 	else
1561 	{
1562 		CJS_Array ExportValusArray(m_isolate);
1563 
1564 		if (m_nFormControlIndex < 0)
1565 		{
1566 			for (int i=0,sz=pFormField->CountControls(); i<sz; i++)
1567 			{
1568 				CPDF_FormControl* pFormControl = pFormField->GetControl(i);
1569 				ASSERT(pFormControl != NULL);
1570 
1571 				ExportValusArray.SetElement(i, CJS_Value(m_isolate,pFormControl->GetExportValue().c_str()));
1572 			}
1573 		}
1574 		else
1575 		{
1576 			if(m_nFormControlIndex >= pFormField->CountControls()) return FALSE;
1577 			CPDF_FormControl* pFormControl = pFormField->GetControl(m_nFormControlIndex);
1578 			if (!pFormControl) return FALSE;
1579 
1580 			ExportValusArray.SetElement(0, CJS_Value(m_isolate,pFormControl->GetExportValue().c_str()));
1581 		}
1582 
1583 		vp << ExportValusArray;
1584 	}
1585 
1586 	return TRUE;
1587 }
1588 
fileSelect(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1589 FX_BOOL Field::fileSelect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1590 {
1591 	ASSERT(m_pDocument != NULL);
1592 
1593 	CFX_PtrArray FieldArray;
1594 	GetFormFields(m_FieldName, FieldArray);
1595 	if (FieldArray.GetSize() <= 0) return FALSE;
1596 
1597 	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1598 	ASSERT(pFormField != NULL);
1599 
1600 	if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
1601 		return FALSE;
1602 
1603 	if (vp.IsSetting())
1604 	{
1605 		if (!m_bCanSet) return FALSE;
1606 
1607 		bool bVP;
1608 		vp >> bVP;
1609 
1610 	}
1611 	else
1612 	{
1613 		if (pFormField->GetFieldFlags() & FIELDFLAG_FILESELECT)
1614 			vp << true;
1615 		else
1616 			vp << false;
1617 	}
1618 
1619 	return TRUE;
1620 }
1621 
fillColor(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1622 FX_BOOL Field::fillColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1623 {
1624 	ASSERT(m_pDocument != NULL);
1625 
1626 	CJS_Array crArray(m_isolate);
1627 
1628 	CFX_PtrArray FieldArray;
1629 	GetFormFields(m_FieldName,FieldArray);
1630 	if (FieldArray.GetSize() <= 0) return FALSE;
1631 
1632 	if (vp.IsSetting())
1633 	{
1634 		if (!m_bCanSet) return FALSE;
1635 		if (!vp.IsArrayObject()) return FALSE;
1636 
1637 		vp >> crArray;
1638 
1639 		CPWL_Color color;
1640 		color::ConvertArrayToPWLColor(crArray, color);
1641 
1642 		if (m_bDelay)
1643 		{
1644 			AddDelay_Color(FP_FILLCOLOR, color);
1645 		}
1646 		else
1647 		{
1648 			Field::SetFillColor(m_pDocument, m_FieldName, m_nFormControlIndex, color);
1649 		}
1650 	}
1651 	else
1652 	{
1653 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1654 		ASSERT(pFormField != NULL);
1655 
1656 		CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
1657 		if (!pFormControl)return FALSE;
1658 
1659 		int iColorType;
1660 		pFormControl->GetBackgroundColor(iColorType);
1661 
1662 		CPWL_Color color;
1663 
1664 		if (iColorType == COLORTYPE_TRANSPARENT)
1665 		{
1666 			color = CPWL_Color(COLORTYPE_TRANSPARENT);
1667 		}
1668 		else if (iColorType == COLORTYPE_GRAY)
1669 		{
1670 			color = CPWL_Color(COLORTYPE_GRAY, pFormControl->GetOriginalBackgroundColor(0));
1671 		}
1672 		else if (iColorType == COLORTYPE_RGB)
1673 		{
1674 			color = CPWL_Color(COLORTYPE_RGB, pFormControl->GetOriginalBackgroundColor(0),
1675 				pFormControl->GetOriginalBackgroundColor(1),
1676 				pFormControl->GetOriginalBackgroundColor(2));
1677 		}
1678 		else if (iColorType == COLORTYPE_CMYK)
1679 		{
1680 			color = CPWL_Color(COLORTYPE_CMYK, pFormControl->GetOriginalBackgroundColor(0),
1681 				pFormControl->GetOriginalBackgroundColor(1),
1682 				pFormControl->GetOriginalBackgroundColor(2),
1683 				pFormControl->GetOriginalBackgroundColor(3));
1684 		}
1685 		else
1686 			return FALSE;
1687 
1688 		color::ConvertPWLColorToArray(color, crArray);
1689         vp  <<  crArray;
1690 	}
1691 
1692 	return TRUE;
1693 }
1694 
SetFillColor(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,const CPWL_Color & color)1695 void Field::SetFillColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color)
1696 {
1697 	//Not supported.
1698 }
1699 
hidden(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1700 FX_BOOL Field::hidden(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1701 {
1702 	ASSERT(m_pDocument != NULL);
1703 
1704 	if (vp.IsSetting())
1705 	{
1706 		if (!m_bCanSet) return FALSE;
1707 
1708 		bool bVP;
1709 		vp >> bVP;
1710 
1711 		if (m_bDelay)
1712 		{
1713 			AddDelay_Bool(FP_HIDDEN, bVP);
1714 		}
1715 		else
1716 		{
1717 			Field::SetHidden(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
1718 		}
1719 	}
1720 	else
1721 	{
1722 		CFX_PtrArray FieldArray;
1723 		GetFormFields(m_FieldName,FieldArray);
1724 		if (FieldArray.GetSize() <= 0) return FALSE;
1725 
1726 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1727 		ASSERT(pFormField != NULL);
1728 
1729 		CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
1730 		ASSERT(pInterForm != NULL);
1731 
1732 		CPDFSDK_Widget* pWidget = pInterForm->GetWidget(GetSmartFieldControl(pFormField));
1733 		if (!pWidget) return FALSE;
1734 
1735 		FX_DWORD dwFlags = pWidget->GetFlags();
1736 
1737 		if (ANNOTFLAG_INVISIBLE & dwFlags || ANNOTFLAG_HIDDEN & dwFlags)
1738 		{
1739 			vp << true;
1740 		}
1741 		else
1742 			vp << false;
1743 	}
1744 
1745 	return TRUE;
1746 }
1747 
SetHidden(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,bool b)1748 void Field::SetHidden(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
1749 {
1750 	ASSERT(pDocument != NULL);
1751 
1752 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
1753 	ASSERT(pInterForm != NULL);
1754 
1755 	CFX_PtrArray FieldArray;
1756 	GetFormFields(pDocument, swFieldName, FieldArray);
1757 
1758 	for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
1759 	{
1760 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
1761 		ASSERT(pFormField != NULL);
1762 
1763 		if (nControlIndex < 0)
1764 		{
1765 			FX_BOOL bSet = FALSE;
1766 			for (int j=0,jsz = pFormField->CountControls(); j<jsz; j++)
1767 			{
1768 				if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormField->GetControl(j)))
1769 				{
1770 					FX_DWORD dwFlags = pWidget->GetFlags();
1771 
1772 					if (b)
1773 					{
1774 						dwFlags &= (~ANNOTFLAG_INVISIBLE);
1775 						dwFlags &= (~ANNOTFLAG_NOVIEW);
1776 						dwFlags |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
1777 					}
1778 					else
1779 					{
1780 						dwFlags &= (~ANNOTFLAG_INVISIBLE);
1781 						dwFlags &= (~ANNOTFLAG_HIDDEN);
1782 						dwFlags &= (~ANNOTFLAG_NOVIEW);
1783 						dwFlags |= ANNOTFLAG_PRINT;
1784 					}
1785 
1786 					if (dwFlags != pWidget->GetFlags())
1787 					{
1788 						pWidget->SetFlags(dwFlags);
1789 						bSet = TRUE;
1790 					}
1791 				}
1792 			}
1793 
1794 			if (bSet)
1795 				UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
1796 		}
1797 		else
1798 		{
1799 			if(nControlIndex >= pFormField->CountControls()) return;
1800 			if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex))
1801 			{
1802 				if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
1803 				{
1804 					FX_DWORD dwFlags = pWidget->GetFlags();
1805 
1806 					if (b)
1807 					{
1808 						dwFlags &= (~ANNOTFLAG_INVISIBLE);
1809 						dwFlags &= (~ANNOTFLAG_NOVIEW);
1810 						dwFlags |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
1811 					}
1812 					else
1813 					{
1814 						dwFlags &= (~ANNOTFLAG_INVISIBLE);
1815 						dwFlags &= (~ANNOTFLAG_HIDDEN);
1816 						dwFlags &= (~ANNOTFLAG_NOVIEW);
1817 						dwFlags |= ANNOTFLAG_PRINT;
1818 					}
1819 
1820 					if (dwFlags != pWidget->GetFlags())
1821 					{
1822 						pWidget->SetFlags(dwFlags);
1823 						UpdateFormControl(pDocument, pFormControl, TRUE, FALSE, TRUE);
1824 					}
1825 				}
1826 			}
1827 		}
1828 	}
1829 }
1830 
highlight(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1831 FX_BOOL Field::highlight(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1832 {
1833 	ASSERT(m_pDocument != NULL);
1834 
1835 	if (vp.IsSetting())
1836 	{
1837 		if (!m_bCanSet) return FALSE;
1838 
1839 		CFX_ByteString strMode;
1840 		vp >> strMode;
1841 
1842 		if (m_bDelay)
1843 		{
1844 			AddDelay_String(FP_HIGHLIGHT, strMode);
1845 		}
1846 		else
1847 		{
1848 			Field::SetHighlight(m_pDocument, m_FieldName, m_nFormControlIndex, strMode);
1849 		}
1850 	}
1851 	else
1852 	{
1853 		CFX_PtrArray FieldArray;
1854 		GetFormFields(m_FieldName,FieldArray);
1855 		if (FieldArray.GetSize() <= 0) return FALSE;
1856 
1857 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1858 		ASSERT(pFormField != NULL);
1859 
1860 		if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
1861 			return FALSE;
1862 
1863 		CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
1864 		if (!pFormControl) return FALSE;
1865 
1866 		int eHM = pFormControl->GetHighlightingMode();
1867 		switch (eHM)
1868 		{
1869 		case CPDF_FormControl::None:
1870 			vp  <<  L"none";
1871 			break;
1872 		case CPDF_FormControl::Push:
1873 			vp  <<  L"push";
1874 			break;
1875 		case CPDF_FormControl::Invert:
1876 			vp  <<  L"invert";
1877 			break;
1878 		case CPDF_FormControl::Outline:
1879 			vp  <<  L"outline";
1880 			break;
1881 		case CPDF_FormControl::Toggle:
1882 			 vp  <<  L"toggle";
1883 			 break;
1884 		}
1885 	}
1886 
1887 	return TRUE;
1888 }
1889 
SetHighlight(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,const CFX_ByteString & string)1890 void Field::SetHighlight(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string)
1891 {
1892 	//Not supported.
1893 }
1894 
lineWidth(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1895 FX_BOOL Field::lineWidth(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1896 {
1897 	ASSERT(m_pDocument != NULL);
1898 
1899 	if (vp.IsSetting())
1900 	{
1901 		if (!m_bCanSet) return FALSE;
1902 
1903 		int iWidth;
1904 		vp >> iWidth;
1905 
1906 		if (m_bDelay)
1907 		{
1908 			AddDelay_Int(FP_LINEWIDTH, iWidth);
1909 		}
1910 		else
1911 		{
1912 			Field::SetLineWidth(m_pDocument, m_FieldName, m_nFormControlIndex, iWidth);
1913 		}
1914 	}
1915 	else
1916 	{
1917 		CFX_PtrArray FieldArray;
1918 		GetFormFields(m_FieldName,FieldArray);
1919 		if (FieldArray.GetSize() <= 0) return FALSE;
1920 
1921 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1922 		ASSERT(pFormField != NULL);
1923 
1924 		CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
1925 		if (!pFormControl) return FALSE;
1926 
1927 		CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
1928 		ASSERT(pInterForm != NULL);
1929 
1930 		if(!pFormField->CountControls()) return FALSE;
1931 
1932 		CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormField->GetControl(0));
1933 		if (!pWidget) return FALSE;
1934 
1935 		vp << (FX_INT32)pWidget->GetBorderWidth();
1936 	}
1937 
1938 	return TRUE;
1939 }
1940 
SetLineWidth(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,int number)1941 void Field::SetLineWidth(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
1942 {
1943 	ASSERT(pDocument != NULL);
1944 
1945 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
1946 	ASSERT(pInterForm != NULL);
1947 
1948 	CFX_PtrArray FieldArray;
1949 	GetFormFields(pDocument, swFieldName, FieldArray);
1950 
1951 	for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
1952 	{
1953 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
1954 		ASSERT(pFormField != NULL);
1955 
1956 		if (nControlIndex < 0)
1957 		{
1958 			FX_BOOL bSet = FALSE;
1959 			for (int j=0,jsz=pFormField->CountControls(); j<jsz; j++)
1960 			{
1961 				CPDF_FormControl* pFormControl = pFormField->GetControl(j);
1962 				ASSERT(pFormControl != NULL);
1963 
1964 				if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
1965 				{
1966 					if (number != pWidget->GetBorderWidth())
1967 					{
1968 						pWidget->SetBorderWidth(number);
1969 						bSet = TRUE;
1970 					}
1971 				}
1972 			}
1973 			if (bSet) UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
1974 		}
1975 		else
1976 		{
1977 			if(nControlIndex >= pFormField->CountControls()) return;
1978 			if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex))
1979 			{
1980 				if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
1981 				{
1982 					if (number != pWidget->GetBorderWidth())
1983 					{
1984 						pWidget->SetBorderWidth(number);
1985 						UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE);
1986 					}
1987 				}
1988 			}
1989 		}
1990 	}
1991 }
1992 
multiline(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)1993 FX_BOOL Field::multiline(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1994 {
1995 	ASSERT(m_pDocument != NULL);
1996 
1997 	if (vp.IsSetting())
1998 	{
1999 		if (!m_bCanSet) return FALSE;
2000 
2001 		bool bVP;
2002 		vp >> bVP;
2003 
2004 		if (m_bDelay)
2005 		{
2006 			AddDelay_Bool(FP_MULTILINE, bVP);
2007 		}
2008 		else
2009 		{
2010 			Field::SetMultiline(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
2011 		}
2012 	}
2013 	else
2014 	{
2015 		CFX_PtrArray FieldArray;
2016 		GetFormFields(m_FieldName, FieldArray);
2017 		if (FieldArray.GetSize() <= 0) return FALSE;
2018 
2019 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2020 		ASSERT(pFormField != NULL);
2021 
2022 		if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
2023 			return FALSE;
2024 
2025 		if (pFormField->GetFieldFlags() & FIELDFLAG_MULTILINE)
2026 			vp << true;
2027 		else
2028 			vp << false;
2029 	}
2030 
2031 	return TRUE;
2032 }
2033 
SetMultiline(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,bool b)2034 void Field::SetMultiline(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
2035 {
2036 	//Not supported.
2037 }
2038 
multipleSelection(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2039 FX_BOOL Field::multipleSelection(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2040 {
2041 	ASSERT(m_pDocument != NULL);
2042 
2043 	if (vp.IsSetting())
2044 	{
2045 		if (!m_bCanSet) return FALSE;
2046 
2047 		bool bVP;
2048 		vp >> bVP;
2049 
2050 		if (m_bDelay)
2051 		{
2052 			AddDelay_Bool(FP_MULTIPLESELECTION, bVP);
2053 		}
2054 		else
2055 		{
2056 			Field::SetMultipleSelection(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
2057 		}
2058 	}
2059 	else
2060 	{
2061 		CFX_PtrArray FieldArray;
2062 		GetFormFields(m_FieldName,FieldArray);
2063 		if (FieldArray.GetSize() <= 0) return FALSE;
2064 
2065 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2066 		ASSERT(pFormField != NULL);
2067 
2068 		if (pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
2069 			return FALSE;
2070 
2071 		if (pFormField->GetFieldFlags() & FIELDFLAG_MULTISELECT)
2072 			vp << true;
2073 		else
2074 			vp << false;
2075 	}
2076 
2077 	return TRUE;
2078 }
2079 
SetMultipleSelection(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,bool b)2080 void Field::SetMultipleSelection(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
2081 {
2082 	//Not supported.
2083 }
2084 
name(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2085 FX_BOOL Field::name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2086 {
2087 	if (!vp.IsGetting()) return FALSE;
2088 
2089 	CFX_PtrArray FieldArray;
2090 	GetFormFields(m_FieldName, FieldArray);
2091 	if (FieldArray.GetSize() <= 0) return FALSE;
2092 
2093    	vp << m_FieldName;
2094 
2095 	return TRUE;
2096 }
2097 
numItems(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2098 FX_BOOL Field::numItems(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2099 {
2100 	CFX_PtrArray FieldArray;
2101 	GetFormFields(m_FieldName, FieldArray);
2102 	if (FieldArray.GetSize() <= 0) return FALSE;
2103 
2104 	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2105 	ASSERT(pFormField != NULL);
2106 
2107 	if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX &&
2108 		pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
2109 		return FALSE;
2110 
2111 	if (!vp.IsGetting()) return FALSE;
2112 
2113 	vp << (FX_INT32)pFormField->CountOptions();
2114 
2115 	return TRUE;
2116 }
2117 
page(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2118 FX_BOOL Field::page(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2119 {
2120 	if (!vp.IsGetting()) return FALSE;
2121 
2122 	CFX_PtrArray FieldArray;
2123 	GetFormFields(m_FieldName, FieldArray);
2124 	if (FieldArray.GetSize() <= 0) return FALSE;
2125 
2126 	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2127 	if (!pFormField) return FALSE;
2128 
2129 	ASSERT(m_pDocument != NULL);
2130 
2131 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
2132 	ASSERT(pInterForm != NULL);
2133 
2134 	CFX_PtrArray widgetArray;
2135 	pInterForm->GetWidgets(pFormField, widgetArray);
2136 
2137 	if (widgetArray.GetSize() > 0)
2138 	{
2139 		CJS_Array PageArray(m_isolate);
2140 
2141 		for (int i=0,sz=widgetArray.GetSize(); i<sz; i++)
2142 		{
2143 			CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgetArray.GetAt(i);
2144 			ASSERT(pWidget != NULL);
2145 
2146 			CPDFSDK_PageView* pPageView = pWidget->GetPageView();
2147 			if(!pPageView)
2148 				return FALSE;
2149 
2150 			PageArray.SetElement(i, CJS_Value(m_isolate,(FX_INT32)pPageView->GetPageIndex()));
2151 		}
2152 
2153 		vp << PageArray;
2154 	}
2155 	else
2156 	{
2157 		vp << (FX_INT32) -1;
2158 	}
2159 
2160 	return TRUE;
2161 }
2162 
password(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2163 FX_BOOL Field::password(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2164 {
2165 	ASSERT(m_pDocument != NULL);
2166 
2167 	if (vp.IsSetting())
2168 	{
2169 		if (!m_bCanSet) return FALSE;
2170 
2171 		bool bVP;
2172 		vp >> bVP;
2173 
2174 		if (m_bDelay)
2175 		{
2176 			AddDelay_Bool(FP_PASSWORD, bVP);
2177 		}
2178 		else
2179 		{
2180 			Field::SetPassword(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
2181 		}
2182 	}
2183 	else
2184 	{
2185 		CFX_PtrArray FieldArray;
2186 		GetFormFields(m_FieldName,FieldArray);
2187 		if (FieldArray.GetSize() <= 0) return FALSE;
2188 
2189 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2190 		ASSERT(pFormField != NULL);
2191 
2192 		if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
2193 			return FALSE;
2194 
2195 		if (pFormField->GetFieldFlags() & FIELDFLAG_PASSWORD)
2196 			vp << true;
2197 		else
2198 			vp << false;
2199 	}
2200 
2201 	return TRUE;
2202 }
2203 
SetPassword(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,bool b)2204 void Field::SetPassword(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
2205 {
2206 	//Not supported.
2207 }
2208 
print(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2209 FX_BOOL Field::print(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2210 {
2211 	ASSERT(m_pDocument != NULL);
2212 
2213 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
2214 	ASSERT(pInterForm != NULL);
2215 
2216 	CFX_PtrArray FieldArray;
2217 	GetFormFields(m_FieldName, FieldArray);
2218 	if (FieldArray.GetSize() <= 0) return FALSE;
2219 
2220 	if (vp.IsSetting())
2221 	{
2222 		if (!m_bCanSet) return FALSE;
2223 
2224 		bool bVP;
2225 		vp >> bVP;
2226 
2227 		for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
2228 		{
2229 			CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
2230 			ASSERT(pFormField != NULL);
2231 
2232 			if (m_nFormControlIndex < 0)
2233 			{
2234 				FX_BOOL bSet = FALSE;
2235 				for (int j=0,jsz = pFormField->CountControls(); j<jsz; j++)
2236 				{
2237 					if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormField->GetControl(j)))
2238 					{
2239 						FX_DWORD dwFlags = pWidget->GetFlags();
2240 						if (bVP)
2241 							dwFlags |= ANNOTFLAG_PRINT;
2242 						else
2243 							dwFlags &= ~ANNOTFLAG_PRINT;
2244 
2245 						if (dwFlags != pWidget->GetFlags())
2246 						{
2247 							pWidget->SetFlags(dwFlags);
2248 							bSet = TRUE;
2249 						}
2250 					}
2251 				}
2252 
2253 				if (bSet)
2254 					UpdateFormField(m_pDocument, pFormField, TRUE, FALSE, TRUE);
2255 			}
2256 			else
2257 			{
2258 				if(m_nFormControlIndex >= pFormField->CountControls()) return FALSE;
2259 				if (CPDF_FormControl* pFormControl = pFormField->GetControl(m_nFormControlIndex))
2260 				{
2261 					if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
2262 					{
2263 						FX_DWORD dwFlags = pWidget->GetFlags();
2264 						if (bVP)
2265 							dwFlags |= ANNOTFLAG_PRINT;
2266 						else
2267 							dwFlags &= ~ANNOTFLAG_PRINT;
2268 
2269 						if (dwFlags != pWidget->GetFlags())
2270 						{
2271 							pWidget->SetFlags(dwFlags);
2272 							UpdateFormControl(m_pDocument, pFormField->GetControl(m_nFormControlIndex), TRUE, FALSE, TRUE);
2273 						}
2274 					}
2275 				}
2276 			}
2277 		}
2278 	}
2279 	else
2280 	{
2281 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2282 		ASSERT(pFormField != NULL);
2283 
2284 		CPDFSDK_Widget* pWidget = pInterForm->GetWidget(GetSmartFieldControl(pFormField));
2285 		if (!pWidget) return FALSE;
2286 
2287 		if (pWidget->GetFlags() & ANNOTFLAG_PRINT)
2288 			vp << true;
2289 		else
2290 			vp << false;
2291 	}
2292 
2293 	return TRUE;
2294 }
2295 
radiosInUnison(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2296 FX_BOOL Field::radiosInUnison(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2297 {
2298 	ASSERT(m_pDocument != NULL);
2299 
2300 	CFX_PtrArray FieldArray;
2301 	GetFormFields(m_FieldName,FieldArray);
2302 	if (FieldArray.GetSize() <= 0) return FALSE;
2303 
2304 	if (vp.IsSetting())
2305 	{
2306 		if (!m_bCanSet) return FALSE;
2307 
2308 		bool bVP;
2309 		vp >> bVP;
2310 
2311 	}
2312 	else
2313 	{
2314 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2315 		ASSERT(pFormField != NULL);
2316 
2317 		if (pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON)
2318 			return FALSE;
2319 
2320 		if (pFormField->GetFieldFlags() & FIELDFLAG_RADIOSINUNISON)
2321 			vp << true;
2322 		else
2323 			vp << false;
2324 	}
2325 
2326 	return TRUE;
2327 }
2328 
readonly(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2329 FX_BOOL Field::readonly(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2330 {
2331 	ASSERT(m_pDocument != NULL);
2332 
2333 	CFX_PtrArray FieldArray;
2334 	GetFormFields(m_FieldName,FieldArray);
2335 	if (FieldArray.GetSize() <= 0) return FALSE;
2336 
2337 	if (vp.IsSetting())
2338 	{
2339 		if (!m_bCanSet) return FALSE;
2340 
2341 		bool bVP;
2342 		vp >> bVP;
2343 
2344 	}
2345 	else
2346 	{
2347 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2348 		ASSERT(pFormField != NULL);
2349 
2350 		if (pFormField->GetFieldFlags() & FIELDFLAG_READONLY)
2351 			vp << true;
2352 		else
2353 			vp << false;
2354 	}
2355 
2356 	return TRUE;
2357 }
2358 
rect(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2359 FX_BOOL Field::rect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2360 {
2361 	ASSERT(m_pDocument != NULL);
2362 
2363 	if (vp.IsSetting())
2364 	{
2365 		if (!m_bCanSet) return FALSE;
2366 		if (!vp.IsArrayObject())return FALSE;
2367 
2368 		CJS_Array rcArray(m_isolate);
2369 		vp >> rcArray;
2370 		CJS_Value Upper_Leftx(m_isolate), Upper_Lefty(m_isolate), Lower_Rightx(m_isolate), Lower_Righty(m_isolate);
2371 		rcArray.GetElement(0, Upper_Leftx);
2372 		rcArray.GetElement(1, Upper_Lefty);
2373 		rcArray.GetElement(2, Lower_Rightx);
2374 		rcArray.GetElement(3, Lower_Righty);
2375 
2376 		FX_FLOAT pArray[4] = {0.0f,0.0f,0.0f,0.0f};
2377 		pArray[0] = (FX_FLOAT)Upper_Leftx.ToInt();
2378 		pArray[1] = (FX_FLOAT)Lower_Righty.ToInt();
2379 		pArray[2] = (FX_FLOAT)Lower_Rightx.ToInt();
2380 		pArray[3] = (FX_FLOAT)Upper_Lefty.ToInt();
2381 
2382 		CPDF_Rect crRect(pArray);
2383 
2384 		if (m_bDelay)
2385 		{
2386 			AddDelay_Rect(FP_RECT, crRect);
2387 		}
2388 		else
2389 		{
2390 			Field::SetRect(m_pDocument, m_FieldName, m_nFormControlIndex, crRect);
2391 		}
2392 	}
2393 	else
2394 	{
2395 		CFX_PtrArray FieldArray;
2396 		GetFormFields(m_FieldName,FieldArray);
2397 		if (FieldArray.GetSize() <= 0) return FALSE;
2398 
2399 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2400 		ASSERT(pFormField != NULL);
2401 
2402 		CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
2403 		ASSERT(pInterForm != NULL);
2404 
2405 		CPDFSDK_Widget* pWidget = pInterForm->GetWidget(GetSmartFieldControl(pFormField));
2406 		if (!pWidget) return FALSE;
2407 
2408 		CFX_FloatRect crRect = pWidget->GetRect();
2409 		CJS_Value Upper_Leftx(m_isolate),Upper_Lefty(m_isolate),Lower_Rightx(m_isolate),Lower_Righty(m_isolate);
2410 		Upper_Leftx = (FX_INT32)crRect.left;
2411 		Upper_Lefty = (FX_INT32)crRect.top;
2412 		Lower_Rightx = (FX_INT32)crRect.right;
2413 		Lower_Righty = (FX_INT32)crRect.bottom;
2414 
2415 		CJS_Array rcArray(m_isolate);
2416 		rcArray.SetElement(0,Upper_Leftx);
2417 		rcArray.SetElement(1,Upper_Lefty);
2418 		rcArray.SetElement(2,Lower_Rightx);
2419 		rcArray.SetElement(3,Lower_Righty);
2420 
2421 		vp  <<  rcArray;
2422 	}
2423 
2424 	return TRUE;
2425 }
2426 
SetRect(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,const CPDF_Rect & rect)2427 void Field::SetRect(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPDF_Rect& rect)
2428 {
2429 	ASSERT(pDocument != NULL);
2430 
2431 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
2432 	ASSERT(pInterForm != NULL);
2433 
2434 	CFX_PtrArray FieldArray;
2435 	GetFormFields(pDocument, swFieldName, FieldArray);
2436 
2437 	for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
2438 	{
2439 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
2440 		ASSERT(pFormField != NULL);
2441 
2442 		if (nControlIndex < 0)
2443 		{
2444 			FX_BOOL bSet = FALSE;
2445 			for (int i=0, sz=pFormField->CountControls(); i<sz; i++)
2446 			{
2447 				CPDF_FormControl* pFormControl = pFormField->GetControl(i);
2448 				ASSERT(pFormControl != NULL);
2449 
2450 				if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
2451 				{
2452 					CPDF_Rect crRect = rect;
2453 
2454 					CPDF_Page* pPDFPage = pWidget->GetPDFPage();
2455 					ASSERT(pPDFPage != NULL);
2456 
2457 // 					CPDF_Page* pPDFPage = pPage->GetPage();
2458 // 					ASSERT(pPDFPage != NULL);
2459 
2460 					crRect.Intersect(pPDFPage->GetPageBBox());
2461 
2462 					if (!crRect.IsEmpty())
2463 					{
2464 						CPDF_Rect rcOld = pWidget->GetRect();
2465 						if (crRect.left != rcOld.left ||
2466 							crRect.right != rcOld.right ||
2467 							crRect.top != rcOld.top ||
2468 							crRect.bottom != rcOld.bottom)
2469 						{
2470 							pWidget->SetRect(crRect);
2471 							bSet = TRUE;
2472 						}
2473 					}
2474 				}
2475 			}
2476 
2477 			if (bSet) UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
2478 		}
2479 		else
2480 		{
2481 			if(nControlIndex >= pFormField->CountControls()) return;
2482 			if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex))
2483 			{
2484 				if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
2485 				{
2486 					CPDF_Rect crRect = rect;
2487 
2488 					CPDF_Page* pPDFPage = pWidget->GetPDFPage();
2489 					ASSERT(pPDFPage != NULL);
2490 
2491 // 					CPDF_Page* pPDFPage = pPage->GetPage();
2492 // 					ASSERT(pPDFPage != NULL);
2493 
2494 					crRect.Intersect(pPDFPage->GetPageBBox());
2495 
2496 					if (!crRect.IsEmpty())
2497 					{
2498 						CPDF_Rect rcOld = pWidget->GetRect();
2499 						if (crRect.left != rcOld.left ||
2500 							crRect.right != rcOld.right ||
2501 							crRect.top != rcOld.top ||
2502 							crRect.bottom != rcOld.bottom)
2503 						{
2504 							pWidget->SetRect(crRect);
2505 							UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE);
2506 						}
2507 					}
2508 				}
2509 			}
2510 		}
2511 	}
2512 }
2513 
required(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2514 FX_BOOL Field::required(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2515 {
2516 	ASSERT(m_pDocument != NULL);
2517 
2518 	CFX_PtrArray FieldArray;
2519 	GetFormFields(m_FieldName,FieldArray);
2520 	if (FieldArray.GetSize() <= 0) return FALSE;
2521 
2522 	if (vp.IsSetting())
2523 	{
2524 		if (!m_bCanSet) return FALSE;
2525 
2526 
2527 		bool bVP;
2528 		vp >> bVP;
2529 
2530 	}
2531 	else
2532 	{
2533 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2534 		ASSERT(pFormField != NULL);
2535 
2536 		if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON)
2537 			return FALSE;
2538 
2539 		if (pFormField->GetFieldFlags() & FIELDFLAG_REQUIRED)
2540 			vp << true;
2541 		else
2542 			vp << false;
2543 	}
2544 
2545 	return TRUE;
2546 }
2547 
richText(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2548 FX_BOOL Field::richText(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2549 {
2550 	ASSERT(m_pDocument != NULL);
2551 
2552 	if (vp.IsSetting())
2553 	{
2554 		if (!m_bCanSet) return FALSE;
2555 
2556 		bool bVP;
2557 		vp >> bVP;
2558 
2559 		if (m_bDelay)
2560 		{
2561 			AddDelay_Bool(FP_RICHTEXT, bVP);
2562 		}
2563 		else
2564 		{
2565 			Field::SetRichText(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
2566 		}
2567 	}
2568 	else
2569 	{
2570 		CFX_PtrArray FieldArray;
2571 		GetFormFields(m_FieldName,FieldArray);
2572 		if (FieldArray.GetSize() <= 0) return FALSE;
2573 
2574 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2575 		ASSERT(pFormField != NULL);
2576 
2577 		if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
2578 			return FALSE;
2579 
2580 		if (pFormField->GetFieldFlags() & FIELDFLAG_RICHTEXT)
2581 			vp << true;
2582 		else
2583 			vp << false;
2584 	}
2585 
2586 	return TRUE;
2587 }
2588 
SetRichText(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,bool b)2589 void Field::SetRichText(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
2590 {
2591 	//Not supported.
2592 }
2593 
richValue(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2594 FX_BOOL Field::richValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2595 {
2596 	return TRUE;
2597 	if (vp.IsSetting())
2598 	{
2599 		if (!m_bCanSet) return FALSE;
2600 		;
2601 	}
2602 	else
2603 	{
2604 		;
2605 	}
2606 	return TRUE;
2607 }
2608 
SetRichValue(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex)2609 void Field::SetRichValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex)
2610 {
2611 	//Not supported.
2612 }
2613 
rotation(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2614 FX_BOOL Field::rotation(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2615 {
2616 	ASSERT(m_pDocument != NULL);
2617 
2618 	if (vp.IsSetting())
2619 	{
2620 		if (!m_bCanSet) return FALSE;
2621 
2622 		int nVP;
2623 		vp >> nVP;
2624 
2625 		if (m_bDelay)
2626 		{
2627 			AddDelay_Int(FP_ROTATION, nVP);
2628 		}
2629 		else
2630 		{
2631 			Field::SetRotation(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
2632 		}
2633 	}
2634 	else
2635 	{
2636 		CFX_PtrArray FieldArray;
2637 		GetFormFields(m_FieldName,FieldArray);
2638 		if (FieldArray.GetSize() <= 0) return FALSE;
2639 
2640 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2641 		ASSERT(pFormField != NULL);
2642 
2643 		CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
2644 		if (!pFormControl)return FALSE;
2645 
2646 		vp << (FX_INT32)pFormControl->GetRotation();
2647 	}
2648 
2649 	return TRUE;
2650 }
2651 
SetRotation(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,int number)2652 void Field::SetRotation(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
2653 {
2654 	//Not supported.
2655 }
2656 
strokeColor(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2657 FX_BOOL Field::strokeColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2658 {
2659 	ASSERT(m_pDocument != NULL);
2660 
2661 	if (vp.IsSetting())
2662 	{
2663 		if (!m_bCanSet) return FALSE;
2664 
2665 		if (!vp.IsArrayObject())return FALSE;
2666 
2667 		CJS_Array crArray(m_isolate);
2668 		vp >> crArray;
2669 
2670 		CPWL_Color color;
2671 		color::ConvertArrayToPWLColor(crArray, color);
2672 
2673 		if (m_bDelay)
2674 		{
2675 			AddDelay_Color(FP_STROKECOLOR, color);
2676 		}
2677 		else
2678 		{
2679 			Field::SetStrokeColor(m_pDocument, m_FieldName, m_nFormControlIndex, color);
2680 		}
2681 	}
2682 	else
2683 	{
2684 		CFX_PtrArray FieldArray;
2685 		GetFormFields(m_FieldName,FieldArray);
2686 		if (FieldArray.GetSize() <= 0) return FALSE;
2687 
2688 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2689 		ASSERT(pFormField != NULL);
2690 
2691 		CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
2692 		if (!pFormControl)return FALSE;
2693 
2694 		int iColorType;
2695 		pFormControl->GetBorderColor(iColorType);
2696 
2697 		CPWL_Color color;
2698 
2699 		if (iColorType == COLORTYPE_TRANSPARENT)
2700 		{
2701 			color = CPWL_Color(COLORTYPE_TRANSPARENT);
2702 		}
2703 		else if (iColorType == COLORTYPE_GRAY)
2704 		{
2705 			color = CPWL_Color(COLORTYPE_GRAY, pFormControl->GetOriginalBorderColor(0));
2706 		}
2707 		else if (iColorType == COLORTYPE_RGB)
2708 		{
2709 			color = CPWL_Color(COLORTYPE_RGB, pFormControl->GetOriginalBorderColor(0),
2710 				pFormControl->GetOriginalBorderColor(1),
2711 				pFormControl->GetOriginalBorderColor(2));
2712 		}
2713 		else if (iColorType == COLORTYPE_CMYK)
2714 		{
2715 			color = CPWL_Color(COLORTYPE_CMYK, pFormControl->GetOriginalBorderColor(0),
2716 				pFormControl->GetOriginalBorderColor(1),
2717 				pFormControl->GetOriginalBorderColor(2),
2718 				pFormControl->GetOriginalBorderColor(3));
2719 		}
2720 		else
2721 			return FALSE;
2722 
2723 		CJS_Array crArray(m_isolate);
2724 		color::ConvertPWLColorToArray(color, crArray);
2725         vp  <<  crArray;
2726 	}
2727 
2728 	return TRUE;
2729 }
2730 
SetStrokeColor(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,const CPWL_Color & color)2731 void Field::SetStrokeColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color)
2732 {
2733 	//Not supported.
2734 }
2735 
style(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2736 FX_BOOL Field::style(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2737 {
2738 	ASSERT(m_pDocument != NULL);
2739 
2740 	if (vp.IsSetting())
2741 	{
2742 		if (!m_bCanSet) return FALSE;
2743 
2744 		CFX_ByteString csBCaption;
2745 		vp >> csBCaption;
2746 
2747 		if (m_bDelay)
2748 		{
2749 			AddDelay_String(FP_STYLE, csBCaption);
2750 		}
2751 		else
2752 		{
2753 			Field::SetStyle(m_pDocument, m_FieldName, m_nFormControlIndex, csBCaption);
2754 		}
2755 	}
2756 	else
2757 	{
2758 		CFX_PtrArray FieldArray;
2759 		GetFormFields(m_FieldName,FieldArray);
2760 		if (FieldArray.GetSize() <= 0) return FALSE;
2761 
2762 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2763 		ASSERT(pFormField != NULL);
2764 
2765 		if (pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON &&
2766 			pFormField->GetFieldType() != FIELDTYPE_CHECKBOX)
2767 			return FALSE;
2768 
2769 		CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
2770 		if (!pFormControl) return FALSE;
2771 
2772 		CFX_WideString csWCaption = pFormControl->GetNormalCaption();
2773 		CFX_ByteString csBCaption;
2774 
2775 		switch (csWCaption[0])
2776 		{
2777 			case L'l':
2778 				csBCaption = "circle";
2779 				break;
2780 			case L'8':
2781 				csBCaption = "cross";
2782 				break;
2783 			case L'u':
2784 				csBCaption = "diamond";
2785 				break;
2786 			case L'n':
2787 				csBCaption = "square";
2788 				break;
2789 			case L'H':
2790 				csBCaption = "star";
2791 				break;
2792 			default: //L'4'
2793 				csBCaption = "check";
2794 				break;
2795 		}
2796 		vp << csBCaption;
2797 	}
2798 
2799 	return TRUE;
2800 }
2801 
SetStyle(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,const CFX_ByteString & string)2802 void Field::SetStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex,
2803 					 const CFX_ByteString& string)
2804 {
2805 	//Not supported.
2806 }
2807 
submitName(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2808 FX_BOOL Field::submitName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2809 {
2810 	return TRUE;
2811 }
2812 
textColor(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2813 FX_BOOL Field::textColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2814 {
2815 	ASSERT(m_pDocument != NULL);
2816 
2817 	if (vp.IsSetting())
2818 	{
2819 		if (!m_bCanSet) return FALSE;
2820 
2821 		CJS_Array crArray(m_isolate);
2822 		if (!vp.IsArrayObject())return FALSE;
2823 		vp >> crArray;
2824 
2825 		CPWL_Color color;
2826 		color::ConvertArrayToPWLColor(crArray, color);
2827 
2828 		if (m_bDelay)
2829 		{
2830 			AddDelay_Color(FP_TEXTCOLOR, color);
2831 		}
2832 		else
2833 		{
2834 			Field::SetTextColor(m_pDocument, m_FieldName, m_nFormControlIndex, color);
2835 		}
2836 	}
2837 	else
2838 	{
2839 		CFX_PtrArray FieldArray;
2840 		GetFormFields(m_FieldName,FieldArray);
2841 		if (FieldArray.GetSize() <= 0) return FALSE;
2842 
2843 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2844 		ASSERT(pFormField != NULL);
2845 
2846 		CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
2847 		if (!pFormControl)return FALSE;
2848 
2849 		int iColorType;
2850 		FX_ARGB color;
2851 		CPDF_DefaultAppearance FieldAppearance = pFormControl->GetDefaultAppearance();
2852 		FieldAppearance.GetColor(color, iColorType);
2853 		FX_INT32 a,r,g,b;
2854 		ArgbDecode(color, a, r, g, b);
2855 
2856 		CPWL_Color crRet = CPWL_Color(COLORTYPE_RGB, r / 255.0f,
2857 				g / 255.0f,
2858 				b / 255.0f);
2859 
2860 		if (iColorType == COLORTYPE_TRANSPARENT)
2861 			crRet = CPWL_Color(COLORTYPE_TRANSPARENT);
2862 
2863 		CJS_Array crArray(m_isolate);
2864 		color::ConvertPWLColorToArray(crRet, crArray);
2865         vp  <<  crArray;
2866 	}
2867 
2868 	return TRUE;
2869 }
2870 
SetTextColor(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,const CPWL_Color & color)2871 void Field::SetTextColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color)
2872 {
2873 	//Not supported.
2874 }
2875 
textFont(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2876 FX_BOOL Field::textFont(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2877 {
2878 	ASSERT(m_pDocument != NULL);
2879 
2880 	if (vp.IsSetting())
2881 	{
2882 		if (!m_bCanSet) return FALSE;
2883 
2884 		CFX_ByteString csFontName;
2885 		vp >> csFontName;
2886 		if (csFontName.IsEmpty()) return FALSE;
2887 
2888 		if (m_bDelay)
2889 		{
2890 			AddDelay_String(FP_TEXTFONT, csFontName);
2891 		}
2892 		else
2893 		{
2894 			Field::SetTextFont(m_pDocument, m_FieldName, m_nFormControlIndex, csFontName);
2895 		}
2896 	}
2897 	else
2898 	{
2899 		CFX_PtrArray FieldArray;
2900 		GetFormFields(m_FieldName,FieldArray);
2901 		if (FieldArray.GetSize() <= 0) return FALSE;
2902 
2903 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2904 		ASSERT(pFormField != NULL);
2905 
2906 		CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
2907 		if (!pFormControl)return FALSE;
2908 
2909 		int nFieldType = pFormField->GetFieldType();
2910 
2911 		if (nFieldType == FIELDTYPE_PUSHBUTTON ||
2912 			nFieldType == FIELDTYPE_COMBOBOX ||
2913 			nFieldType == FIELDTYPE_LISTBOX ||
2914 			nFieldType == FIELDTYPE_TEXTFIELD)
2915 		{
2916 			CPDF_Font * pFont = pFormControl->GetDefaultControlFont();
2917 			if (!pFont) return FALSE;
2918 
2919 			vp << pFont->GetBaseFont();
2920 		}
2921 		else
2922 			return FALSE;
2923 	}
2924 
2925 	return TRUE;
2926 }
2927 
SetTextFont(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,const CFX_ByteString & string)2928 void Field::SetTextFont(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string)
2929 {
2930 	//Not supported.
2931 }
2932 
textSize(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2933 FX_BOOL Field::textSize(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2934 {
2935 	ASSERT(m_pDocument != NULL);
2936 
2937 	if (vp.IsSetting())
2938 	{
2939 		if (!m_bCanSet) return FALSE;
2940 
2941 		int nVP;
2942 		vp >> nVP;
2943 
2944 		if (m_bDelay)
2945 		{
2946 			AddDelay_Int(FP_TEXTSIZE, nVP);
2947 		}
2948 		else
2949 		{
2950 			Field::SetTextSize(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
2951 		}
2952 	}
2953 	else
2954 	{
2955 		CFX_PtrArray FieldArray;
2956 		GetFormFields(m_FieldName,FieldArray);
2957 		if (FieldArray.GetSize() <= 0) return FALSE;
2958 
2959 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2960 		ASSERT(pFormField != NULL);
2961 
2962 		CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
2963 		if (!pFormControl)return FALSE;
2964 
2965 		CPDF_DefaultAppearance FieldAppearance = pFormControl->GetDefaultAppearance();
2966 
2967 		CFX_ByteString csFontNameTag;
2968 		FX_FLOAT fFontSize;
2969 		FieldAppearance.GetFont(csFontNameTag,fFontSize);
2970 
2971 		vp << (int)fFontSize;
2972 	}
2973 
2974 	return TRUE;
2975 }
2976 
SetTextSize(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,int number)2977 void Field::SetTextSize(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
2978 {
2979 	//Not supported.
2980 }
2981 
type(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)2982 FX_BOOL Field::type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2983 {
2984 	ASSERT(m_pDocument != NULL);
2985 
2986 	if (!vp.IsGetting()) return FALSE;
2987 
2988 	CFX_PtrArray FieldArray;
2989 	GetFormFields(m_FieldName,FieldArray);
2990 	if (FieldArray.GetSize() <= 0) return FALSE;
2991 
2992  	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2993 	ASSERT(pFormField != NULL);
2994 
2995 	switch (pFormField->GetFieldType())
2996 	{
2997 		case FIELDTYPE_UNKNOWN:
2998 			vp << L"unknown";
2999 			break;
3000 		case FIELDTYPE_PUSHBUTTON:
3001 			vp << L"button";
3002 			break;
3003 		case FIELDTYPE_CHECKBOX:
3004 			vp << L"checkbox";
3005 			break;
3006 		case FIELDTYPE_RADIOBUTTON:
3007 			vp << L"radiobutton";
3008 			break;
3009 		case FIELDTYPE_COMBOBOX:
3010 			vp << L"combobox";
3011 			break;
3012 		case FIELDTYPE_LISTBOX:
3013 			vp << L"listbox";
3014 			break;
3015 		case FIELDTYPE_TEXTFIELD:
3016 			vp << L"text";
3017 			break;
3018 		case FIELDTYPE_SIGNATURE:
3019 			vp << L"signature";
3020 			break;
3021 		default :
3022 			vp << L"unknown";
3023 			break;
3024 	}
3025 
3026 	return TRUE;
3027 }
3028 
userName(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)3029 FX_BOOL Field::userName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
3030 {
3031 	ASSERT(m_pDocument != NULL);
3032 
3033   	if (vp.IsSetting())
3034 	{
3035 		if (!m_bCanSet) return FALSE;
3036 
3037 		CFX_WideString swName;
3038 		vp >> swName;
3039 
3040 		if (m_bDelay)
3041 		{
3042 			AddDelay_WideString(FP_USERNAME, swName);
3043 		}
3044 		else
3045 		{
3046 			Field::SetUserName(m_pDocument, m_FieldName, m_nFormControlIndex, swName);
3047 		}
3048 	}
3049 	else
3050 	{
3051 		CFX_PtrArray FieldArray;
3052 		GetFormFields(m_FieldName,FieldArray);
3053 		if (FieldArray.GetSize() <= 0) return FALSE;
3054 
3055  		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3056 		ASSERT(pFormField != NULL);
3057 
3058 		vp << (CFX_WideString)pFormField->GetAlternateName();
3059 	}
3060 
3061 	return TRUE;
3062 }
3063 
SetUserName(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,const CFX_WideString & string)3064 void Field::SetUserName(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_WideString& string)
3065 {
3066 	//Not supported.
3067 }
3068 
value(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)3069 FX_BOOL Field::value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
3070 {
3071 	ASSERT(m_pDocument != NULL);
3072 
3073 	if (vp.IsSetting())
3074 	{
3075 		if (!m_bCanSet) return FALSE;
3076 
3077 		CJS_WideStringArray strArray;
3078 
3079 		if (vp.IsArrayObject())
3080 		{
3081 			CJS_Array ValueArray(m_isolate);
3082 			vp.ConvertToArray(ValueArray);
3083 			for (int i = 0,sz = ValueArray.GetLength(); i < sz; i++)
3084 			{
3085 				CJS_Value ElementValue(m_isolate);
3086 				ValueArray.GetElement(i, ElementValue);
3087 				strArray.Add(ElementValue.ToCFXWideString());
3088 			}
3089 		}
3090 		else
3091 		{
3092 			CFX_WideString swValue;
3093 			vp >> swValue;
3094 
3095 			strArray.Add(swValue);
3096 		}
3097 
3098 		if (m_bDelay)
3099 		{
3100 			AddDelay_WideStringArray(FP_VALUE, strArray);
3101 		}
3102 		else
3103 		{
3104 			Field::SetValue(m_pDocument, m_FieldName, m_nFormControlIndex, strArray);
3105 		}
3106 	}
3107 	else
3108 	{
3109 		CFX_PtrArray FieldArray;
3110 		GetFormFields(m_FieldName,FieldArray);
3111 		if (FieldArray.GetSize() <= 0) return FALSE;
3112 
3113  		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3114 		ASSERT(pFormField != NULL);
3115 
3116 
3117 
3118 		switch (pFormField->GetFieldType())
3119 		{
3120 		case FIELDTYPE_PUSHBUTTON:
3121 			return FALSE;
3122 		case FIELDTYPE_COMBOBOX:
3123 		case FIELDTYPE_TEXTFIELD:
3124 			{
3125 				CFX_WideString swValue = pFormField->GetValue();
3126 
3127 				double dRet;
3128 				FX_BOOL bDot;
3129 				if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet, bDot))
3130 				{
3131 					if (bDot)
3132 						vp << dRet;
3133 					else
3134 						vp << dRet;
3135 				}
3136 				else
3137 					vp << swValue;
3138 			}
3139 			break;
3140 		case FIELDTYPE_LISTBOX:
3141 			{
3142 				if (pFormField->CountSelectedItems() > 1)
3143 				{
3144 					CJS_Array ValueArray(m_isolate);
3145 					CJS_Value ElementValue(m_isolate);
3146 					int iIndex;
3147 					for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; i++)
3148 					{
3149 						iIndex = pFormField->GetSelectedIndex(i);
3150 						ElementValue = pFormField->GetOptionValue(iIndex).c_str();
3151 						if (FXSYS_wcslen(ElementValue.ToCFXWideString().c_str()) == 0)
3152 							ElementValue = pFormField->GetOptionLabel(iIndex).c_str();
3153 						ValueArray.SetElement(i, ElementValue);
3154 					}
3155 					vp << ValueArray;
3156 				}
3157 				else
3158 				{
3159 					CFX_WideString swValue = pFormField->GetValue();
3160 
3161 					double dRet;
3162 					FX_BOOL bDot;
3163 					if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet, bDot))
3164 					{
3165 						if (bDot)
3166 							vp << dRet;
3167 						else
3168 							vp << dRet;
3169 					}
3170 					else
3171 						vp << swValue;
3172 				}
3173 			}
3174 			break;
3175 		case FIELDTYPE_CHECKBOX:
3176 		case FIELDTYPE_RADIOBUTTON:
3177 			{
3178 				FX_BOOL bFind = FALSE;
3179 				for (int i = 0 , sz = pFormField->CountControls(); i < sz; i++)
3180 				{
3181 					if (pFormField->GetControl(i)->IsChecked())
3182 					{
3183 						CFX_WideString swValue = pFormField->GetControl(i)->GetExportValue();
3184 						double dRet;
3185 						FX_BOOL bDot;
3186 						if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet, bDot))
3187 						{
3188 							if (bDot)
3189 								vp << dRet;
3190 							else
3191 								vp << dRet;
3192 						}
3193 						else
3194 							vp << swValue;
3195 
3196 						bFind = TRUE;
3197 						break;
3198 					}
3199 					else
3200 						continue;
3201 				}
3202 				if (!bFind)
3203 					vp << L"Off";
3204 			}
3205 			break;
3206 		default:
3207 			vp << pFormField->GetValue();
3208 			break;
3209 		}
3210 	}
3211 
3212 	return TRUE;
3213 }
3214 
SetValue(CPDFSDK_Document * pDocument,const CFX_WideString & swFieldName,int nControlIndex,const CJS_WideStringArray & strArray)3215 void Field::SetValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName,
3216 					 int nControlIndex, const CJS_WideStringArray& strArray)
3217 {
3218 	ASSERT(pDocument != NULL);
3219 
3220 	if (strArray.GetSize() < 1) return;
3221 
3222 	CFX_PtrArray FieldArray;
3223 	GetFormFields(pDocument, swFieldName, FieldArray);
3224 
3225 	for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
3226 	{
3227 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
3228 		ASSERT(pFormField != NULL);
3229 
3230 		if (pFormField->GetFullName().Compare(swFieldName) != 0)
3231 			continue;
3232 
3233 		switch (pFormField->GetFieldType())
3234 		{
3235 		case FIELDTYPE_TEXTFIELD:
3236 		case FIELDTYPE_COMBOBOX:
3237 			if (pFormField->GetValue() != strArray.GetAt(0))
3238 			{
3239 				CFX_WideString WideString = strArray.GetAt(0);
3240 				pFormField->SetValue(strArray.GetAt(0), TRUE);
3241 				UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
3242 			}
3243 			break;
3244 		case FIELDTYPE_CHECKBOX: //mantis: 0004493
3245 		case FIELDTYPE_RADIOBUTTON:
3246 			{
3247 				if (pFormField->GetValue() != strArray.GetAt(0))
3248 				{
3249 					pFormField->SetValue(strArray.GetAt(0), TRUE);
3250 					UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
3251 				}
3252 			}
3253 			break;
3254 		case FIELDTYPE_LISTBOX:
3255 			{
3256 				FX_BOOL bModified = FALSE;
3257 
3258 				for (int i=0,sz=strArray.GetSize(); i<sz; i++)
3259 				{
3260 					int iIndex = pFormField->FindOption(strArray.GetAt(i));
3261 
3262 					if (!pFormField->IsItemSelected(iIndex))
3263 					{
3264 						bModified = TRUE;
3265 						break;
3266 					}
3267 				}
3268 
3269 				if (bModified)
3270 				{
3271 					pFormField->ClearSelection(TRUE);
3272 					for (int i=0,sz=strArray.GetSize(); i<sz; i++)
3273 					{
3274 						int iIndex = pFormField->FindOption(strArray.GetAt(i));
3275 						pFormField->SetItemSelection(iIndex, TRUE, TRUE);
3276 					}
3277 
3278 					UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
3279 				}
3280 			}
3281 			break;
3282 		default:
3283 			break;
3284 		}
3285 	}
3286 }
3287 
valueAsString(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)3288 FX_BOOL Field::valueAsString(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
3289 {
3290 	ASSERT(m_pDocument != NULL);
3291 
3292 	if (!vp.IsGetting()) return FALSE;
3293 
3294 	CFX_PtrArray FieldArray;
3295 	GetFormFields(m_FieldName,FieldArray);
3296 	if (FieldArray.GetSize() <= 0) return FALSE;
3297 
3298    	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3299 	ASSERT(pFormField != NULL);
3300 
3301 	if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON)
3302 		return FALSE;
3303 
3304 	if (pFormField->GetFieldType() == FIELDTYPE_CHECKBOX)
3305 	{
3306 		if(!pFormField->CountControls()) return FALSE;
3307 
3308 		if (pFormField->GetControl(0)->IsChecked())
3309 			vp << L"Yes";
3310 		else
3311 			vp << L"Off";
3312 	}
3313 	else if (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON && !(pFormField->GetFieldFlags() & FIELDFLAG_RADIOSINUNISON))
3314 	{
3315 		for (int i=0, sz=pFormField->CountControls(); i<sz; i++)
3316 		{
3317 			if (pFormField->GetControl(i)->IsChecked())
3318 			{
3319 				vp << pFormField->GetControl(i)->GetExportValue().c_str();
3320 				break;
3321 			}
3322 			else
3323 				vp << L"Off";
3324 		}
3325 	}
3326 	else if (pFormField->GetFieldType() == FIELDTYPE_LISTBOX && (pFormField->CountSelectedItems() > 1))
3327 	{
3328 		vp << L"";
3329 	}
3330 	else
3331 		vp << pFormField->GetValue().c_str();
3332 
3333 	return TRUE;
3334 }
3335 
3336 /* --------------------------------- methods --------------------------------- */
3337 
browseForFileToSubmit(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3338 FX_BOOL Field::browseForFileToSubmit(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3339 {
3340 	ASSERT(m_pDocument != NULL);
3341 
3342 	CFX_PtrArray FieldArray;
3343 	GetFormFields(m_FieldName, FieldArray);
3344 	if (FieldArray.GetSize() <= 0) return FALSE;
3345 
3346 	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3347 	ASSERT(pFormField != NULL);
3348 
3349  	CPDFDoc_Environment* pApp = m_pDocument->GetEnv();
3350  	ASSERT(pApp != NULL);
3351 
3352 	if ((pFormField->GetFieldFlags() & FIELDFLAG_FILESELECT) &&
3353 		(pFormField->GetFieldType() == FIELDTYPE_TEXTFIELD))
3354 	{
3355 		CFX_WideString wsFileName = pApp->JS_fieldBrowse();
3356 		if(!wsFileName.IsEmpty())
3357 		{
3358  			pFormField->SetValue(wsFileName);
3359  			UpdateFormField(m_pDocument, pFormField, TRUE, TRUE, TRUE);
3360          }
3361 	}
3362 	else
3363 		return FALSE;
3364 
3365 	return TRUE;
3366 }
3367 
3368 
buttonGetCaption(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3369 FX_BOOL Field::buttonGetCaption(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3370 {
3371 	ASSERT(m_pDocument != NULL);
3372 
3373 	int nface = 0;
3374 	int iSize = params.size();
3375 	if (iSize >= 1)
3376 		nface = params[0].ToInt();
3377 
3378 	CFX_PtrArray FieldArray;
3379 	GetFormFields(m_FieldName,FieldArray);
3380 	if (FieldArray.GetSize() <= 0) return FALSE;
3381 
3382 	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3383 	ASSERT(pFormField != NULL);
3384 
3385 	if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
3386 		return FALSE;
3387 
3388 	CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
3389 	if (!pFormControl)return FALSE;
3390 
3391 	if (nface == 0)
3392 		vRet = pFormControl->GetNormalCaption().c_str();
3393 	else if (nface == 1)
3394 		vRet = pFormControl->GetDownCaption().c_str();
3395 	else if (nface == 2)
3396 		vRet = pFormControl->GetRolloverCaption().c_str();
3397 	else
3398 		return FALSE;
3399 
3400 	return TRUE;
3401 }
3402 
3403 //#pragma warning(disable: 4800)
3404 
buttonGetIcon(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3405 FX_BOOL Field::buttonGetIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3406 {
3407 	ASSERT(m_pDocument != NULL);
3408 
3409 	int nface = 0;
3410 	int iSize = params.size();
3411 	if (iSize >= 1)
3412 		nface = params[0].ToInt();
3413 
3414 	CFX_PtrArray FieldArray;
3415 	GetFormFields(m_FieldName,FieldArray);
3416 	if (FieldArray.GetSize() <= 0) return FALSE;
3417 
3418 	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3419 	ASSERT(pFormField != NULL);
3420 
3421 	if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
3422 		return FALSE;
3423 
3424 	CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
3425 	if (!pFormControl)return FALSE;
3426 
3427 	CJS_Context* pContext = (CJS_Context*)cc;
3428 	ASSERT(pContext != NULL);
3429 
3430 	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
3431 	ASSERT(pRuntime != NULL);
3432 
3433 	JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Icon"));
3434 	ASSERT(pObj.IsEmpty() == FALSE);
3435 
3436 	CJS_Icon* pJS_Icon = (CJS_Icon*)JS_GetPrivate(pObj);
3437 	ASSERT(pJS_Icon != NULL);
3438 
3439 	Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject();
3440 	ASSERT(pIcon != NULL);
3441 
3442 	CPDF_Stream* pIconStream = NULL;
3443 	if (nface == 0)
3444 		pIconStream = pFormControl->GetNormalIcon();
3445 	else if (nface == 1)
3446 		pIconStream = pFormControl->GetDownIcon();
3447 	else if (nface == 2)
3448 		pIconStream = pFormControl->GetRolloverIcon();
3449 	else
3450 		return FALSE;
3451 
3452 	pIcon->SetStream(pIconStream);
3453 	vRet = pJS_Icon;
3454 
3455 	return TRUE;
3456 }
3457 
3458 //#pragma warning(default: 4800)
3459 
buttonImportIcon(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3460 FX_BOOL Field::buttonImportIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3461 {
3462 #if 0
3463 	ASSERT(m_pDocument != NULL);
3464 
3465 	CFX_PtrArray FieldArray;
3466 	GetFormFields(m_FieldName,FieldArray);
3467 	if (FieldArray.GetSize() <= 0) return FALSE;
3468 
3469 	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3470 	if (!pFormField)return FALSE;
3471 
3472 	CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
3473 	ASSERT(pEnv);
3474 
3475 	CFX_WideString sIconFileName = pEnv->JS_fieldBrowse();
3476 	if (sIconFileName.IsEmpty())
3477 	{
3478 		vRet = 1;
3479 		return TRUE;
3480 	}
3481 
3482 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
3483 	ASSERT(pInterForm != NULL);
3484 
3485 	CPDF_Stream* pStream = pInterForm->LoadImageFromFile(sIconFileName);
3486 	if (!pStream)
3487 	{
3488 		vRet = -1;
3489 		return TRUE;
3490 	}
3491 
3492 	CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
3493 	if (!pFormControl)return FALSE;
3494 
3495 	pFormControl->SetNormalIcon(pStream);
3496 	UpdateFormControl(m_pDocument, pFormControl, TRUE, TRUE, TRUE);
3497 
3498 	vRet = 0;
3499 #endif // 0
3500 	return TRUE;
3501 }
3502 
buttonSetCaption(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3503 FX_BOOL Field::buttonSetCaption(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3504 {
3505 	return FALSE;
3506 }
3507 
buttonSetIcon(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3508 FX_BOOL Field::buttonSetIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3509 {
3510 	return FALSE;
3511 }
3512 
checkThisBox(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3513 FX_BOOL Field::checkThisBox(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3514 {
3515 	ASSERT(m_pDocument != NULL);
3516 
3517 	if (!m_bCanSet) return FALSE;
3518 
3519 	int iSize = params.size();
3520 	if (iSize < 1)
3521 		return FALSE;
3522 
3523 	int nWidget = params[0].ToInt();
3524 
3525 	FX_BOOL bCheckit = TRUE;
3526 	if (iSize >= 2)
3527 		bCheckit = params[1].ToBool();
3528 
3529 	CFX_PtrArray FieldArray;
3530 	GetFormFields(m_FieldName,FieldArray);
3531 	if (FieldArray.GetSize() <= 0) return FALSE;
3532 
3533 	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3534 	ASSERT(pFormField != NULL);
3535 
3536 	if (pFormField->GetFieldType() != FIELDTYPE_CHECKBOX && pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON)
3537 		return FALSE;
3538 	if(nWidget <0 || nWidget >= pFormField->CountControls())
3539 		return FALSE;
3540 	if (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)
3541 		pFormField->CheckControl(nWidget, bCheckit, TRUE);
3542 	else
3543 		pFormField->CheckControl(nWidget, bCheckit, TRUE);
3544 
3545 	UpdateFormField(m_pDocument, pFormField, TRUE, TRUE, TRUE);
3546 	return TRUE;
3547 }
3548 
clearItems(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3549 FX_BOOL Field::clearItems(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3550 {
3551 	return TRUE;
3552 }
3553 
defaultIsChecked(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3554 FX_BOOL Field::defaultIsChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3555 {
3556 	ASSERT(m_pDocument != NULL);
3557 
3558 	if (!m_bCanSet) return FALSE;
3559 
3560 	int iSize = params.size();
3561 	if (iSize < 1)
3562 		return FALSE;
3563 
3564 	int nWidget = params[0].ToInt();
3565 
3566 	CFX_PtrArray FieldArray;
3567 	GetFormFields(m_FieldName,FieldArray);
3568 	if (FieldArray.GetSize() <= 0) return FALSE;
3569 
3570 	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3571 	ASSERT(pFormField != NULL);
3572 
3573 	if(nWidget <0 || nWidget >= pFormField->CountControls())
3574 	{
3575 		vRet = FALSE;
3576 		return FALSE;
3577 	}
3578 	if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX)
3579 		|| (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON))
3580 	{
3581 
3582 		vRet = TRUE;
3583 	}
3584 	else
3585 		vRet = FALSE;
3586 
3587 	return TRUE;
3588 }
3589 
deleteItemAt(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3590 FX_BOOL Field::deleteItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3591 {
3592 	return TRUE;
3593 }
3594 
JS_COMPARESTRING(CFX_WideString * ps1,CFX_WideString * ps2)3595 int JS_COMPARESTRING(CFX_WideString* ps1, CFX_WideString* ps2)
3596 {
3597 	ASSERT(ps1 != NULL);
3598 	ASSERT(ps2 != NULL);
3599 
3600 	return ps1->Compare(*ps2);
3601 }
3602 
3603 
getArray(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3604 FX_BOOL Field::getArray(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3605 {
3606 	ASSERT(m_pDocument != NULL);
3607 
3608 	CFX_PtrArray FieldArray;
3609 	GetFormFields(m_FieldName,FieldArray);
3610 	if (FieldArray.GetSize() <= 0) return FALSE;
3611 
3612 	CGW_ArrayTemplate<CFX_WideString*> swSort;
3613 
3614 	for (int i=0,sz=FieldArray.GetSize(); i<sz; i++)
3615 	{
3616 		CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
3617 		ASSERT(pFormField != NULL);
3618 
3619 		swSort.Add(new CFX_WideString(pFormField->GetFullName()));
3620 
3621 	}
3622 	swSort.Sort(JS_COMPARESTRING);
3623 
3624 	CJS_Context* pContext = (CJS_Context*)cc;
3625 	ASSERT(pContext != NULL);
3626 	CJS_Runtime* pRuntime = pContext->GetJSRuntime();
3627 	ASSERT(pRuntime != NULL);
3628 
3629 	CJS_Array FormFieldArray(m_isolate);
3630 	for (int j=0,jsz = swSort.GetSize(); j<jsz; j++)
3631 	{
3632 		CFX_WideString* pStr = swSort.GetAt(j);
3633 
3634 		JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Field"));
3635 		ASSERT(pObj.IsEmpty() == FALSE);
3636 
3637 		CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(pObj);
3638 		ASSERT(pJSField != NULL);
3639 
3640 		Field* pField = (Field*)pJSField->GetEmbedObject();
3641 		ASSERT(pField != NULL);
3642 
3643 		pField->AttachField(this->m_pJSDoc, *pStr);
3644 
3645 		CJS_Value FormFieldValue(m_isolate);
3646 		FormFieldValue = pJSField;
3647 		FormFieldArray.SetElement(j, FormFieldValue);
3648 
3649 		delete pStr;
3650 	}
3651 
3652 	vRet = FormFieldArray;
3653 	swSort.RemoveAll();
3654 	return TRUE;
3655 }
3656 
getItemAt(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3657 FX_BOOL Field::getItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3658 {
3659 	ASSERT(m_pDocument != NULL);
3660 	int iSize = params.size();
3661 
3662 	int nIdx = -1;
3663 	if (iSize >= 1)
3664 		nIdx = params[0].ToInt();
3665 
3666 	FX_BOOL bExport = TRUE;
3667 	if (iSize >= 2)
3668 		bExport = params[1].ToBool();
3669 
3670 	CFX_PtrArray FieldArray;
3671 	GetFormFields(m_FieldName,FieldArray);
3672 	if (FieldArray.GetSize() <= 0) return FALSE;
3673 
3674 	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3675 	ASSERT(pFormField != NULL);
3676 
3677 	if ((pFormField->GetFieldType() == FIELDTYPE_LISTBOX)
3678 		|| (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX))
3679 	{
3680 		if (nIdx == -1 || nIdx > pFormField->CountOptions())
3681 			nIdx = pFormField->CountOptions() -1;
3682 		if (bExport)
3683 		{
3684 			CFX_WideString strval = pFormField->GetOptionValue(nIdx);
3685 			if (strval.IsEmpty())
3686 				vRet = pFormField->GetOptionLabel(nIdx).c_str();
3687 			else
3688 				vRet = strval.c_str();
3689 		}
3690 		else
3691 			vRet = pFormField->GetOptionLabel(nIdx).c_str();
3692 	}
3693 	else
3694 		return FALSE;
3695 
3696 	return TRUE;
3697 }
3698 
getLock(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3699 FX_BOOL Field::getLock(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3700 {
3701 	return FALSE;
3702 }
3703 
insertItemAt(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3704 FX_BOOL Field::insertItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3705 {
3706 	return TRUE;
3707 }
3708 
isBoxChecked(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3709 FX_BOOL Field::isBoxChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3710 {
3711 	ASSERT(m_pDocument != NULL);
3712 
3713 	int nIndex = -1;
3714 	if (params.size() >= 1)
3715 		nIndex = params[0].ToInt();
3716 
3717 	CFX_PtrArray FieldArray;
3718 	GetFormFields(m_FieldName,FieldArray);
3719 	if (FieldArray.GetSize() <= 0) return FALSE;
3720 
3721 	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3722 	ASSERT(pFormField != NULL);
3723 
3724 	if(nIndex <0 || nIndex >= pFormField->CountControls())
3725 	{
3726 		vRet = FALSE;
3727 		return FALSE;
3728 	}
3729 
3730 	if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX)
3731 		|| (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON))
3732 	{
3733 		if (pFormField->GetControl(nIndex)->IsChecked() !=0 )
3734 			vRet = TRUE;
3735 		else
3736 			vRet = FALSE;
3737 	}
3738 	else
3739 		vRet = FALSE;
3740 
3741 	return TRUE;
3742 }
3743 
isDefaultChecked(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3744 FX_BOOL Field::isDefaultChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3745 {
3746 	ASSERT(m_pDocument != NULL);
3747 
3748 	int nIndex = -1;
3749 	if (params.size() >= 1)
3750 		nIndex = params[0].ToInt();
3751 
3752 	CFX_PtrArray FieldArray;
3753 	GetFormFields(m_FieldName,FieldArray);
3754 	if (FieldArray.GetSize() <= 0) return FALSE;
3755 
3756 	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3757 	ASSERT(pFormField != NULL);
3758 
3759 	if(nIndex <0 || nIndex >= pFormField->CountControls())
3760 	{
3761 		vRet = FALSE;
3762 		return FALSE;
3763 	}
3764 	if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX)
3765 		|| (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON))
3766 	{
3767 		if (pFormField->GetControl(nIndex)->IsDefaultChecked() != 0)
3768 			vRet = TRUE;
3769 		else
3770 			vRet = FALSE;
3771 	}
3772 	else
3773 		vRet = FALSE;
3774 
3775 	return TRUE;
3776 }
3777 
setAction(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3778 FX_BOOL Field::setAction(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3779 {
3780 	return TRUE;
3781 }
3782 
setFocus(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3783 FX_BOOL Field::setFocus(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3784 {
3785 	ASSERT(m_pDocument != NULL);
3786 
3787 	CFX_PtrArray FieldArray;
3788 	GetFormFields(m_FieldName,FieldArray);
3789 	if (FieldArray.GetSize() <= 0) return FALSE;
3790 
3791 	CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3792 	ASSERT(pFormField != NULL);
3793 
3794 	FX_INT32 nCount = pFormField->CountControls();
3795 
3796 	if (nCount < 1) return FALSE;
3797 
3798 	CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
3799 	ASSERT(pInterForm != NULL);
3800 
3801 	CPDFSDK_Widget* pWidget = NULL;
3802 	if (nCount == 1)
3803 	{
3804 		pWidget = pInterForm->GetWidget(pFormField->GetControl(0));
3805 	}
3806 	else
3807 	{
3808 		CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
3809 		ASSERT(pEnv);
3810 		CPDF_Page* pPage = (CPDF_Page*)pEnv->FFI_GetCurrentPage(m_pDocument->GetDocument());
3811 		if(!pPage)
3812 			return FALSE;
3813 		if (CPDFSDK_PageView* pCurPageView = m_pDocument->GetPageView(pPage))
3814 		{
3815 			for (FX_INT32 i=0; i<nCount; i++)
3816 			{
3817 				if (CPDFSDK_Widget* pTempWidget =  pInterForm->GetWidget(pFormField->GetControl(i)))
3818 				{
3819 					if (pTempWidget->GetPDFPage() == pCurPageView->GetPDFPage())
3820 					{
3821 						pWidget = pTempWidget;
3822 						break;
3823 					}
3824 				}
3825 			}
3826 		}
3827 	}
3828 
3829 	if (pWidget)
3830 	{
3831 		m_pDocument->SetFocusAnnot(pWidget);
3832 	}
3833 
3834 	return TRUE;
3835 }
3836 
setItems(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3837 FX_BOOL Field::setItems(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3838 {
3839 	return TRUE;
3840 }
3841 
setLock(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3842 FX_BOOL Field::setLock(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3843 {
3844 	return FALSE;
3845 }
3846 
signatureGetModifications(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3847 FX_BOOL Field::signatureGetModifications(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3848 {
3849 	return FALSE;
3850 }
3851 
signatureGetSeedValue(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3852 FX_BOOL Field::signatureGetSeedValue(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3853 {
3854 	return FALSE;
3855 }
3856 
signatureInfo(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3857 FX_BOOL Field::signatureInfo(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3858 {
3859 	return FALSE;
3860 }
3861 
signatureSetSeedValue(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3862 FX_BOOL Field::signatureSetSeedValue(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3863 {
3864 	return FALSE;
3865 }
3866 
signatureSign(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3867 FX_BOOL Field::signatureSign(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3868 {
3869 	return FALSE;
3870 }
3871 
signatureValidate(IFXJS_Context * cc,const CJS_Parameters & params,CJS_Value & vRet,CFX_WideString & sError)3872 FX_BOOL Field::signatureValidate(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3873 {
3874 	return FALSE;
3875 }
3876 
source(IFXJS_Context * cc,CJS_PropValue & vp,CFX_WideString & sError)3877 FX_BOOL Field::source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
3878 {
3879 	if (vp.IsGetting())
3880 	{
3881 		vp << (CJS_Object*)NULL;
3882 	}
3883 
3884 	return TRUE;
3885 }
3886 
3887 /////////////////////////////////////////// delay /////////////////////////////////////////////
3888 
AddDelay_Int(enum FIELD_PROP prop,FX_INT32 n)3889 void Field::AddDelay_Int(enum FIELD_PROP prop, FX_INT32 n)
3890 {
3891 	ASSERT(m_pJSDoc != NULL);
3892 
3893 	CJS_DelayData* pNewData = new CJS_DelayData;
3894 	pNewData->sFieldName = m_FieldName;
3895 	pNewData->nControlIndex = m_nFormControlIndex;
3896 	pNewData->eProp = prop;
3897 	pNewData->num = n;
3898 
3899 	m_pJSDoc->AddDelayData(pNewData);
3900 }
3901 
AddDelay_Bool(enum FIELD_PROP prop,bool b)3902 void Field::AddDelay_Bool(enum FIELD_PROP prop,bool b)
3903 {
3904 	ASSERT(m_pJSDoc != NULL);
3905 
3906 	CJS_DelayData* pNewData = new CJS_DelayData;
3907 	pNewData->sFieldName = m_FieldName;
3908 	pNewData->nControlIndex = m_nFormControlIndex;
3909 	pNewData->eProp = prop;
3910 	pNewData->b = b;
3911 
3912 	m_pJSDoc->AddDelayData(pNewData);
3913 }
3914 
AddDelay_String(enum FIELD_PROP prop,const CFX_ByteString & string)3915 void Field::AddDelay_String(enum FIELD_PROP prop, const CFX_ByteString& string)
3916 {
3917 	ASSERT(m_pJSDoc != NULL);
3918 
3919 	CJS_DelayData* pNewData = new CJS_DelayData;
3920 	pNewData->sFieldName = m_FieldName;
3921 	pNewData->nControlIndex = m_nFormControlIndex;
3922 	pNewData->eProp = prop;
3923 	pNewData->string = string;
3924 
3925 	m_pJSDoc->AddDelayData(pNewData);
3926 }
3927 
AddDelay_WideString(enum FIELD_PROP prop,const CFX_WideString & string)3928 void Field::AddDelay_WideString(enum FIELD_PROP prop, const CFX_WideString& string)
3929 {
3930 	ASSERT(m_pJSDoc != NULL);
3931 
3932 	CJS_DelayData* pNewData = new CJS_DelayData;
3933 	pNewData->sFieldName = m_FieldName;
3934 	pNewData->nControlIndex = m_nFormControlIndex;
3935 	pNewData->eProp = prop;
3936 	pNewData->widestring = string;
3937 
3938 	m_pJSDoc->AddDelayData(pNewData);
3939 }
3940 
AddDelay_Rect(enum FIELD_PROP prop,const CPDF_Rect & rect)3941 void Field::AddDelay_Rect(enum FIELD_PROP prop, const CPDF_Rect& rect)
3942 {
3943 	ASSERT(m_pJSDoc != NULL);
3944 
3945 	CJS_DelayData* pNewData = new CJS_DelayData;
3946 	pNewData->sFieldName = m_FieldName;
3947 	pNewData->nControlIndex = m_nFormControlIndex;
3948 	pNewData->eProp = prop;
3949 	pNewData->rect = rect;
3950 
3951 	m_pJSDoc->AddDelayData(pNewData);
3952 }
3953 
AddDelay_Color(enum FIELD_PROP prop,const CPWL_Color & color)3954 void Field::AddDelay_Color(enum FIELD_PROP prop, const CPWL_Color& color)
3955 {
3956 	ASSERT(m_pJSDoc != NULL);
3957 
3958 	CJS_DelayData* pNewData = new CJS_DelayData;
3959 	pNewData->sFieldName = m_FieldName;
3960 	pNewData->nControlIndex = m_nFormControlIndex;
3961 	pNewData->eProp = prop;
3962 	pNewData->color = color;
3963 
3964 	m_pJSDoc->AddDelayData(pNewData);
3965 }
3966 
AddDelay_WordArray(enum FIELD_PROP prop,const CFX_DWordArray & array)3967 void Field::AddDelay_WordArray(enum FIELD_PROP prop, const CFX_DWordArray& array)
3968 {
3969 	ASSERT(m_pJSDoc != NULL);
3970 
3971 	CJS_DelayData* pNewData = new CJS_DelayData;
3972 	pNewData->sFieldName = m_FieldName;
3973 	pNewData->nControlIndex = m_nFormControlIndex;
3974 	pNewData->eProp = prop;
3975 
3976 	for (int i=0,sz=array.GetSize(); i<sz; i++)
3977 		pNewData->wordarray.Add(array.GetAt(i));
3978 
3979 	m_pJSDoc->AddDelayData(pNewData);
3980 }
3981 
AddDelay_WideStringArray(enum FIELD_PROP prop,const CJS_WideStringArray & array)3982 void Field::AddDelay_WideStringArray(enum FIELD_PROP prop, const CJS_WideStringArray& array)
3983 {
3984 	ASSERT(m_pJSDoc != NULL);
3985 
3986 	CJS_DelayData* pNewData = new CJS_DelayData;
3987 	pNewData->sFieldName = m_FieldName;
3988 	pNewData->nControlIndex = m_nFormControlIndex;
3989 	pNewData->eProp = prop;
3990 	for (int i=0,sz=array.GetSize(); i<sz; i++)
3991 		pNewData->widestringarray.Add(array.GetAt(i));
3992 
3993 	m_pJSDoc->AddDelayData(pNewData);
3994 }
3995 
DoDelay(CPDFSDK_Document * pDocument,CJS_DelayData * pData)3996 void Field::DoDelay(CPDFSDK_Document* pDocument, CJS_DelayData* pData)
3997 {
3998 	ASSERT(pDocument != NULL);
3999 	ASSERT(pData != NULL);
4000 
4001 	switch (pData->eProp)
4002 	{
4003 	case FP_ALIGNMENT:
4004 		Field::SetAlignment(pDocument, pData->sFieldName, pData->nControlIndex, pData->string);
4005 		break;
4006 	case FP_BORDERSTYLE:
4007 		Field::SetBorderStyle(pDocument, pData->sFieldName, pData->nControlIndex, pData->string);
4008 		break;
4009 	case FP_BUTTONALIGNX:
4010 		Field::SetButtonAlignX(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4011 		break;
4012 	case FP_BUTTONALIGNY:
4013 		Field::SetButtonAlignY(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4014 		break;
4015 	case FP_BUTTONFITBOUNDS:
4016 		Field::SetButtonFitBounds(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4017 		break;
4018 	case FP_BUTTONPOSITION:
4019 		Field::SetButtonPosition(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4020 		break;
4021 	case FP_BUTTONSCALEHOW:
4022 		Field::SetButtonScaleHow(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4023 		break;
4024 	case FP_BUTTONSCALEWHEN:
4025 		Field::SetButtonScaleWhen(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4026 		break;
4027 	case FP_CALCORDERINDEX:
4028 		Field::SetCalcOrderIndex(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4029 		break;
4030 	case FP_CHARLIMIT:
4031 		Field::SetCharLimit(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4032 		break;
4033 	case FP_COMB:
4034 		Field::SetComb(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4035 		break;
4036 	case FP_COMMITONSELCHANGE:
4037 		Field::SetCommitOnSelChange(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4038 		break;
4039 	case FP_CURRENTVALUEINDICES:
4040 		Field::SetCurrentValueIndices(pDocument, pData->sFieldName, pData->nControlIndex, pData->wordarray);
4041 		break;
4042 	case FP_DEFAULTVALUE:
4043 		Field::SetDefaultValue(pDocument, pData->sFieldName, pData->nControlIndex, pData->widestring);
4044 		break;
4045 	case FP_DONOTSCROLL:
4046 		Field::SetDoNotScroll(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4047 		break;
4048 	case FP_DISPLAY:
4049 		Field::SetDisplay(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4050 		break;
4051 	case FP_FILLCOLOR:
4052 		Field::SetFillColor(pDocument, pData->sFieldName, pData->nControlIndex, pData->color);
4053 		break;
4054 	case FP_HIDDEN:
4055 		Field::SetHidden(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4056 		break;
4057 	case FP_HIGHLIGHT:
4058 		Field::SetHighlight(pDocument, pData->sFieldName, pData->nControlIndex, pData->string);
4059 		break;
4060 	case FP_LINEWIDTH:
4061 		Field::SetLineWidth(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4062 		break;
4063 	case FP_MULTILINE:
4064 		Field::SetMultiline(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4065 		break;
4066 	case FP_MULTIPLESELECTION:
4067 		Field::SetMultipleSelection(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4068 		break;
4069 	case FP_PASSWORD:
4070 		Field::SetPassword(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4071 		break;
4072 	case FP_RECT:
4073 		Field::SetRect(pDocument, pData->sFieldName, pData->nControlIndex, pData->rect);
4074 		break;
4075 	case FP_RICHTEXT:
4076 		Field::SetRichText(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4077 		break;
4078 	case FP_RICHVALUE:
4079 		break;
4080 	case FP_ROTATION:
4081 		Field::SetRotation(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4082 		break;
4083 	case FP_STROKECOLOR:
4084 		Field::SetStrokeColor(pDocument, pData->sFieldName, pData->nControlIndex, pData->color);
4085 		break;
4086 	case FP_STYLE:
4087 		Field::SetStyle(pDocument, pData->sFieldName, pData->nControlIndex, pData->string);
4088 		break;
4089 	case FP_TEXTCOLOR:
4090 		Field::SetTextColor(pDocument, pData->sFieldName, pData->nControlIndex, pData->color);
4091 		break;
4092 	case FP_TEXTFONT:
4093 		Field::SetTextFont(pDocument, pData->sFieldName, pData->nControlIndex, pData->string);
4094 		break;
4095 	case FP_TEXTSIZE:
4096 		Field::SetTextSize(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4097 		break;
4098 	case FP_USERNAME:
4099 		Field::SetUserName(pDocument, pData->sFieldName, pData->nControlIndex, pData->widestring);
4100 		break;
4101 	case FP_VALUE:
4102 		Field::SetValue(pDocument, pData->sFieldName, pData->nControlIndex, pData->widestringarray);
4103 		break;
4104 	}
4105 }
4106 
4107 #define JS_FIELD_MINWIDTH	1
4108 #define JS_FIELD_MINHEIGHT	1
4109 
AddField(CPDFSDK_Document * pDocument,int nPageIndex,int nFieldType,const CFX_WideString & sName,const CPDF_Rect & rcCoords)4110 void Field::AddField(CPDFSDK_Document* pDocument, int nPageIndex, int nFieldType,
4111 							const CFX_WideString& sName, const CPDF_Rect& rcCoords)
4112 {
4113 	//Not supported.
4114 }
4115 
4116