Added GUI for wads, pwads, and launcher
This commit is contained in:
91
src/main.rs
91
src/main.rs
@@ -16,6 +16,7 @@ struct RustDoomLauncher {
|
|||||||
launchers: Vec<String>,
|
launchers: Vec<String>,
|
||||||
all_iwads: Vec<String>,
|
all_iwads: Vec<String>,
|
||||||
all_pwads: Vec<String>,
|
all_pwads: Vec<String>,
|
||||||
|
selected_launcher: Option<String>,
|
||||||
selected_iwad: Option<String>,
|
selected_iwad: Option<String>,
|
||||||
selected_pwads: Vec<String>,
|
selected_pwads: Vec<String>,
|
||||||
}
|
}
|
||||||
@@ -23,9 +24,18 @@ struct RustDoomLauncher {
|
|||||||
impl Default for RustDoomLauncher {
|
impl Default for RustDoomLauncher {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
launchers: 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_iwads: vec![
|
||||||
all_pwads: Vec::new(),
|
"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_iwad: None,
|
||||||
selected_pwads: Vec::new(),
|
selected_pwads: Vec::new(),
|
||||||
}
|
}
|
||||||
@@ -36,6 +46,26 @@ impl eframe::App for RustDoomLauncher {
|
|||||||
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
|
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
|
||||||
egui::containers::panel::CentralPanel::default().show(ctx, |ui| {
|
egui::containers::panel::CentralPanel::default().show(ctx, |ui| {
|
||||||
ui.heading("RustDoomLauncher");
|
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.horizontal(|ui| {
|
||||||
ui.label("IWADs");
|
ui.label("IWADs");
|
||||||
if ui.button("Add IWAD").clicked() {
|
if ui.button("Add IWAD").clicked() {
|
||||||
@@ -45,10 +75,63 @@ impl eframe::App for RustDoomLauncher {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
for iwad in &self.all_iwads {
|
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());
|
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;
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user