1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

Fixed dynamic properties being processed while configuring

This commit is contained in:
SpoinkyNL 2016-04-23 22:44:15 +02:00
parent ddc63473a3
commit e30d85578e
3 changed files with 61 additions and 28 deletions

View File

@ -8,29 +8,33 @@ namespace Artemis.ViewModels.LayerEditor
{ {
public class LayerDynamicPropertiesViewModel : Screen public class LayerDynamicPropertiesViewModel : Screen
{ {
private LayerDynamicPropertiesModel _layerDynamicPropertiesModel; private readonly LayerModel _layer;
private readonly string _property;
private LayerDynamicPropertiesModel _layerDynamicPropertiesModelProposed;
private LayerPropertyType _layerPropertyType;
private string _name; private string _name;
private GeneralHelpers.PropertyCollection _selectedSource; private GeneralHelpers.PropertyCollection _selectedSource;
private GeneralHelpers.PropertyCollection _selectedTarget; private GeneralHelpers.PropertyCollection _selectedTarget;
private bool _sourcesIsVisible; private bool _sourcesIsVisible;
private bool _userSourceIsVisible; private bool _userSourceIsVisible;
private LayerPropertyType _layerPropertyType;
public LayerDynamicPropertiesViewModel(string property, public LayerDynamicPropertiesViewModel(string property,
BindableCollection<GeneralHelpers.PropertyCollection> dataModelProps, LayerModel layer) BindableCollection<GeneralHelpers.PropertyCollection> dataModelProps, LayerModel layer)
{ {
_property = property;
_layer = layer;
// Look for the existing property model // Look for the existing property model
LayerDynamicPropertiesModel = layer.LayerProperties.FirstOrDefault(lp => lp.LayerProperty == property); LayerDynamicPropertiesModelProposed = new LayerDynamicPropertiesModel();
if (LayerDynamicPropertiesModel == null) var original = _layer.LayerProperties.FirstOrDefault(lp => lp.LayerProperty == _property);
if (original == null)
{ {
// If it doesn't exist, create a new one LayerDynamicPropertiesModelProposed.LayerProperty = property;
LayerDynamicPropertiesModel = new LayerDynamicPropertiesModel LayerDynamicPropertiesModelProposed.LayerPropertyType = LayerPropertyType.None;
{ }
LayerProperty = property, else
LayerPropertyType = LayerPropertyType.None {
}; GeneralHelpers.CopyProperties(LayerDynamicPropertiesModelProposed, original);
// Add it to the layer
layer.LayerProperties.Add(LayerDynamicPropertiesModel);
} }
Name = property + ":"; Name = property + ":";
@ -41,9 +45,11 @@ namespace Artemis.ViewModels.LayerEditor
PropertyChanged += OnPropertyChanged; PropertyChanged += OnPropertyChanged;
SelectedTarget = dataModelProps.FirstOrDefault(p => p.Path == LayerDynamicPropertiesModel.GameProperty); SelectedTarget =
SelectedSource = dataModelProps.FirstOrDefault(p => p.Path == LayerDynamicPropertiesModel.PercentageSource); dataModelProps.FirstOrDefault(p => p.Path == LayerDynamicPropertiesModelProposed.GameProperty);
LayerPropertyType = LayerDynamicPropertiesModel.LayerPropertyType; SelectedSource =
dataModelProps.FirstOrDefault(p => p.Path == LayerDynamicPropertiesModelProposed.PercentageSource);
LayerPropertyType = LayerDynamicPropertiesModelProposed.LayerPropertyType;
} }
public LayerPropertyType LayerPropertyType public LayerPropertyType LayerPropertyType
@ -68,14 +74,14 @@ namespace Artemis.ViewModels.LayerEditor
} }
} }
public LayerDynamicPropertiesModel LayerDynamicPropertiesModel public LayerDynamicPropertiesModel LayerDynamicPropertiesModelProposed
{ {
get { return _layerDynamicPropertiesModel; } get { return _layerDynamicPropertiesModelProposed; }
set set
{ {
if (Equals(value, _layerDynamicPropertiesModel)) return; if (Equals(value, _layerDynamicPropertiesModelProposed)) return;
_layerDynamicPropertiesModel = value; _layerDynamicPropertiesModelProposed = value;
NotifyOfPropertyChange(() => LayerDynamicPropertiesModel); NotifyOfPropertyChange(() => LayerDynamicPropertiesModelProposed);
} }
} }
@ -130,15 +136,24 @@ namespace Artemis.ViewModels.LayerEditor
private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) private void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{ {
if (e.PropertyName == "SelectedTarget") if (e.PropertyName == "SelectedTarget")
LayerDynamicPropertiesModel.GameProperty = SelectedTarget.Path; LayerDynamicPropertiesModelProposed.GameProperty = SelectedTarget.Path;
if (e.PropertyName == "SelectedSource") if (e.PropertyName == "SelectedSource")
LayerDynamicPropertiesModel.PercentageSource = SelectedSource.Path; LayerDynamicPropertiesModelProposed.PercentageSource = SelectedSource.Path;
if (e.PropertyName == "LayerPropertyType") if (e.PropertyName == "LayerPropertyType")
{ {
LayerDynamicPropertiesModel.LayerPropertyType = LayerPropertyType; LayerDynamicPropertiesModelProposed.LayerPropertyType = LayerPropertyType;
UserSourceIsVisible = (LayerPropertyType == LayerPropertyType.PercentageOf); UserSourceIsVisible = LayerPropertyType == LayerPropertyType.PercentageOf;
SourcesIsVisible = (LayerPropertyType == LayerPropertyType.PercentageOfProperty); SourcesIsVisible = LayerPropertyType == LayerPropertyType.PercentageOfProperty;
} }
} }
public void Apply()
{
var original = _layer.LayerProperties.FirstOrDefault(lp => lp.LayerProperty == _property);
if (original == null)
_layer.LayerProperties.Add(LayerDynamicPropertiesModelProposed);
else
GeneralHelpers.CopyProperties(original, LayerDynamicPropertiesModelProposed);
}
} }
} }

