needing to make slides a structure in multiple places
This commit is contained in:
parent
a6b78e2e7d
commit
f81efdeef3
15
src/main.rs
15
src/main.rs
|
@ -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;
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
pub mod presenter;
|
pub mod presenter;
|
||||||
|
pub mod slide_preview;
|
||||||
|
|
|
@ -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
5
src/ui/slide_preview.rs
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
use crate::Slide;
|
||||||
|
|
||||||
|
pub struct SlidePreview<'a> {
|
||||||
|
slides: Vec<&'a Slide>,
|
||||||
|
}
|
Loading…
Reference in a new issue