Iniciando un buen sistema de callbacks!
This commit is contained in:
@@ -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]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user