diff --git a/Artemis/Artemis/Profiles/Layers/Conditions/DataModelCondition.cs b/Artemis/Artemis/Profiles/Layers/Conditions/DataModelCondition.cs index 3572d0e74..29f388749 100644 --- a/Artemis/Artemis/Profiles/Layers/Conditions/DataModelCondition.cs +++ b/Artemis/Artemis/Profiles/Layers/Conditions/DataModelCondition.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using Artemis.Models.Interfaces; using Artemis.Profiles.Layers.Interfaces; using Artemis.Profiles.Layers.Models; @@ -11,7 +12,17 @@ namespace Artemis.Profiles.Layers.Conditions { lock (layerModel.Properties.Conditions) { - return layerModel.Properties.Conditions.All(cm => cm.ConditionMet(dataModel)); + switch (layerModel.Properties.ConditionType) + { + case ConditionType.AnyMet: + return layerModel.Properties.Conditions.Any(cm => cm.ConditionMet(dataModel)); + case ConditionType.AllMet: + return layerModel.Properties.Conditions.All(cm => cm.ConditionMet(dataModel)); + case ConditionType.NoneMet: + return !layerModel.Properties.Conditions.Any(cm => cm.ConditionMet(dataModel)); + default: + throw new ArgumentOutOfRangeException(); + } } } } diff --git a/Artemis/Artemis/Profiles/Layers/Conditions/EventCondition.cs b/Artemis/Artemis/Profiles/Layers/Conditions/EventCondition.cs index 04ea65aa8..902331477 100644 --- a/Artemis/Artemis/Profiles/Layers/Conditions/EventCondition.cs +++ b/Artemis/Artemis/Profiles/Layers/Conditions/EventCondition.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using Artemis.Models.Interfaces; using Artemis.Profiles.Layers.Interfaces; using Artemis.Profiles.Layers.Models; @@ -11,7 +12,19 @@ namespace Artemis.Profiles.Layers.Conditions { lock (layerModel.Properties.Conditions) { - var conditionsMet = layerModel.Properties.Conditions.All(cm => cm.ConditionMet(dataModel)); + var conditionsMet = false; + switch (layerModel.Properties.ConditionType) + { + case ConditionType.AnyMet: + conditionsMet = layerModel.Properties.Conditions.Any(cm => cm.ConditionMet(dataModel)); + break; + case ConditionType.AllMet: + conditionsMet = layerModel.Properties.Conditions.All(cm => cm.ConditionMet(dataModel)); + break; + case ConditionType.NoneMet: + conditionsMet = !layerModel.Properties.Conditions.Any(cm => cm.ConditionMet(dataModel)); + break; + } layerModel.EventProperties.Update(layerModel, conditionsMet); if (conditionsMet && layerModel.EventProperties.CanTrigger) diff --git a/Artemis/Artemis/Profiles/Layers/Models/LayerModel.cs b/Artemis/Artemis/Profiles/Layers/Models/LayerModel.cs index 53cee288d..5870cdb19 100644 --- a/Artemis/Artemis/Profiles/Layers/Models/LayerModel.cs +++ b/Artemis/Artemis/Profiles/Layers/Models/LayerModel.cs @@ -387,7 +387,7 @@ namespace Artemis.Profiles.Layers.Models get { return Profile; } set { Profile = value; } } - + #endregion } } \ No newline at end of file diff --git a/Artemis/Artemis/Profiles/Layers/Models/LayerPropertiesModel.cs b/Artemis/Artemis/Profiles/Layers/Models/LayerPropertiesModel.cs index ccf0d77c5..c8720f1a4 100644 --- a/Artemis/Artemis/Profiles/Layers/Models/LayerPropertiesModel.cs +++ b/Artemis/Artemis/Profiles/Layers/Models/LayerPropertiesModel.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.ComponentModel; using System.Windows; using System.Windows.Media; using Artemis.Utilities.Converters; @@ -24,6 +25,7 @@ namespace Artemis.Profiles.Layers.Models Opacity = source.Opacity; AnimationSpeed = source.AnimationSpeed; Conditions = source.Conditions; + ConditionType = source.ConditionType; DynamicProperties = source.DynamicProperties; Brush = source.Brush; HeightEase = source.HeightEase; @@ -47,6 +49,7 @@ namespace Artemis.Profiles.Layers.Models public string WidthEase { set; get; } public string HeightEase { get; set; } public string OpacityEase { get; set; } + public ConditionType ConditionType { get; set; } public List Conditions { get; set; } = new List(); public List DynamicProperties { get; set; } = new List(); @@ -80,4 +83,11 @@ namespace Artemis.Profiles.Layers.Models return new Rect(X*scale, Y*scale, Width*scale, Height*scale); } } + + public enum ConditionType + { + [Description("All met")] AllMet, + [Description("Any met")] AnyMet, + [Description("None met")] NoneMet + } } \ No newline at end of file diff --git a/Artemis/Artemis/ViewModels/Profiles/LayerEditorViewModel.cs b/Artemis/Artemis/ViewModels/Profiles/LayerEditorViewModel.cs index f6a22b203..55b12d98a 100644 --- a/Artemis/Artemis/ViewModels/Profiles/LayerEditorViewModel.cs +++ b/Artemis/Artemis/ViewModels/Profiles/LayerEditorViewModel.cs @@ -118,7 +118,7 @@ namespace Artemis.ViewModels.Profiles NotifyOfPropertyChange(() => SelectedLayerType); } } - + public void PreSelect() { SelectedLayerType = LayerTypes.FirstOrDefault(t => t.Name == ProposedLayer.LayerType.Name); diff --git a/Artemis/Artemis/Views/Flyouts/FlyoutSettingsView.xaml b/Artemis/Artemis/Views/Flyouts/FlyoutSettingsView.xaml index 2beb89dd5..467284257 100644 --- a/Artemis/Artemis/Views/Flyouts/FlyoutSettingsView.xaml +++ b/Artemis/Artemis/Views/Flyouts/FlyoutSettingsView.xaml @@ -44,7 +44,6 @@ Style="{StaticResource MahApps.Metro.Styles.ToggleSwitchButton.Win10}" HorizontalAlignment="Right" /> -