umya_spreadsheet/structs/drawing/spreadsheet/
picture.rs1use super::BlipFill;
3use super::NonVisualPictureProperties;
4use super::ShapeProperties;
5use crate::reader::driver::*;
6use crate::structs::raw::RawRelationships;
7use crate::writer::driver::*;
8use quick_xml::events::{BytesStart, Event};
9use quick_xml::Reader;
10use quick_xml::Writer;
11use std::io::Cursor;
12
13#[derive(Clone, Default, Debug)]
14pub struct Picture {
15 non_visual_picture_properties: NonVisualPictureProperties,
16 blip_fill: BlipFill,
17 shape_properties: ShapeProperties,
18}
19
20impl Picture {
21 #[inline]
22 pub fn get_non_visual_picture_properties(&self) -> &NonVisualPictureProperties {
23 &self.non_visual_picture_properties
24 }
25
26 #[inline]
27 pub fn get_non_visual_picture_properties_mut(&mut self) -> &mut NonVisualPictureProperties {
28 &mut self.non_visual_picture_properties
29 }
30
31 #[inline]
32 pub fn set_non_visual_picture_properties(&mut self, value: NonVisualPictureProperties) {
33 self.non_visual_picture_properties = value;
34 }
35
36 #[inline]
37 pub fn get_blip_fill(&self) -> &BlipFill {
38 &self.blip_fill
39 }
40
41 #[inline]
42 pub fn get_blip_fill_mut(&mut self) -> &mut BlipFill {
43 &mut self.blip_fill
44 }
45
46 #[inline]
47 pub fn set_blip_fill(&mut self, value: BlipFill) {
48 self.blip_fill = value;
49 }
50
51 #[inline]
52 pub fn get_shape_properties(&self) -> &ShapeProperties {
53 &self.shape_properties
54 }
55
56 #[inline]
57 pub fn get_shape_properties_mut(&mut self) -> &mut ShapeProperties {
58 &mut self.shape_properties
59 }
60
61 #[inline]
62 pub fn set_shape_properties(&mut self, value: ShapeProperties) {
63 self.shape_properties = value;
64 }
65
66 pub(crate) fn set_attributes<R: std::io::BufRead>(
67 &mut self,
68 reader: &mut Reader<R>,
69 _e: &BytesStart,
70 drawing_relationships: Option<&RawRelationships>,
71 ) {
72 xml_read_loop!(
73 reader,
74 Event::Start(ref e) => {
75 match e.name().into_inner() {
76 b"xdr:nvPicPr" => {
77 self.non_visual_picture_properties.set_attributes(reader, e);
78 }
79 b"xdr:blipFill" => {
80 self.blip_fill
81 .set_attributes(reader, e, drawing_relationships);
82 }
83 b"xdr:spPr" => {
84 self.shape_properties.set_attributes(reader, e, drawing_relationships);
85 }
86 _ => (),
87 }
88 },
89 Event::End(ref e) => {
90 if e.name().into_inner() == b"xdr:pic" {
91 return;
92 }
93 },
94 Event::Eof => panic!("Error: Could not find {} end element", "xdr:pic")
95 );
96 }
97
98 pub(crate) fn write_to(
99 &self,
100 writer: &mut Writer<Cursor<Vec<u8>>>,
101 rel_list: &mut Vec<(String, String)>,
102 ) {
103 write_start_tag(writer, "xdr:pic", vec![], false);
105
106 self.non_visual_picture_properties.write_to(writer);
108
109 self.blip_fill.write_to(writer, rel_list);
111
112 self.shape_properties.write_to(writer, rel_list);
114
115 write_end_tag(writer, "xdr:pic");
116 }
117}