From b8fbb3fa240eb9c099691da4b85f594f1f2eaf58 Mon Sep 17 00:00:00 2001 From: SpoinkyNL Date: Mon, 25 Nov 2019 23:07:20 +0100 Subject: [PATCH] Added LED selection --- .../Visualization/ProfileLedView.xaml | 62 +++++++++++++++++++ .../Visualization/ProfileLedViewModel.cs | 2 + .../Visualization/ProfileView.xaml | 3 +- .../Visualization/ProfileViewModel.cs | 38 +++++++++--- .../SurfaceEditor/SurfaceEditorViewModel.cs | 19 +++--- .../Visualization/SurfaceDeviceView.xaml | 9 +-- 6 files changed, 105 insertions(+), 28 deletions(-) diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLedView.xaml b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLedView.xaml index 33dc4a283..bc6affc51 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLedView.xaml +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLedView.xaml @@ -5,6 +5,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:converters="clr-namespace:Artemis.UI.Converters" xmlns:visualization="clr-namespace:Artemis.UI.Screens.Module.ProfileEditor.Visualization" + xmlns:surfaceEditor="clr-namespace:Artemis.UI.Screens.SurfaceEditor.Visualization" x:Class="Artemis.UI.Screens.Module.ProfileEditor.Visualization.ProfileLedView" mc:Ignorable="d" d:DataContext="{d:DesignInstance {x:Type visualization:ProfileLedViewModel}}" @@ -28,5 +29,66 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLedViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLedViewModel.cs index 3d1ba1784..5e9e899d8 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLedViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileLedViewModel.cs @@ -2,6 +2,7 @@ using System.Windows; using System.Windows.Media; using Artemis.UI.Extensions; +using Artemis.UI.Screens.SurfaceEditor.Visualization; using RGB.NET.Core; using Stylet; using Color = System.Windows.Media.Color; @@ -24,6 +25,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization } public Led Led { get; } + public SelectionStatus SelectionStatus { get; set; } public double X { get; } public double Y { get; } diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileView.xaml b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileView.xaml index 666120615..01fcff67b 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileView.xaml +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileView.xaml @@ -41,7 +41,8 @@ MouseWheel="{s:Action EditorGridMouseWheel}" MouseUp="{s:Action EditorGridMouseClick}" MouseDown="{s:Action EditorGridMouseClick}" - MouseMove="{s:Action EditorGridMouseMove}"> + MouseMove="{s:Action EditorGridMouseMove}" + Cursor="{Binding Cursor}"> diff --git a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileViewModel.cs b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileViewModel.cs index 3b80fea85..cde95d642 100644 --- a/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileViewModel.cs +++ b/src/Artemis.UI/Screens/Module/ProfileEditor/Visualization/ProfileViewModel.cs @@ -8,8 +8,10 @@ using Artemis.Core.Events; using Artemis.Core.Models.Surface; using Artemis.Core.Services; using Artemis.Core.Services.Storage.Interfaces; +using Artemis.UI.Extensions; using Artemis.UI.Screens.Shared; using Artemis.UI.Screens.SurfaceEditor; +using Artemis.UI.Screens.SurfaceEditor.Visualization; using RGB.NET.Core; using Stylet; using Point = System.Windows.Point; @@ -28,6 +30,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization SelectionRectangle = new RectangleGeometry(); PanZoomViewModel = new PanZoomViewModel(); }); + Cursor = null; ApplySurfaceConfiguration(surfaceService.ActiveSurface); @@ -45,6 +48,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization public ObservableCollection Devices { get; set; } public RectangleGeometry SelectionRectangle { get; set; } public PanZoomViewModel PanZoomViewModel { get; set; } + public Cursor Cursor { get; set; } private void OnActiveSurfaceConfigurationChanged(object sender, SurfaceConfigurationEventArgs e) { @@ -158,9 +162,17 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization private void StopMouseDrag(Point position) { var selectedRect = new Rect(_mouseDragStartPoint, position); - // TODO: Select LEDs - - Mouse.OverrideCursor = null; + foreach (var device in Devices) + { + foreach (var profileLedViewModel in device.Leds) + { + if (PanZoomViewModel.TransformContainingRect(profileLedViewModel.Led.AbsoluteLedRectangle.ToWindowsRect(1)).IntersectsWith(selectedRect)) + profileLedViewModel.SelectionStatus = SelectionStatus.Selected; + else if (!Keyboard.IsKeyDown(Key.LeftShift) && !Keyboard.IsKeyDown(Key.RightShift)) + profileLedViewModel.SelectionStatus = SelectionStatus.None; + } + } + _mouseDragStatus = MouseDragStatus.None; } @@ -168,13 +180,19 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization { if (IsPanKeyDown()) return; + + var selectedRect = new Rect(_mouseDragStartPoint, position); + SelectionRectangle.Rect = selectedRect; - lock (Devices) + foreach (var device in Devices) { - var selectedRect = new Rect(_mouseDragStartPoint, position); - SelectionRectangle.Rect = selectedRect; - - // TODO: Highlight LEDs + foreach (var profileLedViewModel in device.Leds) + { + if (PanZoomViewModel.TransformContainingRect(profileLedViewModel.Led.AbsoluteLedRectangle.ToWindowsRect(1)).IntersectsWith(selectedRect)) + profileLedViewModel.SelectionStatus = SelectionStatus.Selected; + else if (!Keyboard.IsKeyDown(Key.LeftShift) && !Keyboard.IsKeyDown(Key.RightShift)) + profileLedViewModel.SelectionStatus = SelectionStatus.None; + } } } @@ -190,13 +208,13 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization public void EditorGridKeyDown(object sender, KeyEventArgs e) { if ((e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl) && e.IsDown) - Mouse.OverrideCursor = Cursors.ScrollAll; + Cursor = Cursors.ScrollAll; } public void EditorGridKeyUp(object sender, KeyEventArgs e) { if ((e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl) && e.IsUp) - Mouse.OverrideCursor = null; + Cursor = null; } public void Pan(object sender, MouseEventArgs e) diff --git a/src/Artemis.UI/Screens/SurfaceEditor/SurfaceEditorViewModel.cs b/src/Artemis.UI/Screens/SurfaceEditor/SurfaceEditorViewModel.cs index 53433b4de..06c366762 100644 --- a/src/Artemis.UI/Screens/SurfaceEditor/SurfaceEditorViewModel.cs +++ b/src/Artemis.UI/Screens/SurfaceEditor/SurfaceEditorViewModel.cs @@ -332,19 +332,16 @@ namespace Artemis.UI.Screens.SurfaceEditor { if (IsPanKeyDown()) return; + + var selectedRect = new Rect(_mouseDragStartPoint, position); + SelectionRectangle.Rect = selectedRect; - lock (Devices) + foreach (var device in Devices) { - var selectedRect = new Rect(_mouseDragStartPoint, position); - SelectionRectangle.Rect = selectedRect; - - foreach (var device in Devices) - { - if (PanZoomViewModel.TransformContainingRect(device.DeviceRectangle).IntersectsWith(selectedRect)) - device.SelectionStatus = SelectionStatus.Selected; - else if (!Keyboard.IsKeyDown(Key.LeftShift) && !Keyboard.IsKeyDown(Key.RightShift)) - device.SelectionStatus = SelectionStatus.None; - } + if (PanZoomViewModel.TransformContainingRect(device.DeviceRectangle).IntersectsWith(selectedRect)) + device.SelectionStatus = SelectionStatus.Selected; + else if (!Keyboard.IsKeyDown(Key.LeftShift) && !Keyboard.IsKeyDown(Key.RightShift)) + device.SelectionStatus = SelectionStatus.None; } } diff --git a/src/Artemis.UI/Screens/SurfaceEditor/Visualization/SurfaceDeviceView.xaml b/src/Artemis.UI/Screens/SurfaceEditor/Visualization/SurfaceDeviceView.xaml index 72d4f800d..14acc7038 100644 --- a/src/Artemis.UI/Screens/SurfaceEditor/Visualization/SurfaceDeviceView.xaml +++ b/src/Artemis.UI/Screens/SurfaceEditor/Visualization/SurfaceDeviceView.xaml @@ -71,8 +71,7 @@