This commit is contained in:
Konstantin Safonov 2023-01-12 00:23:19 +05:00
parent 4bf84c4e7b
commit 000000009d
No known key found for this signature in database
GPG Key ID: 32B8B67B8ED6D629
20 changed files with 387 additions and 835 deletions

28
.github/workflows/dotnet.yml vendored Normal file
View File

@ -0,0 +1,28 @@
name: .NET
defaults:
run:
working-directory: src
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
dotnet-version: ['7.0.x' ]
steps:
- uses: actions/checkout@v3
- name: Setup .NET Core SDK ${{ matrix.dotnet-version }}
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ matrix.dotnet-version }}
- name: Install dependencies
run: dotnet restore
- name: Build
run: dotnet build --configuration Release --no-restore
- name: Test
run: dotnet test --no-restore --verbosity normal

561
.gitignore vendored
View File

@ -1,255 +1,7 @@
# Created by https://www.toptal.com/developers/gitignore/api/c,c++,csharp,visualstudio,visualstudiocode,intellij,clion,clion+all
# Edit at https://www.toptal.com/developers/gitignore?templates=c,c++,csharp,visualstudio,visualstudiocode,intellij,clion,clion+all
### C ###
# Prerequisites
*.d
# Object files
*.o
*.ko
*.obj
*.elf
# Linker output
*.ilk
*.map
*.exp
# Precompiled Headers
*.gch
*.pch
# Libraries
*.lib
*.a
*.la
*.lo
# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib
# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex
# Debug files
*.dSYM/
*.su
*.idb
*.pdb
# Kernel Module Compile Results
*.mod*
*.cmd
.tmp_versions/
modules.order
Module.symvers
Mkfile.old
dkms.conf
### C++ ###
# Prerequisites
# Compiled Object files
*.slo
# Precompiled Headers
# Compiled Dynamic libraries
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
# Executables
### CLion ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
### CLion Patch ###
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
# *.iml
# modules.xml
# .idea/misc.xml
# *.ipr
# Sonarlint plugin
# https://plugins.jetbrains.com/plugin/7973-sonarlint
.idea/**/sonarlint/
# SonarQube Plugin
# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin
.idea/**/sonarIssues.xml
# Markdown Navigator plugin
# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced
.idea/**/markdown-navigator.xml
.idea/**/markdown-navigator-enh.xml
.idea/**/markdown-navigator/
# Cache file creation bug
# See https://youtrack.jetbrains.com/issue/JBR-2257
.idea/$CACHE_FILE$
# CodeStream plugin
# https://plugins.jetbrains.com/plugin/12206-codestream
.idea/codestream.xml
# Azure Toolkit for IntelliJ plugin
# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij
.idea/**/azureSettings.xml
### CLion+all ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
# AWS User-specific
# Generated files
# Sensitive or high-churn files
# Gradle
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
# Mongo Explorer plugin
# File-based project format
# IntelliJ
# mpeltonen/sbt-idea plugin
# JIRA plugin
# Cursive Clojure plugin
# SonarLint plugin
# Crashlytics plugin (for Android Studio and IntelliJ)
# Editor-based Rest Client
# Android studio 3.1+ serialized cache file
### CLion+all Patch ###
# Ignore everything but code style settings and run configurations
# that are supposed to be shared within teams.
.idea/*
!.idea/codeStyles
!.idea/runConfigurations
### Csharp ###
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
@ -320,8 +72,12 @@ StyleCopReport.xml
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
@ -334,7 +90,6 @@ StyleCopReport.xml
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
@ -428,7 +183,7 @@ publish/
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
#*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
@ -538,15 +293,6 @@ node_modules/
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
@ -603,9 +349,6 @@ ASALocalRun/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
@ -617,295 +360,3 @@ MigrationBackup/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
### Intellij ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
# AWS User-specific
# Generated files
# Sensitive or high-churn files
# Gradle
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
# Mongo Explorer plugin
# File-based project format
# IntelliJ
# mpeltonen/sbt-idea plugin
# JIRA plugin
# Cursive Clojure plugin
# SonarLint plugin
# Crashlytics plugin (for Android Studio and IntelliJ)
# Editor-based Rest Client
# Android studio 3.1+ serialized cache file
### Intellij Patch ###
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
# *.iml
# modules.xml
# .idea/misc.xml
# *.ipr
# Sonarlint plugin
# https://plugins.jetbrains.com/plugin/7973-sonarlint
# SonarQube Plugin
# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin
# Markdown Navigator plugin
# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced
# Cache file creation bug
# See https://youtrack.jetbrains.com/issue/JBR-2257
# CodeStream plugin
# https://plugins.jetbrains.com/plugin/12206-codestream
# Azure Toolkit for IntelliJ plugin
# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij
### VisualStudioCode ###
!.vscode/*.code-snippets
# Local History for Visual Studio Code
# Built Visual Studio Code Extensions
*.vsix
### VisualStudioCode Patch ###
# Ignore all local history of files
.history
.ionide
### VisualStudio ###
# User-specific files
# User-specific files (MonoDevelop/Xamarin Studio)
# Mono auto generated files
# Build results
# Visual Studio 2015/2017 cache/options directory
# Uncomment if you have tasks that create the project's static files in wwwroot
# Visual Studio 2017 auto generated files
# MSTest test Results
# NUnit
# Build Results of an ATL Project
# Benchmark Results
# .NET Core
# ASP.NET Scaffolding
# StyleCop
# Files built by Visual Studio
# Chutzpah Test files
# Visual C++ cache files
# Visual Studio profiler
# Visual Studio Trace Files
# TFS 2012 Local Workspace
# Guidance Automation Toolkit
# ReSharper is a .NET coding add-in
# TeamCity is a build add-in
# DotCover is a Code Coverage Tool
# AxoCover is a Code Coverage Tool
# Coverlet is a free, cross platform Code Coverage Tool
# Visual Studio code coverage results
# NCrunch
# MightyMoose
# Web workbench (sass)
# Installshield output folder
# DocProject is a documentation generator add-in
# Click-Once directory
# Publish Web Output
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
# NuGet Packages
# NuGet Symbol Packages
# The packages folder can be ignored because of Package Restore
# except build/, which is used as an MSBuild target.
# Uncomment if necessary however generally it will be regenerated when needed
# NuGet v3's project.json files produces more ignorable files
# Microsoft Azure Build Output
# Microsoft Azure Emulator
# Windows Store app package directories and files
# Visual Studio cache files
# files ending in .cache can be ignored
# but keep track of directories ending in .cache
# Others
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
# RIA/Silverlight projects
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
# SQL Server files
# Business Intelligence projects
# Microsoft Fakes
# GhostDoc plugin setting file
# Node.js Tools for Visual Studio
# Visual Studio 6 build log
# Visual Studio 6 workspace options file
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
# Visual Studio 6 technical files
# Visual Studio LightSwitch build output
# Paket dependency manager
# FAKE - F# Make
# CodeRush personal settings
# Python Tools for Visual Studio (PTVS)
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
# Telerik's JustMock configuration file
# BizTalk build output
# OpenCover UI analysis results
# Azure Stream Analytics local run output
# MSBuild Binary and Structured Log
# NVidia Nsight GPU debugger configuration file
# MFractors (Xamarin productivity tool) working folder
# Local History for Visual Studio
# Visual Studio History (VSHistory) files
# BeatPulse healthcheck temp database
# Backup folder for Package Reference Convert tool in Visual Studio 2017
# Ionide (cross platform F# VS Code tools) working folder
# Fody - auto-generated XML schema
# VS Code files for those working on multiple tools
# Local History for Visual Studio Code
# Windows Installer files from build outputs
# JetBrains Rider
### VisualStudio Patch ###
# Additional files built by Visual Studio
# End of https://www.toptal.com/developers/gitignore/api/c,c++,csharp,visualstudio,visualstudiocode,intellij,clion,clion+all

Binary file not shown.

48
src/kru.gui/Command.cs Normal file
View File

@ -0,0 +1,48 @@
namespace ConverterGui;
using System.Diagnostics;
using System.Reflection;
internal record Command(string InputFile, string OutputFile, bool Clean, bool SaveLog)
{
private string ExecutablePath =>
Path.Combine(
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location!)!,
@"Tools\x64\retime_phoneme.exe"
);
public string GetBatchLine() => string.Join(" ", new[] { $"\"{ExecutablePath}\"" }.Concat(GetArguments().Select(arg => $"\"{arg}\"")));
public Process GetProcess()
{
var proc = new Process()
{
StartInfo = new ProcessStartInfo
{
FileName = ExecutablePath
},
EnableRaisingEvents = true,
};
foreach (var item in this.GetArguments())
{
proc.StartInfo.ArgumentList.Add(item);
}
return proc;
}
private IEnumerable<string> GetArguments()
{
yield return "-s";
yield return InputFile;
yield return "-d";
yield return OutputFile;
if (Clean)
{
yield return "-oc";
}
if (SaveLog)
{
yield return "-o";
}
}
}

View File

@ -1,9 +1,7 @@
using kru.gui.UI;
namespace ConverterGui;
namespace kru.gui
internal static class Program
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
@ -13,7 +11,6 @@ namespace kru.gui
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new FrmMain());
}
Application.Run(new frmMain());
}
}

View File

@ -1,224 +0,0 @@
namespace kru.gui.UI
{
partial class FrmMain
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.groupBoxInput = new System.Windows.Forms.GroupBox();
this.buttonBrowseInput = new System.Windows.Forms.Button();
this.textBoxInput = new System.Windows.Forms.TextBox();
this.groupBoxOutput = new System.Windows.Forms.GroupBox();
this.groupBoxMode = new System.Windows.Forms.GroupBox();
this.radioButtonC = new System.Windows.Forms.RadioButton();
this.radioButtonD = new System.Windows.Forms.RadioButton();
this.buttonBrowseOutput = new System.Windows.Forms.Button();
this.checkBoxSaveLogs = new System.Windows.Forms.CheckBox();
this.textBoxOutput = new System.Windows.Forms.TextBox();
this.buttonStart = new System.Windows.Forms.Button();
this.buttonSaveBatch = new System.Windows.Forms.Button();
this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog();
this.groupBoxInput.SuspendLayout();
this.groupBoxOutput.SuspendLayout();
this.groupBoxMode.SuspendLayout();
this.SuspendLayout();
//
// groupBoxInput
//
this.groupBoxInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBoxInput.Controls.Add(this.buttonBrowseInput);
this.groupBoxInput.Controls.Add(this.textBoxInput);
this.groupBoxInput.Location = new System.Drawing.Point(12, 12);
this.groupBoxInput.Name = "groupBoxInput";
this.groupBoxInput.Size = new System.Drawing.Size(358, 64);
this.groupBoxInput.TabIndex = 0;
this.groupBoxInput.TabStop = false;
this.groupBoxInput.Text = "Input:";
//
// buttonBrowseInput
//
this.buttonBrowseInput.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.buttonBrowseInput.Location = new System.Drawing.Point(277, 22);
this.buttonBrowseInput.Name = "buttonBrowseInput";
this.buttonBrowseInput.Size = new System.Drawing.Size(75, 23);
this.buttonBrowseInput.TabIndex = 1;
this.buttonBrowseInput.Text = "Browse";
this.buttonBrowseInput.UseVisualStyleBackColor = true;
this.buttonBrowseInput.Click += new System.EventHandler(this.buttonBrowseInput_Click);
//
// textBoxInput
//
this.textBoxInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.textBoxInput.Location = new System.Drawing.Point(6, 22);
this.textBoxInput.Name = "textBoxInput";
this.textBoxInput.Size = new System.Drawing.Size(265, 23);
this.textBoxInput.TabIndex = 0;
//
// groupBoxOutput
//
this.groupBoxOutput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBoxOutput.Controls.Add(this.groupBoxMode);
this.groupBoxOutput.Controls.Add(this.buttonBrowseOutput);
this.groupBoxOutput.Controls.Add(this.checkBoxSaveLogs);
this.groupBoxOutput.Controls.Add(this.textBoxOutput);
this.groupBoxOutput.Location = new System.Drawing.Point(12, 82);
this.groupBoxOutput.Name = "groupBoxOutput";
this.groupBoxOutput.Size = new System.Drawing.Size(358, 136);
this.groupBoxOutput.TabIndex = 0;
this.groupBoxOutput.TabStop = false;
this.groupBoxOutput.Text = "Output:";
//
// groupBoxMode
//
this.groupBoxMode.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.groupBoxMode.Controls.Add(this.radioButtonC);
this.groupBoxMode.Controls.Add(this.radioButtonD);
this.groupBoxMode.Location = new System.Drawing.Point(6, 51);
this.groupBoxMode.Name = "groupBoxMode";
this.groupBoxMode.Size = new System.Drawing.Size(262, 79);
this.groupBoxMode.TabIndex = 2;
this.groupBoxMode.TabStop = false;
this.groupBoxMode.Text = "Mode:";
//
// radioButtonC
//
this.radioButtonC.AutoSize = true;
this.radioButtonC.Location = new System.Drawing.Point(6, 47);
this.radioButtonC.Name = "radioButtonC";
this.radioButtonC.Size = new System.Drawing.Size(55, 19);
this.radioButtonC.TabIndex = 0;
this.radioButtonC.Text = "Clean";
this.radioButtonC.UseVisualStyleBackColor = true;
//
// radioButtonD
//
this.radioButtonD.AutoSize = true;
this.radioButtonD.Checked = true;
this.radioButtonD.Location = new System.Drawing.Point(6, 22);
this.radioButtonD.Name = "radioButtonD";
this.radioButtonD.Size = new System.Drawing.Size(102, 19);
this.radioButtonD.TabIndex = 0;
this.radioButtonD.TabStop = true;
this.radioButtonD.Text = "Fixed (Default)";
this.radioButtonD.UseVisualStyleBackColor = true;
//
// buttonBrowseOutput
//
this.buttonBrowseOutput.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.buttonBrowseOutput.Location = new System.Drawing.Point(277, 21);
this.buttonBrowseOutput.Name = "buttonBrowseOutput";
this.buttonBrowseOutput.Size = new System.Drawing.Size(75, 23);
this.buttonBrowseOutput.TabIndex = 1;
this.buttonBrowseOutput.Text = "Browse";
this.buttonBrowseOutput.UseVisualStyleBackColor = true;
this.buttonBrowseOutput.Click += new System.EventHandler(this.buttonBrowseOutput_Click);
//
// checkBoxSaveLogs
//
this.checkBoxSaveLogs.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.checkBoxSaveLogs.AutoCheck = false;
this.checkBoxSaveLogs.AutoSize = true;
this.checkBoxSaveLogs.Checked = true;
this.checkBoxSaveLogs.CheckState = System.Windows.Forms.CheckState.Checked;
this.checkBoxSaveLogs.Location = new System.Drawing.Point(274, 111);
this.checkBoxSaveLogs.Name = "checkBoxSaveLogs";
this.checkBoxSaveLogs.Size = new System.Drawing.Size(78, 19);
this.checkBoxSaveLogs.TabIndex = 0;
this.checkBoxSaveLogs.Text = "Save Logs";
this.checkBoxSaveLogs.UseVisualStyleBackColor = true;
//
// textBoxOutput
//
this.textBoxOutput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.textBoxOutput.Location = new System.Drawing.Point(6, 22);
this.textBoxOutput.Name = "textBoxOutput";
this.textBoxOutput.Size = new System.Drawing.Size(265, 23);
this.textBoxOutput.TabIndex = 0;
//
// buttonStart
//
this.buttonStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonStart.Location = new System.Drawing.Point(295, 235);
this.buttonStart.Name = "buttonStart";
this.buttonStart.Size = new System.Drawing.Size(75, 23);
this.buttonStart.TabIndex = 1;
this.buttonStart.Text = "Start";
this.buttonStart.UseVisualStyleBackColor = true;
//
// buttonSaveBatch
//
this.buttonSaveBatch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.buttonSaveBatch.Location = new System.Drawing.Point(12, 235);
this.buttonSaveBatch.Name = "buttonSaveBatch";
this.buttonSaveBatch.Size = new System.Drawing.Size(75, 23);
this.buttonSaveBatch.TabIndex = 1;
this.buttonSaveBatch.Text = "Save Batch";
this.buttonSaveBatch.UseVisualStyleBackColor = true;
//
// FrmMain
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(382, 270);
this.Controls.Add(this.buttonSaveBatch);
this.Controls.Add(this.buttonStart);
this.Controls.Add(this.groupBoxOutput);
this.Controls.Add(this.groupBoxInput);
this.Name = "FrmMain";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Retime Phoneme Uti GUI";
this.Load += new System.EventHandler(this.FrmMain_Load);
this.groupBoxInput.ResumeLayout(false);
this.groupBoxInput.PerformLayout();
this.groupBoxOutput.ResumeLayout(false);
this.groupBoxOutput.PerformLayout();
this.groupBoxMode.ResumeLayout(false);
this.groupBoxMode.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private GroupBox groupBoxInput;
private GroupBox groupBoxOutput;
private Button buttonStart;
private Button buttonSaveBatch;
private CheckBox checkBoxSaveLogs;
private Button buttonBrowseInput;
private TextBox textBoxInput;
private Button buttonBrowseOutput;
private TextBox textBoxOutput;
private GroupBox groupBoxMode;
private RadioButton radioButtonC;
private RadioButton radioButtonD;
private FolderBrowserDialog folderBrowserDialog;
}
}

View File

@ -1,31 +0,0 @@
namespace kru.gui.UI
{
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}
private void FrmMain_Load(object sender, EventArgs e)
{
}
private void buttonBrowseInput_Click(object sender, EventArgs e)
{
if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
{
textBoxInput.Text = folderBrowserDialog.SelectedPath;
}
}
private void buttonBrowseOutput_Click(object sender, EventArgs e)
{
if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
{
textBoxOutput.Text = folderBrowserDialog.SelectedPath;
}
}
}
}

211
src/kru.gui/frmMain.Designer.cs generated Normal file
View File

@ -0,0 +1,211 @@
namespace ConverterGui;
partial class frmMain
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.lblInput = new System.Windows.Forms.Label();
this.txtInput = new System.Windows.Forms.TextBox();
this.txtOutput = new System.Windows.Forms.TextBox();
this.lblOutput = new System.Windows.Forms.Label();
this.btnBrowseInput = new System.Windows.Forms.Button();
this.btnBrowseOutput = new System.Windows.Forms.Button();
this.btnSave = new System.Windows.Forms.Button();
this.btnStart = new System.Windows.Forms.Button();
this.fbBrowseInput = new System.Windows.Forms.FolderBrowserDialog();
this.fbBrowseOutput = new System.Windows.Forms.FolderBrowserDialog();
this.sfdOutput = new System.Windows.Forms.SaveFileDialog();
this.grpClean = new System.Windows.Forms.GroupBox();
this.rdClean = new System.Windows.Forms.RadioButton();
this.rdFixed = new System.Windows.Forms.RadioButton();
this.chkSaveLogs = new System.Windows.Forms.CheckBox();
this.grpClean.SuspendLayout();
this.SuspendLayout();
//
// lblInput
//
this.lblInput.AutoSize = true;
this.lblInput.Location = new System.Drawing.Point(12, 20);
this.lblInput.Name = "lblInput";
this.lblInput.Size = new System.Drawing.Size(58, 25);
this.lblInput.TabIndex = 0;
this.lblInput.Text = "Input:";
//
// txtInput
//
this.txtInput.Location = new System.Drawing.Point(12, 68);
this.txtInput.Name = "txtInput";
this.txtInput.Size = new System.Drawing.Size(521, 31);
this.txtInput.TabIndex = 1;
this.txtInput.TextChanged += new System.EventHandler(this.TxtInputTextChanged);
//
// txtOutput
//
this.txtOutput.Location = new System.Drawing.Point(12, 173);
this.txtOutput.Name = "txtOutput";
this.txtOutput.Size = new System.Drawing.Size(521, 31);
this.txtOutput.TabIndex = 3;
this.txtOutput.TextChanged += new System.EventHandler(this.TxtOutputTextChanged);
//
// lblOutput
//
this.lblOutput.AutoSize = true;
this.lblOutput.Location = new System.Drawing.Point(12, 125);
this.lblOutput.Name = "lblOutput";
this.lblOutput.Size = new System.Drawing.Size(73, 25);
this.lblOutput.TabIndex = 2;
this.lblOutput.Text = "Output:";
//
// btnBrowseInput
//
this.btnBrowseInput.Location = new System.Drawing.Point(555, 67);
this.btnBrowseInput.Name = "btnBrowseInput";
this.btnBrowseInput.Size = new System.Drawing.Size(112, 34);
this.btnBrowseInput.TabIndex = 4;
this.btnBrowseInput.Text = "Browse";
this.btnBrowseInput.UseVisualStyleBackColor = true;
this.btnBrowseInput.Click += new System.EventHandler(this.BtnBrowseInputClick);
//
// btnBrowseOutput
//
this.btnBrowseOutput.Location = new System.Drawing.Point(555, 171);
this.btnBrowseOutput.Name = "btnBrowseOutput";
this.btnBrowseOutput.Size = new System.Drawing.Size(112, 34);
this.btnBrowseOutput.TabIndex = 5;
this.btnBrowseOutput.Text = "Browse";
this.btnBrowseOutput.UseVisualStyleBackColor = true;
this.btnBrowseOutput.Click += new System.EventHandler(this.BtnBrowseOutputClick);
//
// btnSave
//
this.btnSave.Enabled = false;
this.btnSave.Location = new System.Drawing.Point(12, 373);
this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(112, 34);
this.btnSave.TabIndex = 6;
this.btnSave.Text = "Save batch";
this.btnSave.UseVisualStyleBackColor = true;
this.btnSave.Click += new System.EventHandler(this.BtnSaveClick);
//
// btnStart
//
this.btnStart.Enabled = false;
this.btnStart.Location = new System.Drawing.Point(552, 373);
this.btnStart.Name = "btnStart";
this.btnStart.Size = new System.Drawing.Size(112, 34);
this.btnStart.TabIndex = 7;
this.btnStart.Text = "Start";
this.btnStart.UseVisualStyleBackColor = true;
this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
//
// grpClean
//
this.grpClean.Controls.Add(this.rdClean);
this.grpClean.Controls.Add(this.rdFixed);
this.grpClean.Location = new System.Drawing.Point(12, 226);
this.grpClean.Name = "grpClean";
this.grpClean.Size = new System.Drawing.Size(320, 119);
this.grpClean.TabIndex = 8;
this.grpClean.TabStop = false;
this.grpClean.Text = "Mode";
//
// rdClean
//
this.rdClean.AutoSize = true;
this.rdClean.Location = new System.Drawing.Point(18, 75);
this.rdClean.Name = "rdClean";
this.rdClean.Size = new System.Drawing.Size(80, 29);
this.rdClean.TabIndex = 1;
this.rdClean.Text = "Clean";
this.rdClean.UseVisualStyleBackColor = true;
//
// rdFixed
//
this.rdFixed.AutoSize = true;
this.rdFixed.Checked = true;
this.rdFixed.Location = new System.Drawing.Point(18, 30);
this.rdFixed.Name = "rdFixed";
this.rdFixed.Size = new System.Drawing.Size(143, 29);
this.rdFixed.TabIndex = 0;
this.rdFixed.TabStop = true;
this.rdFixed.Text = "Fixed(default)";
this.rdFixed.UseVisualStyleBackColor = true;
//
// chkSaveLogs
//
this.chkSaveLogs.AutoSize = true;
this.chkSaveLogs.Checked = true;
this.chkSaveLogs.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkSaveLogs.Location = new System.Drawing.Point(375, 243);
this.chkSaveLogs.Name = "chkSaveLogs";
this.chkSaveLogs.Size = new System.Drawing.Size(114, 29);
this.chkSaveLogs.TabIndex = 9;
this.chkSaveLogs.Text = "Save logs";
this.chkSaveLogs.UseVisualStyleBackColor = true;
//
// frmMain
//
this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 25F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(690, 416);
this.Controls.Add(this.chkSaveLogs);
this.Controls.Add(this.grpClean);
this.Controls.Add(this.btnStart);
this.Controls.Add(this.btnSave);
this.Controls.Add(this.btnBrowseOutput);
this.Controls.Add(this.btnBrowseInput);
this.Controls.Add(this.txtOutput);
this.Controls.Add(this.lblOutput);
this.Controls.Add(this.txtInput);
this.Controls.Add(this.lblInput);
this.Name = "frmMain";
this.Text = "Converter";
this.grpClean.ResumeLayout(false);
this.grpClean.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private Label lblInput;
private TextBox txtInput;
private TextBox txtOutput;
private Label lblOutput;
private Button btnBrowseInput;
private Button btnBrowseOutput;
private Button btnSave;
private Button btnStart;
private FolderBrowserDialog fbBrowseInput;
private FolderBrowserDialog fbBrowseOutput;
private SaveFileDialog sfdOutput;
private GroupBox grpClean;
private RadioButton rdClean;
private RadioButton rdFixed;
private CheckBox chkSaveLogs;
}

73
src/kru.gui/frmMain.cs Normal file
View File

@ -0,0 +1,73 @@
namespace ConverterGui;
public partial class frmMain : Form
{
public frmMain() => InitializeComponent();
private void BtnBrowseOutputClick(object sender, EventArgs e) => this.txtOutput.Text = this.fbBrowseOutput.ShowDialog() == DialogResult.OK ? this.fbBrowseOutput.SelectedPath : string.Empty;
private void BtnBrowseInputClick(object sender, EventArgs e) => this.txtInput.Text = this.fbBrowseInput.ShowDialog() == DialogResult.OK ? this.fbBrowseInput.SelectedPath : string.Empty;
private void TxtOutputTextChanged(object sender, EventArgs e)
{
this.fbBrowseOutput.SelectedPath = this.txtOutput.Text;
EnableButtons();
}
private void TxtInputTextChanged(object sender, EventArgs e)
{
this.fbBrowseInput.SelectedPath = this.txtInput.Text;
EnableButtons();
}
private void BtnSaveClick(object sender, EventArgs e)
{
var commands = GetCommands();
if (sfdOutput.ShowDialog() == DialogResult.OK)
{
File.WriteAllLines(sfdOutput.FileName, commands
.Select(a => a.GetBatchLine()));
}
MessageBox.Show("Done!");
}
private void EnableButtons()
{
var enabled = !string.IsNullOrWhiteSpace(this.txtInput.Text)
&& !string.IsNullOrWhiteSpace(this.txtOutput.Text)
&& Directory.Exists(this.txtInput.Text);
this.btnSave.Enabled = this.btnStart.Enabled = enabled;
}
private Command[] GetCommands()
{
var options = new
{
Input = this.txtInput.Text,
Output = this.txtOutput.Text,
Clean = this.rdClean.Checked,
SaveLog = chkSaveLogs.Checked,
};
var commands = Directory
.GetFiles(options.Input)
.Select(inputFile => new Command(inputFile, Path.Combine(options.Output, Path.GetFileName(inputFile)), options.Clean, options.SaveLog))
.ToArray();
return commands;
}
private async void btnStart_Click(object sender, EventArgs e)
{
this.Enabled = false;
var commands = GetCommands();
foreach (var command in commands)
{
var proc = command.GetProcess();
proc.Start();
await proc.WaitForExitAsync().ConfigureAwait(false);
}
this.Enabled = true;
MessageBox.Show("Done!");
}
}

View File

@ -57,7 +57,13 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="folderBrowserDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<metadata name="fbBrowseInput.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="fbBrowseOutput.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>197, 17</value>
</metadata>
<metadata name="sfdOutput.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>393, 17</value>
</metadata>
</root>

View File

@ -34,5 +34,4 @@
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Compile Update="UI\FrmMain.cs">
<SubType>Form</SubType>
</Compile>
</ItemGroup>
</Project>

View File

@ -5,6 +5,8 @@ VisualStudioVersion = 17.5.33209.295
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "kru.gui", "kru.gui\kru.gui.csproj", "{2D372BD7-104E-480F-82F5-60EA08A20227}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{494D64A2-ECC6-4B4B-8359-F5AB20E128F7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU