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
{
private LayerDynamicPropertiesModel _layerDynamicPropertiesModel;
private readonly LayerModel _layer;
private readonly string _property;
private LayerDynamicPropertiesModel _layerDynamicPropertiesModelProposed;
private LayerPropertyType _layerPropertyType;
private string _name;
private GeneralHelpers.PropertyCollection _selectedSource;
private GeneralHelpers.PropertyCollection _selectedTarget;
private bool _sourcesIsVisible;
private bool _userSourceIsVisible;
private LayerPropertyType _layerPropertyType;
public LayerDynamicPropertiesViewModel(string property,
BindableCollection<GeneralHelpers.PropertyCollection> dataModelProps, LayerModel layer)
{
_property = property;
_layer = layer;
// Look for the existing property model
LayerDynamicPropertiesModel = layer.LayerProperties.FirstOrDefault(lp => lp.LayerProperty == property);
if (LayerDynamicPropertiesModel == null)
LayerDynamicPropertiesModelProposed = new LayerDynamicPropertiesModel();
var original = _layer.LayerProperties.FirstOrDefault(lp => lp.LayerProperty == _property);
if (original == null)
{
// If it doesn't exist, create a new one
LayerDynamicPropertiesModel = new LayerDynamicPropertiesModel
{
LayerProperty = property,
LayerPropertyType = LayerPropertyType.None
};
// Add it to the layer
layer.LayerProperties.Add(LayerDynamicPropertiesModel);
LayerDynamicPropertiesModelProposed.LayerProperty = property;
LayerDynamicPropertiesModelProposed.LayerPropertyType = LayerPropertyType.None;
}
else
{
GeneralHelpers.CopyProperties(LayerDynamicPropertiesModelProposed, original);
}
Name = property + ":";
@ -41,9 +45,11 @@ namespace Artemis.ViewModels.LayerEditor
PropertyChanged += OnPropertyChanged;
SelectedTarget = dataModelProps.FirstOrDefault(p => p.Path == LayerDynamicPropertiesModel.GameProperty);
SelectedSource = dataModelProps.FirstOrDefault(p => p.Path == LayerDynamicPropertiesModel.PercentageSource);
LayerPropertyType = LayerDynamicPropertiesModel.LayerPropertyType;
SelectedTarget =
dataModelProps.FirstOrDefault(p => p.Path == LayerDynamicPropertiesModelProposed.GameProperty);
SelectedSource =
dataModelProps.FirstOrDefault(p => p.Path == LayerDynamicPropertiesModelProposed.PercentageSource);
LayerPropertyType = LayerDynamicPropertiesModelProposed.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
{
if (Equals(value, _layerDynamicPropertiesModel)) return;
_layerDynamicPropertiesModel = value;
NotifyOfPropertyChange(() => LayerDynamicPropertiesModel);
if (Equals(value, _layerDynamicPropertiesModelProposed)) return;
_layerDynamicPropertiesModelProposed = value;
NotifyOfPropertyChange(() => LayerDynamicPropertiesModelProposed);
}
}
@ -130,15 +136,24 @@ namespace Artemis.ViewModels.LayerEditor
private void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "SelectedTarget")
LayerDynamicPropertiesModel.GameProperty = SelectedTarget.Path;
LayerDynamicPropertiesModelProposed.GameProperty = SelectedTarget.Path;
if (e.PropertyName == "SelectedSource")
LayerDynamicPropertiesModel.PercentageSource = SelectedSource.Path;
LayerDynamicPropertiesModelProposed.PercentageSource = SelectedSource.Path;
if (e.PropertyName == "LayerPropertyType")
{
LayerDynamicPropertiesModel.LayerPropertyType = LayerPropertyType;
UserSourceIsVisible = (LayerPropertyType == LayerPropertyType.PercentageOf);
SourcesIsVisible = (LayerPropertyType == LayerPropertyType.PercentageOfProperty);
LayerDynamicPropertiesModelProposed.LayerPropertyType = LayerPropertyType;
UserSourceIsVisible = LayerPropertyType == LayerPropertyType.PercentageOf;
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 bool _wasEnabled;
private LayerModel _layer;
private LayerModel _proposedLayer;
private LayerPropertiesModel _proposedProperties;
public LayerEditorViewModel(KeyboardProvider activeKeyboard, LayerModel layer)
@ -24,12 +25,15 @@ namespace Artemis.ViewModels.LayerEditor
_wasEnabled = layer.Enabled;
Layer = layer;
ProposedLayer = new LayerModel();
GeneralHelpers.CopyProperties(ProposedLayer, Layer);
Layer.Enabled = false;
DataModelProps = new BindableCollection<GeneralHelpers.PropertyCollection>();
ProposedProperties = new LayerPropertiesModel();
DataModelProps.AddRange(GeneralHelpers.GenerateTypeMap<T>());
LayerConditionVms = new BindableCollection<LayerConditionViewModel<T>>(
layer.LayerConditions.Select(c => new LayerConditionViewModel<T>(this, c, DataModelProps)));
LayerConditionVms =
new BindableCollection<LayerConditionViewModel<T>>(
layer.LayerConditions.Select(c => new LayerConditionViewModel<T>(this, c, DataModelProps)));
HeightProperties = new LayerDynamicPropertiesViewModel("Height", DataModelProps, layer);
WidthProperties = new LayerDynamicPropertiesViewModel("Width", 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
{
get { return _proposedProperties; }
@ -131,6 +146,9 @@ namespace Artemis.ViewModels.LayerEditor
public void Apply()
{
GeneralHelpers.CopyProperties(Layer.UserProps, ProposedProperties);
HeightProperties.Apply();
WidthProperties.Apply();
OpacityProperties.Apply();
}
public void DeleteCondition(LayerConditionViewModel<T> layerConditionViewModel,

View File

@ -81,7 +81,7 @@
<!-- PercentageOf -->
<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>
</Grid>
</UserControl>