Data bindings - Fixed some conversion issues

Data bindings - Started hooking up the UI
This commit is contained in:
Robert committed 2020-09-04 23:12:48 +02:00
1 parent 59e1f37aec
commit 18225ca6fa
16 files changed
+357 -90

No files matched your search

@@ -6,42 +6,45 @@ using System.Threading.Tasks;
using System.Timers;
using Artemis.Core;
using Artemis.Core.Services;
using Artemis.UI.Ninject.Factories;
using Artemis.UI.Shared;
using Artemis.UI.Shared.Services;
using Artemis.UI.Utilities;
using Stylet;
namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings
{
public class DataBindingViewModel : PropertyChangedBase
{
private readonly IDataModelService _dataModelService;
private readonly IDataModelUIService _dataModelUIService;
private readonly IDataBindingsVmFactory _dataBindingsVmFactory;
private readonly IProfileEditorService _profileEditorService;
private readonly ISettingsService _settingsService;
private readonly Timer _updateTimer;
private DataBinding _dataBinding;
private bool _isDataBindingEnabled;
private DataModelPropertiesViewModel _sourceDataModel;
private DataModelVisualizationViewModel _selectedSourceProperty;
private bool _sourceDataModelOpen;
private object _testInputValue;
private object _testResultValue;
public DataBindingViewModel(
BaseLayerProperty layerProperty,
public DataBindingViewModel(BaseLayerProperty layerProperty,
PropertyInfo targetProperty,
IProfileEditorService profileEditorService,
IDataModelUIService dataModelUIService,
IDataModelService dataModelService,
ISettingsService settingsService)
ISettingsService settingsService,
IDataBindingsVmFactory dataBindingsVmFactory)
{
_profileEditorService = profileEditorService;
_dataModelUIService = dataModelUIService;
_dataModelService = dataModelService;
_settingsService = settingsService;
_dataBindingsVmFactory = dataBindingsVmFactory;
_updateTimer = new Timer(500);
LayerProperty = layerProperty;
TargetProperty = targetProperty;
DisplayName = TargetProperty.Name.ToUpper();
SelectSourcePropertyCommand = new DelegateCommand(ExecuteSelectSourceProperty);
ModifierViewModels = new BindableCollection<DataBindingModifierViewModel>();
DataBinding = layerProperty.DataBindings.FirstOrDefault(d => d.TargetProperty == targetProperty);
@@ -53,14 +56,18 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings
Task.Run(Initialize);
}
public bool SourceDataModelOpen { get; set; }
public DataModelPropertiesViewModel SourceDataModel
{
get => _sourceDataModel;
set => SetAndNotify(ref _sourceDataModel, value);
}
public bool SourceDataModelOpen
{
get => _sourceDataModelOpen;
set => SetAndNotify(ref _sourceDataModelOpen, value);
}
public DataModelVisualizationViewModel SelectedSourceProperty
{
get => _selectedSourceProperty;
@@ -73,6 +80,8 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings
public string DisplayName { get; }
public BindableCollection<DataBindingModifierViewModel> ModifierViewModels { get; }
public DelegateCommand SelectSourcePropertyCommand { get; }
public bool IsDataBindingEnabled
{
get => _isDataBindingEnabled;
@@ -122,7 +131,7 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings
var modifier = new DataBindingModifier(ProfileRightSideType.Dynamic);
DataBinding.AddModifier(modifier);
ModifierViewModels.Add(new DataBindingModifierViewModel(modifier));
ModifierViewModels.Add(_dataBindingsVmFactory.DataBindingModifierViewModel(modifier));
}
private void Initialize()
@@ -134,10 +143,24 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings
SourceDataModel.UpdateRequested += SourceDataModelOnUpdateRequested;
Update();
_updateTimer.Start();
_updateTimer.Elapsed += OnUpdateTimerOnElapsed;
}
private void Update()
{
if (DataBinding == null || SourceDataModel == null)
return;
// Determine the source property
if (DataBinding.SourceDataModel == null)
SelectedSourceProperty = null;
else
SelectedSourceProperty = SourceDataModel.GetChildByPath(DataBinding.SourceDataModel.PluginInfo.Guid, DataBinding.SourcePropertyPath);
}
private void SourceDataModelOnUpdateRequested(object sender, EventArgs e)
{
SourceDataModel.ApplyTypeFilter(true, DataBinding.TargetProperty.PropertyType);
@@ -145,10 +168,33 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings
private void OnUpdateTimerOnElapsed(object sender, ElapsedEventArgs e)
{
UpdateTestResult();
if (SourceDataModelOpen)
SourceDataModel.Update(_dataModelUIService);
}
private void UpdateTestResult()
{
var currentValue = SelectedSourceProperty?.GetCurrentValue();
if (currentValue == null && TargetProperty.PropertyType.IsValueType)
currentValue = Activator.CreateInstance(TargetProperty.PropertyType);
TestInputValue = Convert.ChangeType(currentValue, TargetProperty.PropertyType);
TestResultValue = DataBinding?.GetValue(TestInputValue);
}
public object TestInputValue
{
get => _testInputValue;
set => SetAndNotify(ref _testInputValue, value);
}
public object TestResultValue
{
get => _testResultValue;
set => SetAndNotify(ref _testResultValue, value);
}
private void UpdateModifierViewModels()
{
ModifierViewModels.Clear();
@@ -156,7 +202,18 @@ namespace Artemis.UI.Screens.ProfileEditor.LayerProperties.DataBindings
return;
foreach (var dataBindingModifier in DataBinding.Modifiers)
ModifierViewModels.Add(new DataBindingModifierViewModel(dataBindingModifier));
ModifierViewModels.Add(_dataBindingsVmFactory.DataBindingModifierViewModel(dataBindingModifier));
}
private void ExecuteSelectSourceProperty(object context)
{
if (!(context is DataModelVisualizationViewModel selected))
return;
DataBinding.UpdateSource(selected.DataModel, selected.PropertyPath);
_profileEditorService.UpdateSelectedProfileElement();
Update();
}
}
}