diff options
Diffstat (limited to 'mkvtool-gui')
| -rw-r--r-- | mkvtool-gui/App.axaml | 9 | ||||
| -rw-r--r-- | mkvtool-gui/MainWindow.axaml | 420 | ||||
| -rw-r--r-- | mkvtool-gui/MainWindow.axaml.cs | 361 | ||||
| -rw-r--r-- | mkvtool-gui/mkvtool.csproj | 2 |
4 files changed, 489 insertions, 303 deletions
diff --git a/mkvtool-gui/App.axaml b/mkvtool-gui/App.axaml index 9871dd1..74ac474 100644 --- a/mkvtool-gui/App.axaml +++ b/mkvtool-gui/App.axaml @@ -2,10 +2,13 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="mkvtool.App"> <Application.Styles> - <FluentTheme Mode="Light" /> + <FluentTheme Mode="Dark" /> </Application.Styles> <Application.Styles> - <StyleInclude Source="avares://Avalonia.Themes.Default/Accents/BaseLight.xaml" /> - <StyleInclude Source="avares://Avalonia.Controlz/Styles/Generic.axaml" /> + <StyleInclude Source="avares://Avalonia.Themes.Default/DefaultTheme.xaml"/> + <StyleInclude Source="avares://Avalonia.Themes.Default/Accents/BaseDark.xaml"/> + <StyleInclude Source="avares://Avalonia.ExtendedToolkit/Styles/Themes/Dark.Blue.axaml"/> + <StyleInclude Source="avares://Avalonia.Controlz/Styles/Generic.axaml"/> + <StyleInclude Source="avares://Avalonia.ExtendedToolkit/Styles/Generic.axaml"/> </Application.Styles> </Application>
\ No newline at end of file diff --git a/mkvtool-gui/MainWindow.axaml b/mkvtool-gui/MainWindow.axaml index 014010e..a6d2d94 100644 --- a/mkvtool-gui/MainWindow.axaml +++ b/mkvtool-gui/MainWindow.axaml @@ -1,218 +1,262 @@ -<Window 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="600" - d:DesignHeight="600" - Width="850" - Height="650" - x:Class="mkvtool.MainWindow" - WindowStartupLocation="CenterScreen" - xmlns:Controls="clr-namespace:Avalonia.Controlz.Controls;assembly=Avalonia.Controlz" - Title="MKV Tool" Opened="TopLevel_OnOpened"> +<Controls:MetroWindow 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="600" + d:DesignHeight="600" + Width="850" + Height="670" + x:Class="mkvtool.MainWindow" + WindowStartupLocation="CenterScreen" + xmlns:Controlz="clr-namespace:Avalonia.Controlz.Controls;assembly=Avalonia.Controlz" + xmlns:Controls="clr-namespace:Avalonia.ExtendedToolkit.Controls;assembly=Avalonia.ExtendedToolkit" + Title="MKV Tool" Opened="TopLevel_OnOpened"> <DockPanel> - <TabControl DockPanel.Dock="Left"> - <TabItem Header="Subset"> - <StackPanel> - <Controls:GroupBox Header="Check subsetted" Margin="10"> - <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> - <Button Content="File..." Click="CheckFileBtn_OnClick" Margin="5" /> - <Button Content="Folder..." Click="CheckFolderBtn_OnClick" Margin="5" /> - </StackPanel> - </Controls:GroupBox> - <Controls:GroupBox Header="Do subset" Margin="10"> - <StackPanel Margin="5" HorizontalAlignment="Center"> - <StackPanel Orientation="Horizontal" Margin="5"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> - <TextBlock Text="ASS subtitles:" /> - <ScrollViewer HorizontalScrollBarVisibility="Auto" - VerticalScrollBarVisibility="Auto"> - <TextBlock Name="sa1" /> - </ScrollViewer> - </StackPanel> - <Button Content="Select..." Tag="asses" Click="SubsetSelectBtns_OnClick" /> + <Grid Name="mainBox" IsEnabled="False"> + <TabControl DockPanel.Dock="Left"> + <TabItem Header="Subset"> + <StackPanel> + <Controlz:GroupBox Header="Check subsetted" Margin="10"> + <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> + <Button Content="File..." Click="CheckFileBtn_OnClick" Margin="5" /> + <Button Content="Folder..." Click="CheckFolderBtn_OnClick" Margin="5" /> </StackPanel> - <StackPanel Orientation="Horizontal" Margin="5"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> - <StackPanel Orientation="Horizontal"> - <TextBlock Text="Fonts:" /> + </Controlz:GroupBox> + <Controlz:GroupBox Header="Do subset" Margin="10"> + <StackPanel Margin="5" HorizontalAlignment="Center"> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <TextBlock Text="ASS subtitles:" /> <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> - <TextBlock Name="sa2" /> + <TextBlock Name="sa1" /> </ScrollViewer> </StackPanel> + <Button Content="Select..." Tag="asses" Click="SubsetSelectBtns_OnClick" /> </StackPanel> - <Button Content="Select..." Tag="fonts" Click="SubsetSelectBtns_OnClick" /> - </StackPanel> - <StackPanel Orientation="Horizontal" Margin="5"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> - <TextBlock Text="Output folder:" /> - <ScrollViewer HorizontalScrollBarVisibility="Auto" - VerticalScrollBarVisibility="Auto"> - <TextBlock Name="sa3" /> - </ScrollViewer> - </StackPanel> - <Button Content="Select..." Tag="output" Click="SubsetSelectBtns_OnClick" /> - </StackPanel> - <CheckBox Content="Output in sub folder" IsChecked="True" Name="sa4" /> - <Button Margin="10" Content="Go" Click="DoSubsetBtn_OnClick" /> - </StackPanel> - </Controls:GroupBox> - </StackPanel> - </TabItem> - <TabItem Header="Dump / Make"> - <StackPanel> - <Controls:GroupBox Header="Dump" Margin="10"> - <StackPanel Margin="5" HorizontalAlignment="Center"> - <StackPanel Orientation="Horizontal" Margin="5"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> - <TextBlock Text="File or folder:" /> - <ScrollViewer HorizontalScrollBarVisibility="Auto" - VerticalScrollBarVisibility="Auto"> - <TextBlock Name="da1" /> - </ScrollViewer> - </StackPanel> - <Button Content="Select file..." Tag="file" Click="DumpSelectBtns_OnClick" /> - <Button Content="Select folder..." Tag="folder" Click="DumpSelectBtns_OnClick" /> - </StackPanel> - <StackPanel Orientation="Horizontal" Margin="5"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> - <TextBlock Text="Output folder:" /> - <ScrollViewer HorizontalScrollBarVisibility="Auto" - VerticalScrollBarVisibility="Auto"> - <TextBlock Name="da2" /> - </ScrollViewer> - </StackPanel> - <Button Content="Select..." Tag="output" Click="DumpSelectBtns_OnClick" /> - </StackPanel> - <CheckBox Content="Subset" IsChecked="True" Name="da3" /> - <Button Margin="10" Content="Go" Click="DoDumpBtn_OnClick" /> - </StackPanel> - </Controls:GroupBox> - <Controls:GroupBox Header="Make" Margin="10"> - <StackPanel Margin="5" HorizontalAlignment="Center"> - <StackPanel Orientation="Horizontal" Margin="5"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> - <StackPanel Orientation="Horizontal"> - <TextBlock Text="Video folder:" /> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <StackPanel Orientation="Horizontal"> + <TextBlock Text="Fonts:" /> + <ScrollViewer HorizontalScrollBarVisibility="Auto" + VerticalScrollBarVisibility="Auto"> + <TextBlock Name="sa2" /> + </ScrollViewer> + </StackPanel> + </StackPanel> + <Button Content="Select..." Tag="fonts" Click="SubsetSelectBtns_OnClick" /> + </StackPanel> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <TextBlock Text="Output folder:" /> <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> - <TextBlock Name="ma1" /> + <TextBlock Name="sa3" /> </ScrollViewer> </StackPanel> + <Button Content="Select..." Tag="output" Click="SubsetSelectBtns_OnClick" /> </StackPanel> - <Button Content="Select..." Tag="dir" Click="MakeSelectBtns_OnClick" /> - </StackPanel> - <StackPanel Orientation="Horizontal" Margin="5"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> - <TextBlock Text="Data folder:" /> - <ScrollViewer HorizontalScrollBarVisibility="Auto" - VerticalScrollBarVisibility="Auto"> - <TextBlock Name="ma2" /> - </ScrollViewer> - </StackPanel> - <Button Content="Select..." Tag="data" Click="MakeSelectBtns_OnClick" /> - </StackPanel> - <StackPanel Orientation="Horizontal" Margin="5"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> - <TextBlock Text="Output folder:" /> - <ScrollViewer HorizontalScrollBarVisibility="Auto" - VerticalScrollBarVisibility="Auto"> - <TextBlock Name="ma3" /> - </ScrollViewer> - </StackPanel> - <Button Content="Select..." Tag="output" Click="MakeSelectBtns_OnClick" /> + <Controls:ToggleSwitch Content="Output in sub folder" IsChecked="True" Name="sa4" /> + <Button Margin="10" Content="Go" Click="DoSubsetBtn_OnClick" + HorizontalAlignment="Center" /> </StackPanel> - <StackPanel Orientation="Horizontal" Margin="5"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> - <TextBlock Text="Default Subtitle language:" VerticalAlignment="Center" - TextAlignment="Center" /> - <TextBox Name="ma4" /> + </Controlz:GroupBox> + <Controlz:GroupBox Header="Standard workflow" Margin="10"> + <StackPanel Margin="5" HorizontalAlignment="Center"> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <StackPanel Orientation="Horizontal"> + <TextBlock Text="Video folder:" /> + <ScrollViewer HorizontalScrollBarVisibility="Auto" + VerticalScrollBarVisibility="Auto"> + <TextBlock Name="wa1" /> + </ScrollViewer> + </StackPanel> + </StackPanel> + <Button Content="Select..." Tag="dir" Click="WorkflowSelectBtns_OnClick" /> </StackPanel> - </StackPanel> - <StackPanel Orientation="Horizontal" Margin="5"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> - <TextBlock Text="Default Subtitle title:" VerticalAlignment="Center" - TextAlignment="Center" /> - <TextBox Name="ma5" /> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <TextBlock Text="Data folder:" /> + <ScrollViewer HorizontalScrollBarVisibility="Auto" + VerticalScrollBarVisibility="Auto"> + <TextBlock Name="wa2" /> + </ScrollViewer> + </StackPanel> + <Button Content="Select..." Tag="data" Click="WorkflowSelectBtns_OnClick" /> </StackPanel> - </StackPanel> - <Button Margin="10" Content="Go" Click="DoMakeBtn_OnClick" /> - </StackPanel> - </Controls:GroupBox> - </StackPanel> - </TabItem> - <TabItem Header="Create"> - <StackPanel> - <Controls:GroupBox Header="Do Create" Margin="10"> - <StackPanel Margin="5" HorizontalAlignment="Center"> - <StackPanel Orientation="Horizontal" Margin="5"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> - <StackPanel Orientation="Horizontal"> - <TextBlock Text="Video folder:" /> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <TextBlock Text="Dist folder:" /> <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> - <TextBlock Name="ca1" /> + <TextBlock Name="wa3" /> </ScrollViewer> </StackPanel> + <Button Content="Select..." Tag="dist" Click="WorkflowSelectBtns_OnClick" /> </StackPanel> - <Button Content="Select..." Tag="v" Click="CreateSelectBtns_OnClick" /> - </StackPanel> - <StackPanel Orientation="Horizontal" Margin="5"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> - <TextBlock Text="Subtitles folder:" /> - <ScrollViewer HorizontalScrollBarVisibility="Auto" - VerticalScrollBarVisibility="Auto"> - <TextBlock Name="ca2" /> - </ScrollViewer> - </StackPanel> - <Button Content="Select..." Tag="s" Click="CreateSelectBtns_OnClick" /> + <Button Margin="10" Content="Go" Click="DoWorkflowBtn_OnClick" + HorizontalAlignment="Center" /> </StackPanel> - <StackPanel Orientation="Horizontal" Margin="5"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> - <TextBlock Text="Fonts folder:" /> - <ScrollViewer HorizontalScrollBarVisibility="Auto" - VerticalScrollBarVisibility="Auto"> - <TextBlock Name="ca3" /> - </ScrollViewer> - </StackPanel> - <Button Content="Select..." Tag="f" Click="CreateSelectBtns_OnClick" /> - </StackPanel> - <StackPanel Orientation="Horizontal" Margin="5"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> - <TextBlock Text="Output folder:" /> - <ScrollViewer HorizontalScrollBarVisibility="Auto" - VerticalScrollBarVisibility="Auto"> - <TextBlock Name="ca4" /> - </ScrollViewer> - </StackPanel> - <Button Content="Select..." Tag="o" Click="CreateSelectBtns_OnClick" /> + </Controlz:GroupBox> + </StackPanel> + </TabItem> + <TabItem Header="Dump / Make"> + <StackPanel> + <Controlz:GroupBox Header="Dump" Margin="10"> + <StackPanel Margin="5" HorizontalAlignment="Center"> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <TextBlock Text="File or folder:" /> + <ScrollViewer HorizontalScrollBarVisibility="Auto" + VerticalScrollBarVisibility="Auto"> + <TextBlock Name="da1" /> + </ScrollViewer> + </StackPanel> + <Button Content="Select file..." Tag="file" Click="DumpSelectBtns_OnClick" /> + <Button Content="Select folder..." Tag="folder" Click="DumpSelectBtns_OnClick" /> + </StackPanel> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <TextBlock Text="Output folder:" /> + <ScrollViewer HorizontalScrollBarVisibility="Auto" + VerticalScrollBarVisibility="Auto"> + <TextBlock Name="da2" /> + </ScrollViewer> + </StackPanel> + <Button Content="Select..." Tag="output" Click="DumpSelectBtns_OnClick" /> + </StackPanel> + <Controls:ToggleSwitch Content="Subset" IsChecked="True" Name="da3" /> + <Button Margin="10" Content="Go" Click="DoDumpBtn_OnClick" HorizontalAlignment="Center" /> </StackPanel> - <StackPanel Orientation="Horizontal" Margin="5"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> - <TextBlock Text="Default Subtitle language:" VerticalAlignment="Center" - TextAlignment="Center" /> - <TextBox Name="ca5" /> + </Controlz:GroupBox> + <Controlz:GroupBox Header="Make" Margin="10"> + <StackPanel Margin="5" HorizontalAlignment="Center"> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <StackPanel Orientation="Horizontal"> + <TextBlock Text="Video folder:" /> + <ScrollViewer HorizontalScrollBarVisibility="Auto" + VerticalScrollBarVisibility="Auto"> + <TextBlock Name="ma1" /> + </ScrollViewer> + </StackPanel> + </StackPanel> + <Button Content="Select..." Tag="dir" Click="MakeSelectBtns_OnClick" /> + </StackPanel> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <TextBlock Text="Data folder:" /> + <ScrollViewer HorizontalScrollBarVisibility="Auto" + VerticalScrollBarVisibility="Auto"> + <TextBlock Name="ma2" /> + </ScrollViewer> + </StackPanel> + <Button Content="Select..." Tag="data" Click="MakeSelectBtns_OnClick" /> + </StackPanel> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <TextBlock Text="Output folder:" /> + <ScrollViewer HorizontalScrollBarVisibility="Auto" + VerticalScrollBarVisibility="Auto"> + <TextBlock Name="ma3" /> + </ScrollViewer> + </StackPanel> + <Button Content="Select..." Tag="output" Click="MakeSelectBtns_OnClick" /> + </StackPanel> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <TextBlock Text="Default Subtitle language:" VerticalAlignment="Center" + TextAlignment="Center" /> + <TextBox Name="ma4" /> + </StackPanel> + </StackPanel> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <TextBlock Text="Default Subtitle title:" VerticalAlignment="Center" + TextAlignment="Center" /> + <TextBox Name="ma5" /> + </StackPanel> </StackPanel> + <Button Margin="10" Content="Go" Click="DoMakeBtn_OnClick" HorizontalAlignment="Center" /> </StackPanel> - <StackPanel Orientation="Horizontal" Margin="5"> - <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> - <TextBlock Text="Default Subtitle title:" VerticalAlignment="Center" - TextAlignment="Center" /> - <TextBox Name="ca6" /> + </Controlz:GroupBox> + </StackPanel> + </TabItem> + <TabItem Header="Create"> + <StackPanel> + <Controlz:GroupBox Header="Do Create" Margin="10"> + <StackPanel Margin="5" HorizontalAlignment="Center"> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <StackPanel Orientation="Horizontal"> + <TextBlock Text="Video folder:" /> + <ScrollViewer HorizontalScrollBarVisibility="Auto" + VerticalScrollBarVisibility="Auto"> + <TextBlock Name="ca1" /> + </ScrollViewer> + </StackPanel> + </StackPanel> + <Button Content="Select..." Tag="v" Click="CreateSelectBtns_OnClick" /> + </StackPanel> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <TextBlock Text="Subtitles folder:" /> + <ScrollViewer HorizontalScrollBarVisibility="Auto" + VerticalScrollBarVisibility="Auto"> + <TextBlock Name="ca2" /> + </ScrollViewer> + </StackPanel> + <Button Content="Select..." Tag="s" Click="CreateSelectBtns_OnClick" /> + </StackPanel> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <TextBlock Text="Fonts folder:" /> + <ScrollViewer HorizontalScrollBarVisibility="Auto" + VerticalScrollBarVisibility="Auto"> + <TextBlock Name="ca3" /> + </ScrollViewer> + </StackPanel> + <Button Content="Select..." Tag="f" Click="CreateSelectBtns_OnClick" /> + </StackPanel> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <TextBlock Text="Output folder:" /> + <ScrollViewer HorizontalScrollBarVisibility="Auto" + VerticalScrollBarVisibility="Auto"> + <TextBlock Name="ca4" /> + </ScrollViewer> + </StackPanel> + <Button Content="Select..." Tag="o" Click="CreateSelectBtns_OnClick" /> + </StackPanel> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <TextBlock Text="Default Subtitle language:" VerticalAlignment="Center" + TextAlignment="Center" /> + <TextBox Name="ca5" /> + </StackPanel> + </StackPanel> + <StackPanel Orientation="Horizontal" Margin="5"> + <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> + <TextBlock Text="Default Subtitle title:" VerticalAlignment="Center" + TextAlignment="Center" /> + <TextBox Name="ca6" /> + </StackPanel> </StackPanel> + <Controls:ToggleSwitch Content="Clean old data" IsChecked="False" Name="ca7" /> + <Button Margin="10" Content="Go" Click="DoCreateBtn_OnClick" + HorizontalAlignment="Center" /> </StackPanel> - <CheckBox Content="Clean old data" IsChecked="False" Name="ca7" /> - <Button Margin="10" Content="Go" Click="DoCreatetn_OnClick" /> - </StackPanel> - </Controls:GroupBox> - </StackPanel> - </TabItem> - </TabControl> - <Controls:GroupBox Header="Log" Margin="10" DockPanel.Dock="Right"> + </Controlz:GroupBox> + </StackPanel> + </TabItem> + </TabControl> + <Controls:BusyIndicator Name="busyBox" /> + </Grid> + <Controlz:GroupBox Header="Log" Margin="10" DockPanel.Dock="Right"> <ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto"> <TextBox IsReadOnly="True" Name="logBox" Margin="10" /> </ScrollViewer> - </Controls:GroupBox> + </Controlz:GroupBox> </DockPanel> -</Window>
\ No newline at end of file +</Controls:MetroWindow>
\ No newline at end of file diff --git a/mkvtool-gui/MainWindow.axaml.cs b/mkvtool-gui/MainWindow.axaml.cs index d3b792b..02e7f28 100644 --- a/mkvtool-gui/MainWindow.axaml.cs +++ b/mkvtool-gui/MainWindow.axaml.cs @@ -1,11 +1,12 @@ using System; -using System.IO; +using System.Threading; using System.Threading.Tasks; using Avalonia.Controls; +using Avalonia.ExtendedToolkit.Controls; using Avalonia.Interactivity; using Avalonia.Markup.Xaml; -using MessageBox.Avalonia; -using MEnums = MessageBox.Avalonia.Enums; +using Avalonia.Threading; +using ToggleSwitch = Avalonia.ExtendedToolkit.Controls.ToggleSwitch; namespace mkvtool { @@ -26,19 +27,18 @@ namespace mkvtool string[] files = await ShowSelectFileDialog("MKV file", new string[] {"mkv"}, false); if (files != null) { - bool[] result = mkvlib.CheckSubset(files[0], lcb); - if (result[1]) - await MessageBoxManager.GetMessageBoxStandardWindow("Check result", - "Has error.", MEnums.ButtonEnum.Ok, - MEnums.Icon.Error, WindowStartupLocation.CenterOwner).Show(); - else if (result[0]) - await MessageBoxManager.GetMessageBoxStandardWindow("Check result", - "This mkv file are subsetted.", MEnums.ButtonEnum.Ok, - MEnums.Icon.Info, WindowStartupLocation.CenterOwner).Show(); - else - await MessageBoxManager.GetMessageBoxStandardWindow("Check result", - "This mkv file are not subsetted.", MEnums.ButtonEnum.Ok, - MEnums.Icon.Warning, WindowStartupLocation.CenterOwner).Show(); + SetBusy(true); + new Thread(() => + { + bool[] result = mkvlib.CheckSubset(files[0], lcb); + if (result[1]) + PrintResult("Check", "Has error."); + else if (result[0]) + PrintResult("Check", "This mkv file are subsetted."); + else + PrintResult("Check", "This mkv file are not subsetted."); + SetBusy(false); + }).Start(); } } @@ -47,33 +47,56 @@ namespace mkvtool string dir = await new OpenFolderDialog().ShowAsync(this); if (!string.IsNullOrEmpty(dir)) { - string[] list = mkvlib.QueryFolder(dir, lcb); - if (list != null && list.Length > 0) + SetBusy(true); + new Thread(() => { - lcb("Not subsetted file list:"); - lcb(" ----- Begin ----- "); - lcb(string.Join(Environment.NewLine, list)); - lcb(" ----- End ----- "); - } - else - lcb("All files are subsetted."); + string[] list = mkvlib.QueryFolder(dir, lcb); + if (list != null && list.Length > 0) + { + lcb("Not subsetted file list:"); + lcb(" ----- Begin ----- "); + lcb(string.Join(Environment.NewLine, list)); + lcb(" ----- End ----- "); + } + else + lcb("All files are subsetted."); + + SetBusy(false); + }).Start(); } } void lcb(string str) { - this.FindControl<TextBox>("logBox").Text += str + Environment.NewLine; + DoUIThread(() => + this.FindControl<TextBox>("logBox").Text += str + Environment.NewLine); } private async void TopLevel_OnOpened(object? sender, EventArgs e) { - if (!mkvlib.InitInstance(lcb)) + this.Closing += (_, __) => Environment.Exit(0); + SetBusy(true); + new Thread(() => { - await MessageBoxManager.GetMessageBoxStandardWindow("Check result", - "Failed to init mkvlib.", MEnums.ButtonEnum.Ok, - MEnums.Icon.Error, WindowStartupLocation.CenterOwner).Show(); - this.IsEnabled = false; - } + try + { + if (!mkvlib.InitInstance(lcb)) + { + PrintResult("Init", "Failed to init mkvlib."); + } + else + { + PrintResult("Init", "Init successfully."); + DoUIThread(() => this.FindControl<Grid>("mainBox").IsEnabled = true); + } + } + catch + { + PrintResult("Init", "Missing mkvlib."); + } + + SetBusy(false); + }).Start(); } class SubsetArg @@ -143,24 +166,30 @@ namespace mkvtool if (SubsetArg.Asses != null && SubsetArg.Asses.Length > 0 && !string.IsNullOrEmpty(SubsetArg.Fonts) && !string.IsNullOrEmpty(SubsetArg.Output)) { - SubsetArg.DirSafe = this.FindControl<CheckBox>("sa4").IsChecked == true; - if (mkvlib.ASSFontSubset(SubsetArg.Asses, SubsetArg.Fonts, SubsetArg.Output, SubsetArg.DirSafe, lcb)) + SetBusy(true); + SubsetArg.DirSafe = this.FindControl<ToggleSwitch>("sa4").IsChecked == true; + new Thread(() => { - await MessageBoxManager.GetMessageBoxStandardWindow("Subset result", - "Subset successfully.", MEnums.ButtonEnum.Ok, - MEnums.Icon.Info, WindowStartupLocation.CenterOwner).Show(); - SubsetArg.Asses = null; - SubsetArg.Fonts = string.Empty; - SubsetArg.Output = string.Empty; - this.FindControl<TextBlock>("sa1").Text = string.Empty; - this.FindControl<TextBlock>("sa2").Text = string.Empty; - this.FindControl<TextBlock>("sa3").Text = string.Empty; - this.FindControl<CheckBox>("sa4").IsCancel = true; - } - else - await MessageBoxManager.GetMessageBoxStandardWindow("Subset result", - "Failed to subset.", MEnums.ButtonEnum.Ok, - MEnums.Icon.Info, WindowStartupLocation.CenterOwner).Show(); + if (mkvlib.ASSFontSubset(SubsetArg.Asses, SubsetArg.Fonts, SubsetArg.Output, SubsetArg.DirSafe, + lcb)) + { + PrintResult("Subset", "Subset successfully."); + SubsetArg.Asses = null; + SubsetArg.Fonts = string.Empty; + SubsetArg.Output = string.Empty; + DoUIThread(() => + { + this.FindControl<TextBlock>("sa1").Text = string.Empty; + this.FindControl<TextBlock>("sa2").Text = string.Empty; + this.FindControl<TextBlock>("sa3").Text = string.Empty; + this.FindControl<ToggleSwitch>("sa4").IsChecked = true; + }); + } + else + PrintResult("Subset", "Failed to subset."); + + SetBusy(false); + }).Start(); } } @@ -223,26 +252,31 @@ namespace mkvtool if (!string.IsNullOrEmpty(DumpArg.Path) && !string.IsNullOrEmpty(DumpArg.Output)) { - DumpArg.Subset = this.FindControl<CheckBox>("da3").IsChecked == true; - bool r = !DumpArg.Dir - ? mkvlib.DumpMKV(DumpArg.Path, DumpArg.Output, DumpArg.Subset, lcb) - : mkvlib.DumpMKVs(DumpArg.Path, DumpArg.Output, DumpArg.Subset, lcb); - if (r) + DumpArg.Subset = this.FindControl<ToggleSwitch>("da3").IsChecked == true; + SetBusy(true); + new Thread(() => { - await MessageBoxManager.GetMessageBoxStandardWindow("Dump result", - "Dump successfully.", MEnums.ButtonEnum.Ok, - MEnums.Icon.Info, WindowStartupLocation.CenterOwner).Show(); - DumpArg.Path = string.Empty; - DumpArg.Output = string.Empty; - DumpArg.Dir = false; - this.FindControl<TextBlock>("da1").Text = string.Empty; - this.FindControl<TextBlock>("da2").Text = string.Empty; - this.FindControl<CheckBox>("da3").IsCancel = true; - } - else - await MessageBoxManager.GetMessageBoxStandardWindow("Dump result", - "Failed to dump.", MEnums.ButtonEnum.Ok, - MEnums.Icon.Info, WindowStartupLocation.CenterOwner).Show(); + bool r = !DumpArg.Dir + ? mkvlib.DumpMKV(DumpArg.Path, DumpArg.Output, DumpArg.Subset, lcb) + : mkvlib.DumpMKVs(DumpArg.Path, DumpArg.Output, DumpArg.Subset, lcb); + if (r) + { + PrintResult("Dump", "Dump successfully."); + DumpArg.Path = string.Empty; + DumpArg.Output = string.Empty; + DumpArg.Dir = false; + DoUIThread(() => + { + this.FindControl<TextBlock>("da1").Text = string.Empty; + this.FindControl<TextBlock>("da2").Text = string.Empty; + this.FindControl<ToggleSwitch>("da3").IsChecked = true; + }); + } + else + PrintResult("Dump", "Failed to dump."); + + SetBusy(false); + }).Start(); } } @@ -304,26 +338,31 @@ namespace mkvtool { MakeArg.slang = this.FindControl<TextBox>("ma4").Text; MakeArg.stitle = this.FindControl<TextBox>("ma5").Text; - if (mkvlib.MakeMKVs(MakeArg.Dir, MakeArg.Data, MakeArg.Output, MakeArg.slang, MakeArg.stitle, lcb)) + SetBusy(true); + new Thread(() => { - await MessageBoxManager.GetMessageBoxStandardWindow("Make result", - "Make successfully.", MEnums.ButtonEnum.Ok, - MEnums.Icon.Info, WindowStartupLocation.CenterOwner).Show(); - MakeArg.Dir = string.Empty; - MakeArg.Data = string.Empty; - MakeArg.Output = string.Empty; - MakeArg.slang = string.Empty; - MakeArg.stitle = string.Empty; - this.FindControl<TextBlock>("ma1").Text = string.Empty; - this.FindControl<TextBlock>("ma2").Text = string.Empty; - this.FindControl<TextBlock>("ma3").Text = string.Empty; - this.FindControl<TextBox>("ma4").Text = string.Empty; - this.FindControl<TextBox>("ma5").Text = string.Empty; - } - else - await MessageBoxManager.GetMessageBoxStandardWindow("Make result", - "Failed to make.", MEnums.ButtonEnum.Ok, - MEnums.Icon.Info, WindowStartupLocation.CenterOwner).Show(); + if (mkvlib.MakeMKVs(MakeArg.Dir, MakeArg.Data, MakeArg.Output, MakeArg.slang, MakeArg.stitle, lcb)) + { + PrintResult("Make", "Make successfully."); + MakeArg.Dir = string.Empty; + MakeArg.Data = string.Empty; + MakeArg.Output = string.Empty; + MakeArg.slang = string.Empty; + MakeArg.stitle = string.Empty; + DoUIThread(() => + { + this.FindControl<TextBlock>("ma1").Text = string.Empty; + this.FindControl<TextBlock>("ma2").Text = string.Empty; + this.FindControl<TextBlock>("ma3").Text = string.Empty; + this.FindControl<TextBox>("ma4").Text = string.Empty; + this.FindControl<TextBox>("ma5").Text = string.Empty; + }); + } + else + PrintResult("Make", "Failed to make."); + + SetBusy(false); + }).Start(); } } @@ -391,38 +430,138 @@ namespace mkvtool } } - private async void DoCreatetn_OnClick(object? sender, RoutedEventArgs e) + private async void DoCreateBtn_OnClick(object? sender, RoutedEventArgs e) { if (!string.IsNullOrEmpty(CreateArg.vDir) && !string.IsNullOrEmpty(CreateArg.sDir) && !string.IsNullOrEmpty(CreateArg.fDir) && !string.IsNullOrEmpty(CreateArg.oDir)) { CreateArg.slang = this.FindControl<TextBox>("ca5").Text; CreateArg.stitle = this.FindControl<TextBox>("ca6").Text; - CreateArg.clean = this.FindControl<CheckBox>("ca7").IsChecked == true; - if (mkvlib.CreateMKVs(CreateArg.vDir, CreateArg.sDir, CreateArg.fDir, string.Empty, CreateArg.oDir, - CreateArg.slang, CreateArg.stitle, CreateArg.clean, lcb)) + CreateArg.clean = this.FindControl<ToggleSwitch>("ca7").IsChecked == true; + SetBusy(true); + new Thread(() => { - await MessageBoxManager.GetMessageBoxStandardWindow("Create result", - "Create successfully.", MEnums.ButtonEnum.Ok, - MEnums.Icon.Info, WindowStartupLocation.CenterOwner).Show(); - CreateArg.vDir = string.Empty; - CreateArg.sDir = string.Empty; - CreateArg.fDir = string.Empty; - CreateArg.oDir = string.Empty; - CreateArg.clean = false; - this.FindControl<TextBlock>("ca1").Text = string.Empty; - this.FindControl<TextBlock>("ca2").Text = string.Empty; - this.FindControl<TextBlock>("ca3").Text = string.Empty; - this.FindControl<TextBlock>("ca4").Text = string.Empty; - this.FindControl<TextBox>("ca5").Text = string.Empty; - this.FindControl<TextBox>("ca6").Text = string.Empty; - this.FindControl<CheckBox>("ca7").IsChecked = false; - } - else - await MessageBoxManager.GetMessageBoxStandardWindow("Create result", - "Failed to create.", MEnums.ButtonEnum.Ok, - MEnums.Icon.Info, WindowStartupLocation.CenterOwner).Show(); + if (mkvlib.CreateMKVs(CreateArg.vDir, CreateArg.sDir, CreateArg.fDir, string.Empty, CreateArg.oDir, + CreateArg.slang, CreateArg.stitle, CreateArg.clean, lcb)) + { + PrintResult("Create", "Create successfully."); + CreateArg.vDir = string.Empty; + CreateArg.sDir = string.Empty; + CreateArg.fDir = string.Empty; + CreateArg.oDir = string.Empty; + CreateArg.clean = false; + DoUIThread(() => + { + this.FindControl<TextBlock>("ca1").Text = string.Empty; + this.FindControl<TextBlock>("ca2").Text = string.Empty; + this.FindControl<TextBlock>("ca3").Text = string.Empty; + this.FindControl<TextBlock>("ca4").Text = string.Empty; + this.FindControl<TextBox>("ca5").Text = string.Empty; + this.FindControl<TextBox>("ca6").Text = string.Empty; + this.FindControl<ToggleSwitch>("ca7").IsChecked = false; + }); + } + else + PrintResult("Create", "Failed to create."); + + SetBusy(false); + }).Start(); } } + + class WorkflowArg + { + public static string Dir { get; set; } + public static string Data { get; set; } + public static string Dist { get; set; } + } + + private async void WorkflowSelectBtns_OnClick(object? sender, RoutedEventArgs e) + { + Button btn = (Button) sender; + string dir; + switch (btn.Tag.ToString()) + { + case "dir": + WorkflowArg.Dir = string.Empty; + this.FindControl<TextBlock>("wa1").Text = string.Empty; + dir = await new OpenFolderDialog().ShowAsync(this); + if (!string.IsNullOrEmpty(dir)) + { + WorkflowArg.Dir = dir; + this.FindControl<TextBlock>("wa1").Text = dir; + } + + break; + case "data": + WorkflowArg.Data = string.Empty; + this.FindControl<TextBlock>("wa2").Text = string.Empty; + dir = await new OpenFolderDialog().ShowAsync(this); + if (!string.IsNullOrEmpty(dir)) + { + WorkflowArg.Data = dir; + this.FindControl<TextBlock>("wa2").Text = dir; + } + + break; + case "dist": + WorkflowArg.Dist = string.Empty; + this.FindControl<TextBlock>("wa3").Text = string.Empty; + dir = await new OpenFolderDialog().ShowAsync(this); + if (!string.IsNullOrEmpty(dir)) + { + WorkflowArg.Dist = dir; + this.FindControl<TextBlock>("wa3").Text = dir; + } + + break; + } + } + + private async void DoWorkflowBtn_OnClick(object? sender, RoutedEventArgs e) + { + if (!string.IsNullOrEmpty(WorkflowArg.Dir) && !string.IsNullOrEmpty(WorkflowArg.Data) && + !string.IsNullOrEmpty(WorkflowArg.Dist)) + { + SetBusy(true); + new Thread(() => + { + if (mkvlib.DumpMKVs(WorkflowArg.Dir, WorkflowArg.Data, true, lcb) && + mkvlib.MakeMKVs(WorkflowArg.Dir, WorkflowArg.Data, WorkflowArg.Dist, "", "", lcb)) + { + PrintResult("Workflow", "Workflow successfully."); + WorkflowArg.Dir = string.Empty; + WorkflowArg.Data = string.Empty; + WorkflowArg.Dist = string.Empty; + DoUIThread(() => + { + this.FindControl<TextBlock>("wa1").Text = string.Empty; + this.FindControl<TextBlock>("wa2").Text = string.Empty; + this.FindControl<TextBlock>("wa3").Text = string.Empty; + }); + } + else + PrintResult("Workflow", "Failed to workflow."); + + SetBusy(false); + }).Start(); + } + } + + void PrintResult(string str1, string str2) + { + string str = $"##### {str1} result: \"{str2}\""; + lcb(str); + } + + async void DoUIThread(Action action) + { + await Dispatcher.UIThread.InvokeAsync(action); + } + + void SetBusy(bool busy) + { + DoUIThread(() => this.FindControl<BusyIndicator>("busyBox").IsBusy = busy); + } } }
\ No newline at end of file diff --git a/mkvtool-gui/mkvtool.csproj b/mkvtool-gui/mkvtool.csproj index 0791134..bf95164 100644 --- a/mkvtool-gui/mkvtool.csproj +++ b/mkvtool-gui/mkvtool.csproj @@ -23,6 +23,6 @@ <PackageReference Include="Avalonia" Version="0.10.8" /> <PackageReference Include="Avalonia.Desktop" Version="0.10.8" /> <PackageReference Include="mameolan.Avalonia.Controlz" Version="1.0.0-CI-20211017-144151" /> - <PackageReference Include="MessageBox.Avalonia" Version="1.5.3" /> + <PackageReference Include="mameolan.Avalonia.ExtendedToolkit" Version="1.0.0-CI-20211017-144151" /> </ItemGroup> </Project> |
