Skip to main content

umya_spreadsheet/structs/drawing/spreadsheet/
non_visual_shape_properties.rs

1// xdr:nvSpPr
2use std::io::Cursor;
3
4use quick_xml::{
5    Reader,
6    Writer,
7    events::{
8        BytesStart,
9        Event,
10    },
11};
12
13use super::NonVisualDrawingProperties;
14use crate::{
15    reader::driver::xml_read_loop,
16    writer::driver::{
17        write_end_tag,
18        write_start_tag,
19    },
20};
21
22#[derive(Clone, Default, Debug)]
23pub struct NonVisualShapeProperties {
24    non_visual_drawing_properties: NonVisualDrawingProperties,
25}
26
27impl NonVisualShapeProperties {
28    #[inline]
29    #[must_use]
30    pub fn non_visual_drawing_properties(&self) -> &NonVisualDrawingProperties {
31        &self.non_visual_drawing_properties
32    }
33
34    #[inline]
35    #[must_use]
36    #[deprecated(since = "3.0.0", note = "Use non_visual_drawing_properties()")]
37    pub fn get_non_visual_drawing_properties(&self) -> &NonVisualDrawingProperties {
38        self.non_visual_drawing_properties()
39    }
40
41    #[inline]
42    pub fn non_visual_drawing_properties_mut(&mut self) -> &mut NonVisualDrawingProperties {
43        &mut self.non_visual_drawing_properties
44    }
45
46    #[inline]
47    #[deprecated(since = "3.0.0", note = "Use non_visual_drawing_properties_mut()")]
48    pub fn get_non_visual_drawing_properties_mut(&mut self) -> &mut NonVisualDrawingProperties {
49        self.non_visual_drawing_properties_mut()
50    }
51
52    #[inline]
53    pub fn set_non_visual_drawing_properties(&mut self, value: NonVisualDrawingProperties) {
54        self.non_visual_drawing_properties = value;
55    }
56
57    pub(crate) fn set_attributes<R: std::io::BufRead>(
58        &mut self,
59        reader: &mut Reader<R>,
60        _e: &BytesStart,
61    ) {
62        xml_read_loop!(
63            reader,
64            Event::Empty(ref e) => {
65                if e.name().into_inner() == b"xdr:cNvPr" {
66                    self.non_visual_drawing_properties
67                        .set_attributes(reader, e, true);
68                }
69            },
70            Event::Start(ref e) => {
71                if e.name().into_inner() == b"xdr:cNvPr" {
72                    self.non_visual_drawing_properties
73                        .set_attributes(reader, e, false);
74                }
75            },
76            Event::End(ref e) => {
77                if e.name().into_inner() == b"xdr:nvSpPr" {
78                    return;
79                }
80            },
81            Event::Eof => panic!("Error: Could not find {} end element", "xdr:nvSpPr")
82        );
83    }
84
85    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>, ole_id: usize) {
86        // xdr:nvSpPr
87        write_start_tag(writer, "xdr:nvSpPr", vec![], false);
88
89        // xdr:cNvPr
90        self.non_visual_drawing_properties.write_to(writer, ole_id);
91
92        // xdr:cNvSpPr
93        write_start_tag(writer, "xdr:cNvSpPr", vec![], true);
94
95        write_end_tag(writer, "xdr:nvSpPr");
96    }
97}