diff options
Diffstat (limited to 'source/pdf/pdf-field.c')
-rw-r--r-- | source/pdf/pdf-field.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/source/pdf/pdf-field.c b/source/pdf/pdf-field.c index 2a2f07cc..127d92a5 100644 --- a/source/pdf/pdf-field.c +++ b/source/pdf/pdf-field.c @@ -53,3 +53,52 @@ int pdf_field_type(pdf_document *doc, pdf_obj *obj) else return PDF_WIDGET_TYPE_NOT_WIDGET; } + +void pdf_set_field_type(pdf_document *doc, pdf_obj *obj, int type) +{ + int setbits = 0; + int clearbits = 0; + char *typename = NULL; + + switch(type) + { + case PDF_WIDGET_TYPE_PUSHBUTTON: + typename = "Btn"; + setbits = Ff_Pushbutton; + break; + case PDF_WIDGET_TYPE_CHECKBOX: + typename = "Btn"; + clearbits = Ff_Pushbutton; + setbits = Ff_Radio; + break; + case PDF_WIDGET_TYPE_RADIOBUTTON: + typename = "Btn"; + clearbits = (Ff_Pushbutton|Ff_Radio); + break; + case PDF_WIDGET_TYPE_TEXT: + typename = "Tx"; + break; + case PDF_WIDGET_TYPE_LISTBOX: + typename = "Ch"; + clearbits = Ff_Combo; + break; + case PDF_WIDGET_TYPE_COMBOBOX: + typename = "Ch"; + setbits = Ff_Combo; + break; + case PDF_WIDGET_TYPE_SIGNATURE: + typename = "Sig"; + break; + } + + if (typename) + pdf_dict_puts_drop(obj, "FT", pdf_new_name(doc, typename)); + + if (setbits != 0 || clearbits != 0) + { + int bits = pdf_to_int(pdf_dict_gets(obj, "Ff")); + bits &= ~clearbits; + bits |= setbits; + pdf_dict_puts_drop(obj, "Ff", pdf_new_int(doc, bits)); + } +} |