umya_spreadsheet/structs/vml/spreadsheet/
client_data.rs1use super::Anchor;
2use super::AutoFill;
3use super::AutoSizePicture;
4use super::ClipboardFormat;
5use super::CommentColumnTarget;
6use super::CommentRowTarget;
7use super::MoveWithCells;
8use super::ObjectValues;
9use super::ResizeWithCells;
10use super::Visible;
11use crate::reader::driver::*;
12use crate::structs::EnumValue;
13use crate::traits::AdjustmentCoordinate;
14use crate::traits::AdjustmentValue;
15use crate::writer::driver::*;
16use quick_xml::events::{BytesStart, Event};
17use quick_xml::Reader;
18use quick_xml::Writer;
19use std::io::Cursor;
20
21#[derive(Clone, Default, Debug)]
22pub struct ClientData {
23 object_type: EnumValue<ObjectValues>,
24 move_with_cells: Option<MoveWithCells>,
25 resize_with_cells: Option<ResizeWithCells>,
26 anchor: Anchor,
27 auto_fill: Option<AutoFill>,
28 comment_row_target: Option<CommentRowTarget>,
29 comment_column_target: Option<CommentColumnTarget>,
30 visible: Option<Visible>,
31 clipboard_format: Option<ClipboardFormat>,
32 auto_size_picture: Option<AutoSizePicture>,
33}
34
35impl ClientData {
36 #[inline]
37 pub fn get_object_type(&self) -> &ObjectValues {
38 self.object_type.get_value()
39 }
40
41 #[inline]
42 pub fn set_object_type(&mut self, value: ObjectValues) -> &mut Self {
43 self.object_type.set_value(value);
44 self
45 }
46
47 #[inline]
48 pub fn get_move_with_cells(&self) -> Option<&MoveWithCells> {
49 self.move_with_cells.as_ref()
50 }
51
52 #[inline]
53 pub fn get_move_with_cells_mut(&mut self) -> Option<&mut MoveWithCells> {
54 self.move_with_cells.as_mut()
55 }
56
57 #[inline]
58 pub fn set_move_with_cells(&mut self, value: MoveWithCells) -> &mut Self {
59 self.move_with_cells = Some(value);
60 self
61 }
62
63 #[inline]
64 pub fn get_resize_with_cells(&self) -> Option<&ResizeWithCells> {
65 self.resize_with_cells.as_ref()
66 }
67
68 #[inline]
69 pub fn get_resize_with_cells_mut(&mut self) -> Option<&mut ResizeWithCells> {
70 self.resize_with_cells.as_mut()
71 }
72
73 #[inline]
74 pub fn set_resize_with_cells(&mut self, value: ResizeWithCells) -> &mut Self {
75 self.resize_with_cells = Some(value);
76 self
77 }
78
79 #[inline]
80 pub fn get_anchor(&self) -> &Anchor {
81 &self.anchor
82 }
83
84 #[inline]
85 pub fn get_anchor_mut(&mut self) -> &mut Anchor {
86 &mut self.anchor
87 }
88
89 #[inline]
90 pub fn set_anchor(&mut self, value: Anchor) -> &mut Self {
91 self.anchor = value;
92 self
93 }
94
95 #[inline]
96 pub fn get_auto_fill(&self) -> Option<&AutoFill> {
97 self.auto_fill.as_ref()
98 }
99
100 #[inline]
101 pub fn get_auto_fill_mut(&mut self) -> Option<&mut AutoFill> {
102 self.auto_fill.as_mut()
103 }
104
105 #[inline]
106 pub fn set_auto_fill(&mut self, value: AutoFill) -> &mut Self {
107 self.auto_fill = Some(value);
108 self
109 }
110
111 #[inline]
112 pub fn get_comment_row_target(&self) -> Option<&CommentRowTarget> {
113 self.comment_row_target.as_ref()
114 }
115
116 #[inline]
117 pub fn get_comment_row_target_mut(&mut self) -> Option<&mut CommentRowTarget> {
118 self.comment_row_target.as_mut()
119 }
120
121 #[inline]
122 pub fn set_comment_row_target(&mut self, value: CommentRowTarget) -> &mut Self {
123 self.comment_row_target = Some(value);
124 self
125 }
126
127 #[inline]
128 pub fn get_comment_column_target(&self) -> Option<&CommentColumnTarget> {
129 self.comment_column_target.as_ref()
130 }
131
132 #[inline]
133 pub fn get_comment_column_target_mut(&mut self) -> Option<&mut CommentColumnTarget> {
134 self.comment_column_target.as_mut()
135 }
136
137 #[inline]
138 pub fn set_comment_column_target(&mut self, value: CommentColumnTarget) -> &mut Self {
139 self.comment_column_target = Some(value);
140 self
141 }
142
143 #[inline]
144 pub fn get_visible(&self) -> Option<&Visible> {
145 self.visible.as_ref()
146 }
147
148 #[inline]
149 pub fn get_visible_mut(&mut self) -> Option<&mut Visible> {
150 self.visible.as_mut()
151 }
152
153 #[inline]
154 pub fn set_visible(&mut self, value: Visible) -> &mut Self {
155 self.visible = Some(value);
156 self
157 }
158
159 #[inline]
160 pub fn get_clipboard_format(&self) -> Option<&ClipboardFormat> {
161 self.clipboard_format.as_ref()
162 }
163
164 #[inline]
165 pub fn get_clipboard_format_mut(&mut self) -> Option<&mut ClipboardFormat> {
166 self.clipboard_format.as_mut()
167 }
168
169 #[inline]
170 pub fn set_clipboard_format(&mut self, value: ClipboardFormat) -> &mut Self {
171 self.clipboard_format = Some(value);
172 self
173 }
174
175 #[inline]
176 pub fn get_auto_size_picture(&self) -> Option<&AutoSizePicture> {
177 self.auto_size_picture.as_ref()
178 }
179
180 #[inline]
181 pub fn get_auto_size_picture_mut(&mut self) -> Option<&mut AutoSizePicture> {
182 self.auto_size_picture.as_mut()
183 }
184
185 #[inline]
186 pub fn set_auto_size_picture(&mut self, value: AutoSizePicture) -> &mut Self {
187 self.auto_size_picture = Some(value);
188 self
189 }
190
191 #[inline]
192 pub(crate) fn set_attributes<R: std::io::BufRead>(
193 &mut self,
194 reader: &mut Reader<R>,
195 e: &BytesStart,
196 ) {
197 set_string_from_xml!(self, e, object_type, "ObjectType");
198
199 xml_read_loop!(
200 reader,
201 Event::Empty(ref e) => {
202 match e.name().into_inner() {
203 b"x:MoveWithCells" => {
204 let mut obj = MoveWithCells::default();
205 obj.set_attributes(reader, e, true);
206 self.set_move_with_cells(obj);
207 }
208 b"x:SizeWithCells" => {
209 let mut obj = ResizeWithCells::default();
210 obj.set_attributes(reader, e, true);
211 self.set_resize_with_cells(obj);
212 }
213 b"x:AutoFill" => {
214 let mut obj = AutoFill::default();
215 obj.set_attributes(reader, e, true);
216 self.set_auto_fill(obj);
217 }
218 b"x:Visible" => {
219 let mut obj = Visible::default();
220 obj.set_attributes(reader, e, true);
221 self.set_visible(obj);
222 }
223 b"x:AutoPict" => {
224 let mut obj = AutoSizePicture::default();
225 obj.set_attributes(reader, e, true);
226 self.set_auto_size_picture(obj);
227 }
228 _ => (),
229 }
230 },
231 Event::Start(ref e) => {
232 match e.name().into_inner() {
233 b"x:Anchor" => {
234 let mut obj = Anchor::default();
235 obj.set_attributes(reader, e);
236 self.set_anchor(obj);
237 }
238 b"x:MoveWithCells" => {
239 let mut obj = MoveWithCells::default();
240 obj.set_attributes(reader, e, false);
241 self.set_move_with_cells(obj);
242 }
243 b"x:SizeWithCells" => {
244 let mut obj = ResizeWithCells::default();
245 obj.set_attributes(reader, e, false);
246 self.set_resize_with_cells(obj);
247 }
248 b"x:AutoFill" => {
249 let mut obj = AutoFill::default();
250 obj.set_attributes(reader, e, false);
251 self.set_auto_fill(obj);
252 }
253 b"x:Row" => {
254 let mut obj = CommentRowTarget::default();
255 obj.set_attributes(reader, e);
256 self.set_comment_row_target(obj);
257 }
258 b"x:Column" => {
259 let mut obj = CommentColumnTarget::default();
260 obj.set_attributes(reader, e);
261 self.set_comment_column_target(obj);
262 }
263 b"x:CF" => {
264 let mut obj = ClipboardFormat::default();
265 obj.set_attributes(reader, e);
266 self.set_clipboard_format(obj);
267 }
268 b"x:Visible" => {
269 let mut obj = Visible::default();
270 obj.set_attributes(reader, e, false);
271 self.set_visible(obj);
272 }
273 b"x:AutoPict" => {
274 let mut obj = AutoSizePicture::default();
275 obj.set_attributes(reader, e, false);
276 self.set_auto_size_picture(obj);
277 }
278 _ => (),
279 }
280 },
281 Event::End(ref e) => {
282 if e.name().into_inner() == b"x:ClientData" {
283 return
284 }
285 },
286 Event::Eof => panic!("Error: Could not find {} end element", "x:ClientData")
287 );
288 }
289
290 #[inline]
291 pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
292 write_start_tag(
294 writer,
295 "x:ClientData",
296 vec![("ObjectType", self.object_type.get_value_string())],
297 false,
298 );
299
300 if let Some(v) = &self.move_with_cells {
302 v.write_to(writer);
303 }
304
305 if let Some(v) = &self.resize_with_cells {
307 v.write_to(writer);
308 }
309
310 self.anchor.write_to(writer);
312
313 if let Some(v) = &self.auto_fill {
315 v.write_to(writer);
316 }
317
318 if let Some(v) = &self.comment_row_target {
320 v.write_to(writer);
321 }
322
323 if let Some(v) = &self.comment_column_target {
325 v.write_to(writer);
326 }
327
328 if let Some(v) = &self.visible {
330 v.write_to(writer);
331 }
332
333 if let Some(v) = &self.clipboard_format {
335 v.write_to(writer);
336 }
337
338 if let Some(v) = &self.auto_size_picture {
340 v.write_to(writer);
341 }
342
343 write_end_tag(writer, "x:ClientData");
344 }
345}
346impl AdjustmentCoordinate for ClientData {
347 #[inline]
348 fn adjustment_insert_coordinate(
349 &mut self,
350 root_col_num: &u32,
351 offset_col_num: &u32,
352 root_row_num: &u32,
353 offset_row_num: &u32,
354 ) {
355 self.anchor.adjustment_insert_coordinate(
356 root_col_num,
357 offset_col_num,
358 root_row_num,
359 offset_row_num,
360 );
361 match &mut self.comment_column_target {
362 Some(v) => {
363 v.adjustment_insert_value(root_col_num, offset_col_num);
364 }
365 None => {}
366 }
367 match &mut self.comment_row_target {
368 Some(v) => {
369 v.adjustment_insert_value(root_row_num, offset_row_num);
370 }
371 None => {}
372 }
373 }
374
375 #[inline]
376 fn adjustment_remove_coordinate(
377 &mut self,
378 root_col_num: &u32,
379 offset_col_num: &u32,
380 root_row_num: &u32,
381 offset_row_num: &u32,
382 ) {
383 self.anchor.adjustment_remove_coordinate(
384 root_col_num,
385 offset_col_num,
386 root_row_num,
387 offset_row_num,
388 );
389 match &mut self.comment_column_target {
390 Some(v) => {
391 v.adjustment_remove_value(root_col_num, offset_col_num);
392 }
393 None => {}
394 }
395 match &mut self.comment_row_target {
396 Some(v) => {
397 v.adjustment_remove_value(root_row_num, offset_row_num);
398 }
399 None => {}
400 }
401 }
402}