From 1905dffda5d4f920246fb3633eeae6cff875855c Mon Sep 17 00:00:00 2001 From: erysdren Date: Mon, 14 Oct 2024 21:04:52 -0500 Subject: [PATCH] editor.cpp: open file with dialog --- source/editor.cpp | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/source/editor.cpp b/source/editor.cpp index cf9942b..83c13e9 100644 --- a/source/editor.cpp +++ b/source/editor.cpp @@ -2,6 +2,8 @@ #include #include +#include "ImGuiFileDialog.h" + #include "editor.hpp" #include "game.h" @@ -38,7 +40,7 @@ static void load_rom_map(int n) game_load_map(&yeti, rom_maps[n]); game_goto(&yeti.game, GAME_MODE_PLAY); map_just_loaded = true; - SDL_snprintf(game_window_title, sizeof(game_window_title), "Game Window (ROM: %s)", rom_map_names[n]); + SDL_snprintf(game_window_title, sizeof(game_window_title), "Game Window (rom://%s)", rom_map_names[n]); rom_map_loaded = true; } @@ -62,7 +64,7 @@ static void load_disk_map(const char *filename) // setup window rom_map_loaded = false; map_just_loaded = true; - SDL_snprintf(game_window_title, sizeof(game_window_title), "Game Window (DISK: %s)", filename); + SDL_snprintf(game_window_title, sizeof(game_window_title), "Game Window (%s)", filename); } static void editor_yeti_tick(void) @@ -108,13 +110,35 @@ void editor_init(void) load_rom_map(0); } +static const char *map_patterns[2] = { + "*.y3d", + "*.Y3D" +}; + void editor_main(void) { + // tick yeti state + editor_yeti_tick(); + // main menu bar if (ImGui::BeginMainMenuBar()) { if (ImGui::BeginMenu("File")) { + if (ImGui::MenuItem("Load")) + { + IGFD::FileDialogConfig config; + config.path = "."; + config.countSelectionMax = 1; + config.flags = ImGuiFileDialogFlags_Modal; + ImGuiFileDialog::Instance()->OpenDialog("Choose Map", "Choose Map", ".y3d", config); + } + + if (ImGui::MenuItem("Save", "Ctrl+S")) + { + + } + if (ImGui::MenuItem("Quit", "Alt+F4")) quit(0); @@ -177,8 +201,17 @@ void editor_main(void) ImGui::End(); } - // tick yeti state - editor_yeti_tick(); + // file selection window + if (ImGuiFileDialog::Instance()->Display("Choose Map")) + { + if (ImGuiFileDialog::Instance()->IsOk()) + { + std::string filename = ImGuiFileDialog::Instance()->GetFilePathName(); + load_disk_map(filename.c_str()); + } + + ImGuiFileDialog::Instance()->Close(); + } } void editor_quit(void)