umya_spreadsheet/structs/drawing/charts/
chart_space.rs1use crate::xml_read_loop;
2
3use super::Chart;
5use super::Date1904;
6use super::EditingLanguage;
7use super::PrintSettings;
8use super::RoundedCorners;
9use super::ShapeProperties;
10use crate::helper::const_str::*;
11use crate::structs::office2010::drawing::charts::Style;
12use crate::structs::Spreadsheet;
13use crate::traits::AdjustmentCoordinateWithSheet;
14use crate::writer::driver::*;
15use quick_xml::events::{BytesStart, Event};
16use quick_xml::Reader;
17use quick_xml::Writer;
18use std::io::Cursor;
19
20#[derive(Clone, Default, Debug)]
21pub struct ChartSpace {
22 date1904: Option<Date1904>,
23 editing_language: EditingLanguage,
24 rounded_corners: RoundedCorners,
25 style: Option<Style>,
26 chart: Chart,
27 shape_properties: Option<ShapeProperties>,
28 print_settings: Option<PrintSettings>,
29}
30
31impl ChartSpace {
32 pub fn get_date1904(&self) -> Option<&Date1904> {
33 self.date1904.as_ref()
34 }
35
36 pub fn get_date1904_mut(&mut self) -> Option<&mut Date1904> {
37 self.date1904.as_mut()
38 }
39
40 pub fn set_date1904(&mut self, value: Date1904) -> &mut Self {
41 self.date1904 = Some(value);
42 self
43 }
44
45 pub fn get_editing_language(&self) -> &EditingLanguage {
46 &self.editing_language
47 }
48
49 pub fn get_editing_language_mut(&mut self) -> &mut EditingLanguage {
50 &mut self.editing_language
51 }
52
53 pub fn set_editing_language(&mut self, value: EditingLanguage) -> &mut Self {
54 self.editing_language = value;
55 self
56 }
57
58 pub fn get_rounded_corners(&self) -> &RoundedCorners {
59 &self.rounded_corners
60 }
61
62 pub fn get_rounded_corners_mut(&mut self) -> &mut RoundedCorners {
63 &mut self.rounded_corners
64 }
65
66 pub fn set_rounded_corners(&mut self, value: RoundedCorners) -> &mut Self {
67 self.rounded_corners = value;
68 self
69 }
70
71 pub fn get_style(&self) -> Option<&Style> {
72 self.style.as_ref()
73 }
74
75 pub fn get_style_mut(&mut self) -> Option<&mut Style> {
76 self.style.as_mut()
77 }
78
79 pub fn set_style(&mut self, value: Style) -> &mut Self {
80 self.style = Some(value);
81 self
82 }
83
84 pub fn get_chart(&self) -> &Chart {
85 &self.chart
86 }
87
88 pub fn get_chart_mut(&mut self) -> &mut Chart {
89 &mut self.chart
90 }
91
92 pub fn set_chart(&mut self, value: Chart) -> &mut Self {
93 self.chart = value;
94 self
95 }
96
97 pub fn get_shape_properties(&self) -> Option<&ShapeProperties> {
98 self.shape_properties.as_ref()
99 }
100
101 pub fn get_shape_properties_mut(&mut self) -> Option<&mut ShapeProperties> {
102 self.shape_properties.as_mut()
103 }
104
105 pub fn set_shape_properties(&mut self, value: ShapeProperties) -> &mut Self {
106 self.shape_properties = Some(value);
107 self
108 }
109
110 pub fn get_print_settings(&self) -> Option<&PrintSettings> {
111 self.print_settings.as_ref()
112 }
113
114 pub fn get_print_settings_mut(&mut self) -> Option<&mut PrintSettings> {
115 self.print_settings.as_mut()
116 }
117
118 pub fn set_print_settings(&mut self, value: PrintSettings) -> &mut Self {
119 self.print_settings = Some(value);
120 self
121 }
122
123 pub(crate) fn set_attributes<R: std::io::BufRead>(
124 &mut self,
125 reader: &mut Reader<R>,
126 _e: &BytesStart,
127 ) {
128 xml_read_loop!(
129 reader,
130 Event::Start(ref e) => match e.name().into_inner() {
131 b"mc:AlternateContent" => {
132 let mut obj = Style::default();
133 obj.set_attributes(reader, e, true);
134 self.set_style(obj);
135 }
136 b"c:chart" => {
137 self.chart.set_attributes(reader, e);
138 }
139 b"c:printSettings" => {
140 let mut obj = PrintSettings::default();
141 obj.set_attributes(reader, e);
142 self.set_print_settings(obj);
143 }
144 b"c:spPr" => {
145 let mut obj = ShapeProperties::default();
146 obj.set_attributes(reader, e);
147 self.set_shape_properties(obj);
148 }
149 _ => (),
150 },
151 Event::Empty(ref e) => match e.name().into_inner() {
152 b"c:date1904" => {
153 let mut obj = Date1904::default();
154 obj.set_attributes(reader, e);
155 self.set_date1904(obj);
156 }
157 b"c:lang" => {
158 self.editing_language.set_attributes(reader, e);
159 }
160 b"c:roundedCorners" => {
161 self.rounded_corners.set_attributes(reader, e);
162 }
163 b"c:style" => {
164 let mut obj = Style::default();
165 obj.set_attributes(reader, e, false);
166 self.set_style(obj);
167 }
168 _ => (),
169 },
170 Event::End(ref e) => {
171 if e.name().into_inner() == b"c:chartSpace" {
172 return;
173 }
174 },
175 Event::Eof => panic!("Error: Could not find {} end element", "c:chartSpace"),
176 );
177 }
178
179 pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>, spreadsheet: &Spreadsheet) {
180 write_start_tag(
182 writer,
183 "c:chartSpace",
184 vec![
185 ("xmlns:c", DRAWINGML_CHART_NS),
186 ("xmlns:a", DRAWINGML_MAIN_NS),
187 ("xmlns:r", REL_OFC_NS),
188 ("xmlns:c16r2", DRAWING_CHART_2015_NS),
189 ],
190 false,
191 );
192
193 if let Some(v) = &self.date1904 {
195 v.write_to(writer);
196 }
197
198 self.editing_language.write_to(writer);
200
201 self.rounded_corners.write_to(writer);
203
204 if let Some(v) = &self.style {
206 v.write_to(writer);
207 }
208
209 self.chart.write_to(writer, spreadsheet);
211
212 if let Some(v) = &self.shape_properties {
214 v.write_to(writer);
215 }
216
217 if let Some(v) = &self.print_settings {
219 v.write_to(writer);
220 }
221
222 write_end_tag(writer, "c:chartSpace");
223 }
224}
225impl AdjustmentCoordinateWithSheet for ChartSpace {
226 fn adjustment_insert_coordinate_with_sheet(
227 &mut self,
228 sheet_name: &str,
229 root_col_num: &u32,
230 offset_col_num: &u32,
231 root_row_num: &u32,
232 offset_row_num: &u32,
233 ) {
234 self.chart.adjustment_insert_coordinate_with_sheet(
235 sheet_name,
236 root_col_num,
237 offset_col_num,
238 root_row_num,
239 offset_row_num,
240 );
241 }
242
243 fn adjustment_remove_coordinate_with_sheet(
244 &mut self,
245 sheet_name: &str,
246 root_col_num: &u32,
247 offset_col_num: &u32,
248 root_row_num: &u32,
249 offset_row_num: &u32,
250 ) {
251 self.chart.adjustment_remove_coordinate_with_sheet(
252 sheet_name,
253 root_col_num,
254 offset_col_num,
255 root_row_num,
256 offset_row_num,
257 );
258 }
259}