summaryrefslogtreecommitdiff
path: root/mkvtool-gui
diff options
context:
space:
mode:
Diffstat (limited to 'mkvtool-gui')
-rw-r--r--mkvtool-gui/App.axaml9
-rw-r--r--mkvtool-gui/MainWindow.axaml420
-rw-r--r--mkvtool-gui/MainWindow.axaml.cs361
-rw-r--r--mkvtool-gui/mkvtool.csproj2
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>