use super::*;
pub struct FileExplorerBuilder {
initial_dir: PathBuf,
filesystem: crate::SharedFileSystem,
extension_filter: Vec<String>,
show_hidden: bool,
sort_mode: SortMode,
page_size: usize,
selection_mode: SelectionMode,
show_sizes: bool,
}
impl FileExplorerBuilder {
pub fn new(initial_dir: PathBuf) -> Self {
Self {
initial_dir,
filesystem: crate::std_filesystem(),
extension_filter: Vec::new(),
show_hidden: false,
sort_mode: SortMode::default(),
page_size: PAGE_SIZE,
selection_mode: SelectionMode::default(),
show_sizes: true,
}
}
pub fn filesystem(mut self, filesystem: crate::SharedFileSystem) -> Self {
self.filesystem = filesystem;
self
}
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 selection_mode(mut self, mode: SelectionMode) -> Self {
self.selection_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 = self.build_unloaded();
explorer.reload();
explorer
}
pub fn try_build(self) -> Result<FileExplorer, ExplorerError> {
let mut explorer = self.build_unloaded();
explorer.try_reload()?;
Ok(explorer)
}
fn build_unloaded(self) -> FileExplorer {
FileExplorer {
current_dir: self.initial_dir,
filesystem: self.filesystem,
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,
selection_mode: self.selection_mode,
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,
}
}
}