Adding is done in new window now

This commit is contained in:
2023-06-12 22:46:55 +01:00
parent f074aa55d0
commit 665470fec0

View File

@@ -35,8 +35,17 @@ struct RustDoomLauncher {
fast_monsters: bool, fast_monsters: bool,
respawning_monsters: bool, respawning_monsters: bool,
display_command: bool, display_command: bool,
add_stuff_window_displayed: bool,
selected_file_type: FileType,
selected_file_path: PathBuf,
} }
#[derive(PartialEq)]
enum FileType {
Iwad,
Pwad,
Launcher,
}
// Great name, I know // Great name, I know
enum MyErrors { enum MyErrors {
NoLauncher, NoLauncher,
@@ -60,6 +69,9 @@ impl Default for RustDoomLauncher {
fast_monsters: false, fast_monsters: false,
respawning_monsters: false, respawning_monsters: false,
display_command: false, display_command: false,
add_stuff_window_displayed: false,
selected_file_type: FileType::Pwad,
selected_file_path: PathBuf::new(),
} }
} }
} }
@@ -90,12 +102,8 @@ impl RustDoomLauncher {
let (launcher, iwad) = match self.launcher_and_iwad() { let (launcher, iwad) = match self.launcher_and_iwad() {
Err(e) => { Err(e) => {
let text = match e { let text = match e {
MyErrors::NoIwad => { MyErrors::NoIwad => "an IWAD",
"an IWAD" MyErrors::NoLauncher => "a launcher",
},
MyErrors::NoLauncher => {
"a launcher"
}
}; };
if show_dialogs { if show_dialogs {
MessageDialog::new() MessageDialog::new()
@@ -106,8 +114,8 @@ impl RustDoomLauncher {
.unwrap(); .unwrap();
} }
return Err(e); return Err(e);
}, }
Ok((l, i)) => (l, i) Ok((l, i)) => (l, i),
}; };
let mut command = vec!["-iwad", iwad.path.to_str().unwrap()]; let mut command = vec!["-iwad", iwad.path.to_str().unwrap()];
for pwad_index in &self.selected_pwads { for pwad_index in &self.selected_pwads {
@@ -186,15 +194,19 @@ impl eframe::App for RustDoomLauncher {
self.config_file_loaded = true; self.config_file_loaded = true;
} }
egui::containers::panel::CentralPanel::default().show(ctx, |ui| { egui::containers::panel::CentralPanel::default().show(ctx, |ui| {
ui.horizontal(|ui| { ui.horizontal(|ui| {
ui.heading("RustDoomLauncher"); ui.heading("RustDoomLauncher");
let button = match self.launcher_and_iwad() { let button = match self.launcher_and_iwad() {
Err(_) => egui::Button::new("PLAY SOME DOOM!"), Err(_) => egui::Button::new("PLAY SOME DOOM!"),
Ok((_, _)) => egui::Button::new("PLAY SOME DOOM!").fill(Color32::DARK_GREEN) Ok((_, _)) => egui::Button::new("PLAY SOME DOOM!").fill(Color32::DARK_GREEN),
}; };
if ui.add(button).clicked() { if ui.add(button).clicked() {
self.launch_doom(); self.launch_doom();
} }
if ui.button("Add WAD or Launcher").clicked() {
self.add_stuff_window_displayed = true;
}
}); });
ui.horizontal_wrapped(|ui| { ui.horizontal_wrapped(|ui| {
ui.vertical(|ui| { ui.vertical(|ui| {
@@ -245,53 +257,6 @@ impl eframe::App for RustDoomLauncher {
} }
} }
}); });
ui.separator();
ui.vertical(|ui| {
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)
.labelled_by(name_label.id);
});
// It kind of feels like the right place to use a closure - unsure whether I need
// to pass both of these vaules in, or what the story is here.
let get_name = |path: &PathBuf, name: &String| {
if self.name.is_empty() {
// Check these unwraps perhaps? Unsure whether the FileDialog can actually
// return something that isn't a file
path.file_name().unwrap().to_str().unwrap().to_string()
} else {
name.clone()
}
};
if ui.button("Add Launcher").clicked() {
if let Some(path) = rfd::FileDialog::new().pick_file() {
self.all_launchers.push(LauncherInfo {
name: get_name(&path, &self.name),
path,
});
}
}
if ui.button("Add IWAD").clicked() {
if let Some(path) = rfd::FileDialog::new().pick_file() {
self.all_iwads.push(WadInfo {
name: get_name(&path, &self.name),
path,
});
}
}
// TODO - add Mod button - or probably just rethink the whole thing
if ui.button("Add PWAD or Mod").clicked() {
if let Some(path) = rfd::FileDialog::new().pick_file() {
self.all_pwads.push(WadInfo {
name: get_name(&path, &self.name),
path,
});
}
}
});
}); });
ui.separator(); ui.separator();
ui.horizontal_wrapped(|ui| { ui.horizontal_wrapped(|ui| {
@@ -390,5 +355,84 @@ impl eframe::App for RustDoomLauncher {
}); });
} }
}); });
egui::Window::new("Add WAD or Launcher")
.open(&mut self.add_stuff_window_displayed)
.show(ctx, |ui| {
ui.horizontal(|ui| {
let name_label = ui.label("Name");
ui.text_edit_singleline(&mut self.name)
.labelled_by(name_label.id);
});
ui.horizontal(|ui| {
ui.label("Path");
ui.label(
self.selected_file_path
.clone()
.into_os_string()
.into_string()
.unwrap(),
);
if ui.button("Find").clicked() {
if let Some(path) = rfd::FileDialog::new().pick_file() {
self.selected_file_path = path;
}
}
});
ui.horizontal(|ui| {
ui.label("What sort of file is it?");
if ui
.add(egui::SelectableLabel::new(
self.selected_file_type == FileType::Pwad,
"PWAD",
))
.clicked()
{
self.selected_file_type = FileType::Pwad
}
if ui
.add(egui::SelectableLabel::new(
self.selected_file_type == FileType::Iwad,
"IWAD",
))
.clicked()
{
self.selected_file_type = FileType::Iwad
}
if ui
.add(egui::SelectableLabel::new(
self.selected_file_type == FileType::Launcher,
"Launcher",
))
.clicked()
{
self.selected_file_type = FileType::Launcher
}
});
if ui.button("Add!").clicked() {
if self.name.is_empty() || self.selected_file_path.as_os_str().is_empty() {
return;
}
match self.selected_file_type {
FileType::Iwad => {
self.all_iwads.push(WadInfo {
name: self.name.clone(),
path: self.selected_file_path.clone(),
});
}
FileType::Pwad => {
self.all_pwads.push(WadInfo {
name: self.name.clone(),
path: self.selected_file_path.clone(),
});
}
FileType::Launcher => {
self.all_launchers.push(LauncherInfo {
name: self.name.clone(),
path: self.selected_file_path.clone(),
});
}
}
}
});
} }
} }