some updates to track the change of slides
Some checks are pending
/ test (push) Waiting to run

This commit is contained in:
Chris Cochrun 2025-09-24 09:35:05 -05:00
parent 20d042d279
commit f15452802a
2 changed files with 65 additions and 30 deletions

View file

@ -784,19 +784,11 @@ impl cosmic::Application for App {
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_index = slide_index + 1;
// debug!(
// slide_index,
// slide_length,
// ?item,
// "Slides are longer"
// );
let slide = item.slides
[slide_index + 1]
.clone();
let action = self.presenter.update( let action = self.presenter.update(
presenter::Message::SlideChange( presenter::Message::ActivateSlide(
slide, item_index,
slide_index,
), ),
); );
match action { match action {
@ -816,10 +808,12 @@ impl cosmic::Application for App {
// 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 self
self.service.get(item_index + 1) .service
.get(item_index + 1)
.is_some()
{ {
let action = self.presenter.update(presenter::Message::SlideChange(item.slides[0].clone())); let action = self.presenter.update(presenter::Message::ActivateSlide(self.current_item.0, self.current_item.1));
match action { match action {
presenter::Action::Task( presenter::Action::Task(
task, task,
@ -850,12 +844,11 @@ impl cosmic::Application for App {
self.service.get(item_index) self.service.get(item_index)
{ {
if slide_index != 0 { if slide_index != 0 {
let slide = item.slides let slide_index = slide_index - 1;
[slide_index - 1]
.clone();
let action = self.presenter.update( let action = self.presenter.update(
presenter::Message::SlideChange( presenter::Message::ActivateSlide(
slide, item_index,
slide_index,
), ),
); );
match action { match action {
@ -890,10 +883,12 @@ impl cosmic::Application for App {
item_index - 1, item_index - 1,
previous_item_slides_length - 1, previous_item_slides_length - 1,
); );
if let Some(item) = if self
self.service.get(item_index - 1) .service
.get(item_index - 1)
.is_some()
{ {
let action = self.presenter.update(presenter::Message::SlideChange(item.slides[previous_item_slides_length - 1].clone())); let action = self.presenter.update(presenter::Message::ActivateSlide(self.current_item.0, self.current_item.1));
match action { match action {
presenter::Action::Task( presenter::Action::Task(
task, task,
@ -1080,8 +1075,9 @@ impl cosmic::Application for App {
{ {
self.current_item = (index, 0); self.current_item = (index, 0);
self.presenter.update( self.presenter.update(
presenter::Message::SlideChange( presenter::Message::ActivateSlide(
slide.clone(), self.current_item.0,
self.current_item.1,
), ),
); );
} }

View file

@ -68,6 +68,7 @@ pub(crate) enum Message {
NextSlide, NextSlide,
PrevSlide, PrevSlide,
SlideChange(Slide), SlideChange(Slide),
ActivateSlide(usize, usize),
EndVideo, EndVideo,
StartVideo, StartVideo,
StartAudio, StartAudio,
@ -214,6 +215,19 @@ impl Presenter {
// self.current_slide_index - 1, // self.current_slide_index - 1,
// )); // ));
} }
Message::ActivateSlide(item_index, slide_index) => {
if let Some(slide) = self
.service
.get(item_index)
.map(|item| item.slides.get(slide_index))
.flatten()
{
self.current_item = item_index;
self.current_slide_index = slide_index;
return self
.update(Message::SlideChange(slide.clone()));
}
}
Message::SlideChange(slide) => { Message::SlideChange(slide) => {
let slide_text = slide.text(); let slide_text = slide.text();
debug!(slide_text, "slide changed"); debug!(slide_text, "slide changed");
@ -235,10 +249,34 @@ impl Presenter {
self.reset_video(); self.reset_video();
} }
let mut target_item = 0;
self.service.iter().enumerate().try_for_each(
|(index, item)| {
item.slides.iter().enumerate().try_for_each(
|(slide_index, _)| {
target_item += 1;
if (index, slide_index)
== (
self.current_item,
self.current_slide_index,
)
{
None
} else {
Some(())
}
},
)
},
);
debug!(target_item);
let offset = AbsoluteOffset { let offset = AbsoluteOffset {
x: { x: {
if self.current_slide_index > 2 { if target_item > 2 {
(self.current_slide_index as f32) (target_item as f32)
.mul_add(187.5, -187.5) .mul_add(187.5, -187.5)
} else { } else {
0.0 0.0
@ -246,7 +284,7 @@ impl Presenter {
}, },
y: 0.0, y: 0.0,
}; };
debug!(?offset);
let mut tasks = vec![]; let mut tasks = vec![];
tasks.push(scroll_to(self.scroll_id.clone(), offset)); tasks.push(scroll_to(self.scroll_id.clone(), offset));
@ -509,8 +547,9 @@ impl Presenter {
))) )))
}) })
.on_exit(Message::HoveredSlide(None)) .on_exit(Message::HoveredSlide(None))
.on_press(Message::SlideChange( .on_press(Message::ActivateSlide(
slide.clone(), item_index,
slide_index,
)); ));
slides.push(delegate.into()); slides.push(delegate.into());
}, },