umya_spreadsheet/structs/drawing/charts/
manual_layout.rs1use super::Height;
3use super::HeightMode;
4use super::LayoutTarget;
5use super::Left;
6use super::LeftMode;
7use super::Top;
8use super::TopMode;
9use super::Width;
10use super::WidthMode;
11use crate::writer::driver::*;
12use crate::xml_read_loop;
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 ManualLayout {
20 height: Option<Height>,
21 height_mode: Option<HeightMode>,
22 layout_target: Option<LayoutTarget>,
23 left: Option<Left>,
24 left_mode: Option<LeftMode>,
25 top: Option<Top>,
26 top_mode: Option<TopMode>,
27 width: Option<Width>,
28 width_mode: Option<WidthMode>,
29}
30
31impl ManualLayout {
32 pub fn get_height(&self) -> Option<&Height> {
33 self.height.as_ref()
34 }
35
36 pub fn get_height_mut(&mut self) -> Option<&mut Height> {
37 self.height.as_mut()
38 }
39
40 pub fn set_height(&mut self, value: Height) -> &mut ManualLayout {
41 self.height = Some(value);
42 self
43 }
44
45 pub fn get_height_mode(&self) -> Option<&HeightMode> {
46 self.height_mode.as_ref()
47 }
48
49 pub fn get_height_mode_mut(&mut self) -> Option<&mut HeightMode> {
50 self.height_mode.as_mut()
51 }
52
53 pub fn set_height_mode(&mut self, value: HeightMode) -> &mut ManualLayout {
54 self.height_mode = Some(value);
55 self
56 }
57
58 pub fn get_layout_target(&self) -> Option<&LayoutTarget> {
59 self.layout_target.as_ref()
60 }
61
62 pub fn get_layout_target_mut(&mut self) -> Option<&mut LayoutTarget> {
63 self.layout_target.as_mut()
64 }
65
66 pub fn set_layout_target(&mut self, value: LayoutTarget) -> &mut ManualLayout {
67 self.layout_target = Some(value);
68 self
69 }
70
71 pub fn get_left(&self) -> Option<&Left> {
72 self.left.as_ref()
73 }
74
75 pub fn get_left_mut(&mut self) -> Option<&mut Left> {
76 self.left.as_mut()
77 }
78
79 pub fn set_left(&mut self, value: Left) -> &mut ManualLayout {
80 self.left = Some(value);
81 self
82 }
83
84 pub fn get_left_mode(&self) -> Option<&LeftMode> {
85 self.left_mode.as_ref()
86 }
87
88 pub fn get_left_mode_mut(&mut self) -> Option<&mut LeftMode> {
89 self.left_mode.as_mut()
90 }
91
92 pub fn set_left_mode(&mut self, value: LeftMode) -> &mut ManualLayout {
93 self.left_mode = Some(value);
94 self
95 }
96
97 pub fn get_top(&self) -> Option<&Top> {
98 self.top.as_ref()
99 }
100
101 pub fn get_top_mut(&mut self) -> Option<&mut Top> {
102 self.top.as_mut()
103 }
104
105 pub fn set_top(&mut self, value: Top) -> &mut ManualLayout {
106 self.top = Some(value);
107 self
108 }
109
110 pub fn get_top_mode(&self) -> Option<&TopMode> {
111 self.top_mode.as_ref()
112 }
113
114 pub fn get_top_mode_mut(&mut self) -> Option<&mut TopMode> {
115 self.top_mode.as_mut()
116 }
117
118 pub fn set_top_mode(&mut self, value: TopMode) -> &mut ManualLayout {
119 self.top_mode = Some(value);
120 self
121 }
122
123 pub fn get_width(&self) -> Option<&Width> {
124 self.width.as_ref()
125 }
126
127 pub fn get_width_mut(&mut self) -> Option<&mut Width> {
128 self.width.as_mut()
129 }
130
131 pub fn set_width(&mut self, value: Width) -> &mut ManualLayout {
132 self.width = Some(value);
133 self
134 }
135
136 pub fn get_width_mode(&self) -> Option<&WidthMode> {
137 self.width_mode.as_ref()
138 }
139
140 pub fn get_width_mode_mut(&mut self) -> Option<&mut WidthMode> {
141 self.width_mode.as_mut()
142 }
143
144 pub fn set_width_mode(&mut self, value: WidthMode) -> &mut ManualLayout {
145 self.width_mode = Some(value);
146 self
147 }
148
149 pub fn is_empty(&self) -> bool {
150 self.height.is_none()
151 && self.height_mode.is_none()
152 && self.layout_target.is_none()
153 && self.left.is_none()
154 && self.left_mode.is_none()
155 && self.top.is_none()
156 && self.top_mode.is_none()
157 && self.width.is_none()
158 && self.width_mode.is_none()
159 }
160
161 pub(crate) fn set_attributes<R: std::io::BufRead>(
162 &mut self,
163 reader: &mut Reader<R>,
164 _e: &BytesStart,
165 ) {
166 xml_read_loop!(
167 reader,
168 Event::Empty(ref e) => match e.name().0 {
169 b"c:h" => {
170 let mut obj = Height::default();
171 obj.set_attributes(reader, e);
172 self.set_height(obj);
173 }
174 b"c:hMode" => {
175 let mut obj = HeightMode::default();
176 obj.set_attributes(reader, e);
177 self.set_height_mode(obj);
178 }
179 b"c:layoutTarget" => {
180 let mut obj = LayoutTarget::default();
181 obj.set_attributes(reader, e);
182 self.set_layout_target(obj);
183 }
184 b"c:x" => {
185 let mut obj = Left::default();
186 obj.set_attributes(reader, e);
187 self.set_left(obj);
188 }
189 b"c:xMode" => {
190 let mut obj = LeftMode::default();
191 obj.set_attributes(reader, e);
192 self.set_left_mode(obj);
193 }
194 b"c:y" => {
195 let mut obj = Top::default();
196 obj.set_attributes(reader, e);
197 self.set_top(obj);
198 }
199 b"c:yMode" => {
200 let mut obj = TopMode::default();
201 obj.set_attributes(reader, e);
202 self.set_top_mode(obj);
203 }
204 b"c:w" => {
205 let mut obj = Width::default();
206 obj.set_attributes(reader, e);
207 self.set_width(obj);
208 }
209 b"c:wMode" => {
210 let mut obj = WidthMode::default();
211 obj.set_attributes(reader, e);
212 self.set_width_mode(obj);
213 }
214 _ => (),
215 },
216 Event::End(ref e) => {
217 if e.name().0 == b"c:manualLayout" {
218 return;
219 }
220 },
221 Event::Eof => panic!("Error: Could not find {} end element", "c:manualLayout"),
222 );
223 }
224
225 pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
226 write_start_tag(writer, "c:manualLayout", vec![], false);
228
229 if let Some(v) = &self.height_mode {
231 v.write_to(writer);
232 }
233
234 if let Some(v) = &self.left_mode {
236 v.write_to(writer);
237 }
238
239 if let Some(v) = &self.top_mode {
241 v.write_to(writer);
242 }
243
244 if let Some(v) = &self.width_mode {
246 v.write_to(writer);
247 }
248
249 if let Some(v) = &self.height {
251 v.write_to(writer);
252 }
253
254 if let Some(v) = &self.left {
256 v.write_to(writer);
257 }
258
259 if let Some(v) = &self.top {
261 v.write_to(writer);
262 }
263
264 if let Some(v) = &self.width {
266 v.write_to(writer);
267 }
268
269 if let Some(v) = &self.layout_target {
271 v.write_to(writer);
272 }
273
274 write_end_tag(writer, "c:manualLayout");
275 }
276}