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

View file

@ -68,6 +68,7 @@ pub(crate) enum Message {
NextSlide,
PrevSlide,
SlideChange(Slide),
ActivateSlide(usize, usize),
EndVideo,
StartVideo,
StartAudio,
@ -214,6 +215,19 @@ impl Presenter {
// 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) => {
let slide_text = slide.text();
debug!(slide_text, "slide changed");
@ -235,10 +249,34 @@ impl Presenter {
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 {
x: {
if self.current_slide_index > 2 {
(self.current_slide_index as f32)
if target_item > 2 {
(target_item as f32)
.mul_add(187.5, -187.5)
} else {
0.0
@ -246,7 +284,7 @@ impl Presenter {
},
y: 0.0,
};
debug!(?offset);
let mut tasks = vec![];
tasks.push(scroll_to(self.scroll_id.clone(), offset));
@ -509,8 +547,9 @@ impl Presenter {
)))
})
.on_exit(Message::HoveredSlide(None))
.on_press(Message::SlideChange(
slide.clone(),
.on_press(Message::ActivateSlide(
item_index,
slide_index,
));
slides.push(delegate.into());
},