diff --git a/src/Artemis.Core/Models/Profile/Conditions/DataModelConditionEvent.cs b/src/Artemis.Core/Models/Profile/Conditions/DataModelConditionEvent.cs
index 8ae6d5411..64529c531 100644
--- a/src/Artemis.Core/Models/Profile/Conditions/DataModelConditionEvent.cs
+++ b/src/Artemis.Core/Models/Profile/Conditions/DataModelConditionEvent.cs
@@ -12,7 +12,6 @@ namespace Artemis.Core
{
private bool _disposed;
private bool _reinitializing;
- private DateTime _lastTrigger;
///
/// Creates a new instance of the class
@@ -39,6 +38,8 @@ namespace Artemis.Core
///
public DataModelPath? EventPath { get; private set; }
+ public DateTime LastTrigger { get; private set; }
+
///
/// Gets or sets the type of argument the event provides
///
@@ -55,10 +56,10 @@ namespace Artemis.Core
if (EventPath?.GetValue() is not IDataModelEvent dataModelEvent)
return false;
// Only evaluate to true once every time the event has been triggered since the last evaluation
- if (dataModelEvent.LastTrigger <= _lastTrigger)
+ if (dataModelEvent.LastTrigger <= LastTrigger)
return false;
- _lastTrigger = DateTime.Now;
+ LastTrigger = DateTime.Now;
// If there is a child (root group), it must evaluate to true whenever the event triggered
if (Children.Any())
@@ -171,8 +172,8 @@ namespace Artemis.Core
AddChild(new DataModelConditionGroup(this));
}
- if (EventPath?.GetValue() is IDataModelEvent dataModelEvent)
- _lastTrigger = dataModelEvent.LastTrigger;
+ if (EventPath?.GetValue() is IDataModelEvent dataModelEvent)
+ LastTrigger = dataModelEvent.LastTrigger;
}
private Type? GetEventArgumentType()
diff --git a/src/Artemis.Core/Models/Surface/Layout/ArtemisLayout.cs b/src/Artemis.Core/Models/Surface/Layout/ArtemisLayout.cs
index cc837ca3b..7ff43d6ef 100644
--- a/src/Artemis.Core/Models/Surface/Layout/ArtemisLayout.cs
+++ b/src/Artemis.Core/Models/Surface/Layout/ArtemisLayout.cs
@@ -65,12 +65,6 @@ namespace Artemis.Core
///
public LayoutCustomDeviceData LayoutCustomDeviceData { get; private set; } = null!;
- public void ReloadFromDisk()
- {
- Leds.Clear();
- LoadLayout();
- }
-
internal void ApplyDevice(ArtemisDevice artemisDevice)
{
Device = artemisDevice;
diff --git a/src/Artemis.UI/Screens/ProfileEditor/Conditions/Abstract/DataModelConditionPredicateViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/Conditions/Abstract/DataModelConditionPredicateViewModel.cs
index f0a4a4ba5..6efb8a33a 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/Conditions/Abstract/DataModelConditionPredicateViewModel.cs
+++ b/src/Artemis.UI/Screens/ProfileEditor/Conditions/Abstract/DataModelConditionPredicateViewModel.cs
@@ -67,6 +67,11 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions.Abstract
protected SolidColorBrush LeftSideColor { get; set; }
+ public override void Evaluate()
+ {
+ IsConditionMet = DataModelConditionPredicate.Evaluate();
+ }
+
public override void Delete()
{
base.Delete();
diff --git a/src/Artemis.UI/Screens/ProfileEditor/Conditions/Abstract/DataModelConditionViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/Conditions/Abstract/DataModelConditionViewModel.cs
index 0cae105e4..b2f94a711 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/Conditions/Abstract/DataModelConditionViewModel.cs
+++ b/src/Artemis.UI/Screens/ProfileEditor/Conditions/Abstract/DataModelConditionViewModel.cs
@@ -8,6 +8,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions.Abstract
public abstract class DataModelConditionViewModel : Conductor.Collection.AllActive
{
private DataModelDynamicViewModel _leftSideSelectionViewModel;
+ private bool _isConditionMet;
protected DataModelConditionViewModel(DataModelConditionPart model)
{
@@ -22,8 +23,17 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions.Abstract
set => SetAndNotify(ref _leftSideSelectionViewModel, value);
}
+ public bool IsConditionMet
+ {
+ get => _isConditionMet;
+ set => SetAndNotify(ref _isConditionMet, value);
+ }
+
+
public abstract void Update();
+ public abstract void Evaluate();
+
public virtual void Delete()
{
Model.Parent.RemoveChild(Model);
diff --git a/src/Artemis.UI/Screens/ProfileEditor/Conditions/DataModelConditionEventView.xaml b/src/Artemis.UI/Screens/ProfileEditor/Conditions/DataModelConditionEventView.xaml
index f71fb5e79..8b9a2b81b 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/Conditions/DataModelConditionEventView.xaml
+++ b/src/Artemis.UI/Screens/ProfileEditor/Conditions/DataModelConditionEventView.xaml
@@ -13,7 +13,14 @@
+
+
+
+
+
+
+
@@ -21,6 +28,7 @@
+
@@ -52,7 +60,37 @@
triggered
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Artemis.UI/Screens/ProfileEditor/Conditions/DataModelConditionEventViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/Conditions/DataModelConditionEventViewModel.cs
index b22a5fe17..e864ce342 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/Conditions/DataModelConditionEventViewModel.cs
+++ b/src/Artemis.UI/Screens/ProfileEditor/Conditions/DataModelConditionEventViewModel.cs
@@ -15,6 +15,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
private readonly IDataModelConditionsVmFactory _dataModelConditionsVmFactory;
private readonly IDataModelUIService _dataModelUIService;
private readonly IProfileEditorService _profileEditorService;
+ private DateTime _lastTrigger;
public DataModelConditionEventViewModel(DataModelConditionEvent dataModelConditionEvent,
IProfileEditorService profileEditorService,
@@ -24,10 +25,18 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
_profileEditorService = profileEditorService;
_dataModelUIService = dataModelUIService;
_dataModelConditionsVmFactory = dataModelConditionsVmFactory;
+
+ _lastTrigger = DataModelConditionEvent.LastTrigger;
}
public DataModelConditionEvent DataModelConditionEvent => (DataModelConditionEvent) Model;
+ public DateTime LastTrigger
+ {
+ get => _lastTrigger;
+ set => SetAndNotify(ref _lastTrigger, value);
+ }
+
public void Initialize()
{
LeftSideSelectionViewModel = _dataModelUIService.GetDynamicSelectionViewModel(_profileEditorService.GetCurrentModule());
@@ -36,7 +45,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
IReadOnlyCollection editors = _dataModelUIService.RegisteredDataModelEditors;
List supportedInputTypes = new() {typeof(DataModelEvent), typeof(DataModelEvent<>)};
-
+
LeftSideSelectionViewModel.FilterTypes = supportedInputTypes.ToArray();
LeftSideSelectionViewModel.ButtonBrush = new SolidColorBrush(Color.FromRgb(185, 164, 10));
LeftSideSelectionViewModel.Placeholder = "Select an event";
@@ -74,6 +83,12 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
childViewModel.Update();
}
+ public override void Evaluate()
+ {
+ LastTrigger = DataModelConditionEvent.LastTrigger;
+ IsConditionMet = DataModelConditionEvent.Evaluate();
+ }
+
public void ApplyEvent()
{
DataModelConditionEvent.UpdateEvent(LeftSideSelectionViewModel.DataModelPath);
@@ -104,7 +119,7 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
LeftSideSelectionViewModel.Dispose();
LeftSideSelectionViewModel.PropertySelected -= LeftSideSelectionViewModelOnPropertySelected;
}
-
+
#endregion
}
}
\ No newline at end of file
diff --git a/src/Artemis.UI/Screens/ProfileEditor/Conditions/DataModelConditionGroupView.xaml b/src/Artemis.UI/Screens/ProfileEditor/Conditions/DataModelConditionGroupView.xaml
index 0e4f1b687..421cf840d 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/Conditions/DataModelConditionGroupView.xaml
+++ b/src/Artemis.UI/Screens/ProfileEditor/Conditions/DataModelConditionGroupView.xaml
@@ -28,6 +28,7 @@
+
@@ -115,9 +116,9 @@
-
\ No newline at end of file
diff --git a/src/Artemis.UI/Screens/ProfileEditor/Conditions/Predicate/DataModelConditionGeneralPredicateViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/Conditions/Predicate/DataModelConditionGeneralPredicateViewModel.cs
index 0ea8d96ee..96c2382b0 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/Conditions/Predicate/DataModelConditionGeneralPredicateViewModel.cs
+++ b/src/Artemis.UI/Screens/ProfileEditor/Conditions/Predicate/DataModelConditionGeneralPredicateViewModel.cs
@@ -42,5 +42,10 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
{
return LeftSideSelectionViewModel.DataModelPath?.GetPropertyType();
}
+
+ public override void Evaluate()
+ {
+ IsConditionMet = DataModelConditionPredicate.Evaluate();
+ }
}
}
\ No newline at end of file
diff --git a/src/Artemis.UI/Screens/ProfileEditor/Conditions/Predicate/DataModelConditionListPredicateViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/Conditions/Predicate/DataModelConditionListPredicateViewModel.cs
index fbc4730b1..2ca951ee8 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/Conditions/Predicate/DataModelConditionListPredicateViewModel.cs
+++ b/src/Artemis.UI/Screens/ProfileEditor/Conditions/Predicate/DataModelConditionListPredicateViewModel.cs
@@ -81,5 +81,10 @@ namespace Artemis.UI.Screens.ProfileEditor.Conditions
return wrapper.CreateViewModel(_dataModelUIService, new DataModelUpdateConfiguration(true));
}
+
+ public override void Evaluate()
+ {
+ throw new NotImplementedException();
+ }
}
}
\ No newline at end of file
diff --git a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsView.xaml b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsView.xaml
index 05c33df00..eed55746a 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsView.xaml
+++ b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsView.xaml
@@ -24,9 +24,19 @@
-
- Display conditions
-
+
+
+ Display conditions
+
+
+ Not applied during editing
+
+
+
diff --git a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsViewModel.cs b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsViewModel.cs
index 3f79b19e3..b6bbf11aa 100644
--- a/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsViewModel.cs
+++ b/src/Artemis.UI/Screens/ProfileEditor/DisplayConditions/DisplayConditionsViewModel.cs
@@ -1,6 +1,7 @@
using System;
using System.Linq;
using Artemis.Core;
+using Artemis.Core.Services;
using Artemis.UI.Ninject.Factories;
using Artemis.UI.Screens.ProfileEditor.Conditions;
using Artemis.UI.Shared;
@@ -12,15 +13,17 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions
public class DisplayConditionsViewModel : Conductor, IProfileEditorPanelViewModel
{
private readonly IDataModelConditionsVmFactory _dataModelConditionsVmFactory;
+ private readonly ICoreService _coreService;
private readonly IProfileEditorService _profileEditorService;
private RenderProfileElement _renderProfileElement;
private bool _displayStartHint;
private bool _isEventCondition;
- public DisplayConditionsViewModel(IProfileEditorService profileEditorService, IDataModelConditionsVmFactory dataModelConditionsVmFactory)
+ public DisplayConditionsViewModel(IProfileEditorService profileEditorService, IDataModelConditionsVmFactory dataModelConditionsVmFactory, ICoreService coreService)
{
_profileEditorService = profileEditorService;
_dataModelConditionsVmFactory = dataModelConditionsVmFactory;
+ _coreService = coreService;
}
public bool DisplayStartHint
@@ -87,12 +90,14 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions
protected override void OnInitialActivate()
{
_profileEditorService.ProfileElementSelected += ProfileEditorServiceOnProfileElementSelected;
+ _coreService.FrameRendered += CoreServiceOnFrameRendered;
base.OnInitialActivate();
}
protected override void OnClose()
{
_profileEditorService.ProfileElementSelected -= ProfileEditorServiceOnProfileElementSelected;
+ _coreService.FrameRendered -= CoreServiceOnFrameRendered;
base.OnClose();
}
@@ -131,6 +136,11 @@ namespace Artemis.UI.Screens.ProfileEditor.DisplayConditions
RenderProfileElement.DisplayCondition.ChildRemoved += DisplayConditionOnChildrenModified;
}
+ private void CoreServiceOnFrameRendered(object? sender, FrameRenderedEventArgs e)
+ {
+ ActiveItem?.Evaluate();
+ }
+
private void DisplayConditionOnChildrenModified(object sender, EventArgs e)
{
DisplayStartHint = !RenderProfileElement.DisplayCondition.Children.Any();
diff --git a/src/Artemis.UI/Screens/Settings/Tabs/Plugins/PluginSettingsViewModel.cs b/src/Artemis.UI/Screens/Settings/Tabs/Plugins/PluginSettingsViewModel.cs
index 06fa111be..f8394b325 100644
--- a/src/Artemis.UI/Screens/Settings/Tabs/Plugins/PluginSettingsViewModel.cs
+++ b/src/Artemis.UI/Screens/Settings/Tabs/Plugins/PluginSettingsViewModel.cs
@@ -76,7 +76,7 @@ namespace Artemis.UI.Screens.Settings.Tabs.Plugins
try
{
PluginConfigurationViewModel viewModel = (PluginConfigurationViewModel) Plugin.Kernel.Get(configurationViewModel.Type);
- _windowManager.ShowDialog(new PluginSettingsWindowViewModel(viewModel, Icon));
+ _windowManager.ShowWindow(new PluginSettingsWindowViewModel(viewModel, Icon));
}
catch (Exception e)
{