Bring Hangover Chardonnay into feature parity with Classic (#409)
This commit is contained in:
parent
ef973ac56a
commit
7d6000e3b6
@ -17,10 +17,12 @@ namespace HangoverAvalonia
|
|||||||
{
|
{
|
||||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||||
{
|
{
|
||||||
desktop.MainWindow = new MainWindow
|
var mainWindow = new MainWindow
|
||||||
{
|
{
|
||||||
DataContext = new MainWindowViewModel(),
|
DataContext = new MainVM(),
|
||||||
};
|
};
|
||||||
|
desktop.MainWindow = mainWindow;
|
||||||
|
mainWindow.OnLoad();
|
||||||
}
|
}
|
||||||
|
|
||||||
base.OnFrameworkInitializationCompleted();
|
base.OnFrameworkInitializationCompleted();
|
||||||
|
|||||||
30
Source/HangoverAvalonia/Controls/CheckedListBox.axaml
Normal file
30
Source/HangoverAvalonia/Controls/CheckedListBox.axaml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<UserControl xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||||
|
x:Class="HangoverAvalonia.Controls.CheckedListBox">
|
||||||
|
|
||||||
|
<UserControl.Resources>
|
||||||
|
<RecyclePool x:Key="RecyclePool" />
|
||||||
|
<DataTemplate x:Key="queuedBook">
|
||||||
|
<CheckBox Margin="10,0,0,0" Content="{Binding Item}" IsChecked="{Binding IsChecked, Mode=TwoWay}" />
|
||||||
|
</DataTemplate>
|
||||||
|
<RecyclingElementFactory x:Key="elementFactory" RecyclePool="{StaticResource RecyclePool}">
|
||||||
|
<RecyclingElementFactory.Templates>
|
||||||
|
<StaticResource x:Key="queuedBook" ResourceKey="queuedBook" />
|
||||||
|
</RecyclingElementFactory.Templates>
|
||||||
|
</RecyclingElementFactory>
|
||||||
|
</UserControl.Resources>
|
||||||
|
|
||||||
|
<ScrollViewer
|
||||||
|
Name="scroller"
|
||||||
|
HorizontalScrollBarVisibility="Disabled"
|
||||||
|
VerticalScrollBarVisibility="Auto">
|
||||||
|
<ItemsRepeater IsVisible="True"
|
||||||
|
VerticalCacheLength="1.2"
|
||||||
|
HorizontalCacheLength="1"
|
||||||
|
Items="{Binding CheckboxItems}"
|
||||||
|
ItemTemplate="{StaticResource elementFactory}" />
|
||||||
|
</ScrollViewer>
|
||||||
|
</UserControl>
|
||||||
106
Source/HangoverAvalonia/Controls/CheckedListBox.axaml.cs
Normal file
106
Source/HangoverAvalonia/Controls/CheckedListBox.axaml.cs
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
using Avalonia;
|
||||||
|
using Avalonia.Collections;
|
||||||
|
using Avalonia.Controls;
|
||||||
|
using DataLayer;
|
||||||
|
using HangoverAvalonia.ViewModels;
|
||||||
|
using NPOI.XSSF.Streaming.Properties;
|
||||||
|
using ReactiveUI;
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace HangoverAvalonia.Controls
|
||||||
|
{
|
||||||
|
public partial class CheckedListBox : UserControl
|
||||||
|
{
|
||||||
|
public event EventHandler<ItemCheckEventArgs> ItemCheck;
|
||||||
|
|
||||||
|
public static readonly StyledProperty<IEnumerable> ItemsProperty =
|
||||||
|
AvaloniaProperty.Register<CheckedListBox, IEnumerable>(nameof(Items));
|
||||||
|
|
||||||
|
public IEnumerable Items { get => GetValue(ItemsProperty); set => SetValue(ItemsProperty, value); }
|
||||||
|
private CheckedListBoxViewModel _viewModel = new();
|
||||||
|
|
||||||
|
public IEnumerable<object> CheckedItems =>
|
||||||
|
_viewModel
|
||||||
|
.CheckboxItems
|
||||||
|
.Where(i => i.IsChecked)
|
||||||
|
.Select(i => i.Item);
|
||||||
|
|
||||||
|
public void SetItemChecked(int i, bool isChecked) => _viewModel.CheckboxItems[i].IsChecked = isChecked;
|
||||||
|
public void SetItemChecked(object item, bool isChecked)
|
||||||
|
{
|
||||||
|
var obj = _viewModel.CheckboxItems.SingleOrDefault(i => i.Item == item);
|
||||||
|
if (obj is not null)
|
||||||
|
obj.IsChecked = isChecked;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CheckedListBox()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
scroller.DataContext = _viewModel;
|
||||||
|
_viewModel.CheckedChanged += _viewModel_CheckedChanged;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void _viewModel_CheckedChanged(object sender, CheckBoxViewModel e)
|
||||||
|
{
|
||||||
|
var args = new ItemCheckEventArgs { Item = e.Item, ItemIndex = _viewModel.CheckboxItems.IndexOf(e), IsChecked = e.IsChecked };
|
||||||
|
ItemCheck?.Invoke(this, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
|
||||||
|
{
|
||||||
|
if (change.Property.Name == nameof(Items) && Items != null)
|
||||||
|
_viewModel.SetItems(Items);
|
||||||
|
base.OnPropertyChanged(change);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class CheckedListBoxViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
public event EventHandler<CheckBoxViewModel> CheckedChanged;
|
||||||
|
public AvaloniaList<CheckBoxViewModel> CheckboxItems { get; private set; }
|
||||||
|
|
||||||
|
public void SetItems(IEnumerable items)
|
||||||
|
{
|
||||||
|
UnsubscribeFromItems(CheckboxItems);
|
||||||
|
CheckboxItems = new(items.OfType<object>().Select(o => new CheckBoxViewModel { Item = o }));
|
||||||
|
SubscribeToItems(CheckboxItems);
|
||||||
|
this.RaisePropertyChanged(nameof(CheckboxItems));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SubscribeToItems(IEnumerable objects)
|
||||||
|
{
|
||||||
|
foreach (var i in objects.OfType<INotifyPropertyChanged>())
|
||||||
|
i.PropertyChanged += I_PropertyChanged;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UnsubscribeFromItems(AvaloniaList<CheckBoxViewModel> objects)
|
||||||
|
{
|
||||||
|
if (objects is null) return;
|
||||||
|
|
||||||
|
foreach (var i in objects)
|
||||||
|
i.PropertyChanged -= I_PropertyChanged;
|
||||||
|
}
|
||||||
|
private void I_PropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||||
|
{
|
||||||
|
CheckedChanged?.Invoke(this, (CheckBoxViewModel)sender);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public class CheckBoxViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
private bool _isChecked;
|
||||||
|
public bool IsChecked { get => _isChecked; set => this.RaiseAndSetIfChanged(ref _isChecked, value); }
|
||||||
|
private object _bookText;
|
||||||
|
public object Item { get => _bookText; set => this.RaiseAndSetIfChanged(ref _bookText, value); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ItemCheckEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
public int ItemIndex { get; init; }
|
||||||
|
public bool IsChecked { get; init; }
|
||||||
|
public object Item { get; init; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -50,7 +50,12 @@
|
|||||||
<None Remove="Assets\hangover.ico" />
|
<None Remove="Assets\hangover.ico" />
|
||||||
<None Remove="hangover.ico" />
|
<None Remove="hangover.ico" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Update="ViewModels\MainVM.*.cs">
|
||||||
|
<DependentUpon>MainVM.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<AvaloniaResource Include="hangover.ico" />
|
<AvaloniaResource Include="hangover.ico" />
|
||||||
|
|||||||
38
Source/HangoverAvalonia/ViewModels/MainVM.Database.cs
Normal file
38
Source/HangoverAvalonia/ViewModels/MainVM.Database.cs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
using HangoverBase;
|
||||||
|
using ReactiveUI;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace HangoverAvalonia.ViewModels
|
||||||
|
{
|
||||||
|
public partial class MainVM
|
||||||
|
{
|
||||||
|
private DatabaseTab _tab;
|
||||||
|
|
||||||
|
private string _databaseFileText;
|
||||||
|
private bool _databaseFound;
|
||||||
|
private string _sqlResults;
|
||||||
|
public string DatabaseFileText { get => _databaseFileText; set => this.RaiseAndSetIfChanged(ref _databaseFileText, value); }
|
||||||
|
public string SqlQuery { get; set; }
|
||||||
|
public bool DatabaseFound { get => _databaseFound; set => this.RaiseAndSetIfChanged(ref _databaseFound, value); }
|
||||||
|
public string SqlResults { get => _sqlResults; set => this.RaiseAndSetIfChanged(ref _sqlResults, value); }
|
||||||
|
|
||||||
|
private void Load_databaseVM()
|
||||||
|
{
|
||||||
|
_tab = new(new(() => SqlQuery, s => SqlResults = s, s => SqlResults = s));
|
||||||
|
|
||||||
|
_tab.LoadDatabaseFile();
|
||||||
|
if (_tab.DbFile is null)
|
||||||
|
{
|
||||||
|
DatabaseFileText = $"Database file not found";
|
||||||
|
DatabaseFound = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DatabaseFileText = $"Database file: {_tab.DbFile}";
|
||||||
|
DatabaseFound = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ExecuteQuery() => _tab.ExecuteQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
43
Source/HangoverAvalonia/ViewModels/MainVM.Deleted.cs
Normal file
43
Source/HangoverAvalonia/ViewModels/MainVM.Deleted.cs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
using ApplicationServices;
|
||||||
|
using DataLayer;
|
||||||
|
using ReactiveUI;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace HangoverAvalonia.ViewModels
|
||||||
|
{
|
||||||
|
public partial class MainVM
|
||||||
|
{
|
||||||
|
private List<LibraryBook> _deletedBooks;
|
||||||
|
public List<LibraryBook> DeletedBooks { get => _deletedBooks; set => this.RaiseAndSetIfChanged(ref _deletedBooks, value); }
|
||||||
|
public string CheckedCountText => $"Checked : {_checkedBooksCount} of {_totalBooksCount}";
|
||||||
|
|
||||||
|
private int _totalBooksCount = 0;
|
||||||
|
private int _checkedBooksCount = 0;
|
||||||
|
public int CheckedBooksCount
|
||||||
|
{
|
||||||
|
get => _checkedBooksCount;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_checkedBooksCount != value)
|
||||||
|
{
|
||||||
|
_checkedBooksCount = value;
|
||||||
|
this.RaisePropertyChanged(nameof(CheckedCountText));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void Load_deletedVM()
|
||||||
|
{
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reload()
|
||||||
|
{
|
||||||
|
DeletedBooks = DbContexts.GetContext().GetDeletedLibraryBooks();
|
||||||
|
_checkedBooksCount = 0;
|
||||||
|
_totalBooksCount = DeletedBooks.Count;
|
||||||
|
this.RaisePropertyChanged(nameof(CheckedCountText));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
18
Source/HangoverAvalonia/ViewModels/MainVM.cs
Normal file
18
Source/HangoverAvalonia/ViewModels/MainVM.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
using ApplicationServices;
|
||||||
|
using DataLayer;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using HangoverBase;
|
||||||
|
using ReactiveUI;
|
||||||
|
|
||||||
|
namespace HangoverAvalonia.ViewModels
|
||||||
|
{
|
||||||
|
public partial class MainVM : ViewModelBase
|
||||||
|
{
|
||||||
|
public MainVM()
|
||||||
|
{
|
||||||
|
Load_databaseVM();
|
||||||
|
Load_deletedVM();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,37 +0,0 @@
|
|||||||
using System;
|
|
||||||
using HangoverBase;
|
|
||||||
using ReactiveUI;
|
|
||||||
|
|
||||||
namespace HangoverAvalonia.ViewModels
|
|
||||||
{
|
|
||||||
public class MainWindowViewModel : ViewModelBase
|
|
||||||
{
|
|
||||||
private DatabaseTab _tab;
|
|
||||||
|
|
||||||
private string _databaseFileText;
|
|
||||||
private bool _databaseFound;
|
|
||||||
private string _sqlResults;
|
|
||||||
public string DatabaseFileText { get => _databaseFileText; set => this.RaiseAndSetIfChanged(ref _databaseFileText, value); }
|
|
||||||
public string SqlQuery { get; set; }
|
|
||||||
public bool DatabaseFound { get => _databaseFound; set => this.RaiseAndSetIfChanged(ref _databaseFound, value); }
|
|
||||||
public string SqlResults { get => _sqlResults; set => this.RaiseAndSetIfChanged(ref _sqlResults, value); }
|
|
||||||
|
|
||||||
public MainWindowViewModel()
|
|
||||||
{
|
|
||||||
_tab = new(new(() => SqlQuery, s => SqlResults = s, s => SqlResults = s));
|
|
||||||
|
|
||||||
_tab.LoadDatabaseFile();
|
|
||||||
if (_tab.DbFile is null)
|
|
||||||
{
|
|
||||||
DatabaseFileText = $"Database file not found";
|
|
||||||
DatabaseFound = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
DatabaseFileText = $"Database file: {_tab.DbFile}";
|
|
||||||
DatabaseFound = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ExecuteQuery() => _tab.ExecuteQuery();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
17
Source/HangoverAvalonia/Views/MainWindow.CLI.cs
Normal file
17
Source/HangoverAvalonia/Views/MainWindow.CLI.cs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace HangoverAvalonia.Views
|
||||||
|
{
|
||||||
|
public partial class MainWindow
|
||||||
|
{
|
||||||
|
private void cliTab_VisibleChanged(bool isVisible)
|
||||||
|
{
|
||||||
|
if (!isVisible)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
23
Source/HangoverAvalonia/Views/MainWindow.Database.cs
Normal file
23
Source/HangoverAvalonia/Views/MainWindow.Database.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using HangoverAvalonia.ViewModels;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace HangoverAvalonia.Views
|
||||||
|
{
|
||||||
|
public partial class MainWindow
|
||||||
|
{
|
||||||
|
private void databaseTab_VisibleChanged(bool isVisible)
|
||||||
|
{
|
||||||
|
if (!isVisible)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Execute_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
_viewModel.ExecuteQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
41
Source/HangoverAvalonia/Views/MainWindow.Deleted.cs
Normal file
41
Source/HangoverAvalonia/Views/MainWindow.Deleted.cs
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
using ApplicationServices;
|
||||||
|
using DataLayer;
|
||||||
|
using HangoverAvalonia.Controls;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace HangoverAvalonia.Views
|
||||||
|
{
|
||||||
|
public partial class MainWindow
|
||||||
|
{
|
||||||
|
private void deletedTab_VisibleChanged(bool isVisible)
|
||||||
|
{
|
||||||
|
if (!isVisible)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (_viewModel.DeletedBooks.Count == 0)
|
||||||
|
_viewModel.reload();
|
||||||
|
}
|
||||||
|
public void Deleted_CheckedListBox_ItemCheck(object sender, ItemCheckEventArgs args)
|
||||||
|
{
|
||||||
|
_viewModel.CheckedBooksCount = deletedCbl.CheckedItems.Count();
|
||||||
|
}
|
||||||
|
public void Deleted_CheckAll_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
foreach (var item in deletedCbl.Items)
|
||||||
|
deletedCbl.SetItemChecked(item, true);
|
||||||
|
}
|
||||||
|
public void Deleted_UncheckAll_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
foreach (var item in deletedCbl.Items)
|
||||||
|
deletedCbl.SetItemChecked(item, false);
|
||||||
|
}
|
||||||
|
public void Deleted_Save_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var libraryBooksToRestore = deletedCbl.CheckedItems.Cast<LibraryBook>().ToList();
|
||||||
|
var qtyChanges = libraryBooksToRestore.RestoreBooks();
|
||||||
|
if (qtyChanges > 0)
|
||||||
|
_viewModel.reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3,33 +3,74 @@
|
|||||||
xmlns:vm="using:HangoverAvalonia.ViewModels"
|
xmlns:vm="using:HangoverAvalonia.ViewModels"
|
||||||
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"
|
||||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="500"
|
xmlns:controls="clr-namespace:HangoverAvalonia.Controls"
|
||||||
|
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="500"
|
||||||
Width="800" Height="500"
|
Width="800" Height="500"
|
||||||
x:Class="HangoverAvalonia.Views.MainWindow"
|
x:Class="HangoverAvalonia.Views.MainWindow"
|
||||||
Icon="/Assets/hangover.ico "
|
Icon="/Assets/hangover.ico "
|
||||||
Title="Hangover: Libation debug and recovery tool">
|
Title="Hangover: Libation debug and recovery tool">
|
||||||
|
|
||||||
<Design.DataContext>
|
<Design.DataContext>
|
||||||
<vm:MainWindowViewModel/>
|
<vm:MainVM/>
|
||||||
</Design.DataContext>
|
</Design.DataContext>
|
||||||
|
|
||||||
<TabControl Grid.Row="0">
|
<TabControl Name="tabControl1" Grid.Row="0">
|
||||||
<TabControl.Styles>
|
<TabControl.Styles>
|
||||||
<Style Selector="ItemsPresenter#PART_ItemsPresenter">
|
<Style Selector="ItemsPresenter#PART_ItemsPresenter">
|
||||||
<Setter Property="Height" Value="18"/>
|
<Setter Property="Height" Value="23"/>
|
||||||
</Style>
|
</Style>
|
||||||
<Style Selector="TabItem">
|
<Style Selector="TabItem">
|
||||||
<Setter Property="MinHeight" Value="30"/>
|
<Setter Property="MinHeight" Value="40"/>
|
||||||
<Setter Property="Height" Value="30"/>
|
<Setter Property="Height" Value="40"/>
|
||||||
<Setter Property="Padding" Value="8,2,8,0"/>
|
<Setter Property="Padding" Value="8,2,8,5"/>
|
||||||
</Style>
|
</Style>
|
||||||
<Style Selector="TabItem#Header TextBlock">
|
<Style Selector="TabItem#Header TextBlock">
|
||||||
<Setter Property="MinHeight" Value="5"/>
|
<Setter Property="MinHeight" Value="5"/>
|
||||||
</Style>
|
</Style>
|
||||||
|
<Style Selector="Button">
|
||||||
|
<Setter Property="Padding" Value="20,5,20,5"/>
|
||||||
|
</Style>
|
||||||
</TabControl.Styles>
|
</TabControl.Styles>
|
||||||
|
|
||||||
|
<!-- Deleted Books Tab -->
|
||||||
|
<TabItem Name="deletedTab">
|
||||||
|
<TabItem.Header>
|
||||||
|
<TextBlock FontSize="14" VerticalAlignment="Center">Deleted Books</TextBlock>
|
||||||
|
</TabItem.Header>
|
||||||
|
|
||||||
|
<Grid
|
||||||
|
RowDefinitions="Auto,*,Auto">
|
||||||
|
|
||||||
|
<TextBlock
|
||||||
|
Grid.Row="0"
|
||||||
|
Margin="5"
|
||||||
|
Text="To restore deleted book, check box and save" />
|
||||||
|
|
||||||
|
<controls:CheckedListBox
|
||||||
|
Grid.Row="1"
|
||||||
|
Margin="5,0,5,0"
|
||||||
|
BorderThickness="1"
|
||||||
|
BorderBrush="Gray"
|
||||||
|
Name="deletedCbl"
|
||||||
|
Items="{Binding DeletedBooks}" />
|
||||||
|
|
||||||
|
<Grid
|
||||||
|
Grid.Row="2"
|
||||||
|
Margin="5"
|
||||||
|
ColumnDefinitions="Auto,Auto,Auto,*">
|
||||||
|
|
||||||
|
<Button Grid.Column="0" Margin="0,0,20,0" Content="Check All" Click="Deleted_CheckAll_Click" />
|
||||||
|
<Button Grid.Column="1" Margin="0,0,20,0" Content="Uncheck All" Click="Deleted_UncheckAll_Click" />
|
||||||
|
<TextBlock Grid.Column="2" VerticalAlignment="Center" Text="{Binding CheckedCountText}" />
|
||||||
|
<Button Grid.Column="3" HorizontalAlignment="Right" Content="Save" Click="Deleted_Save_Click" />
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
|
||||||
<!-- Database Tab -->
|
<!-- Database Tab -->
|
||||||
<TabItem>
|
<TabItem Name="databaseTab">
|
||||||
<TabItem.Header>
|
<TabItem.Header>
|
||||||
<TextBlock FontSize="14" VerticalAlignment="Center">Database</TextBlock>
|
<TextBlock FontSize="14" VerticalAlignment="Center">Database</TextBlock>
|
||||||
</TabItem.Header>
|
</TabItem.Header>
|
||||||
@ -52,7 +93,6 @@
|
|||||||
|
|
||||||
<Button
|
<Button
|
||||||
Grid.Row="3"
|
Grid.Row="3"
|
||||||
Padding="20,5,20,5"
|
|
||||||
Content="Execute"
|
Content="Execute"
|
||||||
IsEnabled="{Binding DatabaseFound}"
|
IsEnabled="{Binding DatabaseFound}"
|
||||||
Click="Execute_Click" />
|
Click="Execute_Click" />
|
||||||
@ -65,8 +105,9 @@
|
|||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<!-- Command Line Interface Tab -->
|
<!-- Command Line Interface Tab -->
|
||||||
<TabItem>
|
<TabItem Name="cliTab">
|
||||||
<TabItem.Header>
|
<TabItem.Header>
|
||||||
<TextBlock FontSize="14" VerticalAlignment="Center">Command Line Interface</TextBlock>
|
<TextBlock FontSize="14" VerticalAlignment="Center">Command Line Interface</TextBlock>
|
||||||
</TabItem.Header>
|
</TabItem.Header>
|
||||||
|
|||||||
@ -1,24 +1,29 @@
|
|||||||
using AppScaffolding;
|
using AppScaffolding;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using HangoverAvalonia.ViewModels;
|
using HangoverAvalonia.ViewModels;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace HangoverAvalonia.Views
|
namespace HangoverAvalonia.Views
|
||||||
{
|
{
|
||||||
public partial class MainWindow : Window
|
public partial class MainWindow : Window
|
||||||
{
|
{
|
||||||
MainWindowViewModel _viewModel => DataContext as MainWindowViewModel;
|
MainVM _viewModel => DataContext as MainVM;
|
||||||
public MainWindow()
|
public MainWindow()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
var config = LibationScaffolding.RunPreConfigMigrations();
|
var config = LibationScaffolding.RunPreConfigMigrations();
|
||||||
LibationScaffolding.RunPostConfigMigrations(config);
|
LibationScaffolding.RunPostConfigMigrations(config);
|
||||||
LibationScaffolding.RunPostMigrationScaffolding(config);
|
LibationScaffolding.RunPostMigrationScaffolding(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Execute_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e)
|
public void OnLoad()
|
||||||
{
|
{
|
||||||
_viewModel.ExecuteQuery();
|
deletedCbl.ItemCheck += Deleted_CheckedListBox_ItemCheck;
|
||||||
|
databaseTab.PropertyChanged += (_, e) => { if (e.Property.Name == nameof(TabItem.IsSelected)) databaseTab_VisibleChanged(databaseTab.IsSelected); };
|
||||||
|
deletedTab.PropertyChanged += (_, e) => { if (e.Property.Name == nameof(TabItem.IsSelected)) deletedTab_VisibleChanged(deletedTab.IsSelected); };
|
||||||
|
cliTab.PropertyChanged += (_, e) => { if (e.Property.Name == nameof(TabItem.IsSelected)) cliTab_VisibleChanged(cliTab.IsSelected); };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user