From bc98ee497b9082aeec64415fc2e94eee442819d9 Mon Sep 17 00:00:00 2001 From: Emulator000 Date: Wed, 23 Sep 2020 23:48:35 +0200 Subject: Some field flags utility and moved some structs to utils module, added "required" and "readonly" properties for some field state and fixed some structs --- src/utils.rs | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/utils.rs (limited to 'src/utils.rs') diff --git a/src/utils.rs b/src/utils.rs new file mode 100644 index 0000000..7ff4e41 --- /dev/null +++ b/src/utils.rs @@ -0,0 +1,49 @@ +use lopdf::{Dictionary, Object}; + +bitflags! { + pub struct FieldFlags: u32 { + const READONLY = 0x1; + const REQUIRED = 0x2; + } +} + +bitflags! { + pub struct ButtonFlags: u32 { + const NO_TOGGLE_TO_OFF = 0x8000; + const RADIO = 0x10000; + const PUSHBUTTON = 0x20000; + const RADIO_IN_UNISON = 0x4000000; + + } +} + +bitflags! { + pub struct ChoiceFlags: u32 { + const COBMO = 0x20000; + const EDIT = 0x40000; + const SORT = 0x80000; + const MULTISELECT = 0x200000; + const DO_NOT_SPELLCHECK = 0x800000; + const COMMIT_ON_CHANGE = 0x8000000; + } +} + +pub fn is_read_only(field: &Dictionary) -> bool { + let flags = FieldFlags::from_bits_truncate(get_field_flags(field)); + + flags.intersects(FieldFlags::READONLY) +} + +pub fn is_required(field: &Dictionary) -> bool { + let flags = FieldFlags::from_bits_truncate(get_field_flags(field)); + + flags.intersects(FieldFlags::REQUIRED) +} + +pub fn get_field_flags(field: &Dictionary) -> u32 { + field + .get(b"Ff") + .unwrap_or(&Object::Integer(0)) + .as_i64() + .unwrap() as u32 +} -- cgit v1.2.3