diff --git a/includes/paterns_menu.hpp b/includes/paterns_menu.hpp index 9af513a..6ae7eb2 100644 --- a/includes/paterns_menu.hpp +++ b/includes/paterns_menu.hpp @@ -8,17 +8,25 @@ #pragma once +#include +#include +#include +#include + namespace gol { class PaternsMenu { public: - PaternsMenu() = default; + PaternsMenu(std::shared_ptr); ~PaternsMenu() = default; void Toogle(); bool isOpen(); void display(); + void refresh(); private: bool is_open_ = false; + std::shared_ptr context_ = nullptr; + std::vector paterns_list_; }; } // namespace gol diff --git a/src/main.cpp b/src/main.cpp index 1c64630..6ecc7b5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -106,7 +106,7 @@ int main(int ac, char **av) { context->render = std::make_shared(context->settings_menu->getCellSize()); context->selection_menu = std::make_shared(context); context->selection = std::make_shared(context); - context->paterns_menu = std::make_shared(); + context->paterns_menu = std::make_shared(context); // Speed handling values float sim_speed = 1.0f; @@ -115,6 +115,7 @@ int main(int ac, char **av) { // Setups context->rules->setup(context->world); + context->paterns_menu->refresh(); // Diplay generations while (!WindowShouldClose()) { // Frames shinenigans diff --git a/src/paterns_menu.cpp b/src/paterns_menu.cpp index ad450fa..83aff82 100644 --- a/src/paterns_menu.cpp +++ b/src/paterns_menu.cpp @@ -8,12 +8,16 @@ #include +#include + #include #include #include namespace gol { +PaternsMenu::PaternsMenu(std::shared_ptr ctx): context_(ctx) {} + void PaternsMenu::Toogle() { is_open_ = !is_open_; } @@ -22,12 +26,27 @@ bool PaternsMenu::isOpen() { return is_open_; } +void PaternsMenu::refresh() { + paterns_list_.clear(); + auto paterns_path = context_->program_dir / "paterns"; + if (std::filesystem::exists(paterns_path) && std::filesystem::is_directory(paterns_path)) { + for (const auto& entry : std::filesystem::directory_iterator(paterns_path)) { + paterns_list_.push_back(entry.path()); + } + } +} + void PaternsMenu::display() { if (is_open_) { ImGuiWindowFlags paterns_flags = ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize; ImGui::SetNextWindowSize(ImVec2(150, 200), ImGuiCond_Always); ImGui::Begin("paterns", &is_open_, paterns_flags); - ImGui::Button("refresh"); + if (ImGui::Button("refresh")) { + refresh(); + } + for (auto patern_name: paterns_list_) { + ImGui::Button(patern_name.c_str()); + } ImGui::End(); } }