use std::path::{Path, PathBuf};
#[derive(Debug, Default)]
pub struct ExecPicker {
profiles: Vec<String>,
selected: usize,
cwd: Option<PathBuf>,
}
impl ExecPicker {
pub fn new() -> Self {
Self::default()
}
pub fn open(&mut self, profiles: Vec<String>, cwd: PathBuf) {
self.profiles = profiles;
self.selected = 0;
self.cwd = Some(cwd);
}
pub fn cwd(&self) -> Option<&Path> {
self.cwd.as_deref()
}
pub fn profiles(&self) -> &[String] {
&self.profiles
}
pub fn is_empty(&self) -> bool {
self.profiles.is_empty()
}
pub fn selected_index(&self) -> usize {
self.selected
}
pub fn selected_profile(&self) -> Option<&str> {
self.profiles.get(self.selected).map(String::as_str)
}
pub fn next(&mut self) {
if self.profiles.is_empty() {
return;
}
self.selected = (self.selected + 1) % self.profiles.len();
}
pub fn prev(&mut self) {
if self.profiles.is_empty() {
return;
}
self.selected = (self.selected + self.profiles.len() - 1) % self.profiles.len();
}
}