umya_spreadsheet/structs/drawing/
theme_elements.rs1use 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 write_start_tag(writer, "a:themeElements", vec![], false);
98
99 self.color_scheme.write_to(writer);
101
102 self.font_scheme.write_to(writer);
104
105 self.format_scheme.write_to(writer);
107
108 write_end_tag(writer, "a:themeElements");
109 }
110}