From ce95b4d5a6cd33fb583e3c4322ac056c31abdd6c Mon Sep 17 00:00:00 2001 From: Clement Rey Date: Thu, 14 Dec 2023 13:48:34 +0100 Subject: [PATCH] update file dialog --- .../src/data_loader/loader_external.rs | 2 +- crates/re_ui/src/command.rs | 2 +- crates/re_viewer/src/app.rs | 34 ++++++++++++------- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/crates/re_data_source/src/data_loader/loader_external.rs b/crates/re_data_source/src/data_loader/loader_external.rs index 4128e729aa0c..305d17bcf39c 100644 --- a/crates/re_data_source/src/data_loader/loader_external.rs +++ b/crates/re_data_source/src/data_loader/loader_external.rs @@ -44,7 +44,7 @@ pub static EXTERNAL_LOADER_PATHS: Lazy> = Lazy::new(|| { executables.into_iter().collect() }); -/// Iterator over all registered [`DataLoader`]s. +/// Iterator over all registered external [`DataLoader`]s. #[inline] pub fn iter_external_loaders() -> impl ExactSizeIterator { EXTERNAL_LOADER_PATHS.iter().cloned() diff --git a/crates/re_ui/src/command.rs b/crates/re_ui/src/command.rs index 226d05156632..3b3710098c6f 100644 --- a/crates/re_ui/src/command.rs +++ b/crates/re_ui/src/command.rs @@ -86,7 +86,7 @@ impl UICommand { "Save data for the current loop selection to a Rerun data file (.rrd)", ), - UICommand::Open => ("Open…", "Open a Rerun Data File (.rrd)"), + UICommand::Open => ("Open…", "Open any supported files (.rrd, images, meshes, …)"), UICommand::CloseCurrentRecording => ( "Close current Recording", diff --git a/crates/re_viewer/src/app.rs b/crates/re_viewer/src/app.rs index e45cc7c3532a..5b7d3e205786 100644 --- a/crates/re_viewer/src/app.rs +++ b/crates/re_viewer/src/app.rs @@ -1269,18 +1269,28 @@ fn file_saver_progress_ui(egui_ctx: &egui::Context, background_tasks: &mut Backg #[cfg(not(target_arch = "wasm32"))] fn open_file_dialog_native() -> Vec { re_tracing::profile_function!(); - let supported: Vec<_> = re_data_source::SUPPORTED_RERUN_EXTENSIONS - .iter() - .chain(re_data_source::SUPPORTED_IMAGE_EXTENSIONS) - .chain(re_data_source::SUPPORTED_MESH_EXTENSIONS) - .chain(re_data_source::SUPPORTED_POINT_CLOUD_EXTENSIONS) - .chain(re_data_source::SUPPORTED_TEXT_EXTENSIONS) - .copied() - .collect(); - rfd::FileDialog::new() - .add_filter("Supported files", &supported) - .pick_files() - .unwrap_or_default() + + let supported: Vec<_> = if re_data_source::iter_external_loaders().len() == 0 { + re_data_source::SUPPORTED_RERUN_EXTENSIONS + .iter() + .chain(re_data_source::SUPPORTED_IMAGE_EXTENSIONS) + .chain(re_data_source::SUPPORTED_MESH_EXTENSIONS) + .chain(re_data_source::SUPPORTED_POINT_CLOUD_EXTENSIONS) + .chain(re_data_source::SUPPORTED_TEXT_EXTENSIONS) + .copied() + .collect() + } else { + vec![] + }; + + let mut dialog = rfd::FileDialog::new(); + + // If there's at least one external loader registered, then literally anything goes! + if !supported.is_empty() { + dialog = dialog.add_filter("Supported files", &supported); + } + + dialog.pick_files().unwrap_or_default() } #[cfg(target_arch = "wasm32")]