Device dialog - Recreate tabs on device reload

This commit is contained in:
Robert committed 2022-08-21 20:15:43 +02:00
1 parent 563389cab6
commit 212d13c1c8
3 files changed
+86 -19

No files matched your search

@@ -21,6 +21,7 @@ public class SurfaceEditorViewModel : MainScreenViewModel
private readonly IDeviceService _deviceService;
private readonly IDeviceVmFactory _deviceVmFactory;
private readonly IRgbService _rgbService;
private readonly ISurfaceVmFactory _surfaceVmFactory;
private readonly ISettingsService _settingsService;
private readonly IWindowService _windowService;
private bool _colorDevices;
@@ -39,6 +40,7 @@ public class SurfaceEditorViewModel : MainScreenViewModel
IDeviceService deviceService) : base(hostScreen, "surface-editor")
{
_rgbService = rgbService;
_surfaceVmFactory = surfaceVmFactory;
_settingsService = settingsService;
_deviceVmFactory = deviceVmFactory;
_windowService = windowService;
@@ -59,10 +61,38 @@ public class SurfaceEditorViewModel : MainScreenViewModel
this.WhenActivated(d =>
{
coreService.FrameRendering += CoreServiceOnFrameRendering;
Disposable.Create(() => coreService.FrameRendering -= CoreServiceOnFrameRendering).DisposeWith(d);
_rgbService.DeviceAdded += RgbServiceOnDeviceAdded;
_rgbService.DeviceRemoved += RgbServiceOnDeviceRemoved;
Disposable.Create(() =>
{
coreService.FrameRendering -= CoreServiceOnFrameRendering;
_rgbService.DeviceAdded -= RgbServiceOnDeviceAdded;
_rgbService.DeviceRemoved -= RgbServiceOnDeviceRemoved;
}).DisposeWith(d);
});
}
private void RgbServiceOnDeviceAdded(object? sender, DeviceEventArgs e)
{
if (!e.Device.IsEnabled)
return;
SurfaceDeviceViewModels.Add(_surfaceVmFactory.SurfaceDeviceViewModel(e.Device, this));
ListDeviceViewModels.Add(_surfaceVmFactory.ListDeviceViewModel(e.Device, this));
SurfaceDeviceViewModels.Sort(l => l.Device.ZIndex * -1);
ListDeviceViewModels.Sort(l => l.Device.ZIndex * -1);
}
private void RgbServiceOnDeviceRemoved(object? sender, DeviceEventArgs e)
{
SurfaceDeviceViewModel? surfaceVm = SurfaceDeviceViewModels.FirstOrDefault(vm => vm.Device == e.Device);
ListDeviceViewModel? listVm = ListDeviceViewModels.FirstOrDefault(vm => vm.Device == e.Device);
if (surfaceVm != null)
SurfaceDeviceViewModels.Remove(surfaceVm);
if (listVm != null)
ListDeviceViewModels.Remove(listVm);
}
public bool ColorDevices
{
get => _colorDevices;