umya_spreadsheet/structs/drawing/
effect_style.rs1use 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 if let Some(v) = &self.effect_list {
116 v.write_to(writer);
117 }
118
119 if let Some(v) = &self.scene_3d_type {
121 v.write_to(writer);
122 }
123
124 if let Some(v) = &self.shape_3d_type {
126 v.write_to(writer);
127 }
128
129 write_end_tag(writer, "a:effectStyle");
130 }
131}