diff --git a/src/Artemis.Core/MVVM/CorePropertyChanged.cs b/src/Artemis.Core/MVVM/CorePropertyChanged.cs
index bcd1e0e69..b9bd735e0 100644
--- a/src/Artemis.Core/MVVM/CorePropertyChanged.cs
+++ b/src/Artemis.Core/MVVM/CorePropertyChanged.cs
@@ -28,7 +28,7 @@ namespace Artemis.Core
/// Value to apply.
///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- protected virtual bool RequiresUpdate(ref T storage, T value)
+ protected bool RequiresUpdate(ref T storage, T value)
{
return !Equals(storage, value);
}
@@ -46,7 +46,7 @@ namespace Artemis.Core
///
/// true if the value was changed, false if the existing value matched the desired value.
[NotifyPropertyChangedInvocator]
- protected virtual bool SetAndNotify(ref T storage, T value, [CallerMemberName] string? propertyName = null)
+ protected bool SetAndNotify(ref T storage, T value, [CallerMemberName] string? propertyName = null)
{
if (!RequiresUpdate(ref storage, value)) return false;
@@ -64,7 +64,7 @@ namespace Artemis.Core
/// and can be provided automatically when invoked from compilers that support
/// .
///
- protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
+ protected void OnPropertyChanged([CallerMemberName] string? propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
diff --git a/src/Artemis.Core/Models/ProfileConfiguration/ProfileConfiguration.cs b/src/Artemis.Core/Models/ProfileConfiguration/ProfileConfiguration.cs
index 2ed2cc21e..f993e3ae5 100644
--- a/src/Artemis.Core/Models/ProfileConfiguration/ProfileConfiguration.cs
+++ b/src/Artemis.Core/Models/ProfileConfiguration/ProfileConfiguration.cs
@@ -11,15 +11,21 @@ namespace Artemis.Core
///
public class ProfileConfiguration : BreakableModel, IStorageModel, IDisposable
{
- private ProfileCategory _category;
private bool _disposed;
- private bool _isMissingModule;
- private bool _isSuspended;
- private Module? _module;
private string _name;
private int _order;
+ private bool _isSuspended;
+ private bool _isMissingModule;
+ private ProfileCategory _category;
+ private ProfileConfigurationHotkeyMode _hotkeyMode;
+ private Hotkey? _enableHotkey;
+ private Hotkey? _disableHotkey;
+ private ActivationBehaviour _activationBehaviour;
+ private bool _activationConditionMet;
+ private bool _isBeingEdited;
private Profile? _profile;
+ private Module? _module;
internal ProfileConfiguration(ProfileCategory category, string name, string icon)
{
@@ -91,31 +97,60 @@ namespace Artemis.Core
internal set => SetAndNotify(ref _category, value);
}
- ///
- /// Gets the icon configuration
- ///
- public ProfileConfigurationIcon Icon { get; }
-
///
/// Gets or sets the used to determine hotkey behaviour
///
- public ProfileConfigurationHotkeyMode HotkeyMode { get; set; }
+ public ProfileConfigurationHotkeyMode HotkeyMode
+ {
+ get => _hotkeyMode;
+ set => SetAndNotify(ref _hotkeyMode, value);
+ }
///
/// Gets or sets the hotkey used to enable or toggle the profile
///
- public Hotkey? EnableHotkey { get; set; }
+ public Hotkey? EnableHotkey
+ {
+ get => _enableHotkey;
+ set => SetAndNotify(ref _enableHotkey, value);
+ }
///
/// Gets or sets the hotkey used to disable the profile
///
- public Hotkey? DisableHotkey { get; set; }
+ public Hotkey? DisableHotkey
+ {
+ get => _disableHotkey;
+ set => SetAndNotify(ref _disableHotkey, value);
+ }
///
- /// Gets the ID of the profile of this profile configuration
+ /// Gets or sets the behaviour of when this profile is activated
///
- public Guid ProfileId => Entity.ProfileId;
+ public ActivationBehaviour ActivationBehaviour
+ {
+ get => _activationBehaviour;
+ set => SetAndNotify(ref _activationBehaviour, value);
+ }
+ ///
+ /// Gets a boolean indicating whether the activation conditions where met during the last call
+ ///
+ public bool ActivationConditionMet
+ {
+ get => _activationConditionMet;
+ private set => SetAndNotify(ref _activationConditionMet, value);
+ }
+
+ ///
+ /// Gets or sets a boolean indicating whether this profile configuration is being edited
+ ///
+ public bool IsBeingEdited
+ {
+ get => _isBeingEdited;
+ set => SetAndNotify(ref _isBeingEdited, value);
+ }
+
///
/// Gets the profile of this profile configuration
///
@@ -125,17 +160,6 @@ namespace Artemis.Core
internal set => SetAndNotify(ref _profile, value);
}
- ///
- /// Gets or sets the behaviour of when this profile is activated
- ///
- public ActivationBehaviour ActivationBehaviour { get; set; }
-
- ///
- /// Gets the data model condition that must evaluate to for this profile to be activated
- /// alongside any activation requirements of the , if set
- ///
- public NodeScript ActivationCondition { get; }
-
///
/// Gets or sets the module this profile uses
///
@@ -144,25 +168,31 @@ namespace Artemis.Core
get => _module;
set
{
- _module = value;
+ SetAndNotify(ref _module, value);
IsMissingModule = false;
}
}
-
+
///
- /// Gets a boolean indicating whether the activation conditions where met during the last call
+ /// Gets the icon configuration
///
- public bool ActivationConditionMet { get; private set; }
-
+ public ProfileConfigurationIcon Icon { get; }
+
///
- /// Gets or sets a boolean indicating whether this profile configuration is being edited
+ /// Gets the data model condition that must evaluate to for this profile to be activated
+ /// alongside any activation requirements of the , if set
///
- public bool IsBeingEdited { get; set; }
+ public NodeScript ActivationCondition { get; }
///
/// Gets the entity used by this profile config
///
public ProfileConfigurationEntity Entity { get; }
+
+ ///
+ /// Gets the ID of the profile of this profile configuration
+ ///
+ public Guid ProfileId => Entity.ProfileId;
///
/// Updates this configurations activation condition status
@@ -243,7 +273,7 @@ namespace Artemis.Core
if (Entity.ActivationCondition != null)
ActivationCondition.LoadFromEntity(Entity.ActivationCondition);
-
+
EnableHotkey = Entity.EnableHotkey != null ? new Hotkey(Entity.EnableHotkey) : null;
DisableHotkey = Entity.DisableHotkey != null ? new Hotkey(Entity.DisableHotkey) : null;
}
diff --git a/src/Artemis.UI.Shared/packages.lock.json b/src/Artemis.UI.Shared/packages.lock.json
index 6dd5bf165..35d097aec 100644
--- a/src/Artemis.UI.Shared/packages.lock.json
+++ b/src/Artemis.UI.Shared/packages.lock.json
@@ -17,6 +17,18 @@
"System.ValueTuple": "4.5.0"
}
},
+ "Avalonia.Diagnostics": {
+ "type": "Direct",
+ "requested": "[0.10.15, )",
+ "resolved": "0.10.15",
+ "contentHash": "s3TSl7vmMXv3EzJPzsa69PshiPp9ajoMeVGP9FAfYopR6iuq60MxikEZTscjhsJ+BySCALXN83F1Gwz8o3oGJA==",
+ "dependencies": {
+ "Avalonia": "0.10.15",
+ "Avalonia.Controls.DataGrid": "0.10.15",
+ "Microsoft.CodeAnalysis.CSharp.Scripting": "3.4.0",
+ "System.Reactive": "5.0.0"
+ }
+ },
"Avalonia.ReactiveUI": {
"type": "Direct",
"requested": "[0.10.15, )",
@@ -317,6 +329,75 @@
"resolved": "0.10.4",
"contentHash": "enc2U+/1UnF3rtocxb5ofcg7cJSmJI4adbYPr8DZa5bQzvhqA/VbjlcalxoqjI3CR2RvM5WWpjKT0p3BriFJjw=="
},
+ "Microsoft.CodeAnalysis.Analyzers": {
+ "type": "Transitive",
+ "resolved": "2.9.6",
+ "contentHash": "Kmms3TxGQMNb95Cu/3K+0bIcMnV4qf/phZBLAB0HUi65rBPxP4JO3aM2LoAcb+DFS600RQJMZ7ZLyYDTbLwJOQ=="
+ },
+ "Microsoft.CodeAnalysis.Common": {
+ "type": "Transitive",
+ "resolved": "3.4.0",
+ "contentHash": "3ncA7cV+iXGA1VYwe2UEZXcvWyZSlbexWjM9AvocP7sik5UD93qt9Hq0fMRGk0jFRmvmE4T2g+bGfXiBVZEhLw==",
+ "dependencies": {
+ "Microsoft.CodeAnalysis.Analyzers": "2.9.6",
+ "System.Collections.Immutable": "1.5.0",
+ "System.Memory": "4.5.3",
+ "System.Reflection.Metadata": "1.6.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.2",
+ "System.Text.Encoding.CodePages": "4.5.1",
+ "System.Threading.Tasks.Extensions": "4.5.3"
+ }
+ },
+ "Microsoft.CodeAnalysis.CSharp": {
+ "type": "Transitive",
+ "resolved": "3.4.0",
+ "contentHash": "/LsTtgcMN6Tu1oo7/WYbRAHL4/ubXC/miEakwTpcZKJKtFo7D0AK95Hw0dbGxul6C8WJu60v6NP2435TDYZM+Q==",
+ "dependencies": {
+ "Microsoft.CodeAnalysis.Common": "[3.4.0]"
+ }
+ },
+ "Microsoft.CodeAnalysis.CSharp.Scripting": {
+ "type": "Transitive",
+ "resolved": "3.4.0",
+ "contentHash": "tLgqc76qXHmONUhWhxo7z3TcL/LmGFWIUJm1exbQmVJohuQvJnejUMxmVkdxDfMuMZU1fIyJXPZ6Fkp4FEneAg==",
+ "dependencies": {
+ "Microsoft.CSharp": "4.3.0",
+ "Microsoft.CodeAnalysis.CSharp": "[3.4.0]",
+ "Microsoft.CodeAnalysis.Common": "[3.4.0]",
+ "Microsoft.CodeAnalysis.Scripting.Common": "[3.4.0]"
+ }
+ },
+ "Microsoft.CodeAnalysis.Scripting.Common": {
+ "type": "Transitive",
+ "resolved": "3.4.0",
+ "contentHash": "+b6I3DZL2zvck+B/E/aiOveakj5U2G2BcYODQxcGh2IDbatNU3XXxGT1HumkWB5uIZI2Leu0opBgBpjScmjGMA==",
+ "dependencies": {
+ "Microsoft.CodeAnalysis.Common": "[3.4.0]"
+ }
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "P+MBhIM0YX+JqROuf7i306ZLJEjQYA9uUyRDE+OqwUI5sh41e2ZbPQV3LfAPh+29cmceE1pUffXsGfR4eMY3KA==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Dynamic.Runtime": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.Linq": "4.3.0",
+ "System.Linq.Expressions": "4.3.0",
+ "System.ObjectModel": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Extensions": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Reflection.TypeExtensions": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Threading": "4.3.0"
+ }
+ },
"Microsoft.DotNet.PlatformAbstractions": {
"type": "Transitive",
"resolved": "3.1.6",
@@ -665,6 +746,11 @@
"System.Threading.Tasks": "4.3.0"
}
},
+ "System.Collections.Immutable": {
+ "type": "Transitive",
+ "resolved": "1.5.0",
+ "contentHash": "EXKiDFsChZW0RjrZ4FYHu9aW6+P4MCgEDCklsVseRfhoO0F+dXeMSsMRAlVXIo06kGJ/zv+2w1a2uc2+kxxSaQ=="
+ },
"System.Collections.NonGeneric": {
"type": "Transitive",
"resolved": "4.3.0",
@@ -1398,6 +1484,15 @@
"System.Runtime": "4.3.0"
}
},
+ "System.Text.Encoding.CodePages": {
+ "type": "Transitive",
+ "resolved": "4.5.1",
+ "contentHash": "4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "2.1.2",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.2"
+ }
+ },
"System.Text.Encoding.Extensions": {
"type": "Transitive",
"resolved": "4.3.0",
@@ -1438,13 +1533,8 @@
},
"System.Threading.Tasks.Extensions": {
"type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==",
- "dependencies": {
- "System.Collections": "4.3.0",
- "System.Runtime": "4.3.0",
- "System.Threading.Tasks": "4.3.0"
- }
+ "resolved": "4.5.3",
+ "contentHash": "+MvhNtcvIbqmhANyKu91jQnvIRVSTiaOiFNfKWwXGHG48YAb4I/TyH8spsySiPYla7gKal5ZnF3teJqZAximyQ=="
},
"System.Threading.Timer": {
"type": "Transitive",
diff --git a/src/Artemis.UI.Windows/packages.lock.json b/src/Artemis.UI.Windows/packages.lock.json
index b78a3b4b9..1ec8d286a 100644
--- a/src/Artemis.UI.Windows/packages.lock.json
+++ b/src/Artemis.UI.Windows/packages.lock.json
@@ -30,6 +30,18 @@
"Avalonia.X11": "0.10.15"
}
},
+ "Avalonia.Diagnostics": {
+ "type": "Direct",
+ "requested": "[0.10.15, )",
+ "resolved": "0.10.15",
+ "contentHash": "s3TSl7vmMXv3EzJPzsa69PshiPp9ajoMeVGP9FAfYopR6iuq60MxikEZTscjhsJ+BySCALXN83F1Gwz8o3oGJA==",
+ "dependencies": {
+ "Avalonia": "0.10.15",
+ "Avalonia.Controls.DataGrid": "0.10.15",
+ "Microsoft.CodeAnalysis.CSharp.Scripting": "3.4.0",
+ "System.Reactive": "5.0.0"
+ }
+ },
"Avalonia.ReactiveUI": {
"type": "Direct",
"requested": "[0.10.15, )",
@@ -345,6 +357,75 @@
"resolved": "0.10.4",
"contentHash": "enc2U+/1UnF3rtocxb5ofcg7cJSmJI4adbYPr8DZa5bQzvhqA/VbjlcalxoqjI3CR2RvM5WWpjKT0p3BriFJjw=="
},
+ "Microsoft.CodeAnalysis.Analyzers": {
+ "type": "Transitive",
+ "resolved": "2.9.6",
+ "contentHash": "Kmms3TxGQMNb95Cu/3K+0bIcMnV4qf/phZBLAB0HUi65rBPxP4JO3aM2LoAcb+DFS600RQJMZ7ZLyYDTbLwJOQ=="
+ },
+ "Microsoft.CodeAnalysis.Common": {
+ "type": "Transitive",
+ "resolved": "3.4.0",
+ "contentHash": "3ncA7cV+iXGA1VYwe2UEZXcvWyZSlbexWjM9AvocP7sik5UD93qt9Hq0fMRGk0jFRmvmE4T2g+bGfXiBVZEhLw==",
+ "dependencies": {
+ "Microsoft.CodeAnalysis.Analyzers": "2.9.6",
+ "System.Collections.Immutable": "1.5.0",
+ "System.Memory": "4.5.3",
+ "System.Reflection.Metadata": "1.6.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.2",
+ "System.Text.Encoding.CodePages": "4.5.1",
+ "System.Threading.Tasks.Extensions": "4.5.3"
+ }
+ },
+ "Microsoft.CodeAnalysis.CSharp": {
+ "type": "Transitive",
+ "resolved": "3.4.0",
+ "contentHash": "/LsTtgcMN6Tu1oo7/WYbRAHL4/ubXC/miEakwTpcZKJKtFo7D0AK95Hw0dbGxul6C8WJu60v6NP2435TDYZM+Q==",
+ "dependencies": {
+ "Microsoft.CodeAnalysis.Common": "[3.4.0]"
+ }
+ },
+ "Microsoft.CodeAnalysis.CSharp.Scripting": {
+ "type": "Transitive",
+ "resolved": "3.4.0",
+ "contentHash": "tLgqc76qXHmONUhWhxo7z3TcL/LmGFWIUJm1exbQmVJohuQvJnejUMxmVkdxDfMuMZU1fIyJXPZ6Fkp4FEneAg==",
+ "dependencies": {
+ "Microsoft.CSharp": "4.3.0",
+ "Microsoft.CodeAnalysis.CSharp": "[3.4.0]",
+ "Microsoft.CodeAnalysis.Common": "[3.4.0]",
+ "Microsoft.CodeAnalysis.Scripting.Common": "[3.4.0]"
+ }
+ },
+ "Microsoft.CodeAnalysis.Scripting.Common": {
+ "type": "Transitive",
+ "resolved": "3.4.0",
+ "contentHash": "+b6I3DZL2zvck+B/E/aiOveakj5U2G2BcYODQxcGh2IDbatNU3XXxGT1HumkWB5uIZI2Leu0opBgBpjScmjGMA==",
+ "dependencies": {
+ "Microsoft.CodeAnalysis.Common": "[3.4.0]"
+ }
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "P+MBhIM0YX+JqROuf7i306ZLJEjQYA9uUyRDE+OqwUI5sh41e2ZbPQV3LfAPh+29cmceE1pUffXsGfR4eMY3KA==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Diagnostics.Debug": "4.3.0",
+ "System.Dynamic.Runtime": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.Linq": "4.3.0",
+ "System.Linq.Expressions": "4.3.0",
+ "System.ObjectModel": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Reflection.Extensions": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Reflection.TypeExtensions": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Runtime.InteropServices": "4.3.0",
+ "System.Threading": "4.3.0"
+ }
+ },
"Microsoft.DotNet.PlatformAbstractions": {
"type": "Transitive",
"resolved": "3.1.6",
@@ -747,6 +828,11 @@
"System.Threading.Tasks": "4.3.0"
}
},
+ "System.Collections.Immutable": {
+ "type": "Transitive",
+ "resolved": "1.5.0",
+ "contentHash": "EXKiDFsChZW0RjrZ4FYHu9aW6+P4MCgEDCklsVseRfhoO0F+dXeMSsMRAlVXIo06kGJ/zv+2w1a2uc2+kxxSaQ=="
+ },
"System.Collections.NonGeneric": {
"type": "Transitive",
"resolved": "4.3.0",
@@ -1529,13 +1615,8 @@
},
"System.Threading.Tasks.Extensions": {
"type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==",
- "dependencies": {
- "System.Collections": "4.3.0",
- "System.Runtime": "4.3.0",
- "System.Threading.Tasks": "4.3.0"
- }
+ "resolved": "4.5.3",
+ "contentHash": "+MvhNtcvIbqmhANyKu91jQnvIRVSTiaOiFNfKWwXGHG48YAb4I/TyH8spsySiPYla7gKal5ZnF3teJqZAximyQ=="
},
"System.Threading.Timer": {
"type": "Transitive",
@@ -1668,6 +1749,7 @@
"Avalonia": "0.10.15",
"Avalonia.Controls.PanAndZoom": "10.14.0",
"Avalonia.Desktop": "0.10.15",
+ "Avalonia.Diagnostics": "0.10.15",
"Avalonia.ReactiveUI": "0.10.15",
"Avalonia.Xaml.Behaviors": "0.10.14",
"DynamicData": "7.8.6",
@@ -1688,6 +1770,7 @@
"dependencies": {
"Artemis.Core": "1.0.0",
"Avalonia": "0.10.15",
+ "Avalonia.Diagnostics": "0.10.15",
"Avalonia.ReactiveUI": "0.10.15",
"Avalonia.Xaml.Behaviors": "0.10.14",
"DynamicData": "7.8.6",
diff --git a/src/Artemis.UI/Screens/Sidebar/SidebarCategoryView.axaml b/src/Artemis.UI/Screens/Sidebar/SidebarCategoryView.axaml
index 870a4b5a0..172b34d08 100644
--- a/src/Artemis.UI/Screens/Sidebar/SidebarCategoryView.axaml
+++ b/src/Artemis.UI/Screens/Sidebar/SidebarCategoryView.axaml
@@ -104,36 +104,38 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+