umya_spreadsheet/structs/drawing/
camera.rs1use super::super::EnumValue;
3use super::PresetCameraValues;
4use super::Rotation;
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 Camera {
14 preset: EnumValue<PresetCameraValues>,
15 rotation: Option<Box<Rotation>>,
16}
17
18impl Camera {
19 #[inline]
20 pub fn get_preset(&self) -> &PresetCameraValues {
21 self.preset.get_value()
22 }
23
24 #[inline]
25 pub fn set_preset(&mut self, value: PresetCameraValues) -> &mut Self {
26 self.preset.set_value(value);
27 self
28 }
29
30 #[inline]
31 pub fn get_rotation(&self) -> Option<&Rotation> {
32 self.rotation.as_deref()
33 }
34
35 #[inline]
36 pub fn get_rotation_mut(&mut self) -> Option<&mut Rotation> {
37 self.rotation.as_deref_mut()
38 }
39
40 #[inline]
41 pub fn set_rotation(&mut self, value: Rotation) -> &mut Self {
42 self.rotation = Some(Box::new(value));
43 self
44 }
45
46 pub(crate) fn set_attributes<R: std::io::BufRead>(
47 &mut self,
48 reader: &mut Reader<R>,
49 e: &BytesStart,
50 empty_flag: bool,
51 ) {
52 set_string_from_xml!(self, e, preset, "prst");
53
54 if empty_flag {
55 return;
56 }
57
58 xml_read_loop!(
59 reader,
60 Event::Empty(ref e) => {
61 if e.name().into_inner() == b"a:rot" {
62 let mut obj = Rotation::default();
63 obj.set_attributes(reader, e);
64 self.rotation = Some(Box::new(obj));
65 }
66 },
67 Event::End(ref e) => {
68 if e.name().into_inner() == b"a:camera" {
69 return
70 }
71 },
72 Event::Eof => panic!("Error: Could not find {} end element", "a:camera")
73 );
74 }
75
76 pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
77 let with_inner = self.rotation.is_some();
78 write_start_tag(
80 writer,
81 "a:camera",
82 vec![("prst", self.preset.get_value_string())],
83 !with_inner,
84 );
85
86 if with_inner {
87 if let Some(v) = &self.rotation {
89 v.write_to(writer);
90 }
91 write_end_tag(writer, "a:camera");
92 }
93 }
94}