Skip to main content

umya_spreadsheet/structs/drawing/
adjust_value_list.rs

1// a:avLst
2use std::io::Cursor;
3
4use quick_xml::{
5    Reader,
6    Writer,
7    events::{
8        BytesStart,
9        Event,
10    },
11};
12
13use super::shape_guide::ShapeGuide;
14use crate::{
15    reader::driver::{
16        get_attribute,
17        xml_read_loop,
18    },
19    writer::driver::{
20        write_end_tag,
21        write_start_tag,
22    },
23};
24
25#[derive(Clone, Default, Debug)]
26pub struct AdjustValueList {
27    shape_guide_collection: Vec<ShapeGuide>,
28}
29
30impl AdjustValueList {
31    #[inline]
32    #[must_use]
33    pub fn shape_guide_collection(&self) -> &[ShapeGuide] {
34        &self.shape_guide_collection
35    }
36
37    #[inline]
38    #[must_use]
39    #[deprecated(since = "3.0.0", note = "Use shape_guide_collection()")]
40    pub fn get_shape_guide_collection(&self) -> &[ShapeGuide] {
41        self.shape_guide_collection()
42    }
43
44    #[inline]
45    pub fn shape_guide_collection_mut(&mut self) -> &mut Vec<ShapeGuide> {
46        &mut self.shape_guide_collection
47    }
48
49    #[inline]
50    #[deprecated(since = "3.0.0", note = "Use shape_guide_collection_mut()")]
51    pub fn get_shape_guide_collection_mut(&mut self) -> &mut Vec<ShapeGuide> {
52        self.shape_guide_collection_mut()
53    }
54
55    #[inline]
56    pub fn set_shape_guide_collection(&mut self, value: impl Into<Vec<ShapeGuide>>) {
57        self.shape_guide_collection = value.into();
58    }
59
60    #[inline]
61    pub fn add_shape_guide_collection(&mut self, value: ShapeGuide) {
62        self.shape_guide_collection.push(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    ) {
70        xml_read_loop!(
71            reader,
72            Event::Empty(ref e) => {
73                if e.name().into_inner() == b"a:gd" {
74                    let mut shape_guide = ShapeGuide::default();
75                    shape_guide.set_name(get_attribute(e, b"name").unwrap());
76                    shape_guide.set_fmla(get_attribute(e, b"fmla").unwrap());
77                    self.add_shape_guide_collection(shape_guide);
78                }
79            },
80            Event::End(ref e) => {
81                if e.name().into_inner() == b"a:avLst" {
82                    return;
83                }
84            },
85            Event::Eof => panic!("Error: Could not find {} end element", "a:avLst")
86        );
87    }
88
89    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
90        // a:avLst
91        if self.shape_guide_collection.is_empty() {
92            write_start_tag(writer, "a:avLst", vec![], true);
93        } else {
94            write_start_tag(writer, "a:avLst", vec![], false);
95            for gd in &self.shape_guide_collection {
96                gd.write_to(writer);
97            }
98            write_end_tag(writer, "a:avLst");
99        }
100    }
101}