needing to make slides a structure in multiple places

This commit is contained in:
Chris Cochrun 2024-11-14 15:24:20 -06:00
parent a6b78e2e7d
commit f81efdeef3
4 changed files with 45 additions and 27 deletions

View file

@ -68,15 +68,16 @@ fn theme(_state: &App) -> Theme {
Theme::dark() Theme::dark()
} }
struct App { struct App<'a> {
core: Core, core: Core,
nav_model: nav_bar::Model, nav_model: nav_bar::Model,
file: PathBuf, file: PathBuf,
presenter: Presenter, presenter: Presenter<'a>,
windows: Vec<window::Id>, windows: Vec<window::Id>,
slides: Vec<Slide>,
} }
impl Default for App { impl Default for App<'_> {
fn default() -> Self { fn default() -> Self {
let initial_slide = SlideBuilder::new() let initial_slide = SlideBuilder::new()
.background(PathBuf::from( .background(PathBuf::from(
@ -86,13 +87,15 @@ impl Default for App {
.text("Hello") .text("Hello")
.build() .build()
.expect("oops slide"); .expect("oops slide");
let presenter = Presenter::with_initial_slide(initial_slide); let slides = vec![initial_slide];
let presenter = Presenter::with_app_slides(&slides);
Self { Self {
presenter, presenter,
core: Core::default(), core: Core::default(),
nav_model: nav_bar::Model::default(), nav_model: nav_bar::Model::default(),
file: PathBuf::default(), file: PathBuf::default(),
windows: vec![], windows: vec![],
slides: vec![initial_slide],
} }
} }
} }
@ -151,7 +154,8 @@ impl cosmic::Application for App {
.video_end_time(0.0) .video_end_time(0.0)
.build() .build()
.expect("oops slide"); .expect("oops slide");
let presenter = Presenter::with_initial_slide(initial_slide); let presenter =
Presenter::with_initial_slide(initial_slide.clone());
let mut app = App { let mut app = App {
core, core,
@ -159,6 +163,7 @@ impl cosmic::Application for App {
file: input.file, file: input.file,
windows, windows,
presenter, presenter,
slides: vec![initial_slide],
}; };
let command; let command;

View file

@ -1 +1,2 @@
pub mod presenter; pub mod presenter;
pub mod slide_preview;

View file

@ -17,8 +17,8 @@ use tracing::{debug, error};
use crate::core::slide::Slide; use crate::core::slide::Slide;
// #[derive(Default, Clone, Debug)] // #[derive(Default, Clone, Debug)]
pub(crate) struct Presenter { pub(crate) struct Presenter<'a> {
pub slides: Vec<Slide>, pub slides: &'a Vec<Slide>,
pub current_slide: i16, pub current_slide: i16,
pub video: Option<Video>, pub video: Option<Video>,
} }
@ -30,30 +30,37 @@ pub(crate) enum Message {
SlideChange(u8), SlideChange(u8),
} }
impl Presenter { impl<'a> Presenter<'a> {
pub fn with_initial_slide(slide: Slide) -> Self { pub fn with_app_slides(slides: &'a Vec<Slide>) -> Self {
Self { Self {
slides: vec![slide.clone()], slides: slides,
current_slide: 0, current_slide: 0,
video: { video: None,
let path = slide.background().path.clone();
if path.exists() {
let url = Url::from_file_path(path).unwrap();
let result = Video::new(&url);
match result {
Ok(v) => Some(v),
Err(e) => {
error!("Had an error creating the video object: {e}");
None
}
}
} else {
error!("File doesn't exist: ");
None
}
},
} }
} }
// pub fn with_initial_slide(slide: Slide) -> Self {
// Self {
// slides: vec![slide.clone()],
// current_slide: 0,
// video: {
// let path = slide.background().path.clone();
// if path.exists() {
// let url = Url::from_file_path(path).unwrap();
// let result = Video::new(&url);
// match result {
// Ok(v) => Some(v),
// Err(e) => {
// error!("Had an error creating the video object: {e}");
// None
// }
// }
// } else {
// error!("File doesn't exist: ");
// None
// }
// },
// }
// }
pub fn update( pub fn update(
&mut self, &mut self,

5
src/ui/slide_preview.rs Normal file
View file

@ -0,0 +1,5 @@
use crate::Slide;
pub struct SlidePreview<'a> {
slides: Vec<&'a Slide>,
}