umya_spreadsheet/structs/drawing/
theme_elements.rs

1// a:themeElements
2use super::ColorScheme;
3use super::FontScheme;
4use super::FormatScheme;
5use crate::reader::driver::*;
6use crate::writer::driver::*;
7use quick_xml::events::{BytesStart, Event};
8use quick_xml::Reader;
9use quick_xml::Writer;
10use std::io::Cursor;
11
12#[derive(Clone, Default, Debug)]
13pub struct ThemeElements {
14    color_scheme: ColorScheme,
15    font_scheme: FontScheme,
16    format_scheme: FormatScheme,
17}
18
19impl ThemeElements {
20    #[inline]
21    pub fn set_color_scheme(&mut self, value: ColorScheme) {
22        self.color_scheme = value;
23    }
24
25    #[inline]
26    pub fn get_color_scheme(&self) -> &ColorScheme {
27        &self.color_scheme
28    }
29
30    #[inline]
31    pub fn get_color_scheme_mut(&mut self) -> &mut ColorScheme {
32        &mut self.color_scheme
33    }
34
35    #[inline]
36    pub fn set_font_scheme(&mut self, value: FontScheme) {
37        self.font_scheme = value;
38    }
39
40    #[inline]
41    pub fn get_font_scheme(&self) -> &FontScheme {
42        &self.font_scheme
43    }
44
45    #[inline]
46    pub fn get_font_scheme_mut(&mut self) -> &mut FontScheme {
47        &mut self.font_scheme
48    }
49
50    #[inline]
51    pub fn set_format_scheme(&mut self, value: FormatScheme) {
52        self.format_scheme = value;
53    }
54
55    #[inline]
56    pub fn get_format_scheme(&self) -> &FormatScheme {
57        &self.format_scheme
58    }
59
60    #[inline]
61    pub fn get_format_scheme_mut(&mut self) -> &mut FormatScheme {
62        &mut self.format_scheme
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::Start(ref e) => {
73                match e.name().into_inner() {
74                    b"a:clrScheme" => {
75                        self.color_scheme.set_attributes(reader, e);
76                    }
77                    b"a:fontScheme" => {
78                        self.font_scheme.set_attributes(reader, e);
79                    }
80                    b"a:fmtScheme" => {
81                        self.format_scheme.set_attributes(reader, e);
82                    }
83                    _ => (),
84                }
85            },
86            Event::End(ref e) => {
87                if e.name().into_inner() == b"a:themeElements" {
88                    return
89                }
90            },
91            Event::Eof => panic!("Error: Could not find {} end element", "a:themeElements")
92        );
93    }
94
95    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
96        // a:themeElements
97        write_start_tag(writer, "a:themeElements", vec![], false);
98
99        // a:clrScheme
100        self.color_scheme.write_to(writer);
101
102        // a:fontScheme
103        self.font_scheme.write_to(writer);
104
105        // a:fmtScheme
106        self.format_scheme.write_to(writer);
107
108        write_end_tag(writer, "a:themeElements");
109    }
110}