More migrations to Avalonia 11.0.0-preview6
This commit is contained in:
parent
68af6a5ebb
commit
090871f50d
@ -1,5 +1,4 @@
|
|||||||
using NPOI.XWPF.UserModel;
|
using System;
|
||||||
using System;
|
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace AppScaffolding
|
namespace AppScaffolding
|
||||||
|
|||||||
@ -12,7 +12,6 @@ using DtoImporterService;
|
|||||||
using FileManager;
|
using FileManager;
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using NPOI.OpenXmlFormats.Spreadsheet;
|
|
||||||
using Serilog;
|
using Serilog;
|
||||||
using static DtoImporterService.PerfLogger;
|
using static DtoImporterService.PerfLogger;
|
||||||
|
|
||||||
|
|||||||
@ -1,24 +1,24 @@
|
|||||||
using Avalonia;
|
using ApplicationServices;
|
||||||
|
using Avalonia;
|
||||||
|
using Avalonia.Controls;
|
||||||
using Avalonia.Controls.ApplicationLifetimes;
|
using Avalonia.Controls.ApplicationLifetimes;
|
||||||
using Avalonia.Markup.Xaml;
|
using Avalonia.Markup.Xaml;
|
||||||
using Avalonia.Media;
|
using Avalonia.Media;
|
||||||
using LibationFileManager;
|
|
||||||
using LibationAvalonia.Views;
|
|
||||||
using System;
|
|
||||||
using Avalonia.Platform;
|
using Avalonia.Platform;
|
||||||
|
using Avalonia.Styling;
|
||||||
using LibationAvalonia.Dialogs;
|
using LibationAvalonia.Dialogs;
|
||||||
using System.Threading.Tasks;
|
using LibationAvalonia.Views;
|
||||||
|
using LibationFileManager;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using ApplicationServices;
|
using System.Threading.Tasks;
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Styling;
|
|
||||||
|
|
||||||
namespace LibationAvalonia
|
namespace LibationAvalonia
|
||||||
{
|
{
|
||||||
public class App : Application
|
public class App : Application
|
||||||
{
|
{
|
||||||
public static Window MainWindow { get;private set; }
|
public static Window MainWindow { get; private set; }
|
||||||
public static IBrush ProcessQueueBookFailedBrush { get; private set; }
|
public static IBrush ProcessQueueBookFailedBrush { get; private set; }
|
||||||
public static IBrush ProcessQueueBookCompletedBrush { get; private set; }
|
public static IBrush ProcessQueueBookCompletedBrush { get; private set; }
|
||||||
public static IBrush ProcessQueueBookCancelledBrush { get; private set; }
|
public static IBrush ProcessQueueBookCancelledBrush { get; private set; }
|
||||||
|
|||||||
@ -3,9 +3,6 @@ using Avalonia.Collections;
|
|||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using LibationAvalonia.ViewModels;
|
using LibationAvalonia.ViewModels;
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Controls
|
namespace LibationAvalonia.Controls
|
||||||
{
|
{
|
||||||
|
|||||||
@ -15,7 +15,7 @@ namespace LibationAvalonia.Controls
|
|||||||
|
|
||||||
static DataGridContextMenus()
|
static DataGridContextMenus()
|
||||||
{
|
{
|
||||||
ContextMenu.Items = MenuItems;
|
ContextMenu.ItemsSource = MenuItems;
|
||||||
OwningColumnProperty = typeof(DataGridCell).GetProperty("OwningColumn", BindingFlags.Instance | BindingFlags.NonPublic);
|
OwningColumnProperty = typeof(DataGridCell).GetProperty("OwningColumn", BindingFlags.Instance | BindingFlags.NonPublic);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,6 @@ using Avalonia.Data;
|
|||||||
using Avalonia.Interactivity;
|
using Avalonia.Interactivity;
|
||||||
using DataLayer;
|
using DataLayer;
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Controls
|
namespace LibationAvalonia.Controls
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,6 +1,4 @@
|
|||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Controls
|
namespace LibationAvalonia.Controls
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,10 +1,9 @@
|
|||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using Dinah.Core;
|
using Dinah.Core;
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
using System.Collections.Generic;
|
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace LibationAvalonia.Controls
|
namespace LibationAvalonia.Controls
|
||||||
@ -56,12 +55,12 @@ namespace LibationAvalonia.Controls
|
|||||||
directorySelectControl.PropertyChanged += DirectorySelectControl_PropertyChanged;
|
directorySelectControl.PropertyChanged += DirectorySelectControl_PropertyChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class CustomState: ViewModels.ViewModelBase
|
private class CustomState : ViewModels.ViewModelBase
|
||||||
{
|
{
|
||||||
private string _customDir;
|
private string _customDir;
|
||||||
private bool _knownChecked;
|
private bool _knownChecked;
|
||||||
private bool _customChecked;
|
private bool _customChecked;
|
||||||
public string CustomDir { get=> _customDir; set => this.RaiseAndSetIfChanged(ref _customDir, value); }
|
public string CustomDir { get => _customDir; set => this.RaiseAndSetIfChanged(ref _customDir, value); }
|
||||||
public bool KnownChecked
|
public bool KnownChecked
|
||||||
{
|
{
|
||||||
get => _knownChecked;
|
get => _knownChecked;
|
||||||
|
|||||||
@ -1,13 +1,12 @@
|
|||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
using Avalonia.Data;
|
||||||
|
using Avalonia.Data.Converters;
|
||||||
using Dinah.Core;
|
using Dinah.Core;
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
using System.Collections.Generic;
|
|
||||||
using Avalonia.Data.Converters;
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using Avalonia.Data;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Reactive.Subjects;
|
using System.Reactive.Subjects;
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Controls
|
namespace LibationAvalonia.Controls
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,8 +1,5 @@
|
|||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Input;
|
using Avalonia.Input;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using Avalonia.Media;
|
|
||||||
using Avalonia.Styling;
|
using Avalonia.Styling;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
|
|||||||
@ -1,11 +1,7 @@
|
|||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Input;
|
using Avalonia.Input;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using Avalonia.Styling;
|
using Avalonia.Styling;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Controls
|
namespace LibationAvalonia.Controls
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,17 +1,14 @@
|
|||||||
|
using AudibleApi;
|
||||||
using AudibleUtilities;
|
using AudibleUtilities;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
using Avalonia.Platform.Storage;
|
||||||
|
using ReactiveUI;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using ReactiveUI;
|
|
||||||
using AudibleApi;
|
|
||||||
using Avalonia.Platform.Storage;
|
|
||||||
using LibationFileManager;
|
|
||||||
using Avalonia.Platform.Storage.FileIO;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs
|
namespace LibationAvalonia.Dialogs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,11 +1,10 @@
|
|||||||
using ApplicationServices;
|
using ApplicationServices;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using Avalonia.Media.Imaging;
|
using Avalonia.Media.Imaging;
|
||||||
using DataLayer;
|
using DataLayer;
|
||||||
using Dinah.Core;
|
using Dinah.Core;
|
||||||
using LibationFileManager;
|
|
||||||
using LibationAvalonia.ViewModels;
|
using LibationAvalonia.ViewModels;
|
||||||
|
using LibationFileManager;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -42,7 +41,7 @@ namespace LibationAvalonia.Dialogs
|
|||||||
LibraryBook = context.GetLibraryBook_Flat_NoTracking("B017V4IM1G");
|
LibraryBook = context.GetLibraryBook_Flat_NoTracking("B017V4IM1G");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public BookDetailsDialog(LibraryBook libraryBook) :this()
|
public BookDetailsDialog(LibraryBook libraryBook) : this()
|
||||||
{
|
{
|
||||||
LibraryBook = libraryBook;
|
LibraryBook = libraryBook;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs
|
namespace LibationAvalonia.Dialogs
|
||||||
@ -12,9 +11,7 @@ namespace LibationAvalonia.Dialogs
|
|||||||
public DescriptionDisplayDialog()
|
public DescriptionDisplayDialog()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
#if DEBUG
|
|
||||||
this.AttachDevTools();
|
|
||||||
#endif
|
|
||||||
DescriptionTextBox = this.FindControl<TextBox>(nameof(DescriptionTextBox));
|
DescriptionTextBox = this.FindControl<TextBox>(nameof(DescriptionTextBox));
|
||||||
this.Activated += DescriptionDisplay_Activated;
|
this.Activated += DescriptionDisplay_Activated;
|
||||||
Opened += DescriptionDisplay_Opened;
|
Opened += DescriptionDisplay_Opened;
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
using Avalonia;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Controls;
|
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@ -17,10 +16,6 @@ namespace LibationAvalonia.Dialogs
|
|||||||
this.Initialized += DialogWindow_Initialized;
|
this.Initialized += DialogWindow_Initialized;
|
||||||
this.Opened += DialogWindow_Opened;
|
this.Opened += DialogWindow_Opened;
|
||||||
this.Closing += DialogWindow_Closing;
|
this.Closing += DialogWindow_Closing;
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
this.AttachDevTools();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
public DialogWindow(bool saveAndRestorePosition) : this()
|
public DialogWindow(bool saveAndRestorePosition) : this()
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
using AudibleUtilities;
|
using AudibleUtilities;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
|
using ReactiveUI;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using ReactiveUI;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs
|
namespace LibationAvalonia.Dialogs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,12 +1,11 @@
|
|||||||
|
using Avalonia.Collections;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
using Avalonia.Data;
|
||||||
using FileManager;
|
using FileManager;
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
using System.Collections.Generic;
|
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Avalonia.Collections;
|
|
||||||
using Avalonia.Data;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs
|
namespace LibationAvalonia.Dialogs
|
||||||
{
|
{
|
||||||
@ -50,7 +49,7 @@ namespace LibationAvalonia.Dialogs
|
|||||||
protected override void SaveAndClose()
|
protected override void SaveAndClose()
|
||||||
{
|
{
|
||||||
var replacements = SOURCE
|
var replacements = SOURCE
|
||||||
.Where(r=> !r.IsDefault)
|
.Where(r => !r.IsDefault)
|
||||||
.Select(r => new Replacement(r.Character, r.ReplacementText, r.Description) { Mandatory = r.Mandatory })
|
.Select(r => new Replacement(r.Character, r.ReplacementText, r.Description) { Mandatory = r.Mandatory })
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
|
|||||||
@ -1,17 +1,15 @@
|
|||||||
using Avalonia.Markup.Xaml;
|
using Avalonia.Collections;
|
||||||
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Controls.Documents;
|
||||||
|
using Avalonia.Markup.Xaml;
|
||||||
using Avalonia.Media;
|
using Avalonia.Media;
|
||||||
using Dinah.Core;
|
using Dinah.Core;
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
|
using ReactiveUI;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using ReactiveUI;
|
|
||||||
using Avalonia.Controls.Documents;
|
|
||||||
using Avalonia.Collections;
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Markup.Xaml.Templates;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs
|
namespace LibationAvalonia.Dialogs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,9 +1,8 @@
|
|||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using Avalonia.Media.Imaging;
|
using Avalonia.Media.Imaging;
|
||||||
|
using Avalonia.Platform.Storage;
|
||||||
|
using ReactiveUI;
|
||||||
using System;
|
using System;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using ReactiveUI;
|
|
||||||
using Avalonia.Platform.Storage;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs
|
namespace LibationAvalonia.Dialogs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,10 +1,6 @@
|
|||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
using LibationAvalonia.Controls;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs
|
namespace LibationAvalonia.Dialogs
|
||||||
{
|
{
|
||||||
@ -28,9 +24,6 @@ namespace LibationAvalonia.Dialogs
|
|||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
this.AttachDevTools();
|
|
||||||
#endif
|
|
||||||
DataContext = dirSelectOptions = new();
|
DataContext = dirSelectOptions = new();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,3 @@
|
|||||||
using Avalonia.Markup.Xaml;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs
|
namespace LibationAvalonia.Dialogs
|
||||||
{
|
{
|
||||||
public partial class LiberatedStatusBatchAutoDialog : DialogWindow
|
public partial class LiberatedStatusBatchAutoDialog : DialogWindow
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using DataLayer;
|
using DataLayer;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|||||||
@ -2,7 +2,6 @@ using ApplicationServices;
|
|||||||
using Avalonia.Collections;
|
using Avalonia.Collections;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Platform.Storage;
|
using Avalonia.Platform.Storage;
|
||||||
using Avalonia.Platform.Storage.FileIO;
|
|
||||||
using DataLayer;
|
using DataLayer;
|
||||||
using LibationAvalonia.ViewModels;
|
using LibationAvalonia.ViewModels;
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
@ -53,7 +52,7 @@ namespace LibationAvalonia.Dialogs
|
|||||||
|
|
||||||
private void LocateAudiobooks_FileFound(object sender, FilePathCache.CacheEntry e)
|
private void LocateAudiobooks_FileFound(object sender, FilePathCache.CacheEntry e)
|
||||||
{
|
{
|
||||||
var newItem = new Tuple<string,string>($"[{e.Id}]", Path.GetFileName(e.Path));
|
var newItem = new Tuple<string, string>($"[{e.Id}]", Path.GetFileName(e.Path));
|
||||||
_viewModel.FoundFiles.Add(newItem);
|
_viewModel.FoundFiles.Add(newItem);
|
||||||
foundAudiobooksLB.SelectedItem = newItem;
|
foundAudiobooksLB.SelectedItem = newItem;
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,3 @@
|
|||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs.Login
|
namespace LibationAvalonia.Dialogs.Login
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
using System;
|
using AudibleApi;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using AudibleApi;
|
|
||||||
using AudibleUtilities;
|
using AudibleUtilities;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs.Login
|
namespace LibationAvalonia.Dialogs.Login
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
using System;
|
using AudibleApi;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using AudibleApi;
|
|
||||||
using AudibleUtilities;
|
using AudibleUtilities;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs.Login
|
namespace LibationAvalonia.Dialogs.Login
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using Avalonia.Media.Imaging;
|
using Avalonia.Media.Imaging;
|
||||||
using LibationAvalonia.ViewModels;
|
using LibationAvalonia.ViewModels;
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
@ -21,7 +20,7 @@ namespace LibationAvalonia.Dialogs.Login
|
|||||||
captchaBox = this.FindControl<TextBox>(nameof(captchaBox));
|
captchaBox = this.FindControl<TextBox>(nameof(captchaBox));
|
||||||
}
|
}
|
||||||
|
|
||||||
public CaptchaDialog(string password, byte[] captchaImage) :this()
|
public CaptchaDialog(string password, byte[] captchaImage) : this()
|
||||||
{
|
{
|
||||||
//Avalonia doesn't support animated gifs.
|
//Avalonia doesn't support animated gifs.
|
||||||
//Deconstruct gifs into frames and manually switch them.
|
//Deconstruct gifs into frames and manually switch them.
|
||||||
@ -106,7 +105,7 @@ namespace LibationAvalonia.Dialogs.Login
|
|||||||
private async Task SwitchFramesAsync(Bitmap[] gifFrames, int[] frameDelayMs)
|
private async Task SwitchFramesAsync(Bitmap[] gifFrames, int[] frameDelayMs)
|
||||||
{
|
{
|
||||||
int index = 0;
|
int index = 0;
|
||||||
while(keepSwitching)
|
while (keepSwitching)
|
||||||
{
|
{
|
||||||
CaptchaImage = gifFrames[index];
|
CaptchaImage = gifFrames[index];
|
||||||
await Task.Delay(frameDelayMs[index++]);
|
await Task.Delay(frameDelayMs[index++]);
|
||||||
|
|||||||
@ -1,7 +1,5 @@
|
|||||||
using AudibleUtilities;
|
using AudibleUtilities;
|
||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using Dinah.Core;
|
using Dinah.Core;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
using AudibleApi;
|
using AudibleApi;
|
||||||
using AudibleUtilities;
|
using AudibleUtilities;
|
||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
@ -26,7 +24,7 @@ namespace LibationAvalonia.Dialogs.Login
|
|||||||
DataContext = this;
|
DataContext = this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public LoginChoiceEagerDialog(Account account):this()
|
public LoginChoiceEagerDialog(Account account) : this()
|
||||||
{
|
{
|
||||||
Account = account;
|
Account = account;
|
||||||
DataContext = this;
|
DataContext = this;
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
using AudibleUtilities;
|
using AudibleUtilities;
|
||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using Dinah.Core;
|
using Dinah.Core;
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -28,7 +27,7 @@ namespace LibationAvalonia.Dialogs.Login
|
|||||||
DataContext = this;
|
DataContext = this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public LoginExternalDialog(Account account, string loginUrl):this()
|
public LoginExternalDialog(Account account, string loginUrl) : this()
|
||||||
{
|
{
|
||||||
Account = account;
|
Account = account;
|
||||||
ExternalLoginUrl = loginUrl;
|
ExternalLoginUrl = loginUrl;
|
||||||
|
|||||||
@ -1,11 +1,10 @@
|
|||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
using Avalonia.Data;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Avalonia.Data;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs.Login
|
namespace LibationAvalonia.Dialogs.Login
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs.Login
|
namespace LibationAvalonia.Dialogs.Login
|
||||||
@ -12,7 +11,7 @@ namespace LibationAvalonia.Dialogs.Login
|
|||||||
|
|
||||||
public _2faCodeDialog()
|
public _2faCodeDialog()
|
||||||
{
|
{
|
||||||
AvaloniaXamlLoader.Load(this);
|
InitializeComponent();
|
||||||
_2FABox = this.FindControl<TextBox>(nameof(_2FABox));
|
_2FABox = this.FindControl<TextBox>(nameof(_2FABox));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using Dinah.Core;
|
using Dinah.Core;
|
||||||
using FileManager;
|
using FileManager;
|
||||||
using System;
|
using System;
|
||||||
|
|||||||
@ -1,6 +1,3 @@
|
|||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using LibationAvalonia.ViewModels.Dialogs;
|
using LibationAvalonia.ViewModels.Dialogs;
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs
|
namespace LibationAvalonia.Dialogs
|
||||||
@ -12,7 +9,7 @@ namespace LibationAvalonia.Dialogs
|
|||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
public MessageBoxWindow(bool saveAndRestorePosition):base(saveAndRestorePosition)
|
public MessageBoxWindow(bool saveAndRestorePosition) : base(saveAndRestorePosition)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,12 +1,9 @@
|
|||||||
using AudibleUtilities;
|
using AudibleUtilities;
|
||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Interactivity;
|
using Avalonia.Interactivity;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs
|
namespace LibationAvalonia.Dialogs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,5 +1,3 @@
|
|||||||
using Avalonia.Markup.Xaml;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs
|
namespace LibationAvalonia.Dialogs
|
||||||
{
|
{
|
||||||
public partial class SearchSyntaxDialog : DialogWindow
|
public partial class SearchSyntaxDialog : DialogWindow
|
||||||
|
|||||||
@ -1,14 +1,14 @@
|
|||||||
|
using Avalonia.Collections;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
|
using Dinah.Core;
|
||||||
|
using FileManager;
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
|
using LibationUiBase;
|
||||||
|
using ReactiveUI;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using ReactiveUI;
|
|
||||||
using Dinah.Core;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using FileManager;
|
using System.Threading.Tasks;
|
||||||
using Avalonia.Collections;
|
|
||||||
using LibationUiBase;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs
|
namespace LibationAvalonia.Dialogs
|
||||||
{
|
{
|
||||||
@ -392,7 +392,7 @@ namespace LibationAvalonia.Dialogs
|
|||||||
|
|
||||||
public AvaloniaList<SampleRateSelection> SampleRates { get; }
|
public AvaloniaList<SampleRateSelection> SampleRates { get; }
|
||||||
= new(
|
= new(
|
||||||
new []
|
new[]
|
||||||
{
|
{
|
||||||
AAXClean.SampleRate.Hz_44100,
|
AAXClean.SampleRate.Hz_44100,
|
||||||
AAXClean.SampleRate.Hz_32000,
|
AAXClean.SampleRate.Hz_32000,
|
||||||
|
|||||||
@ -1,22 +1,16 @@
|
|||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs
|
namespace LibationAvalonia.Dialogs
|
||||||
{
|
{
|
||||||
public partial class SetupDialog : Window
|
public partial class SetupDialog : Window
|
||||||
{
|
{
|
||||||
public bool IsNewUser { get;private set; }
|
public bool IsNewUser { get; private set; }
|
||||||
public bool IsReturningUser { get;private set; }
|
public bool IsReturningUser { get; private set; }
|
||||||
public Configuration Config { get; init; }
|
public Configuration Config { get; init; }
|
||||||
public SetupDialog()
|
public SetupDialog()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
this.AttachDevTools();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void NewUser_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
|
public void NewUser_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||||
|
|||||||
@ -1,6 +1,4 @@
|
|||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs
|
namespace LibationAvalonia.Dialogs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
using ApplicationServices;
|
using ApplicationServices;
|
||||||
using Avalonia.Collections;
|
using Avalonia.Collections;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Threading;
|
|
||||||
using DataLayer;
|
using DataLayer;
|
||||||
using LibationAvalonia.Controls;
|
using LibationAvalonia.Controls;
|
||||||
using LibationAvalonia.ViewModels;
|
using LibationAvalonia.ViewModels;
|
||||||
@ -25,7 +24,7 @@ namespace LibationAvalonia.Dialogs
|
|||||||
this.RestoreSizeAndLocation(Configuration.Instance);
|
this.RestoreSizeAndLocation(Configuration.Instance);
|
||||||
DataContext = _viewModel = new();
|
DataContext = _viewModel = new();
|
||||||
|
|
||||||
this.Closing += (_,_) => this.SaveSizeAndLocation(Configuration.Instance);
|
this.Closing += (_, _) => this.SaveSizeAndLocation(Configuration.Instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async void EmptyTrash_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
|
public async void EmptyTrash_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||||
@ -40,7 +39,7 @@ namespace LibationAvalonia.Dialogs
|
|||||||
public string CheckedCountText => $"Checked : {_checkedBooksCount} of {_totalBooksCount}";
|
public string CheckedCountText => $"Checked : {_checkedBooksCount} of {_totalBooksCount}";
|
||||||
|
|
||||||
private bool _controlsEnabled = true;
|
private bool _controlsEnabled = true;
|
||||||
public bool ControlsEnabled { get => _controlsEnabled; set=> this.RaiseAndSetIfChanged(ref _controlsEnabled, value); }
|
public bool ControlsEnabled { get => _controlsEnabled; set => this.RaiseAndSetIfChanged(ref _controlsEnabled, value); }
|
||||||
|
|
||||||
private bool? everythingChecked = false;
|
private bool? everythingChecked = false;
|
||||||
public bool? EverythingChecked
|
public bool? EverythingChecked
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
using AppScaffolding;
|
using AppScaffolding;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Dinah.Core;
|
using Dinah.Core;
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Dialogs
|
namespace LibationAvalonia.Dialogs
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
using System;
|
using Avalonia;
|
||||||
using System.Linq;
|
|
||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Controls.ApplicationLifetimes;
|
using Avalonia.Controls.ApplicationLifetimes;
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace LibationAvalonia
|
namespace LibationAvalonia
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,16 +1,15 @@
|
|||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Controls.ApplicationLifetimes;
|
using Avalonia.Controls.ApplicationLifetimes;
|
||||||
|
using Avalonia.Threading;
|
||||||
using DataLayer;
|
using DataLayer;
|
||||||
using Dinah.Core.Logging;
|
using Dinah.Core.Logging;
|
||||||
using LibationAvalonia.ViewModels.Dialogs;
|
|
||||||
using LibationAvalonia.Dialogs;
|
using LibationAvalonia.Dialogs;
|
||||||
|
using LibationAvalonia.ViewModels.Dialogs;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Threading;
|
|
||||||
using Avalonia.Threading;
|
|
||||||
|
|
||||||
namespace LibationAvalonia
|
namespace LibationAvalonia
|
||||||
{
|
{
|
||||||
@ -64,18 +63,18 @@ namespace LibationAvalonia
|
|||||||
|
|
||||||
public static Task<DialogResult> Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton)
|
public static Task<DialogResult> Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton)
|
||||||
=> ShowCoreAsync(null, text, caption, buttons, icon, defaultButton);
|
=> ShowCoreAsync(null, text, caption, buttons, icon, defaultButton);
|
||||||
public static Task<DialogResult> Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, bool saveAndRestorePosition = true)
|
public static Task<DialogResult> Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, bool saveAndRestorePosition = true)
|
||||||
=> ShowCoreAsync(null, text, caption, buttons, icon, MessageBoxDefaultButton.Button1, saveAndRestorePosition);
|
=> ShowCoreAsync(null, text, caption, buttons, icon, MessageBoxDefaultButton.Button1, saveAndRestorePosition);
|
||||||
public static Task<DialogResult> Show(string text, string caption, MessageBoxButtons buttons)
|
public static Task<DialogResult> Show(string text, string caption, MessageBoxButtons buttons)
|
||||||
=> ShowCoreAsync(null, text, caption, buttons, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
|
=> ShowCoreAsync(null, text, caption, buttons, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
|
||||||
public static Task<DialogResult> Show(string text, string caption)
|
public static Task<DialogResult> Show(string text, string caption)
|
||||||
=> ShowCoreAsync(null, text, caption, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
|
=> ShowCoreAsync(null, text, caption, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
|
||||||
public static Task<DialogResult> Show(string text)
|
public static Task<DialogResult> Show(string text)
|
||||||
=> ShowCoreAsync(null, text, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
|
=> ShowCoreAsync(null, text, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
|
||||||
public static Task<DialogResult> Show(Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton)
|
public static Task<DialogResult> Show(Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton)
|
||||||
=> ShowCoreAsync(owner, text, caption, buttons, icon, defaultButton);
|
=> ShowCoreAsync(owner, text, caption, buttons, icon, defaultButton);
|
||||||
|
|
||||||
public static Task<DialogResult> Show(Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon)
|
public static Task<DialogResult> Show(Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon)
|
||||||
=> ShowCoreAsync(owner, text, caption, buttons, icon, MessageBoxDefaultButton.Button1);
|
=> ShowCoreAsync(owner, text, caption, buttons, icon, MessageBoxDefaultButton.Button1);
|
||||||
public static Task<DialogResult> Show(Window owner, string text, string caption, MessageBoxButtons buttons)
|
public static Task<DialogResult> Show(Window owner, string text, string caption, MessageBoxButtons buttons)
|
||||||
=> ShowCoreAsync(owner, text, caption, buttons, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
|
=> ShowCoreAsync(owner, text, caption, buttons, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
|
||||||
|
|||||||
@ -22,8 +22,8 @@ namespace LibationAvalonia.ViewModels.Dialogs
|
|||||||
public bool HasButton3 => !string.IsNullOrEmpty(Button3Text);
|
public bool HasButton3 => !string.IsNullOrEmpty(Button3Text);
|
||||||
public bool HasButton2 => !string.IsNullOrEmpty(Button2Text);
|
public bool HasButton2 => !string.IsNullOrEmpty(Button2Text);
|
||||||
|
|
||||||
public int WindowHeight { get;private set; }
|
public int WindowHeight { get; private set; }
|
||||||
public int WindowWidth { get;private set; }
|
public int WindowWidth { get; private set; }
|
||||||
|
|
||||||
public string Button1Text => _button switch
|
public string Button1Text => _button switch
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
using ApplicationServices;
|
using ApplicationServices;
|
||||||
|
using Avalonia.Collections;
|
||||||
|
using Avalonia.Controls;
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
|
|
||||||
@ -52,6 +54,7 @@ namespace LibationAvalonia.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AvaloniaList<Control> QuickFilterMenuItems { get; } = new();
|
||||||
|
|
||||||
/// <summary> Indicates if the first quick filter is the default filter </summary>
|
/// <summary> Indicates if the first quick filter is the default filter </summary>
|
||||||
public bool FirstFilterIsDefault
|
public bool FirstFilterIsDefault
|
||||||
|
|||||||
@ -1,8 +1,4 @@
|
|||||||
using System;
|
using ApplicationServices;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using ApplicationServices;
|
|
||||||
using AudibleApi;
|
using AudibleApi;
|
||||||
using AudibleApi.Common;
|
using AudibleApi.Common;
|
||||||
using Avalonia.Media;
|
using Avalonia.Media;
|
||||||
@ -15,6 +11,10 @@ using FileLiberator;
|
|||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
using LibationUiBase;
|
using LibationUiBase;
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace LibationAvalonia.ViewModels
|
namespace LibationAvalonia.ViewModels
|
||||||
{
|
{
|
||||||
@ -65,7 +65,7 @@ namespace LibationAvalonia.ViewModels
|
|||||||
public string Author { get => _author; set => Dispatcher.UIThread.Post(() => this.RaiseAndSetIfChanged(ref _author, value)); }
|
public string Author { get => _author; set => Dispatcher.UIThread.Post(() => this.RaiseAndSetIfChanged(ref _author, value)); }
|
||||||
public string Title { get => _title; set => Dispatcher.UIThread.Post(() => this.RaiseAndSetIfChanged(ref _title, value)); }
|
public string Title { get => _title; set => Dispatcher.UIThread.Post(() => this.RaiseAndSetIfChanged(ref _title, value)); }
|
||||||
public int Progress { get => _progress; private set => Dispatcher.UIThread.Post(() => this.RaiseAndSetIfChanged(ref _progress, value)); }
|
public int Progress { get => _progress; private set => Dispatcher.UIThread.Post(() => this.RaiseAndSetIfChanged(ref _progress, value)); }
|
||||||
public string ETA { get => _eta; private set => Dispatcher.UIThread.Post(() =>this.RaiseAndSetIfChanged(ref _eta, value)); }
|
public string ETA { get => _eta; private set => Dispatcher.UIThread.Post(() => this.RaiseAndSetIfChanged(ref _eta, value)); }
|
||||||
public Bitmap Cover { get => _cover; private set => Dispatcher.UIThread.Post(() => this.RaiseAndSetIfChanged(ref _cover, value)); }
|
public Bitmap Cover { get => _cover; private set => Dispatcher.UIThread.Post(() => this.RaiseAndSetIfChanged(ref _cover, value)); }
|
||||||
public bool IsFinished => Status is not ProcessBookStatus.Queued and not ProcessBookStatus.Working;
|
public bool IsFinished => Status is not ProcessBookStatus.Queued and not ProcessBookStatus.Working;
|
||||||
public bool IsDownloading => Status is ProcessBookStatus.Working;
|
public bool IsDownloading => Status is ProcessBookStatus.Working;
|
||||||
|
|||||||
@ -1,8 +1,4 @@
|
|||||||
using Avalonia.Controls;
|
|
||||||
using ReactiveUI;
|
using ReactiveUI;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.ViewModels
|
namespace LibationAvalonia.ViewModels
|
||||||
{
|
{
|
||||||
|
|||||||
@ -35,7 +35,7 @@
|
|||||||
Name="button"
|
Name="button"
|
||||||
HorizontalAlignment="Stretch"
|
HorizontalAlignment="Stretch"
|
||||||
VerticalAlignment="Stretch"
|
VerticalAlignment="Stretch"
|
||||||
IsEnabled="{Binding IsButtonEnabled}" Padding="0" Click="Button_Click" >
|
IsEnabled="{CompiledBinding IsButtonEnabled}" Padding="0" Click="Button_Click" >
|
||||||
<Panel>
|
<Panel>
|
||||||
|
|
||||||
<Panel
|
<Panel
|
||||||
|
|||||||
@ -1,11 +1,9 @@
|
|||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Interactivity;
|
using Avalonia.Interactivity;
|
||||||
using Avalonia.Media;
|
|
||||||
using DataLayer;
|
using DataLayer;
|
||||||
using LibationAvalonia.ViewModels;
|
using LibationAvalonia.ViewModels;
|
||||||
using LibationUiBase.GridView;
|
using LibationUiBase.GridView;
|
||||||
using NPOI.HSSF.Record.PivotTable;
|
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace LibationAvalonia.Views
|
namespace LibationAvalonia.Views
|
||||||
|
|||||||
@ -1,6 +1,4 @@
|
|||||||
using ApplicationServices;
|
using ApplicationServices;
|
||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
using Avalonia.Threading;
|
using Avalonia.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
|||||||
@ -1,14 +1,11 @@
|
|||||||
using ApplicationServices;
|
using ApplicationServices;
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Platform.Storage;
|
using Avalonia.Platform.Storage;
|
||||||
using FileManager;
|
using FileManager;
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Views
|
namespace LibationAvalonia.Views
|
||||||
{
|
{
|
||||||
//DONE
|
|
||||||
public partial class MainWindow
|
public partial class MainWindow
|
||||||
{
|
{
|
||||||
private void Configure_Export() { }
|
private void Configure_Export() { }
|
||||||
|
|||||||
@ -1,11 +1,9 @@
|
|||||||
using Avalonia.Input;
|
using Avalonia.Input;
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace LibationAvalonia.Views
|
namespace LibationAvalonia.Views
|
||||||
{
|
{
|
||||||
//DONE
|
|
||||||
public partial class MainWindow
|
public partial class MainWindow
|
||||||
{
|
{
|
||||||
protected void Configure_Filter() { }
|
protected void Configure_Filter() { }
|
||||||
|
|||||||
@ -5,7 +5,6 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace LibationAvalonia.Views
|
namespace LibationAvalonia.Views
|
||||||
{
|
{
|
||||||
//DONE
|
|
||||||
public partial class MainWindow
|
public partial class MainWindow
|
||||||
{
|
{
|
||||||
private void Configure_Liberate() { }
|
private void Configure_Liberate() { }
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
using LibationUiBase;
|
using LibationUiBase;
|
||||||
using System;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Views
|
namespace LibationAvalonia.Views
|
||||||
{
|
{
|
||||||
|
|||||||
@ -3,7 +3,6 @@ using Dinah.Core;
|
|||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
using LibationUiBase.GridView;
|
using LibationUiBase.GridView;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace LibationAvalonia.Views
|
namespace LibationAvalonia.Views
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
using Avalonia.Controls;
|
using Avalonia;
|
||||||
|
using Avalonia.Controls;
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
using System;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Avalonia.Data;
|
||||||
|
|
||||||
namespace LibationAvalonia.Views
|
namespace LibationAvalonia.Views
|
||||||
{
|
{
|
||||||
//DONE
|
|
||||||
public partial class MainWindow
|
public partial class MainWindow
|
||||||
{
|
{
|
||||||
private void Configure_QuickFilters()
|
private void Configure_QuickFilters()
|
||||||
@ -13,24 +13,54 @@ namespace LibationAvalonia.Views
|
|||||||
_viewModel.FirstFilterIsDefault = QuickFilters.UseDefault;
|
_viewModel.FirstFilterIsDefault = QuickFilters.UseDefault;
|
||||||
Load += updateFiltersMenu;
|
Load += updateFiltersMenu;
|
||||||
QuickFilters.Updated += updateFiltersMenu;
|
QuickFilters.Updated += updateFiltersMenu;
|
||||||
|
|
||||||
|
//We need to be able to dynamically add and remove menu items from the Quick Filters menu.
|
||||||
|
//To do that, we need quick filter's menu items source to be writable, which we can only
|
||||||
|
//achieve by creating the list ourselves (instead of allowing Avalonia to create it from the xaml)
|
||||||
|
|
||||||
|
var startWithFilterMenuItem = new MenuItem
|
||||||
|
{
|
||||||
|
Header = "Start Libation with 1st filter _Default",
|
||||||
|
Icon = new CheckBox
|
||||||
|
{
|
||||||
|
BorderThickness = new Thickness(0),
|
||||||
|
IsHitTestVisible = false,
|
||||||
|
[!CheckBox.IsCheckedProperty] = new Binding(nameof(_viewModel.FirstFilterIsDefault))
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var editFiltersMenuItem = new MenuItem { Header = "_Edit quick filters..." };
|
||||||
|
|
||||||
|
startWithFilterMenuItem.Click += firstFilterIsDefaultToolStripMenuItem_Click;
|
||||||
|
editFiltersMenuItem.Click += editQuickFiltersToolStripMenuItem_Click;
|
||||||
|
|
||||||
|
_viewModel.QuickFilterMenuItems.Add(startWithFilterMenuItem);
|
||||||
|
_viewModel.QuickFilterMenuItems.Add(editFiltersMenuItem);
|
||||||
|
_viewModel.QuickFilterMenuItems.Add(new Separator());
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void QuickFiltersMenuItem_KeyDown(object sender, Avalonia.Input.KeyEventArgs e)
|
||||||
|
{
|
||||||
|
int keyNum = (int)e.Key - 34;
|
||||||
|
|
||||||
|
if (keyNum <=9 && keyNum >= 1)
|
||||||
|
{
|
||||||
|
var menuItem = _viewModel.QuickFilterMenuItems
|
||||||
|
.OfType<MenuItem>()
|
||||||
|
.FirstOrDefault(i => i.Header is string h && h.StartsWith($"_{keyNum}"));
|
||||||
|
|
||||||
|
if (menuItem is not null)
|
||||||
|
{
|
||||||
|
await performFilter(menuItem.Tag as string);
|
||||||
|
e.Handled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private object quickFilterTag { get; } = new();
|
|
||||||
private void updateFiltersMenu(object _ = null, object __ = null)
|
private void updateFiltersMenu(object _ = null, object __ = null)
|
||||||
{
|
{
|
||||||
var allItems = quickFiltersToolStripMenuItem
|
//Clear all filters
|
||||||
.Items
|
_viewModel.QuickFilterMenuItems.RemoveAll(_viewModel.QuickFilterMenuItems.Where(i => i.Tag is string).ToList());
|
||||||
.Cast<Control>()
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
var toRemove = allItems
|
|
||||||
.OfType<MenuItem>()
|
|
||||||
.Where(mi => mi.Tag == quickFilterTag)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
allItems = allItems
|
|
||||||
.Except(toRemove)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
// re-populate
|
// re-populate
|
||||||
var index = 0;
|
var index = 0;
|
||||||
@ -38,27 +68,23 @@ namespace LibationAvalonia.Views
|
|||||||
{
|
{
|
||||||
var quickFilterMenuItem = new MenuItem
|
var quickFilterMenuItem = new MenuItem
|
||||||
{
|
{
|
||||||
Tag = quickFilterTag,
|
Tag = filter,
|
||||||
Header = $"_{++index}: {filter}"
|
Header = $"_{++index}: {filter}"
|
||||||
};
|
};
|
||||||
quickFilterMenuItem.Click += async (_, __) => await performFilter(filter);
|
quickFilterMenuItem.Click += async (_, __) => await performFilter(filter);
|
||||||
allItems.Add(quickFilterMenuItem);
|
_viewModel.QuickFilterMenuItems.Add(quickFilterMenuItem);
|
||||||
}
|
|
||||||
quickFiltersToolStripMenuItem.Items = allItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void firstFilterIsDefaultToolStripMenuItem_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
if (sender is MenuItem mi && mi.Icon is CheckBox checkBox)
|
|
||||||
{
|
|
||||||
checkBox.IsChecked = !(checkBox.IsChecked ?? false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addQuickFilterBtn_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
|
private void firstFilterIsDefaultToolStripMenuItem_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
_viewModel.FirstFilterIsDefault = !_viewModel.FirstFilterIsDefault;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addQuickFilterBtn_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||||
=> QuickFilters.Add(_viewModel.FilterString);
|
=> QuickFilters.Add(_viewModel.FilterString);
|
||||||
|
|
||||||
public async void editQuickFiltersToolStripMenuItem_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
|
private async void editQuickFiltersToolStripMenuItem_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||||
=> await new Dialogs.EditQuickFilters().ShowDialog(this);
|
=> await new Dialogs.EditQuickFilters().ShowDialog(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,9 @@
|
|||||||
using AudibleUtilities;
|
using AudibleUtilities;
|
||||||
using LibationAvalonia.Dialogs;
|
using LibationAvalonia.Dialogs;
|
||||||
using System;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace LibationAvalonia.Views
|
namespace LibationAvalonia.Views
|
||||||
{
|
{
|
||||||
//DONE
|
|
||||||
public partial class MainWindow
|
public partial class MainWindow
|
||||||
{
|
{
|
||||||
private void Configure_RemoveBooks()
|
private void Configure_RemoveBooks()
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
using ApplicationServices;
|
using ApplicationServices;
|
||||||
using AudibleUtilities;
|
using AudibleUtilities;
|
||||||
using Avalonia.Controls;
|
|
||||||
using LibationAvalonia.Dialogs;
|
using LibationAvalonia.Dialogs;
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
using System;
|
using System;
|
||||||
@ -10,7 +9,6 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace LibationAvalonia.Views
|
namespace LibationAvalonia.Views
|
||||||
{
|
{
|
||||||
//DONE
|
|
||||||
public partial class MainWindow
|
public partial class MainWindow
|
||||||
{
|
{
|
||||||
private void Configure_ScanManual()
|
private void Configure_ScanManual()
|
||||||
@ -69,7 +67,7 @@ namespace LibationAvalonia.Views
|
|||||||
if (Configuration.Instance.ShowImportedStats && newAdded > 0)
|
if (Configuration.Instance.ShowImportedStats && newAdded > 0)
|
||||||
await MessageBox.Show($"Total processed: {totalProcessed}\r\nNew: {newAdded}");
|
await MessageBox.Show($"Total processed: {totalProcessed}\r\nNew: {newAdded}");
|
||||||
}
|
}
|
||||||
catch(OperationCanceledException)
|
catch (OperationCanceledException)
|
||||||
{
|
{
|
||||||
Serilog.Log.Information("Audible login attempt cancelled by user");
|
Serilog.Log.Information("Audible login attempt cancelled by user");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,8 @@
|
|||||||
using ApplicationServices;
|
using ApplicationServices;
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Views
|
namespace LibationAvalonia.Views
|
||||||
{
|
{
|
||||||
//DONE
|
|
||||||
public partial class MainWindow
|
public partial class MainWindow
|
||||||
{
|
{
|
||||||
private void Configure_ScanNotification()
|
private void Configure_ScanNotification()
|
||||||
|
|||||||
@ -3,7 +3,6 @@ using System;
|
|||||||
|
|
||||||
namespace LibationAvalonia.Views
|
namespace LibationAvalonia.Views
|
||||||
{
|
{
|
||||||
//DONE
|
|
||||||
public partial class MainWindow
|
public partial class MainWindow
|
||||||
{
|
{
|
||||||
private void Configure_Settings() { }
|
private void Configure_Settings() { }
|
||||||
@ -23,7 +22,7 @@ namespace LibationAvalonia.Views
|
|||||||
{
|
{
|
||||||
System.Diagnostics.Process.Start("Hangover" + (Configuration.IsWindows ? ".exe" : ""));
|
System.Diagnostics.Process.Start("Hangover" + (Configuration.IsWindows ? ".exe" : ""));
|
||||||
}
|
}
|
||||||
catch(Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Serilog.Log.Logger.Error(ex, "Failed to launch Hangover");
|
Serilog.Log.Logger.Error(ex, "Failed to launch Hangover");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,4 @@
|
|||||||
using Avalonia.Threading;
|
namespace LibationAvalonia.Views
|
||||||
using LibationAvalonia.Dialogs;
|
|
||||||
using LibationUiBase;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Views
|
|
||||||
{
|
{
|
||||||
public partial class MainWindow
|
public partial class MainWindow
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,15 +1,11 @@
|
|||||||
using ApplicationServices;
|
using ApplicationServices;
|
||||||
using Avalonia.Threading;
|
using Avalonia.Threading;
|
||||||
using DataLayer;
|
using DataLayer;
|
||||||
using Dinah.Core;
|
|
||||||
using LibationFileManager;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace LibationAvalonia.Views
|
namespace LibationAvalonia.Views
|
||||||
{
|
{
|
||||||
//DONE
|
|
||||||
public partial class MainWindow
|
public partial class MainWindow
|
||||||
{
|
{
|
||||||
private void Configure_VisibleBooks()
|
private void Configure_VisibleBooks()
|
||||||
|
|||||||
@ -86,20 +86,13 @@
|
|||||||
|
|
||||||
<!-- Quick Filters Menu -->
|
<!-- Quick Filters Menu -->
|
||||||
|
|
||||||
<MenuItem Name="quickFiltersToolStripMenuItem" Header="Quick _Filters">
|
<MenuItem Header="Quick _Filters" ItemsSource="{Binding QuickFilterMenuItems}" KeyDown="QuickFiltersMenuItem_KeyDown">
|
||||||
<!-- Remove height style property for menu item -->
|
<!-- Remove height style property for menu item -->
|
||||||
<MenuItem.Styles>
|
<MenuItem.Styles>
|
||||||
<Style Selector="ItemsPresenter#PART_ItemsPresenter">
|
<Style Selector="ItemsPresenter#PART_ItemsPresenter">
|
||||||
<Setter Property="Height" Value="NaN"/>
|
<Setter Property="Height" Value="NaN"/>
|
||||||
</Style>
|
</Style>
|
||||||
</MenuItem.Styles>
|
</MenuItem.Styles>
|
||||||
<MenuItem Click="firstFilterIsDefaultToolStripMenuItem_Click" Header="Start Libation with 1st filter _Default">
|
|
||||||
<MenuItem.Icon>
|
|
||||||
<CheckBox BorderThickness="0" IsChecked="{Binding FirstFilterIsDefault, Mode=TwoWay}" IsHitTestVisible="False" />
|
|
||||||
</MenuItem.Icon>
|
|
||||||
</MenuItem>
|
|
||||||
<MenuItem Click="editQuickFiltersToolStripMenuItem_Click" Header="_Edit quick filters..." />
|
|
||||||
<Separator />
|
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
|
||||||
<!-- Visible Books Menu -->
|
<!-- Visible Books Menu -->
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using ApplicationServices;
|
using ApplicationServices;
|
||||||
using Avalonia.ReactiveUI;
|
using Avalonia.ReactiveUI;
|
||||||
using DataLayer;
|
using DataLayer;
|
||||||
using LibationAvalonia.ViewModels;
|
using LibationAvalonia.ViewModels;
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace LibationAvalonia.Views
|
namespace LibationAvalonia.Views
|
||||||
{
|
{
|
||||||
|
|||||||
@ -2,20 +2,22 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:vm="clr-namespace:LibationAvalonia.ViewModels"
|
||||||
|
x:DataType="vm:ProcessBookViewModel"
|
||||||
mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="87" MaxHeight="87" MinHeight="87" MinWidth="300"
|
mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="87" MaxHeight="87" MinHeight="87" MinWidth="300"
|
||||||
x:Class="LibationAvalonia.Views.ProcessBookControl" Background="{Binding BackgroundColor}">
|
x:Class="LibationAvalonia.Views.ProcessBookControl" Background="{CompiledBinding BackgroundColor}">
|
||||||
|
|
||||||
<Border BorderBrush="{DynamicResource SystemControlForegroundBaseMediumBrush}" BorderThickness="0,0,0,1">
|
<Border BorderBrush="{DynamicResource SystemControlForegroundBaseMediumBrush}" BorderThickness="0,0,0,1">
|
||||||
<Grid ColumnDefinitions="Auto,*,Auto">
|
<Grid ColumnDefinitions="Auto,*,Auto">
|
||||||
|
|
||||||
<Panel Grid.Column="0" Margin="3" Width="80" Height="80" HorizontalAlignment="Left">
|
<Panel Grid.Column="0" Margin="3" Width="80" Height="80" HorizontalAlignment="Left">
|
||||||
<Image Width="80" Height="80" Source="{Binding Cover}" Stretch="Uniform" />
|
<Image Width="80" Height="80" Source="{CompiledBinding Cover}" Stretch="Uniform" />
|
||||||
</Panel>
|
</Panel>
|
||||||
<Grid Margin="0,3,0,3" Grid.Column="1" ColumnDefinitions="*" RowDefinitions="*,16">
|
<Grid Margin="0,3,0,3" Grid.Column="1" ColumnDefinitions="*" RowDefinitions="*,16">
|
||||||
<StackPanel Grid.Column="0" Grid.Row="0" Orientation="Vertical">
|
<StackPanel Grid.Column="0" Grid.Row="0" Orientation="Vertical">
|
||||||
<TextBlock ClipToBounds="True" TextWrapping="Wrap" FontSize="11" Text="{Binding Title}" />
|
<TextBlock ClipToBounds="True" TextWrapping="Wrap" FontSize="11" Text="{CompiledBinding Title}" />
|
||||||
<TextBlock FontSize="10" TextWrapping="NoWrap" Text="{Binding Author}" />
|
<TextBlock FontSize="10" TextWrapping="NoWrap" Text="{CompiledBinding Author}" />
|
||||||
<TextBlock FontSize="10" TextWrapping="NoWrap" Text="{Binding Narrator}" />
|
<TextBlock FontSize="10" TextWrapping="NoWrap" Text="{CompiledBinding Narrator}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<Panel Grid.Column="0" Grid.Row="1">
|
<Panel Grid.Column="0" Grid.Row="1">
|
||||||
<Panel.Styles>
|
<Panel.Styles>
|
||||||
@ -23,8 +25,8 @@
|
|||||||
<Setter Property="MinWidth" Value="20" />
|
<Setter Property="MinWidth" Value="20" />
|
||||||
</Style>
|
</Style>
|
||||||
</Panel.Styles>
|
</Panel.Styles>
|
||||||
<ProgressBar IsVisible="{Binding IsDownloading}" Value="{Binding Progress}" ShowProgressText="True" FontSize="12" />
|
<ProgressBar IsVisible="{CompiledBinding IsDownloading}" Value="{CompiledBinding Progress}" ShowProgressText="True" FontSize="12" />
|
||||||
<TextBlock IsVisible="{Binding !IsDownloading}" Text="{Binding StatusText}"/>
|
<TextBlock IsVisible="{CompiledBinding !IsDownloading}" Text="{CompiledBinding StatusText}"/>
|
||||||
</Panel>
|
</Panel>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid Margin="3" Grid.Column="2" HorizontalAlignment="Right" ColumnDefinitions="Auto,Auto">
|
<Grid Margin="3" Grid.Column="2" HorizontalAlignment="Right" ColumnDefinitions="Auto,Auto">
|
||||||
@ -39,7 +41,7 @@
|
|||||||
</Style>
|
</Style>
|
||||||
</Style>
|
</Style>
|
||||||
</Grid.Styles>
|
</Grid.Styles>
|
||||||
<StackPanel IsVisible="{Binding Queued}" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Orientation="Vertical">
|
<StackPanel IsVisible="{CompiledBinding Queued}" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Orientation="Vertical">
|
||||||
|
|
||||||
<Button Click="MoveFirst_Click">
|
<Button Click="MoveFirst_Click">
|
||||||
<Path VerticalAlignment="Top" Data="{StaticResource FirstButtonIcon}" />
|
<Path VerticalAlignment="Top" Data="{StaticResource FirstButtonIcon}" />
|
||||||
@ -55,13 +57,13 @@
|
|||||||
</Button>
|
</Button>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<Panel Margin="3,0,0,0" Grid.Column="1" VerticalAlignment="Top">
|
<Panel Margin="3,0,0,0" Grid.Column="1" VerticalAlignment="Top">
|
||||||
<Button Height="32" Background="{DynamicResource CancelRed}" Width="22" IsVisible="{Binding !IsFinished}" CornerRadius="11" Click="Cancel_Click">
|
<Button Height="32" Background="{DynamicResource CancelRed}" Width="22" IsVisible="{CompiledBinding !IsFinished}" CornerRadius="11" Click="Cancel_Click">
|
||||||
<Path Fill="{DynamicResource ProcessQueueBookDefaultBrush}" VerticalAlignment="Center" Data="{StaticResource CancelButtonIcon}" RenderTransform="{StaticResource Rotate45Transform}" />
|
<Path Fill="{DynamicResource ProcessQueueBookDefaultBrush}" VerticalAlignment="Center" Data="{StaticResource CancelButtonIcon}" RenderTransform="{StaticResource Rotate45Transform}" />
|
||||||
</Button>
|
</Button>
|
||||||
</Panel>
|
</Panel>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Panel Margin="3" Width="50" Grid.Column="2">
|
<Panel Margin="3" Width="50" Grid.Column="2">
|
||||||
<TextPresenter FontSize="9" VerticalAlignment="Bottom" HorizontalAlignment="Right" IsVisible="{Binding IsDownloading}" Text="{Binding ETA}" />
|
<TextPresenter FontSize="9" VerticalAlignment="Bottom" HorizontalAlignment="Right" IsVisible="{CompiledBinding IsDownloading}" Text="{CompiledBinding ETA}" />
|
||||||
</Panel>
|
</Panel>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
@ -1,9 +1,7 @@
|
|||||||
using System;
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using LibationAvalonia.ViewModels;
|
|
||||||
using ApplicationServices;
|
using ApplicationServices;
|
||||||
|
using Avalonia.Controls;
|
||||||
using DataLayer;
|
using DataLayer;
|
||||||
|
using LibationAvalonia.ViewModels;
|
||||||
using LibationUiBase;
|
using LibationUiBase;
|
||||||
|
|
||||||
namespace LibationAvalonia.Views
|
namespace LibationAvalonia.Views
|
||||||
|
|||||||
@ -2,7 +2,6 @@
|
|||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Data.Converters;
|
using Avalonia.Data.Converters;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using DataLayer;
|
using DataLayer;
|
||||||
using LibationAvalonia.ViewModels;
|
using LibationAvalonia.ViewModels;
|
||||||
using LibationUiBase;
|
using LibationUiBase;
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:views="clr-namespace:LibationAvalonia.Views"
|
xmlns:views="clr-namespace:LibationAvalonia.Views"
|
||||||
|
xmlns:uibase="clr-namespace:LibationUiBase.GridView;assembly=LibationUiBase"
|
||||||
xmlns:controls="clr-namespace:LibationAvalonia.Controls"
|
xmlns:controls="clr-namespace:LibationAvalonia.Controls"
|
||||||
mc:Ignorable="d" d:DesignWidth="1560" d:DesignHeight="400"
|
mc:Ignorable="d" d:DesignWidth="1560" d:DesignHeight="400"
|
||||||
x:Class="LibationAvalonia.Views.ProductsDisplay">
|
x:Class="LibationAvalonia.Views.ProductsDisplay">
|
||||||
@ -37,6 +38,14 @@
|
|||||||
<Setter Property="VerticalAlignment" Value="Center" />
|
<Setter Property="VerticalAlignment" Value="Center" />
|
||||||
<Setter Property="Fill" Value="{DynamicResource IconFill}" />
|
<Setter Property="Fill" Value="{DynamicResource IconFill}" />
|
||||||
</Style>
|
</Style>
|
||||||
|
<Style Selector="DataGridColumnHeader ContextMenu MenuItem">
|
||||||
|
<Setter Property="Padding" Value="0" />
|
||||||
|
<Style Selector="^:icon /template/ Viewbox#PART_IconPresenter">
|
||||||
|
<Setter Property="Height" Value="32" />
|
||||||
|
<Setter Property="Width" Value="32" />
|
||||||
|
<Setter Property="Margin" Value="6,0" />
|
||||||
|
</Style>
|
||||||
|
</Style>
|
||||||
</DataGrid.Styles>
|
</DataGrid.Styles>
|
||||||
|
|
||||||
<DataGrid.Columns>
|
<DataGrid.Columns>
|
||||||
@ -51,25 +60,25 @@
|
|||||||
Width="75">
|
Width="75">
|
||||||
|
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:IGridEntry">
|
||||||
<CheckBox
|
<CheckBox
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
IsThreeState="True"
|
IsThreeState="True"
|
||||||
IsChecked="{Binding Remove, Mode=TwoWay}" />
|
IsChecked="{CompiledBinding Remove, Mode=TwoWay}" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</DataGridTemplateColumn>
|
||||||
|
|
||||||
<controls:DataGridTemplateColumnExt CanUserSort="True" Width="75" Header="Liberate" SortMemberPath="Liberate" ClipboardContentBinding="{Binding Liberate.ToolTip}">
|
<controls:DataGridTemplateColumnExt CanUserSort="True" Width="75" Header="Liberate" SortMemberPath="Liberate" ClipboardContentBinding="{Binding Liberate.ToolTip}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:IGridEntry">
|
||||||
<views:LiberateStatusButton
|
<views:LiberateStatusButton
|
||||||
ToolTip.Tip="{Binding Liberate.ToolTip}"
|
ToolTip.Tip="{CompiledBinding Liberate.ToolTip}"
|
||||||
BookStatus="{Binding Liberate.BookStatus}"
|
BookStatus="{CompiledBinding Liberate.BookStatus}"
|
||||||
PdfStatus="{Binding Liberate.PdfStatus}"
|
PdfStatus="{CompiledBinding Liberate.PdfStatus}"
|
||||||
IsUnavailable="{Binding Liberate.IsUnavailable}"
|
IsUnavailable="{CompiledBinding Liberate.IsUnavailable}"
|
||||||
IsSeries="{Binding Liberate.IsSeries}"
|
IsSeries="{CompiledBinding Liberate.IsSeries}"
|
||||||
Expanded="{Binding Liberate.Expanded}"
|
Expanded="{CompiledBinding Liberate.Expanded}"
|
||||||
Click="LiberateButton_Click" />
|
Click="LiberateButton_Click" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
@ -77,17 +86,17 @@
|
|||||||
|
|
||||||
<DataGridTemplateColumn CanUserSort="False" Width="80" Header="Cover" SortMemberPath="Cover" ClipboardContentBinding="{Binding LibraryBook.Book.PictureLarge}">
|
<DataGridTemplateColumn CanUserSort="False" Width="80" Header="Cover" SortMemberPath="Cover" ClipboardContentBinding="{Binding LibraryBook.Book.PictureLarge}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:IGridEntry">
|
||||||
<Image Opacity="{Binding Liberate.Opacity}" Tapped="Cover_Click" Height="80" Source="{Binding Cover}" ToolTip.Tip="Click to see full size" />
|
<Image Opacity="{CompiledBinding Liberate.Opacity}" Tapped="Cover_Click" Height="80" Source="{CompiledBinding Cover}" ToolTip.Tip="Click to see full size" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</DataGridTemplateColumn>
|
</DataGridTemplateColumn>
|
||||||
|
|
||||||
<controls:DataGridTemplateColumnExt MinWidth="150" Width="2*" Header="Title" CanUserSort="True" SortMemberPath="Title" ClipboardContentBinding="{Binding Title}">
|
<controls:DataGridTemplateColumnExt MinWidth="150" Width="2*" Header="Title" CanUserSort="True" SortMemberPath="Title" ClipboardContentBinding="{Binding Title}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:IGridEntry">
|
||||||
<Panel Opacity="{Binding Liberate.Opacity}" Background="{Binding Liberate.BackgroundBrush}">
|
<Panel Opacity="{CompiledBinding Liberate.Opacity}" Background="{CompiledBinding Liberate.BackgroundBrush}">
|
||||||
<TextBlock FontSize="14" Text="{Binding Title}" />
|
<TextBlock FontSize="14" Text="{CompiledBinding Title}" />
|
||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
@ -95,9 +104,9 @@
|
|||||||
|
|
||||||
<controls:DataGridTemplateColumnExt MinWidth="80" Width="1*" Header="Authors" CanUserSort="True" SortMemberPath="Authors" ClipboardContentBinding="{Binding Authors}">
|
<controls:DataGridTemplateColumnExt MinWidth="80" Width="1*" Header="Authors" CanUserSort="True" SortMemberPath="Authors" ClipboardContentBinding="{Binding Authors}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:IGridEntry">
|
||||||
<Panel Opacity="{Binding Liberate.Opacity}" Background="{Binding Liberate.BackgroundBrush}">
|
<Panel Opacity="{CompiledBinding Liberate.Opacity}" Background="{CompiledBinding Liberate.BackgroundBrush}">
|
||||||
<TextBlock Text="{Binding Authors}" />
|
<TextBlock Text="{CompiledBinding Authors}" />
|
||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
@ -105,9 +114,9 @@
|
|||||||
|
|
||||||
<controls:DataGridTemplateColumnExt MinWidth="80" Width="1*" Header="Narrators" CanUserSort="True" SortMemberPath="Narrators" ClipboardContentBinding="{Binding Narrators}">
|
<controls:DataGridTemplateColumnExt MinWidth="80" Width="1*" Header="Narrators" CanUserSort="True" SortMemberPath="Narrators" ClipboardContentBinding="{Binding Narrators}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:IGridEntry">
|
||||||
<Panel Opacity="{Binding Liberate.Opacity}" Background="{Binding Liberate.BackgroundBrush}">
|
<Panel Opacity="{CompiledBinding Liberate.Opacity}" Background="{CompiledBinding Liberate.BackgroundBrush}">
|
||||||
<TextBlock Text="{Binding Narrators}" />
|
<TextBlock Text="{CompiledBinding Narrators}" />
|
||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
@ -115,9 +124,9 @@
|
|||||||
|
|
||||||
<controls:DataGridTemplateColumnExt Width="90" Header="Length" CanUserSort="True" SortMemberPath="Length" ClipboardContentBinding="{Binding Length}">
|
<controls:DataGridTemplateColumnExt Width="90" Header="Length" CanUserSort="True" SortMemberPath="Length" ClipboardContentBinding="{Binding Length}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:IGridEntry">
|
||||||
<Panel Opacity="{Binding Liberate.Opacity}" Background="{Binding Liberate.BackgroundBrush}">
|
<Panel Opacity="{CompiledBinding Liberate.Opacity}" Background="{CompiledBinding Liberate.BackgroundBrush}">
|
||||||
<TextBlock Text="{Binding Length}" />
|
<TextBlock Text="{CompiledBinding Length}" />
|
||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
@ -125,9 +134,9 @@
|
|||||||
|
|
||||||
<controls:DataGridTemplateColumnExt MinWidth="80" Width="1*" Header="Series" CanUserSort="True" SortMemberPath="Series" ClipboardContentBinding="{Binding Series}">
|
<controls:DataGridTemplateColumnExt MinWidth="80" Width="1*" Header="Series" CanUserSort="True" SortMemberPath="Series" ClipboardContentBinding="{Binding Series}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:IGridEntry">
|
||||||
<Panel Opacity="{Binding Liberate.Opacity}" Background="{Binding Liberate.BackgroundBrush}">
|
<Panel Opacity="{CompiledBinding Liberate.Opacity}" Background="{CompiledBinding Liberate.BackgroundBrush}">
|
||||||
<TextBlock Text="{Binding Series}" />
|
<TextBlock Text="{CompiledBinding Series}" />
|
||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
@ -135,9 +144,9 @@
|
|||||||
|
|
||||||
<controls:DataGridTemplateColumnExt MinWidth="100" Width="1*" Header="Description" CanUserSort="True" SortMemberPath="Description" ClipboardContentBinding="{Binding LongDescription}">
|
<controls:DataGridTemplateColumnExt MinWidth="100" Width="1*" Header="Description" CanUserSort="True" SortMemberPath="Description" ClipboardContentBinding="{Binding LongDescription}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:IGridEntry">
|
||||||
<Panel Opacity="{Binding Liberate.Opacity}" Background="{Binding Liberate.BackgroundBrush}" Tapped="Description_Click" ToolTip.Tip="Click to see full description" >
|
<Panel Opacity="{CompiledBinding Liberate.Opacity}" Background="{CompiledBinding Liberate.BackgroundBrush}" Tapped="Description_Click" ToolTip.Tip="Click to see full description" >
|
||||||
<TextBlock Text="{Binding Description}" FontSize="11" VerticalAlignment="Top" />
|
<TextBlock Text="{CompiledBinding Description}" FontSize="11" VerticalAlignment="Top" />
|
||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
@ -145,49 +154,51 @@
|
|||||||
|
|
||||||
<controls:DataGridTemplateColumnExt Width="100" Header="Category" CanUserSort="True" SortMemberPath="Category" ClipboardContentBinding="{Binding Category}">
|
<controls:DataGridTemplateColumnExt Width="100" Header="Category" CanUserSort="True" SortMemberPath="Category" ClipboardContentBinding="{Binding Category}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:IGridEntry">
|
||||||
<Panel Opacity="{Binding Liberate.Opacity}" Background="{Binding Liberate.BackgroundBrush}">
|
<Panel Opacity="{CompiledBinding Liberate.Opacity}" Background="{CompiledBinding Liberate.BackgroundBrush}">
|
||||||
<TextBlock Text="{Binding Category}" />
|
<TextBlock Text="{CompiledBinding Category}" />
|
||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</controls:DataGridTemplateColumnExt>
|
</controls:DataGridTemplateColumnExt>
|
||||||
|
|
||||||
<controls:DataGridMyRatingColumn
|
<controls:DataGridMyRatingColumn
|
||||||
|
x:DataType="uibase:IGridEntry"
|
||||||
Header="Product
Rating"
|
Header="Product
Rating"
|
||||||
IsReadOnly="true"
|
IsReadOnly="true"
|
||||||
Width="115"
|
Width="115"
|
||||||
SortMemberPath="ProductRating" CanUserSort="True"
|
SortMemberPath="ProductRating" CanUserSort="True"
|
||||||
OpacityBinding="{Binding Liberate.Opacity}"
|
OpacityBinding="{CompiledBinding Liberate.Opacity}"
|
||||||
BackgroundBinding="{Binding Liberate.BackgroundBrush}"
|
BackgroundBinding="{CompiledBinding Liberate.BackgroundBrush}"
|
||||||
ClipboardContentBinding="{Binding ProductRating}"
|
ClipboardContentBinding="{CompiledBinding ProductRating}"
|
||||||
Binding="{Binding ProductRating}" />
|
Binding="{CompiledBinding ProductRating}" />
|
||||||
|
|
||||||
<controls:DataGridTemplateColumnExt Width="90" Header="Purchase
Date" CanUserSort="True" SortMemberPath="PurchaseDate" ClipboardContentBinding="{Binding PurchaseDate}">
|
<controls:DataGridTemplateColumnExt Width="90" Header="Purchase
Date" CanUserSort="True" SortMemberPath="PurchaseDate" ClipboardContentBinding="{Binding PurchaseDate}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:IGridEntry">
|
||||||
<Panel Opacity="{Binding Liberate.Opacity}" Background="{Binding Liberate.BackgroundBrush}">
|
<Panel Opacity="{CompiledBinding Liberate.Opacity}" Background="{CompiledBinding Liberate.BackgroundBrush}">
|
||||||
<TextBlock Text="{Binding PurchaseDate}" />
|
<TextBlock Text="{CompiledBinding PurchaseDate}" />
|
||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
</controls:DataGridTemplateColumnExt>
|
</controls:DataGridTemplateColumnExt>
|
||||||
|
|
||||||
<controls:DataGridMyRatingColumn
|
<controls:DataGridMyRatingColumn
|
||||||
|
x:DataType="uibase:IGridEntry"
|
||||||
Header="My Rating"
|
Header="My Rating"
|
||||||
IsReadOnly="false"
|
IsReadOnly="false"
|
||||||
Width="115"
|
Width="115"
|
||||||
SortMemberPath="MyRating" CanUserSort="True"
|
SortMemberPath="MyRating" CanUserSort="True"
|
||||||
OpacityBinding="{Binding Liberate.Opacity}"
|
OpacityBinding="{CompiledBinding Liberate.Opacity}"
|
||||||
BackgroundBinding="{Binding Liberate.BackgroundBrush}"
|
BackgroundBinding="{CompiledBinding Liberate.BackgroundBrush}"
|
||||||
ClipboardContentBinding="{Binding MyRating}"
|
ClipboardContentBinding="{CompiledBinding MyRating}"
|
||||||
Binding="{Binding MyRating, Mode=TwoWay}" />
|
Binding="{CompiledBinding MyRating, Mode=TwoWay}" />
|
||||||
|
|
||||||
<controls:DataGridTemplateColumnExt Width="135" Header="Misc" CanUserSort="True" SortMemberPath="Misc" ClipboardContentBinding="{Binding Misc}">
|
<controls:DataGridTemplateColumnExt Width="135" Header="Misc" CanUserSort="True" SortMemberPath="Misc" ClipboardContentBinding="{Binding Misc}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:IGridEntry">
|
||||||
<Panel Opacity="{Binding Liberate.Opacity}" Background="{Binding Liberate.BackgroundBrush}">
|
<Panel Opacity="{CompiledBinding Liberate.Opacity}" Background="{CompiledBinding Liberate.BackgroundBrush}">
|
||||||
<TextBlock Text="{Binding Misc}" TextWrapping="WrapWithOverflow" FontSize="10" />
|
<TextBlock Text="{CompiledBinding Misc}" TextWrapping="WrapWithOverflow" FontSize="10" />
|
||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
@ -195,9 +206,9 @@
|
|||||||
|
|
||||||
<controls:DataGridTemplateColumnExt Width="102" Header="Last
Download" CanUserSort="True" SortMemberPath="LastDownload" ClipboardContentBinding="{Binding LastDownload}">
|
<controls:DataGridTemplateColumnExt Width="102" Header="Last
Download" CanUserSort="True" SortMemberPath="LastDownload" ClipboardContentBinding="{Binding LastDownload}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:IGridEntry">
|
||||||
<Panel Opacity="{Binding Liberate.Opacity}" Background="{Binding Liberate.BackgroundBrush}" ToolTip.Tip="{Binding LastDownload.ToolTipText}" DoubleTapped="Version_DoubleClick">
|
<Panel Opacity="{CompiledBinding Liberate.Opacity}" Background="{CompiledBinding Liberate.BackgroundBrush}" ToolTip.Tip="{CompiledBinding LastDownload.ToolTipText}" DoubleTapped="Version_DoubleClick">
|
||||||
<TextBlock Text="{Binding LastDownload}" TextWrapping="WrapWithOverflow" FontSize="10" />
|
<TextBlock Text="{CompiledBinding LastDownload}" TextWrapping="WrapWithOverflow" FontSize="10" />
|
||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
@ -205,13 +216,13 @@
|
|||||||
|
|
||||||
<controls:DataGridTemplateColumnExt CanUserSort="True" Width="100" Header="Tags" SortMemberPath="BookTags" ClipboardContentBinding="{Binding BookTags}">
|
<controls:DataGridTemplateColumnExt CanUserSort="True" Width="100" Header="Tags" SortMemberPath="BookTags" ClipboardContentBinding="{Binding BookTags}">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:IGridEntry">
|
||||||
<Button IsVisible="{Binding !Liberate.IsSeries}" Width="100" Height="80" Click="OnTagsButtonClick" ToolTip.Tip="Click to edit tags" >
|
<Button IsVisible="{CompiledBinding !Liberate.IsSeries}" Width="100" Height="80" Click="OnTagsButtonClick" ToolTip.Tip="Click to edit tags" >
|
||||||
<Panel Opacity="{Binding Liberate.Opacity}">
|
<Panel Opacity="{CompiledBinding Liberate.Opacity}">
|
||||||
<Panel Width="24" Height="24" IsVisible="{Binding BookTags, Converter={x:Static StringConverters.IsNullOrEmpty}}">
|
<Panel Width="24" Height="24" IsVisible="{CompiledBinding BookTags, Converter={x:Static StringConverters.IsNullOrEmpty}}">
|
||||||
<Path Stretch="Uniform" Fill="{DynamicResource IconFill}" Data="{StaticResource EditTagsIcon}" />
|
<Path Stretch="Uniform" Fill="{DynamicResource IconFill}" Data="{StaticResource EditTagsIcon}" />
|
||||||
</Panel>
|
</Panel>
|
||||||
<TextBlock IsVisible="{Binding BookTags, Converter={x:Static StringConverters.IsNotNullOrEmpty}}" FontSize="12" TextWrapping="WrapWithOverflow" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding BookTags}"/>
|
<TextBlock IsVisible="{CompiledBinding BookTags, Converter={x:Static StringConverters.IsNotNullOrEmpty}}" FontSize="12" TextWrapping="WrapWithOverflow" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{CompiledBinding BookTags}"/>
|
||||||
</Panel>
|
</Panel>
|
||||||
</Button>
|
</Button>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
using ApplicationServices;
|
using ApplicationServices;
|
||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using Avalonia.Platform.Storage;
|
using Avalonia.Platform.Storage;
|
||||||
using DataLayer;
|
using DataLayer;
|
||||||
using FileLiberator;
|
using FileLiberator;
|
||||||
@ -256,7 +255,7 @@ namespace LibationAvalonia.Views
|
|||||||
contextMenu.MenuClosed += ContextMenu_MenuClosed;
|
contextMenu.MenuClosed += ContextMenu_MenuClosed;
|
||||||
contextMenu.ContextMenuOpening += ContextMenu_ContextMenuOpening;
|
contextMenu.ContextMenuOpening += ContextMenu_ContextMenuOpening;
|
||||||
List<Control> menuItems = new();
|
List<Control> menuItems = new();
|
||||||
contextMenu.Items = menuItems;
|
contextMenu.ItemsSource = menuItems;
|
||||||
|
|
||||||
menuItems.Add(new MenuItem { Header = "Show / Hide Columns" });
|
menuItems.Add(new MenuItem { Header = "Show / Hide Columns" });
|
||||||
menuItems.Add(new MenuItem { Header = "-" });
|
menuItems.Add(new MenuItem { Header = "-" });
|
||||||
@ -274,13 +273,9 @@ namespace LibationAvalonia.Views
|
|||||||
(
|
(
|
||||||
new MenuItem
|
new MenuItem
|
||||||
{
|
{
|
||||||
Header = ((string)column.Header).Replace((char)0xa, ' '),
|
Header = ((string)column.Header).Replace('\n', ' '),
|
||||||
Tag = column,
|
Tag = column,
|
||||||
Margin = new Thickness(6, 0),
|
Icon = new CheckBox(),
|
||||||
Icon = new CheckBox
|
|
||||||
{
|
|
||||||
Width = 50,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -1,16 +1,11 @@
|
|||||||
using AudibleApi.Common;
|
using Avalonia.Collections;
|
||||||
using AudibleApi;
|
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Media;
|
||||||
using DataLayer;
|
using DataLayer;
|
||||||
using Dinah.Core;
|
using Dinah.Core;
|
||||||
using FileLiberator;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using Avalonia.Collections;
|
|
||||||
using LibationAvalonia.Dialogs;
|
using LibationAvalonia.Dialogs;
|
||||||
using LibationUiBase.SeriesView;
|
using LibationUiBase.SeriesView;
|
||||||
using System;
|
using System;
|
||||||
using Avalonia.Media;
|
|
||||||
|
|
||||||
namespace LibationAvalonia.Views
|
namespace LibationAvalonia.Views
|
||||||
{
|
{
|
||||||
|
|||||||
@ -4,6 +4,7 @@
|
|||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||||
xmlns:controls="clr-namespace:LibationAvalonia.Controls"
|
xmlns:controls="clr-namespace:LibationAvalonia.Controls"
|
||||||
|
xmlns:uibase="clr-namespace:LibationUiBase.SeriesView;assembly=LibationUiBase"
|
||||||
x:Class="LibationAvalonia.Views.SeriesViewGrid">
|
x:Class="LibationAvalonia.Views.SeriesViewGrid">
|
||||||
|
|
||||||
<DataGrid
|
<DataGrid
|
||||||
@ -34,11 +35,11 @@
|
|||||||
|
|
||||||
<DataGridTemplateColumn Width="80" Header="Cover" CanUserSort="False">
|
<DataGridTemplateColumn Width="80" Header="Cover" CanUserSort="False">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:SeriesItem">
|
||||||
<Image
|
<Image
|
||||||
Tapped="Cover_Click"
|
Tapped="Cover_Click"
|
||||||
Height="80"
|
Height="80"
|
||||||
Source="{Binding Cover}"
|
Source="{CompiledBinding Cover}"
|
||||||
ToolTip.Tip="Click to see full size" />
|
ToolTip.Tip="Click to see full size" />
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
@ -46,10 +47,10 @@
|
|||||||
|
|
||||||
<DataGridTemplateColumn Width="Auto" Header="Series
Order" CanUserSort="True" SortMemberPath="Order">
|
<DataGridTemplateColumn Width="Auto" Header="Series
Order" CanUserSort="True" SortMemberPath="Order">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:SeriesItem">
|
||||||
<Panel>
|
<Panel>
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Text="{Binding Order}"
|
Text="{CompiledBinding Order}"
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
VerticalAlignment="Center" />
|
VerticalAlignment="Center" />
|
||||||
</Panel>
|
</Panel>
|
||||||
@ -59,7 +60,7 @@
|
|||||||
|
|
||||||
<DataGridTemplateColumn Width="Auto" Header="Availability" CanUserSort="True" SortMemberPath="Button">
|
<DataGridTemplateColumn Width="Auto" Header="Availability" CanUserSort="True" SortMemberPath="Button">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:SeriesItem">
|
||||||
<Panel>
|
<Panel>
|
||||||
<Panel.Styles>
|
<Panel.Styles>
|
||||||
<Style Selector="TextBlock">
|
<Style Selector="TextBlock">
|
||||||
@ -71,17 +72,17 @@
|
|||||||
HorizontalAlignment="Stretch"
|
HorizontalAlignment="Stretch"
|
||||||
VerticalAlignment="Stretch"
|
VerticalAlignment="Stretch"
|
||||||
Click="Availability_Click"
|
Click="Availability_Click"
|
||||||
IsVisible="{Binding Button.HasButtonAction}"
|
IsVisible="{CompiledBinding Button.HasButtonAction}"
|
||||||
IsEnabled="{Binding Button.Enabled}">
|
IsEnabled="{CompiledBinding Button.Enabled}">
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Text="{Binding Button.DisplayText}"
|
Text="{CompiledBinding Button.DisplayText}"
|
||||||
TextAlignment="Center"
|
TextAlignment="Center"
|
||||||
VerticalAlignment="Center" />
|
VerticalAlignment="Center" />
|
||||||
</Button>
|
</Button>
|
||||||
<TextBlock
|
<TextBlock
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
IsVisible="{Binding !Button.HasButtonAction}"
|
IsVisible="{CompiledBinding !Button.HasButtonAction}"
|
||||||
Text="{Binding Button.DisplayText}" />
|
Text="{CompiledBinding Button.DisplayText}" />
|
||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
</DataGridTemplateColumn.CellTemplate>
|
||||||
@ -89,11 +90,11 @@
|
|||||||
|
|
||||||
<DataGridTemplateColumn MinWidth="150" Width="*" Header="Title" CanUserSort="True" SortMemberPath="Title">
|
<DataGridTemplateColumn MinWidth="150" Width="*" Header="Title" CanUserSort="True" SortMemberPath="Title">
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
<DataGridTemplateColumn.CellTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate x:DataType="uibase:SeriesItem">
|
||||||
<Panel ToolTip.Tip="Open Audible product page">
|
<Panel ToolTip.Tip="Open Audible product page">
|
||||||
<controls:LinkLabel
|
<controls:LinkLabel
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Text="{Binding Title}"
|
Text="{CompiledBinding Title}"
|
||||||
Tapped="Title_Click" />
|
Tapped="Title_Click" />
|
||||||
</Panel>
|
</Panel>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
|
|||||||
@ -1,6 +1,4 @@
|
|||||||
using ApplicationServices;
|
|
||||||
using AudibleApi.Common;
|
using AudibleApi.Common;
|
||||||
using AudibleUtilities;
|
|
||||||
using Avalonia.Collections;
|
using Avalonia.Collections;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using DataLayer;
|
using DataLayer;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user