#[derive(Default)]
pub struct TabManager {
tab_names: Vec<String>,
current_tab: usize,
}
impl TabManager {
pub fn new(tab_names: Vec<String>) -> Self {
Self {
tab_names,
current_tab: 0,
}
}
pub fn current_tab(&self) -> usize {
self.current_tab
}
pub fn current_tab_name(&self) -> Option<&str> {
self.tab_names
.get(self.current_tab)
.map(|name| name.as_str())
}
pub fn tab_names(&self) -> &[String] {
&self.tab_names
}
pub fn next_tab(&mut self) {
if !self.tab_names.is_empty() {
self.current_tab = (self.current_tab + 1) % self.tab_names.len();
}
}
pub fn previous_tab(&mut self) {
if !self.tab_names.is_empty() {
self.current_tab = if self.current_tab == 0 {
self.tab_names.len() - 1
} else {
self.current_tab - 1
};
}
}
}