Iniciando un buen sistema de callbacks!

This commit is contained in:
2025-06-26 20:59:49 -04:00
parent b186b25a9c
commit 4d129018e3
10 changed files with 151 additions and 57 deletions

View File

@@ -1,22 +1,18 @@
#include "ControlPanel.h"
#include <format>
#include <ranges>
#include "imgui.h"
ControlPanel::ControlPanel(
std::shared_ptr<Graphics> graphics,
std::shared_ptr<MachineState> machine_state
): graphics{std::move(graphics)},
machine_state{std::move(machine_state)} {}
void ControlPanel::set_rom_load_callback(const std::function<void(std::string)>& callback) {
this->rom_load_callback = callback;
}
void ControlPanel::set_reset_callback(const std::function<void()>& callback) {
this->reset_callback = callback;
}
std::shared_ptr<MachineState> machine_state,
std::shared_ptr<CallbackManager> callback_manager
) : graphics{std::move(graphics)},
machine_state{std::move(machine_state)},
callback_manager{std::move(callback_manager)} {}
void ControlPanel::render() {
constexpr auto full_width = ImVec2(-FLT_MIN, 0.0f);
@@ -50,9 +46,7 @@ void ControlPanel::render() {
ImGui::SeparatorText("");
if (ImGui::Button("Reset", full_width)) {
if (this->reset_callback) {
this->reset_callback();
}
this->callback_manager->trigger_reset();
}
ImGui::Button("Reload ROM", full_width);
}
@@ -66,19 +60,23 @@ void ControlPanel::on_click_load_rom() {
{"All files", "*"}
};
SDL_ShowOpenFileDialog(on_callback_load_rom, this, graphics->get_window().get(), filters, std::size(filters), nullptr, false);
SDL_ShowOpenFileDialog(
on_callback_load_rom,
this,
graphics->get_window().get(),
filters,
std::size(filters),
SDL_GetCurrentDirectory(),
false
);
}
void ControlPanel::on_callback_load_rom(void* userdata, const char* const* filelist, int filter) {
const auto control_panel = static_cast<ControlPanel*>(userdata);
if (!control_panel->rom_load_callback) {
return;
}
void ControlPanel::on_callback_load_rom(void* self, const char* const* filelist, int filter) {
const auto control_panel = static_cast<ControlPanel*>(self);
if (!filelist || !*filelist) {
return;
}
control_panel->rom_load_callback(*filelist);
control_panel->callback_manager->trigger_rom_load(filelist[0]);
}