Implemented layer element saving

Added a working setting to the brush element
This commit is contained in:
Robert committed 2019-12-04 13:26:18 +01:00
1 parent 275d2b32a6
commit 1a44e34d16
24 files changed
+440 -85

No files matched your search

+1
View File
@@ -172,6 +172,7 @@
<Compile Include="Bootstrapper.cs" />
<Compile Include="Converters\ColorToDrawingColorConverter.cs" />
<Compile Include="Converters\ColorToSolidColorBrushConverter.cs" />
<Compile Include="Converters\EnumToCollectionConverter.cs" />
<Compile Include="Converters\InverseBooleanConverter.cs" />
<Compile Include="Converters\NullToImageConverter.cs" />
<Compile Include="Converters\NullToVisibilityConverter.cs" />
@@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Windows.Data;
using System.Windows.Markup;
namespace Artemis.UI.Converters
{
[ValueConversion(typeof(Enum), typeof(IEnumerable<Tuple<object, object>>))]
public class EnumToCollectionConverter : MarkupExtension, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return GetAllValuesAndDescriptions(value.GetType());
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
private static string Description(Enum value)
{
var attributes = value.GetType().GetField(value.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attributes.Any())
return (attributes.First() as DescriptionAttribute)?.Description;
// If no description is found, the least we can do is replace underscores with spaces
var ti = CultureInfo.CurrentCulture.TextInfo;
return ti.ToTitleCase(ti.ToLower(value.ToString().Replace("_", " ")));
}
private static IEnumerable<Tuple<object, object>> GetAllValuesAndDescriptions(Type t)
{
if (!t.IsEnum)
throw new ArgumentException($"{nameof(t)} must be an enum type");
return Enum.GetValues(t).Cast<Enum>().Select(e => new Tuple<object, object>(e, Description(e))).ToList();
}
}
}
@@ -19,7 +19,9 @@
</TextBlock>
<Separator Style="{StaticResource MaterialDesignDarkSeparator}" Margin="8 0" />
</StackPanel>
<ContentControl Grid.Row="1" s:View.Model="{Binding LayerElementViewModel}" />
<ScrollViewer Grid.Row="1">
<ContentControl s:View.Model="{Binding LayerElementViewModel}" Margin="0 0 10 0"/>
</ScrollViewer>
</Grid>
</UserControl>
@@ -1,4 +1,5 @@
using System;
using System.ComponentModel;
using Artemis.Core.Plugins.LayerElement;
using Artemis.UI.Services.Interfaces;
@@ -19,7 +20,18 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.ElementProperties
private void OnSelectedLayerElementChanged(object sender, EventArgs e)
{
if (LayerElementViewModel?.LayerElement?.Settings != null)
LayerElementViewModel.LayerElement.Settings.PropertyChanged -= SettingsOnPropertyChanged;
LayerElementViewModel = _profileEditorService.SelectedLayerElement?.GetViewModel();
if (LayerElementViewModel?.LayerElement?.Settings != null)
LayerElementViewModel.LayerElement.Settings.PropertyChanged += SettingsOnPropertyChanged;
}
private void SettingsOnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
_profileEditorService.UpdateSelectedProfileElement();
}
}
}
@@ -31,12 +31,16 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerElements.Dialogs
public void Accept()
{
if (Session.IsEnded)
return;
var layerElement = _layerService.InstantiateLayerElement(Layer, SelectedLayerElementDescriptor);
Session.Close(layerElement);
}
public void Cancel()
{
if (Session.IsEnded)
return;
Session.Close();
}
@@ -4,6 +4,7 @@ using System.Linq;
using Artemis.Core.Models.Profile;
using Artemis.Core.Models.Profile.Abstract;
using Artemis.Core.Plugins.LayerElement;
using Artemis.Core.Services.Interfaces;
using Artemis.UI.Screens.Module.ProfileEditor.LayerElements.Dialogs;
using Artemis.UI.Services.Interfaces;
using Stylet;
@@ -14,11 +15,13 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerElements
{
private readonly IDialogService _dialogService;
private readonly IProfileEditorService _profileEditorService;
private readonly ILayerService _layerService;
private LayerElementViewModel _selectedLayerElement;
public LayerElementsViewModel(IProfileEditorService profileEditorService, IDialogService dialogService)
public LayerElementsViewModel(IProfileEditorService profileEditorService, ILayerService layerService, IDialogService dialogService)
{
_profileEditorService = profileEditorService;
_layerService = layerService;
_dialogService = dialogService;
LayerElements = new BindableCollection<LayerElementViewModel>();
@@ -74,8 +77,11 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerElements
new Dictionary<string, object> {{"layer", (Layer) SelectedProfileElement}}
);
if (result is LayerElement layerElement)
LayerElements.Add(new LayerElementViewModel(layerElement));
if (!(result is LayerElement layerElement))
return;
LayerElements.Add(new LayerElementViewModel(layerElement));
_profileEditorService.UpdateSelectedProfileElement();
}
public async void DeleteSelectedLayerElement()
@@ -88,8 +94,18 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerElements
"Delete layer element",
"Are you sure you want to delete the selected layer element?"
);
if (!result)
return;
var layerElement = SelectedLayerElement.LayerElement;
var layer = (Layer) SelectedProfileElement;
LayerElements.Remove(SelectedLayerElement);
SelectedLayerElement = null;
_layerService.RemoveLayerElement(layer, layerElement);
_profileEditorService.UpdateSelectedProfileElement();
}
}
}