umya_spreadsheet/structs/drawing/
font_scheme.rs

1// a:fontScheme
2use super::super::StringValue;
3use super::FontCollectionType;
4use crate::reader::driver::*;
5use crate::writer::driver::*;
6use quick_xml::events::{BytesStart, Event};
7use quick_xml::Reader;
8use quick_xml::Writer;
9use std::io::Cursor;
10
11#[derive(Clone, Default, Debug)]
12pub struct FontScheme {
13    name: StringValue,
14    major_font: FontCollectionType,
15    minor_font: FontCollectionType,
16}
17
18impl FontScheme {
19    #[inline]
20    pub fn get_name(&self) -> &str {
21        self.name.get_value_str()
22    }
23
24    #[inline]
25    pub fn set_name<S: Into<String>>(&mut self, value: S) -> &mut Self {
26        self.name.set_value(value);
27        self
28    }
29
30    #[inline]
31    pub fn get_major_font(&self) -> &FontCollectionType {
32        &self.major_font
33    }
34
35    #[inline]
36    pub fn get_major_font_mut(&mut self) -> &mut FontCollectionType {
37        &mut self.major_font
38    }
39
40    #[inline]
41    pub fn set_major_font(&mut self, value: FontCollectionType) -> &mut Self {
42        self.major_font = value;
43        self
44    }
45
46    #[inline]
47    pub fn get_minor_font(&self) -> &FontCollectionType {
48        &self.minor_font
49    }
50
51    #[inline]
52    pub fn get_minor_font_mut(&mut self) -> &mut FontCollectionType {
53        &mut self.minor_font
54    }
55
56    #[inline]
57    pub fn set_minor_font(&mut self, value: FontCollectionType) -> &mut Self {
58        self.minor_font = value;
59        self
60    }
61
62    pub(crate) fn set_attributes<R: std::io::BufRead>(
63        &mut self,
64        reader: &mut Reader<R>,
65        e: &BytesStart,
66    ) {
67        if let Some(v) = get_attribute(e, b"name") {
68            self.name.set_value(v);
69        }
70
71        xml_read_loop!(
72            reader,
73            Event::Start(ref e) => {
74                match e.name().into_inner() {
75                b"a:majorFont" => {
76                    self.major_font.set_attributes(reader, e);
77                }
78                b"a:minorFont" => {
79                    self.minor_font.set_attributes(reader, e);
80                }
81                _ => (),
82                }
83            },
84            Event::End(ref e) => {
85                if e.name().into_inner() == b"a:fontScheme" {
86                    return
87                }
88            },
89            Event::Eof => panic!("Error: Could not find {} end element", "a:fontScheme")
90        );
91    }
92
93    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
94        // a:fontScheme
95        let mut attributes: Vec<(&str, &str)> = Vec::new();
96        if self.name.has_value() {
97            attributes.push(("name", self.name.get_value_str()));
98        }
99        write_start_tag(writer, "a:fontScheme", attributes, false);
100
101        // a:majorFont
102        self.major_font.write_to_major_font(writer);
103
104        // a:minorFont
105        self.minor_font.write_to_minor_font(writer);
106
107        write_end_tag(writer, "a:fontScheme");
108    }
109}