|
|
@ -212,7 +212,7 @@ impl Menu {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let padding = self.padding_bottom();
|
|
|
|
let padding = self.padding_bottom();
|
|
|
|
if self.scroll <= padding {
|
|
|
|
if self.scroll < padding {
|
|
|
|
self.scroll += SCROLL_LINES;
|
|
|
|
self.scroll += SCROLL_LINES;
|
|
|
|
if self.scroll > padding {
|
|
|
|
if self.scroll > padding {
|
|
|
|
self.scroll = padding;
|
|
|
|
self.scroll = padding;
|
|
|
@ -221,25 +221,27 @@ impl Menu {
|
|
|
|
return Action::Redraw;
|
|
|
|
return Action::Redraw;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if !self.links.is_empty() {
|
|
|
|
|
|
|
|
self.link = self.links.len() - 1;
|
|
|
|
|
|
|
|
return Action::Redraw;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
if let Some(dir) = self.link_visibility(self.link) {
|
|
|
|
if let Some(dir) = self.link_visibility(self.link) {
|
|
|
|
match dir {
|
|
|
|
match dir {
|
|
|
|
LinkPos::Above => {
|
|
|
|
LinkPos::Above => {
|
|
|
|
let scroll = self.scroll;
|
|
|
|
let scroll = self.scroll;
|
|
|
|
if let Some(&pos) =
|
|
|
|
if let Some(&pos) = self.links.iter().skip(self.link).find(|&&i| i >= scroll) {
|
|
|
|
self.links.iter().skip(self.link).find(|&&i| i >= scroll)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
self.link = self.lines.get(pos).unwrap().link;
|
|
|
|
self.link = self.lines.get(pos).unwrap().link;
|
|
|
|
|
|
|
|
return Action::Redraw;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LinkPos::Below => {}
|
|
|
|
LinkPos::Below => {}
|
|
|
|
LinkPos::Visible => {}
|
|
|
|
LinkPos::Visible => {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Action::Redraw
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
Action::None
|
|
|
|
Action::None
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fn action_page_up(&mut self) -> Action {
|
|
|
|
fn action_page_up(&mut self) -> Action {
|
|
|
|
if self.scroll > 0 {
|
|
|
|
if self.scroll > 0 {
|
|
|
@ -283,6 +285,10 @@ impl Menu {
|
|
|
|
return if self.scroll > 0 {
|
|
|
|
return if self.scroll > 0 {
|
|
|
|
self.scroll -= 1;
|
|
|
|
self.scroll -= 1;
|
|
|
|
Action::Redraw
|
|
|
|
Action::Redraw
|
|
|
|
|
|
|
|
} else if !self.links.is_empty() {
|
|
|
|
|
|
|
|
self.link = self.links.len() - 1;
|
|
|
|
|
|
|
|
self.scroll_to(self.link);
|
|
|
|
|
|
|
|
Action::Redraw
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
Action::None
|
|
|
|
Action::None
|
|
|
|
};
|
|
|
|
};
|
|
|
@ -379,7 +385,10 @@ impl Menu {
|
|
|
|
self.scroll += 1;
|
|
|
|
self.scroll += 1;
|
|
|
|
return Action::Redraw;
|
|
|
|
return Action::Redraw;
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
return Action::None;
|
|
|
|
// wrap around
|
|
|
|
|
|
|
|
self.link = 0;
|
|
|
|
|
|
|
|
self.scroll_to(self.link);
|
|
|
|
|
|
|
|
return Action::Redraw;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|