use crate::attrmap2::AttrMap2;
use crate::color::Rgb;
use crate::style::units::{
Border, LengthPercent, Margin, MasterPageUsage, Percent, PrintCentering, PrintContent,
PrintOrder, PrintOrientation, StyleNumFormat, WritingMode,
};
use crate::style::AnyStyleRef;
use crate::style::{
border_line_width_string, border_string, color_string, shadow_string, ParseStyleAttr,
};
use crate::{Length, OdsResult};
use get_size::GetSize;
use get_size_derive::GetSize;
use std::borrow::Borrow;
style_ref2!(PageStyleRef);
#[derive(Debug, Clone, GetSize)]
pub struct PageStyle {
name: String,
pub(crate) master_page_usage: Option<String>,
style: AttrMap2,
header: HeaderFooterStyle,
footer: HeaderFooterStyle,
}
impl PageStyle {
pub fn new_empty() -> Self {
Self {
name: Default::default(),
master_page_usage: None,
style: Default::default(),
header: Default::default(),
footer: Default::default(),
}
}
pub fn new<S: AsRef<str>>(name: S) -> Self {
Self {
name: name.as_ref().to_string(),
master_page_usage: None,
style: Default::default(),
header: Default::default(),
footer: Default::default(),
}
}
pub fn style_ref(&self) -> PageStyleRef {
PageStyleRef::from(self.name())
}
pub fn name(&self) -> &str {
&self.name
}
pub fn set_name<S: Into<String>>(&mut self, name: S) {
self.name = name.into();
}
pub fn set_page_usage(&mut self, usage: MasterPageUsage) {
self.master_page_usage = Some(usage.to_string());
}
pub fn clear_page_usage(&mut self) {
self.master_page_usage = None;
}
pub fn page_usage(&self) -> OdsResult<Option<MasterPageUsage>> {
MasterPageUsage::parse_attr(self.master_page_usage.as_deref())
}
pub fn headerstyle(&self) -> &HeaderFooterStyle {
&self.header
}
pub fn headerstyle_mut(&mut self) -> &mut HeaderFooterStyle {
&mut self.header
}
pub fn footerstyle(&self) -> &HeaderFooterStyle {
&self.footer
}
pub fn footerstyle_mut(&mut self) -> &mut HeaderFooterStyle {
&mut self.footer
}
pub fn style(&self) -> &AttrMap2 {
&self.style
}
pub fn style_mut(&mut self) -> &mut AttrMap2 {
&mut self.style
}
fo_page_height!(style);
fo_page_width!(style);
style_first_page_number!(style);
style_footnote_max_height!(style);
style_num_format!(style);
style_num_letter_sync!(style);
style_num_prefix!(style);
style_num_suffix!(style);
style_paper_tray_name!(style);
style_print!(style);
style_print_orientation!(style);
style_print_page_order!(style);
style_scale_to!(style);
style_scale_to_pages!(style);
style_table_centering!(style);
style_writing_mode!(style);
fo_background_color!(style);
fo_border!(style);
fo_border_line_width!(style);
fo_margin!(style);
fo_padding!(style);
style_dynamic_spacing!(style);
style_shadow!(style);
}
#[derive(Clone, Debug, Default, GetSize)]
pub struct HeaderFooterStyle {
style: AttrMap2,
}
impl HeaderFooterStyle {
pub fn style(&self) -> &AttrMap2 {
&self.style
}
pub fn style_mut(&mut self) -> &mut AttrMap2 {
&mut self.style
}
fo_background_color!(style);
fo_border!(style);
fo_margin!(style);
fo_min_height!(style);
fo_padding!(style);
fo_border_line_width!(style);
style_dynamic_spacing!(style);
style_shadow!(style);
svg_height!(style);
}