diff --git a/Source/LibationWinForms/AvaloniaUI/FormSaveExtension2.cs b/Source/LibationWinForms/AvaloniaUI/FormSaveExtension2.cs index d595f2b3..4e0f36ca 100644 --- a/Source/LibationWinForms/AvaloniaUI/FormSaveExtension2.cs +++ b/Source/LibationWinForms/AvaloniaUI/FormSaveExtension2.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; @@ -90,5 +91,29 @@ namespace LibationWinForms.AvaloniaUI public int Width; public bool IsMaximized; } + + + public static void HideMinMaxBtns(this Window form) + { + + if (Design.IsDesignMode) + return; +#if WINDOWS7_0 + var handle = form.PlatformImpl.Handle.Handle; + var currentStyle = GetWindowLong(handle, GWL_STYLE); + + SetWindowLong(handle, GWL_STYLE, currentStyle & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX); +#endif + } + +#if WINDOWS7_0 + const long WS_MINIMIZEBOX = 0x00020000L; + const long WS_MAXIMIZEBOX = 0x10000L; + const int GWL_STYLE = -16; + [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetWindowLong")] + static extern long GetWindowLong(IntPtr hWnd, int nIndex); + [System.Runtime.InteropServices.DllImport("user32.dll")] + static extern int SetWindowLong(IntPtr hWnd, int nIndex, long dwNewLong); +#endif } } diff --git a/Source/LibationWinForms/AvaloniaUI/MessageBox.cs b/Source/LibationWinForms/AvaloniaUI/MessageBox.cs index 9583bcee..1fc42833 100644 --- a/Source/LibationWinForms/AvaloniaUI/MessageBox.cs +++ b/Source/LibationWinForms/AvaloniaUI/MessageBox.cs @@ -235,12 +235,11 @@ namespace LibationWinForms.AvaloniaUI { var dialog = new MessageBoxWindow(); -#if WINDOWS7_0 - HideMinMaxBtns(dialog.PlatformImpl.Handle.Handle); -#endif + dialog.HideMinMaxBtns(); var vm = new MessageBoxViewModel(message, caption, buttons, icon, defaultButton); dialog.DataContext = vm; + dialog.ControlToFocusOnShow = dialog.FindControl(defaultButton.ToString()); dialog.CanResize = false; dialog.WindowStartupLocation = WindowStartupLocation.CenterOwner; var tbx = dialog.FindControl("messageTextBlock"); @@ -295,21 +294,5 @@ namespace LibationWinForms.AvaloniaUI } } -#if WINDOWS7_0 - - private static void HideMinMaxBtns(IntPtr handle) - { - var currentStyle = GetWindowLong(handle, GWL_STYLE); - - SetWindowLong(handle, GWL_STYLE, currentStyle & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX); - } - const long WS_MINIMIZEBOX = 0x00020000L; - const long WS_MAXIMIZEBOX = 0x10000L; - const int GWL_STYLE = -16; - [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetWindowLong")] - static extern long GetWindowLong(IntPtr hWnd, int nIndex); - [System.Runtime.InteropServices.DllImport("user32.dll")] - static extern int SetWindowLong(IntPtr hWnd, int nIndex, long dwNewLong); -#endif } } diff --git a/Source/LibationWinForms/AvaloniaUI/ViewModels/ProductsDisplayViewModel.cs b/Source/LibationWinForms/AvaloniaUI/ViewModels/ProductsDisplayViewModel.cs index 3604bd1c..031deb2a 100644 --- a/Source/LibationWinForms/AvaloniaUI/ViewModels/ProductsDisplayViewModel.cs +++ b/Source/LibationWinForms/AvaloniaUI/ViewModels/ProductsDisplayViewModel.cs @@ -31,7 +31,7 @@ namespace LibationWinForms.AvaloniaUI.ViewModels public bool RemoveColumnVisivle { get => _removeColumnVisivle; private set => this.RaiseAndSetIfChanged(ref _removeColumnVisivle, value); } public List GetVisibleBookEntries() - => GridEntries + => GridEntries.InternalList .BookEntries() .Select(lbe => lbe.LibraryBook) .ToList(); diff --git a/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/BookDetailsDialog2.axaml b/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/BookDetailsDialog2.axaml index 5ecdd665..4b2c5ff4 100644 --- a/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/BookDetailsDialog2.axaml +++ b/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/BookDetailsDialog2.axaml @@ -11,6 +11,12 @@ Icon="/AvaloniaUI/Assets/libation.ico"> + + + diff --git a/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/BookDetailsDialog2.axaml.cs b/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/BookDetailsDialog2.axaml.cs index a3d67ee4..3aa32e98 100644 --- a/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/BookDetailsDialog2.axaml.cs +++ b/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/BookDetailsDialog2.axaml.cs @@ -12,7 +12,7 @@ using System.Linq; namespace LibationWinForms.AvaloniaUI.Views.Dialogs { - public partial class BookDetailsDialog2 : Window + public partial class BookDetailsDialog2 : DialogWindow { private LibraryBook _libraryBook; private BookDetailsDialogViewModel _viewModel; @@ -34,9 +34,7 @@ namespace LibationWinForms.AvaloniaUI.Views.Dialogs public BookDetailsDialog2() { InitializeComponent(); -#if DEBUG - this.AttachDevTools(); -#endif + if (Design.IsDesignMode) { using var context = DbContexts.GetContext(); @@ -48,6 +46,14 @@ namespace LibationWinForms.AvaloniaUI.Views.Dialogs LibraryBook = libraryBook; } + + protected override void SaveAndClose() + { + SaveButton_Clicked(null, null); + base.SaveAndClose(); + } + + public void SaveButton_Clicked(object sender, Avalonia.Interactivity.RoutedEventArgs e) { LibraryBook.Book.UpdateBook(NewTags, bookStatus: BookLiberatedStatus, pdfStatus: PdfLiberatedStatus); diff --git a/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/DialogWindow.cs b/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/DialogWindow.cs new file mode 100644 index 00000000..116ec36f --- /dev/null +++ b/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/DialogWindow.cs @@ -0,0 +1,37 @@ +using Avalonia; +using Avalonia.Controls; +using System; + +namespace LibationWinForms.AvaloniaUI.Views.Dialogs +{ + public abstract class DialogWindow : Window + { + public Control ControlToFocusOnShow { get; set; } + public DialogWindow() + { + this.HideMinMaxBtns(); + this.KeyDown += DialogWindow_KeyDown; + this.Opened += DialogWindow_Opened; + +#if DEBUG + this.AttachDevTools(); +#endif + } + + private void DialogWindow_Opened(object sender, EventArgs e) + { + ControlToFocusOnShow?.Focus(); + } + + protected virtual void SaveAndClose() => Close(DialogResult.OK); + protected virtual void CancelAndClose() => Close(DialogResult.Cancel); + + private void DialogWindow_KeyDown(object sender, Avalonia.Input.KeyEventArgs e) + { + if (e.Key == Avalonia.Input.Key.Escape) + CancelAndClose(); + else if (e.Key == Avalonia.Input.Key.Return) + SaveAndClose(); + } + } +} diff --git a/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/LiberatedStatusBatchDialog.axaml b/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/LiberatedStatusBatchDialog.axaml new file mode 100644 index 00000000..fbe98a97 --- /dev/null +++ b/Source/LibationWinForms/AvaloniaUI/Views/Dialogs/LiberatedStatusBatchDialog.axaml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + +