ctrl: add menu entries to show dear imgui userguide and about window

This commit is contained in:
oxmox 2023-02-22 22:35:51 +01:00
parent 407dded717
commit 9ef9e71a46

View file

@ -1,6 +1,7 @@
#include <nng/nng.h> #include <nng/nng.h>
#include <imgui.h> #include <imgui.h>
#include <imgui_internal.h>
#include <backends/imgui_impl_sdl.h> #include <backends/imgui_impl_sdl.h>
#include <backends/imgui_impl_sdlrenderer.h> #include <backends/imgui_impl_sdlrenderer.h>
#include <SDL.h> #include <SDL.h>
@ -23,6 +24,7 @@
#include "dp_util.hpp" #include "dp_util.hpp"
#if DoomBytesPerPixel == 3 #if DoomBytesPerPixel == 3
// FIXME: don't use, it's buggy
static const u32 DoomSdlTexturePixelFormat = SDL_PIXELFORMAT_RGB888; static const u32 DoomSdlTexturePixelFormat = SDL_PIXELFORMAT_RGB888;
#elif DoomBytesPerPixel == 4 #elif DoomBytesPerPixel == 4
static const u32 DoomSdlTexturePixelFormat = SDL_PIXELFORMAT_ARGB8888; static const u32 DoomSdlTexturePixelFormat = SDL_PIXELFORMAT_ARGB8888;
@ -30,7 +32,6 @@ static const u32 DoomSdlTexturePixelFormat = SDL_PIXELFORMAT_ARGB8888;
#error Unhandled DoomBytesPerPixel value. Which SDL_PIXELFORMAT to use? #error Unhandled DoomBytesPerPixel value. Which SDL_PIXELFORMAT to use?
#endif #endif
void dp_sdl_fatal(const char *const msg) void dp_sdl_fatal(const char *const msg)
{ {
log_fatal("%s: %s", msg, SDL_GetError()); log_fatal("%s: %s", msg, SDL_GetError());
@ -206,14 +207,14 @@ void check_on_dooms(ControllerContext &ctx)
} }
} }
// FIXME: We can miss Endoom state updates when nng has to drop message due // FIXME: We can miss Endoom state updates when nng has to drop messages due
// to queue size limits. If this happens for an externally started doom it // to queue size limits. If this happens for an externally started doom it
// will never be removed from ctx.dooms (waitpid() does not work because the // will never be removed from ctx.dooms (waitpid() does not work because the
// doom is not our child). Use DoomState::tLastActive and a fixed timeout // doom is not our child). Use DoomState::tLastActive and a fixed timeout
// value to timeout dooms and erase them from ctx.dooms. // value to timeout dooms and erase them from ctx.dooms.
} }
#define DP_DO_DEBUG_DRAWING //#define DP_DO_DEBUG_DRAWING
#ifdef DP_DO_DEBUG_DRAWING #ifdef DP_DO_DEBUG_DRAWING
#include "debug_draw.cc" #include "debug_draw.cc"
#endif #endif
@ -437,12 +438,17 @@ ControllerActions run_ui(ControllerContext &ctx)
#endif #endif
static bool show_app_metrics = false; static bool show_app_metrics = false;
static bool show_app_debug_log = false; static bool show_app_debug_log = false;
static bool show_app_about = false;
static bool show_log_window = true; static bool show_log_window = true;
static bool show_userguide = false;
if (show_app_metrics) if (show_app_metrics)
ImGui::ShowMetricsWindow(&show_app_metrics); ImGui::ShowMetricsWindow(&show_app_metrics);
if (show_app_debug_log) if (show_app_debug_log)
ImGui::ShowDebugLogWindow(&show_app_debug_log); ImGui::ShowDebugLogWindow(&show_app_debug_log);
if (show_app_about)
ImGui::ShowAboutWindow(&show_app_about);
const ImGuiViewport* main_viewport = ImGui::GetMainViewport(); const ImGuiViewport* main_viewport = ImGui::GetMainViewport();
@ -453,6 +459,17 @@ ControllerActions run_ui(ControllerContext &ctx)
ctx.appLog.Draw("log"); ctx.appLog.Draw("log");
} }
if (show_userguide)
{
ImGui::SetNextWindowPos(ImVec2(main_viewport->WorkPos.x + 666, main_viewport->WorkPos.y + 420), ImGuiCond_FirstUseEver);
ImGui::SetNextWindowSize(ImVec2(500, 360), ImGuiCond_FirstUseEver);
if (ImGui::Begin("Dear ImGui User Guide", &show_userguide))
{
ImGui::ShowUserGuide();
ImGui::End();
}
}
ImGui::SetNextWindowPos(ImVec2(main_viewport->WorkPos.x + 20, main_viewport->WorkPos.y + 20), ImGuiCond_FirstUseEver); ImGui::SetNextWindowPos(ImVec2(main_viewport->WorkPos.x + 20, main_viewport->WorkPos.y + 20), ImGuiCond_FirstUseEver);
ImGui::SetNextWindowSize(ImVec2(420, 340), ImGuiCond_FirstUseEver); ImGui::SetNextWindowSize(ImVec2(420, 340), ImGuiCond_FirstUseEver);
ImGuiWindowFlags window_flags = ImGuiWindowFlags_MenuBar; ImGuiWindowFlags window_flags = ImGuiWindowFlags_MenuBar;
@ -476,18 +493,25 @@ ControllerActions run_ui(ControllerContext &ctx)
{ {
if (ImGui::BeginMenu("Menu")) if (ImGui::BeginMenu("Menu"))
{ {
ImGui::MenuItem("Log Window", nullptr, &show_log_window);
ImGui::MenuItem("Quit", "Ctrl+Q", &ctx.quit, true); ImGui::MenuItem("Quit", "Ctrl+Q", &ctx.quit, true);
ImGui::EndMenu(); ImGui::EndMenu();
} }
if (ImGui::BeginMenu("Tools")) if (ImGui::BeginMenu("Tools"))
{ {
ImGui::MenuItem("Log Window", nullptr, &show_log_window);
ImGui::MenuItem("Dear ImGui Metrics/Debugger", NULL, &show_app_metrics, has_debug_tools); ImGui::MenuItem("Dear ImGui Metrics/Debugger", NULL, &show_app_metrics, has_debug_tools);
ImGui::MenuItem("Dear ImGui Debug Log", NULL, &show_app_debug_log, has_debug_tools); ImGui::MenuItem("Dear ImGui Debug Log", NULL, &show_app_debug_log, has_debug_tools);
ImGui::EndMenu(); ImGui::EndMenu();
} }
if (ImGui::BeginMenu("Help"))
{
ImGui::MenuItem("Dear ImGui User Guide", NULL, &show_userguide);
ImGui::MenuItem("About Dear ImGui", NULL, &show_app_about);
ImGui::EndMenu();
}
ImGui::EndMenuBar(); ImGui::EndMenuBar();
} }
@ -683,12 +707,15 @@ int main(int argc, char *argv[])
dp_sdl_fatal("SDL_CreateRenderer"); dp_sdl_fatal("SDL_CreateRenderer");
IMGUI_CHECKVERSION(); IMGUI_CHECKVERSION();
ImGui::CreateContext(); auto imgui = ImGui::CreateContext();
ImGui::GetIO().IniFilename = "doompanning_ui.ini"; ImGui::GetIO().IniFilename = "doompanning_ui.ini";
ImGui::StyleColorsDark(); ImGui::StyleColorsDark();
ImGui_ImplSDL2_InitForSDLRenderer(window, renderer); ImGui_ImplSDL2_InitForSDLRenderer(window, renderer);
ImGui_ImplSDLRenderer_Init(renderer); ImGui_ImplSDLRenderer_Init(renderer);
//ImGuiSettingsHandler dpSettingsHandler;
//imgui->SettingsHandlers.push_back(dpSettingsHandler);
//dp_nng_init_limits(1, 1, 1); // int ncpu_max, int pool_thread_limit_max, int resolv_thread_limit //dp_nng_init_limits(1, 1, 1); // int ncpu_max, int pool_thread_limit_max, int resolv_thread_limit
//nng_set_ncpu_max(ncpu_max); //nng_set_ncpu_max(ncpu_max);
//nng_set_pool_thread_limit_max(pool_thread_limit_max); //nng_set_pool_thread_limit_max(pool_thread_limit_max);