paterns_menu: list and display paterns

This commit is contained in:
2026-01-13 17:11:49 +01:00
parent c4725847cc
commit 3d89ec74c9
4 changed files with 59 additions and 4 deletions

View File

@@ -106,7 +106,7 @@ int main(int ac, char **av) {
context->render = std::make_shared<Render>(context->settings_menu->getCellSize());
context->selection_menu = std::make_shared<gol::SelectionMenu>(context);
context->selection = std::make_shared<gol::Selection>(context);
context->paterns_menu = std::make_shared<gol::PaternsMenu>();
context->paterns_menu = std::make_shared<gol::PaternsMenu>(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

View File

@@ -8,12 +8,17 @@
#include <paterns_menu.hpp>
#include <filesystem>
#include <iostream>
#include <imgui.h>
#include <raylib.h>
#include <rlImGui.h>
namespace gol {
PaternsMenu::PaternsMenu(std::shared_ptr<ctx> ctx): context_(ctx) {}
void PaternsMenu::Toogle() {
is_open_ = !is_open_;
}
@@ -22,12 +27,45 @@ bool PaternsMenu::isOpen() {
return is_open_;
}
void PaternsMenu::refresh() {
paterns_name_list_.clear();
paterns_paths_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)) {
if (!std::filesystem::is_directory(entry) && entry.path().has_filename()) {
paterns_paths_list_[entry.path().filename()] = entry.path();
paterns_name_list_.push_back(entry.path().filename());
}
}
}
}
void PaternsMenu::loadPatern(std::string &path) {
}
void PaternsMenu::display() {
if (is_open_) {
ImGuiWindowFlags paterns_flags = ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize;
ImGui::SetNextWindowSize(ImVec2(150, 200), ImGuiCond_Always);
ImGui::SetNextWindowSize(ImVec2(200, 250), ImGuiCond_Always);
ImGui::Begin("paterns", &is_open_, paterns_flags);
ImGui::Button("refresh");
for (auto patern_name: paterns_name_list_) {
ImGui::PushID(patern_name.c_str());
if (ImGui::Button(patern_name.c_str())) {
loadPatern(paterns_paths_list_[patern_name]);
}
ImGui::PopID();
ImGui::SameLine(ImGui::GetWindowWidth() - 57.);
std::string del_id = patern_name.c_str();
del_id.append("_del");
ImGui::PushID(del_id.c_str());
if (ImGui::Button("delete")) {
std::filesystem::remove(paterns_paths_list_[patern_name]);
refresh();
}
ImGui::PopID();
}
ImGui::End();
}
}

View File

@@ -12,6 +12,7 @@
#include <filesystem>
#include <selection_menu.hpp>
#include <paterns_menu.hpp>
namespace gol {
@@ -90,6 +91,7 @@ void SelectionMenu::display() {
}
patern_file << std::flush;
patern_file.close();
context_->paterns_menu->refresh();
}
}
sel_ctrl_ = false;