1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
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"
22 /* ---------------------- Field ---------------------- */
24 BEGIN_JS_STATIC_CONST(CJS_Field)
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)
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()
111 IMPLEMENT_JS_CLASS(CJS_Field, Field)
113 FX_BOOL CJS_Field::InitInstance(IFXJS_Context* cc)
115 CJS_Context* pContext = (CJS_Context*)cc;
116 ASSERT(pContext != NULL);
118 Field* pField = (Field*)GetEmbedObject();
119 ASSERT(pField != NULL);
121 pField->SetIsolate(pContext->GetJSRuntime()->GetIsolate());
126 Field::Field(CJS_Object* pJSObject): CJS_EmbedObj(pJSObject),
129 m_nFormControlIndex(-1),
140 //note: iControlNo = -1, means not a widget.
141 void Field::ParseFieldName(const std::wstring &strFieldNameParsed,std::wstring &strFieldName,int & iControlNo)
143 int iStart = strFieldNameParsed.find_last_of(L'.');
146 strFieldName = strFieldNameParsed;
150 std::wstring suffixal = strFieldNameParsed.substr(iStart+1);
151 iControlNo = FXSYS_wtoi(suffixal.c_str());
155 while((iStart = suffixal.find_last_of(L" ")) != -1)
157 suffixal.erase(iStart,1);
160 if (suffixal.compare(L"0") != 0)
162 strFieldName = strFieldNameParsed;
168 strFieldName = strFieldNameParsed.substr(0,iStart);
171 FX_BOOL Field::AttachField(Document* pDocument, const CFX_WideString& csFieldName)
173 ASSERT(pDocument != NULL);
174 m_pJSDoc = pDocument;
176 m_pDocument = pDocument->GetReaderDoc();
177 ASSERT(m_pDocument != NULL);
179 m_bCanSet = m_pDocument->GetPermissions(FPDFPERM_FILL_FORM) ||
180 m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) ||
181 m_pDocument->GetPermissions(FPDFPERM_MODIFY);
183 CPDFSDK_InterForm* pRDInterForm = m_pDocument->GetInterForm();
184 ASSERT(pRDInterForm != NULL);
186 CPDF_InterForm* pInterForm = pRDInterForm->GetInterForm();
187 ASSERT(pInterForm != NULL);
189 CFX_WideString swFieldNameTemp = csFieldName;
190 swFieldNameTemp.Replace(L"..", L".");
192 if (pInterForm->CountFields(swFieldNameTemp) <= 0)
194 std::wstring strFieldName;
196 ParseFieldName(swFieldNameTemp.c_str(), strFieldName, iControlNo);
197 if (iControlNo == -1) return FALSE;
199 m_FieldName = strFieldName.c_str();
200 m_nFormControlIndex = iControlNo;
204 m_FieldName = swFieldNameTemp;
205 m_nFormControlIndex = -1;
210 void Field::GetFormFields(CPDFSDK_Document* pDocument, const CFX_WideString& csFieldName, CFX_PtrArray& FieldArray)
212 ASSERT(pDocument != NULL);
214 CPDFSDK_InterForm* pReaderInterForm = pDocument->GetInterForm();
215 ASSERT(pReaderInterForm != NULL);
217 CPDF_InterForm* pInterForm = pReaderInterForm->GetInterForm();
218 ASSERT(pInterForm != NULL);
220 ASSERT(FieldArray.GetSize() == 0);
222 for (int i=0,sz=pInterForm->CountFields(csFieldName); i<sz; i++)
224 if (CPDF_FormField* pFormField = pInterForm->GetField(i, csFieldName))
225 FieldArray.Add((void*)pFormField);
229 void Field::GetFormFields(const CFX_WideString& csFieldName, CFX_PtrArray& FieldArray)
231 ASSERT(m_pDocument != NULL);
233 Field::GetFormFields(m_pDocument, csFieldName, FieldArray);
236 void Field::UpdateFormField(CPDFSDK_Document* pDocument, CPDF_FormField* pFormField,
237 FX_BOOL bChangeMark, FX_BOOL bResetAP, FX_BOOL bRefresh)
239 ASSERT(pDocument != NULL);
240 ASSERT(pFormField != NULL);
242 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
243 ASSERT(pInterForm != NULL);
245 CFX_PtrArray widgets;
246 pInterForm->GetWidgets(pFormField, widgets);
250 int nFieldType = pFormField->GetFieldType();
251 if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_TEXTFIELD)
253 for (int i=0,sz=widgets.GetSize(); i<sz; i++)
255 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets.GetAt(i);
256 ASSERT(pWidget != NULL);
258 FX_BOOL bFormated = FALSE;
259 CFX_WideString sValue = pWidget->OnFormat(bFormated);
261 pWidget->ResetAppearance(sValue.c_str(), FALSE);
263 pWidget->ResetAppearance(NULL, FALSE);
268 for (int i=0,sz=widgets.GetSize(); i<sz; i++)
270 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets.GetAt(i);
271 ASSERT(pWidget != NULL);
273 pWidget->ResetAppearance(NULL, FALSE);
280 for (int i=0,sz=widgets.GetSize(); i<sz; i++)
282 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets.GetAt(i);
283 ASSERT(pWidget != NULL);
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);
294 pDocument->SetChangeMark();
297 void Field::UpdateFormControl(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl,
298 FX_BOOL bChangeMark, FX_BOOL bResetAP, FX_BOOL bRefresh)
300 ASSERT(pDocument != NULL);
301 ASSERT(pFormControl != NULL);
303 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
304 ASSERT(pInterForm != NULL);
306 CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl);
312 int nFieldType = pWidget->GetFieldType();
313 if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_TEXTFIELD)
315 FX_BOOL bFormated = FALSE;
316 CFX_WideString sValue = pWidget->OnFormat(bFormated);
318 pWidget->ResetAppearance(sValue.c_str(), FALSE);
320 pWidget->ResetAppearance(NULL, FALSE);
324 pWidget->ResetAppearance(NULL, FALSE);
330 CPDFSDK_InterForm * pInterForm = pWidget->GetInterForm();
331 CPDFSDK_Document* pDoc = pInterForm->GetDocument();
332 ASSERT(pDoc != NULL);
333 pDoc->UpdateAllViews(NULL, pWidget);
339 pDocument->SetChangeMark();
342 CPDFSDK_Widget* Field::GetWidget(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl)
344 ASSERT(pDocument != NULL);
345 ASSERT(pFormControl != NULL);
347 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
348 ASSERT(pInterForm != NULL);
350 return pInterForm->GetWidget(pFormControl);
353 FX_BOOL Field::ValueIsOccur(CPDF_FormField* pFormField, CFX_WideString csOptLabel)
355 ASSERT(pFormField != NULL);
357 for (int i=0,sz = pFormField->CountOptions(); i < sz; i++)
359 if (csOptLabel.Compare(pFormField->GetOptionLabel(i)) == 0)
366 CPDF_FormControl* Field::GetSmartFieldControl(CPDF_FormField* pFormField)
368 if (!pFormField->CountControls() || m_nFormControlIndex >= pFormField->CountControls())
371 if (m_nFormControlIndex < 0)
372 return pFormField->GetControl(0);
374 return pFormField->GetControl(m_nFormControlIndex);
377 /* ---------------------------------------- property ---------------------------------------- */
379 FX_BOOL Field::alignment(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
381 ASSERT(m_pDocument != NULL);
385 if (!m_bCanSet) return FALSE;
387 CFX_ByteString alignStr;
392 AddDelay_String(FP_ALIGNMENT, alignStr);
396 Field::SetAlignment(m_pDocument, m_FieldName, m_nFormControlIndex, alignStr);
401 CFX_PtrArray FieldArray;
402 GetFormFields(m_FieldName, FieldArray);
403 if (FieldArray.GetSize() <= 0) return FALSE;
405 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
406 ASSERT(pFormField != NULL);
408 if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
411 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
412 if (!pFormControl)return FALSE;
414 switch (pFormControl->GetControlAlignment())
433 void Field::SetAlignment(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex,
434 const CFX_ByteString& string)
439 FX_BOOL Field::borderStyle(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
441 ASSERT(m_pDocument != NULL);
445 if (!m_bCanSet) return FALSE;
447 CFX_ByteString strType = "";
452 AddDelay_String(FP_BORDERSTYLE, strType);
456 Field::SetBorderStyle(m_pDocument, m_FieldName, m_nFormControlIndex, strType);
461 CFX_PtrArray FieldArray;
462 GetFormFields(m_FieldName, FieldArray);
463 if (FieldArray.GetSize() <= 0) return FALSE;
465 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
466 if (!pFormField) return FALSE;
468 CPDFSDK_Widget* pWidget = GetWidget(m_pDocument, GetSmartFieldControl(pFormField));
469 if (!pWidget) return FALSE;
471 int nBorderstyle = pWidget->GetBorderStyle();
473 switch (nBorderstyle)
499 void Field::SetBorderStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex,
500 const CFX_ByteString& string)
502 ASSERT(pDocument != NULL);
504 int nBorderStyle = 0;
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;
518 CFX_PtrArray FieldArray;
519 GetFormFields(pDocument, swFieldName, FieldArray);
521 for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
523 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
524 ASSERT(pFormField != NULL);
526 if (nControlIndex < 0)
528 FX_BOOL bSet = FALSE;
529 for (int j=0,jsz = pFormField->CountControls(); j<jsz; j++)
531 if (CPDFSDK_Widget* pWidget = GetWidget(pDocument, pFormField->GetControl(j)))
533 if (pWidget->GetBorderStyle() != nBorderStyle)
535 pWidget->SetBorderStyle(nBorderStyle);
540 if (bSet) UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
544 if(nControlIndex >= pFormField->CountControls()) return;
545 if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex))
547 if (CPDFSDK_Widget* pWidget = GetWidget(pDocument, pFormControl))
549 if (pWidget->GetBorderStyle() != nBorderStyle)
551 pWidget->SetBorderStyle(nBorderStyle);
552 UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE);
560 FX_BOOL Field::buttonAlignX(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
562 ASSERT(m_pDocument != NULL);
566 if (!m_bCanSet) return FALSE;
573 AddDelay_Int(FP_BUTTONALIGNX, nVP);
577 Field::SetButtonAlignX(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
582 CFX_PtrArray FieldArray;
583 GetFormFields(m_FieldName,FieldArray);
584 if (FieldArray.GetSize() <= 0) return FALSE;
586 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
587 ASSERT(pFormField != NULL);
589 if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
592 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
593 if (!pFormControl)return FALSE;
595 CPDF_IconFit IconFit = pFormControl->GetIconFit();
597 FX_FLOAT fLeft,fBottom;
598 IconFit.GetIconPosition(fLeft,fBottom);
600 vp << (int32_t)fLeft;
606 void Field::SetButtonAlignX(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
611 FX_BOOL Field::buttonAlignY(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
613 ASSERT(m_pDocument != NULL);
617 if (!m_bCanSet) return FALSE;
624 AddDelay_Int(FP_BUTTONALIGNY, nVP);
628 Field::SetButtonAlignY(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
633 CFX_PtrArray FieldArray;
634 GetFormFields(m_FieldName,FieldArray);
635 if (FieldArray.GetSize() <= 0) return FALSE;
637 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
638 ASSERT(pFormField != NULL);
640 if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
643 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
644 if (!pFormControl)return FALSE;
646 CPDF_IconFit IconFit = pFormControl->GetIconFit();
648 FX_FLOAT fLeft,fBottom;
649 IconFit.GetIconPosition(fLeft,fBottom);
651 vp << (int32_t)fBottom;
657 void Field::SetButtonAlignY(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
662 FX_BOOL Field::buttonFitBounds(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
664 ASSERT(m_pDocument != NULL);
668 if (!m_bCanSet) return FALSE;
675 AddDelay_Bool(FP_BUTTONFITBOUNDS, bVP);
679 Field::SetButtonFitBounds(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
684 CFX_PtrArray FieldArray;
685 GetFormFields(m_FieldName,FieldArray);
686 if (FieldArray.GetSize() <= 0) return FALSE;
688 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
689 ASSERT(pFormField != NULL);
691 if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
694 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
695 if (!pFormControl)return FALSE;
697 CPDF_IconFit IconFit = pFormControl->GetIconFit();
698 vp << IconFit.GetFittingBounds();
704 void Field::SetButtonFitBounds(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
709 FX_BOOL Field::buttonPosition(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
711 ASSERT(m_pDocument != NULL);
715 if (!m_bCanSet) return FALSE;
722 AddDelay_Int(FP_BUTTONPOSITION, nVP);
726 Field::SetButtonPosition(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
731 CFX_PtrArray FieldArray;
732 GetFormFields(m_FieldName,FieldArray);
733 if (FieldArray.GetSize() <= 0) return FALSE;
735 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
736 ASSERT(pFormField != NULL);
738 if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
741 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
742 if (!pFormControl)return FALSE;
744 vp << pFormControl->GetTextPosition();
749 void Field::SetButtonPosition(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
754 FX_BOOL Field::buttonScaleHow(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
756 ASSERT(m_pDocument != NULL);
760 if (!m_bCanSet) return FALSE;
767 AddDelay_Int(FP_BUTTONSCALEHOW, nVP);
771 Field::SetButtonScaleHow(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
776 CFX_PtrArray FieldArray;
777 GetFormFields(m_FieldName, FieldArray);
778 if (FieldArray.GetSize() <= 0) return FALSE;
780 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
781 ASSERT(pFormField != NULL);
783 if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
786 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
787 if (!pFormControl)return FALSE;
789 CPDF_IconFit IconFit = pFormControl->GetIconFit();
790 if (IconFit.IsProportionalScale())
799 void Field::SetButtonScaleHow(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
804 FX_BOOL Field::buttonScaleWhen(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
806 ASSERT(m_pDocument != NULL);
810 if (!m_bCanSet) return FALSE;
817 AddDelay_Int(FP_BUTTONSCALEWHEN, nVP);
821 Field::SetButtonScaleWhen(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
826 CFX_PtrArray FieldArray;
827 GetFormFields(m_FieldName,FieldArray);
828 if (FieldArray.GetSize() <= 0) return FALSE;
830 CPDF_FormField* pFormField = (CPDF_FormField*) FieldArray.ElementAt(0);
831 ASSERT(pFormField != NULL);
833 if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
836 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
837 if (!pFormControl) return FALSE;
839 CPDF_IconFit IconFit = pFormControl->GetIconFit();
840 int ScaleM = IconFit.GetScaleMethod();
843 case CPDF_IconFit::Always :
844 vp << (int32_t) CPDF_IconFit::Always;
846 case CPDF_IconFit::Bigger :
847 vp << (int32_t) CPDF_IconFit::Bigger;
849 case CPDF_IconFit::Never :
850 vp << (int32_t) CPDF_IconFit::Never;
852 case CPDF_IconFit::Smaller :
853 vp << (int32_t) CPDF_IconFit::Smaller;
861 void Field::SetButtonScaleWhen(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
866 FX_BOOL Field::calcOrderIndex(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
868 ASSERT(m_pDocument != NULL);
872 if (!m_bCanSet) return FALSE;
879 AddDelay_Int(FP_CALCORDERINDEX, nVP);
883 Field::SetCalcOrderIndex(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
888 CFX_PtrArray FieldArray;
889 GetFormFields(m_FieldName, FieldArray);
890 if (FieldArray.GetSize() <= 0) return FALSE;
892 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
893 ASSERT(pFormField != NULL);
895 if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX && pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
898 CPDFSDK_InterForm* pRDInterForm = m_pDocument->GetInterForm();
899 ASSERT(pRDInterForm != NULL);
901 CPDF_InterForm* pInterForm = pRDInterForm->GetInterForm();
902 ASSERT(pInterForm != NULL);
904 vp << (int32_t)pInterForm->FindFieldInCalculationOrder(pFormField);
910 void Field::SetCalcOrderIndex(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
915 FX_BOOL Field::charLimit(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
917 ASSERT(m_pDocument != NULL);
921 if (!m_bCanSet) return FALSE;
928 AddDelay_Int(FP_CHARLIMIT, nVP);
932 Field::SetCharLimit(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
937 CFX_PtrArray FieldArray;
938 GetFormFields(m_FieldName, FieldArray);
939 if (FieldArray.GetSize() <= 0) return FALSE;
941 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
942 ASSERT(pFormField != NULL);
944 if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
947 vp << (int32_t)pFormField->GetMaxLen();
952 void Field::SetCharLimit(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
957 FX_BOOL Field::comb(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
959 ASSERT(m_pDocument != NULL);
963 if (!m_bCanSet) return FALSE;
970 AddDelay_Bool(FP_COMB, bVP);
974 Field::SetComb(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
979 CFX_PtrArray FieldArray;
980 GetFormFields(m_FieldName,FieldArray);
981 if (FieldArray.GetSize() <= 0) return FALSE;
983 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
984 ASSERT(pFormField != NULL);
986 if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
989 if (pFormField->GetFieldFlags() & FIELDFLAG_COMB)
998 void Field::SetComb(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
1003 FX_BOOL Field::commitOnSelChange(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1005 ASSERT(m_pDocument != NULL);
1009 if (!m_bCanSet) return FALSE;
1016 AddDelay_Bool(FP_COMMITONSELCHANGE, bVP);
1020 Field::SetCommitOnSelChange(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
1025 CFX_PtrArray FieldArray;
1026 GetFormFields(m_FieldName,FieldArray);
1027 if (FieldArray.GetSize() <= 0) return FALSE;
1029 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1030 ASSERT(pFormField != NULL);
1032 if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX && pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
1035 if (pFormField->GetFieldFlags() & FIELDFLAG_COMMITONSELCHANGE)
1044 void Field::SetCommitOnSelChange(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
1049 FX_BOOL Field::currentValueIndices(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1051 ASSERT(m_pDocument != NULL);
1055 if (!m_bCanSet) return FALSE;
1057 CFX_DWordArray array;
1059 if (vp.GetType() == VT_number)
1063 array.Add(iSelecting);
1065 else if (vp.IsArrayObject())
1067 CJS_Array SelArray(m_isolate);
1068 CJS_Value SelValue(m_isolate);
1071 for (int i=0,sz=SelArray.GetLength(); i<sz; i++)
1073 SelArray.GetElement(i,SelValue);
1074 iSelecting = SelValue.ToInt();
1075 array.Add(iSelecting);
1081 AddDelay_WordArray(FP_CURRENTVALUEINDICES, array);
1085 Field::SetCurrentValueIndices(m_pDocument, m_FieldName, m_nFormControlIndex, array);
1090 CFX_PtrArray FieldArray;
1091 GetFormFields(m_FieldName,FieldArray);
1092 if (FieldArray.GetSize() <= 0) return FALSE;
1094 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1095 ASSERT(pFormField != NULL);
1097 if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX && pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
1100 if (pFormField->CountSelectedItems() == 1)
1101 vp << pFormField->GetSelectedIndex(0);
1102 else if (pFormField->CountSelectedItems() > 1)
1104 CJS_Array SelArray(m_isolate);
1105 for (int i=0,sz=pFormField->CountSelectedItems(); i<sz; i++)
1107 SelArray.SetElement(i, CJS_Value(m_isolate,pFormField->GetSelectedIndex(i)));
1118 void Field::SetCurrentValueIndices(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex,
1119 const CFX_DWordArray& array)
1121 ASSERT(pDocument != NULL);
1123 CFX_PtrArray FieldArray;
1124 GetFormFields(pDocument, swFieldName, FieldArray);
1126 for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
1128 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
1129 ASSERT(pFormField != NULL);
1131 int nFieldType = pFormField->GetFieldType();
1132 if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_LISTBOX)
1134 FX_DWORD dwFieldFlags = pFormField->GetFieldFlags();
1135 pFormField->ClearSelection(TRUE);
1137 for (int i=0,sz=array.GetSize(); i<sz; i++)
1139 if (i>0 && !(dwFieldFlags & (1<<21)))
1144 int iSelecting = (int32_t)array.GetAt(i);
1145 if (iSelecting < pFormField->CountOptions() && !pFormField->IsItemSelected(iSelecting))
1146 pFormField->SetItemSelection(iSelecting, TRUE);
1149 UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
1154 FX_BOOL Field::defaultStyle(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1156 // MQG sError = JSGetStringFromID(IDS_STRING_NOTSUPPORT);
1161 if (!m_bCanSet) return FALSE;
1172 void Field::SetDefaultStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex)
1177 FX_BOOL Field::defaultValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1179 ASSERT(m_pDocument != NULL);
1183 if (!m_bCanSet) return FALSE;
1185 CFX_WideString WideStr;
1190 AddDelay_WideString(FP_DEFAULTVALUE, WideStr);
1194 Field::SetDefaultValue(m_pDocument, m_FieldName, m_nFormControlIndex, WideStr);
1199 CFX_PtrArray FieldArray;
1200 GetFormFields(m_FieldName,FieldArray);
1201 if (FieldArray.GetSize() <= 0) return FALSE;
1203 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1204 ASSERT(pFormField != NULL);
1206 if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON ||
1207 pFormField->GetFieldType() == FIELDTYPE_SIGNATURE)
1210 vp << pFormField->GetDefaultValue();
1215 void Field::SetDefaultValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex,
1216 const CFX_WideString& string)
1221 FX_BOOL Field::doNotScroll(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1223 ASSERT(m_pDocument != NULL);
1227 if (!m_bCanSet) return FALSE;
1234 AddDelay_Bool(FP_DONOTSCROLL, bVP);
1238 Field::SetDoNotScroll(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
1243 CFX_PtrArray FieldArray;
1244 GetFormFields(m_FieldName,FieldArray);
1245 if (FieldArray.GetSize() <= 0) return FALSE;
1247 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1248 ASSERT(pFormField != NULL);
1250 if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
1253 if (pFormField->GetFieldFlags() & FIELDFLAG_DONOTSCROLL)
1262 void Field::SetDoNotScroll(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
1267 FX_BOOL Field::doNotSpellCheck(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1269 ASSERT(m_pDocument != NULL);
1273 if (!m_bCanSet) return FALSE;
1280 CFX_PtrArray FieldArray;
1281 GetFormFields(m_FieldName,FieldArray);
1282 if (FieldArray.GetSize() <= 0) return FALSE;
1284 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1285 ASSERT(pFormField != NULL);
1287 if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD &&
1288 pFormField->GetFieldType() != FIELDTYPE_COMBOBOX)
1291 if (pFormField->GetFieldFlags() & FIELDFLAG_DONOTSPELLCHECK)
1300 void Field::SetDelay(FX_BOOL bDelay)
1307 m_pJSDoc->DoFieldDelay(m_FieldName, m_nFormControlIndex);
1311 FX_BOOL Field::delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1315 if (!m_bCanSet) return FALSE;
1329 FX_BOOL Field::display(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1331 ASSERT(m_pDocument != NULL);
1335 if (!m_bCanSet) return FALSE;
1342 AddDelay_Int(FP_DISPLAY, nVP);
1346 Field::SetDisplay(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
1351 CFX_PtrArray FieldArray;
1352 GetFormFields(m_FieldName,FieldArray);
1353 if (FieldArray.GetSize() <= 0) return FALSE;
1355 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1356 ASSERT(pFormField != NULL);
1358 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
1359 ASSERT(pInterForm != NULL);
1361 CPDFSDK_Widget* pWidget = pInterForm->GetWidget(GetSmartFieldControl(pFormField));
1362 if (!pWidget)return FALSE;
1364 FX_DWORD dwFlag = pWidget->GetFlags();
1366 if (ANNOTFLAG_INVISIBLE & dwFlag || ANNOTFLAG_HIDDEN & dwFlag)
1372 if (ANNOTFLAG_PRINT & dwFlag)
1374 if (ANNOTFLAG_NOVIEW & dwFlag)
1393 void Field::SetDisplay(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
1395 ASSERT(pDocument != NULL);
1397 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
1398 ASSERT(pInterForm != NULL);
1400 CFX_PtrArray FieldArray;
1401 GetFormFields(pDocument, swFieldName, FieldArray);
1403 for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
1405 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
1406 ASSERT(pFormField != NULL);
1408 if (nControlIndex < 0)
1410 FX_BOOL bSet = FALSE;
1411 for (int j=0,jsz = pFormField->CountControls(); j<jsz; j++)
1413 CPDF_FormControl* pFormControl = pFormField->GetControl(j);
1414 ASSERT(pFormControl != NULL);
1416 if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
1418 FX_DWORD dwFlag = pWidget->GetFlags();
1422 dwFlag &= (~ANNOTFLAG_INVISIBLE);
1423 dwFlag &= (~ANNOTFLAG_HIDDEN);
1424 dwFlag &= (~ANNOTFLAG_NOVIEW);
1425 dwFlag |= ANNOTFLAG_PRINT;
1428 dwFlag &= (~ANNOTFLAG_INVISIBLE);
1429 dwFlag &= (~ANNOTFLAG_NOVIEW);
1430 dwFlag |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
1433 dwFlag &= (~ANNOTFLAG_INVISIBLE);
1434 dwFlag &= (~ANNOTFLAG_PRINT);
1435 dwFlag &= (~ANNOTFLAG_HIDDEN);
1436 dwFlag &= (~ANNOTFLAG_NOVIEW);
1439 dwFlag |= ANNOTFLAG_NOVIEW;
1440 dwFlag |= ANNOTFLAG_PRINT;
1441 dwFlag &= (~ANNOTFLAG_HIDDEN);
1445 if (dwFlag != pWidget->GetFlags())
1447 pWidget->SetFlags(dwFlag);
1453 if (bSet) UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
1457 if(nControlIndex >= pFormField->CountControls()) return;
1458 if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex))
1460 if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
1463 FX_DWORD dwFlag = pWidget->GetFlags();
1467 dwFlag &= (~ANNOTFLAG_INVISIBLE);
1468 dwFlag &= (~ANNOTFLAG_HIDDEN);
1469 dwFlag &= (~ANNOTFLAG_NOVIEW);
1470 dwFlag |= ANNOTFLAG_PRINT;
1473 dwFlag &= (~ANNOTFLAG_INVISIBLE);
1474 dwFlag &= (~ANNOTFLAG_NOVIEW);
1475 dwFlag |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
1478 dwFlag &= (~ANNOTFLAG_INVISIBLE);
1479 dwFlag &= (~ANNOTFLAG_PRINT);
1480 dwFlag &= (~ANNOTFLAG_HIDDEN);
1481 dwFlag &= (~ANNOTFLAG_NOVIEW);
1484 dwFlag |= ANNOTFLAG_NOVIEW;
1485 dwFlag |= ANNOTFLAG_PRINT;
1486 dwFlag &= (~ANNOTFLAG_HIDDEN);
1489 if (dwFlag != pWidget->GetFlags())
1491 pWidget->SetFlags(dwFlag);
1492 UpdateFormControl(pDocument, pFormControl, TRUE, FALSE, TRUE);
1500 FX_BOOL Field::doc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1502 if (!vp.IsGetting()) {
1505 vp << m_pJSDoc->GetCJSDoc();
1509 FX_BOOL Field::editable(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1511 ASSERT(m_pDocument != NULL);
1514 if (!m_bCanSet) return FALSE;
1521 CFX_PtrArray FieldArray;
1522 GetFormFields(m_FieldName, FieldArray);
1523 if (FieldArray.GetSize() <= 0) return FALSE;
1525 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1526 ASSERT(pFormField != NULL);
1528 if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX)
1531 if (pFormField->GetFieldFlags() & FIELDFLAG_EDIT)
1540 FX_BOOL Field::exportValues(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1542 ASSERT(m_pDocument != NULL);
1544 CFX_PtrArray FieldArray;
1545 GetFormFields(m_FieldName,FieldArray);
1546 if (FieldArray.GetSize() <= 0)
1549 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1550 if (pFormField->GetFieldType() != FIELDTYPE_CHECKBOX &&
1551 pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON)
1559 if (!vp.IsArrayObject())
1564 CJS_Array ExportValusArray(m_isolate);
1565 if (m_nFormControlIndex < 0)
1567 for (int i=0,sz=pFormField->CountControls(); i<sz; i++)
1569 CPDF_FormControl* pFormControl = pFormField->GetControl(i);
1570 ExportValusArray.SetElement(i, CJS_Value(m_isolate,pFormControl->GetExportValue().c_str()));
1575 if (m_nFormControlIndex >= pFormField->CountControls())
1578 CPDF_FormControl* pFormControl = pFormField->GetControl(m_nFormControlIndex);
1582 ExportValusArray.SetElement(0, CJS_Value(m_isolate,pFormControl->GetExportValue().c_str()));
1584 vp << ExportValusArray;
1589 FX_BOOL Field::fileSelect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1591 ASSERT(m_pDocument != NULL);
1593 CFX_PtrArray FieldArray;
1594 GetFormFields(m_FieldName, FieldArray);
1595 if (FieldArray.GetSize() <= 0)
1598 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1599 if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
1612 if (pFormField->GetFieldFlags() & FIELDFLAG_FILESELECT)
1620 FX_BOOL Field::fillColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1622 ASSERT(m_pDocument != NULL);
1624 CJS_Array crArray(m_isolate);
1626 CFX_PtrArray FieldArray;
1627 GetFormFields(m_FieldName, FieldArray);
1628 if (FieldArray.GetSize() <= 0)
1636 if (!vp.IsArrayObject())
1642 color::ConvertArrayToPWLColor(crArray, color);
1645 AddDelay_Color(FP_FILLCOLOR, color);
1649 Field::SetFillColor(m_pDocument, m_FieldName, m_nFormControlIndex, color);
1654 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1655 ASSERT(pFormField != NULL);
1657 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
1662 pFormControl->GetBackgroundColor(iColorType);
1665 if (iColorType == COLORTYPE_TRANSPARENT)
1667 color = CPWL_Color(COLORTYPE_TRANSPARENT);
1669 else if (iColorType == COLORTYPE_GRAY)
1671 color = CPWL_Color(COLORTYPE_GRAY, pFormControl->GetOriginalBackgroundColor(0));
1673 else if (iColorType == COLORTYPE_RGB)
1675 color = CPWL_Color(COLORTYPE_RGB, pFormControl->GetOriginalBackgroundColor(0),
1676 pFormControl->GetOriginalBackgroundColor(1),
1677 pFormControl->GetOriginalBackgroundColor(2));
1679 else if (iColorType == COLORTYPE_CMYK)
1681 color = CPWL_Color(COLORTYPE_CMYK, pFormControl->GetOriginalBackgroundColor(0),
1682 pFormControl->GetOriginalBackgroundColor(1),
1683 pFormControl->GetOriginalBackgroundColor(2),
1684 pFormControl->GetOriginalBackgroundColor(3));
1689 color::ConvertPWLColorToArray(color, crArray);
1696 void Field::SetFillColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color)
1701 FX_BOOL Field::hidden(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1703 ASSERT(m_pDocument != NULL);
1707 if (!m_bCanSet) return FALSE;
1714 AddDelay_Bool(FP_HIDDEN, bVP);
1718 Field::SetHidden(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
1723 CFX_PtrArray FieldArray;
1724 GetFormFields(m_FieldName,FieldArray);
1725 if (FieldArray.GetSize() <= 0) return FALSE;
1727 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1728 ASSERT(pFormField != NULL);
1730 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
1731 ASSERT(pInterForm != NULL);
1733 CPDFSDK_Widget* pWidget = pInterForm->GetWidget(GetSmartFieldControl(pFormField));
1734 if (!pWidget) return FALSE;
1736 FX_DWORD dwFlags = pWidget->GetFlags();
1738 if (ANNOTFLAG_INVISIBLE & dwFlags || ANNOTFLAG_HIDDEN & dwFlags)
1749 void Field::SetHidden(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
1751 ASSERT(pDocument != NULL);
1753 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
1754 ASSERT(pInterForm != NULL);
1756 CFX_PtrArray FieldArray;
1757 GetFormFields(pDocument, swFieldName, FieldArray);
1759 for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
1761 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
1762 ASSERT(pFormField != NULL);
1764 if (nControlIndex < 0)
1766 FX_BOOL bSet = FALSE;
1767 for (int j=0,jsz = pFormField->CountControls(); j<jsz; j++)
1769 if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormField->GetControl(j)))
1771 FX_DWORD dwFlags = pWidget->GetFlags();
1775 dwFlags &= (~ANNOTFLAG_INVISIBLE);
1776 dwFlags &= (~ANNOTFLAG_NOVIEW);
1777 dwFlags |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
1781 dwFlags &= (~ANNOTFLAG_INVISIBLE);
1782 dwFlags &= (~ANNOTFLAG_HIDDEN);
1783 dwFlags &= (~ANNOTFLAG_NOVIEW);
1784 dwFlags |= ANNOTFLAG_PRINT;
1787 if (dwFlags != pWidget->GetFlags())
1789 pWidget->SetFlags(dwFlags);
1796 UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
1800 if(nControlIndex >= pFormField->CountControls()) return;
1801 if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex))
1803 if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
1805 FX_DWORD dwFlags = pWidget->GetFlags();
1809 dwFlags &= (~ANNOTFLAG_INVISIBLE);
1810 dwFlags &= (~ANNOTFLAG_NOVIEW);
1811 dwFlags |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
1815 dwFlags &= (~ANNOTFLAG_INVISIBLE);
1816 dwFlags &= (~ANNOTFLAG_HIDDEN);
1817 dwFlags &= (~ANNOTFLAG_NOVIEW);
1818 dwFlags |= ANNOTFLAG_PRINT;
1821 if (dwFlags != pWidget->GetFlags())
1823 pWidget->SetFlags(dwFlags);
1824 UpdateFormControl(pDocument, pFormControl, TRUE, FALSE, TRUE);
1832 FX_BOOL Field::highlight(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1834 ASSERT(m_pDocument != NULL);
1838 if (!m_bCanSet) return FALSE;
1840 CFX_ByteString strMode;
1845 AddDelay_String(FP_HIGHLIGHT, strMode);
1849 Field::SetHighlight(m_pDocument, m_FieldName, m_nFormControlIndex, strMode);
1854 CFX_PtrArray FieldArray;
1855 GetFormFields(m_FieldName,FieldArray);
1856 if (FieldArray.GetSize() <= 0) return FALSE;
1858 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1859 ASSERT(pFormField != NULL);
1861 if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
1864 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
1865 if (!pFormControl) return FALSE;
1867 int eHM = pFormControl->GetHighlightingMode();
1870 case CPDF_FormControl::None:
1873 case CPDF_FormControl::Push:
1876 case CPDF_FormControl::Invert:
1879 case CPDF_FormControl::Outline:
1882 case CPDF_FormControl::Toggle:
1891 void Field::SetHighlight(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string)
1896 FX_BOOL Field::lineWidth(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1898 ASSERT(m_pDocument != NULL);
1902 if (!m_bCanSet) return FALSE;
1909 AddDelay_Int(FP_LINEWIDTH, iWidth);
1913 Field::SetLineWidth(m_pDocument, m_FieldName, m_nFormControlIndex, iWidth);
1918 CFX_PtrArray FieldArray;
1919 GetFormFields(m_FieldName,FieldArray);
1920 if (FieldArray.GetSize() <= 0) return FALSE;
1922 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
1923 ASSERT(pFormField != NULL);
1925 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
1926 if (!pFormControl) return FALSE;
1928 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
1929 ASSERT(pInterForm != NULL);
1931 if(!pFormField->CountControls()) return FALSE;
1933 CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormField->GetControl(0));
1934 if (!pWidget) return FALSE;
1936 vp << (int32_t)pWidget->GetBorderWidth();
1942 void Field::SetLineWidth(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
1944 ASSERT(pDocument != NULL);
1946 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
1947 ASSERT(pInterForm != NULL);
1949 CFX_PtrArray FieldArray;
1950 GetFormFields(pDocument, swFieldName, FieldArray);
1952 for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
1954 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
1955 ASSERT(pFormField != NULL);
1957 if (nControlIndex < 0)
1959 FX_BOOL bSet = FALSE;
1960 for (int j=0,jsz=pFormField->CountControls(); j<jsz; j++)
1962 CPDF_FormControl* pFormControl = pFormField->GetControl(j);
1963 ASSERT(pFormControl != NULL);
1965 if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
1967 if (number != pWidget->GetBorderWidth())
1969 pWidget->SetBorderWidth(number);
1974 if (bSet) UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
1978 if(nControlIndex >= pFormField->CountControls()) return;
1979 if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex))
1981 if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
1983 if (number != pWidget->GetBorderWidth())
1985 pWidget->SetBorderWidth(number);
1986 UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE);
1994 FX_BOOL Field::multiline(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
1996 ASSERT(m_pDocument != NULL);
2000 if (!m_bCanSet) return FALSE;
2007 AddDelay_Bool(FP_MULTILINE, bVP);
2011 Field::SetMultiline(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
2016 CFX_PtrArray FieldArray;
2017 GetFormFields(m_FieldName, FieldArray);
2018 if (FieldArray.GetSize() <= 0) return FALSE;
2020 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2021 ASSERT(pFormField != NULL);
2023 if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
2026 if (pFormField->GetFieldFlags() & FIELDFLAG_MULTILINE)
2035 void Field::SetMultiline(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
2040 FX_BOOL Field::multipleSelection(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2042 ASSERT(m_pDocument != NULL);
2046 if (!m_bCanSet) return FALSE;
2053 AddDelay_Bool(FP_MULTIPLESELECTION, bVP);
2057 Field::SetMultipleSelection(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
2062 CFX_PtrArray FieldArray;
2063 GetFormFields(m_FieldName,FieldArray);
2064 if (FieldArray.GetSize() <= 0) return FALSE;
2066 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2067 ASSERT(pFormField != NULL);
2069 if (pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
2072 if (pFormField->GetFieldFlags() & FIELDFLAG_MULTISELECT)
2081 void Field::SetMultipleSelection(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
2086 FX_BOOL Field::name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2088 if (!vp.IsGetting()) return FALSE;
2090 CFX_PtrArray FieldArray;
2091 GetFormFields(m_FieldName, FieldArray);
2092 if (FieldArray.GetSize() <= 0) return FALSE;
2099 FX_BOOL Field::numItems(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2101 CFX_PtrArray FieldArray;
2102 GetFormFields(m_FieldName, FieldArray);
2103 if (FieldArray.GetSize() <= 0) return FALSE;
2105 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2106 ASSERT(pFormField != NULL);
2108 if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX &&
2109 pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
2112 if (!vp.IsGetting()) return FALSE;
2114 vp << (int32_t)pFormField->CountOptions();
2119 FX_BOOL Field::page(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2121 if (!vp.IsGetting()) return FALSE;
2123 CFX_PtrArray FieldArray;
2124 GetFormFields(m_FieldName, FieldArray);
2125 if (FieldArray.GetSize() <= 0) return FALSE;
2127 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2128 if (!pFormField) return FALSE;
2130 ASSERT(m_pDocument != NULL);
2132 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
2133 ASSERT(pInterForm != NULL);
2135 CFX_PtrArray widgetArray;
2136 pInterForm->GetWidgets(pFormField, widgetArray);
2138 if (widgetArray.GetSize() > 0)
2140 CJS_Array PageArray(m_isolate);
2142 for (int i=0,sz=widgetArray.GetSize(); i<sz; i++)
2144 CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgetArray.GetAt(i);
2145 ASSERT(pWidget != NULL);
2147 CPDFSDK_PageView* pPageView = pWidget->GetPageView();
2151 PageArray.SetElement(i, CJS_Value(m_isolate,(int32_t)pPageView->GetPageIndex()));
2164 FX_BOOL Field::password(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2166 ASSERT(m_pDocument != NULL);
2170 if (!m_bCanSet) return FALSE;
2177 AddDelay_Bool(FP_PASSWORD, bVP);
2181 Field::SetPassword(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
2186 CFX_PtrArray FieldArray;
2187 GetFormFields(m_FieldName,FieldArray);
2188 if (FieldArray.GetSize() <= 0) return FALSE;
2190 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2191 ASSERT(pFormField != NULL);
2193 if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
2196 if (pFormField->GetFieldFlags() & FIELDFLAG_PASSWORD)
2205 void Field::SetPassword(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
2210 FX_BOOL Field::print(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2212 ASSERT(m_pDocument != NULL);
2214 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
2215 ASSERT(pInterForm != NULL);
2217 CFX_PtrArray FieldArray;
2218 GetFormFields(m_FieldName, FieldArray);
2219 if (FieldArray.GetSize() <= 0) return FALSE;
2223 if (!m_bCanSet) return FALSE;
2228 for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
2230 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
2231 ASSERT(pFormField != NULL);
2233 if (m_nFormControlIndex < 0)
2235 FX_BOOL bSet = FALSE;
2236 for (int j=0,jsz = pFormField->CountControls(); j<jsz; j++)
2238 if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormField->GetControl(j)))
2240 FX_DWORD dwFlags = pWidget->GetFlags();
2242 dwFlags |= ANNOTFLAG_PRINT;
2244 dwFlags &= ~ANNOTFLAG_PRINT;
2246 if (dwFlags != pWidget->GetFlags())
2248 pWidget->SetFlags(dwFlags);
2255 UpdateFormField(m_pDocument, pFormField, TRUE, FALSE, TRUE);
2259 if(m_nFormControlIndex >= pFormField->CountControls()) return FALSE;
2260 if (CPDF_FormControl* pFormControl = pFormField->GetControl(m_nFormControlIndex))
2262 if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
2264 FX_DWORD dwFlags = pWidget->GetFlags();
2266 dwFlags |= ANNOTFLAG_PRINT;
2268 dwFlags &= ~ANNOTFLAG_PRINT;
2270 if (dwFlags != pWidget->GetFlags())
2272 pWidget->SetFlags(dwFlags);
2273 UpdateFormControl(m_pDocument, pFormField->GetControl(m_nFormControlIndex), TRUE, FALSE, TRUE);
2282 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2283 ASSERT(pFormField != NULL);
2285 CPDFSDK_Widget* pWidget = pInterForm->GetWidget(GetSmartFieldControl(pFormField));
2286 if (!pWidget) return FALSE;
2288 if (pWidget->GetFlags() & ANNOTFLAG_PRINT)
2297 FX_BOOL Field::radiosInUnison(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2299 ASSERT(m_pDocument != NULL);
2301 CFX_PtrArray FieldArray;
2302 GetFormFields(m_FieldName,FieldArray);
2303 if (FieldArray.GetSize() <= 0) return FALSE;
2307 if (!m_bCanSet) return FALSE;
2315 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2316 ASSERT(pFormField != NULL);
2318 if (pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON)
2321 if (pFormField->GetFieldFlags() & FIELDFLAG_RADIOSINUNISON)
2330 FX_BOOL Field::readonly(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2332 ASSERT(m_pDocument != NULL);
2334 CFX_PtrArray FieldArray;
2335 GetFormFields(m_FieldName,FieldArray);
2336 if (FieldArray.GetSize() <= 0) return FALSE;
2340 if (!m_bCanSet) return FALSE;
2348 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2349 ASSERT(pFormField != NULL);
2351 if (pFormField->GetFieldFlags() & FIELDFLAG_READONLY)
2360 FX_BOOL Field::rect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2362 ASSERT(m_pDocument != NULL);
2366 if (!m_bCanSet) return FALSE;
2367 if (!vp.IsArrayObject())return FALSE;
2369 CJS_Array rcArray(m_isolate);
2371 CJS_Value Upper_Leftx(m_isolate), Upper_Lefty(m_isolate), Lower_Rightx(m_isolate), Lower_Righty(m_isolate);
2372 rcArray.GetElement(0, Upper_Leftx);
2373 rcArray.GetElement(1, Upper_Lefty);
2374 rcArray.GetElement(2, Lower_Rightx);
2375 rcArray.GetElement(3, Lower_Righty);
2377 FX_FLOAT pArray[4] = {0.0f,0.0f,0.0f,0.0f};
2378 pArray[0] = (FX_FLOAT)Upper_Leftx.ToInt();
2379 pArray[1] = (FX_FLOAT)Lower_Righty.ToInt();
2380 pArray[2] = (FX_FLOAT)Lower_Rightx.ToInt();
2381 pArray[3] = (FX_FLOAT)Upper_Lefty.ToInt();
2383 CPDF_Rect crRect(pArray);
2387 AddDelay_Rect(FP_RECT, crRect);
2391 Field::SetRect(m_pDocument, m_FieldName, m_nFormControlIndex, crRect);
2396 CFX_PtrArray FieldArray;
2397 GetFormFields(m_FieldName,FieldArray);
2398 if (FieldArray.GetSize() <= 0) return FALSE;
2400 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2401 ASSERT(pFormField != NULL);
2403 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
2404 ASSERT(pInterForm != NULL);
2406 CPDFSDK_Widget* pWidget = pInterForm->GetWidget(GetSmartFieldControl(pFormField));
2407 if (!pWidget) return FALSE;
2409 CFX_FloatRect crRect = pWidget->GetRect();
2410 CJS_Value Upper_Leftx(m_isolate),Upper_Lefty(m_isolate),Lower_Rightx(m_isolate),Lower_Righty(m_isolate);
2411 Upper_Leftx = (int32_t)crRect.left;
2412 Upper_Lefty = (int32_t)crRect.top;
2413 Lower_Rightx = (int32_t)crRect.right;
2414 Lower_Righty = (int32_t)crRect.bottom;
2416 CJS_Array rcArray(m_isolate);
2417 rcArray.SetElement(0,Upper_Leftx);
2418 rcArray.SetElement(1,Upper_Lefty);
2419 rcArray.SetElement(2,Lower_Rightx);
2420 rcArray.SetElement(3,Lower_Righty);
2428 void Field::SetRect(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPDF_Rect& rect)
2430 ASSERT(pDocument != NULL);
2432 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
2433 ASSERT(pInterForm != NULL);
2435 CFX_PtrArray FieldArray;
2436 GetFormFields(pDocument, swFieldName, FieldArray);
2438 for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
2440 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
2441 ASSERT(pFormField != NULL);
2443 if (nControlIndex < 0)
2445 FX_BOOL bSet = FALSE;
2446 for (int i=0, sz=pFormField->CountControls(); i<sz; i++)
2448 CPDF_FormControl* pFormControl = pFormField->GetControl(i);
2449 ASSERT(pFormControl != NULL);
2451 if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
2453 CPDF_Rect crRect = rect;
2455 CPDF_Page* pPDFPage = pWidget->GetPDFPage();
2456 ASSERT(pPDFPage != NULL);
2458 // CPDF_Page* pPDFPage = pPage->GetPage();
2459 // ASSERT(pPDFPage != NULL);
2461 crRect.Intersect(pPDFPage->GetPageBBox());
2463 if (!crRect.IsEmpty())
2465 CPDF_Rect rcOld = pWidget->GetRect();
2466 if (crRect.left != rcOld.left ||
2467 crRect.right != rcOld.right ||
2468 crRect.top != rcOld.top ||
2469 crRect.bottom != rcOld.bottom)
2471 pWidget->SetRect(crRect);
2478 if (bSet) UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
2482 if(nControlIndex >= pFormField->CountControls()) return;
2483 if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex))
2485 if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
2487 CPDF_Rect crRect = rect;
2489 CPDF_Page* pPDFPage = pWidget->GetPDFPage();
2490 ASSERT(pPDFPage != NULL);
2492 // CPDF_Page* pPDFPage = pPage->GetPage();
2493 // ASSERT(pPDFPage != NULL);
2495 crRect.Intersect(pPDFPage->GetPageBBox());
2497 if (!crRect.IsEmpty())
2499 CPDF_Rect rcOld = pWidget->GetRect();
2500 if (crRect.left != rcOld.left ||
2501 crRect.right != rcOld.right ||
2502 crRect.top != rcOld.top ||
2503 crRect.bottom != rcOld.bottom)
2505 pWidget->SetRect(crRect);
2506 UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE);
2515 FX_BOOL Field::required(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2517 ASSERT(m_pDocument != NULL);
2519 CFX_PtrArray FieldArray;
2520 GetFormFields(m_FieldName,FieldArray);
2521 if (FieldArray.GetSize() <= 0) return FALSE;
2525 if (!m_bCanSet) return FALSE;
2534 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2535 ASSERT(pFormField != NULL);
2537 if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON)
2540 if (pFormField->GetFieldFlags() & FIELDFLAG_REQUIRED)
2549 FX_BOOL Field::richText(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2551 ASSERT(m_pDocument != NULL);
2555 if (!m_bCanSet) return FALSE;
2562 AddDelay_Bool(FP_RICHTEXT, bVP);
2566 Field::SetRichText(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
2571 CFX_PtrArray FieldArray;
2572 GetFormFields(m_FieldName,FieldArray);
2573 if (FieldArray.GetSize() <= 0) return FALSE;
2575 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2576 ASSERT(pFormField != NULL);
2578 if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
2581 if (pFormField->GetFieldFlags() & FIELDFLAG_RICHTEXT)
2590 void Field::SetRichText(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
2595 FX_BOOL Field::richValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2600 if (!m_bCanSet) return FALSE;
2610 void Field::SetRichValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex)
2615 FX_BOOL Field::rotation(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2617 ASSERT(m_pDocument != NULL);
2621 if (!m_bCanSet) return FALSE;
2628 AddDelay_Int(FP_ROTATION, nVP);
2632 Field::SetRotation(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
2637 CFX_PtrArray FieldArray;
2638 GetFormFields(m_FieldName,FieldArray);
2639 if (FieldArray.GetSize() <= 0) return FALSE;
2641 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2642 ASSERT(pFormField != NULL);
2644 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
2645 if (!pFormControl)return FALSE;
2647 vp << (int32_t)pFormControl->GetRotation();
2653 void Field::SetRotation(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
2658 FX_BOOL Field::strokeColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2660 ASSERT(m_pDocument != NULL);
2664 if (!m_bCanSet) return FALSE;
2666 if (!vp.IsArrayObject())return FALSE;
2668 CJS_Array crArray(m_isolate);
2672 color::ConvertArrayToPWLColor(crArray, color);
2676 AddDelay_Color(FP_STROKECOLOR, color);
2680 Field::SetStrokeColor(m_pDocument, m_FieldName, m_nFormControlIndex, color);
2685 CFX_PtrArray FieldArray;
2686 GetFormFields(m_FieldName,FieldArray);
2687 if (FieldArray.GetSize() <= 0) return FALSE;
2689 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2690 ASSERT(pFormField != NULL);
2692 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
2693 if (!pFormControl)return FALSE;
2696 pFormControl->GetBorderColor(iColorType);
2700 if (iColorType == COLORTYPE_TRANSPARENT)
2702 color = CPWL_Color(COLORTYPE_TRANSPARENT);
2704 else if (iColorType == COLORTYPE_GRAY)
2706 color = CPWL_Color(COLORTYPE_GRAY, pFormControl->GetOriginalBorderColor(0));
2708 else if (iColorType == COLORTYPE_RGB)
2710 color = CPWL_Color(COLORTYPE_RGB, pFormControl->GetOriginalBorderColor(0),
2711 pFormControl->GetOriginalBorderColor(1),
2712 pFormControl->GetOriginalBorderColor(2));
2714 else if (iColorType == COLORTYPE_CMYK)
2716 color = CPWL_Color(COLORTYPE_CMYK, pFormControl->GetOriginalBorderColor(0),
2717 pFormControl->GetOriginalBorderColor(1),
2718 pFormControl->GetOriginalBorderColor(2),
2719 pFormControl->GetOriginalBorderColor(3));
2724 CJS_Array crArray(m_isolate);
2725 color::ConvertPWLColorToArray(color, crArray);
2732 void Field::SetStrokeColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color)
2737 FX_BOOL Field::style(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2739 ASSERT(m_pDocument != NULL);
2743 if (!m_bCanSet) return FALSE;
2745 CFX_ByteString csBCaption;
2750 AddDelay_String(FP_STYLE, csBCaption);
2754 Field::SetStyle(m_pDocument, m_FieldName, m_nFormControlIndex, csBCaption);
2759 CFX_PtrArray FieldArray;
2760 GetFormFields(m_FieldName,FieldArray);
2761 if (FieldArray.GetSize() <= 0) return FALSE;
2763 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2764 ASSERT(pFormField != NULL);
2766 if (pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON &&
2767 pFormField->GetFieldType() != FIELDTYPE_CHECKBOX)
2770 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
2771 if (!pFormControl) return FALSE;
2773 CFX_WideString csWCaption = pFormControl->GetNormalCaption();
2774 CFX_ByteString csBCaption;
2776 switch (csWCaption[0])
2779 csBCaption = "circle";
2782 csBCaption = "cross";
2785 csBCaption = "diamond";
2788 csBCaption = "square";
2791 csBCaption = "star";
2794 csBCaption = "check";
2803 void Field::SetStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex,
2804 const CFX_ByteString& string)
2809 FX_BOOL Field::submitName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2814 FX_BOOL Field::textColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2816 ASSERT(m_pDocument != NULL);
2820 if (!m_bCanSet) return FALSE;
2822 CJS_Array crArray(m_isolate);
2823 if (!vp.IsArrayObject())return FALSE;
2827 color::ConvertArrayToPWLColor(crArray, color);
2831 AddDelay_Color(FP_TEXTCOLOR, color);
2835 Field::SetTextColor(m_pDocument, m_FieldName, m_nFormControlIndex, color);
2840 CFX_PtrArray FieldArray;
2841 GetFormFields(m_FieldName,FieldArray);
2842 if (FieldArray.GetSize() <= 0) return FALSE;
2844 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2845 ASSERT(pFormField != NULL);
2847 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
2848 if (!pFormControl)return FALSE;
2852 CPDF_DefaultAppearance FieldAppearance = pFormControl->GetDefaultAppearance();
2853 FieldAppearance.GetColor(color, iColorType);
2855 ArgbDecode(color, a, r, g, b);
2857 CPWL_Color crRet = CPWL_Color(COLORTYPE_RGB, r / 255.0f,
2861 if (iColorType == COLORTYPE_TRANSPARENT)
2862 crRet = CPWL_Color(COLORTYPE_TRANSPARENT);
2864 CJS_Array crArray(m_isolate);
2865 color::ConvertPWLColorToArray(crRet, crArray);
2872 void Field::SetTextColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color)
2877 FX_BOOL Field::textFont(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2879 ASSERT(m_pDocument != NULL);
2883 if (!m_bCanSet) return FALSE;
2885 CFX_ByteString csFontName;
2887 if (csFontName.IsEmpty()) return FALSE;
2891 AddDelay_String(FP_TEXTFONT, csFontName);
2895 Field::SetTextFont(m_pDocument, m_FieldName, m_nFormControlIndex, csFontName);
2900 CFX_PtrArray FieldArray;
2901 GetFormFields(m_FieldName,FieldArray);
2902 if (FieldArray.GetSize() <= 0) return FALSE;
2904 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2905 ASSERT(pFormField != NULL);
2907 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
2908 if (!pFormControl)return FALSE;
2910 int nFieldType = pFormField->GetFieldType();
2912 if (nFieldType == FIELDTYPE_PUSHBUTTON ||
2913 nFieldType == FIELDTYPE_COMBOBOX ||
2914 nFieldType == FIELDTYPE_LISTBOX ||
2915 nFieldType == FIELDTYPE_TEXTFIELD)
2917 CPDF_Font * pFont = pFormControl->GetDefaultControlFont();
2918 if (!pFont) return FALSE;
2920 vp << pFont->GetBaseFont();
2929 void Field::SetTextFont(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string)
2934 FX_BOOL Field::textSize(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2936 ASSERT(m_pDocument != NULL);
2940 if (!m_bCanSet) return FALSE;
2947 AddDelay_Int(FP_TEXTSIZE, nVP);
2951 Field::SetTextSize(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
2956 CFX_PtrArray FieldArray;
2957 GetFormFields(m_FieldName,FieldArray);
2958 if (FieldArray.GetSize() <= 0) return FALSE;
2960 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2961 ASSERT(pFormField != NULL);
2963 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
2964 if (!pFormControl)return FALSE;
2966 CPDF_DefaultAppearance FieldAppearance = pFormControl->GetDefaultAppearance();
2968 CFX_ByteString csFontNameTag;
2970 FieldAppearance.GetFont(csFontNameTag,fFontSize);
2972 vp << (int)fFontSize;
2978 void Field::SetTextSize(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
2983 FX_BOOL Field::type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
2985 ASSERT(m_pDocument != NULL);
2987 if (!vp.IsGetting()) return FALSE;
2989 CFX_PtrArray FieldArray;
2990 GetFormFields(m_FieldName,FieldArray);
2991 if (FieldArray.GetSize() <= 0) return FALSE;
2993 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
2994 ASSERT(pFormField != NULL);
2996 switch (pFormField->GetFieldType())
2998 case FIELDTYPE_UNKNOWN:
3001 case FIELDTYPE_PUSHBUTTON:
3004 case FIELDTYPE_CHECKBOX:
3007 case FIELDTYPE_RADIOBUTTON:
3008 vp << L"radiobutton";
3010 case FIELDTYPE_COMBOBOX:
3013 case FIELDTYPE_LISTBOX:
3016 case FIELDTYPE_TEXTFIELD:
3019 case FIELDTYPE_SIGNATURE:
3030 FX_BOOL Field::userName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
3032 ASSERT(m_pDocument != NULL);
3036 if (!m_bCanSet) return FALSE;
3038 CFX_WideString swName;
3043 AddDelay_WideString(FP_USERNAME, swName);
3047 Field::SetUserName(m_pDocument, m_FieldName, m_nFormControlIndex, swName);
3052 CFX_PtrArray FieldArray;
3053 GetFormFields(m_FieldName,FieldArray);
3054 if (FieldArray.GetSize() <= 0) return FALSE;
3056 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3057 ASSERT(pFormField != NULL);
3059 vp << (CFX_WideString)pFormField->GetAlternateName();
3065 void Field::SetUserName(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_WideString& string)
3070 FX_BOOL Field::value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
3072 ASSERT(m_pDocument != NULL);
3076 if (!m_bCanSet) return FALSE;
3078 CJS_WideStringArray strArray;
3080 if (vp.IsArrayObject())
3082 CJS_Array ValueArray(m_isolate);
3083 vp.ConvertToArray(ValueArray);
3084 for (int i = 0,sz = ValueArray.GetLength(); i < sz; i++)
3086 CJS_Value ElementValue(m_isolate);
3087 ValueArray.GetElement(i, ElementValue);
3088 strArray.Add(ElementValue.ToCFXWideString());
3093 CFX_WideString swValue;
3096 strArray.Add(swValue);
3101 AddDelay_WideStringArray(FP_VALUE, strArray);
3105 Field::SetValue(m_pDocument, m_FieldName, m_nFormControlIndex, strArray);
3110 CFX_PtrArray FieldArray;
3111 GetFormFields(m_FieldName,FieldArray);
3112 if (FieldArray.GetSize() <= 0) return FALSE;
3114 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3115 ASSERT(pFormField != NULL);
3119 switch (pFormField->GetFieldType())
3121 case FIELDTYPE_PUSHBUTTON:
3123 case FIELDTYPE_COMBOBOX:
3124 case FIELDTYPE_TEXTFIELD:
3126 CFX_WideString swValue = pFormField->GetValue();
3130 if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet, bDot))
3141 case FIELDTYPE_LISTBOX:
3143 if (pFormField->CountSelectedItems() > 1)
3145 CJS_Array ValueArray(m_isolate);
3146 CJS_Value ElementValue(m_isolate);
3148 for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; i++)
3150 iIndex = pFormField->GetSelectedIndex(i);
3151 ElementValue = pFormField->GetOptionValue(iIndex).c_str();
3152 if (FXSYS_wcslen(ElementValue.ToCFXWideString().c_str()) == 0)
3153 ElementValue = pFormField->GetOptionLabel(iIndex).c_str();
3154 ValueArray.SetElement(i, ElementValue);
3160 CFX_WideString swValue = pFormField->GetValue();
3164 if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet, bDot))
3176 case FIELDTYPE_CHECKBOX:
3177 case FIELDTYPE_RADIOBUTTON:
3179 FX_BOOL bFind = FALSE;
3180 for (int i = 0 , sz = pFormField->CountControls(); i < sz; i++)
3182 if (pFormField->GetControl(i)->IsChecked())
3184 CFX_WideString swValue = pFormField->GetControl(i)->GetExportValue();
3187 if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet, bDot))
3208 vp << pFormField->GetValue();
3216 void Field::SetValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName,
3217 int nControlIndex, const CJS_WideStringArray& strArray)
3219 ASSERT(pDocument != NULL);
3221 if (strArray.GetSize() < 1) return;
3223 CFX_PtrArray FieldArray;
3224 GetFormFields(pDocument, swFieldName, FieldArray);
3226 for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
3228 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
3229 ASSERT(pFormField != NULL);
3231 if (pFormField->GetFullName().Compare(swFieldName) != 0)
3234 switch (pFormField->GetFieldType())
3236 case FIELDTYPE_TEXTFIELD:
3237 case FIELDTYPE_COMBOBOX:
3238 if (pFormField->GetValue() != strArray.GetAt(0))
3240 CFX_WideString WideString = strArray.GetAt(0);
3241 pFormField->SetValue(strArray.GetAt(0), TRUE);
3242 UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
3245 case FIELDTYPE_CHECKBOX: //mantis: 0004493
3246 case FIELDTYPE_RADIOBUTTON:
3248 if (pFormField->GetValue() != strArray.GetAt(0))
3250 pFormField->SetValue(strArray.GetAt(0), TRUE);
3251 UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
3255 case FIELDTYPE_LISTBOX:
3257 FX_BOOL bModified = FALSE;
3259 for (int i=0,sz=strArray.GetSize(); i<sz; i++)
3261 int iIndex = pFormField->FindOption(strArray.GetAt(i));
3263 if (!pFormField->IsItemSelected(iIndex))
3272 pFormField->ClearSelection(TRUE);
3273 for (int i=0,sz=strArray.GetSize(); i<sz; i++)
3275 int iIndex = pFormField->FindOption(strArray.GetAt(i));
3276 pFormField->SetItemSelection(iIndex, TRUE, TRUE);
3279 UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
3289 FX_BOOL Field::valueAsString(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
3291 ASSERT(m_pDocument != NULL);
3293 if (!vp.IsGetting()) return FALSE;
3295 CFX_PtrArray FieldArray;
3296 GetFormFields(m_FieldName,FieldArray);
3297 if (FieldArray.GetSize() <= 0) return FALSE;
3299 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3300 ASSERT(pFormField != NULL);
3302 if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON)
3305 if (pFormField->GetFieldType() == FIELDTYPE_CHECKBOX)
3307 if(!pFormField->CountControls()) return FALSE;
3309 if (pFormField->GetControl(0)->IsChecked())
3314 else if (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON && !(pFormField->GetFieldFlags() & FIELDFLAG_RADIOSINUNISON))
3316 for (int i=0, sz=pFormField->CountControls(); i<sz; i++)
3318 if (pFormField->GetControl(i)->IsChecked())
3320 vp << pFormField->GetControl(i)->GetExportValue().c_str();
3327 else if (pFormField->GetFieldType() == FIELDTYPE_LISTBOX && (pFormField->CountSelectedItems() > 1))
3332 vp << pFormField->GetValue().c_str();
3337 /* --------------------------------- methods --------------------------------- */
3339 FX_BOOL Field::browseForFileToSubmit(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3341 ASSERT(m_pDocument != NULL);
3343 CFX_PtrArray FieldArray;
3344 GetFormFields(m_FieldName, FieldArray);
3345 if (FieldArray.GetSize() <= 0) return FALSE;
3347 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3348 ASSERT(pFormField != NULL);
3350 CPDFDoc_Environment* pApp = m_pDocument->GetEnv();
3351 ASSERT(pApp != NULL);
3353 if ((pFormField->GetFieldFlags() & FIELDFLAG_FILESELECT) &&
3354 (pFormField->GetFieldType() == FIELDTYPE_TEXTFIELD))
3356 CFX_WideString wsFileName = pApp->JS_fieldBrowse();
3357 if(!wsFileName.IsEmpty())
3359 pFormField->SetValue(wsFileName);
3360 UpdateFormField(m_pDocument, pFormField, TRUE, TRUE, TRUE);
3370 FX_BOOL Field::buttonGetCaption(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3372 ASSERT(m_pDocument != NULL);
3375 int iSize = params.size();
3377 nface = params[0].ToInt();
3379 CFX_PtrArray FieldArray;
3380 GetFormFields(m_FieldName,FieldArray);
3381 if (FieldArray.GetSize() <= 0) return FALSE;
3383 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3384 ASSERT(pFormField != NULL);
3386 if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
3389 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
3390 if (!pFormControl)return FALSE;
3393 vRet = pFormControl->GetNormalCaption().c_str();
3394 else if (nface == 1)
3395 vRet = pFormControl->GetDownCaption().c_str();
3396 else if (nface == 2)
3397 vRet = pFormControl->GetRolloverCaption().c_str();
3404 //#pragma warning(disable: 4800)
3406 FX_BOOL Field::buttonGetIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3408 ASSERT(m_pDocument != NULL);
3411 int iSize = params.size();
3413 nface = params[0].ToInt();
3415 CFX_PtrArray FieldArray;
3416 GetFormFields(m_FieldName,FieldArray);
3417 if (FieldArray.GetSize() <= 0) return FALSE;
3419 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3420 ASSERT(pFormField != NULL);
3422 if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
3425 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
3426 if (!pFormControl)return FALSE;
3428 CJS_Context* pContext = (CJS_Context*)cc;
3429 ASSERT(pContext != NULL);
3431 CJS_Runtime* pRuntime = pContext->GetJSRuntime();
3432 ASSERT(pRuntime != NULL);
3434 JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Icon"));
3435 ASSERT(pObj.IsEmpty() == FALSE);
3437 CJS_Icon* pJS_Icon = (CJS_Icon*)JS_GetPrivate(pObj);
3438 ASSERT(pJS_Icon != NULL);
3440 Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject();
3441 ASSERT(pIcon != NULL);
3443 CPDF_Stream* pIconStream = NULL;
3445 pIconStream = pFormControl->GetNormalIcon();
3446 else if (nface == 1)
3447 pIconStream = pFormControl->GetDownIcon();
3448 else if (nface == 2)
3449 pIconStream = pFormControl->GetRolloverIcon();
3453 pIcon->SetStream(pIconStream);
3459 //#pragma warning(default: 4800)
3461 FX_BOOL Field::buttonImportIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3464 ASSERT(m_pDocument != NULL);
3466 CFX_PtrArray FieldArray;
3467 GetFormFields(m_FieldName,FieldArray);
3468 if (FieldArray.GetSize() <= 0) return FALSE;
3470 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3471 if (!pFormField)return FALSE;
3473 CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
3476 CFX_WideString sIconFileName = pEnv->JS_fieldBrowse();
3477 if (sIconFileName.IsEmpty())
3483 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
3484 ASSERT(pInterForm != NULL);
3486 CPDF_Stream* pStream = pInterForm->LoadImageFromFile(sIconFileName);
3493 CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
3494 if (!pFormControl)return FALSE;
3496 pFormControl->SetNormalIcon(pStream);
3497 UpdateFormControl(m_pDocument, pFormControl, TRUE, TRUE, TRUE);
3504 FX_BOOL Field::buttonSetCaption(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3509 FX_BOOL Field::buttonSetIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3514 FX_BOOL Field::checkThisBox(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3516 ASSERT(m_pDocument != NULL);
3518 if (!m_bCanSet) return FALSE;
3520 int iSize = params.size();
3524 int nWidget = params[0].ToInt();
3526 FX_BOOL bCheckit = TRUE;
3528 bCheckit = params[1].ToBool();
3530 CFX_PtrArray FieldArray;
3531 GetFormFields(m_FieldName,FieldArray);
3532 if (FieldArray.GetSize() <= 0) return FALSE;
3534 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3535 ASSERT(pFormField != NULL);
3537 if (pFormField->GetFieldType() != FIELDTYPE_CHECKBOX && pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON)
3539 if(nWidget <0 || nWidget >= pFormField->CountControls())
3541 if (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)
3542 pFormField->CheckControl(nWidget, bCheckit, TRUE);
3544 pFormField->CheckControl(nWidget, bCheckit, TRUE);
3546 UpdateFormField(m_pDocument, pFormField, TRUE, TRUE, TRUE);
3550 FX_BOOL Field::clearItems(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3555 FX_BOOL Field::defaultIsChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3557 ASSERT(m_pDocument != NULL);
3559 if (!m_bCanSet) return FALSE;
3561 int iSize = params.size();
3565 int nWidget = params[0].ToInt();
3567 CFX_PtrArray FieldArray;
3568 GetFormFields(m_FieldName,FieldArray);
3569 if (FieldArray.GetSize() <= 0) return FALSE;
3571 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3572 ASSERT(pFormField != NULL);
3574 if(nWidget <0 || nWidget >= pFormField->CountControls())
3579 if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX)
3580 || (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON))
3591 FX_BOOL Field::deleteItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3596 int JS_COMPARESTRING(CFX_WideString* ps1, CFX_WideString* ps2)
3598 ASSERT(ps1 != NULL);
3599 ASSERT(ps2 != NULL);
3601 return ps1->Compare(*ps2);
3605 FX_BOOL Field::getArray(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3607 ASSERT(m_pDocument != NULL);
3609 CFX_PtrArray FieldArray;
3610 GetFormFields(m_FieldName,FieldArray);
3611 if (FieldArray.GetSize() <= 0) return FALSE;
3613 CGW_ArrayTemplate<CFX_WideString*> swSort;
3615 for (int i=0,sz=FieldArray.GetSize(); i<sz; i++)
3617 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
3618 ASSERT(pFormField != NULL);
3620 swSort.Add(new CFX_WideString(pFormField->GetFullName()));
3623 swSort.Sort(JS_COMPARESTRING);
3625 CJS_Context* pContext = (CJS_Context*)cc;
3626 ASSERT(pContext != NULL);
3627 CJS_Runtime* pRuntime = pContext->GetJSRuntime();
3628 ASSERT(pRuntime != NULL);
3630 CJS_Array FormFieldArray(m_isolate);
3631 for (int j=0,jsz = swSort.GetSize(); j<jsz; j++)
3633 CFX_WideString* pStr = swSort.GetAt(j);
3635 JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Field"));
3636 ASSERT(pObj.IsEmpty() == FALSE);
3638 CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(pObj);
3639 ASSERT(pJSField != NULL);
3641 Field* pField = (Field*)pJSField->GetEmbedObject();
3642 ASSERT(pField != NULL);
3644 pField->AttachField(m_pJSDoc, *pStr);
3646 CJS_Value FormFieldValue(m_isolate);
3647 FormFieldValue = pJSField;
3648 FormFieldArray.SetElement(j, FormFieldValue);
3653 vRet = FormFieldArray;
3658 FX_BOOL Field::getItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3660 ASSERT(m_pDocument != NULL);
3661 int iSize = params.size();
3665 nIdx = params[0].ToInt();
3667 FX_BOOL bExport = TRUE;
3669 bExport = params[1].ToBool();
3671 CFX_PtrArray FieldArray;
3672 GetFormFields(m_FieldName,FieldArray);
3673 if (FieldArray.GetSize() <= 0) return FALSE;
3675 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3676 ASSERT(pFormField != NULL);
3678 if ((pFormField->GetFieldType() == FIELDTYPE_LISTBOX)
3679 || (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX))
3681 if (nIdx == -1 || nIdx > pFormField->CountOptions())
3682 nIdx = pFormField->CountOptions() -1;
3685 CFX_WideString strval = pFormField->GetOptionValue(nIdx);
3686 if (strval.IsEmpty())
3687 vRet = pFormField->GetOptionLabel(nIdx).c_str();
3689 vRet = strval.c_str();
3692 vRet = pFormField->GetOptionLabel(nIdx).c_str();
3700 FX_BOOL Field::getLock(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3705 FX_BOOL Field::insertItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3710 FX_BOOL Field::isBoxChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3712 ASSERT(m_pDocument != NULL);
3715 if (params.size() >= 1)
3716 nIndex = params[0].ToInt();
3718 CFX_PtrArray FieldArray;
3719 GetFormFields(m_FieldName,FieldArray);
3720 if (FieldArray.GetSize() <= 0) return FALSE;
3722 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3723 ASSERT(pFormField != NULL);
3725 if(nIndex <0 || nIndex >= pFormField->CountControls())
3731 if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX)
3732 || (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON))
3734 if (pFormField->GetControl(nIndex)->IsChecked() !=0 )
3745 FX_BOOL Field::isDefaultChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3747 ASSERT(m_pDocument != NULL);
3750 if (params.size() >= 1)
3751 nIndex = params[0].ToInt();
3753 CFX_PtrArray FieldArray;
3754 GetFormFields(m_FieldName,FieldArray);
3755 if (FieldArray.GetSize() <= 0) return FALSE;
3757 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3758 ASSERT(pFormField != NULL);
3760 if(nIndex <0 || nIndex >= pFormField->CountControls())
3765 if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX)
3766 || (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON))
3768 if (pFormField->GetControl(nIndex)->IsDefaultChecked() != 0)
3779 FX_BOOL Field::setAction(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3784 FX_BOOL Field::setFocus(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3786 ASSERT(m_pDocument != NULL);
3788 CFX_PtrArray FieldArray;
3789 GetFormFields(m_FieldName,FieldArray);
3790 if (FieldArray.GetSize() <= 0) return FALSE;
3792 CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
3793 ASSERT(pFormField != NULL);
3795 int32_t nCount = pFormField->CountControls();
3797 if (nCount < 1) return FALSE;
3799 CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
3800 ASSERT(pInterForm != NULL);
3802 CPDFSDK_Widget* pWidget = NULL;
3805 pWidget = pInterForm->GetWidget(pFormField->GetControl(0));
3809 CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
3811 CPDF_Page* pPage = (CPDF_Page*)pEnv->FFI_GetCurrentPage(m_pDocument->GetDocument());
3814 if (CPDFSDK_PageView* pCurPageView = m_pDocument->GetPageView(pPage))
3816 for (int32_t i=0; i<nCount; i++)
3818 if (CPDFSDK_Widget* pTempWidget = pInterForm->GetWidget(pFormField->GetControl(i)))
3820 if (pTempWidget->GetPDFPage() == pCurPageView->GetPDFPage())
3822 pWidget = pTempWidget;
3832 m_pDocument->SetFocusAnnot(pWidget);
3838 FX_BOOL Field::setItems(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3843 FX_BOOL Field::setLock(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3848 FX_BOOL Field::signatureGetModifications(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3853 FX_BOOL Field::signatureGetSeedValue(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3858 FX_BOOL Field::signatureInfo(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3863 FX_BOOL Field::signatureSetSeedValue(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3868 FX_BOOL Field::signatureSign(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3873 FX_BOOL Field::signatureValidate(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
3878 FX_BOOL Field::source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
3882 vp << (CJS_Object*)NULL;
3888 /////////////////////////////////////////// delay /////////////////////////////////////////////
3890 void Field::AddDelay_Int(enum FIELD_PROP prop, int32_t n)
3892 ASSERT(m_pJSDoc != NULL);
3894 CJS_DelayData* pNewData = new CJS_DelayData;
3895 pNewData->sFieldName = m_FieldName;
3896 pNewData->nControlIndex = m_nFormControlIndex;
3897 pNewData->eProp = prop;
3900 m_pJSDoc->AddDelayData(pNewData);
3903 void Field::AddDelay_Bool(enum FIELD_PROP prop,bool b)
3905 ASSERT(m_pJSDoc != NULL);
3907 CJS_DelayData* pNewData = new CJS_DelayData;
3908 pNewData->sFieldName = m_FieldName;
3909 pNewData->nControlIndex = m_nFormControlIndex;
3910 pNewData->eProp = prop;
3913 m_pJSDoc->AddDelayData(pNewData);
3916 void Field::AddDelay_String(enum FIELD_PROP prop, const CFX_ByteString& string)
3918 ASSERT(m_pJSDoc != NULL);
3920 CJS_DelayData* pNewData = new CJS_DelayData;
3921 pNewData->sFieldName = m_FieldName;
3922 pNewData->nControlIndex = m_nFormControlIndex;
3923 pNewData->eProp = prop;
3924 pNewData->string = string;
3926 m_pJSDoc->AddDelayData(pNewData);
3929 void Field::AddDelay_WideString(enum FIELD_PROP prop, const CFX_WideString& string)
3931 ASSERT(m_pJSDoc != NULL);
3933 CJS_DelayData* pNewData = new CJS_DelayData;
3934 pNewData->sFieldName = m_FieldName;
3935 pNewData->nControlIndex = m_nFormControlIndex;
3936 pNewData->eProp = prop;
3937 pNewData->widestring = string;
3939 m_pJSDoc->AddDelayData(pNewData);
3942 void Field::AddDelay_Rect(enum FIELD_PROP prop, const CPDF_Rect& rect)
3944 ASSERT(m_pJSDoc != NULL);
3946 CJS_DelayData* pNewData = new CJS_DelayData;
3947 pNewData->sFieldName = m_FieldName;
3948 pNewData->nControlIndex = m_nFormControlIndex;
3949 pNewData->eProp = prop;
3950 pNewData->rect = rect;
3952 m_pJSDoc->AddDelayData(pNewData);
3955 void Field::AddDelay_Color(enum FIELD_PROP prop, const CPWL_Color& color)
3957 ASSERT(m_pJSDoc != NULL);
3959 CJS_DelayData* pNewData = new CJS_DelayData;
3960 pNewData->sFieldName = m_FieldName;
3961 pNewData->nControlIndex = m_nFormControlIndex;
3962 pNewData->eProp = prop;
3963 pNewData->color = color;
3965 m_pJSDoc->AddDelayData(pNewData);
3968 void Field::AddDelay_WordArray(enum FIELD_PROP prop, const CFX_DWordArray& array)
3970 ASSERT(m_pJSDoc != NULL);
3972 CJS_DelayData* pNewData = new CJS_DelayData;
3973 pNewData->sFieldName = m_FieldName;
3974 pNewData->nControlIndex = m_nFormControlIndex;
3975 pNewData->eProp = prop;
3977 for (int i=0,sz=array.GetSize(); i<sz; i++)
3978 pNewData->wordarray.Add(array.GetAt(i));
3980 m_pJSDoc->AddDelayData(pNewData);
3983 void Field::AddDelay_WideStringArray(enum FIELD_PROP prop, const CJS_WideStringArray& array)
3985 ASSERT(m_pJSDoc != NULL);
3987 CJS_DelayData* pNewData = new CJS_DelayData;
3988 pNewData->sFieldName = m_FieldName;
3989 pNewData->nControlIndex = m_nFormControlIndex;
3990 pNewData->eProp = prop;
3991 for (int i=0,sz=array.GetSize(); i<sz; i++)
3992 pNewData->widestringarray.Add(array.GetAt(i));
3994 m_pJSDoc->AddDelayData(pNewData);
3997 void Field::DoDelay(CPDFSDK_Document* pDocument, CJS_DelayData* pData)
3999 ASSERT(pDocument != NULL);
4000 ASSERT(pData != NULL);
4002 switch (pData->eProp)
4005 Field::SetAlignment(pDocument, pData->sFieldName, pData->nControlIndex, pData->string);
4007 case FP_BORDERSTYLE:
4008 Field::SetBorderStyle(pDocument, pData->sFieldName, pData->nControlIndex, pData->string);
4010 case FP_BUTTONALIGNX:
4011 Field::SetButtonAlignX(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4013 case FP_BUTTONALIGNY:
4014 Field::SetButtonAlignY(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4016 case FP_BUTTONFITBOUNDS:
4017 Field::SetButtonFitBounds(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4019 case FP_BUTTONPOSITION:
4020 Field::SetButtonPosition(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4022 case FP_BUTTONSCALEHOW:
4023 Field::SetButtonScaleHow(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4025 case FP_BUTTONSCALEWHEN:
4026 Field::SetButtonScaleWhen(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4028 case FP_CALCORDERINDEX:
4029 Field::SetCalcOrderIndex(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4032 Field::SetCharLimit(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4035 Field::SetComb(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4037 case FP_COMMITONSELCHANGE:
4038 Field::SetCommitOnSelChange(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4040 case FP_CURRENTVALUEINDICES:
4041 Field::SetCurrentValueIndices(pDocument, pData->sFieldName, pData->nControlIndex, pData->wordarray);
4043 case FP_DEFAULTVALUE:
4044 Field::SetDefaultValue(pDocument, pData->sFieldName, pData->nControlIndex, pData->widestring);
4046 case FP_DONOTSCROLL:
4047 Field::SetDoNotScroll(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4050 Field::SetDisplay(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4053 Field::SetFillColor(pDocument, pData->sFieldName, pData->nControlIndex, pData->color);
4056 Field::SetHidden(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4059 Field::SetHighlight(pDocument, pData->sFieldName, pData->nControlIndex, pData->string);
4062 Field::SetLineWidth(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4065 Field::SetMultiline(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4067 case FP_MULTIPLESELECTION:
4068 Field::SetMultipleSelection(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4071 Field::SetPassword(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4074 Field::SetRect(pDocument, pData->sFieldName, pData->nControlIndex, pData->rect);
4077 Field::SetRichText(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
4082 Field::SetRotation(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4084 case FP_STROKECOLOR:
4085 Field::SetStrokeColor(pDocument, pData->sFieldName, pData->nControlIndex, pData->color);
4088 Field::SetStyle(pDocument, pData->sFieldName, pData->nControlIndex, pData->string);
4091 Field::SetTextColor(pDocument, pData->sFieldName, pData->nControlIndex, pData->color);
4094 Field::SetTextFont(pDocument, pData->sFieldName, pData->nControlIndex, pData->string);
4097 Field::SetTextSize(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
4100 Field::SetUserName(pDocument, pData->sFieldName, pData->nControlIndex, pData->widestring);
4103 Field::SetValue(pDocument, pData->sFieldName, pData->nControlIndex, pData->widestringarray);
4108 #define JS_FIELD_MINWIDTH 1
4109 #define JS_FIELD_MINHEIGHT 1
4111 void Field::AddField(CPDFSDK_Document* pDocument, int nPageIndex, int nFieldType,
4112 const CFX_WideString& sName, const CPDF_Rect& rcCoords)