umya_spreadsheet/structs/drawing/
effect_style.rs

1use super::EffectList;
2use super::Scene3DType;
3use super::Shape3DType;
4use crate::reader::driver::*;
5use crate::writer::driver::*;
6use quick_xml::events::{BytesStart, Event};
7use quick_xml::Reader;
8use quick_xml::Writer;
9use std::io::Cursor;
10use std::vec;
11
12#[derive(Clone, Default, Debug)]
13pub struct EffectStyle {
14    effect_list: Option<Box<EffectList>>,
15    scene_3d_type: Option<Box<Scene3DType>>,
16    shape_3d_type: Option<Box<Shape3DType>>,
17}
18
19impl EffectStyle {
20    #[inline]
21    pub fn get_effect_list(&self) -> Option<&EffectList> {
22        self.effect_list.as_deref()
23    }
24
25    #[inline]
26    pub fn get_effect_list_mut(&mut self) -> Option<&mut EffectList> {
27        self.effect_list.as_deref_mut()
28    }
29
30    #[inline]
31    pub fn set_effect_list(&mut self, value: EffectList) -> &mut Self {
32        self.effect_list = Some(Box::new(value));
33        self
34    }
35
36    #[inline]
37    pub fn get_scene_3d_type(&self) -> Option<&Scene3DType> {
38        self.scene_3d_type.as_deref()
39    }
40
41    #[inline]
42    pub fn get_scene_3d_type_mut(&mut self) -> Option<&mut Scene3DType> {
43        self.scene_3d_type.as_deref_mut()
44    }
45
46    #[inline]
47    pub fn set_scene_3d_type(&mut self, value: Scene3DType) -> &mut Self {
48        self.scene_3d_type = Some(Box::new(value));
49        self
50    }
51
52    #[inline]
53    pub fn get_shape_3d_type(&self) -> Option<&Shape3DType> {
54        self.shape_3d_type.as_deref()
55    }
56
57    #[inline]
58    pub fn get_shape_3d_type_mut(&mut self) -> Option<&mut Shape3DType> {
59        self.shape_3d_type.as_deref_mut()
60    }
61
62    #[inline]
63    pub fn set_shape_3d_type(&mut self, value: Shape3DType) -> &mut Self {
64        self.shape_3d_type = Some(Box::new(value));
65        self
66    }
67
68    pub(crate) fn set_attributes<R: std::io::BufRead>(
69        &mut self,
70        reader: &mut Reader<R>,
71        _e: &BytesStart,
72    ) {
73        xml_read_loop!(
74            reader,
75            Event::Start(ref e) => {
76                match e.name().into_inner() {
77                b"a:effectLst" => {
78                    let mut obj = EffectList::default();
79                    obj.set_attributes(reader, e, false);
80                    self.effect_list = Some(Box::new(obj));
81                }
82                b"a:scene3d" => {
83                    let mut obj = Scene3DType::default();
84                    obj.set_attributes(reader, e);
85                    self.scene_3d_type = Some(Box::new(obj));
86                }
87                b"a:sp3d" => {
88                    let mut obj = Shape3DType::default();
89                    obj.set_attributes(reader, e);
90                    self.shape_3d_type = Some(Box::new(obj));
91                }
92                _ => (),
93                }
94            },
95            Event::Empty(ref e) => {
96                if e.name().into_inner() == b"a:effectLst" {
97                    let mut obj = EffectList::default();
98                    obj.set_attributes(reader, e, true);
99                    self.set_effect_list(obj);
100                }
101            },
102            Event::End(ref e) => {
103                if e.name().into_inner() == b"a:effectStyle" {
104                    return
105                }
106            },
107            Event::Eof => panic!("Error: Could not find {} end element", "a:effectStyle")
108        );
109    }
110
111    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
112        write_start_tag(writer, "a:effectStyle", vec![], false);
113
114        // a:effectLst
115        if let Some(v) = &self.effect_list {
116            v.write_to(writer);
117        }
118
119        // a:scene3d
120        if let Some(v) = &self.scene_3d_type {
121            v.write_to(writer);
122        }
123
124        // a:sp3d
125        if let Some(v) = &self.shape_3d_type {
126            v.write_to(writer);
127        }
128
129        write_end_tag(writer, "a:effectStyle");
130    }
131}