trying to build a better preview bar
Some checks are pending
/ test (push) Waiting to run

This commit is contained in:
Chris Cochrun 2025-08-18 06:40:08 -05:00
parent 206f5b16a5
commit f662e57c8f
2 changed files with 65 additions and 20 deletions

View file

@ -570,45 +570,71 @@ impl cosmic::Application for App {
} }
match self.presenter.update(message) { match self.presenter.update(message) {
presenter::Action::Task(task) => task.map(|m| { presenter::Action::Task(task) => task.map(|m| {
debug!("Should run future"); // debug!("Should run future");
cosmic::Action::App(Message::Present(m)) cosmic::Action::App(Message::Present(m))
}), }),
presenter::Action::None => Task::none(), presenter::Action::None => Task::none(),
presenter::Action::NextSlide => { presenter::Action::NextSlide => {
let slide_index = self.current_item.1; let slide_index = self.current_item.1;
let item_index = self.current_item.0; let item_index = self.current_item.0;
let mut tasks = vec![];
if let Some(item) = if let Some(item) =
self.service.get(item_index) self.service.get(item_index)
{ {
if item.slides.len() > slide_index + 1 { if item.slides.len() > slide_index + 1 {
let slide_length = item.slides.len(); // let slide_length = item.slides.len();
debug!( // debug!(
slide_index, // slide_index,
slide_length, // slide_length,
?item, // ?item,
"Slides are longer" // "Slides are longer"
); // );
let slide = item.slides let slide = item.slides
[slide_index + 1] [slide_index + 1]
.clone(); .clone();
self.presenter.update( let action = self.presenter.update(
presenter::Message::SlideChange( presenter::Message::SlideChange(
slide, slide,
), ),
); );
match action {
presenter::Action::Task(task) => {
tasks.push(task.map(|m| {
cosmic::Action::App(
Message::Present(m),
)
}))
}
_ => todo!(),
}
self.current_item = self.current_item =
(item_index, slide_index + 1); (item_index, slide_index + 1);
Task::none() Task::batch(tasks)
} else { } else {
debug!("Slides are not longer"); // debug!("Slides are not longer");
self.current_item = self.current_item =
(item_index + 1, 0); (item_index + 1, 0);
if let Some(item) = if let Some(item) =
self.service.get(item_index + 1) 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,
),
)
}))
} }
Task::none() _ => todo!(),
}
}
Task::batch(tasks)
} }
} else { } else {
Task::none() Task::none()
@ -648,7 +674,7 @@ impl cosmic::Application for App {
{ {
Task::none() Task::none()
} else { } else {
debug!("Change slide to previous items slides"); // debug!("Change slide to previous items slides");
let previous_item_slides_length = let previous_item_slides_length =
if let Some(item) = self if let Some(item) = self
.service .service

View file

@ -20,8 +20,8 @@ use cosmic::{
}, },
prelude::*, prelude::*,
widget::{ widget::{
container, image, mouse_area, responsive, scrollable, Column, container, horizontal_space, image, mouse_area, responsive,
Container, Id, Row, Space, scrollable, text, Column, Container, Id, Row, Space,
}, },
Task, Task,
}; };
@ -416,6 +416,28 @@ impl Presenter {
pub fn preview_bar(&self) -> Element<Message> { pub fn preview_bar(&self) -> Element<Message> {
let mut items = vec![]; 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() { for slide in self.slides.iter() {
items.push(self.slide_delegate(slide)); items.push(self.slide_delegate(slide));
} }
@ -428,10 +450,7 @@ impl Presenter {
row.into() row.into()
} }
fn slide_delegate<'a>( fn slide_delegate(&self, slide: &Slide) -> Element<'_, Message> {
&'a self,
slide: &'a Slide,
) -> Element<'a, Message> {
let font_name = slide.font().into_boxed_str(); let font_name = slide.font().into_boxed_str();
let family = Family::Name(Box::leak(font_name)); let family = Family::Name(Box::leak(font_name));
let weight = Weight::Normal; let weight = Weight::Normal;