diff --git a/src/crab/common/config.cr b/src/crab/common/config.cr index 90e3e2f..9cc2f88 100644 --- a/src/crab/common/config.cr +++ b/src/crab/common/config.cr @@ -1,7 +1,7 @@ require "yaml" CONFIG_FILE_PATH = Path["~/.config/crab/"].expand(home: true) -CONFIG_FILE_NAME = Path["crab.yml"] +CONFIG_FILE_NAME = "crab.yml" CONFIG_FILE = CONFIG_FILE_PATH / CONFIG_FILE_NAME Dir.mkdir_p(CONFIG_FILE_PATH) @@ -11,6 +11,7 @@ class Config include YAML::Serializable property explorer_dir : String? property keybindings : Hash(LibSDL::Keycode, Input)? + property recents : Array(String)? property gba : GBA? property gbc : GBC? @@ -80,6 +81,14 @@ def set_keybindings(keybindings : Hash(LibSDL::Keycode, Input)) : Nil write { |config| config.keybindings = keybindings } end +def recents : Array(String) + config.recents || [] of String +end + +def set_recents(recents : Array(String)) : Nil + write { |config| config.recents = recents } +end + def gbc_bios : String? config.gbc.try(&.bios) end diff --git a/src/crab/common/frontend/sdl_opengl_imgui_frontend.cr b/src/crab/common/frontend/sdl_opengl_imgui_frontend.cr index f0488ba..abbcf33 100644 --- a/src/crab/common/frontend/sdl_opengl_imgui_frontend.cr +++ b/src/crab/common/frontend/sdl_opengl_imgui_frontend.cr @@ -26,6 +26,7 @@ class SDLOpenGLImGuiFrontend < Frontend @blending = false @enable_overlay = false @pause = false + @recents : Array(String) = recents @opengl_info : OpenGLInfo @@ -85,6 +86,12 @@ class SDLOpenGLImGuiFrontend < Frontend LibSDL.close_audio(1) @controller = init_controller(nil, rom) @file_explorer.clear_selection + + @recents.delete(rom) + @recents.insert(0, rom) + @recents.pop(@recents.size - 8) if @recents.size > 8 + set_recents @recents + LibSDL.set_window_size(@window, @controller.window_width * SCALE, @controller.window_height * SCALE) LibSDL.set_window_position(@window, LibSDL::WindowPosition::CENTERED, LibSDL::WindowPosition::CENTERED) LibGL.viewport(0, 0, @window.width, @window.height) @@ -175,10 +182,23 @@ class SDLOpenGLImGuiFrontend < Frontend open_rom_selection = ImGui.menu_item "Open ROM" open_bios_selection = ImGui.menu_item "Select BIOS" unless @controller.class == StubbedController + if ImGui.begin_menu "Recent", @recents.size > 0 + @recents.each do |recent| + load_new_rom(recent) if ImGui.menu_item recent + end + ImGui.separator + if ImGui.menu_item "Clear" + @recents.clear + set_recents @recents + end + ImGui.end_menu + end + ImGui.separator ImGui.menu_item "Overlay", "", pointerof(@enable_overlay) # ImGui.menu_item "Blend", "", pointerof(@enable_blend) todo: re-implement blending now that frames are cleared ImGui.menu_item "Pause", "", pointerof(@pause) open_keybindings = ImGui.menu_item "Keybindings" + ImGui.separator exit if ImGui.menu_item "Exit" ImGui.end_menu