From a209a7d23c97827d5ca332afc19dec7a1434aab4 Mon Sep 17 00:00:00 2001 From: Mutex666 <67550369+Mutex666@users.noreply.github.com> Date: Fri, 1 Dec 2023 14:48:42 +0100 Subject: [PATCH] More changes --- .../StreamDeck/UserControlStreamDeckUIBase.cs | 4 +- .../StreamDeckUserControl.xaml.cs | 4 +- .../StreamDeck/Events/SDEventHandler.cs | 8 +- .../StreamDeck/Panels/StreamDeckPanel.cs | 10 ++ .../Panels/StreamDeck/StreamDeckLayer.cs | 91 ++++++++++++++++++- .../StreamDeck/StreamDeckLayerHandler.cs | 8 +- 6 files changed, 114 insertions(+), 11 deletions(-) diff --git a/Source/DCSFlightpanels/PanelUserControls/StreamDeck/UserControlStreamDeckUIBase.cs b/Source/DCSFlightpanels/PanelUserControls/StreamDeck/UserControlStreamDeckUIBase.cs index e75cbb828..dbbb695a3 100644 --- a/Source/DCSFlightpanels/PanelUserControls/StreamDeck/UserControlStreamDeckUIBase.cs +++ b/Source/DCSFlightpanels/PanelUserControls/StreamDeck/UserControlStreamDeckUIBase.cs @@ -123,12 +123,12 @@ private void StreamDeckPushRotary_OnMouseUp(object sender, MouseButtonEventArgs SetSelectedPushRotaryUIOnly(pushRotary.StreamDeckPushRotary.StreamDeckPushRotaryName); if (pushRotary.IsSelected) { - // todoxxx StreamDeckPanelInstance.SelectedPushRotaryName = pushRotary.Bill.Button.StreamDeckButtonName; + StreamDeckPanelInstance.SelectedPushRotaryName = pushRotary.StreamDeckPushRotary.StreamDeckPushRotaryName; pushRotary.Focus(); } else { - //todoxxx StreamDeckPanelInstance.SelectedButtonName = EnumStreamDeckButtonNames.BUTTON0_NO_BUTTON; + StreamDeckPanelInstance.SelectedPushRotaryName = EnumStreamDeckPushRotaryNames.PUSHROTARY0_NO_PUSHROTARY; } /*Debug.WriteLine(StreamDeckPanelInstance.GetLayerHandlerInformation()); diff --git a/Source/DCSFlightpanels/PanelUserControls/StreamDeckUserControl.xaml.cs b/Source/DCSFlightpanels/PanelUserControls/StreamDeckUserControl.xaml.cs index e83cc0500..c5e457c0f 100644 --- a/Source/DCSFlightpanels/PanelUserControls/StreamDeckUserControl.xaml.cs +++ b/Source/DCSFlightpanels/PanelUserControls/StreamDeckUserControl.xaml.cs @@ -446,7 +446,7 @@ private void ButtonCancelAction_OnClick(object sender, RoutedEventArgs e) try { SDEventHandler.ClearSettings(this, true, false, false, _streamDeckPanel.BindingHash); - SDEventHandler.SelectedButtonChanged(this, _streamDeckPanel.SelectedButton, _streamDeckPanel.BindingHash); + SDEventHandler.SelectedButtonChanged(this, _streamDeckPanel.SelectedButton, _streamDeckPanel.SelectedPushRotary, _streamDeckPanel.BindingHash); SDEventHandler.NotifyToSyncConfiguration(this, _streamDeckPanel.BindingHash); SetFormState(); } @@ -490,7 +490,7 @@ private void ButtonCancelFace_OnClick(object sender, RoutedEventArgs e) try { SDEventHandler.ClearSettings(this, false, true, false, _streamDeckPanel.BindingHash); - SDEventHandler.SelectedButtonChanged(this, _streamDeckPanel.SelectedButton, _streamDeckPanel.BindingHash); + SDEventHandler.SelectedButtonChanged(this, _streamDeckPanel.SelectedButton, _streamDeckPanel.SelectedPushRotary, _streamDeckPanel.BindingHash); SDEventHandler.NotifyToSyncConfiguration(this, _streamDeckPanel.BindingHash); _streamDeckPanel.SelectedButton.ClearFace(); SetFormState(); diff --git a/Source/NonVisuals/Panels/StreamDeck/Events/SDEventHandler.cs b/Source/NonVisuals/Panels/StreamDeck/Events/SDEventHandler.cs index baf0c6ef9..ef4ad7d34 100644 --- a/Source/NonVisuals/Panels/StreamDeck/Events/SDEventHandler.cs +++ b/Source/NonVisuals/Panels/StreamDeck/Events/SDEventHandler.cs @@ -189,9 +189,13 @@ public static bool OnStreamDeckSelectedButtonChangedEventSubscribed() return OnStreamDeckSelectedButtonChangedEventHandler != null && OnStreamDeckSelectedButtonChangedEventHandler.GetInvocationList().Length > 0; } - public static void SelectedButtonChanged(object sender, StreamDeckButton streamDeckButton, string bindingHash) + public static void SelectedButtonChanged(object sender, StreamDeckButton streamDeckButton, StreamDeckPushRotary streamDeckPushRotary, string bindingHash) { - var eventArgs = new StreamDeckSelectedButtonChangedArgs { SelectedButton = streamDeckButton, BindingHash = bindingHash }; + var eventArgs = new StreamDeckSelectedButtonChangedArgs { + SelectedButton = streamDeckButton, + SelectedPushRotary = streamDeckPushRotary, + BindingHash = bindingHash + }; OnStreamDeckSelectedButtonChangedEventHandler?.Invoke(sender, eventArgs); } diff --git a/Source/NonVisuals/Panels/StreamDeck/Panels/StreamDeckPanel.cs b/Source/NonVisuals/Panels/StreamDeck/Panels/StreamDeckPanel.cs index fcf384ac7..8d85d22bc 100644 --- a/Source/NonVisuals/Panels/StreamDeck/Panels/StreamDeckPanel.cs +++ b/Source/NonVisuals/Panels/StreamDeck/Panels/StreamDeckPanel.cs @@ -67,12 +67,22 @@ public EnumStreamDeckButtonNames SelectedButtonName get => _streamDeckLayerHandler.SelectedButtonName; set => _streamDeckLayerHandler.SelectedButtonName = value; } + public EnumStreamDeckPushRotaryNames SelectedPushRotaryName + { + get => _streamDeckLayerHandler.SelectedPushRotaryName; + set => _streamDeckLayerHandler.SelectedPushRotaryName = value; + } public StreamDeckButton SelectedButton { get => SelectedLayer.GetStreamDeckButton(SelectedButtonName); } + public StreamDeckPushRotary SelectedPushRotary + { + get => SelectedLayer.GetStreamDeckPushRotary(SelectedPushRotaryName); + } + public StreamDeckPanel(GamingPanelEnum panelType, HIDSkeleton hidSkeleton, bool unitTesting = false) : base(panelType, hidSkeleton) { _unitTesting = unitTesting; diff --git a/Source/NonVisuals/Panels/StreamDeck/StreamDeckLayer.cs b/Source/NonVisuals/Panels/StreamDeck/StreamDeckLayer.cs index ef0263b25..40df249ad 100644 --- a/Source/NonVisuals/Panels/StreamDeck/StreamDeckLayer.cs +++ b/Source/NonVisuals/Panels/StreamDeck/StreamDeckLayer.cs @@ -21,7 +21,8 @@ public class StreamDeckLayer : IDisposable [JsonProperty("Name", Required = Required.Default)] public string Name { get; set; } = string.Empty; - public List StreamDeckButtons { get; set; } = new List(); + public List StreamDeckButtons { get; set; } = new(); + public List StreamDeckPushRotaries { get; set; } = new(); [JsonIgnore] public bool IsVisible @@ -80,6 +81,10 @@ public void Dispose() { streamDeckButton?.Dispose(); } + foreach (var streamDeckPushRotary in StreamDeckPushRotaries) + { + streamDeckPushRotary?.Dispose(); + } GC.SuppressFinalize(this); } @@ -174,7 +179,31 @@ public void AddButton(StreamDeckButton streamDeckButton, bool silently = false) NotifyChanges(); } } + public void AddPushRotary(StreamDeckPushRotary streamDeckPushRotary, bool silently = false) + { + streamDeckPushRotary.IsVisible = _isVisible; + + var found = false; + foreach (var pushRotary in StreamDeckPushRotaries) + { + if (pushRotary.StreamDeckPushRotaryName == streamDeckPushRotary.StreamDeckPushRotaryName) + { + pushRotary.Consume(streamDeckPushRotary); + found = true; + break; + } + } + + if (!found) + { + StreamDeckPushRotaries.Add(streamDeckPushRotary); + } + if (!silently) + { + NotifyChanges(); + } + } public void RemoveButton(StreamDeckButton streamDeckButton) { @@ -183,6 +212,12 @@ public void RemoveButton(StreamDeckButton streamDeckButton) _streamDeckPanel.ClearFace(streamDeckButton.StreamDeckButtonName); NotifyChanges(); } + public void RemovePushRotary(StreamDeckPushRotary streamDeckPushRotary) + { + streamDeckPushRotary.Dispose(); + StreamDeckPushRotaries.Remove(streamDeckPushRotary); + NotifyChanges(); + } public void RemoveButtons(bool sendNotification) { @@ -196,16 +231,36 @@ public void RemoveButtons(bool sendNotification) } } + public void RemovePushRotaries(bool sendNotification) + { + StreamDeckPushRotaries.ForEach(pushRotary => pushRotary.Dispose()); + + StreamDeckPushRotaries.RemoveAll(o => o != null); + + if (sendNotification) + { + NotifyChanges(); + } + } + public void RemoveEmptyButtons() { foreach (var streamDeckButton in StreamDeckButtons.Where(o => o.HasConfig == false)) { streamDeckButton.Dispose(); } - StreamDeckButtons.RemoveAll(o => !o.HasConfig); } + public void RemoveEmptyPushRotaries() + { + foreach (var streamDeckPushRotary in StreamDeckPushRotaries.Where(o => o.HasConfig == false)) + { + streamDeckPushRotary.Dispose(); + } + StreamDeckPushRotaries.RemoveAll(o => !o.HasConfig); + } + public List GetButtonsWithConfig() { return StreamDeckButtons.Where(o => o.HasConfig).ToList(); @@ -226,11 +281,31 @@ public StreamDeckButton GetStreamDeckButton(EnumStreamDeckButtonNames streamDeck return newButton; } + public StreamDeckPushRotary GetStreamDeckPushRotary(EnumStreamDeckPushRotaryNames streamDeckPushRotaryName) + { + foreach (var streamDeckpushRotary in StreamDeckPushRotaries) + { + if (streamDeckpushRotary.StreamDeckPushRotaryName == streamDeckPushRotaryName) + { + return streamDeckpushRotary; + } + } + + var newPushRotary = new StreamDeckPushRotary(streamDeckPushRotaryName, _streamDeckPanel); + StreamDeckPushRotaries.Add(newPushRotary); + return newPushRotary; + } + public bool ContainStreamDeckButton(EnumStreamDeckButtonNames streamDeckButtonName) { return StreamDeckButtons.Exists(x => x.StreamDeckButtonName == streamDeckButtonName); } + public bool ContainsPushRotary(EnumStreamDeckPushRotaryNames streamDeckPushRotaryName) + { + return StreamDeckPushRotaries.Exists(x => x.StreamDeckPushRotaryName == streamDeckPushRotaryName); + } + public StreamDeckButton GetStreamDeckButtonName(EnumStreamDeckButtonNames streamDeckButtonName) { foreach (var streamDeckButton in StreamDeckButtons) @@ -240,10 +315,20 @@ public StreamDeckButton GetStreamDeckButtonName(EnumStreamDeckButtonNames stream return streamDeckButton; } } - throw new Exception($"StreamDeckLayer [{Name}] does not contain button [{streamDeckButtonName}]."); } + public StreamDeckPushRotary GetStreamDeckPushRotaryName(EnumStreamDeckPushRotaryNames streamDeckPushRotaryName) + { + foreach (var streamDeckPushRotary in StreamDeckPushRotaries) + { + if (streamDeckPushRotary.StreamDeckPushRotaryName == streamDeckPushRotaryName) + { + return streamDeckPushRotary; + } + } + throw new Exception($"StreamDeckLayer [{Name}] does not contain a push rotary button [{streamDeckPushRotaryName}]."); + } } public enum EnumButtonImportMode diff --git a/Source/NonVisuals/Panels/StreamDeck/StreamDeckLayerHandler.cs b/Source/NonVisuals/Panels/StreamDeck/StreamDeckLayerHandler.cs index 3a54a823e..23c9386a3 100644 --- a/Source/NonVisuals/Panels/StreamDeck/StreamDeckLayerHandler.cs +++ b/Source/NonVisuals/Panels/StreamDeck/StreamDeckLayerHandler.cs @@ -117,6 +117,10 @@ public StreamDeckButton SelectedButton { get => SelectedLayer.GetStreamDeckButton(SelectedButtonName); } + public StreamDeckPushRotary SelectedPushRotary + { + get => SelectedLayer.GetStreamDeckPushRotary(SelectedPushRotaryName); + } public List GetLayerNameList() { @@ -420,7 +424,7 @@ public EnumStreamDeckButtonNames SelectedButtonName if (_selectedButtonName != value) { _selectedButtonName = value; - SDEventHandler.SelectedButtonChanged(this, SelectedButton, _streamDeckPanel.BindingHash); + SDEventHandler.SelectedButtonChanged(this, SelectedButton, null, _streamDeckPanel.BindingHash); return; } @@ -435,7 +439,7 @@ public EnumStreamDeckPushRotaryNames SelectedPushRotaryName if (_selectedPushRotaryName != value) { _selectedPushRotaryName = value; - SDEventHandler.SelectedButtonChanged(this, SelectedButton, _streamDeckPanel.BindingHash); + SDEventHandler.SelectedButtonChanged(this, null, SelectedPushRotary, _streamDeckPanel.BindingHash); return; }