mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 03:48:56 +00:00
Data bindings - Fixed some conversion issues
Data bindings - Started hooking up the UI
This commit is contained in:
1 parent
59e1f37aec
commit
18225ca6fa
16 files changed
+357
-90
No files matched your search
+69
-12
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user