Refactor: Extract command handling for ListView

This commit is contained in:
Henrik Friedrichsen
2022-08-20 00:40:21 +02:00
parent 38dfba1db5
commit a04bc40051
2 changed files with 39 additions and 19 deletions

View File

@@ -1,5 +1,7 @@
use cursive::views::ViewRef;
use crate::command::{Command, MoveAmount, MoveMode};
use crate::commands::CommandResult;
use crate::ui::layout::Layout;
pub trait CursiveExt {
@@ -19,3 +21,37 @@ impl CursiveExt for cursive::Cursive {
cb(self, layout)
}
}
pub trait SelectViewExt {
/// Translates ncspot commands (i.e. navigating in lists) to Cursive
/// `SelectView` actions.
fn handle_command(&mut self, cmd: &Command) -> Result<CommandResult, String>;
}
impl<T: 'static> SelectViewExt for cursive::views::SelectView<T> {
fn handle_command(&mut self, cmd: &Command) -> Result<CommandResult, String> {
match cmd {
Command::Move(mode, amount) => {
let items = self.len();
match mode {
MoveMode::Up => {
match amount {
MoveAmount::Extreme => self.set_selection(0),
MoveAmount::Integer(amount) => self.select_up(*amount as usize),
};
Ok(CommandResult::Consumed(None))
}
MoveMode::Down => {
match amount {
MoveAmount::Extreme => self.set_selection(items),
MoveAmount::Integer(amount) => self.select_down(*amount as usize),
};
Ok(CommandResult::Consumed(None))
}
_ => Ok(CommandResult::Consumed(None)),
}
}
_ => Ok(CommandResult::Ignored),
}
}
}