diff --git a/src/exporter.rs b/src/exporter.rs index acfd87f..362c003 100644 --- a/src/exporter.rs +++ b/src/exporter.rs @@ -133,8 +133,11 @@ fn collect_scene_data(layout: &DungeonLayout, settings: &UiSettings) -> SceneDat // Open a dialog to select an export destination. pub fn select_export_target(settings: &UiSettings) -> Result { if settings.export_format == ExportFormat::Folder { - let folder = FileDialog::new() - .set_title("Export composite masks folder") + let mut dialog = FileDialog::new().set_title("Export composite masks folder"); + if let Some(ref last_path) = settings.last_export_path { + dialog = dialog.set_directory(last_path); + } + let folder = dialog .pick_folder() .ok_or_else(|| "Export canceled".to_string())?; return Ok(ExportTarget::Folder(folder)); @@ -149,6 +152,10 @@ pub fn select_export_target(settings: &UiSettings) -> Result { + if let Some(parent) = path.parent() { + self.settings.last_export_path = Some(parent.to_string_lossy().to_string()); + } + } + exporter::ExportTarget::Folder(path) => { + self.settings.last_export_path = Some(path.to_string_lossy().to_string()); + } + } + let layout = self.layout.clone(); let settings = self.settings.clone(); let (tx, rx) = mpsc::channel(); diff --git a/src/ui.rs b/src/ui.rs index a60d212..af89a72 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -131,6 +131,7 @@ pub struct UiSettings { pub export_height: u32, pub allow_export_aspect_change: bool, pub export_show_grid: bool, + pub last_export_path: Option, pub add_tool: AddTool, pub add_text_value: String, pub min_start_marker_size: usize, @@ -184,6 +185,7 @@ impl Default for UiSettings { export_height: 1080, allow_export_aspect_change: false, export_show_grid: true, + last_export_path: None, add_tool: AddTool::None, add_text_value: "Text".to_string(), min_start_marker_size: 1,