umya_spreadsheet/structs/
object_anchor.rs

1use super::BooleanValue;
2use super::FromMarker;
3use super::ToMarker;
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 ObjectAnchor {
13    move_with_cells: BooleanValue,
14    from_marker: FromMarker,
15    to_marker: ToMarker,
16}
17
18impl ObjectAnchor {
19    #[inline]
20    pub fn get_move_with_cells(&self) -> &bool {
21        self.move_with_cells.get_value()
22    }
23
24    #[inline]
25    pub fn set_move_with_cells(&mut self, value: bool) -> &mut Self {
26        self.move_with_cells.set_value(value);
27        self
28    }
29
30    #[inline]
31    pub fn get_from_marker(&self) -> &FromMarker {
32        &self.from_marker
33    }
34
35    #[inline]
36    pub fn get_from_marker_mut(&mut self) -> &mut FromMarker {
37        &mut self.from_marker
38    }
39
40    #[inline]
41    pub fn set_from_marker(&mut self, value: FromMarker) -> &mut Self {
42        self.from_marker = value;
43        self
44    }
45
46    #[inline]
47    pub fn get_to_marker(&self) -> &ToMarker {
48        &self.to_marker
49    }
50
51    #[inline]
52    pub fn get_to_marker_mut(&mut self) -> &mut ToMarker {
53        &mut self.to_marker
54    }
55
56    #[inline]
57    pub fn set_to_marker(&mut self, value: ToMarker) -> &mut Self {
58        self.to_marker = value;
59        self
60    }
61
62    #[inline]
63    pub(crate) fn _adjustment_insert_row(&mut self, num_rows: &usize) {
64        self.from_marker._adjustment_insert_row(num_rows);
65        self.to_marker._adjustment_insert_row(num_rows);
66    }
67
68    #[inline]
69    pub(crate) fn _adjustment_insert_column(&mut self, num_cols: &usize) {
70        self.from_marker._adjustment_insert_column(num_cols);
71        self.to_marker._adjustment_insert_column(num_cols);
72    }
73
74    #[inline]
75    pub(crate) fn _adjustment_remove_row(&mut self, num_rows: &usize) {
76        self.from_marker._adjustment_remove_row(num_rows);
77        self.to_marker._adjustment_remove_row(num_rows);
78    }
79
80    #[inline]
81    pub(crate) fn _adjustment_remove_column(&mut self, num_cols: &usize) {
82        self.from_marker._adjustment_remove_column(num_cols);
83        self.to_marker._adjustment_remove_column(num_cols);
84    }
85
86    pub(crate) fn set_attributes<R: std::io::BufRead>(
87        &mut self,
88        reader: &mut Reader<R>,
89        e: &BytesStart,
90    ) {
91        set_string_from_xml!(self, e, move_with_cells, "moveWithCells");
92
93        xml_read_loop!(
94            reader,
95            Event::Start(ref e) => {
96                match e.name().into_inner() {
97                    b"from" => {
98                        self.from_marker.set_attributes(reader, e);
99                    }
100                    b"xdr:from" => {
101                        self.from_marker.set_attributes(reader, e);
102                    }
103                    b"to" => {
104                        self.to_marker.set_attributes(reader, e);
105                    }
106                    b"xdr:to" => {
107                        self.to_marker.set_attributes(reader, e);
108                    }
109                    _ => (),
110                }
111            },
112            Event::End(ref e) => {
113                if e.name().into_inner() == b"anchor" {
114                    return
115                }
116            },
117            Event::Eof => panic!("Error: Could not find {} end element", "anchor")
118        );
119    }
120
121    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
122        // anchor
123        let mut attributes: Vec<(&str, &str)> = Vec::new();
124        if self.move_with_cells.has_value() {
125            attributes.push(("moveWithCells", self.move_with_cells.get_value_string()));
126        }
127        write_start_tag(writer, "anchor", attributes, false);
128
129        // xdr:from
130        self.from_marker.write_to(writer);
131
132        // xdr:to
133        self.to_marker.write_to(writer);
134
135        write_end_tag(writer, "anchor");
136    }
137}