From b871c48c601b58b419d2fcdef3bc612ebd374adc Mon Sep 17 00:00:00 2001 From: Arthur Roberts Date: Wed, 31 May 2023 22:58:06 +0100 Subject: [PATCH] Added GUI for wads, pwads, and launcher --- src/main.rs | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 87 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 75612e7..b56ec6c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,6 +16,7 @@ struct RustDoomLauncher { launchers: Vec, all_iwads: Vec, all_pwads: Vec, + selected_launcher: Option, selected_iwad: Option, selected_pwads: Vec, } @@ -23,9 +24,18 @@ struct RustDoomLauncher { impl Default for RustDoomLauncher { fn default() -> Self { Self { - launchers: Vec::new(), - all_iwads: vec!["DOOM2.WAD".to_string(), "DOOM.WAD".to_string(), "FREEDOOM.WAD".to_string()], - all_pwads: Vec::new(), + launchers: vec!["GZDoom 1.9".to_string(), "PRBoom+".to_string()], + all_iwads: vec![ + "DOOM2.WAD".to_string(), + "DOOM.WAD".to_string(), + "FREEDOOM.WAD".to_string(), + ], + all_pwads: vec![ + "DOOM2.WAD".to_string(), + "DOOM.WAD".to_string(), + "FREEDOOM.WAD".to_string(), + ], + selected_launcher: None, selected_iwad: None, selected_pwads: Vec::new(), } @@ -36,6 +46,26 @@ impl eframe::App for RustDoomLauncher { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { egui::containers::panel::CentralPanel::default().show(ctx, |ui| { ui.heading("RustDoomLauncher"); + ui.horizontal(|ui| { + ui.label("Launcers"); + if ui.button("Add Launcher").clicked() { + // Open file selector + // Add to the launchers list + // done? + } + }); + for launcher in &self.launchers { + if ui + .add(egui::SelectableLabel::new( + self.selected_launcher.is_some() + && self.selected_launcher.as_ref().unwrap() == launcher, + launcher, + )) + .clicked() + { + self.selected_launcher = Some(launcher.to_string()); + } + } ui.horizontal(|ui| { ui.label("IWADs"); if ui.button("Add IWAD").clicked() { @@ -45,10 +75,63 @@ impl eframe::App for RustDoomLauncher { } }); for iwad in &self.all_iwads { - if ui.add(egui::SelectableLabel::new(self.selected_iwad.is_some() && self.selected_iwad.as_ref().unwrap() == iwad, iwad)).clicked() { + if ui + .add(egui::SelectableLabel::new( + self.selected_iwad.is_some() + && self.selected_iwad.as_ref().unwrap() == iwad, + iwad, + )) + .clicked() + { self.selected_iwad = Some(iwad.to_string()); } } + ui.horizontal(|ui| { + ui.label("PWADs"); + if ui.button("Add PWAD").clicked() { + // Open file selector + // Add to the PWADS list + // done? + } + }); + for pwad in &self.all_pwads { + if ui + .add(egui::SelectableLabel::new( + self.selected_pwads.contains(pwad), + pwad, + )) + .clicked() + { + self.selected_pwads.push(pwad.to_string()); + } + } + ui.label("Command"); + ui.horizontal(|ui| { + // I don't actually think using SelectableLabel is correct here - but it'll at least do the highlighting when hovered correctly + if let Some(l) = &self.selected_launcher { + if ui.add(egui::SelectableLabel::new(false, l)).clicked() { + self.selected_launcher = None; + } + } else { + ui.label("Select a launcher plz"); + } + if let Some(i) = &self.selected_iwad { + if ui.add(egui::SelectableLabel::new(false, i)).clicked() { + self.selected_iwad = None; + } + } else { + ui.label("Select an iwad plz"); + } + // This feels ver much more C-like, but I think it works? + let mut pos = 0 as usize; + while pos < self.selected_pwads.len() { + if ui.add(egui::SelectableLabel::new(false, self.selected_pwads[pos].clone())).clicked() { + self.selected_pwads.remove(pos); + continue; + } + pos += 1; + } + }); }); } }