From 29f624024f25e782d8b1875032264307bf94d02d Mon Sep 17 00:00:00 2001 From: Hirek193 Date: Thu, 22 Oct 2026 16:42:56 +0200 Subject: [PATCH] feat(ui): memory cells section in the debug panel, to look up and set them while the simulation runs --- application/driveruipanels.cpp | 18 ++++++++++++++++++ application/editoruipanels.cpp | 15 ++++++++++----- application/editoruipanels.h | 4 ++++ lang/editor_pl.po | 3 +++ 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/application/driveruipanels.cpp b/application/driveruipanels.cpp index 078d10e3..017e518d 100644 --- a/application/driveruipanels.cpp +++ b/application/driveruipanels.cpp @@ -9,6 +9,7 @@ http://mozilla.org/MPL/2.0/. #include "stdafx.h" #include "application/driveruipanels.h" +#include "application/editoruipanels.h" #include "utilities/Globals.h" #include "application/application.h" @@ -544,6 +545,22 @@ void debug_panel::update() #endif } +namespace { + +// memory cells of the scenery, to look into and play with while the simulation runs +bool render_section_memcells() { + + if( false == ImGui::CollapsingHeader( "Memory Cells" ) ) { return false; } + static memcells_panel memcells { "Memory cells", true }; + memcells.listheight = ImGui::GetTextLineHeightWithSpacing() * 12.f; + ImGui::PushID( "memcells" ); + memcells.render_body(); + ImGui::PopID(); + return true; +} + +} // namespace + void debug_panel::render() { if( false == is_open ) { return; } @@ -577,6 +594,7 @@ debug_panel::render() { render_section( "Vehicle Scan Table", m_scantablelines ); render_section_scenario(); render_section_eventqueue(); + render_section_memcells(); if( true == render_section( "Power Grid", m_powergridlines ) ) { // traction state debug ImGui::Checkbox( "Debug Traction", &DebugTractionFlag ); diff --git a/application/editoruipanels.cpp b/application/editoruipanels.cpp index 312c04e5..c0c05624 100644 --- a/application/editoruipanels.cpp +++ b/application/editoruipanels.cpp @@ -2468,12 +2468,17 @@ void memcells_panel::render() auto const panelname{(title.empty() ? std::string{STR_C(m_name.c_str())} : title) + "###" + m_name}; if (ImGui::Begin(panelname.c_str(), &is_open, ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoCollapse)) { - render_list(); - render_cell(); + render_body(); } ImGui::End(); } +void memcells_panel::render_body() +{ + render_list(); + render_cell(); +} + void memcells_panel::render_list() { auto const &cells{simulation::Memory.sequence()}; @@ -2533,8 +2538,8 @@ void memcells_panel::render_list() } ImGui::TextDisabled(STR_C("Memory cells: %d, shown: %d"), static_cast(m_sorted.size()), static_cast(m_listed.size())); - auto const listheight{std::max(120.0f, ImGui::GetContentRegionAvail().y - ImGui::GetFrameHeightWithSpacing() * 7.0f)}; - if (ImGui::BeginTable("##memcells", 5, ImGuiTableFlags_Resizable | ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_RowBg | ImGuiTableFlags_ScrollY, ImVec2(-1.0f, listheight))) + auto const height{listheight > 0.0f ? listheight : std::max(120.0f, ImGui::GetContentRegionAvail().y - ImGui::GetFrameHeightWithSpacing() * 7.0f)}; + if (ImGui::BeginTable("##memcells", 5, ImGuiTableFlags_Resizable | ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_RowBg | ImGuiTableFlags_ScrollY, ImVec2(-1.0f, height))) { ImGui::TableSetupScrollFreeze(0, 1); ImGui::TableSetupColumn(STR_C("Name"), ImGuiTableColumnFlags_WidthStretch, 2.0f); @@ -2601,7 +2606,7 @@ void memcells_panel::render_cell() ImGui::Separator(); if (m_selected == nullptr) { - ImGui::TextDisabled("%s", STR_C("Pick a memory cell from the list to set what's in it. A double click shows where it is")); + ImGui::TextDisabled("%s", focus ? STR_C("Pick a memory cell from the list to set what's in it. A double click shows where it is") : STR_C("Pick a memory cell from the list to set what's in it")); return; } auto *cell{m_selected}; diff --git a/application/editoruipanels.h b/application/editoruipanels.h index c135601c..9ffeb983 100644 --- a/application/editoruipanels.h +++ b/application/editoruipanels.h @@ -283,9 +283,13 @@ class memcells_panel : public ui_panel memcells_panel(std::string const &Name, bool const Isopen) : ui_panel(Name, Isopen) {} void render() override; + // panel content without the window, also drawn in the debug panel of the driver mode + void render_body(); // moves the camera to specified node; provided by the editor mode std::function focus; + // height of the list, 0: it takes what the window has left + float listheight{0.0f}; private: // methods diff --git a/lang/editor_pl.po b/lang/editor_pl.po index 70aea896..5f29c7e4 100644 --- a/lang/editor_pl.po +++ b/lang/editor_pl.po @@ -10375,3 +10375,6 @@ msgstr "Dodaj do wartości" msgid "Read again" msgstr "Odczytaj ponownie" + +msgid "Pick a memory cell from the list to set what's in it" +msgstr "Wybierz komórkę pamięci z listy, aby ustawić jej zawartość"