Files
2026-04-03 14:23:15 +10:00

343 lines
19 KiB
XML

<Window x:Class="BlackbirdInterface.ChildProcessGraphWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Child Process Graph"
Height="860"
Width="1240"
MinHeight="620"
MinWidth="980"
WindowStartupLocation="CenterOwner"
WindowStyle="None"
ResizeMode="CanResize"
Background="{DynamicResource WinBgBrush}"
UseLayoutRounding="True"
SnapsToDevicePixels="True"
TextOptions.TextFormattingMode="Display"
TextOptions.TextRenderingMode="ClearType">
<Window.Resources>
<Style x:Key="PanelHeaderBorderStyle" TargetType="Border">
<Setter Property="Background" Value="{DynamicResource WinHeaderBrush}"/>
<Setter Property="BorderBrush" Value="{DynamicResource WinSubtleBorderBrush}"/>
<Setter Property="BorderThickness" Value="0,0,0,1"/>
<Setter Property="Padding" Value="10,8"/>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Style="{StaticResource SecondaryWindowTitleBarBorderStyle}"
MouseLeftButtonDown="Root_MouseLeftButtonDown">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<TextBlock Text="Child Process Graph"
Style="{StaticResource SecondaryWindowTitleTextStyle}"/>
<TextBlock x:Name="SummaryBlock"
Style="{StaticResource SecondaryWindowSubtitleTextStyle}"
Text="No monitored descendants or pivots yet"/>
</StackPanel>
<StackPanel Grid.Column="1"
Orientation="Horizontal"
VerticalAlignment="Top">
<Button Style="{DynamicResource SecondaryWindowTitleGlyphButtonStyle}"
Content="&#xE921;"
Click="WindowMinimize_Click"/>
<Button Style="{DynamicResource SecondaryWindowTitleGlyphButtonStyle}"
Content="&#xE922;"
Click="WindowMaximize_Click"/>
<Button Style="{DynamicResource SecondaryWindowTitleGlyphButtonStyle}"
Tag="Close"
Content="&#xE8BB;"
Click="Close_Click"/>
</StackPanel>
</Grid>
</Border>
<Border Grid.Row="1"
Margin="8,8,8,0"
Style="{DynamicResource SecondaryWindowSurfaceBorderStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="88"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="88"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="88"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0"
Margin="0,0,8,0"
FontSize="11"
Foreground="{DynamicResource WinMutedTextBrush}"
Text="Target"/>
<TextBlock x:Name="TargetBlock"
Grid.Row="0"
Grid.Column="1"
FontWeight="SemiBold"
Text="PID 0"/>
<TextBlock Grid.Row="0" Grid.Column="2"
Margin="0,0,8,0"
FontSize="11"
Foreground="{DynamicResource WinMutedTextBrush}"
Text="Launches"/>
<TextBlock x:Name="LaunchCountBlock"
Grid.Row="0"
Grid.Column="3"
Text="0"/>
<TextBlock Grid.Row="0" Grid.Column="4"
Margin="0,0,8,0"
FontSize="11"
Foreground="{DynamicResource WinMutedTextBrush}"
Text="Pivots"/>
<TextBlock x:Name="PivotCountBlock"
Grid.Row="0"
Grid.Column="5"
Text="0"/>
<TextBlock Grid.Row="1" Grid.Column="0"
Margin="0,4,8,0"
FontSize="11"
Foreground="{DynamicResource WinMutedTextBrush}"
Text="Scope"/>
<TextBlock x:Name="ScopeBlock"
Grid.Row="1"
Grid.Column="1"
Grid.ColumnSpan="5"
Margin="0,4,0,0"
Text="Live descendant and pivot graph"/>
</Grid>
</Border>
<Border Grid.Row="2"
Margin="8,8,8,8"
Style="{StaticResource SecondaryWindowSurfaceBorderStyle}"
Padding="0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2.2*"/>
<ColumnDefinition Width="1"/>
<ColumnDefinition Width="1.15*"/>
<ColumnDefinition Width="1"/>
<ColumnDefinition Width="1.15*"/>
</Grid.ColumnDefinitions>
<!-- Descendants And Thread Pivots -->
<Border Grid.Column="0"
Background="{DynamicResource ExplorerPreviewBackgroundBrush}">
<DockPanel LastChildFill="True">
<Border DockPanel.Dock="Top" Style="{StaticResource PanelHeaderBorderStyle}">
<TextBlock FontSize="12" FontWeight="SemiBold" Text="Descendants And Thread Pivots"/>
</Border>
<Grid Margin="8">
<TreeView x:Name="RelationsTree"
BorderThickness="0"
Background="Transparent"
ScrollViewer.CanContentScroll="True"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.VirtualizationMode="Recycling"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<StackPanel Margin="0,2,0,2">
<DockPanel LastChildFill="True">
<Ellipse Width="8"
Height="8"
Margin="0,4,8,0"
VerticalAlignment="Top"
Fill="{Binding DotBrush}"/>
<StackPanel>
<TextBlock Text="{Binding Title}"
FontWeight="SemiBold"
Foreground="{Binding TitleBrush}"
TextWrapping="Wrap"/>
<TextBlock Text="{Binding Meta}"
Margin="0,1,0,0"
Foreground="{DynamicResource WinMutedTextBrush}"
TextWrapping="Wrap"/>
</StackPanel>
</DockPanel>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<Border x:Name="NoDataOverlay"
Background="{DynamicResource NoDataOverlayBrush}"
IsHitTestVisible="False"
Visibility="Collapsed">
<TextBlock Text="NO GRAPH DATA"
FontSize="34"
FontWeight="Bold"
Foreground="{DynamicResource WinTextBrush}"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Opacity="0.72"/>
</Border>
</Grid>
</DockPanel>
</Border>
<Border Grid.Column="1"
Background="{DynamicResource WinSubtleBorderBrush}"/>
<!-- Handles Opened To Target -->
<Border Grid.Column="2"
Background="{DynamicResource ExplorerPreviewBackgroundBrush}">
<DockPanel LastChildFill="True">
<Border DockPanel.Dock="Top" Style="{StaticResource PanelHeaderBorderStyle}">
<TextBlock FontSize="12" FontWeight="SemiBold" Text="Handles Opened To Target"/>
</Border>
<Grid Margin="8">
<ListView x:Name="InboundHandlesList"
BorderThickness="0"
Background="Transparent"
ScrollViewer.CanContentScroll="True"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.VirtualizationMode="Recycling">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Padding" Value="0"/>
<Setter Property="Margin" Value="0,0,0,6"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<Border Padding="8,6" BorderThickness="1">
<Border.Style>
<Style TargetType="Border">
<Setter Property="Background" Value="{DynamicResource WinHeaderBrush}"/>
<Setter Property="BorderBrush" Value="{DynamicResource WinSubtleBorderBrush}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsBlackbirdInternal}" Value="True">
<Setter Property="Background" Value="#08101A"/>
<Setter Property="BorderBrush" Value="#1A2A38"/>
<Setter Property="Opacity" Value="0.55"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<StackPanel>
<TextBlock Margin="0,0,0,3"
FontSize="9"
FontWeight="Bold"
Foreground="#3F7099"
Text="BLACKBIRD INTERNAL — EXPECTED">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsBlackbirdInternal}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<TextBlock Text="{Binding Title}"
FontWeight="SemiBold"
Foreground="{Binding TitleBrush}"
TextWrapping="Wrap"/>
<TextBlock Text="{Binding Meta}"
Margin="0,2,0,0"
Foreground="{DynamicResource WinMutedTextBrush}"
TextWrapping="Wrap"/>
</StackPanel>
</Border>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<TextBlock x:Name="InboundHandlesEmptyBlock"
Text="NO INBOUND HANDLES"
FontSize="16"
FontWeight="SemiBold"
Foreground="{DynamicResource WinMutedTextBrush}"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Visibility="Collapsed"/>
</Grid>
</DockPanel>
</Border>
<Border Grid.Column="3"
Background="{DynamicResource WinSubtleBorderBrush}"/>
<!-- Handles Opened By Target -->
<Border Grid.Column="4"
Background="{DynamicResource ExplorerPreviewBackgroundBrush}">
<DockPanel LastChildFill="True">
<Border DockPanel.Dock="Top" Style="{StaticResource PanelHeaderBorderStyle}">
<TextBlock FontSize="12" FontWeight="SemiBold" Text="Handles Opened By Target"/>
</Border>
<Grid Margin="8">
<ListView x:Name="OutboundHandlesList"
BorderThickness="0"
Background="Transparent"
ScrollViewer.CanContentScroll="True"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.VirtualizationMode="Recycling">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Padding" Value="0"/>
<Setter Property="Margin" Value="0,0,0,6"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<Border Padding="8,6"
Background="{DynamicResource WinHeaderBrush}"
BorderBrush="{DynamicResource WinSubtleBorderBrush}"
BorderThickness="1">
<StackPanel>
<TextBlock Text="{Binding Title}"
FontWeight="SemiBold"
Foreground="{Binding TitleBrush}"
TextWrapping="Wrap"/>
<TextBlock Text="{Binding Meta}"
Margin="0,2,0,0"
Foreground="{DynamicResource WinMutedTextBrush}"
TextWrapping="Wrap"/>
</StackPanel>
</Border>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<TextBlock x:Name="OutboundHandlesEmptyBlock"
Text="NO OUTBOUND HANDLES"
FontSize="16"
FontWeight="SemiBold"
Foreground="{DynamicResource WinMutedTextBrush}"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Visibility="Collapsed"/>
</Grid>
</DockPanel>
</Border>
</Grid>
</Border>
</Grid>
</Window>