This commit is contained in:
parent
20d042d279
commit
f15452802a
2 changed files with 65 additions and 30 deletions
46
src/main.rs
46
src/main.rs
|
|
@ -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,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue