umya_spreadsheet/structs/drawing/charts/
layout.rs1use super::ManualLayout;
3use crate::writer::driver::*;
4use crate::xml_read_loop;
5use quick_xml::events::{BytesStart, Event};
6use quick_xml::Reader;
7use quick_xml::Writer;
8use std::io::Cursor;
9
10#[derive(Clone, Default, Debug)]
11pub struct Layout {
12 manual_layout: Option<ManualLayout>,
13}
14
15impl Layout {
16 pub fn get_manual_layout(&self) -> Option<&ManualLayout> {
17 self.manual_layout.as_ref()
18 }
19
20 pub fn get_manual_layout_mut(&mut self) -> Option<&mut ManualLayout> {
21 self.manual_layout.as_mut()
22 }
23
24 pub fn set_manual_layout(&mut self, value: ManualLayout) -> &mut Layout {
25 self.manual_layout = Some(value);
26 self
27 }
28
29 pub fn is_empty(&self) -> bool {
30 self.manual_layout.is_none()
31 }
32
33 pub(crate) fn set_attributes<R: std::io::BufRead>(
34 &mut self,
35 reader: &mut Reader<R>,
36 _e: &BytesStart,
37 empty_flag: bool,
38 ) {
39 if empty_flag {
40 return;
41 }
42
43 xml_read_loop!(
44 reader,
45 Event::Start(ref e) => {
46 if e.name().into_inner() == b"c:manualLayout" {
47 let mut obj = ManualLayout::default();
48 obj.set_attributes(reader, e);
49 self.set_manual_layout(obj);
50 }
51 },
52 Event::End(ref e) => {
53 if e.name().into_inner() == b"c:layout" {
54 return;
55 }
56 },
57 Event::Eof => panic!("Error: Could not find {} end element", "c:layout"),
58 );
59 }
60
61 pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
62 if self.is_empty() {
63 write_start_tag(writer, "c:layout", vec![], true);
65 } else {
66 write_start_tag(writer, "c:layout", vec![], false);
68
69 if let Some(v) = &self.manual_layout {
71 v.write_to(writer);
72 }
73
74 write_end_tag(writer, "c:layout");
75 }
76 }
77}