use super::*;
pub struct FileExplorerBuilder {
initial_dir: PathBuf,
extension_filter: Vec<String>,
show_hidden: bool,
sort_mode: SortMode,
page_size: usize,
show_sizes: bool,
}
impl FileExplorerBuilder {
pub fn new(initial_dir: PathBuf) -> Self {
Self {
initial_dir,
extension_filter: Vec::new(),
show_hidden: false,
sort_mode: SortMode::default(),
page_size: PAGE_SIZE,
show_sizes: true,
}
}
pub fn extension_filter(mut self, filter: Vec<String>) -> Self {
self.extension_filter = filter;
self
}
pub fn allow_extension(mut self, ext: impl Into<String>) -> Self {
self.extension_filter.push(ext.into());
self
}
pub fn show_hidden(mut self, show: bool) -> Self {
self.show_hidden = show;
self
}
pub fn show_sizes(mut self, show: bool) -> Self {
self.show_sizes = show;
self
}
pub fn sort_mode(mut self, mode: SortMode) -> Self {
self.sort_mode = mode;
self
}
pub fn page_size(mut self, size: usize) -> Self {
self.page_size = size;
self
}
pub fn build(self) -> FileExplorer {
let mut explorer = FileExplorer {
current_dir: self.initial_dir,
entries: Vec::new(),
cursor: 0,
scroll_offset: 0,
extension_filter: self.extension_filter,
show_hidden: self.show_hidden,
status: String::new(),
sort_mode: self.sort_mode,
page_size: self.page_size,
search_query: String::new(),
search_active: false,
marked: HashSet::new(),
mkdir_active: false,
mkdir_input: String::new(),
touch_active: false,
touch_input: String::new(),
rename_active: false,
rename_input: String::new(),
theme_name: String::new(),
editor_name: String::new(),
disk_usage: None,
dir_size_cache: std::collections::HashMap::new(),
show_sizes: self.show_sizes,
};
explorer.reload();
explorer
}
}