mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 11:56:30 +00:00
UI - Added gradient editor dialog
This commit is contained in:
1 parent
11b3dcdce9
commit
38b6ca32a3
19 files changed
+1485
-117
No files matched your search
+6
-3
@@ -43,16 +43,19 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree.P
|
||||
{
|
||||
var layerBrushProviders = _pluginService.GetPluginsOfType<LayerBrushProvider>();
|
||||
var descriptors = layerBrushProviders.SelectMany(l => l.LayerBrushDescriptors).ToList();
|
||||
EnumValues.Clear();
|
||||
|
||||
var enumValues = new List<ValueDescription>();
|
||||
foreach (var layerBrushDescriptor in descriptors)
|
||||
{
|
||||
var brushName = layerBrushDescriptor.LayerBrushType.Name;
|
||||
var brushGuid = layerBrushDescriptor.LayerBrushProvider.PluginInfo.Guid;
|
||||
if (BrushInputValue != null && BrushInputValue.BrushType == brushName && BrushInputValue.BrushPluginGuid == brushGuid)
|
||||
EnumValues.Add(new ValueDescription {Description = layerBrushDescriptor.DisplayName, Value = BrushInputValue});
|
||||
enumValues.Add(new ValueDescription {Description = layerBrushDescriptor.DisplayName, Value = BrushInputValue});
|
||||
else
|
||||
EnumValues.Add(new ValueDescription {Description = layerBrushDescriptor.DisplayName, Value = new LayerBrushReference {BrushType = brushName, BrushPluginGuid = brushGuid}});
|
||||
enumValues.Add(new ValueDescription {Description = layerBrushDescriptor.DisplayName, Value = new LayerBrushReference {BrushType = brushName, BrushPluginGuid = brushGuid}});
|
||||
}
|
||||
EnumValues.Clear();
|
||||
EnumValues.AddRange(enumValues);
|
||||
}
|
||||
|
||||
public override void Update()
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Margin="0 0 5 4" Width="10" VerticalAlignment="Bottom" Text="{Binding LayerPropertyViewModel.LayerProperty.InputPrefix}" />
|
||||
<artemis:ColorPicker Width="132"
|
||||
Margin="0 2"
|
||||
Margin="0 -2 0 3"
|
||||
Padding="0 -1"
|
||||
Color="{Binding SKColorInputValue, Converter={StaticResource SKColorToColorConverter}}" />
|
||||
<TextBlock Margin="5 0 0 4" Width="10" VerticalAlignment="Bottom" Text="{Binding LayerPropertyViewModel.LayerProperty.InputAffix}" />
|
||||
|
||||
+2
@@ -18,6 +18,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree
|
||||
child.Update(forceUpdate);
|
||||
}
|
||||
|
||||
// TODO: Change this to not add one by one, this raises far too many events
|
||||
public override void AddLayerProperty(LayerPropertyViewModel layerPropertyViewModel)
|
||||
{
|
||||
if (layerPropertyViewModel.Parent == LayerPropertyViewModel)
|
||||
@@ -40,6 +41,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Change this to not remove one by one, this raises far too many events
|
||||
public override void RemoveLayerProperty(LayerPropertyViewModel layerPropertyViewModel)
|
||||
{
|
||||
foreach (var child in Children.ToList())
|
||||
|
||||
+2
@@ -36,6 +36,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree
|
||||
propertyTreeItemViewModel.Dispose();
|
||||
}
|
||||
|
||||
// TODO: Change this to not add one by one, this raises far too many events
|
||||
public void AddLayerProperty(LayerPropertyViewModel layerPropertyViewModel)
|
||||
{
|
||||
// Add as a root VM
|
||||
@@ -49,6 +50,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.PropertyTree
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Change this to not remove one by one, this raises far too many events
|
||||
public void RemoveLayerProperty(LayerPropertyViewModel layerPropertyViewModel)
|
||||
{
|
||||
// Remove a root VM
|
||||
|
||||
+9
-5
@@ -60,10 +60,12 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline
|
||||
|
||||
public void PopulateProperties(List<LayerPropertyViewModel> properties)
|
||||
{
|
||||
PropertyTrackViewModels.Clear();
|
||||
var newViewModels = new List<PropertyTrackViewModel>();
|
||||
foreach (var property in properties)
|
||||
CreateViewModels(property);
|
||||
newViewModels.AddRange(CreateViewModels(property));
|
||||
|
||||
PropertyTrackViewModels.Clear();
|
||||
PropertyTrackViewModels.AddRange(newViewModels);
|
||||
UpdateEndTime();
|
||||
}
|
||||
|
||||
@@ -112,11 +114,13 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline
|
||||
UpdateKeyframePositions();
|
||||
}
|
||||
|
||||
private void CreateViewModels(LayerPropertyViewModel property)
|
||||
private List<PropertyTrackViewModel> CreateViewModels(LayerPropertyViewModel property)
|
||||
{
|
||||
PropertyTrackViewModels.Add(_propertyTrackVmFactory.Create(this, property));
|
||||
var result = new List<PropertyTrackViewModel> {_propertyTrackVmFactory.Create(this, property)};
|
||||
foreach (var child in property.Children)
|
||||
CreateViewModels(child);
|
||||
result.AddRange(CreateViewModels(child));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#region Keyframe movement
|
||||
|
||||
+2
-2
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Input;
|
||||
@@ -125,8 +126,7 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline
|
||||
|
||||
private void CreateEasingViewModels()
|
||||
{
|
||||
foreach (Easings.Functions value in Enum.GetValues(typeof(Easings.Functions)))
|
||||
EasingViewModels.Add(new PropertyTrackEasingViewModel(this, value));
|
||||
EasingViewModels.AddRange(Enum.GetValues(typeof(Easings.Functions)).Cast<Easings.Functions>().Select(v => new PropertyTrackEasingViewModel(this, v)));
|
||||
}
|
||||
|
||||
public void SelectEasingMode(PropertyTrackEasingViewModel easingViewModel)
|
||||
|
||||
+8
-13
@@ -1,4 +1,5 @@
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Artemis.UI.Ninject.Factories;
|
||||
using Stylet;
|
||||
|
||||
@@ -28,20 +29,14 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline
|
||||
public void PopulateKeyframes()
|
||||
{
|
||||
// Remove old keyframes
|
||||
foreach (var viewModel in KeyframeViewModels.ToList())
|
||||
{
|
||||
if (!LayerPropertyViewModel.LayerProperty.UntypedKeyframes.Contains(viewModel.Keyframe))
|
||||
KeyframeViewModels.Remove(viewModel);
|
||||
}
|
||||
KeyframeViewModels.RemoveRange(KeyframeViewModels.ToList().Where(vm => !LayerPropertyViewModel.LayerProperty.UntypedKeyframes.Contains(vm.Keyframe)));
|
||||
|
||||
// Add new keyframes
|
||||
foreach (var keyframe in LayerPropertyViewModel.LayerProperty.UntypedKeyframes)
|
||||
{
|
||||
if (KeyframeViewModels.Any(k => k.Keyframe == keyframe))
|
||||
continue;
|
||||
KeyframeViewModels.Add(_propertyTrackKeyframeVmFactory.Create(this, keyframe));
|
||||
}
|
||||
|
||||
KeyframeViewModels.AddRange(
|
||||
LayerPropertyViewModel.LayerProperty.UntypedKeyframes
|
||||
.Where(k => KeyframeViewModels.All(vm => vm.Keyframe != k))
|
||||
.Select(k => _propertyTrackKeyframeVmFactory.Create(this, k))
|
||||
);
|
||||
UpdateKeyframes(PropertyTimelineViewModel.LayerPropertiesViewModel.PixelsPerSecond);
|
||||
}
|
||||
|
||||
|
||||
+22
-18
@@ -174,27 +174,31 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.ProfileTree.TreeItem
|
||||
}
|
||||
|
||||
// Ensure every child element has an up-to-date VM
|
||||
if (ProfileElement.Children != null)
|
||||
{
|
||||
foreach (var profileElement in ProfileElement.Children.OrderBy(c => c.Order))
|
||||
{
|
||||
TreeItemViewModel existing = null;
|
||||
if (profileElement is Folder folder)
|
||||
{
|
||||
existing = Children.FirstOrDefault(p => p is FolderViewModel vm && vm.ProfileElement == folder);
|
||||
if (existing == null)
|
||||
Children.Add(_folderVmFactory.Create((FolderViewModel) this, folder));
|
||||
}
|
||||
else if (profileElement is Layer layer)
|
||||
{
|
||||
existing = Children.FirstOrDefault(p => p is LayerViewModel vm && vm.ProfileElement == layer);
|
||||
if (existing == null)
|
||||
Children.Add(_layerVmFactory.Create((FolderViewModel) this, layer));
|
||||
}
|
||||
if (ProfileElement.Children == null)
|
||||
return;
|
||||
|
||||
existing?.UpdateProfileElements();
|
||||
var newChildren = new List<TreeItemViewModel>();
|
||||
foreach (var profileElement in ProfileElement.Children.OrderBy(c => c.Order))
|
||||
{
|
||||
if (profileElement is Folder folder)
|
||||
{
|
||||
if (Children.FirstOrDefault(p => p is FolderViewModel vm && vm.ProfileElement == folder) == null)
|
||||
newChildren.Add(_folderVmFactory.Create((FolderViewModel) this, folder));
|
||||
}
|
||||
else if (profileElement is Layer layer)
|
||||
{
|
||||
if (Children.FirstOrDefault(p => p is LayerViewModel vm && vm.ProfileElement == layer) == null)
|
||||
newChildren.Add(_layerVmFactory.Create((FolderViewModel) this, layer));
|
||||
}
|
||||
}
|
||||
|
||||
if (!newChildren.Any())
|
||||
return;
|
||||
|
||||
// Add the new children in one call, prevent extra UI events
|
||||
Children.AddRange(newChildren);
|
||||
foreach (var treeItemViewModel in newChildren)
|
||||
treeItemViewModel.UpdateProfileElements();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user