vb6parse/language/controls/
image.rs1use crate::language::controls::{
2 Appearance, BorderStyle, DragMode, MousePointer, OLEDragMode, OLEDropMode,
3};
4
5use crate::parsers::Properties;
6
7use bstr::BString;
8use image::DynamicImage;
9use serde::Serialize;
10
11#[derive(Debug, PartialEq, Clone)]
18pub struct ImageProperties {
19 pub appearance: Appearance,
20 pub border_style: BorderStyle,
21 pub data_field: BString,
22 pub data_format: BString,
23 pub data_member: BString,
24 pub data_source: BString,
25 pub drag_icon: Option<DynamicImage>,
26 pub drag_mode: DragMode,
27 pub enabled: bool,
28 pub height: i32,
29 pub left: i32,
30 pub mouse_icon: Option<DynamicImage>,
31 pub mouse_pointer: MousePointer,
32 pub ole_drag_mode: OLEDragMode,
33 pub ole_drop_mode: OLEDropMode,
34 pub picture: Option<DynamicImage>,
35 pub stretch: bool,
36 pub tool_tip_text: BString,
37 pub top: i32,
38 pub visible: bool,
39 pub whats_this_help_id: i32,
40 pub width: i32,
41}
42
43impl Default for ImageProperties {
44 fn default() -> Self {
45 ImageProperties {
46 appearance: Appearance::ThreeD,
47 border_style: BorderStyle::None,
48 data_field: "".into(),
49 data_format: "".into(),
50 data_member: "".into(),
51 data_source: "".into(),
52 drag_icon: None,
53 drag_mode: DragMode::Manual,
54 enabled: true,
55 height: 975,
56 left: 1080,
57 mouse_icon: None,
58 mouse_pointer: MousePointer::Default,
59 ole_drag_mode: OLEDragMode::Manual,
60 ole_drop_mode: OLEDropMode::default(),
61 picture: None,
62 stretch: false,
63 tool_tip_text: "".into(),
64 top: 960,
65 visible: true,
66 whats_this_help_id: 0,
67 width: 615,
68 }
69 }
70}
71
72impl Serialize for ImageProperties {
73 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
74 where
75 S: serde::Serializer,
76 {
77 use serde::ser::SerializeStruct;
78
79 let mut s = serializer.serialize_struct("ImageProperties", 21)?;
80 s.serialize_field("appearance", &self.appearance)?;
81 s.serialize_field("border_style", &self.border_style)?;
82 s.serialize_field("data_field", &self.data_field)?;
83 s.serialize_field("data_format", &self.data_format)?;
84 s.serialize_field("data_member", &self.data_member)?;
85 s.serialize_field("data_source", &self.data_source)?;
86
87 let option_text = self.drag_icon.as_ref().map(|_| "Some(DynamicImage)");
88
89 s.serialize_field("drag_icon", &option_text)?;
90 s.serialize_field("drag_mode", &self.drag_mode)?;
91 s.serialize_field("enabled", &self.enabled)?;
92 s.serialize_field("height", &self.height)?;
93 s.serialize_field("left", &self.left)?;
94
95 let option_text = self.mouse_icon.as_ref().map(|_| "Some(DynamicImage)");
96
97 s.serialize_field("mouse_icon", &option_text)?;
98 s.serialize_field("mouse_pointer", &self.mouse_pointer)?;
99 s.serialize_field("ole_drag_mode", &self.ole_drag_mode)?;
100 s.serialize_field("ole_drop_mode", &self.ole_drop_mode)?;
101
102 let option_text = self.picture.as_ref().map(|_| "Some(DynamicImage)");
103
104 s.serialize_field("picture", &option_text)?;
105 s.serialize_field("stretch", &self.stretch)?;
106 s.serialize_field("tool_tip_text", &self.tool_tip_text)?;
107 s.serialize_field("top", &self.top)?;
108 s.serialize_field("visible", &self.visible)?;
109 s.serialize_field("whats_this_help_id", &self.whats_this_help_id)?;
110 s.serialize_field("width", &self.width)?;
111
112 s.end()
113 }
114}
115
116impl<'a> From<Properties<'a>> for ImageProperties {
117 fn from(prop: Properties<'a>) -> Self {
118 let mut image_prop = ImageProperties::default();
119
120 image_prop.appearance = prop.get_property(b"Appearance".into(), image_prop.appearance);
121 image_prop.border_style = prop.get_property(b"BorderStyle".into(), image_prop.border_style);
122 image_prop.data_field = match prop.get(b"DataField".into()) {
123 Some(data_field) => data_field.into(),
124 None => image_prop.data_field,
125 };
126 image_prop.data_format = match prop.get(b"DataFormat".into()) {
127 Some(data_format) => data_format.into(),
128 None => image_prop.data_format,
129 };
130 image_prop.data_member = match prop.get(b"DataMember".into()) {
131 Some(data_member) => data_member.into(),
132 None => image_prop.data_member,
133 };
134 image_prop.data_source = match prop.get(b"DataSource".into()) {
135 Some(data_source) => data_source.into(),
136 None => image_prop.data_source,
137 };
138
139 image_prop.drag_mode = prop.get_property(b"DragMode".into(), image_prop.drag_mode);
142 image_prop.enabled = prop.get_bool(b"Enabled".into(), image_prop.enabled);
143 image_prop.height = prop.get_i32(b"Height".into(), image_prop.height);
144 image_prop.left = prop.get_i32(b"Left".into(), image_prop.left);
145
146 image_prop.mouse_pointer =
149 prop.get_property(b"MousePointer".into(), image_prop.mouse_pointer);
150 image_prop.ole_drag_mode =
151 prop.get_property(b"OLEDragMode".into(), image_prop.ole_drag_mode);
152 image_prop.ole_drop_mode =
153 prop.get_property(b"OLEDropMode".into(), image_prop.ole_drop_mode);
154
155 image_prop.stretch = prop.get_bool(b"Stretch".into(), image_prop.stretch);
158 image_prop.tool_tip_text = match prop.get("ToolTipText".into()) {
159 Some(tool_tip_text) => tool_tip_text.into(),
160 None => "".into(),
161 };
162 image_prop.top = prop.get_i32(b"Top".into(), image_prop.top);
163 image_prop.visible = prop.get_bool(b"Visible".into(), image_prop.visible);
164 image_prop.whats_this_help_id =
165 prop.get_i32(b"WhatsThisHelpID".into(), image_prop.whats_this_help_id);
166 image_prop.width = prop.get_i32(b"Width".into(), image_prop.width);
167
168 image_prop
169 }
170}