Implemented default docking layout. Console windows are automatically docked to the bottom panel of the application.

This commit is contained in:
Jakob Friedl
2025-09-11 12:03:02 +02:00
parent 8968c797ac
commit c2b388fbf2
4 changed files with 82 additions and 310 deletions

View File

@@ -1,330 +1,75 @@
[Window][Dockspace]
Pos=0,0
Size=2868,1695
Collapsed=0
[Window][Debug##Default]
Pos=289,253
Size=449,261
Collapsed=0
[Window][Dear ImGui Demo]
Pos=1884,43
Size=974,624
Collapsed=0
DockId=0x00000006,1
[Window][Agents [Table View]]
Pos=10,43
Size=1187,946
Collapsed=0
DockId=0x00000005,0
[Window][Agents [Graph View]]
Pos=10,43
Size=1888,473
Collapsed=0
DockId=0x00000005,1
[Window][Eventlog]
Pos=1884,43
Size=974,624
Collapsed=0
DockId=0x00000006,0
[Window][Example: Assets Browser]
Pos=60,60
Size=800,480
Collapsed=0
[Window][Example: Console]
Pos=60,60
Size=520,600
Collapsed=0
[Window][Example: Log]
Pos=171,222
Size=1150,550
Collapsed=0
[Window][Dear ImGui Debug Log]
Pos=10,698
Size=2528,651
Collapsed=0
DockId=0x00000005,1
[Window][Dear ImGui Metrics/Debugger]
Pos=60,60
Size=564,669
Collapsed=0
[Window][Sessions [Table View]]
Pos=10,43
Size=1872,624
Size=1477,305
Collapsed=0
DockId=0x00000005,0
DockId=0x00000003,0
[Window][Dear ImGui Demo/ResizableChild_478B81A3]
IsChild=1
Size=1136,248
[Window][Dear ImGui Demo/Red_BEEF922B]
IsChild=1
Size=200,100
[Window][Dear ImGui Demo/##Basket_956142B6]
IsChild=1
Size=1115,540
[Window][Dear ImGui Demo/##Basket_8B4CCC3E]
IsChild=1
Size=1115,540
[Window][Dear ImGui Demo/##Basket_10C9C799]
IsChild=1
Size=1115,540
[Window][Dear ImGui Demo/##Tree_EC99B1DE]
IsChild=1
Size=1115,540
[Window][Sessions [Graph View]]
Pos=10,518
Size=1453,471
[Window][Listeners]
Pos=10,350
Size=1888,639
Collapsed=0
DockId=0x00000002,0
[Window][Dear ImGui Demo/##Basket_87771727]
IsChild=1
Size=614,540
[Window][Listeners]
Pos=10,765
Size=2848,920
[Window][Eventlog]
Pos=1489,43
Size=409,305
Collapsed=0
DockId=0x00000004,0
[Window][G1H2I3J4]
Pos=10,866
Size=2848,819
[Window][Dear ImGui Demo]
Pos=1489,43
Size=409,305
Collapsed=0
DockId=0x00000008,1
DockId=0x00000004,1
[Window][C9D8E7F6]
Pos=10,866
Size=2848,819
[Window][Dockspace]
Pos=0,0
Size=1908,999
Collapsed=0
DockId=0x00000008,2
[Window][FACEDEAD]
Pos=10,866
Size=2848,819
Collapsed=0
DockId=0x00000008,3
[Window][["C9D8E7F6"] charlie@SERVER-03]
Pos=10,866
Size=2848,819
Collapsed=0
DockId=0x00000008,1
[Window][[G1H2I3J4] diana@WORKSTATION-04]
Pos=10,669
Size=2848,1016
Collapsed=0
DockId=0x00000008,1
[Window][[FACEDEAD] bob@LAPTOP-02]
Pos=10,669
Size=2848,1016
Pos=10,350
Size=1888,639
Collapsed=0
DockId=0x00000008,0
DockId=0x00000002,2
[Window][[C9D8E7F6] charlie@SERVER-03]
Pos=10,669
Size=2848,1016
Pos=10,350
Size=1888,639
Collapsed=0
DockId=0x00000008,2
DockId=0x00000002,0
[Window][Debug##Default]
Pos=60,60
Size=400,400
Collapsed=0
[Window][[G1H2I3J5] diana@WORKSTATION-04]
Pos=10,350
Size=1888,639
Collapsed=0
DockId=0x00000002,1
[Window][[DEADBEEF] alice@DESKTOP-01]
Pos=10,669
Size=2848,1016
Pos=10,350
Size=1888,639
Collapsed=0
DockId=0x00000008,1
[Table][0xB6880529,2]
RefScale=27
Column 0 Sort=0v
[Table][0x951FCC8A,6]
RefScale=27
Column 0 Width=48
Column 1 Width=112 Sort=0v
Column 2 Width=108
Column 3 Width=136
Column 4 Weight=1.0000
Column 5 Width=-1
DockId=0x00000002,1
[Table][0x32886A44,8]
Column 0 Weight=0.6558
Column 1 Weight=0.9747
Column 2 Weight=0.6558
Column 3 Weight=0.8804
Column 4 Weight=1.8057
Column 5 Weight=1.1454
Column 6 Weight=0.3324
Column 7 Weight=1.5497
[Table][0x51D6F5EA,3]
Column 0 Weight=1.0000
Column 1 Weight=1.0000
Column 2 Weight=1.0000
[Table][0xE102187A,3]
RefScale=27
Column 0 Width=134
Column 1 Width=108
Column 2 Width=108
[Table][0xF1421304,3]
RefScale=27
Column 0 Width=108
Column 1 Width=108
Column 2 Weight=1.0000
[Table][0xE212E0F0,6]
RefScale=27
Column 0 Width=108
Column 1 Width=108
Column 2 Width=-1
Column 3 Weight=1.0000
Column 4 Weight=1.0000
Column 5 Weight=-1.0000
[Table][0x86C9FC97,3]
Column 0 Weight=0.6856
Column 1 Weight=0.7387
Column 2 Weight=1.5757
[Table][0x95990F63,3]
RefScale=27
Column 0 Width=108
Column 1 Width=108
Column 2 Width=108
[Table][0xEB78AB2C,3]
Column 0 Weight=1.0000
Column 1 Weight=1.0000
Column 2 Weight=1.0000
[Table][0x603C335E,2]
Column 0 Weight=1.0000
Column 1 Weight=1.0000
[Table][0xA6C6558A,2]
Column 0 Weight=1.0000
Column 1 Weight=1.0000
[Table][0xAED4F161,3]
RefScale=27
Column 0 Weight=1.0000
Column 1 Width=839 Sort=0v
Column 2 Width=-1
[Table][0x3A20F3F3,3]
RefScale=27
Column 0 Width=96
Column 1 Width=96
Column 2 Width=96
[Table][0x29CD9FF7,3]
[Table][0x302651AD,14]
RefScale=27
Column 0 Width=96
Column 1 Width=33
Column 2 Width=33
Column 3 Width=33
Column 4 Width=33
Column 5 Width=33
Column 6 Width=33
Column 7 Width=33
Column 8 Width=33
Column 9 Width=33
Column 10 Width=33
Column 11 Width=33
Column 12 Width=33
Column 13 Width=33
[Table][0x369EB90F,3]
Column 0 Weight=1.0000
Column 1 Weight=1.0000
Column 2 Weight=1.0000
[Table][0x2ACCE68A,3]
RefScale=27
Column 0 Width=136
Column 1 Width=136
Column 2 Width=136
[Table][0x6655AF53,4]
RefScale=27
Column 0 Width=48
Column 1 Width=72 Sort=0^
Column 2 Width=72
Column 3 Weight=1.0000
[Table][0x5145577A,3]
Column 0 Weight=1.0000
Column 1 Weight=1.0000
Column 2 Weight=1.0000
[Table][0x127BEAD2,7]
RefScale=27
Column 0 Width=155
Column 1 Width=155
Column 2 Width=155
Column 3 Width=156
Column 4 Width=156
Column 5 Width=156
Column 6 Width=474
[Table][0x755BE644,3]
RefScale=27
Column 0 Width=84
Column 1 Width=83
Column 2 Width=84
[Table][0xBE0D9DE1,3]
RefScale=27
Column 0 Width=84
Column 1 Width=84
Column 2 Width=217
[Table][0xDE11CCC7,8]
Column 0 Weight=0.7758
Column 1 Weight=1.1556
Column 2 Weight=0.7758
Column 3 Weight=0.9616
Column 4 Weight=0.9616
Column 5 Weight=1.1556
Column 6 Weight=0.3879
Column 7 Weight=1.8263
[Table][0x61294EC1,3]
RefScale=27
Column 0 Width=119
Column 1 Width=119
Column 2 Width=119
Column 0 Weight=0.6570
Column 1 Weight=0.9786
Column 2 Weight=0.6570
Column 3 Weight=1.1429
Column 4 Weight=1.5466
Column 5 Weight=1.1429
Column 6 Weight=0.3285
Column 7 Weight=1.5466
[Docking][Data]
DockSpace ID=0x85940918 Window=0x260A4489 Pos=10,43 Size=2848,1642 Split=Y
DockNode ID=0x00000007 Parent=0x85940918 SizeRef=2848,624 Split=Y
DockNode ID=0x00000003 Parent=0x00000007 SizeRef=2848,720 Split=Y
DockNode ID=0x00000001 Parent=0x00000003 SizeRef=1453,473 Split=X Selected=0x61E02D75
DockNode ID=0x00000005 Parent=0x00000001 SizeRef=1872,674 CentralNode=1 Selected=0x61E02D75
DockNode ID=0x00000006 Parent=0x00000001 SizeRef=974,674 Selected=0x5E5F7166
DockNode ID=0x00000002 Parent=0x00000003 SizeRef=1453,471 Selected=0x6D7E7D39
DockNode ID=0x00000004 Parent=0x00000007 SizeRef=2848,920 Selected=0x6BE22050
DockNode ID=0x00000008 Parent=0x85940918 SizeRef=2848,1016 Selected=0xD3469193
DockSpace ID=0x85940918 Window=0x260A4489 Pos=10,43 Size=1888,946 Split=Y
DockNode ID=0x00000001 Parent=0x85940918 SizeRef=1024,159 Split=X
DockNode ID=0x00000003 Parent=0x00000001 SizeRef=613,159 CentralNode=1 Selected=0x61E02D75
DockNode ID=0x00000004 Parent=0x00000001 SizeRef=409,159 Selected=0x5E5F7166
DockNode ID=0x00000002 Parent=0x85940918 SizeRef=1024,639 Selected=0x8D780333

View File

@@ -11,10 +11,16 @@ proc main() =
showConquest = true
showSessionsTable = true
showSessionsGraph = false
showListeners = false
showListeners = true
showEventlog = true
consoles: Table[string, ConsoleComponent]
var
dockTop: ImGuiID = 0
dockBottom: ImGuiID = 0
dockTopLeft: ImGuiID = 0
dockTopRight: ImGuiID = 0
views["Sessions [Table View]"] = addr showSessionsTable
views["Sessions [Graph View]"] = addr showSessionsGraph
views["Listeners"] = addr showListeners
@@ -39,7 +45,7 @@ proc main() =
newFrame()
# Draw/update UI components/views
dockspace.draw(addr showConquest, views)
dockspace.draw(addr showConquest, views, addr dockTop, addr dockBottom, addr dockTopLeft, addr dockTopRight)
if showSessionsTable: sessionsTable.draw(addr showSessionsTable)
if showListeners: listenersTable.draw(addr showListeners)
if showEventlog: eventlog.draw(addr showEventlog)
@@ -48,6 +54,8 @@ proc main() =
var newConsoleTable: Table[string, ConsoleComponent]
for agentId, console in consoles.mpairs():
if console.showConsole:
# Ensure that new console windows are docked to the bottom panel by default
igSetNextWindowDockID(dockBottom, ImGuiCond_FirstUseEver.int32)
console.draw()
newConsoleTable[agentId] = console

View File

@@ -7,14 +7,16 @@ type
windowClass: ptr ImGuiWindowClass
dockspaceFlags: ImGuiDockNodeFlags
windowFlags: ImGuiWindow_Flags
initialized: bool
proc Dockspace*(): DockspaceComponent =
result = new DockspaceComponent
result.windowClass = ImGuiWindowClass_ImGuiWindowClass()
result.dockspaceFlags = ImGuiDockNodeFlags_None.int32
result.windowFlags = ImGuiWindowFlags_MenuBar.int32 or ImGuiWindowFlags_NoDocking.int32
result.initialized = false
proc draw*(component: DockspaceComponent, showComponent: ptr bool, views: Table[string, ptr bool]) =
proc draw*(component: DockspaceComponent, showComponent: ptr bool, views: Table[string, ptr bool], dockTop, dockBottom, dockTopLeft, dockTopRight: ptr ImGuiID) =
var vp = igGetMainViewport()
igSetNextWindowPos(vp.WorkPos, ImGui_Cond_None.int32, vec2(0.0f, 0.0f))
@@ -39,8 +41,25 @@ proc draw*(component: DockspaceComponent, showComponent: ptr bool, views: Table[
igPopStyleVar(3)
# Setup default docking layout
var dockspaceId = igGetID_Str("Dockspace")
if igDockBuilderGetNode(dockspaceId) == nil:
igDockBuilderRemoveNode(dockspaceId)
igDockBuilderAddNode(dockspaceId, ImGuiDockNodeFlags_DockSpace.int32)
igDockBuilderSetNodeSize(dockspaceId, vp.WorkSize)
discard igDockBuilderSplitNode(dockspaceId, ImGuiDir_Down, 0.8f, dockBottom, dockTop)
discard igDockBuilderSplitNode(dockTop[], ImGuiDir_Right, 0.4f, dockTopRight, dockTopLeft)
igDockBuilderDockWindow("Sessions [Table View]", dockTopLeft[])
igDockBuilderDockWindow("Listeners", dockBottom[])
igDockBuilderDockWindow("Eventlog", dockTopRight[])
igDockBuilderDockWindow("Dear ImGui Demo", dockTopRight[])
igDockBuilderFinish(dockspaceId)
# Create dockspace
igDockSpace(igGetID_Str("Dockspace"), vec2(0.0f, 0.0f), component.dockspaceFlags, component.windowClass)
igDockSpace(dockspaceId, vec2(0.0f, 0.0f), component.dockspaceFlags, component.windowClass)
# Create menu bar
if igBeginMenuBar():

View File

@@ -65,7 +65,7 @@ let exampleAgents: seq[Agent] = @[
sessionKey: [byte 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
),
Agent(
agentId: "G1H2I3J4",
agentId: "G1H2I3J5",
listenerId: "L1357924",
username: "diana",
hostname: "WORKSTATION-04",