~ruther/NosTale-PacketLogger

b497fc3eb964f1bd1d49a58199e179915867f1b0 — Rutherther 2 years ago 4c57d11
feat: make view more compact and user friendly
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

Do not follow this link