spreadsheet_ods/style/
masterpage.rs1use crate::style::pagestyle::PageStyleRef;
2use crate::style::AnyStyleRef;
3use crate::text::TextTag;
4use get_size::GetSize;
5use get_size_derive::GetSize;
6use std::borrow::Borrow;
7
8style_ref2!(MasterPageRef);
9
10#[derive(Clone, Debug, Default, GetSize)]
43pub struct MasterPage {
44 name: String,
45 display_name: String,
46 pagestyle: Option<PageStyleRef>,
47 next_style_name: Option<MasterPageRef>,
48
49 header: HeaderFooter,
50 header_first: HeaderFooter,
51 header_left: HeaderFooter,
52
53 footer: HeaderFooter,
54 footer_first: HeaderFooter,
55 footer_left: HeaderFooter,
56}
57
58impl MasterPage {
59 pub fn new_empty() -> Self {
61 Self {
62 name: Default::default(),
63 display_name: Default::default(),
64 pagestyle: Default::default(),
65 next_style_name: Default::default(),
66 header: Default::default(),
67 header_first: Default::default(),
68 header_left: Default::default(),
69 footer: Default::default(),
70 footer_first: Default::default(),
71 footer_left: Default::default(),
72 }
73 }
74
75 pub fn new<S: AsRef<str>>(name: S) -> Self {
77 Self {
78 name: name.as_ref().to_string(),
79 display_name: Default::default(),
80 pagestyle: Default::default(),
81 next_style_name: Default::default(),
82 header: Default::default(),
83 header_first: Default::default(),
84 header_left: Default::default(),
85 footer: Default::default(),
86 footer_first: Default::default(),
87 footer_left: Default::default(),
88 }
89 }
90
91 pub fn masterpage_ref(&self) -> MasterPageRef {
93 MasterPageRef::from(self.name())
94 }
95
96 pub fn set_name(&mut self, name: String) {
98 self.name = name;
99 }
100
101 pub fn name(&self) -> &String {
103 &self.name
104 }
105
106 pub fn set_display_name(&mut self, display_name: String) {
108 self.display_name = display_name;
109 }
110
111 pub fn display_name(&self) -> &String {
113 &self.display_name
114 }
115
116 pub fn set_pagestyle(&mut self, name: &PageStyleRef) {
118 self.pagestyle = Some(name.clone());
119 }
120
121 pub fn pagestyle(&self) -> Option<&PageStyleRef> {
123 self.pagestyle.as_ref()
124 }
125
126 pub fn set_next_masterpage(&mut self, master: &MasterPageRef) {
131 self.next_style_name = Some(master.clone());
132 }
133
134 pub fn next_masterpage(&self) -> Option<&MasterPageRef> {
136 self.next_style_name.as_ref()
137 }
138
139 pub fn set_header(&mut self, header: HeaderFooter) {
141 self.header = header;
142 }
143
144 pub fn header(&self) -> &HeaderFooter {
146 &self.header
147 }
148
149 pub fn header_mut(&mut self) -> &mut HeaderFooter {
151 &mut self.header
152 }
153
154 pub fn set_header_first(&mut self, header: HeaderFooter) {
156 self.header_first = header;
157 }
158
159 pub fn header_first(&self) -> &HeaderFooter {
161 &self.header_first
162 }
163
164 pub fn header_first_mut(&mut self) -> &mut HeaderFooter {
166 &mut self.header_first
167 }
168
169 pub fn set_header_left(&mut self, header: HeaderFooter) {
171 self.header_left = header;
172 }
173
174 pub fn header_left(&self) -> &HeaderFooter {
176 &self.header_left
177 }
178
179 pub fn header_left_mut(&mut self) -> &mut HeaderFooter {
181 &mut self.header_left
182 }
183
184 pub fn set_footer(&mut self, footer: HeaderFooter) {
186 self.footer = footer;
187 }
188
189 pub fn footer(&self) -> &HeaderFooter {
191 &self.footer
192 }
193
194 pub fn footer_mut(&mut self) -> &mut HeaderFooter {
196 &mut self.footer
197 }
198
199 pub fn set_footer_first(&mut self, footer: HeaderFooter) {
201 self.footer_first = footer;
202 }
203
204 pub fn footer_first(&self) -> &HeaderFooter {
206 &self.footer_first
207 }
208
209 pub fn footer_first_mut(&mut self) -> &mut HeaderFooter {
211 &mut self.footer_first
212 }
213
214 pub fn set_footer_left(&mut self, footer: HeaderFooter) {
216 self.footer_left = footer;
217 }
218
219 pub fn footer_left(&self) -> &HeaderFooter {
221 &self.footer_left
222 }
223
224 pub fn footer_left_mut(&mut self) -> &mut HeaderFooter {
226 &mut self.footer_left
227 }
228}
229
230#[derive(Clone, Debug, Default, GetSize)]
235pub struct HeaderFooter {
236 display: bool,
237
238 region_left: Vec<TextTag>,
239 region_center: Vec<TextTag>,
240 region_right: Vec<TextTag>,
241
242 content: Vec<TextTag>,
243}
244
245impl HeaderFooter {
246 pub fn new() -> Self {
248 Self {
249 display: true,
250 region_left: Default::default(),
251 region_center: Default::default(),
252 region_right: Default::default(),
253 content: Default::default(),
254 }
255 }
256
257 pub fn set_display(&mut self, display: bool) {
259 self.display = display;
260 }
261
262 pub fn display(&self) -> bool {
264 self.display
265 }
266
267 pub fn is_empty(&self) -> bool {
269 self.region_left.is_empty()
270 && self.region_center.is_empty()
271 && self.region_right.is_empty()
272 && self.content.is_empty()
273 }
274
275 pub fn set_left(&mut self, txt: Vec<TextTag>) {
280 self.region_left = txt;
281 }
282
283 pub fn add_left(&mut self, txt: TextTag) {
288 self.region_left.push(txt);
289 }
290
291 pub fn clear_left(&mut self) {
293 self.region_left = Vec::new();
294 }
295
296 pub fn left(&self) -> &Vec<TextTag> {
298 self.region_left.as_ref()
299 }
300
301 pub fn left_mut(&mut self) -> &mut Vec<TextTag> {
303 self.region_left.as_mut()
304 }
305
306 pub fn set_center(&mut self, txt: Vec<TextTag>) {
311 self.region_center = txt;
312 }
313
314 pub fn add_center(&mut self, txt: TextTag) {
319 self.region_center.push(txt);
320 }
321
322 pub fn clear_center(&mut self) {
324 self.region_center = Vec::new();
325 }
326
327 pub fn center(&self) -> &Vec<TextTag> {
329 self.region_center.as_ref()
330 }
331
332 pub fn center_mut(&mut self) -> &mut Vec<TextTag> {
334 self.region_center.as_mut()
335 }
336
337 pub fn set_right(&mut self, txt: Vec<TextTag>) {
342 self.region_right = txt;
343 }
344
345 pub fn add_right(&mut self, txt: TextTag) {
350 self.region_right.push(txt);
351 }
352
353 pub fn clear_right(&mut self) {
355 self.region_right = Vec::new();
356 }
357
358 pub fn right(&self) -> &Vec<TextTag> {
360 self.region_right.as_ref()
361 }
362
363 pub fn right_mut(&mut self) -> &mut Vec<TextTag> {
365 self.region_right.as_mut()
366 }
367
368 pub fn set_content(&mut self, txt: Vec<TextTag>) {
370 self.content = txt;
371 }
372
373 pub fn add_content(&mut self, txt: TextTag) {
375 self.content.push(txt);
376 }
377
378 pub fn content(&self) -> &Vec<TextTag> {
380 &self.content
381 }
382
383 pub fn content_mut(&mut self) -> &mut Vec<TextTag> {
385 &mut self.content
386 }
387}