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)
|
||||
{
|
||||
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,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue