umya_spreadsheet/structs/drawing/
font_scheme.rs1use 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 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 self.major_font.write_to_major_font(writer);
103
104 self.minor_font.write_to_minor_font(writer);
106
107 write_end_tag(writer, "a:fontScheme");
108 }
109}