refactor: refactor code layout by moving ui to another crates

This commit is contained in:
newbee1905
2023-02-02 22:26:18 +07:00
parent 2dea2c86ec
commit 2b4c1079ac
10 changed files with 789 additions and 779 deletions

61
src/ui/list.rs Normal file
View File

@@ -0,0 +1,61 @@
use tui::widgets::ListState;
pub struct StatefulList<T> {
pub state: ListState,
pub items: Vec<T>,
}
impl<T> StatefulList<T> {
pub fn with_items(items: Vec<T>) -> StatefulList<T> {
StatefulList {
state: ListState::default(),
items,
}
}
pub fn begin(&mut self) {
self.state.select(Some(0))
}
pub fn end(&mut self) {
self.state.select(Some(self.items.len() - 1))
}
pub fn next(&mut self) {
let i = match self.state.selected() {
Some(i) => {
if i == self.items.len() - 1 {
0
} else {
i + 1
}
}
None => 0,
};
self.state.select(Some(i));
}
pub fn previous(&mut self) {
let i = match self.state.selected() {
Some(i) => {
if i == 0 {
self.items.len() - 1
} else {
i - 1
}
}
None => 0,
};
self.state.select(Some(i));
}
pub fn unselect(&mut self) {
self.state.select(None);
}
pub fn push(&mut self, item: T) {
self.items.push(item);
}
pub fn iter(&self) -> impl Iterator<Item = &T> {
self.items.iter()
}
}