mirror of
https://github.com/ChrisTitusTech/linutil.git
synced 2024-11-24 06:01:55 +00:00
allow scrolling past last entry / first entry (#727)
* allow scrolling past last entry * Update tui/src/state.rs Co-authored-by: Liam <33645555+lj3954@users.noreply.github.com> * Update tui/src/state.rs Co-authored-by: Liam <33645555+lj3954@users.noreply.github.com> * apply changes proposed by adam Co-authored-by: Adam Perkowski <adas1per@protonmail.com> * apply changes proposed by adam round 2 Co-authored-by: Adam Perkowski <adas1per@protonmail.com> * undo changes proposed by adam in scroll up and down funcs --------- Co-authored-by: nyx <nnyyxxxx@users.noreply.github.com> Co-authored-by: Liam <33645555+lj3954@users.noreply.github.com> Co-authored-by: Adam Perkowski <adas1per@protonmail.com>
This commit is contained in:
parent
66a4334aee
commit
1dcc3f3c99
|
@ -491,17 +491,9 @@ impl AppState {
|
||||||
Focus::TabList => match key.code {
|
Focus::TabList => match key.code {
|
||||||
KeyCode::Enter | KeyCode::Char('l') | KeyCode::Right => self.focus = Focus::List,
|
KeyCode::Enter | KeyCode::Char('l') | KeyCode::Right => self.focus = Focus::List,
|
||||||
|
|
||||||
KeyCode::Char('j') | KeyCode::Down
|
KeyCode::Char('j') | KeyCode::Down => self.scroll_tab_down(),
|
||||||
if self.current_tab.selected().unwrap() + 1 < self.tabs.len() =>
|
|
||||||
{
|
|
||||||
self.current_tab.select_next();
|
|
||||||
self.refresh_tab();
|
|
||||||
}
|
|
||||||
|
|
||||||
KeyCode::Char('k') | KeyCode::Up => {
|
KeyCode::Char('k') | KeyCode::Up => self.scroll_tab_up(),
|
||||||
self.current_tab.select_previous();
|
|
||||||
self.refresh_tab();
|
|
||||||
}
|
|
||||||
|
|
||||||
KeyCode::Char('/') => self.enter_search(),
|
KeyCode::Char('/') => self.enter_search(),
|
||||||
KeyCode::Char('t') => self.theme.next(),
|
KeyCode::Char('t') => self.theme.next(),
|
||||||
|
@ -511,8 +503,8 @@ impl AppState {
|
||||||
},
|
},
|
||||||
|
|
||||||
Focus::List if key.kind != KeyEventKind::Release => match key.code {
|
Focus::List if key.kind != KeyEventKind::Release => match key.code {
|
||||||
KeyCode::Char('j') | KeyCode::Down => self.selection.select_next(),
|
KeyCode::Char('j') | KeyCode::Down => self.scroll_down(),
|
||||||
KeyCode::Char('k') | KeyCode::Up => self.selection.select_previous(),
|
KeyCode::Char('k') | KeyCode::Up => self.scroll_up(),
|
||||||
KeyCode::Char('p') | KeyCode::Char('P') => self.enable_preview(),
|
KeyCode::Char('p') | KeyCode::Char('P') => self.enable_preview(),
|
||||||
KeyCode::Char('d') | KeyCode::Char('D') => self.enable_description(),
|
KeyCode::Char('d') | KeyCode::Char('D') => self.enable_description(),
|
||||||
KeyCode::Enter | KeyCode::Char('l') | KeyCode::Right => self.handle_enter(),
|
KeyCode::Enter | KeyCode::Char('l') | KeyCode::Right => self.handle_enter(),
|
||||||
|
@ -531,6 +523,34 @@ impl AppState {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn scroll_down(&mut self) {
|
||||||
|
let len = self.filter.item_list().len();
|
||||||
|
if len == 0 {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let current = self.selection.selected().unwrap_or(0);
|
||||||
|
let max_index = if self.at_root() { len - 1 } else { len };
|
||||||
|
let next = if current + 1 > max_index {
|
||||||
|
0
|
||||||
|
} else {
|
||||||
|
current + 1
|
||||||
|
};
|
||||||
|
|
||||||
|
self.selection.select(Some(next));
|
||||||
|
}
|
||||||
|
|
||||||
|
fn scroll_up(&mut self) {
|
||||||
|
let len = self.filter.item_list().len();
|
||||||
|
if len == 0 {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let current = self.selection.selected().unwrap_or(0);
|
||||||
|
let max_index = if self.at_root() { len - 1 } else { len };
|
||||||
|
let next = if current == 0 { max_index } else { current - 1 };
|
||||||
|
|
||||||
|
self.selection.select(Some(next));
|
||||||
|
}
|
||||||
|
|
||||||
fn toggle_multi_select(&mut self) {
|
fn toggle_multi_select(&mut self) {
|
||||||
if self.is_current_tab_multi_selectable() {
|
if self.is_current_tab_multi_selectable() {
|
||||||
self.multi_select = !self.multi_select;
|
self.multi_select = !self.multi_select;
|
||||||
|
@ -567,6 +587,13 @@ impl AppState {
|
||||||
self.multi_select = false;
|
self.multi_select = false;
|
||||||
self.selected_commands.clear();
|
self.selected_commands.clear();
|
||||||
}
|
}
|
||||||
|
let len = self.filter.item_list().len();
|
||||||
|
if len > 0 {
|
||||||
|
let current = self.selection.selected().unwrap_or(0);
|
||||||
|
self.selection.select(Some(current.min(len - 1)));
|
||||||
|
} else {
|
||||||
|
self.selection.select(None);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Checks either the current tree node is the root node (can we go up the tree or no)
|
/// Checks either the current tree node is the root node (can we go up the tree or no)
|
||||||
|
@ -766,6 +793,24 @@ impl AppState {
|
||||||
80,
|
80,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn scroll_tab_down(&mut self) {
|
||||||
|
let len = self.tabs.len();
|
||||||
|
let current = self.current_tab.selected().unwrap_or(0);
|
||||||
|
let next = if current + 1 >= len { 0 } else { current + 1 };
|
||||||
|
|
||||||
|
self.current_tab.select(Some(next));
|
||||||
|
self.refresh_tab();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn scroll_tab_up(&mut self) {
|
||||||
|
let len = self.tabs.len();
|
||||||
|
let current = self.current_tab.selected().unwrap_or(0);
|
||||||
|
let next = if current == 0 { len - 1 } else { current - 1 };
|
||||||
|
|
||||||
|
self.current_tab.select(Some(next));
|
||||||
|
self.refresh_tab();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "tips")]
|
#[cfg(feature = "tips")]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user