From c744229066042f85c087be4840eac1ce04e4bc1d Mon Sep 17 00:00:00 2001 From: Arthur Roberts Date: Fri, 2 Jun 2023 17:49:41 +0100 Subject: [PATCH] Refactored launcher to use a struct rather than string --- src/main.rs | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/src/main.rs b/src/main.rs index 9ffc582..bda48b1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,11 +18,16 @@ struct WadInfo { name: String, } +struct LauncherInfo { + path: PathBuf, + name: String, +} + struct RustDoomLauncher { - all_launchers: Vec, + all_launchers: Vec, all_iwads: Vec, all_pwads: Vec, - selected_launcher: Option, + selected_launcher: Option, selected_iwad: Option, selected_pwads: Vec, name: String, @@ -31,7 +36,7 @@ struct RustDoomLauncher { impl Default for RustDoomLauncher { fn default() -> Self { Self { - all_launchers: vec!["GZDoom 1.9".to_string(), "PRBoom+".to_string()], + all_launchers: Vec::new(), all_iwads: Vec::new(), all_pwads: Vec::new(), selected_launcher: None, @@ -49,16 +54,16 @@ impl eframe::App for RustDoomLauncher { ui.horizontal_wrapped(|ui| { ui.vertical(|ui| { ui.label("Launchers"); - for launcher in &self.all_launchers { + for (pos, launcher) in self.all_launchers.iter().enumerate() { if ui .add(egui::SelectableLabel::new( self.selected_launcher.is_some() - && self.selected_launcher.as_ref().unwrap() == launcher, - launcher, + && *self.selected_launcher.as_ref().unwrap() == pos, + &launcher.name, )) .clicked() { - self.selected_launcher = Some(launcher.to_string()); + self.selected_launcher = Some(pos); } } }); @@ -100,13 +105,16 @@ impl eframe::App for RustDoomLauncher { ui.label("Add WADs etc"); ui.set_max_width(180.0); ui.horizontal(|ui| { - let name_label = ui.label("Name:"); - ui.text_edit_singleline(&mut self.name) + let name_label = ui.label("Name:"); + ui.text_edit_singleline(&mut self.name) .labelled_by(name_label.id); }); if ui.button("Add Launcher").clicked() { if let Some(path) = rfd::FileDialog::new().pick_file() { - self.all_launchers.push(path.display().to_string()); + self.all_launchers.push(LauncherInfo { + name: self.name.clone(), + path: path + }); } } if ui.button("Add IWAD").clicked() { @@ -132,7 +140,11 @@ impl eframe::App for RustDoomLauncher { // I don't actually think using SelectableLabel is correct here - // but it'll at least do the highlighting when hovered nicely if let Some(l) = &self.selected_launcher { - if ui.add(egui::SelectableLabel::new(false, l)).clicked() { + if let Some(iwad) = &self.all_launchers.get(*l) { + if ui.add(egui::SelectableLabel::new(false, &iwad.name)).clicked() { + self.selected_launcher = None; + } + } else { self.selected_launcher = None; } } else {