diff --git a/Source/FileManager/ReplacementCharacters.cs b/Source/FileManager/ReplacementCharacters.cs index 550a54c6..cc93451b 100644 --- a/Source/FileManager/ReplacementCharacters.cs +++ b/Source/FileManager/ReplacementCharacters.cs @@ -12,10 +12,10 @@ namespace FileManager public const int FIXED_COUNT = 6; internal const char QUOTE_MARK = '"'; - [JsonIgnore] public bool Mandatory { get; internal set; } + [JsonIgnore] public bool Mandatory { get; set; } [JsonProperty] public char CharacterToReplace { get; private set; } - [JsonProperty] public string ReplacementString { get; set; } - [JsonProperty] public string Description { get; private set; } + [JsonProperty] public string ReplacementString { get; private set; } + [JsonProperty] public string Description { get; set; } public override string ToString() => $"{CharacterToReplace} → {ReplacementString} ({Description})"; public Replacement(char charToReplace, string replacementString, string description) @@ -169,9 +169,9 @@ namespace FileManager public static bool ContainsInvalidPathChar(string path) - => path.Any(c => invalidChars.Contains(c)); + => path.Any(c => invalidChars?.Contains(c) == true); public static bool ContainsInvalidFilenameChar(string path) - => path.Any(c => invalidChars.Concat(new char[] { '\\', '/' }).Contains(c)); + => path.Any(c => invalidChars?.Concat(new char[] { '\\', '/' })?.Contains(c) == true); public string ReplaceInvalidFilenameChars(string fileName) { diff --git a/Source/HangoverAvalonia/HangoverAvalonia.csproj b/Source/HangoverAvalonia/HangoverAvalonia.csproj index 83d9607b..999e7fe2 100644 --- a/Source/HangoverAvalonia/HangoverAvalonia.csproj +++ b/Source/HangoverAvalonia/HangoverAvalonia.csproj @@ -63,11 +63,13 @@ - - + + + - - + + + diff --git a/Source/LibationAvalonia/App.axaml b/Source/LibationAvalonia/App.axaml index cbfd5ab2..9e8d399d 100644 --- a/Source/LibationAvalonia/App.axaml +++ b/Source/LibationAvalonia/App.axaml @@ -8,9 +8,9 @@ - - - + + + diff --git a/Source/LibationAvalonia/App.axaml.cs b/Source/LibationAvalonia/App.axaml.cs index b4e42ae0..a7dcc392 100644 --- a/Source/LibationAvalonia/App.axaml.cs +++ b/Source/LibationAvalonia/App.axaml.cs @@ -42,9 +42,6 @@ namespace LibationAvalonia { LoadStyles(); - var SEGOEUI = new Typeface(new FontFamily(new Uri("avares://Libation/Assets/WINGDING.TTF"), "SEGOEUI_Local")); - var gtf = FontManager.Current.GetOrAddGlyphTypeface(SEGOEUI); - if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { if (SetupRequired) diff --git a/Source/LibationAvalonia/Assets/SEGOEUI.TTF b/Source/LibationAvalonia/Assets/SEGOEUI.TTF deleted file mode 100644 index 0f52cbd9..00000000 Binary files a/Source/LibationAvalonia/Assets/SEGOEUI.TTF and /dev/null differ diff --git a/Source/LibationAvalonia/Assets/WINGDING.TTF b/Source/LibationAvalonia/Assets/WINGDING.TTF deleted file mode 100644 index 6e38f7fd..00000000 Binary files a/Source/LibationAvalonia/Assets/WINGDING.TTF and /dev/null differ diff --git a/Source/LibationAvalonia/Controls/LinkLabel.axaml.cs b/Source/LibationAvalonia/Controls/LinkLabel.axaml.cs index 0d75021e..30b0d74a 100644 --- a/Source/LibationAvalonia/Controls/LinkLabel.axaml.cs +++ b/Source/LibationAvalonia/Controls/LinkLabel.axaml.cs @@ -15,15 +15,15 @@ namespace LibationAvalonia.Controls { InitializeComponent(); } - protected override void OnPointerEnter(PointerEventArgs e) + protected override void OnPointerEntered(PointerEventArgs e) { this.Cursor = HandCursor; - base.OnPointerEnter(e); + base.OnPointerEntered(e); } - protected override void OnPointerLeave(PointerEventArgs e) + protected override void OnPointerExited(PointerEventArgs e) { this.Cursor = Cursor.Default; - base.OnPointerLeave(e); + base.OnPointerExited(e); } private void InitializeComponent() diff --git a/Source/LibationAvalonia/Dialogs/BookDetailsDialog.axaml.cs b/Source/LibationAvalonia/Dialogs/BookDetailsDialog.axaml.cs index 180c736a..a48d2075 100644 --- a/Source/LibationAvalonia/Dialogs/BookDetailsDialog.axaml.cs +++ b/Source/LibationAvalonia/Dialogs/BookDetailsDialog.axaml.cs @@ -10,6 +10,7 @@ using LibationAvalonia.ViewModels; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; +using System; namespace LibationAvalonia.Dialogs { @@ -54,7 +55,7 @@ namespace LibationAvalonia.Dialogs base.SaveAndClose(); } - public void GoToAudible_Tapped(object sender, Avalonia.Interactivity.RoutedEventArgs e) + public void GoToAudible_Tapped(object sender, Avalonia.Input.TappedEventArgs e) { var locale = AudibleApi.Localization.Get(_libraryBook.Book.Locale); var link = $"https://www.audible.{locale.TopDomain}/pd/{_libraryBook.Book.AudibleProductId}"; diff --git a/Source/LibationAvalonia/Dialogs/EditReplacementChars.axaml b/Source/LibationAvalonia/Dialogs/EditReplacementChars.axaml index 84d7a3e5..e23fb97d 100644 --- a/Source/LibationAvalonia/Dialogs/EditReplacementChars.axaml +++ b/Source/LibationAvalonia/Dialogs/EditReplacementChars.axaml @@ -2,60 +2,71 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" + mc:Ignorable="d" d:DesignWidth="500" d:DesignHeight="450" + MinWidth="500" MinHeight="450" x:Class="LibationAvalonia.Dialogs.EditReplacementChars" - Title="EditReplacementChars"> + Title="Illegal Character Replacement" + Icon="/Assets/libation.ico"> - + + + + + + + + + + + + + + + + + + - - diff --git a/Source/LibationAvalonia/Dialogs/SearchSyntaxDialog.axaml.cs b/Source/LibationAvalonia/Dialogs/SearchSyntaxDialog.axaml.cs index 7ea20a55..e05f0da4 100644 --- a/Source/LibationAvalonia/Dialogs/SearchSyntaxDialog.axaml.cs +++ b/Source/LibationAvalonia/Dialogs/SearchSyntaxDialog.axaml.cs @@ -37,10 +37,13 @@ Find books that you haven't rated: " + string.Join("\r\n", LibationSearchEngine.SearchEngine.GetSearchBoolFields()); IdFields = @" -Alice's Adventures in Wonderland (ID: B015D78L0U) +Alice's Adventures in + Wonderland (ID: B015D78L0U) + id:B015D78L0U -All of these are synonyms for the ID field +All of these are synonyms +for the ID field " + string.Join("\r\n", LibationSearchEngine.SearchEngine.GetSearchIdFields()); diff --git a/Source/LibationAvalonia/Dialogs/SettingsDialog.axaml b/Source/LibationAvalonia/Dialogs/SettingsDialog.axaml index 8468cc15..0224c16c 100644 --- a/Source/LibationAvalonia/Dialogs/SettingsDialog.axaml +++ b/Source/LibationAvalonia/Dialogs/SettingsDialog.axaml @@ -23,12 +23,12 @@ + - - + - + + + + + + + + + @@ -51,7 +64,7 @@ - + @@ -63,7 +76,7 @@ - + @@ -75,7 +88,7 @@ - + @@ -87,7 +100,7 @@ - + @@ -99,7 +112,7 @@ - + @@ -111,7 +124,7 @@ - + @@ -123,7 +136,7 @@ - + @@ -135,7 +148,7 @@ - + @@ -147,7 +160,7 @@ - + @@ -159,7 +172,7 @@ - + @@ -171,7 +184,7 @@ - + @@ -183,7 +196,7 @@ - + diff --git a/Source/LibationAvalonia/Views/ProductsDisplay.axaml.cs b/Source/LibationAvalonia/Views/ProductsDisplay.axaml.cs index b5a7c532..bd4e7fae 100644 --- a/Source/LibationAvalonia/Views/ProductsDisplay.axaml.cs +++ b/Source/LibationAvalonia/Views/ProductsDisplay.axaml.cs @@ -10,6 +10,7 @@ using LibationAvalonia.Dialogs; using System; using System.Collections.Generic; using System.Linq; +using Avalonia.Interactivity; namespace LibationAvalonia.Views { @@ -27,32 +28,33 @@ namespace LibationAvalonia.Views if (Design.IsDesignMode) { using var context = DbContexts.GetContext(); - List sampleEntries = new() + List sampleEntries = new() { - new LibraryBookEntry(context.GetLibraryBook_Flat_NoTracking("B017V4IM1G")), - new LibraryBookEntry(context.GetLibraryBook_Flat_NoTracking("B017V4IWVG")), - new LibraryBookEntry(context.GetLibraryBook_Flat_NoTracking("B017V4JA2Q")), - new LibraryBookEntry(context.GetLibraryBook_Flat_NoTracking("B017V4NUPO")), - new LibraryBookEntry(context.GetLibraryBook_Flat_NoTracking("B017V4NMX4")), - new LibraryBookEntry(context.GetLibraryBook_Flat_NoTracking("B017V4NOZ0")), - new LibraryBookEntry(context.GetLibraryBook_Flat_NoTracking("B017WJ5ZK6")), + //context.GetLibraryBook_Flat_NoTracking("B00DCD0OXU"), + context.GetLibraryBook_Flat_NoTracking("B017V4IM1G"), + context.GetLibraryBook_Flat_NoTracking("B017V4IWVG"), + context.GetLibraryBook_Flat_NoTracking("B017V4JA2Q"), + context.GetLibraryBook_Flat_NoTracking("B017V4NUPO"), + context.GetLibraryBook_Flat_NoTracking("B017V4NMX4"), + context.GetLibraryBook_Flat_NoTracking("B017V4NOZ0"), + context.GetLibraryBook_Flat_NoTracking("B017WJ5ZK6") }; - DataContext = new ProductsDisplayViewModel(sampleEntries); + + var pdvm = new ProductsDisplayViewModel(); + pdvm.DisplayBooks(sampleEntries); + DataContext = pdvm; + return; } Configure_ColumnCustomization(); + foreach (var column in productsGrid.Columns) { column.CustomSortComparer = new RowComparer(column); } } - private void ProductsGrid_Sorting(object sender, DataGridColumnEventArgs e) - { - _viewModel.Sort(e.Column); - } - private void RemoveColumn_PropertyChanged(object sender, AvaloniaPropertyChangedEventArgs e) { if (sender is DataGridColumn col && e.Property.Name == nameof(DataGridColumn.IsVisible)) @@ -62,11 +64,6 @@ namespace LibationAvalonia.Views } } - public void DataGrid_CopyToClipboard(object sender, DataGridRowClipboardEventArgs e) - { - - } - private void InitializeComponent() { AvaloniaXamlLoader.Load(this); @@ -188,6 +185,22 @@ namespace LibationAvalonia.Views #region Button Click Handlers + public void ContextMenuItem1_Click(object sender, Avalonia.Interactivity.RoutedEventArgs args) + { + var lbe = getBoundEntry(args.Source); + } + public void ContextMenuItem2_Click(object sender, Avalonia.Interactivity.RoutedEventArgs args) + { + var lbe = getBoundEntry(args.Source); + } + public void ContextMenuItem3_Click(object sender, Avalonia.Interactivity.RoutedEventArgs args) + { + var lbe = getBoundEntry(args.Source); + } + + private static LibraryBookEntry getBoundEntry(IInteractive source) + => (source is IStyledElement se && se.DataContext is LibraryBookEntry lbe ? lbe : null); + public void LiberateButton_Click(object sender, Avalonia.Interactivity.RoutedEventArgs args) { var button = args.Source as Button; @@ -198,7 +211,7 @@ namespace LibationAvalonia.Views //Expanding and collapsing reset the list, which will cause focus to shift //to the topright cell. Reset focus onto the clicked button's cell. - ((sender as Control).Parent.Parent as DataGridCell)?.Focus(); + (sender as Button).Parent?.Focus(); } else if (button.DataContext is LibraryBookEntry lbEntry) { @@ -212,12 +225,11 @@ namespace LibationAvalonia.Views imageDisplayDialog.Close(); } - public void Cover_Click(object sender, Avalonia.Interactivity.RoutedEventArgs args) + public void Cover_Click(object sender, Avalonia.Input.TappedEventArgs args) { if (sender is not Image tblock || tblock.DataContext is not GridEntry gEntry) return; - if (imageDisplayDialog is null || !imageDisplayDialog.IsVisible) { imageDisplayDialog = new ImageDisplayDialog(); @@ -252,7 +264,7 @@ namespace LibationAvalonia.Views imageDisplayDialog.Show(); } - public void Description_Click(object sender, Avalonia.Interactivity.RoutedEventArgs args) + public void Description_Click(object sender, Avalonia.Input.TappedEventArgs args) { if (sender is TextBlock tblock && tblock.DataContext is GridEntry gEntry) {