EonaCat.Port.Monitor/EonaCat.PortMonitor/MainWindow.xaml

109 lines
7.9 KiB
XML

<Window x:Class="EonaCat.PortMonitor.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="EonaCat Port Monitor" Height="600" Width="1500" WindowStartupLocation="CenterScreen">
<Window.Resources>
<ResourceDictionary Source="/Themes.xaml" />
</Window.Resources>
<Grid Background="{DynamicResource DynamicBackgroundColor}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- Define a Grid inside the first Row (to contain the StackPanel and the button) -->
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<!-- Flexible space -->
<ColumnDefinition Width="Auto" />
<!-- Fixed width for the button -->
</Grid.ColumnDefinitions>
<!-- Filter and other elements go in the first column -->
<StackPanel Grid.Column="0" Orientation="Horizontal" Margin="10">
<TextBlock Text="Filter by Keyword:" VerticalAlignment="Center" Margin="5" />
<TextBox Name="KeywordFilter" Width="200" Margin="5" KeyUp="FilterConnections_KeyUp"/>
</StackPanel>
<!-- Theme switch button goes in the second column (aligned to the right) -->
<Button x:Name="btnTheme" Content="🌙" Width="40" Height="30" Margin="10,0" VerticalAlignment="Center" Grid.Column="1" Click="btnTheme_Click" />
</Grid>
<!-- Network Statistics Section -->
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="10">
<TextBlock Name="TcpUdpStatsText" VerticalAlignment="Center" FontSize="14" Margin="5" />
</StackPanel>
<!-- DataGrid for Connections -->
<TabControl Margin="10" Grid.Row="2" >
<TabItem Header="Connections" >
<DataGrid Name="NetworkDataGrid" AutoGenerateColumns="False" IsReadOnly="True" Margin="10" PreviewMouseDoubleClick="DataGrid_PreviewMouseDoubleClick">
<DataGrid.Columns>
<DataGridTextColumn Header="Protocol" Binding="{Binding Protocol}" Width="100"/>
<DataGridTextColumn Header="Local Address" Binding="{Binding LocalAddress}" Width="200"/>
<DataGridTextColumn Header="Local Port" Binding="{Binding LocalPort}" Width="100"/>
<DataGridTextColumn Header="Remote Address" Binding="{Binding RemoteAddress}" Width="200"/>
<DataGridTextColumn Header="Remote Port" Binding="{Binding RemotePort}" Width="100"/>
<DataGridTextColumn Header="State" Binding="{Binding State}" Width="150"/>
<DataGridTextColumn Header="Process Name" Binding="{Binding ProcessName}" Width="200"/>
<DataGridTextColumn Header="Process Id" Binding="{Binding ProcessId}" Width="100"/>
<DataGridTextColumn Header="Connection Duration" Binding="{Binding ConnectionDuration}" Width="150"/>
</DataGrid.Columns>
</DataGrid>
</TabItem>
<TabItem Header="Inbound Connections" >
<DataGrid Name="InboundDataGrid" AutoGenerateColumns="False" IsReadOnly="True" Margin="10" PreviewMouseDoubleClick="DataGrid_PreviewMouseDoubleClick">
<DataGrid.Columns>
<DataGridTextColumn Header="Protocol" Binding="{Binding Protocol}" Width="100"/>
<DataGridTextColumn Header="Local Address" Binding="{Binding LocalAddress}" Width="200"/>
<DataGridTextColumn Header="Local Port" Binding="{Binding LocalPort}" Width="100"/>
<DataGridTextColumn Header="Remote Address" Binding="{Binding RemoteAddress}" Width="200"/>
<DataGridTextColumn Header="Remote Port" Binding="{Binding RemotePort}" Width="100"/>
<DataGridTextColumn Header="State" Binding="{Binding State}" Width="150"/>
<DataGridTextColumn Header="Process Name" Binding="{Binding ProcessName}" Width="200"/>
<DataGridTextColumn Header="Process Id" Binding="{Binding ProcessId}" Width="100"/>
<DataGridTextColumn Header="Connection Duration" Binding="{Binding ConnectionDuration}" Width="150"/>
</DataGrid.Columns>
</DataGrid>
</TabItem>
<TabItem Header="Outbound Connections" >
<DataGrid Name="OutboundDataGrid" AutoGenerateColumns="False" IsReadOnly="True" Margin="10" PreviewMouseDoubleClick="DataGrid_PreviewMouseDoubleClick">
<DataGrid.Columns>
<DataGridTextColumn Header="Protocol" Binding="{Binding Protocol}" Width="100"/>
<DataGridTextColumn Header="Local Address" Binding="{Binding LocalAddress}" Width="200"/>
<DataGridTextColumn Header="Local Port" Binding="{Binding LocalPort}" Width="100"/>
<DataGridTextColumn Header="Remote Address" Binding="{Binding RemoteAddress}" Width="200"/>
<DataGridTextColumn Header="Remote Port" Binding="{Binding RemotePort}" Width="100"/>
<DataGridTextColumn Header="State" Binding="{Binding State}" Width="150"/>
<DataGridTextColumn Header="Process Name" Binding="{Binding ProcessName}" Width="200"/>
<DataGridTextColumn Header="Process Id" Binding="{Binding ProcessId}" Width="100"/>
<DataGridTextColumn Header="Connection Duration" Binding="{Binding ConnectionDuration}" Width="150"/>
</DataGrid.Columns>
</DataGrid>
</TabItem>
</TabControl>
<!-- Export Section -->
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="10">
<Button Content="Export to JSON" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="ExportToJsonButton_Click" />
<Button Content="Export to XML" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="ExportToXmlButton_Click" />
<Button Content="Export to CSV" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="ExportToCsvButton_Click" />
<Button Content="Export to HTML" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="ExportToHtmlButton_Click" />
<Button Content="Save Filter Preset" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="SaveFilterPresetButton_Click" />
<Button Content="Load Filter Preset" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="LoadFilterPresetButton_Click" />
<Button Content="Kill Process" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="KillProcessButton_Click" />
<Button Content="IP Lookup" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="IpLookupButton_Click" />
<Button Content="Block IP" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Click="BlockIpButton_Click" />
<StackPanel>
<CheckBox x:Name="chkMinimize" Content="Minimize on start" VerticalContentAlignment="Center" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" Checked="chkMinimize_Checked" />
<CheckBox x:Name="chkShowPopups" Content="Show notifications" VerticalContentAlignment="Center" Width="120" Height="30" Margin="10,0" VerticalAlignment="Center" IsChecked="True" Checked="chkShowPopups_Checked" />
</StackPanel>
</StackPanel>
</Grid>
</Window>