diff --git a/src/Artemis.UI/Screens/SurfaceEditor/SurfaceEditorView.xaml b/src/Artemis.UI/Screens/SurfaceEditor/SurfaceEditorView.xaml
index e39aa93bb..6cbafa329 100644
--- a/src/Artemis.UI/Screens/SurfaceEditor/SurfaceEditorView.xaml
+++ b/src/Artemis.UI/Screens/SurfaceEditor/SurfaceEditorView.xaml
@@ -234,81 +234,67 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Artemis.UI/Screens/SurfaceEditor/SurfaceEditorViewModel.cs b/src/Artemis.UI/Screens/SurfaceEditor/SurfaceEditorViewModel.cs
index 714002c0d..8210be706 100644
--- a/src/Artemis.UI/Screens/SurfaceEditor/SurfaceEditorViewModel.cs
+++ b/src/Artemis.UI/Screens/SurfaceEditor/SurfaceEditorViewModel.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
@@ -24,17 +23,16 @@ namespace Artemis.UI.Screens.SurfaceEditor
{
public class SurfaceEditorViewModel : Screen, IMainScreenViewModel
{
- private readonly IDeviceService _deviceService;
- private readonly IInputService _inputService;
- private readonly IDialogService _dialogService;
- private readonly IRgbService _rgbService;
private readonly ICoreService _coreService;
+ private readonly IDeviceService _deviceService;
+ private readonly IDialogService _dialogService;
+ private readonly IInputService _inputService;
+ private readonly IRgbService _rgbService;
private readonly ISettingsService _settingsService;
private Cursor _cursor;
private PanZoomViewModel _panZoomViewModel;
private RectangleGeometry _selectionRectangle;
private PluginSetting _surfaceListWidth;
- private List _shuffledDevices;
public SurfaceEditorViewModel(IRgbService rgbService,
ICoreService coreService,
@@ -113,17 +111,9 @@ namespace Artemis.UI.Screens.SurfaceEditor
private void CoreServiceOnFrameRendering(object sender, FrameRenderingEventArgs e)
{
- float amount = 360f / _shuffledDevices.Count;
- for (int i = 0; i < _shuffledDevices.Count; i++)
- {
- ArtemisDevice rgbServiceDevice = _shuffledDevices[i];
- foreach (ArtemisLed artemisLed in rgbServiceDevice.Leds)
- {
- SKColor color = SKColor.FromHsv(amount * i, 100, 100);
- e.Canvas.DrawRect(artemisLed.AbsoluteRectangle, new SKPaint(){Color = color});
- }
- }
-
+ foreach (ListDeviceViewModel listDeviceViewModel in ListDeviceViewModels)
+ foreach (ArtemisLed artemisLed in listDeviceViewModel.Device.Leds)
+ e.Canvas.DrawRect(artemisLed.AbsoluteRectangle, new SKPaint {Color = listDeviceViewModel.Color});
}
#region Overrides of Screen
@@ -133,7 +123,15 @@ namespace Artemis.UI.Screens.SurfaceEditor
LoadWorkspaceSettings();
SurfaceDeviceViewModels.AddRange(_rgbService.EnabledDevices.OrderBy(d => d.ZIndex).Select(d => new SurfaceDeviceViewModel(d, _rgbService)));
ListDeviceViewModels.AddRange(_rgbService.EnabledDevices.OrderBy(d => d.ZIndex * -1).Select(d => new ListDeviceViewModel(d)));
- _shuffledDevices = _rgbService.EnabledDevices.OrderBy(d => Guid.NewGuid()).ToList();
+
+ List shuffledDevices = _rgbService.EnabledDevices.OrderBy(d => Guid.NewGuid()).ToList();
+ float amount = 360f / shuffledDevices.Count;
+ for (int i = 0; i < shuffledDevices.Count; i++)
+ {
+ ArtemisDevice rgbServiceDevice = shuffledDevices[i];
+ ListDeviceViewModel vm = ListDeviceViewModels.First(l => l.Device == rgbServiceDevice);
+ vm.Color = SKColor.FromHsv(amount * i, 100, 100);
+ }
_coreService.FrameRendering += CoreServiceOnFrameRendering;
@@ -169,6 +167,7 @@ namespace Artemis.UI.Screens.SurfaceEditor
SurfaceDeviceViewModel deviceViewModel = SurfaceDeviceViewModels[i];
deviceViewModel.Device.ZIndex = i + 1;
}
+
ListDeviceViewModels.Sort(l => l.Device.ZIndex * -1);
_rgbService.SaveDevices();
@@ -186,6 +185,7 @@ namespace Artemis.UI.Screens.SurfaceEditor
SurfaceDeviceViewModel deviceViewModel = SurfaceDeviceViewModels[i];
deviceViewModel.Device.ZIndex = i + 1;
}
+
ListDeviceViewModels.Sort(l => l.Device.ZIndex * -1);
_rgbService.SaveDevices();
@@ -200,6 +200,7 @@ namespace Artemis.UI.Screens.SurfaceEditor
SurfaceDeviceViewModel deviceViewModel = SurfaceDeviceViewModels[i];
deviceViewModel.Device.ZIndex = i + 1;
}
+
ListDeviceViewModels.Sort(l => l.Device.ZIndex * -1);
_rgbService.SaveDevices();
@@ -216,6 +217,7 @@ namespace Artemis.UI.Screens.SurfaceEditor
SurfaceDeviceViewModel deviceViewModel = SurfaceDeviceViewModels[i];
deviceViewModel.Device.ZIndex = i + 1;
}
+
ListDeviceViewModels.Sort(l => l.Device.ZIndex * -1);
_rgbService.SaveDevices();
@@ -299,10 +301,8 @@ namespace Artemis.UI.Screens.SurfaceEditor
if (device.SelectionStatus != SelectionStatus.Selected)
{
if (!Keyboard.IsKeyDown(Key.LeftShift) && !Keyboard.IsKeyDown(Key.RightShift))
- {
foreach (SurfaceDeviceViewModel others in SurfaceDeviceViewModels)
others.SelectionStatus = SelectionStatus.None;
- }
device.SelectionStatus = SelectionStatus.Selected;
}
@@ -329,12 +329,10 @@ namespace Artemis.UI.Screens.SurfaceEditor
RectangleGeometry selectedRect = new(new Rect(_mouseDragStartPoint, position));
List devices = HitTestUtilities.GetHitViewModels((Visual) sender, selectedRect);
foreach (SurfaceDeviceViewModel device in SurfaceDeviceViewModels)
- {
if (devices.Contains(device))
device.SelectionStatus = SelectionStatus.Selected;
else if (!Keyboard.IsKeyDown(Key.LeftShift) && !Keyboard.IsKeyDown(Key.RightShift))
device.SelectionStatus = SelectionStatus.None;
- }
}
else
{
@@ -356,12 +354,10 @@ namespace Artemis.UI.Screens.SurfaceEditor
List devices = HitTestUtilities.GetHitViewModels((Visual) sender, SelectionRectangle);
foreach (SurfaceDeviceViewModel device in SurfaceDeviceViewModels)
- {
if (devices.Contains(device))
device.SelectionStatus = SelectionStatus.Selected;
else if (!Keyboard.IsKeyDown(Key.LeftShift) && !Keyboard.IsKeyDown(Key.RightShift))
device.SelectionStatus = SelectionStatus.None;
- }
ApplySurfaceSelection();
}
diff --git a/src/Artemis.UI/Screens/SurfaceEditor/Visualization/ListDeviceView.xaml b/src/Artemis.UI/Screens/SurfaceEditor/Visualization/ListDeviceView.xaml
index 97a252739..195b138f1 100644
--- a/src/Artemis.UI/Screens/SurfaceEditor/Visualization/ListDeviceView.xaml
+++ b/src/Artemis.UI/Screens/SurfaceEditor/Visualization/ListDeviceView.xaml
@@ -8,16 +8,24 @@
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
d:DataContext="{d:DesignInstance {x:Type local:ListDeviceViewModel}}">
+
+
+
+
-
+
-
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Artemis.UI/Screens/SurfaceEditor/Visualization/ListDeviceViewModel.cs b/src/Artemis.UI/Screens/SurfaceEditor/Visualization/ListDeviceViewModel.cs
index 5ae192cd5..d7c6e4b88 100644
--- a/src/Artemis.UI/Screens/SurfaceEditor/Visualization/ListDeviceViewModel.cs
+++ b/src/Artemis.UI/Screens/SurfaceEditor/Visualization/ListDeviceViewModel.cs
@@ -1,4 +1,5 @@
using Artemis.Core;
+using SkiaSharp;
using Stylet;
namespace Artemis.UI.Screens.SurfaceEditor.Visualization
@@ -6,6 +7,7 @@ namespace Artemis.UI.Screens.SurfaceEditor.Visualization
public class ListDeviceViewModel : PropertyChangedBase
{
private bool _isSelected;
+ private SKColor _color;
public ArtemisDevice Device { get; }
public bool IsSelected
@@ -14,6 +16,12 @@ namespace Artemis.UI.Screens.SurfaceEditor.Visualization
set => SetAndNotify(ref _isSelected, value);
}
+ public SKColor Color
+ {
+ get => _color;
+ set => SetAndNotify(ref _color, value);
+ }
+
public ListDeviceViewModel(ArtemisDevice device)
{
Device = device;