5 //========================================================================
7 -FormField::FormField(PDFDoc *docA, Object *aobj, const Ref& aref, FormField *parentA, std::set<int> *usedParents, FormFieldType ty)
8 +FormField::FormField(PDFDoc *docA, Object *aobj, const Ref& aref, FormField *parentA, FormFieldType ty)
11 xref = doc->getXRef();
13 - Dict* dict = obj.getDict();
14 ref.num = ref.gen = 0;
23 +void FormField::init(std::set<int> *usedParents)
25 + Dict* dict = obj.getDict();
27 Object obj1 = dict->lookup("Kids");
30 //------------------------------------------------------------------------
32 //------------------------------------------------------------------------
33 -FormFieldButton::FormFieldButton(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents)
34 - : FormField(docA, aobj, ref, parent, usedParents, formButton)
35 +FormFieldButton::FormFieldButton(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent)
36 + : FormField(docA, aobj, ref, parent, formButton)
40 +void FormFieldButton::init(std::set<int> *usedParents)
42 + FormField::init(usedParents);
44 Dict* dict = obj.getDict();
48 //------------------------------------------------------------------------
50 //------------------------------------------------------------------------
51 -FormFieldText::FormFieldText(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents)
52 - : FormField(docA, aobj, ref, parent, usedParents, formText)
53 +FormFieldText::FormFieldText(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent)
54 + : FormField(docA, aobj, ref, parent, formText)
58 +void FormFieldText::init(std::set<int> *usedParents)
60 + FormField::init(usedParents);
62 Dict* dict = obj.getDict();
65 @@ -1076,9 +1091,15 @@
66 //------------------------------------------------------------------------
68 //------------------------------------------------------------------------
69 -FormFieldChoice::FormFieldChoice(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents)
70 - : FormField(docA, aobj, ref, parent, usedParents, formChoice)
71 +FormFieldChoice::FormFieldChoice(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent)
72 + : FormField(docA, aobj, ref, parent, formChoice)
76 +void FormFieldChoice::init(std::set<int> *usedParents)
78 + FormField::init(usedParents);
83 @@ -1379,11 +1400,17 @@
84 //------------------------------------------------------------------------
86 //------------------------------------------------------------------------
87 -FormFieldSignature::FormFieldSignature(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents)
88 - : FormField(docA, dict, ref, parent, usedParents, formSignature),
89 +FormFieldSignature::FormFieldSignature(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent)
90 + : FormField(docA, dict, ref, parent, formSignature),
91 signature_type(adbe_pkcs7_detached),
92 signature(nullptr), signature_info(nullptr)
96 +void FormFieldSignature::init(std::set<int> *usedParents)
98 + FormField::init(usedParents);
102 signature_info = new SignatureInfo();
103 @@ -1691,15 +1718,15 @@
105 Object obj2 = Form::fieldLookup(obj->getDict (), "FT");
106 if (obj2.isName("Btn")) {
107 - field = new FormFieldButton(docA, obj, pref, parent, usedParents);
108 + field = FormFieldButton::create(docA, obj, pref, parent, usedParents);
109 } else if (obj2.isName("Tx")) {
110 - field = new FormFieldText(docA, obj, pref, parent, usedParents);
111 + field = FormFieldText::create(docA, obj, pref, parent, usedParents);
112 } else if (obj2.isName("Ch")) {
113 - field = new FormFieldChoice(docA, obj, pref, parent, usedParents);
114 + field = FormFieldChoice::create(docA, obj, pref, parent, usedParents);
115 } else if (obj2.isName("Sig")) {
116 - field = new FormFieldSignature(docA, obj, pref, parent, usedParents);
117 + field = FormFieldSignature::create(docA, obj, pref, parent, usedParents);
118 } else { //we don't have an FT entry => non-terminal field
119 - field = new FormField(docA, obj, pref, parent, usedParents);
120 + field = FormField::create(docA, obj, pref, parent, usedParents);
127 //------------------------------------------------------------------------
131 - FormField(PDFDoc *docA, Object *aobj, const Ref& aref, FormField *parent, std::set<int> *usedParents, FormFieldType t=formUndef);
133 + FormField(PDFDoc *docA, Object *aobj, const Ref& aref, FormField *parent, FormFieldType t);
134 + void init(std::set<int> *usedParents);
136 + static FormField *create(PDFDoc *docA, Object *aobj, const Ref& aref, FormField *parent, std::set<int> *usedParents, FormFieldType t=formUndef)
138 + FormField *f = new FormField(docA, aobj, aref, parent, t);
139 + f->init(usedParents);
143 virtual ~FormField();
146 //------------------------------------------------------------------------
148 class FormFieldButton: public FormField {
150 - FormFieldButton(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents);
152 + FormFieldButton(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent);
153 + void init(std::set<int> *usedParents);
155 + static FormFieldButton *create(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents)
157 + FormFieldButton *f = new FormFieldButton(docA, dict, ref, parent);
158 + f->init(usedParents);
162 FormButtonType getButtonType () { return btype; }
165 //------------------------------------------------------------------------
167 class FormFieldText: public FormField {
169 - FormFieldText(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents);
171 + FormFieldText(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent);
172 + void init(std::set<int> *usedParents);
174 + static FormFieldText *create(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents)
176 + FormFieldText *f = new FormFieldText(docA, dict, ref, parent);
177 + f->init(usedParents);
181 GooString* getContent () { return content; }
182 GooString* getContentCopy ();
184 //------------------------------------------------------------------------
186 class FormFieldChoice: public FormField {
188 - FormFieldChoice(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents);
190 + FormFieldChoice(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent);
191 + void init(std::set<int> *usedParents);
193 + static FormFieldChoice *create(PDFDoc *docA, Object *aobj, const Ref& ref, FormField *parent, std::set<int> *usedParents)
195 + FormFieldChoice *f = new FormFieldChoice(docA, aobj, ref, parent);
196 + f->init(usedParents);
204 class FormFieldSignature: public FormField {
205 friend class FormWidgetSignature;
207 - FormFieldSignature(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents);
209 + FormFieldSignature(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent);
210 + void init(std::set<int> *usedParents);
212 + static FormFieldSignature *create(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents)
214 + FormFieldSignature *f = new FormFieldSignature(docA, dict, ref, parent);
215 + f->init(usedParents);
219 // Use -1 for now as validationTime
220 SignatureInfo *validateSignature(bool doVerifyCert, bool forceRevalidation, time_t validationTime);
225 scannedSpecialFlags = gFalse;
227 + encAlgorithm = cryptRC4;
228 permFlags = defPermFlags;
229 ownerPasswordOk = gFalse;