Started work on layer visualization

This commit is contained in:
SpoinkyNL committed 2019-12-16 22:57:13 +01:00
1 parent dda3cf442d
commit 2afb1ea284
5 files changed
+192 -1

No files matched your search

@@ -42,14 +42,17 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization
});
ApplySurfaceConfiguration(surfaceService.ActiveSurface);
ApplyActiveProfile();
CreateUpdateTrigger();
ActivateToolByIndex(0);
_profileEditorService.SelectedProfileChanged += OnSelectedProfileChanged;
_profileEditorService.SelectedProfileElementChanged += OnSelectedProfileElementChanged;
_profileEditorService.SelectedProfileElementUpdated += OnSelectedProfileElementChanged;
_profileEditorService.SelectedProfileElementUpdated += OnSelectedProfileElementUpdated;
eventAggregator.Subscribe(this);
}
public bool IsInitializing { get; private set; }
public ObservableCollection<CanvasViewModel> CanvasViewModels { get; set; }
public PanZoomViewModel PanZoomViewModel { get; set; }
@@ -116,6 +119,31 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization
ApplySurfaceConfiguration(e.Surface);
}
private void ApplyActiveProfile()
{
Execute.PostToUIThread(() =>
{
lock (CanvasViewModels)
{
var layerViewModels = CanvasViewModels.Where(vm => vm is ProfileLayerViewModel).Cast<ProfileLayerViewModel>().ToList();
var layers = _profileEditorService.SelectedProfile?.GetAllLayers() ?? new List<Layer>();
// Add new layers missing a VM
foreach (var layer in layers)
{
if (layerViewModels.All(vm => vm.Layer != layer))
CanvasViewModels.Add(new ProfileLayerViewModel(layer));
}
// Remove layers that no longer exist
var toRemove = layerViewModels.Where(vm => !layers.Contains(vm.Layer));
foreach (var profileLayerViewModel in toRemove)
CanvasViewModels.Remove(profileLayerViewModel);
}
});
}
private void ApplySurfaceConfiguration(ArtemisSurface surface)
{
var devices = new List<ArtemisDevice>();
@@ -324,12 +352,24 @@ namespace Artemis.UI.Screens.Module.ProfileEditor.Visualization
UpdateLedsDimStatus();
}
private void OnSelectedProfileChanged(object sender, EventArgs e)
{
ApplyActiveProfile();
}
private void OnSelectedProfileElementChanged(object sender, EventArgs e)
{
UpdateLedsDimStatus();
CanApplyToLayer = _profileEditorService.SelectedProfileElement is Layer;
}
private void OnSelectedProfileElementUpdated(object sender, EventArgs e)
{
ApplyActiveProfile();
UpdateLedsDimStatus();
CanApplyToLayer = _profileEditorService.SelectedProfileElement is Layer;
}
public void Handle(MainWindowFocusChangedEvent message)
{
if (PauseRenderingOnFocusLoss == null || ScreenState != ScreenState.Active)