umya_spreadsheet/structs/drawing/spreadsheet/
shape_style.rs

1// xdr:style
2use super::super::StyleMatrixReferenceType;
3use crate::reader::driver::*;
4use crate::writer::driver::*;
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 ShapeStyle {
12    line_reference: Option<Box<StyleMatrixReferenceType>>,
13    fill_reference: Option<Box<StyleMatrixReferenceType>>,
14    effect_reference: Option<Box<StyleMatrixReferenceType>>,
15    font_reference: Option<Box<StyleMatrixReferenceType>>,
16}
17
18impl ShapeStyle {
19    #[inline]
20    pub fn get_line_reference(&self) -> Option<&StyleMatrixReferenceType> {
21        self.line_reference.as_deref()
22    }
23
24    #[inline]
25    pub fn set_line_reference(&mut self, value: StyleMatrixReferenceType) {
26        self.line_reference = Some(Box::new(value));
27    }
28
29    #[inline]
30    pub fn get_fill_reference(&self) -> Option<&StyleMatrixReferenceType> {
31        self.fill_reference.as_deref()
32    }
33
34    #[inline]
35    pub fn set_fill_reference(&mut self, value: StyleMatrixReferenceType) {
36        self.fill_reference = Some(Box::new(value));
37    }
38
39    #[inline]
40    pub fn get_effect_reference(&self) -> Option<&StyleMatrixReferenceType> {
41        self.effect_reference.as_deref()
42    }
43
44    #[inline]
45    pub fn set_effect_reference(&mut self, value: StyleMatrixReferenceType) {
46        self.effect_reference = Some(Box::new(value));
47    }
48
49    #[inline]
50    pub fn get_font_reference(&self) -> Option<&StyleMatrixReferenceType> {
51        self.font_reference.as_deref()
52    }
53
54    #[inline]
55    pub fn set_font_reference(&mut self, value: StyleMatrixReferenceType) {
56        self.font_reference = Some(Box::new(value));
57    }
58
59    pub(crate) fn set_attributes<R: std::io::BufRead>(
60        &mut self,
61        reader: &mut Reader<R>,
62        _e: &BytesStart,
63    ) {
64        xml_read_loop!(
65            reader,
66            Event::Start(ref e) => {
67                match e.name().into_inner() {
68                    b"a:lnRef" => {
69                        let mut style_matrix_reference_type = StyleMatrixReferenceType::default();
70                        style_matrix_reference_type.set_attributes(reader, e, false);
71                        self.set_line_reference(style_matrix_reference_type);
72                    }
73                    b"a:fillRef" => {
74                        let mut style_matrix_reference_type = StyleMatrixReferenceType::default();
75                        style_matrix_reference_type.set_attributes(reader, e, false);
76                        self.set_fill_reference(style_matrix_reference_type);
77                    }
78                    b"a:effectRef" => {
79                        let mut style_matrix_reference_type = StyleMatrixReferenceType::default();
80                        style_matrix_reference_type.set_attributes(reader, e, false);
81                        self.set_effect_reference(style_matrix_reference_type);
82                    }
83                    b"a:fontRef" => {
84                        let mut style_matrix_reference_type = StyleMatrixReferenceType::default();
85                        style_matrix_reference_type.set_attributes(reader, e, false);
86                        self.set_font_reference(style_matrix_reference_type);
87                    }
88                    _ => (),
89                }
90            },
91            Event::Empty(ref e) => {
92                match e.name().into_inner() {
93                    b"a:lnRef" => {
94                        let mut style_matrix_reference_type = StyleMatrixReferenceType::default();
95                        style_matrix_reference_type.set_attributes(reader, e, true);
96                        self.set_line_reference(style_matrix_reference_type);
97                    }
98                    b"a:fillRef" => {
99                        let mut style_matrix_reference_type = StyleMatrixReferenceType::default();
100                        style_matrix_reference_type.set_attributes(reader, e, true);
101                        self.set_fill_reference(style_matrix_reference_type);
102                    }
103                    b"a:effectRef" => {
104                        let mut style_matrix_reference_type = StyleMatrixReferenceType::default();
105                        style_matrix_reference_type.set_attributes(reader, e, true);
106                        self.set_effect_reference(style_matrix_reference_type);
107                    }
108                    b"a:fontRef" => {
109                        let mut style_matrix_reference_type = StyleMatrixReferenceType::default();
110                        style_matrix_reference_type.set_attributes(reader, e, true);
111                        self.set_font_reference(style_matrix_reference_type);
112                    }
113                    _ => (),
114                }
115            },
116            Event::End(ref e) => {
117                if e.name().into_inner() == b"xdr:style" {
118                    return;
119                }
120            },
121            Event::Eof => panic!("Error: Could not find {} end element", "xdr:style")
122        );
123    }
124
125    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
126        // xdr:style
127        write_start_tag(writer, "xdr:style", vec![], false);
128
129        // a:lnRef
130        if let Some(style) = &self.line_reference {
131            style.write_to(writer, "a:lnRef");
132        }
133
134        // a:fillRef
135        if let Some(style) = &self.fill_reference {
136            style.write_to(writer, "a:fillRef");
137        }
138
139        // a:effectRef
140        if let Some(style) = &self.effect_reference {
141            style.write_to(writer, "a:effectRef");
142        }
143
144        // a:fontRef
145        if let Some(style) = &self.font_reference {
146            style.write_to(writer, "a:fontRef");
147        }
148
149        write_end_tag(writer, "xdr:style");
150    }
151}