umya_spreadsheet/structs/drawing/charts/
shape_properties.rs1use super::super::EffectList;
3use super::super::NoFill;
4use super::super::Outline;
5use super::super::PatternFill;
6use super::super::PresetGeometry;
7use super::super::Scene3DType;
8use super::super::Shape3DType;
9use super::super::SolidFill;
10use super::super::Transform2D;
11use crate::reader::driver::*;
12use crate::writer::driver::*;
13use quick_xml::events::{BytesStart, Event};
14use quick_xml::Reader;
15use quick_xml::Writer;
16use std::io::Cursor;
17
18#[derive(Clone, Default, Debug)]
19pub struct ShapeProperties {
20 pattern_fill: Option<PatternFill>,
21 transform2d: Option<Transform2D>,
22 preset_geometry: Option<PresetGeometry>,
23 solid_fill: Option<SolidFill>,
24 no_fill: Option<NoFill>,
25 outline: Option<Outline>,
26 effect_list: Option<EffectList>,
27 scene_3d_type: Option<Scene3DType>,
28 shape_3d_type: Option<Shape3DType>,
29}
30
31impl ShapeProperties {
32 pub fn get_pattern_fill(&self) -> Option<&PatternFill> {
33 self.pattern_fill.as_ref()
34 }
35
36 pub fn get_pattern_fill_mut(&mut self) -> Option<&mut PatternFill> {
37 self.pattern_fill.as_mut()
38 }
39
40 pub fn set_pattern_fill(&mut self, value: PatternFill) -> &mut Self {
41 self.pattern_fill = Some(value);
42 self
43 }
44
45 pub fn get_transform2d(&self) -> Option<&Transform2D> {
46 self.transform2d.as_ref()
47 }
48
49 pub fn get_transform2d_mut(&mut self) -> Option<&mut Transform2D> {
50 self.transform2d.as_mut()
51 }
52
53 pub fn set_transform2d(&mut self, value: Transform2D) -> &mut Self {
54 self.transform2d = Some(value);
55 self
56 }
57
58 pub fn get_geometry(&self) -> Option<&PresetGeometry> {
59 self.preset_geometry.as_ref()
60 }
61
62 pub fn get_geometry_mut(&mut self) -> Option<&mut PresetGeometry> {
63 self.preset_geometry.as_mut()
64 }
65
66 pub fn set_geometry(&mut self, value: PresetGeometry) -> &mut Self {
67 self.preset_geometry = Some(value);
68 self
69 }
70
71 pub fn get_solid_fill(&self) -> Option<&SolidFill> {
72 self.solid_fill.as_ref()
73 }
74
75 pub fn get_solid_fill_mut(&mut self) -> Option<&mut SolidFill> {
76 self.solid_fill.as_mut()
77 }
78
79 pub fn set_solid_fill(&mut self, value: SolidFill) -> &mut Self {
80 self.solid_fill = Some(value);
81 self
82 }
83
84 pub fn get_no_fill(&self) -> Option<&NoFill> {
85 self.no_fill.as_ref()
86 }
87
88 pub fn get_no_fill_mut(&mut self) -> Option<&mut NoFill> {
89 self.no_fill.as_mut()
90 }
91
92 pub fn set_no_fill(&mut self, value: NoFill) -> &mut Self {
93 self.no_fill = Some(value);
94 self
95 }
96
97 pub fn get_outline(&self) -> Option<&Outline> {
98 self.outline.as_ref()
99 }
100
101 pub fn get_outline_mut(&mut self) -> Option<&mut Outline> {
102 self.outline.as_mut()
103 }
104
105 pub fn set_outline(&mut self, value: Outline) -> &mut Self {
106 self.outline = Some(value);
107 self
108 }
109
110 pub fn get_effect_list(&self) -> Option<&EffectList> {
111 self.effect_list.as_ref()
112 }
113
114 pub fn get_effect_list_mut(&mut self) -> Option<&mut EffectList> {
115 self.effect_list.as_mut()
116 }
117
118 pub fn set_effect_list(&mut self, value: EffectList) -> &mut Self {
119 self.effect_list = Some(value);
120 self
121 }
122
123 pub fn get_scene_3d_type(&self) -> Option<&Scene3DType> {
124 self.scene_3d_type.as_ref()
125 }
126
127 pub fn get_scene_3d_type_mut(&mut self) -> Option<&mut Scene3DType> {
128 self.scene_3d_type.as_mut()
129 }
130
131 pub fn set_scene_3d_type(&mut self, value: Scene3DType) -> &mut Self {
132 self.scene_3d_type = Some(value);
133 self
134 }
135
136 pub fn get_shape_3d_type(&self) -> Option<&Shape3DType> {
137 self.shape_3d_type.as_ref()
138 }
139
140 pub fn get_shape_3d_type_mut(&mut self) -> Option<&mut Shape3DType> {
141 self.shape_3d_type.as_mut()
142 }
143
144 pub fn set_shape_3d_type(&mut self, value: Shape3DType) -> &mut Self {
145 self.shape_3d_type = Some(value);
146 self
147 }
148
149 pub(crate) fn set_attributes<R: std::io::BufRead>(
150 &mut self,
151 reader: &mut Reader<R>,
152 _e: &BytesStart,
153 ) {
154 xml_read_loop!(
155 reader,
156 Event::Start(ref e) => {
157 match e.name().0 {
158 b"a:pattFill" => {
159 let mut obj = PatternFill::default();
160 obj.set_attributes(reader, e);
161 self.set_pattern_fill(obj);
162 }
163 b"a:xfrm" => {
164 let mut obj = Transform2D::default();
165 obj.set_attributes(reader, e);
166 self.set_transform2d(obj);
167 }
168 b"a:prstGeom" => {
169 let mut obj = PresetGeometry::default();
170 obj.set_attributes(reader, e);
171 self.set_geometry(obj);
172 }
173 b"a:ln" => {
174 let mut obj = Outline::default();
175 obj.set_attributes(reader, e);
176 self.set_outline(obj);
177 }
178 b"a:solidFill" => {
179 let mut obj = SolidFill::default();
180 obj.set_attributes(reader, e);
181 self.set_solid_fill(obj);
182 }
183 b"a:effectLst" => {
184 let mut obj = EffectList::default();
185 obj.set_attributes(reader, e, false);
186 self.set_effect_list(obj);
187 }
188 b"a:scene3d" => {
189 let mut obj = Scene3DType::default();
190 obj.set_attributes(reader, e);
191 self.set_scene_3d_type(obj);
192 }
193 b"a:sp3d" => {
194 let mut obj = Shape3DType::default();
195 obj.set_attributes(reader, e);
196 self.set_shape_3d_type(obj);
197 }
198 _ => (),
199 }
200 },
201 Event::Empty(ref e) => {
202 if e.name().0 == b"a:noFill" {
203 let mut obj = NoFill::default();
204 obj.set_attributes(reader, e, true);
205 self.set_no_fill(obj);
206 }
207 },
208 Event::End(ref e) => {
209 if e.name().0 == b"c:spPr" {
210 return;
211 }
212 },
213 Event::Eof => panic!("Error: Could not find {} end element", "c:spPr")
214 );
215 }
216
217 pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
218 write_start_tag(writer, "c:spPr", vec![], false);
220
221 if let Some(v) = &self.pattern_fill {
223 v.write_to(writer);
224 }
225
226 if let Some(v) = &self.transform2d {
228 v.write_to(writer);
229 }
230
231 if let Some(v) = &self.preset_geometry {
233 v.write_to(writer);
234 }
235
236 if let Some(v) = &self.solid_fill {
238 v.write_to(writer);
239 }
240
241 if let Some(v) = &self.no_fill {
243 v.write_to(writer);
244 }
245
246 if let Some(v) = &self.outline {
248 v.write_to(writer);
249 }
250
251 if let Some(v) = &self.effect_list {
253 v.write_to(writer);
254 }
255
256 if let Some(v) = &self.scene_3d_type {
258 v.write_to(writer);
259 }
260
261 if let Some(v) = &self.shape_3d_type {
263 v.write_to(writer);
264 }
265
266 write_end_tag(writer, "c:spPr");
267 }
268}