Refactored launcher to use a struct rather than string
This commit is contained in:
30
src/main.rs
30
src/main.rs
@@ -18,11 +18,16 @@ struct WadInfo {
|
|||||||
name: String,
|
name: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct LauncherInfo {
|
||||||
|
path: PathBuf,
|
||||||
|
name: String,
|
||||||
|
}
|
||||||
|
|
||||||
struct RustDoomLauncher {
|
struct RustDoomLauncher {
|
||||||
all_launchers: Vec<String>,
|
all_launchers: Vec<LauncherInfo>,
|
||||||
all_iwads: Vec<WadInfo>,
|
all_iwads: Vec<WadInfo>,
|
||||||
all_pwads: Vec<WadInfo>,
|
all_pwads: Vec<WadInfo>,
|
||||||
selected_launcher: Option<String>,
|
selected_launcher: Option<usize>,
|
||||||
selected_iwad: Option<usize>,
|
selected_iwad: Option<usize>,
|
||||||
selected_pwads: Vec<usize>,
|
selected_pwads: Vec<usize>,
|
||||||
name: String,
|
name: String,
|
||||||
@@ -31,7 +36,7 @@ struct RustDoomLauncher {
|
|||||||
impl Default for RustDoomLauncher {
|
impl Default for RustDoomLauncher {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
all_launchers: vec!["GZDoom 1.9".to_string(), "PRBoom+".to_string()],
|
all_launchers: Vec::new(),
|
||||||
all_iwads: Vec::new(),
|
all_iwads: Vec::new(),
|
||||||
all_pwads: Vec::new(),
|
all_pwads: Vec::new(),
|
||||||
selected_launcher: None,
|
selected_launcher: None,
|
||||||
@@ -49,16 +54,16 @@ impl eframe::App for RustDoomLauncher {
|
|||||||
ui.horizontal_wrapped(|ui| {
|
ui.horizontal_wrapped(|ui| {
|
||||||
ui.vertical(|ui| {
|
ui.vertical(|ui| {
|
||||||
ui.label("Launchers");
|
ui.label("Launchers");
|
||||||
for launcher in &self.all_launchers {
|
for (pos, launcher) in self.all_launchers.iter().enumerate() {
|
||||||
if ui
|
if ui
|
||||||
.add(egui::SelectableLabel::new(
|
.add(egui::SelectableLabel::new(
|
||||||
self.selected_launcher.is_some()
|
self.selected_launcher.is_some()
|
||||||
&& self.selected_launcher.as_ref().unwrap() == launcher,
|
&& *self.selected_launcher.as_ref().unwrap() == pos,
|
||||||
launcher,
|
&launcher.name,
|
||||||
))
|
))
|
||||||
.clicked()
|
.clicked()
|
||||||
{
|
{
|
||||||
self.selected_launcher = Some(launcher.to_string());
|
self.selected_launcher = Some(pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -106,7 +111,10 @@ impl eframe::App for RustDoomLauncher {
|
|||||||
});
|
});
|
||||||
if ui.button("Add Launcher").clicked() {
|
if ui.button("Add Launcher").clicked() {
|
||||||
if let Some(path) = rfd::FileDialog::new().pick_file() {
|
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() {
|
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 -
|
// I don't actually think using SelectableLabel is correct here -
|
||||||
// but it'll at least do the highlighting when hovered nicely
|
// but it'll at least do the highlighting when hovered nicely
|
||||||
if let Some(l) = &self.selected_launcher {
|
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;
|
self.selected_launcher = None;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user