M src/PacketLogger/ViewModels/DockFactory.cs => src/PacketLogger/ViewModels/DockFactory.cs +4 -2
@@ 25,7 25,7 @@ namespace PacketLogger.ViewModels;
public class DockFactory : Factory, IDisposable
{
private readonly StatefulRepository _repository;
- private readonly NostaleProcesses _processes = new();
+ private readonly NostaleProcesses _processes;
private readonly CommsInjector _injector;
private IRootDock? _rootDock;
@@ 34,10 34,12 @@ public class DockFactory : Factory, IDisposable
/// <summary>
/// Initializes a new instance of the <see cref="DockFactory"/> class.
/// </summary>
+ /// <param name="processes">The nostale processes.</param>
/// <param name="injector">The communications injector.</param>
/// <param name="repository">The repository.</param>
- public DockFactory(CommsInjector injector, StatefulRepository repository)
+ public DockFactory(NostaleProcesses processes, CommsInjector injector, StatefulRepository repository)
{
+ _processes = processes;
_repository = repository;
_injector = injector;
}
M src/PacketLogger/ViewModels/MainWindowViewModel.cs => src/PacketLogger/ViewModels/MainWindowViewModel.cs +17 -0
@@ 5,6 5,7 @@
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
+using System.Collections;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
@@ 35,6 36,7 @@ namespace PacketLogger.ViewModels;
public class MainWindowViewModel : ViewModelBase, INotifyPropertyChanged
{
private readonly DockFactory _factory;
+ private readonly NostaleProcesses _processes;
/// <summary>
/// Initializes a new instance of the <see cref="MainWindowViewModel"/> class.
@@ 44,6 46,7 @@ public class MainWindowViewModel : ViewModelBase, INotifyPropertyChanged
var services = new ServiceCollection()
.AddLogging(b => b.ClearProviders().AddConsole())
.AddSingleton<DockFactory>()
+ .AddSingleton<NostaleProcesses>()
.AddNostaleCore()
.AddStatefulInjector()
.AddStatefulEntity<CommsPacketProvider>()
@@ 51,6 54,7 @@ public class MainWindowViewModel : ViewModelBase, INotifyPropertyChanged
.AddPacketResponder<PacketResponder>()
.BuildServiceProvider();
+ _processes = services.GetRequiredService<NostaleProcesses>();
var packetTypes = services.GetRequiredService<IPacketTypesRepository>();
var result = packetTypes.AddDefaultPackets();
@@ 141,6 145,9 @@ public class MainWindowViewModel : ViewModelBase, INotifyPropertyChanged
OpenEmpty = ReactiveCommand.Create
(() => _factory.CreateLoadedDocument(doc => doc.OpenDummy.Execute(Unit.Default)));
+ Connect = ReactiveCommand.Create<IList>
+ (process => _factory.CreateLoadedDocument(doc => doc.OpenProcess.Execute((NostaleProcess)process[0]!)));
+
NewTab = ReactiveCommand.Create
(() => _factory.DocumentDock.CreateDocument?.Execute(null));
@@ 149,6 156,11 @@ public class MainWindowViewModel : ViewModelBase, INotifyPropertyChanged
}
/// <summary>
+ /// Gets the nostale processes.
+ /// </summary>
+ public ObservableCollection<NostaleProcess> Processes => _processes.Processes;
+
+ /// <summary>
/// Gets or sets the layout.
/// </summary>
public IRootDock? Layout { get; set; }
@@ 179,6 191,11 @@ public class MainWindowViewModel : ViewModelBase, INotifyPropertyChanged
public ReactiveCommand<Unit, Unit> OpenEmpty { get; }
/// <summary>
+ /// Gets the command that opens empty logger.
+ /// </summary>
+ public ReactiveCommand<IList, Unit> Connect { get; }
+
+ /// <summary>
/// Gets the command that opens a new tab.
/// </summary>
public ReactiveCommand<Unit, Unit> NewTab { get; }
M src/PacketLogger/Views/MainWindow.axaml => src/PacketLogger/Views/MainWindow.axaml +12 -3
@@ 23,6 23,15 @@
<MenuItem Header="_File">
<MenuItem Header="_New Tab" Command="{Binding NewTab}"></MenuItem>
<MenuItem Header="_Open Empty" Command="{Binding OpenEmpty}" />
+ <MenuItem Header="_Connect..." Command="{Binding Connect}" Items="{Binding Processes}">
+ <MenuItem.Styles>
+ <Style Selector="MenuItem">
+ <Setter Property="Header" Value="{Binding CharacterString}" />
+ <Setter Property="Command" Value="{Binding Connect}" />
+ <Setter Property="CommandParameter" Value="{Binding SelectedItems, RelativeSource={RelativeSource Self}}" />
+ </Style>
+ </MenuItem.Styles>
+ </MenuItem>
<MenuItem Header="_Open File..." Command="{Binding OpenFile}" />
<Separator />
<MenuItem Header="_Save Filtered As..." Command="{Binding SaveFiltered}" />
@@ 31,11 40,11 @@
<MenuItem Header="Exit" Command="{Binding QuitApplication}" />
</MenuItem>
<MenuItem Header="_Tools">
- <MenuItem Header="_Packet Sender"/>
- <MenuItem Header="_Packet Analyzer"/>
+ <MenuItem Header="_Packet Sender" />
+ <MenuItem Header="_Packet Analyzer" />
</MenuItem>
</Menu>
-
+
<ExperimentalAcrylicBorder Grid.Row="0" Grid.Column="1" IsHitTestVisible="False">
<ExperimentalAcrylicBorder.Material>
<ExperimentalAcrylicMaterial