diff --git a/src/main.rs b/src/main.rs index 98910fe..6e92c1c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -570,45 +570,71 @@ impl cosmic::Application for App { } match self.presenter.update(message) { presenter::Action::Task(task) => task.map(|m| { - debug!("Should run future"); + // debug!("Should run future"); cosmic::Action::App(Message::Present(m)) }), presenter::Action::None => Task::none(), presenter::Action::NextSlide => { let slide_index = self.current_item.1; let item_index = self.current_item.0; + let mut tasks = vec![]; if let Some(item) = self.service.get(item_index) { if item.slides.len() > slide_index + 1 { - let slide_length = item.slides.len(); - debug!( - slide_index, - slide_length, - ?item, - "Slides are longer" - ); + // let slide_length = item.slides.len(); + // debug!( + // slide_index, + // slide_length, + // ?item, + // "Slides are longer" + // ); let slide = item.slides [slide_index + 1] .clone(); - self.presenter.update( + let action = self.presenter.update( presenter::Message::SlideChange( slide, ), ); + match action { + presenter::Action::Task(task) => { + tasks.push(task.map(|m| { + cosmic::Action::App( + Message::Present(m), + ) + })) + } + _ => todo!(), + } self.current_item = (item_index, slide_index + 1); - Task::none() + Task::batch(tasks) } else { - debug!("Slides are not longer"); + // debug!("Slides are not longer"); self.current_item = (item_index + 1, 0); if let Some(item) = self.service.get(item_index + 1) { - self.presenter.update(presenter::Message::SlideChange(item.slides[0].clone())); + let action = self.presenter.update(presenter::Message::SlideChange(item.slides[0].clone())); + match action { + presenter::Action::Task( + task, + ) => { + tasks + .push(task.map(|m| { + cosmic::Action::App( + Message::Present( + m, + ), + ) + })) + } + _ => todo!(), + } } - Task::none() + Task::batch(tasks) } } else { Task::none() @@ -648,7 +674,7 @@ impl cosmic::Application for App { { Task::none() } else { - debug!("Change slide to previous items slides"); + // debug!("Change slide to previous items slides"); let previous_item_slides_length = if let Some(item) = self .service diff --git a/src/ui/presenter.rs b/src/ui/presenter.rs index a30e1e0..2b102ec 100644 --- a/src/ui/presenter.rs +++ b/src/ui/presenter.rs @@ -20,8 +20,8 @@ use cosmic::{ }, prelude::*, widget::{ - container, image, mouse_area, responsive, scrollable, Column, - Container, Id, Row, Space, + container, horizontal_space, image, mouse_area, responsive, + scrollable, text, Column, Container, Id, Row, Space, }, Task, }; @@ -416,6 +416,28 @@ impl Presenter { pub fn preview_bar(&self) -> Element { let mut items = vec![]; + // for item in &self.service { + // let mut slides = vec![]; + // for slide in item.slides.iter() { + // slides.push(self.slide_delegate(slide)); + // } + + // let row = scrollable( + // Row::from_vec(slides).spacing(10).padding(15), + // ) + // .direction(Direction::Horizontal(Scrollbar::new())) + // .height(Length::Fill) + // .width(Length::Fill) + // .id(self.scroll_id.clone()); + // let label = + // text::body(item.title.clone()).line_height(5.0); + // let label_container = + // container(horizontal_space().width(Length::Shrink)) + // .align_left(Length::Fill) + // .align_top(Length::Fill) + // .padding([3, 0, 0, 10]); + // items.push(stack!(row, label_container).into()); + // } for slide in self.slides.iter() { items.push(self.slide_delegate(slide)); } @@ -428,10 +450,7 @@ impl Presenter { row.into() } - fn slide_delegate<'a>( - &'a self, - slide: &'a Slide, - ) -> Element<'a, Message> { + fn slide_delegate(&self, slide: &Slide) -> Element<'_, Message> { let font_name = slide.font().into_boxed_str(); let family = Family::Name(Box::leak(font_name)); let weight = Weight::Normal;