use std::cell::RefCell;
use std::rc::Rc;
use crate::oxml::notesmaster::NotesMaster as OxmlNotesMaster;
use crate::oxml::shape::Sp as OxmlSp;
#[derive(Debug, Clone)]
pub struct NotesMasterRef {
#[allow(dead_code)]
pub(crate) idx: usize,
pub(crate) partname: String,
pub(crate) rid: String,
pub(crate) oxml: Rc<RefCell<OxmlNotesMaster>>,
}
impl NotesMasterRef {
pub fn partname(&self) -> &str {
&self.partname
}
pub fn rid(&self) -> &str {
&self.rid
}
pub fn shapes(&self) -> Vec<OxmlSp> {
self.oxml.borrow().shapes.clone()
}
pub fn shapes_mut(&self) -> std::cell::RefMut<'_, Vec<OxmlSp>> {
std::cell::RefMut::map(self.oxml.borrow_mut(), |m| &mut m.shapes)
}
pub fn len(&self) -> usize {
self.oxml.borrow().shapes.len()
}
pub fn is_empty(&self) -> bool {
self.oxml.borrow().shapes.is_empty()
}
pub fn background(&self) -> Option<crate::oxml::slide::SlideBackground> {
self.oxml.borrow().background.clone()
}
}
#[derive(Debug, Default, Clone)]
pub struct NotesMasters {
pub(crate) items: Vec<NotesMasterRef>,
}
impl NotesMasters {
pub fn new() -> Self {
NotesMasters::default()
}
pub fn len(&self) -> usize {
self.items.len()
}
pub fn is_empty(&self) -> bool {
self.items.is_empty()
}
pub fn iter(&self) -> std::slice::Iter<'_, NotesMasterRef> {
self.items.iter()
}
pub fn get(&self, idx: usize) -> Option<&NotesMasterRef> {
self.items.get(idx)
}
pub fn first(&self) -> Option<&NotesMasterRef> {
self.items.first()
}
pub fn push(&mut self, master: NotesMasterRef) {
self.items.push(master);
}
}