diff --git a/src/client/layout.ini b/src/client/layout.ini index 1de9c67..a5f7ad5 100644 --- a/src/client/layout.ini +++ b/src/client/layout.ini @@ -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 diff --git a/src/client/main.nim b/src/client/main.nim index 71920df..546a421 100644 --- a/src/client/main.nim +++ b/src/client/main.nim @@ -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) @@ -47,7 +53,9 @@ proc main() = # Show console windows var newConsoleTable: Table[string, ConsoleComponent] for agentId, console in consoles.mpairs(): - if console.showConsole: + 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 diff --git a/src/client/views/dockspace.nim b/src/client/views/dockspace.nim index 5510d59..4051641 100644 --- a/src/client/views/dockspace.nim +++ b/src/client/views/dockspace.nim @@ -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(): diff --git a/src/client/views/sessions.nim b/src/client/views/sessions.nim index 3304ff9..98bbd2d 100644 --- a/src/client/views/sessions.nim +++ b/src/client/views/sessions.nim @@ -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",