From 7b7e1d857476784a5627f5d314530145fdcef5cf Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Thu, 14 Jul 2022 21:14:40 -0600 Subject: [PATCH] Further sorting and remove books refinements --- .../ViewModels/MainWindowViewModel.cs | 7 ++- .../AvaloniaUI/ViewModels/RowComparer.cs | 9 ++- .../AvaloniaUI/ViewModels/SeriesEntrys2.cs | 2 +- .../MainWindow.RemoveBooks.axaml.cs | 14 ++--- .../Views/MainWindow/MainWindow.axaml | 6 +- .../Views/MainWindow/MainWindow.axaml.cs | 10 +-- .../ProductsDisplay2.Display.xaml.cs | 19 +++++- .../ProductsDisplay2.ScanAndRemove.xaml.cs | 63 ++++++++++++------- .../ProductsDisplay2.Sorting.xaml.cs | 5 +- 9 files changed, 89 insertions(+), 46 deletions(-) diff --git a/Source/LibationWinForms/AvaloniaUI/ViewModels/MainWindowViewModel.cs b/Source/LibationWinForms/AvaloniaUI/ViewModels/MainWindowViewModel.cs index 5edcb26b..5da5deb5 100644 --- a/Source/LibationWinForms/AvaloniaUI/ViewModels/MainWindowViewModel.cs +++ b/Source/LibationWinForms/AvaloniaUI/ViewModels/MainWindowViewModel.cs @@ -3,10 +3,15 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using ReactiveUI; namespace LibationWinForms.AvaloniaUI.ViewModels { - public class MainWindowViewModel + public class MainWindowViewModel : ViewModelBase { + private string _removeBooksButtonText = "Remove # Books from Libation"; + private bool _removeButtonsVisible = true; + public string RemoveBooksButtonText { get => _removeBooksButtonText; set => this.RaiseAndSetIfChanged(ref _removeBooksButtonText, value); } + public bool RemoveButtonsVisible { get => _removeButtonsVisible; set => this.RaiseAndSetIfChanged(ref _removeButtonsVisible, value); } } } diff --git a/Source/LibationWinForms/AvaloniaUI/ViewModels/RowComparer.cs b/Source/LibationWinForms/AvaloniaUI/ViewModels/RowComparer.cs index 9738a18c..76532a30 100644 --- a/Source/LibationWinForms/AvaloniaUI/ViewModels/RowComparer.cs +++ b/Source/LibationWinForms/AvaloniaUI/ViewModels/RowComparer.cs @@ -13,7 +13,7 @@ namespace LibationWinForms.AvaloniaUI.ViewModels /// sorted by series index, ascending. Stable sorting is achieved by comparing the GridEntry.ListIndex /// properties when 2 items compare equal. /// - internal class RowComparer : IComparer + internal class RowComparer : IComparer, IComparer { private static readonly PropertyInfo HeaderCellPi = typeof(DataGridColumn).GetProperty("HeaderCell", BindingFlags.NonPublic | BindingFlags.Instance); private static readonly PropertyInfo CurrentSortingStatePi = typeof(DataGridColumnHeader).GetProperty("CurrentSortingState", BindingFlags.NonPublic | BindingFlags.Instance); @@ -81,7 +81,7 @@ namespace LibationWinForms.AvaloniaUI.ViewModels return geA.SeriesIndex.CompareTo(geB.SeriesIndex) * (SortDirection is ListSortDirection.Ascending ? 1 : -1); //a and b are children of different series. - return Compare(parentA, parentB); + return InternalCompare(parentA, parentB); } //Avalonia doesn't expose the column's CurrentSortingState, so we must get it through reflection @@ -102,5 +102,10 @@ namespace LibationWinForms.AvaloniaUI.ViewModels else return compareResult; } + + public int Compare(GridEntry2 x, GridEntry2 y) + { + return Compare((object)x, y); + } } } diff --git a/Source/LibationWinForms/AvaloniaUI/ViewModels/SeriesEntrys2.cs b/Source/LibationWinForms/AvaloniaUI/ViewModels/SeriesEntrys2.cs index 4cec5386..886131e8 100644 --- a/Source/LibationWinForms/AvaloniaUI/ViewModels/SeriesEntrys2.cs +++ b/Source/LibationWinForms/AvaloniaUI/ViewModels/SeriesEntrys2.cs @@ -55,7 +55,7 @@ namespace LibationWinForms.AvaloniaUI.ViewModels public SeriesEntrys2(LibraryBook parent, IEnumerable children) { - Liberate = new LiberateButtonStatus2(IsSeries); + Liberate = new LiberateButtonStatus2(IsSeries) { Expanded = true }; SeriesIndex = -1; LibraryBook = parent; diff --git a/Source/LibationWinForms/AvaloniaUI/Views/MainWindow/MainWindow.RemoveBooks.axaml.cs b/Source/LibationWinForms/AvaloniaUI/Views/MainWindow/MainWindow.RemoveBooks.axaml.cs index b108aaea..9d1a0abc 100644 --- a/Source/LibationWinForms/AvaloniaUI/Views/MainWindow/MainWindow.RemoveBooks.axaml.cs +++ b/Source/LibationWinForms/AvaloniaUI/Views/MainWindow/MainWindow.RemoveBooks.axaml.cs @@ -10,8 +10,10 @@ namespace LibationWinForms.AvaloniaUI.Views { private void Configure_RemoveBooks() { - removeBooksBtn.IsVisible = false; - doneRemovingBtn.IsVisible = false; + if (Avalonia.Controls.Design.IsDesignMode) + return; + + _viewModel.RemoveButtonsVisible = false; removeLibraryBooksToolStripMenuItem.Click += removeLibraryBooksToolStripMenuItem_Click; } @@ -22,8 +24,7 @@ namespace LibationWinForms.AvaloniaUI.Views public async void doneRemovingBtn_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e) { - removeBooksBtn.IsVisible = false; - doneRemovingBtn.IsVisible = false; + _viewModel.RemoveButtonsVisible = false; productsDisplay.CloseRemoveBooksColumn(); @@ -80,15 +81,14 @@ namespace LibationWinForms.AvaloniaUI.Views filterSearchTb.IsVisible = false; productsDisplay.Filter(null); - removeBooksBtn.IsVisible = true; - doneRemovingBtn.IsVisible = true; + _viewModel.RemoveButtonsVisible = true; await productsDisplay.ScanAndRemoveBooksAsync(accounts); } public void productsDisplay_RemovableCountChanged(object sender, int removeCount) { - removeBooksBtn.Content = removeCount switch + _viewModel.RemoveBooksButtonText = removeCount switch { 1 => "Remove 1 Book from Libation", _ => $"Remove {removeCount} Books from Libation" diff --git a/Source/LibationWinForms/AvaloniaUI/Views/MainWindow/MainWindow.axaml b/Source/LibationWinForms/AvaloniaUI/Views/MainWindow/MainWindow.axaml index 864fc60f..61053fe3 100644 --- a/Source/LibationWinForms/AvaloniaUI/Views/MainWindow/MainWindow.axaml +++ b/Source/LibationWinForms/AvaloniaUI/Views/MainWindow/MainWindow.axaml @@ -9,7 +9,7 @@ xmlns:controls="clr-namespace:LibationWinForms.AvaloniaUI.Controls" mc:Ignorable="d" d:DesignWidth="1850" d:DesignHeight="700" x:Class="LibationWinForms.AvaloniaUI.Views.MainWindow" - Title="MainWindow" + Title="Libation" Name="Form1" Icon="/AvaloniaUI/Assets/glass-with-glow_16.png"> @@ -128,8 +128,8 @@ -