M src/PacketLogger/Models/Packets/DummyPacketProvider.cs => src/PacketLogger/Models/Packets/DummyPacketProvider.cs +4 -2
@@ 28,8 28,10 @@ public class DummyPacketProvider : IPacketProvider, IDisposable
/// <summary>
/// Initializes a new instance of the <see cref="DummyPacketProvider"/> class.
/// </summary>
- public DummyPacketProvider()
+ /// <param name="name">The name of the tab.</param>
+ public DummyPacketProvider(string name)
{
+ Name = name;
Packets = new SourceList<PacketInfo>();
Packets.Add(new PacketInfo(_index++, DateTime.Now, PacketSource.Client, "#cl"));
Packets.Add(new PacketInfo(_index++, DateTime.Now, PacketSource.Client, "cl"));
@@ 72,7 74,7 @@ public class DummyPacketProvider : IPacketProvider, IDisposable
}
/// <inheritdoc />
- public string Name => "Empty";
+ public string Name { get; }
/// <inheritdoc />
public bool IsOpen => false;
M src/PacketLogger/ViewModels/DocumentViewModel.cs => src/PacketLogger/ViewModels/DocumentViewModel.cs +1 -7
@@ 72,8 72,7 @@ public class DocumentViewModel : Document, INotifyPropertyChanged, IDisposable
() =>
{
Loading = true;
- Name = "Dummy";
- _packetProvider = new DummyPacketProvider();
+ _packetProvider = new DummyPacketProvider(Title);
NestedViewModel = new PacketLogViewModel(_packetProvider);
Loaded = true;
onDocumentLoaded(this);
@@ 196,11 195,6 @@ public class DocumentViewModel : Document, INotifyPropertyChanged, IDisposable
public ObservableCollection<IPacketProvider> Providers => _providers;
/// <summary>
- /// Gets or sets the name of the tab.
- /// </summary>
- public string Name { get; set; } = "New tab";
-
- /// <summary>
/// Gets whether the document is currently being loaded.
/// </summary>
public bool Loading { get; private set; }
M src/PacketLogger/ViewModels/PacketLogViewModel.cs => src/PacketLogger/ViewModels/PacketLogViewModel.cs +18 -6
@@ 71,14 71,16 @@ public class PacketLogViewModel : ViewModelBase, IDisposable
if (Scroll)
{
RxApp.MainThreadScheduler.Schedule
- (DateTimeOffset.Now.AddMilliseconds(100), () =>
+ (
+ DateTimeOffset.Now.AddMilliseconds(100),
+ () =>
+ {
+ if (FilteredPackets.Count > 0)
{
- if (FilteredPackets.Count > 0)
- {
- SelectedPacket = FilteredPackets[^1];
- }
+ SelectedPacket = FilteredPackets[^1];
}
- );
+ }
+ );
}
}
);
@@ 214,6 216,16 @@ public class PacketLogViewModel : ViewModelBase, IDisposable
/// </summary>
public string Empty { get; } = string.Empty;
+ /// <summary>
+ /// Gets or sets whether the recv filter is selected.
+ /// </summary>
+ public bool RecvFilterSelected { get; set; }
+
+ /// <summary>
+ /// Gets or sets whether the send filter is selected.
+ /// </summary>
+ public bool SendFilterSelected { get; set; }
+
private void CreateSendRecv()
{
IFilter recvFilter = CreateCompound(RecvFilter);
M src/PacketLogger/Views/MainWindow.axaml => src/PacketLogger/Views/MainWindow.axaml +8 -13
@@ 11,7 11,8 @@
ExtendClientAreaToDecorationsHint="True"
Title="PacketLogger"
FontFamily="avares://Avalonia.Themes.Fluent/Assets#Inter"
- TransparencyLevelHint="AcrylicBlur">
+ TransparencyLevelHint="AcrylicBlur"
+ Padding="0" Margin="0">
<Design.DataContext>
<!-- This only sets the DataContext for the previewer in an IDE,
to set the actual DataContext for runtime, set the DataContext property in code (look at App.axaml.cs) -->
@@ 28,7 29,8 @@
<Style Selector="MenuItem">
<Setter Property="Header" Value="{Binding CharacterString}" />
<Setter Property="Command" Value="{Binding Connect}" />
- <Setter Property="CommandParameter" Value="{Binding SelectedItems, RelativeSource={RelativeSource Self}}" />
+ <Setter Property="CommandParameter"
+ Value="{Binding SelectedItems, RelativeSource={RelativeSource Self}}" />
</Style>
</MenuItem.Styles>
</MenuItem>
@@ 45,7 47,8 @@
<Style Selector="MenuItem">
<Setter Property="Header" Value="{Binding Name}" />
<Setter Property="Command" Value="{Binding OpenSender}" />
- <Setter Property="CommandParameter" Value="{Binding SelectedItems, RelativeSource={RelativeSource Self}}" />
+ <Setter Property="CommandParameter"
+ Value="{Binding SelectedItems, RelativeSource={RelativeSource Self}}" />
</Style>
</MenuItem.Styles>
</MenuItem>
@@ 63,15 66,7 @@
</ExperimentalAcrylicBorder.Material>
</ExperimentalAcrylicBorder>
- <Grid Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2" RowDefinitions="*, 25">
- <DockControl Grid.Row="0" Grid.Column="0" x:Name="DockControl" Layout="{Binding Layout}" Margin="4" />
- <Panel DataContext="{Binding Layout.ActiveDockable}"
- Grid.Row="1" Grid.Column="0">
- <TextBlock Text="{Binding FocusedDockable, FallbackValue={}}"
- Margin="4"
- x:DataType="core:IDock"
- x:CompileBindings="True" />
- </Panel>
- </Grid>
+ <DockControl Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" x:Name="DockControl" Layout="{Binding Layout}"
+ Margin="0" />
</Grid>
</Window>=
\ No newline at end of file
M src/PacketLogger/Views/PacketLogFilterView.axaml => src/PacketLogger/Views/PacketLogFilterView.axaml +5 -0
@@ 13,6 13,11 @@
<DataGrid Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Items="{Binding Filters}" IsReadOnly="True"
SelectedItem="{Binding SelectedFilter}"
CanUserReorderColumns="True" CanUserSortColumns="True" CanUserResizeColumns="True">
+ <DataGrid.Styles>
+ <Style Selector="DataGridColumnHeader">
+ <Setter Property="MinHeight" Value="24" />
+ </Style>
+ </DataGrid.Styles>
<DataGrid.Columns>
<DataGridTextColumn Header="Type" Binding="{Binding Type}" MinWidth="80" />
<DataGridTextColumn Header="Value" Binding="{Binding Value}" Width="*" MinWidth="100" />
M src/PacketLogger/Views/PacketLogView.axaml => src/PacketLogger/Views/PacketLogView.axaml +15 -21
@@ 19,9 19,9 @@
</Design.DataContext>
<SplitView IsPaneOpen="{Binding PaneOpen, Mode = TwoWay}" DisplayMode="CompactInline" PanePlacement="Right">
<SplitView.Pane>
- <Grid ColumnDefinitions="*" RowDefinitions="0.8*,100" Margin="10">
- <Grid Grid.Row="0" RowDefinitions="30,*">
- <Grid Grid.Row="0" Grid.Column="0" ColumnDefinitions="24, *">
+ <Grid ColumnDefinitions="*" RowDefinitions="*,80" Margin="10">
+ <Grid Grid.Row="0" RowDefinitions="45,*">
+ <Grid Grid.Row="0" Grid.Column="0" ColumnDefinitions="24, Auto, *">
<Button Margin="0,1,0,0" VerticalContentAlignment="Stretch"
HorizontalContentAlignment="Stretch" Width="22" Height="22"
Command="{Binding TogglePane}">
@@ 33,24 33,16 @@
</Button>
<TextBlock VerticalAlignment="Center" Grid.Column="1" FontSize="30" Text="Filter"
Margin="5,0,0,0" />
+ <TabStrip Grid.Column="2" VerticalAlignment="Center">
+ <TabStripItem IsSelected="{Binding RecvFilterSelected, Mode = TwoWay}">Recv</TabStripItem>
+ <TabStripItem IsSelected="{Binding SendFilterSelected, Mode = TwoWay}">Send</TabStripItem>
+ </TabStrip>
</Grid>
- <TabControl Grid.Row="1" Margin="0" Padding="0">
- <TabItem>
- <TabItem.Header>
- Recv
- </TabItem.Header>
-
- <ContentControl Content="{Binding RecvFilter}" />
- </TabItem>
- <TabItem>
- <TabItem.Header>
- Send
- </TabItem.Header>
-
- <ContentControl Content="{Binding SendFilter}" />
- </TabItem>
- </TabControl>
+ <Panel Grid.Row="1" Margin="0,5,0,0">
+ <ContentControl IsVisible="{Binding RecvFilterSelected}" Content="{Binding RecvFilter}"></ContentControl>
+ <ContentControl IsVisible="{Binding SendFilterSelected}" Content="{Binding SendFilter}"></ContentControl>
+ </Panel>
</Grid>
<Grid Grid.Row="1" RowDefinitions="40,40" ColumnDefinitions="140,140">
@@ 70,8 62,10 @@
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
- <TextBlock Width="90" Text="{Binding Date, StringFormat = {}{0:HH:mm:ss}}" />
- <TextBlock Width="85" Text="{Binding Source, Converter = {StaticResource packetSourceConverter}}"></TextBlock>
+ <TextBlock Width="80" Text="{Binding Date, StringFormat = {}{0:HH:mm:ss}}" />
+ <TextBlock Width="50"
+ Text="{Binding Source, Converter = {StaticResource packetSourceConverter}}">
+ </TextBlock>
<Border Margin="5,0,0,0" ToolTip.Tip="{Binding PacketString}">
<TextBlock VerticalAlignment="Center" Text="{Binding PacketString}"
TextTrimming="CharacterEllipsis">
M src/PacketLogger/Views/PacketSendSubView.axaml => src/PacketLogger/Views/PacketSendSubView.axaml +5 -7
@@ 14,15 14,13 @@
</Design.DataContext>
<DockPanel>
- <StackPanel DockPanel.Dock="Right" Width="150">
+ <StackPanel Margin="0, 5, 0, 0" DockPanel.Dock="Bottom" Orientation="Horizontal" VerticalAlignment="Center">
<Button Content="{Binding Source, Converter= {StaticResource packetSourceConverter}}"
Command="{Binding SendPackets}" />
- <TextBlock Text="Repeat delay" />
- <StackPanel>
- <NumericUpDown Value="{Binding RepetitionDelay}" />
- <TextBlock Text="ms" />
- </StackPanel>
- <Button Command="{Binding ToggleRepetetiveSend}">
+ <TextBlock Margin="20, 0,0 ,0" VerticalAlignment="Center" Text="Repeat" />
+ <NumericUpDown Minimum="1" Margin="10,0,0,0" Value="{Binding RepetitionDelay}" IsEnabled="{Binding !IsSending}" />
+ <TextBlock Margin="5,0,0,0" VerticalAlignment="Center" Text="ms" />
+ <Button Margin="10,0,0,0" Command="{Binding ToggleRepetetiveSend}">
<Grid>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="Start" IsVisible="{Binding !IsSending}" />
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="Stop" IsVisible="{Binding IsSending}" />
M src/PacketLogger/Views/PacketSenderView.axaml => src/PacketLogger/Views/PacketSenderView.axaml +6 -6
@@ 8,10 8,10 @@
<Design.DataContext>
<viewModels:PacketSenderViewModel />
</Design.DataContext>
- <StackPanel Orientation="Vertical" Margin="10">
- <TextBlock Text="Recv" Margin="0,0,0,5" />
- <ContentControl Content="{Binding RecvSubViewModel}" />
- <TextBlock Text="Send" Margin="0,5,0,5" />
- <ContentControl Content="{Binding SendSubViewModel}" />
- </StackPanel>
+ <Grid RowDefinitions="15,*,15,*" Margin="10">
+ <TextBlock Grid.Row="0" Text="Recv" Margin="0,0,0,5" />
+ <ContentControl Grid.Row="1" Content="{Binding RecvSubViewModel}" />
+ <TextBlock Grid.Row="2" Text="Send" Margin="0,5,0,5" />
+ <ContentControl Grid.Row="3" Content="{Binding SendSubViewModel}" />
+ </Grid>
</UserControl>=
\ No newline at end of file