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

@@ -37,7 +37,7 @@
ShowColors="True"
Margin="20"
LedClicked="DeviceVisualizer_OnLedClicked"
Clicked="DeviceVisualizer_OnClicked"/>
Clicked="DeviceVisualizer_OnClicked" />
<StackPanel Orientation="Horizontal"
VerticalAlignment="Bottom"
@@ -53,13 +53,20 @@
<GridSplitter Grid.Column="1" Width="15" Margin="-15 0 0 0" Background="Transparent" HorizontalAlignment="Stretch" />
<Border Grid.Column="2" Classes="card-condensed" CornerRadius="10 0 0 0" Margin="0 10 0 0" Background="#ff323232">
<TabControl Items="{CompiledBinding Tabs}" Padding="12">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{CompiledBinding DisplayName}" />
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
<Panel>
<TabControl Items="{CompiledBinding Tabs}" IsVisible="{CompiledBinding Tabs.Count}" Padding="12">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{CompiledBinding DisplayName}" />
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
<StackPanel IsVisible="{CompiledBinding !Tabs.Count}" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock TextAlignment="Center">Waiting for device...</TextBlock>
<ProgressBar IsIndeterminate="True" Margin="0 15 0 0"></ProgressBar>
</StackPanel>
</Panel>
</Border>
<StackPanel Grid.Column="0" Grid.ColumnSpan="3" Classes="notification-container" Name="NotificationContainer" VerticalAlignment="Bottom" HorizontalAlignment="Right" />
@@ -14,20 +14,22 @@ namespace Artemis.UI.Screens.Device;
public class DevicePropertiesViewModel : DialogViewModelBase<object>
{
public DevicePropertiesViewModel(ArtemisDevice device, ICoreService coreService, IDeviceVmFactory deviceVmFactory)
private readonly IDeviceVmFactory _deviceVmFactory;
private ArtemisDevice _device;
public DevicePropertiesViewModel(ArtemisDevice device, ICoreService coreService, IRgbService rgbService, IDeviceVmFactory deviceVmFactory)
{
Device = device;
_deviceVmFactory = deviceVmFactory;
_device = device;
SelectedLeds = new ObservableCollection<ArtemisLed>();
Tabs = new ObservableCollection<ActivatableViewModelBase>();
Tabs.Add(deviceVmFactory.DevicePropertiesTabViewModel(device));
Tabs.Add(deviceVmFactory.DeviceInfoTabViewModel(device));
if (Device.DeviceType == RGBDeviceType.Keyboard)
Tabs.Add(deviceVmFactory.InputMappingsTabViewModel(device, SelectedLeds));
Tabs.Add(deviceVmFactory.DeviceLedsTabViewModel(device, SelectedLeds));
AddTabs();
this.WhenActivated(d =>
{
rgbService.DeviceAdded += RgbServiceOnDeviceAdded;
rgbService.DeviceRemoved += RgbServiceOnDeviceRemoved;
coreService.FrameRendering += CoreServiceOnFrameRendering;
Disposable.Create(() => coreService.FrameRendering -= CoreServiceOnFrameRendering).DisposeWith(d);
});
@@ -35,12 +37,40 @@ public class DevicePropertiesViewModel : DialogViewModelBase<object>
ClearSelectedLeds = ReactiveCommand.Create(ExecuteClearSelectedLeds);
}
public ArtemisDevice Device { get; }
private void RgbServiceOnDeviceAdded(object? sender, DeviceEventArgs e)
{
if (e.Device.Identifier != Device.Identifier || Device == e.Device)
return;
Device = e.Device;
AddTabs();
}
private void RgbServiceOnDeviceRemoved(object? sender, DeviceEventArgs e)
{
Tabs.Clear();
SelectedLeds.Clear();
}
public ArtemisDevice Device
{
get => _device;
set => RaiseAndSetIfChanged(ref _device, value);
}
public ObservableCollection<ArtemisLed> SelectedLeds { get; }
public ObservableCollection<ActivatableViewModelBase> Tabs { get; }
public ReactiveCommand<Unit, Unit> ClearSelectedLeds { get; }
private void AddTabs()
{
Tabs.Add(_deviceVmFactory.DevicePropertiesTabViewModel(Device));
Tabs.Add(_deviceVmFactory.DeviceInfoTabViewModel(Device));
if (Device.DeviceType == RGBDeviceType.Keyboard)
Tabs.Add(_deviceVmFactory.InputMappingsTabViewModel(Device, SelectedLeds));
Tabs.Add(_deviceVmFactory.DeviceLedsTabViewModel(Device, SelectedLeds));
}
private void ExecuteClearSelectedLeds()
{
SelectedLeds.Clear();