Added layer properties to core and hooked it up with the UI

Implemented timeline caret scrolling logic
Added special treeview style for the layer properties tree
This commit is contained in:
Robert committed 2020-01-06 16:01:35 +01:00
1 parent 14065bffef
commit 59f0062c97
48 files changed
+618 -381

No files matched your search

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Stylet;
@@ -9,21 +10,46 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.LayerProperties.Timeline
public PropertyTimelineViewModel(LayerPropertiesViewModel layerPropertiesViewModel)
{
LayerPropertiesViewModel = layerPropertiesViewModel;
RailItemViewModels = new BindableCollection<PropertyTrackViewModel>();
PropertyTrackViewModels = new BindableCollection<PropertyTrackViewModel>();
}
public LayerPropertiesViewModel LayerPropertiesViewModel { get; }
public double Width { get; set; }
public BindableCollection<PropertyTrackViewModel> RailItemViewModels { get; set; }
public BindableCollection<PropertyTrackViewModel> PropertyTrackViewModels { get; set; }
public void UpdateEndTime()
{
// End time is the last keyframe + 10 sec
var lastKeyFrame = RailItemViewModels.SelectMany(r => r.KeyframeViewModels).OrderByDescending(t => t.Keyframe.Position).FirstOrDefault();
var lastKeyFrame = PropertyTrackViewModels.SelectMany(r => r.KeyframeViewModels).OrderByDescending(t => t.Keyframe.Position).FirstOrDefault();
var endTime = lastKeyFrame?.Keyframe.Position.Add(new TimeSpan(0, 0, 0, 10)) ?? TimeSpan.FromSeconds(10);
Width = endTime.TotalSeconds * LayerPropertiesViewModel.PixelsPerSecond;
// Ensure the caret isn't outside the end time
if (LayerPropertiesViewModel.CurrentTime > endTime)
LayerPropertiesViewModel.CurrentTime = endTime;
}
public void PopulateProperties(List<LayerPropertyViewModel> properties)
{
PropertyTrackViewModels.Clear();
foreach (var property in properties)
CreateViewModels(property);
UpdateEndTime();
}
private void CreateViewModels(LayerPropertyViewModel property)
{
PropertyTrackViewModels.Add(new PropertyTrackViewModel(this, property));
foreach (var child in property.Children)
CreateViewModels(child);
}
public void ClearProperties()
{
PropertyTrackViewModels.Clear();
}
}
}