diff --git a/snes-frontend/src/emu_state/debug_options.rs b/snes-frontend/src/emu_state/debug_options.rs new file mode 100644 index 0000000..c11c36f --- /dev/null +++ b/snes-frontend/src/emu_state/debug_options.rs @@ -0,0 +1,13 @@ +pub struct DebugOptions { + pub enable_debugging: bool, + pub show_debug_options_window: bool, +} + +impl DebugOptions { + pub fn new() -> Self { + Self { + enable_debugging: true, + show_debug_options_window: true, + } + } +} \ No newline at end of file diff --git a/snes-frontend/src/emu_state/mod.rs b/snes-frontend/src/emu_state/mod.rs new file mode 100644 index 0000000..b73743f --- /dev/null +++ b/snes-frontend/src/emu_state/mod.rs @@ -0,0 +1,3 @@ +pub mod debug_options; +pub mod state; +pub use state::AppState; \ No newline at end of file diff --git a/snes-frontend/src/emu_state/state.rs b/snes-frontend/src/emu_state/state.rs new file mode 100644 index 0000000..64f0382 --- /dev/null +++ b/snes-frontend/src/emu_state/state.rs @@ -0,0 +1,21 @@ +use crate::emu_state::debug_options::DebugOptions; + + +pub struct AppState { + pub debug_options: DebugOptions, +} + +impl AppState { + pub fn new() -> Self { + Self { + debug_options: DebugOptions::new(), + } + } +} + + +impl Default for AppState { + fn default() -> Self { + Self::new() + } +} \ No newline at end of file diff --git a/snes-frontend/src/emu_ui/debug/debug.rs b/snes-frontend/src/emu_ui/debug/debug.rs new file mode 100644 index 0000000..d71708a --- /dev/null +++ b/snes-frontend/src/emu_ui/debug/debug.rs @@ -0,0 +1,15 @@ +use eframe::egui; + +use crate::emu_state::AppState; + + +pub fn build_debug_window(ctx: &egui::Context, app_state: &mut AppState) { + egui::Window::new("Debug") + .open(&mut app_state.debug_options.show_debug_options_window) + .show(ctx, |ui| { + ui.checkbox( + &mut app_state.debug_options.enable_debugging, + "Enable debugging", + ); + }); +} \ No newline at end of file diff --git a/snes-frontend/src/emu_ui/debug/mod.rs b/snes-frontend/src/emu_ui/debug/mod.rs new file mode 100644 index 0000000..67f1c5c --- /dev/null +++ b/snes-frontend/src/emu_ui/debug/mod.rs @@ -0,0 +1,3 @@ +pub mod debug; + +pub use debug::build_debug_window; \ No newline at end of file diff --git a/snes-frontend/src/ui/game.rs b/snes-frontend/src/emu_ui/game.rs similarity index 65% rename from snes-frontend/src/ui/game.rs rename to snes-frontend/src/emu_ui/game.rs index a7479f5..c1272ea 100644 --- a/snes-frontend/src/ui/game.rs +++ b/snes-frontend/src/emu_ui/game.rs @@ -1,7 +1,7 @@ use eframe::egui; -pub fn build_game_window(ctx: &egui::Context, ui: &mut egui::Ui) { +pub fn build_game_window(ctx: &egui::Context) { egui::Window::new("Game").show(ctx, |ui| { ui.label("Hello World!"); render_framebuffer(ctx, ui, &[]); @@ -9,7 +9,7 @@ pub fn build_game_window(ctx: &egui::Context, ui: &mut egui::Ui) { } -fn render_framebuffer(ctx: &egui::Context, ui: &mut egui::Ui, framebuffer: &[u8]) { +fn render_framebuffer(ctx: &egui::Context, ui: &mut egui::Ui, _framebuffer: &[u8]) { ui.painter().rect_filled( ctx.available_rect(), egui::Rounding::ZERO, diff --git a/snes-frontend/src/ui/menu.rs b/snes-frontend/src/emu_ui/menu.rs similarity index 85% rename from snes-frontend/src/ui/menu.rs rename to snes-frontend/src/emu_ui/menu.rs index c05d2a3..2944d26 100644 --- a/snes-frontend/src/ui/menu.rs +++ b/snes-frontend/src/emu_ui/menu.rs @@ -1,8 +1,10 @@ use eframe::egui; use snes_core::emulator::Emulator; +use crate::emu_state::AppState; -pub fn build_menu_bar(emulator: &mut Emulator, ui: &mut egui::Ui) { + +pub fn build_menu_bar(emulator: &mut Emulator, ui: &mut egui::Ui, state: &mut AppState) { egui::menu::bar(ui, |ui| { ui.menu_button("Emulator", |ui| { if ui.button("Load ROM file").clicked() { @@ -17,6 +19,7 @@ pub fn build_menu_bar(emulator: &mut Emulator, ui: &mut egui::Ui) { }); ui.menu_button("Debug", |ui| { if ui.button("Show Debug Menu").clicked() { + state.debug_options.show_debug_options_window = true; } }); }); diff --git a/snes-frontend/src/ui/mod.rs b/snes-frontend/src/emu_ui/mod.rs similarity index 65% rename from snes-frontend/src/ui/mod.rs rename to snes-frontend/src/emu_ui/mod.rs index ec68d7a..de884d2 100644 --- a/snes-frontend/src/ui/mod.rs +++ b/snes-frontend/src/emu_ui/mod.rs @@ -1,2 +1,3 @@ pub mod game; pub mod menu; +pub mod debug; diff --git a/snes-frontend/src/main.rs b/snes-frontend/src/main.rs index 6f08727..591efcf 100644 --- a/snes-frontend/src/main.rs +++ b/snes-frontend/src/main.rs @@ -1,12 +1,14 @@ use eframe::egui; use snes_core::emulator::Emulator; -pub mod ui; +mod emu_ui; +mod emu_state; #[derive(Default)] struct SnesEmulatorApp { emulator: Emulator, + state: emu_state::AppState, } impl SnesEmulatorApp { @@ -18,10 +20,11 @@ impl SnesEmulatorApp { impl eframe::App for SnesEmulatorApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { egui::CentralPanel::default().show(ctx, |ui| { - ui::menu::build_menu_bar(&mut self.emulator, ui); + emu_ui::menu::build_menu_bar(&mut self.emulator, ui, &mut self.state); ui.separator(); - // ui::game::build_game_window(ctx, ui); + // ui::game::build_game_window(ctx); }); + emu_ui::debug::build_debug_window(ctx, &mut self.state); } }