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