use super::*;
impl App {
pub fn active_pane(&self) -> &FileExplorer {
&self.panes[self.active_idx]
}
pub fn active_pane_mut(&mut self) -> &mut FileExplorer {
&mut self.panes[self.active_idx]
}
pub fn pane_count(&self) -> usize {
self.panes.len()
}
pub fn focus_next_pane(&mut self) {
if self.panes.len() > 1 {
self.active_idx = (self.active_idx + 1) % self.panes.len();
}
}
pub fn focus_prev_pane(&mut self) {
if self.panes.len() > 1 {
self.active_idx = self
.active_idx
.checked_sub(1)
.unwrap_or(self.panes.len() - 1);
}
}
pub fn add_pane(&mut self, dir: PathBuf) {
let active = self.active_pane();
let mut builder = FileExplorer::builder(dir)
.show_hidden(active.show_hidden)
.show_sizes(active.show_sizes)
.sort_mode(active.sort_mode);
if !active.extension_filter.is_empty() {
builder = builder.extension_filter(active.extension_filter.clone());
}
let new_pane = builder.build();
let insert_at = self.active_idx + 1;
self.panes.insert(insert_at, new_pane);
self.active_idx = insert_at;
}
pub fn add_pane_from_active(&mut self) {
let dir = self.active_pane().current_dir.clone();
self.add_pane(dir);
}
pub fn close_active_pane(&mut self) {
if self.panes.len() <= 1 {
self.status_msg = "Cannot close the last remaining pane.".into();
return;
}
self.panes.remove(self.active_idx);
if self.active_idx >= self.panes.len() {
self.active_idx = self.panes.len() - 1;
}
}
}