From ef803d02e4bea8f0927e66951bf15b35e3220f38 Mon Sep 17 00:00:00 2001
From: Bartosz Podrygajlo <bartosz.podrygajlo@openairinterface.org>
Date: Thu, 10 Oct 2024 16:03:16 +0200
Subject: [PATCH] Add default docking window layout for imscope

---
 openair1/PHY/TOOLS/imscope/CMakeLists.txt |  1 +
 openair1/PHY/TOOLS/imscope/imgui.ini      | 99 +++++++++++++++++++++++
 openair1/PHY/TOOLS/imscope/imscope.cpp    | 13 +++
 3 files changed, 113 insertions(+)
 create mode 100644 openair1/PHY/TOOLS/imscope/imgui.ini

diff --git a/openair1/PHY/TOOLS/imscope/CMakeLists.txt b/openair1/PHY/TOOLS/imscope/CMakeLists.txt
index e7125274fb4..26eb8551008 100644
--- a/openair1/PHY/TOOLS/imscope/CMakeLists.txt
+++ b/openair1/PHY/TOOLS/imscope/CMakeLists.txt
@@ -32,3 +32,4 @@ target_include_directories(implot PUBLIC ${implot_SOURCE_DIR})
 add_library(imscope MODULE imscope.cpp ../phy_scope_interface.c)
 target_link_libraries(imscope PUBLIC imgui_glfw_backend glfw imgui_opengl_renderer OpenGL::OpenGL implot UTIL)
 set_target_properties(imscope PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
+configure_file(imgui.ini ${CMAKE_BINARY_DIR}/imscope-init.ini COPYONLY)
diff --git a/openair1/PHY/TOOLS/imscope/imgui.ini b/openair1/PHY/TOOLS/imscope/imgui.ini
new file mode 100644
index 00000000000..3fc08b6f7c1
--- /dev/null
+++ b/openair1/PHY/TOOLS/imscope/imgui.ini
@@ -0,0 +1,99 @@
+[Window][Debug##Default]
+Pos=60,60
+Size=400,400
+Collapsed=0
+
+[Window][NR KPI]
+Pos=0,19
+Size=1133,667
+Collapsed=0
+DockId=0x00000005,0
+
+[Window][Dear ImGui Demo]
+Pos=531,19
+Size=529,667
+Collapsed=0
+DockId=0x00000002,0
+
+[Window][ImPlot Demo]
+Pos=531,19
+Size=529,667
+Collapsed=0
+DockId=0x00000002,0
+
+[Window][WindowOverViewport_11111111]
+Pos=0,19
+Size=1280,701
+Collapsed=0
+
+[Window][Status bar]
+Pos=0,688
+Size=1280,32
+Collapsed=0
+DockId=0x00000004,0
+
+[Window][Global scope settings]
+Pos=1038,19
+Size=242,667
+Collapsed=0
+DockId=0x00000006,0
+
+[Window][UE KPI]
+Pos=532,19
+Size=528,667
+Collapsed=0
+DockId=0x00000008,0
+
+[Window][UE PDSCH IQ]
+Pos=0,19
+Size=530,667
+Collapsed=0
+DockId=0x00000005,1
+
+[Window][Time domain samples]
+Pos=0,19
+Size=1036,667
+Collapsed=0
+DockId=0x00000005,0
+
+[Window][Time domain samples - before sync]
+Pos=0,19
+Size=530,667
+Collapsed=0
+DockId=0x00000005,2
+
+[Window][Broadcast channel]
+Pos=0,19
+Size=530,667
+Collapsed=0
+DockId=0x00000005,3
+
+[Window][RX IQ]
+Pos=532,19
+Size=528,667
+Collapsed=0
+DockId=0x00000008,0
+
+[Window][PUSCH SLOT IQ]
+Pos=0,19
+Size=1036,667
+Collapsed=0
+DockId=0x00000005,1
+
+[Window][PUSCH LLRs]
+Pos=0,19
+Size=1036,667
+Collapsed=0
+DockId=0x00000005,2
+
+[Docking][Data]
+DockSpace         ID=0x7C6B3D9B Window=0xA87D555D Pos=0,19 Size=1280,701 Split=Y Selected=0x71C89FCB
+  DockNode        ID=0x00000003 Parent=0x7C6B3D9B SizeRef=1280,667 Split=X
+    DockNode      ID=0x00000001 Parent=0x00000003 SizeRef=1319,720 Split=X Selected=0x6627CA6C
+      DockNode    ID=0x00000007 Parent=0x00000001 SizeRef=530,667 Split=X Selected=0x93FDECFF
+        DockNode  ID=0x00000005 Parent=0x00000007 SizeRef=1036,334 CentralNode=1 Selected=0x93FDECFF
+        DockNode  ID=0x00000006 Parent=0x00000007 SizeRef=242,334 Selected=0xFAA8D9D5
+      DockNode    ID=0x00000008 Parent=0x00000001 SizeRef=528,667 Selected=0x6627CA6C
+    DockNode      ID=0x00000002 Parent=0x00000003 SizeRef=529,720 Selected=0xB903C8C9
+  DockNode        ID=0x00000004 Parent=0x7C6B3D9B SizeRef=1280,32 HiddenTabBar=1 Selected=0xD9B9B9C7
+
diff --git a/openair1/PHY/TOOLS/imscope/imscope.cpp b/openair1/PHY/TOOLS/imscope/imscope.cpp
index 45a371a1142..84ae7d85f41 100644
--- a/openair1/PHY/TOOLS/imscope/imscope.cpp
+++ b/openair1/PHY/TOOLS/imscope/imscope.cpp
@@ -693,6 +693,13 @@ void *imscope_thread(void *data_void_ptr)
     // Start the Dear ImGui frame
     ImGui_ImplOpenGL3_NewFrame();
     ImGui_ImplGlfw_NewFrame();
+
+    static bool reset_ini_settings = false;
+    if (reset_ini_settings)
+    {
+      ImGui::LoadIniSettingsFromDisk("imscope-init.ini");
+      reset_ini_settings = false;
+    }
     ImGui::NewFrame();
 
     int display_w, display_h;
@@ -714,6 +721,12 @@ void *imscope_thread(void *data_void_ptr)
         ImGui::Checkbox("Show implot demo window", &show_implot_demo_window);
         ImGui::EndMenu();
       }
+      if (ImGui::BeginMenu("Layout")) {
+        if (ImGui::MenuItem("Reset")) {
+           reset_ini_settings = true;
+        }
+        ImGui::EndMenu();
+      }
       ImGui::EndMainMenuBar();
     }
 
-- 
GitLab