View File

@ -16,6 +16,7 @@ namespace Artemis.ViewModels.LayerEditor
private readonly BackgroundWorker _previewWorker; private readonly BackgroundWorker _previewWorker;
private readonly bool _wasEnabled; private readonly bool _wasEnabled;
private LayerModel _layer; private LayerModel _layer;
private LayerModel _proposedLayer;
private LayerPropertiesModel _proposedProperties; private LayerPropertiesModel _proposedProperties;
public LayerEditorViewModel(KeyboardProvider activeKeyboard, LayerModel layer) public LayerEditorViewModel(KeyboardProvider activeKeyboard, LayerModel layer)
@ -24,12 +25,15 @@ namespace Artemis.ViewModels.LayerEditor
_wasEnabled = layer.Enabled; _wasEnabled = layer.Enabled;
Layer = layer; Layer = layer;
ProposedLayer = new LayerModel();
GeneralHelpers.CopyProperties(ProposedLayer, Layer);
Layer.Enabled = false; Layer.Enabled = false;
DataModelProps = new BindableCollection<GeneralHelpers.PropertyCollection>(); DataModelProps = new BindableCollection<GeneralHelpers.PropertyCollection>();
ProposedProperties = new LayerPropertiesModel(); ProposedProperties = new LayerPropertiesModel();
DataModelProps.AddRange(GeneralHelpers.GenerateTypeMap<T>()); DataModelProps.AddRange(GeneralHelpers.GenerateTypeMap<T>());
LayerConditionVms = new BindableCollection<LayerConditionViewModel<T>>( LayerConditionVms =
layer.LayerConditions.Select(c => new LayerConditionViewModel<T>(this, c, DataModelProps))); new BindableCollection<LayerConditionViewModel<T>>(
layer.LayerConditions.Select(c => new LayerConditionViewModel<T>(this, c, DataModelProps)));
HeightProperties = new LayerDynamicPropertiesViewModel("Height", DataModelProps, layer); HeightProperties = new LayerDynamicPropertiesViewModel("Height", DataModelProps, layer);
WidthProperties = new LayerDynamicPropertiesViewModel("Width", DataModelProps, layer); WidthProperties = new LayerDynamicPropertiesViewModel("Width", DataModelProps, layer);
OpacityProperties = new LayerDynamicPropertiesViewModel("Opacity", DataModelProps, layer); OpacityProperties = new LayerDynamicPropertiesViewModel("Opacity", DataModelProps, layer);
@ -65,6 +69,17 @@ namespace Artemis.ViewModels.LayerEditor
} }
} }
public LayerModel ProposedLayer
{
get { return _proposedLayer; }
set
{
if (Equals(value, _proposedLayer)) return;
_proposedLayer = value;
NotifyOfPropertyChange(() => ProposedLayer);
}
}
public LayerPropertiesModel ProposedProperties public LayerPropertiesModel ProposedProperties
{ {
get { return _proposedProperties; } get { return _proposedProperties; }
@ -131,6 +146,9 @@ namespace Artemis.ViewModels.LayerEditor
public void Apply() public void Apply()
{ {
GeneralHelpers.CopyProperties(Layer.UserProps, ProposedProperties); GeneralHelpers.CopyProperties(Layer.UserProps, ProposedProperties);
HeightProperties.Apply();
WidthProperties.Apply();
OpacityProperties.Apply();
} }
public void DeleteCondition(LayerConditionViewModel<T> layerConditionViewModel, public void DeleteCondition(LayerConditionViewModel<T> layerConditionViewModel,

View File

@ -81,7 +81,7 @@
<!-- PercentageOf --> <!-- PercentageOf -->
<StackPanel Grid.Column="3" x:Name="UserSourceIsVisible" VerticalAlignment="Center"> <StackPanel Grid.Column="3" x:Name="UserSourceIsVisible" VerticalAlignment="Center">
<controls:NumericUpDown Margin="10,0" Height="22" Value="{Binding Path=LayerDynamicPropertiesModel.PercentageSource, Mode=TwoWay}" /> <controls:NumericUpDown Margin="10,0" Height="22" Value="{Binding Path=LayerDynamicPropertiesModelProposed.PercentageSource, Mode=TwoWay}" />
</StackPanel> </StackPanel>
</Grid> </Grid>
</UserControl> </UserControl>