diff --git a/Source/LibationWinForms/AvaloniaUI/Views/MainWindow/MainWindow.axaml b/Source/LibationWinForms/AvaloniaUI/Views/MainWindow/MainWindow.axaml
index 85355abf..22204a5a 100644
--- a/Source/LibationWinForms/AvaloniaUI/Views/MainWindow/MainWindow.axaml
+++ b/Source/LibationWinForms/AvaloniaUI/Views/MainWindow/MainWindow.axaml
@@ -33,7 +33,7 @@
diff --git a/Source/LibationWinForms/AvaloniaUI/Views/ProcessQueueControl2.axaml.cs b/Source/LibationWinForms/AvaloniaUI/Views/ProcessQueueControl2.axaml.cs
index fd0d7eb9..9a36b9b4 100644
--- a/Source/LibationWinForms/AvaloniaUI/Views/ProcessQueueControl2.axaml.cs
+++ b/Source/LibationWinForms/AvaloniaUI/Views/ProcessQueueControl2.axaml.cs
@@ -1,16 +1,12 @@
using ApplicationServices;
-using Avalonia;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Markup.Xaml;
-using Avalonia.Threading;
using DataLayer;
using LibationWinForms.AvaloniaUI.ViewModels;
using System;
using System.Collections.Generic;
-using System.Collections.ObjectModel;
using System.Linq;
-using System.Threading.Tasks;
namespace LibationWinForms.AvaloniaUI.Views
{
@@ -20,7 +16,6 @@ namespace LibationWinForms.AvaloniaUI.Views
private ItemsRepeater _repeater;
private ScrollViewer _scroller;
private int _selectedIndex;
- private Random _random = new Random(0);
private TrackedQueue2 Queue => _viewModel.Items;
@@ -101,6 +96,8 @@ namespace LibationWinForms.AvaloniaUI.Views
AvaloniaXamlLoader.Load(this);
}
+ #region Add Books to Queue
+
private bool isBookInQueue(LibraryBook libraryBook)
=> Queue.Any(b => b?.LibraryBook?.Book?.AudibleProductId == libraryBook.Book.AudibleProductId);
@@ -165,6 +162,8 @@ namespace LibationWinForms.AvaloniaUI.Views
_viewModel.AddToQueue(procs);
}
+ #endregion
+
#region Control event handlers
private async void ProcessBookControl2_CancelButtonClicked(ProcessBook2 item)
diff --git a/Source/LibationWinForms/AvaloniaUI/Views/ProductsGrid/ProductsDisplay2.ColumnCustomization.xaml.cs b/Source/LibationWinForms/AvaloniaUI/Views/ProductsGrid/ProductsDisplay2.ColumnCustomization.xaml.cs
index 50fe68d2..ddade650 100644
--- a/Source/LibationWinForms/AvaloniaUI/Views/ProductsGrid/ProductsDisplay2.ColumnCustomization.xaml.cs
+++ b/Source/LibationWinForms/AvaloniaUI/Views/ProductsGrid/ProductsDisplay2.ColumnCustomization.xaml.cs
@@ -1,13 +1,124 @@
-using System;
+using Avalonia.Controls;
+using LibationFileManager;
+using System;
using System.Collections.Generic;
using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
namespace LibationWinForms.AvaloniaUI.Views.ProductsGrid
{
public partial class ProductsDisplay2
{
- private void Configure_ColumnCustomization() { }
+ ContextMenu contextMenuStrip1 = new ContextMenu();
+ private void Configure_ColumnCustomization()
+ {
+ if (Design.IsDesignMode) return;
+
+ productsGrid.ColumnDisplayIndexChanged += ProductsGrid_ColumnDisplayIndexChanged;
+
+ var config = Configuration.Instance;
+ var gridColumnsVisibilities = config.GridColumnsVisibilities;
+ var displayIndices = config.GridColumnsDisplayIndices;
+
+ var contextMenu = new ContextMenu();
+ contextMenu.MenuClosed += ContextMenu_MenuClosed;
+ contextMenu.ContextMenuOpening += ContextMenu_ContextMenuOpening;
+ List menuItems = new();
+ contextMenu.Items = menuItems;
+
+ menuItems.Add(new MenuItem { Header = "Show / Hide Columns" });
+ menuItems.Add(new MenuItem { Header = "-" });
+
+ var HeaderCell_PI = typeof(DataGridColumn).GetProperty("HeaderCell", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
+
+ foreach (var column in productsGrid.Columns)
+ {
+ var itemName = column.SortMemberPath;
+
+ if (itemName == nameof(ViewModels.GridEntry2.Remove))
+ continue;
+
+ menuItems.Add
+ (
+ new MenuItem
+ {
+ Header = ((string)column.Header).Replace((char)0xa,' '),
+ Tag = column,
+ Margin = new Avalonia.Thickness(6 ,0),
+ Icon = new CheckBox
+ {
+ Width = 50,
+ }
+ }
+ );
+
+ var headercell = HeaderCell_PI.GetValue(column) as DataGridColumnHeader;
+ headercell.ContextMenu = contextMenu;
+
+ column.IsVisible = gridColumnsVisibilities.GetValueOrDefault(itemName, true);
+ }
+
+ //We must set DisplayIndex properties in ascending order
+ foreach (var itemName in displayIndices.OrderBy(i => i.Value).Select(i => i.Key))
+ {
+ if (!productsGrid.Columns.Any(c => c.SortMemberPath == itemName))
+ continue;
+
+ var column = productsGrid.Columns
+ .Single(c => c.SortMemberPath == itemName);
+
+ column.DisplayIndex = displayIndices.GetValueOrDefault(itemName, productsGrid.Columns.IndexOf(column));
+ }
+
+ //Remove column is always first;
+ removeGVColumn.DisplayIndex = 0;
+ removeGVColumn.CanUserReorder = false;
+ }
+
+ private void ContextMenu_ContextMenuOpening(object sender, System.ComponentModel.CancelEventArgs e)
+ {
+ var contextMenu = sender as ContextMenu;
+ foreach (var mi in contextMenu.Items.OfType