1use std::io::Cursor;
3
4use quick_xml::{
5 Reader,
6 Writer,
7 events::{
8 BytesStart,
9 Event,
10 },
11};
12
13use super::{
14 Area3DChart,
15 AreaChart,
16 AreaChartSeriesList,
17 Bar3DChart,
18 BarChart,
19 BubbleChart,
20 CategoryAxis,
21 DoughnutChart,
22 Formula,
23 GroupingValues,
24 Layout,
25 Line3DChart,
26 LineChart,
27 OfPieChart,
28 Pie3DChart,
29 PieChart,
30 RadarChart,
31 ScatterChart,
32 SeriesAxis,
33 ShapeProperties,
34 ValueAxis,
35};
36use crate::{
37 drawing::charts::DateAxis,
38 structs::Workbook,
39 traits::AdjustmentCoordinateWithSheet,
40 writer::driver::{
41 write_end_tag,
42 write_start_tag,
43 },
44 xml_read_loop,
45};
46
47#[derive(Clone, Default, Debug)]
48pub struct PlotArea {
49 layout: Layout,
50 line_chart: Option<LineChart>,
51 line_3d_chart: Option<Line3DChart>,
52 pie_chart: Option<PieChart>,
53 pie_3d_chart: Option<Pie3DChart>,
54 doughnut_chart: Option<DoughnutChart>,
55 scatter_chart: Option<ScatterChart>,
56 bar_chart: Option<BarChart>,
57 bar_3d_chart: Option<Bar3DChart>,
58 radar_chart: Option<RadarChart>,
59 bubble_chart: Option<BubbleChart>,
60 area_chart: Option<AreaChart>,
61 area_3d_chart: Option<Area3DChart>,
62 of_pie_chart: Option<OfPieChart>,
63 category_axis: Vec<CategoryAxis>,
64 date_axis: Vec<DateAxis>,
65 value_axis: Vec<ValueAxis>,
66 series_axis: Vec<SeriesAxis>,
67 shape_properties: Option<ShapeProperties>,
68}
69
70impl PlotArea {
71 #[must_use]
72 pub fn layout(&self) -> &Layout {
73 &self.layout
74 }
75
76 #[must_use]
77 #[deprecated(since = "3.0.0", note = "Use layout()")]
78 pub fn get_layout(&self) -> &Layout {
79 self.layout()
80 }
81
82 pub fn layout_mut(&mut self) -> &mut Layout {
83 &mut self.layout
84 }
85
86 #[deprecated(since = "3.0.0", note = "Use layout_mut()")]
87 pub fn get_layout_mut(&mut self) -> &mut Layout {
88 self.layout_mut()
89 }
90
91 pub fn set_layout(&mut self, value: Layout) -> &mut Self {
92 self.layout = value;
93 self
94 }
95
96 #[must_use]
97 pub fn line_chart(&self) -> Option<&LineChart> {
98 self.line_chart.as_ref()
99 }
100
101 #[must_use]
102 #[deprecated(since = "3.0.0", note = "Use line_chart()")]
103 pub fn get_line_chart(&self) -> Option<&LineChart> {
104 self.line_chart()
105 }
106
107 pub fn line_chart_mut(&mut self) -> Option<&mut LineChart> {
108 self.line_chart.as_mut()
109 }
110
111 #[deprecated(since = "3.0.0", note = "Use line_chart_mut()")]
112 pub fn get_line_chart_mut(&mut self) -> Option<&mut LineChart> {
113 self.line_chart_mut()
114 }
115
116 pub fn set_line_chart(&mut self, value: LineChart) -> &mut Self {
117 self.line_chart = Some(value);
118 self
119 }
120
121 #[must_use]
122 pub fn line_3d_chart(&self) -> Option<&Line3DChart> {
123 self.line_3d_chart.as_ref()
124 }
125
126 #[must_use]
127 #[deprecated(since = "3.0.0", note = "Use line_3d_chart()")]
128 pub fn get_line_3d_chart(&self) -> Option<&Line3DChart> {
129 self.line_3d_chart()
130 }
131
132 pub fn line_3d_chart_mut(&mut self) -> Option<&mut Line3DChart> {
133 self.line_3d_chart.as_mut()
134 }
135
136 #[deprecated(since = "3.0.0", note = "Use line_3d_chart_mut()")]
137 pub fn get_line_3d_chart_mut(&mut self) -> Option<&mut Line3DChart> {
138 self.line_3d_chart_mut()
139 }
140
141 pub fn set_line_3d_chart(&mut self, value: Line3DChart) -> &mut Self {
142 self.line_3d_chart = Some(value);
143 self
144 }
145
146 #[must_use]
147 pub fn pie_chart(&self) -> Option<&PieChart> {
148 self.pie_chart.as_ref()
149 }
150
151 #[must_use]
152 #[deprecated(since = "3.0.0", note = "Use pie_chart()")]
153 pub fn get_pie_chart(&self) -> Option<&PieChart> {
154 self.pie_chart()
155 }
156
157 pub fn pie_chart_mut(&mut self) -> Option<&mut PieChart> {
158 self.pie_chart.as_mut()
159 }
160
161 #[deprecated(since = "3.0.0", note = "Use pie_chart_mut()")]
162 pub fn get_pie_chart_mut(&mut self) -> Option<&mut PieChart> {
163 self.pie_chart_mut()
164 }
165
166 pub fn set_pie_chart(&mut self, value: PieChart) -> &mut Self {
167 self.pie_chart = Some(value);
168 self
169 }
170
171 #[must_use]
172 pub fn pie_3d_chart(&self) -> Option<&Pie3DChart> {
173 self.pie_3d_chart.as_ref()
174 }
175
176 #[must_use]
177 #[deprecated(since = "3.0.0", note = "Use pie_3d_chart()")]
178 pub fn get_pie_3d_chart(&self) -> Option<&Pie3DChart> {
179 self.pie_3d_chart()
180 }
181
182 pub fn pie_3d_chart_mut(&mut self) -> Option<&mut Pie3DChart> {
183 self.pie_3d_chart.as_mut()
184 }
185
186 #[deprecated(since = "3.0.0", note = "Use pie_3d_chart_mut()")]
187 pub fn get_pie_3d_chart_mut(&mut self) -> Option<&mut Pie3DChart> {
188 self.pie_3d_chart_mut()
189 }
190
191 pub fn set_pie_3d_chart(&mut self, value: Pie3DChart) -> &mut Self {
192 self.pie_3d_chart = Some(value);
193 self
194 }
195
196 #[must_use]
197 pub fn doughnut_chart(&self) -> Option<&DoughnutChart> {
198 self.doughnut_chart.as_ref()
199 }
200
201 #[must_use]
202 #[deprecated(since = "3.0.0", note = "Use doughnut_chart()")]
203 pub fn get_doughnut_chart(&self) -> Option<&DoughnutChart> {
204 self.doughnut_chart()
205 }
206
207 pub fn doughnut_chart_mut(&mut self) -> Option<&mut DoughnutChart> {
208 self.doughnut_chart.as_mut()
209 }
210
211 #[deprecated(since = "3.0.0", note = "Use doughnut_chart_mut()")]
212 pub fn get_doughnut_chart_mut(&mut self) -> Option<&mut DoughnutChart> {
213 self.doughnut_chart_mut()
214 }
215
216 pub fn set_doughnut_chart(&mut self, value: DoughnutChart) -> &mut Self {
217 self.doughnut_chart = Some(value);
218 self
219 }
220
221 #[must_use]
222 pub fn scatter_chart(&self) -> Option<&ScatterChart> {
223 self.scatter_chart.as_ref()
224 }
225
226 #[must_use]
227 #[deprecated(since = "3.0.0", note = "Use scatter_chart()")]
228 pub fn get_scatter_chart(&self) -> Option<&ScatterChart> {
229 self.scatter_chart()
230 }
231
232 pub fn scatter_chart_mut(&mut self) -> Option<&mut ScatterChart> {
233 self.scatter_chart.as_mut()
234 }
235
236 #[deprecated(since = "3.0.0", note = "Use scatter_chart_mut()")]
237 pub fn get_scatter_chart_mut(&mut self) -> Option<&mut ScatterChart> {
238 self.scatter_chart_mut()
239 }
240
241 pub fn set_scatter_chart(&mut self, value: ScatterChart) -> &mut Self {
242 self.scatter_chart = Some(value);
243 self
244 }
245
246 #[must_use]
247 pub fn bar_chart(&self) -> Option<&BarChart> {
248 self.bar_chart.as_ref()
249 }
250
251 #[must_use]
252 #[deprecated(since = "3.0.0", note = "Use bar_chart()")]
253 pub fn get_bar_chart(&self) -> Option<&BarChart> {
254 self.bar_chart()
255 }
256
257 pub fn bar_chart_mut(&mut self) -> Option<&mut BarChart> {
258 self.bar_chart.as_mut()
259 }
260
261 #[deprecated(since = "3.0.0", note = "Use bar_chart_mut()")]
262 pub fn get_bar_chart_mut(&mut self) -> Option<&mut BarChart> {
263 self.bar_chart_mut()
264 }
265
266 pub fn set_bar_chart(&mut self, value: BarChart) -> &mut Self {
267 self.bar_chart = Some(value);
268 self
269 }
270
271 #[must_use]
272 pub fn bar_3d_chart(&self) -> Option<&Bar3DChart> {
273 self.bar_3d_chart.as_ref()
274 }
275
276 #[must_use]
277 #[deprecated(since = "3.0.0", note = "Use bar_3d_chart()")]
278 pub fn get_bar_3d_chart(&self) -> Option<&Bar3DChart> {
279 self.bar_3d_chart()
280 }
281
282 pub fn bar_3d_chart_mut(&mut self) -> Option<&mut Bar3DChart> {
283 self.bar_3d_chart.as_mut()
284 }
285
286 #[deprecated(since = "3.0.0", note = "Use bar_3d_chart_mut()")]
287 pub fn get_bar_3d_chart_mut(&mut self) -> Option<&mut Bar3DChart> {
288 self.bar_3d_chart_mut()
289 }
290
291 pub fn set_bar_3d_chart(&mut self, value: Bar3DChart) -> &mut Self {
292 self.bar_3d_chart = Some(value);
293 self
294 }
295
296 #[must_use]
297 pub fn radar_chart(&self) -> Option<&RadarChart> {
298 self.radar_chart.as_ref()
299 }
300
301 #[must_use]
302 #[deprecated(since = "3.0.0", note = "Use radar_chart()")]
303 pub fn get_radar_chart(&self) -> Option<&RadarChart> {
304 self.radar_chart()
305 }
306
307 pub fn radar_chart_mut(&mut self) -> Option<&mut RadarChart> {
308 self.radar_chart.as_mut()
309 }
310
311 #[deprecated(since = "3.0.0", note = "Use radar_chart_mut()")]
312 pub fn get_radar_chart_mut(&mut self) -> Option<&mut RadarChart> {
313 self.radar_chart_mut()
314 }
315
316 pub fn set_radar_chart(&mut self, value: RadarChart) -> &mut Self {
317 self.radar_chart = Some(value);
318 self
319 }
320
321 #[must_use]
322 pub fn bubble_chart(&self) -> Option<&BubbleChart> {
323 self.bubble_chart.as_ref()
324 }
325
326 #[must_use]
327 #[deprecated(since = "3.0.0", note = "Use bubble_chart()")]
328 pub fn get_bubble_chart(&self) -> Option<&BubbleChart> {
329 self.bubble_chart()
330 }
331
332 pub fn bubble_chart_mut(&mut self) -> Option<&mut BubbleChart> {
333 self.bubble_chart.as_mut()
334 }
335
336 #[deprecated(since = "3.0.0", note = "Use bubble_chart_mut()")]
337 pub fn get_bubble_chart_mut(&mut self) -> Option<&mut BubbleChart> {
338 self.bubble_chart_mut()
339 }
340
341 pub fn set_bubble_chart(&mut self, value: BubbleChart) -> &mut Self {
342 self.bubble_chart = Some(value);
343 self
344 }
345
346 #[must_use]
347 pub fn area_chart(&self) -> Option<&AreaChart> {
348 self.area_chart.as_ref()
349 }
350
351 #[must_use]
352 #[deprecated(since = "3.0.0", note = "Use area_chart()")]
353 pub fn get_area_chart(&self) -> Option<&AreaChart> {
354 self.area_chart()
355 }
356
357 pub fn area_chart_mut(&mut self) -> Option<&mut AreaChart> {
358 self.area_chart.as_mut()
359 }
360
361 #[deprecated(since = "3.0.0", note = "Use area_chart_mut()")]
362 pub fn get_area_chart_mut(&mut self) -> Option<&mut AreaChart> {
363 self.area_chart_mut()
364 }
365
366 pub fn set_area_chart(&mut self, value: AreaChart) -> &mut Self {
367 self.area_chart = Some(value);
368 self
369 }
370
371 #[must_use]
372 pub fn area_3d_chart(&self) -> Option<&Area3DChart> {
373 self.area_3d_chart.as_ref()
374 }
375
376 #[must_use]
377 #[deprecated(since = "3.0.0", note = "Use area_3d_chart()")]
378 pub fn get_area_3d_chart(&self) -> Option<&Area3DChart> {
379 self.area_3d_chart()
380 }
381
382 pub fn area_3d_chart_mut(&mut self) -> Option<&mut Area3DChart> {
383 self.area_3d_chart.as_mut()
384 }
385
386 #[deprecated(since = "3.0.0", note = "Use area_3d_chart_mut()")]
387 pub fn get_area_3d_chart_mut(&mut self) -> Option<&mut Area3DChart> {
388 self.area_3d_chart_mut()
389 }
390
391 pub fn set_area_3d_chart(&mut self, value: Area3DChart) -> &mut Self {
392 self.area_3d_chart = Some(value);
393 self
394 }
395
396 #[must_use]
397 pub fn of_pie_chart(&self) -> Option<&OfPieChart> {
398 self.of_pie_chart.as_ref()
399 }
400
401 #[must_use]
402 #[deprecated(since = "3.0.0", note = "Use of_pie_chart()")]
403 pub fn get_of_pie_chart(&self) -> Option<&OfPieChart> {
404 self.of_pie_chart()
405 }
406
407 pub fn of_pie_chart_mut(&mut self) -> Option<&mut OfPieChart> {
408 self.of_pie_chart.as_mut()
409 }
410
411 #[deprecated(since = "3.0.0", note = "Use of_pie_chart_mut()")]
412 pub fn get_of_pie_chart_mut(&mut self) -> Option<&mut OfPieChart> {
413 self.of_pie_chart_mut()
414 }
415
416 pub fn set_of_pie_chart(&mut self, value: OfPieChart) -> &mut Self {
417 self.of_pie_chart = Some(value);
418 self
419 }
420
421 #[must_use]
422 pub fn category_axis(&self) -> &[CategoryAxis] {
423 &self.category_axis
424 }
425
426 #[must_use]
427 #[deprecated(since = "3.0.0", note = "Use category_axis()")]
428 pub fn get_category_axis(&self) -> &[CategoryAxis] {
429 self.category_axis()
430 }
431
432 pub fn category_axis_mut(&mut self) -> &mut Vec<CategoryAxis> {
433 &mut self.category_axis
434 }
435
436 #[deprecated(since = "3.0.0", note = "Use category_axis_mut()")]
437 pub fn get_category_axis_mut(&mut self) -> &mut Vec<CategoryAxis> {
438 self.category_axis_mut()
439 }
440
441 pub fn set_category_axis(&mut self, value: impl Into<Vec<CategoryAxis>>) -> &mut Self {
442 self.category_axis = value.into();
443 self
444 }
445
446 pub fn add_category_axis(&mut self, value: CategoryAxis) -> &mut Self {
447 self.category_axis.push(value);
448 self
449 }
450
451 #[must_use]
452 pub fn date_axis(&self) -> &[DateAxis] {
453 &self.date_axis
454 }
455
456 #[must_use]
457 #[deprecated(since = "3.0.0", note = "Use date_axis()")]
458 pub fn get_date_axis(&self) -> &[DateAxis] {
459 self.date_axis()
460 }
461
462 pub fn date_axis_mut(&mut self) -> &mut Vec<DateAxis> {
463 &mut self.date_axis
464 }
465
466 #[deprecated(since = "3.0.0", note = "Use date_axis_mut()")]
467 pub fn get_date_axis_mut(&mut self) -> &mut Vec<DateAxis> {
468 self.date_axis_mut()
469 }
470
471 pub fn set_date_axis(&mut self, value: impl Into<Vec<DateAxis>>) -> &mut Self {
472 self.date_axis = value.into();
473 self
474 }
475
476 pub fn add_date_axis(&mut self, value: DateAxis) -> &mut Self {
477 self.date_axis.push(value);
478 self
479 }
480
481 #[must_use]
482 pub fn value_axis(&self) -> &[ValueAxis] {
483 &self.value_axis
484 }
485
486 #[must_use]
487 #[deprecated(since = "3.0.0", note = "Use value_axis()")]
488 pub fn get_value_axis(&self) -> &[ValueAxis] {
489 self.value_axis()
490 }
491
492 pub fn value_axis_mut(&mut self) -> &mut Vec<ValueAxis> {
493 &mut self.value_axis
494 }
495
496 #[deprecated(since = "3.0.0", note = "Use value_axis_mut()")]
497 pub fn get_value_axis_mut(&mut self) -> &mut Vec<ValueAxis> {
498 self.value_axis_mut()
499 }
500
501 pub fn set_value_axis(&mut self, value: impl Into<Vec<ValueAxis>>) -> &mut Self {
502 self.value_axis = value.into();
503 self
504 }
505
506 pub fn add_value_axis(&mut self, value: ValueAxis) -> &mut Self {
507 self.value_axis.push(value);
508 self
509 }
510
511 #[must_use]
512 pub fn series_axis(&self) -> &[SeriesAxis] {
513 &self.series_axis
514 }
515
516 #[must_use]
517 #[deprecated(since = "3.0.0", note = "Use series_axis()")]
518 pub fn get_series_axis(&self) -> &[SeriesAxis] {
519 self.series_axis()
520 }
521
522 pub fn series_axis_mut(&mut self) -> &mut Vec<SeriesAxis> {
523 &mut self.series_axis
524 }
525
526 #[deprecated(since = "3.0.0", note = "Use series_axis_mut()")]
527 pub fn get_series_axis_mut(&mut self) -> &mut Vec<SeriesAxis> {
528 self.series_axis_mut()
529 }
530
531 pub fn set_series_axis(&mut self, value: impl Into<Vec<SeriesAxis>>) -> &mut Self {
532 self.series_axis = value.into();
533 self
534 }
535
536 pub fn add_series_axis(&mut self, value: SeriesAxis) -> &mut Self {
537 self.series_axis.push(value);
538 self
539 }
540
541 #[must_use]
542 pub fn shape_properties(&self) -> Option<&ShapeProperties> {
543 self.shape_properties.as_ref()
544 }
545
546 #[must_use]
547 #[deprecated(since = "3.0.0", note = "Use shape_properties()")]
548 pub fn get_shape_properties(&self) -> Option<&ShapeProperties> {
549 self.shape_properties()
550 }
551
552 pub fn shape_properties_mut(&mut self) -> Option<&mut ShapeProperties> {
553 self.shape_properties.as_mut()
554 }
555
556 #[deprecated(since = "3.0.0", note = "Use shape_properties_mut()")]
557 pub fn get_shape_properties_mut(&mut self) -> Option<&mut ShapeProperties> {
558 self.shape_properties_mut()
559 }
560
561 pub fn set_shape_properties(&mut self, value: ShapeProperties) -> &mut Self {
562 self.shape_properties = Some(value);
563 self
564 }
565
566 pub fn set_grouping(&mut self, value: GroupingValues) -> &mut Self {
567 if let Some(chart) = &mut self.line_chart {
568 chart.grouping_mut().set_val(value);
569 return self;
570 }
571 if let Some(chart) = &mut self.line_3d_chart {
572 chart.grouping_mut().set_val(value);
573 return self;
574 }
575 if let Some(chart) = &mut self.bar_chart {
576 chart.grouping_mut().set_val(value);
577 return self;
578 }
579 if let Some(chart) = &mut self.bar_3d_chart {
580 chart.grouping_mut().set_val(value);
581 return self;
582 }
583 if let Some(chart) = &mut self.area_chart {
584 chart.grouping_mut().set_val(value);
585 return self;
586 }
587 if let Some(chart) = &mut self.area_3d_chart {
588 chart.grouping_mut().set_val(value);
589 return self;
590 }
591 panic! {"Non-Grouping."};
592 }
593
594 pub fn area_chart_series_list_mut(&mut self) -> &mut AreaChartSeriesList {
595 if let Some(chart) = &mut self.line_chart {
596 return chart.area_chart_series_list_mut();
597 }
598 if let Some(chart) = &mut self.line_3d_chart {
599 return chart.area_chart_series_list_mut();
600 }
601 if let Some(chart) = &mut self.pie_chart {
602 return chart.area_chart_series_list_mut();
603 }
604 if let Some(chart) = &mut self.pie_3d_chart {
605 return chart.area_chart_series_list_mut();
606 }
607 if let Some(chart) = &mut self.doughnut_chart {
608 return chart.area_chart_series_list_mut();
609 }
610 if let Some(chart) = &mut self.scatter_chart {
611 return chart.area_chart_series_list_mut();
612 }
613 if let Some(chart) = &mut self.bar_chart {
614 return chart.area_chart_series_list_mut();
615 }
616 if let Some(chart) = &mut self.bar_3d_chart {
617 return chart.area_chart_series_list_mut();
618 }
619 if let Some(chart) = &mut self.radar_chart {
620 return chart.area_chart_series_list_mut();
621 }
622 if let Some(chart) = &mut self.bubble_chart {
623 return chart.area_chart_series_list_mut();
624 }
625 if let Some(chart) = &mut self.area_chart {
626 return chart.area_chart_series_list_mut();
627 }
628 if let Some(chart) = &mut self.area_3d_chart {
629 return chart.area_chart_series_list_mut();
630 }
631 if let Some(chart) = &mut self.of_pie_chart {
632 return chart.area_chart_series_list_mut();
633 }
634 panic! {"Non-ChartSeriesList."};
635 }
636
637 #[deprecated(since = "3.0.0", note = "Use area_chart_series_list_mut()")]
638 pub fn get_area_chart_series_list_mut(&mut self) -> &mut AreaChartSeriesList {
639 self.area_chart_series_list_mut()
640 }
641
642 pub fn formula_mut(&mut self) -> Vec<&mut Formula> {
643 macro_rules! collect_formulas {
644 ($result:expr, $($field:expr),+ $(,)?) => {
645 $(
646 if let Some(v) = $field {
647 for ser in v.area_chart_series_list_mut().area_chart_series_mut() {
648 $result.extend(ser.formula_mut());
649 }
650 }
651 )+
652 };
653 }
654
655 let mut result: Vec<&mut Formula> = Vec::default();
656 collect_formulas!(
657 result,
658 &mut self.line_chart,
659 &mut self.line_3d_chart,
660 &mut self.pie_chart,
661 &mut self.pie_3d_chart,
662 &mut self.doughnut_chart,
663 &mut self.scatter_chart,
664 &mut self.bar_chart,
665 &mut self.bar_3d_chart,
666 &mut self.radar_chart,
667 &mut self.bubble_chart,
668 &mut self.area_chart,
669 &mut self.area_3d_chart,
670 &mut self.of_pie_chart,
671 );
672 result
673 }
674
675 #[deprecated(since = "3.0.0", note = "Use formula_mut()")]
676 pub fn get_formula_mut(&mut self) -> Vec<&mut Formula> {
677 self.formula_mut()
678 }
679
680 pub(crate) fn is_support(&self) -> bool {
681 self.line_chart.is_some()
682 || self.line_3d_chart.is_some()
683 || self.pie_chart.is_some()
684 || self.pie_3d_chart.is_some()
685 || self.doughnut_chart.is_some()
686 || self.scatter_chart.is_some()
687 || self.bar_chart.is_some()
688 || self.bar_3d_chart.is_some()
689 || self.radar_chart.is_some()
690 || self.bubble_chart.is_some()
691 || self.area_chart.is_some()
692 || self.area_3d_chart.is_some()
693 || self.of_pie_chart.is_some()
694 }
695
696 pub(crate) fn set_attributes<R: std::io::BufRead>(
697 &mut self,
698 reader: &mut Reader<R>,
699 _e: &BytesStart,
700 ) {
701 xml_read_loop!(
702 reader,
703 Event::Start(ref e) => match e.name().0 {
704 b"c:layout" => {
705 self.layout.set_attributes(reader, e, false);
706 }
707 b"c:lineChart" => {
708 let mut obj = LineChart::default();
709 obj.set_attributes(reader, e);
710 self.set_line_chart(obj);
711 }
712 b"c:line3DChart" => {
713 let mut obj = Line3DChart::default();
714 obj.set_attributes(reader, e);
715 self.set_line_3d_chart(obj);
716 }
717 b"c:pieChart" => {
718 let mut obj = PieChart::default();
719 obj.set_attributes(reader, e);
720 self.set_pie_chart(obj);
721 }
722 b"c:pie3DChart" => {
723 let mut obj = Pie3DChart::default();
724 obj.set_attributes(reader, e);
725 self.set_pie_3d_chart(obj);
726 }
727 b"c:doughnutChart" => {
728 let mut obj = DoughnutChart::default();
729 obj.set_attributes(reader, e);
730 self.set_doughnut_chart(obj);
731 }
732 b"c:scatterChart" => {
733 let mut obj = ScatterChart::default();
734 obj.set_attributes(reader, e);
735 self.set_scatter_chart(obj);
736 }
737 b"c:barChart" => {
738 let mut obj = BarChart::default();
739 obj.set_attributes(reader, e);
740 self.set_bar_chart(obj);
741 }
742 b"c:bar3DChart" => {
743 let mut obj = Bar3DChart::default();
744 obj.set_attributes(reader, e);
745 self.set_bar_3d_chart(obj);
746 }
747 b"c:radarChart" => {
748 let mut obj = RadarChart::default();
749 obj.set_attributes(reader, e);
750 self.set_radar_chart(obj);
751 }
752 b"c:bubbleChart" => {
753 let mut obj = BubbleChart::default();
754 obj.set_attributes(reader, e);
755 self.set_bubble_chart(obj);
756 }
757 b"c:areaChart" => {
758 let mut obj = AreaChart::default();
759 obj.set_attributes(reader, e);
760 self.set_area_chart(obj);
761 }
762 b"c:area3DChart" => {
763 let mut obj = Area3DChart::default();
764 obj.set_attributes(reader, e);
765 self.set_area_3d_chart(obj);
766 }
767 b"c:ofPieChart" => {
768 let mut obj = OfPieChart::default();
769 obj.set_attributes(reader, e);
770 self.set_of_pie_chart(obj);
771 }
772 b"c:catAx" => {
773 let mut obj = CategoryAxis::default();
774 obj.set_attributes(reader, e);
775 self.add_category_axis(obj);
776 }
777 b"c:dateAx" => {
778 let mut obj = DateAxis::default();
779 obj.set_attributes(reader, e);
780 self.add_date_axis(obj);
781 }
782 b"c:valAx" => {
783 let mut obj = ValueAxis::default();
784 obj.set_attributes(reader, e);
785 self.add_value_axis(obj);
786 }
787 b"c:serAx" => {
788 let mut obj = SeriesAxis::default();
789 obj.set_attributes(reader, e);
790 self.add_series_axis(obj);
791 }
792 b"c:spPr" => {
793 let mut obj = ShapeProperties::default();
794 obj.set_attributes(reader, e);
795 self.set_shape_properties(obj);
796 }
797 _ => (),
798 },
799 Event::End(ref e) => {
800 if e.name().0 == b"c:plotArea" {
801 return;
802 }
803 },
804 Event::Eof => panic!("Error: Could not find {} end element", "c:plotArea"),
805 );
806 }
807
808 pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>, wb: &Workbook) {
809 write_start_tag(writer, "c:plotArea", vec![], false);
811
812 self.layout.write_to(writer);
814
815 if let Some(v) = &self.line_chart {
817 v.write_to(writer, wb);
818 }
819
820 if let Some(v) = &self.line_3d_chart {
822 v.write_to(writer, wb);
823 }
824
825 if let Some(v) = &self.pie_chart {
827 v.write_to(writer, wb);
828 }
829
830 if let Some(v) = &self.pie_3d_chart {
832 v.write_to(writer, wb);
833 }
834
835 if let Some(v) = &self.doughnut_chart {
837 v.write_to(writer, wb);
838 }
839
840 if let Some(v) = &self.scatter_chart {
842 v.write_to(writer, wb);
843 }
844
845 if let Some(v) = &self.bar_chart {
847 v.write_to(writer, wb);
848 }
849
850 if let Some(v) = &self.bar_3d_chart {
852 v.write_to(writer, wb);
853 }
854
855 if let Some(v) = &self.radar_chart {
857 v.write_to(writer, wb);
858 }
859
860 if let Some(v) = &self.bubble_chart {
862 v.write_to(writer, wb);
863 }
864
865 if let Some(v) = &self.area_chart {
867 v.write_to(writer, wb);
868 }
869
870 if let Some(v) = &self.area_3d_chart {
872 v.write_to(writer, wb);
873 }
874
875 if let Some(v) = &self.of_pie_chart {
877 v.write_to(writer, wb);
878 }
879
880 for v in &self.category_axis {
882 v.write_to(writer, wb);
883 }
884
885 for v in &self.date_axis {
887 v.write_to(writer, wb);
888 }
889
890 for v in &self.value_axis {
892 v.write_to(writer, wb);
893 }
894
895 for v in &self.series_axis {
897 v.write_to(writer, wb);
898 }
899
900 if let Some(v) = &self.shape_properties {
902 v.write_to(writer);
903 }
904
905 write_end_tag(writer, "c:plotArea");
906 }
907}
908impl AdjustmentCoordinateWithSheet for PlotArea {
909 fn adjustment_insert_coordinate_with_sheet(
910 &mut self,
911 sheet_name: &str,
912 root_col_num: u32,
913 offset_col_num: u32,
914 root_row_num: u32,
915 offset_row_num: u32,
916 ) {
917 for formula in self.formula_mut() {
918 formula.adjustment_insert_coordinate_with_sheet(
919 sheet_name,
920 root_col_num,
921 offset_col_num,
922 root_row_num,
923 offset_row_num,
924 );
925 }
926 }
927
928 fn adjustment_remove_coordinate_with_sheet(
929 &mut self,
930 sheet_name: &str,
931 root_col_num: u32,
932 offset_col_num: u32,
933 root_row_num: u32,
934 offset_row_num: u32,
935 ) {
936 for formula in self.formula_mut() {
937 formula.adjustment_remove_coordinate_with_sheet(
938 sheet_name,
939 root_col_num,
940 offset_col_num,
941 root_row_num,
942 offset_row_num,
943 );
944 }
945 }
946}