1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

Editor - Don't lock up UI while loading panels

This commit is contained in:
Robert 2022-07-31 17:49:15 +02:00
parent cde750548d
commit d1c1e6e894

View File

@ -10,6 +10,7 @@ using Artemis.UI.Screens.ProfileEditor.Properties;
using Artemis.UI.Screens.ProfileEditor.StatusBar; using Artemis.UI.Screens.ProfileEditor.StatusBar;
using Artemis.UI.Screens.ProfileEditor.VisualEditor; using Artemis.UI.Screens.ProfileEditor.VisualEditor;
using Artemis.UI.Shared.Services.ProfileEditor; using Artemis.UI.Shared.Services.ProfileEditor;
using Avalonia.Threading;
using DynamicData; using DynamicData;
using DynamicData.Binding; using DynamicData.Binding;
using ReactiveUI; using ReactiveUI;
@ -24,6 +25,11 @@ public class ProfileEditorViewModel : MainScreenViewModel
private ObservableAsPropertyHelper<ProfileConfiguration?>? _profileConfiguration; private ObservableAsPropertyHelper<ProfileConfiguration?>? _profileConfiguration;
private ObservableAsPropertyHelper<bool>? _suspendedEditing; private ObservableAsPropertyHelper<bool>? _suspendedEditing;
private ReadOnlyObservableCollection<IToolViewModel>? _tools; private ReadOnlyObservableCollection<IToolViewModel>? _tools;
private StatusBarViewModel _statusBarViewModel;
private DisplayConditionScriptViewModel _displayConditionScriptViewModel;
private PropertiesViewModel _propertiesViewModel;
private ProfileTreeViewModel _profileTreeViewModel;
private VisualEditorViewModel _visualEditorViewModel;
/// <inheritdoc /> /// <inheritdoc />
public ProfileEditorViewModel(IScreen hostScreen, public ProfileEditorViewModel(IScreen hostScreen,
@ -39,12 +45,6 @@ public class ProfileEditorViewModel : MainScreenViewModel
{ {
_profileEditorService = profileEditorService; _profileEditorService = profileEditorService;
_settingsService = settingsService; _settingsService = settingsService;
VisualEditorViewModel = visualEditorViewModel;
ProfileTreeViewModel = profileTreeViewModel;
PropertiesViewModel = propertiesViewModel;
DisplayConditionScriptViewModel = displayConditionScriptViewModel;
StatusBarViewModel = statusBarViewModel;
TitleBarViewModel = profileEditorTitleBarViewModel;
this.WhenActivated(d => this.WhenActivated(d =>
{ {
@ -59,17 +59,49 @@ public class ProfileEditorViewModel : MainScreenViewModel
.Subscribe() .Subscribe()
.DisposeWith(d); .DisposeWith(d);
Tools = tools; Tools = tools;
// Slow and steady wins the race (and doesn't lock up the entire UI)
Dispatcher.UIThread.Post(() => StatusBarViewModel = statusBarViewModel, DispatcherPriority.Loaded);
Dispatcher.UIThread.Post(() => VisualEditorViewModel = visualEditorViewModel, DispatcherPriority.Loaded);
Dispatcher.UIThread.Post(() => ProfileTreeViewModel = profileTreeViewModel, DispatcherPriority.Loaded);
Dispatcher.UIThread.Post(() => PropertiesViewModel = propertiesViewModel, DispatcherPriority.Loaded);
Dispatcher.UIThread.Post(() => DisplayConditionScriptViewModel = displayConditionScriptViewModel, DispatcherPriority.Loaded);
}); });
TitleBarViewModel = profileEditorTitleBarViewModel;
ToggleSuspend = ReactiveCommand.Create(ExecuteToggleSuspend); ToggleSuspend = ReactiveCommand.Create(ExecuteToggleSuspend);
ToggleAutoSuspend = ReactiveCommand.Create(ExecuteToggleAutoSuspend); ToggleAutoSuspend = ReactiveCommand.Create(ExecuteToggleAutoSuspend);
} }
public VisualEditorViewModel VisualEditorViewModel { get; } public VisualEditorViewModel VisualEditorViewModel
public ProfileTreeViewModel ProfileTreeViewModel { get; } {
public PropertiesViewModel PropertiesViewModel { get; } get => _visualEditorViewModel;
public DisplayConditionScriptViewModel DisplayConditionScriptViewModel { get; } set => RaiseAndSetIfChanged(ref _visualEditorViewModel, value);
public StatusBarViewModel StatusBarViewModel { get; } }
public ProfileTreeViewModel ProfileTreeViewModel
{
get => _profileTreeViewModel;
set => RaiseAndSetIfChanged(ref _profileTreeViewModel, value);
}
public PropertiesViewModel PropertiesViewModel
{
get => _propertiesViewModel;
set => RaiseAndSetIfChanged(ref _propertiesViewModel, value);
}
public DisplayConditionScriptViewModel DisplayConditionScriptViewModel
{
get => _displayConditionScriptViewModel;
set => RaiseAndSetIfChanged(ref _displayConditionScriptViewModel, value);
}
public StatusBarViewModel StatusBarViewModel
{
get => _statusBarViewModel;
set => RaiseAndSetIfChanged(ref _statusBarViewModel, value);
}
public ReadOnlyObservableCollection<IToolViewModel>? Tools public ReadOnlyObservableCollection<IToolViewModel>? Tools
{ {