From 6cfa3ed4c12d79d6e0e94359f3207cea18574add Mon Sep 17 00:00:00 2001 From: Yan Maniez Date: Sun, 7 Apr 2019 18:41:18 +0200 Subject: [PATCH] Sub backgrounds --- .../AideDeJeu/Tools/NotifyTaskCompletion.cs | 22 ++++---- .../PlayerCharacterEditorViewModel.cs | 55 +++++++++++++++++++ .../ViewModels/PlayerCharacterViewModel.cs | 12 ++++ .../Views/PlayerCharacterEditorPage.xaml | 6 +- 4 files changed, 83 insertions(+), 12 deletions(-) diff --git a/AideDeJeu/AideDeJeu/Tools/NotifyTaskCompletion.cs b/AideDeJeu/AideDeJeu/Tools/NotifyTaskCompletion.cs index 02a75316..c93a5964 100644 --- a/AideDeJeu/AideDeJeu/Tools/NotifyTaskCompletion.cs +++ b/AideDeJeu/AideDeJeu/Tools/NotifyTaskCompletion.cs @@ -4,12 +4,12 @@ using System.Threading.Tasks; namespace AideDeJeu.Tools { - public sealed class NotifyTaskCompletion : INotifyPropertyChanged + public class NotifyTaskCompletion : INotifyPropertyChanged { public NotifyTaskCompletion(Task task) { Task = task; - if (!task.IsCompleted) + if (task != null && !task.IsCompleted) { var _ = WatchTaskAsync(task); } @@ -51,22 +51,22 @@ namespace AideDeJeu.Tools { get { - return (Task.Status == TaskStatus.RanToCompletion) ? Task.Result : default(TResult); + return (Task?.Status == TaskStatus.RanToCompletion) ? Task.Result : default(TResult); } } - public TaskStatus Status { get { return Task.Status; } } - public bool IsCompleted { get { return Task.IsCompleted; } } - public bool IsNotCompleted { get { return !Task.IsCompleted; } } + public TaskStatus Status { get { return Task?.Status ?? TaskStatus.Running; } } + public bool IsCompleted { get { return Task?.IsCompleted ?? false; } } + public bool IsNotCompleted { get { return Task?.IsCompleted == true ? false : true; } } public bool IsSuccessfullyCompleted { get { - return Task.Status == TaskStatus.RanToCompletion; + return Task?.Status == TaskStatus.RanToCompletion; } } - public bool IsCanceled { get { return Task.IsCanceled; } } - public bool IsFaulted { get { return Task.IsFaulted; } } - public AggregateException Exception { get { return Task.Exception; } } + public bool IsCanceled { get { return Task?.IsCanceled ?? false; } } + public bool IsFaulted { get { return Task?.IsFaulted ?? false; } } + public AggregateException Exception { get { return Task?.Exception; } } public Exception InnerException { get @@ -83,4 +83,4 @@ namespace AideDeJeu.Tools } public event PropertyChangedEventHandler PropertyChanged; } -} +} \ No newline at end of file diff --git a/AideDeJeu/AideDeJeu/ViewModels/PlayerCharacterEditorViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/PlayerCharacterEditorViewModel.cs index b0effa79..8e93ba02 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/PlayerCharacterEditorViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/PlayerCharacterEditorViewModel.cs @@ -16,6 +16,7 @@ namespace AideDeJeu.ViewModels Races = new NotifyTaskCompletion>(Task.Run(() => LoadRacesAsync())); Classes = new NotifyTaskCompletion>(Task.Run(() => LoadClassesAsync())); Backgrounds = new NotifyTaskCompletion>(Task.Run(() => LoadBackgroundsAsync())); + SubBackgrounds = new NotifyTaskCompletion>(null); } public NotifyTaskCompletion> Races { get; private set; } @@ -64,8 +65,45 @@ namespace AideDeJeu.ViewModels { SetProperty(ref _BackgroundSelectedIndex, value); SelectedPlayerCharacter.Background = Backgrounds.Result[_BackgroundSelectedIndex]; + SubBackgrounds = new NotifyTaskCompletion>(Task.Run(() => LoadSubBackgroundsAsync(SelectedPlayerCharacter.Background))); } } + + private NotifyTaskCompletion> _SubBackgrounds = null; + public NotifyTaskCompletion> SubBackgrounds + { + get + { + return _SubBackgrounds; + } + private set + { + SetProperty(ref _SubBackgrounds, value); + } + } + + private int _SubBackgroundSelectedIndex = 0; + public int SubBackgroundSelectedIndex + { + get + { + return _SubBackgroundSelectedIndex; + } + set + { + SetProperty(ref _SubBackgroundSelectedIndex, value); + if(_SubBackgroundSelectedIndex == 0) + { + SelectedPlayerCharacter.SubBackground = null; + SubBackgroundSelectedIndex = -1; + } + else if(_SubBackgroundSelectedIndex > 0) + { + SelectedPlayerCharacter.SubBackground = SubBackgrounds.Result[_SubBackgroundSelectedIndex]; + } + } + } + private PlayerCharacterViewModel _SelectedPlayerCharacter = new PlayerCharacterViewModel(); public PlayerCharacterViewModel SelectedPlayerCharacter { @@ -109,5 +147,22 @@ namespace AideDeJeu.ViewModels return await context.Backgrounds.Where(b => b.GetType() == typeof(BackgroundItem)).OrderBy(b => Tools.Helpers.RemoveDiacritics(b.Name)).ToListAsync().ConfigureAwait(false); } } + + public async Task> LoadSubBackgroundsAsync(BackgroundItem background) + { + if (background != null) + { + using (var context = await StoreViewModel.GetLibraryContextAsync()) + { + var list = await context.SubBackgrounds.Where(item => item.ParentLink == background.Id).OrderBy(b => Tools.Helpers.RemoveDiacritics(b.Name)).ToListAsync().ConfigureAwait(false); + list.Insert(0, null); + return list; + } + } + else + { + return new List(); + } + } } } diff --git a/AideDeJeu/AideDeJeu/ViewModels/PlayerCharacterViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/PlayerCharacterViewModel.cs index 1676662f..264faef3 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/PlayerCharacterViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/PlayerCharacterViewModel.cs @@ -43,5 +43,17 @@ namespace AideDeJeu.ViewModels SetProperty(ref _Background, value); } } + private SubBackgroundItem _SubBackground = null; + public SubBackgroundItem SubBackground + { + get + { + return _SubBackground; + } + set + { + SetProperty(ref _SubBackground, value); + } + } } } diff --git a/AideDeJeu/AideDeJeu/Views/PlayerCharacterEditorPage.xaml b/AideDeJeu/AideDeJeu/Views/PlayerCharacterEditorPage.xaml index 51b2911b..b0561cdf 100644 --- a/AideDeJeu/AideDeJeu/Views/PlayerCharacterEditorPage.xaml +++ b/AideDeJeu/AideDeJeu/Views/PlayerCharacterEditorPage.xaml @@ -53,8 +53,12 @@ + - + + + +