umya_spreadsheet/structs/drawing/
effect_list.rs1use std::io::Cursor;
3
4use quick_xml::{
5 Reader,
6 Writer,
7 events::{
8 BytesStart,
9 Event,
10 },
11};
12
13use super::{
14 Glow,
15 OuterShadow,
16 SoftEdge,
17};
18use crate::{
19 reader::driver::xml_read_loop,
20 writer::driver::{
21 write_end_tag,
22 write_start_tag,
23 },
24};
25
26#[derive(Clone, Default, Debug)]
27pub struct EffectList {
28 glow: Option<Box<Glow>>,
29 outer_shadow: Option<Box<OuterShadow>>,
30 soft_edge: Option<Box<SoftEdge>>,
31}
32
33impl EffectList {
34 #[inline]
35 #[must_use]
36 pub fn glow(&self) -> Option<&Glow> {
37 self.glow.as_deref()
38 }
39
40 #[inline]
41 #[must_use]
42 #[deprecated(since = "3.0.0", note = "Use glow()")]
43 pub fn get_glow(&self) -> Option<&Glow> {
44 self.glow()
45 }
46
47 #[inline]
48 pub fn glow_mut(&mut self) -> Option<&mut Glow> {
49 self.glow.as_deref_mut()
50 }
51
52 #[inline]
53 #[deprecated(since = "3.0.0", note = "Use glow_mut()")]
54 pub fn get_glow_mut(&mut self) -> Option<&mut Glow> {
55 self.glow_mut()
56 }
57
58 #[inline]
59 pub fn set_glow(&mut self, value: Glow) {
60 self.glow = Some(Box::new(value));
61 }
62
63 #[inline]
64 #[must_use]
65 pub fn outer_shadow(&self) -> Option<&OuterShadow> {
66 self.outer_shadow.as_deref()
67 }
68
69 #[inline]
70 #[must_use]
71 #[deprecated(since = "3.0.0", note = "Use outer_shadow()")]
72 pub fn get_outer_shadow(&self) -> Option<&OuterShadow> {
73 self.outer_shadow()
74 }
75
76 #[inline]
77 pub fn outer_shadow_mut(&mut self) -> Option<&mut OuterShadow> {
78 self.outer_shadow.as_deref_mut()
79 }
80
81 #[inline]
82 #[deprecated(since = "3.0.0", note = "Use outer_shadow_mut()")]
83 pub fn get_outer_shadow_mut(&mut self) -> Option<&mut OuterShadow> {
84 self.outer_shadow_mut()
85 }
86
87 #[inline]
88 pub fn set_outer_shadow(&mut self, value: OuterShadow) {
89 self.outer_shadow = Some(Box::new(value));
90 }
91
92 #[inline]
93 #[must_use]
94 pub fn soft_edge(&self) -> Option<&SoftEdge> {
95 self.soft_edge.as_deref()
96 }
97
98 #[inline]
99 #[must_use]
100 #[deprecated(since = "3.0.0", note = "Use soft_edge()")]
101 pub fn get_soft_edge(&self) -> Option<&SoftEdge> {
102 self.soft_edge()
103 }
104
105 #[inline]
106 pub fn soft_edge_mut(&mut self) -> Option<&mut SoftEdge> {
107 self.soft_edge.as_deref_mut()
108 }
109
110 #[inline]
111 #[deprecated(since = "3.0.0", note = "Use soft_edge_mut()")]
112 pub fn get_soft_edge_mut(&mut self) -> Option<&mut SoftEdge> {
113 self.soft_edge_mut()
114 }
115
116 #[inline]
117 pub fn set_soft_edge(&mut self, value: SoftEdge) {
118 self.soft_edge = Some(Box::new(value));
119 }
120
121 pub(crate) fn set_attributes<R: std::io::BufRead>(
122 &mut self,
123 reader: &mut Reader<R>,
124 _e: &BytesStart,
125 empty_flag: bool,
126 ) {
127 if empty_flag {
128 return;
129 }
130
131 xml_read_loop!(
132 reader,
133 Event::Empty(ref e) => {
134 if e.name().into_inner() == b"a:softEdge" {
135 let mut obj = SoftEdge::default();
136 obj.set_attributes(reader, e);
137 self.set_soft_edge(obj);
138 }
139 },
140 Event::Start(ref e) => {
141 match e.name().into_inner() {
142 b"a:glow" => {
143 let mut obj = Glow::default();
144 obj.set_attributes(reader, e);
145 self.set_glow(obj);
146 }
147 b"a:outerShdw" => {
148 let mut obj = OuterShadow::default();
149 obj.set_attributes(reader, e);
150 self.set_outer_shadow(obj);
151 }
152 _ => (),
153 }
154 },
155 Event::End(ref e) => {
156 if e.name().into_inner() == b"a:effectLst" {
157 return;
158 }
159 },
160 Event::Eof => panic!("Error: Could not find {} end element", "a:effectLst")
161 );
162 }
163
164 pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
165 let empty_flag =
166 self.glow.is_none() && self.outer_shadow.is_none() && self.soft_edge.is_none();
167
168 write_start_tag(writer, "a:effectLst", vec![], empty_flag);
170
171 if !empty_flag {
172 if let Some(v) = &self.glow {
174 v.write_to(writer);
175 }
176
177 if let Some(v) = &self.outer_shadow {
179 v.write_to(writer);
180 }
181
182 if let Some(v) = &self.soft_edge {
184 v.write_to(writer);
185 }
186
187 write_end_tag(writer, "a:effectLst");
188 }
189 }
190}