Compare commits

...

7 Commits

Author SHA1 Message Date
164d15ed2f
Update README.md (#6) 2023-01-16 18:10:53 +03:00
d1cc58f9aa
1.1.0.0 2023-01-15 12:22:55 +03:00
fbad1e770e
1.1.0.0 2023-01-15 12:14:49 +03:00
41d4f8d5a3
1.1.0.0 2023-01-15 12:13:38 +03:00
Konstantin Safonov
000000009e
Fix 'clean copy' handling 2023-01-15 11:51:33 +05:00
Konstantin Safonov
000000001d
Fix PR 2023-01-15 11:45:44 +05:00
e49c0b9977
pre 1.1.0.0
fixed ui
fixed logic
2023-01-14 20:00:15 +03:00
25 changed files with 2786 additions and 134 deletions

76
.github/CODE_OF_CONDUCT.md vendored Normal file
View File

@ -0,0 +1,76 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at developer@epicm.org. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq

17
.github/CONTRIBUTING.md vendored Normal file
View File

@ -0,0 +1,17 @@
# Contributing
When contributing to this repository, please first discuss the change you wish to make via issue,
email, or any other method with the owners of this repository before making a change.
Please note we have a code of conduct, please follow it in all your interactions with the project.
## Pull Request Process
1. Ensure any install or build dependencies are removed before the end of the layer when doing a
build.
2. Update the README.md with details of changes to the interface, this includes new environment
variables, exposed ports, useful file locations and container parameters.
3. Increase the version numbers in any examples files and the README.md to the new version that this
Pull Request would represent.
4. You may merge the Pull Request in once you have the sign-off of two other developers, or if you
do not have permission to do that, you may request the second reviewer to merge it for you.

13
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1,13 @@
# These are supported funding model platforms
patreon: epicmorg
ko_fi: epicmorg
custom: https://ko-fi.com/alexz696
#github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
#open_collective: # Replace with a single Open Collective username
#tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
#community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
#liberapay: # Replace with a single Liberapay username
#issuehunt: # Replace with a single IssueHunt username
#otechie: # Replace with a single Otechie username
#custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

27
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,27 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: 'bug, Regular Priority'
assignees: 'stamepicmorg'
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.

18
.github/ISSUE_TEMPLATE/cve_report.md vendored Normal file
View File

@ -0,0 +1,18 @@
---
name: CVE report
about: Create a report of some CVE
title: '[CVE] '
labels: 'CVE, High Priority'
assignees: 'stamepicmorg'
---
**CVE number or URL**
**Describe**
A clear and concise description of what the CVE is.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.

View File

@ -0,0 +1,21 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: 'Feature request, help wanted'
assignees: 'stamepicmorg'
milestone: 'Due 2021 🙏'
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

17
.github/ISSUE_TEMPLATE/task_generic.md vendored Normal file
View File

@ -0,0 +1,17 @@
---
name: Generic task
about: Create a generic task
title: ''
labels: 'task, Regular Priority'
assignees: 'stamepicmorg'
---
**Describe**
A clear and concise description of what the bug is.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.

13
.github/pull_request_template.md vendored Normal file
View File

@ -0,0 +1,13 @@
## Purpose
_Describe the problem or feature in addition to a link to the issues._
## Approach
_How does this change address the problem?_
#### Open Questions and Pre-Merge TODOs
- [ ] Use github checklists. When solved, check the box and explain the answer.
## Learning
_Describe the research stage_
_Links to blog posts, patterns, libraries or addons used to solve this problem_

View File

@ -1,2 +1,12 @@
# Retime-Phoneme-Uti-GUI # Retime Phoneme Util: GUI
.NET 7 GUI for Retime Phoneme Util [![dotnet](https://img.shields.io/github/actions/workflow/status/AntinomyCollective/Retime-Phoneme-Util-GUI/dotnet.yml?style=flat-square)](https://github.com/AntinomyCollective/Retime-Phoneme-Util-GUI/actions/workflows/dotnet.yml) [![Download](https://img.shields.io/github/v/release/AntinomyCollective/Retime-Phoneme-Util-GUI?style=flat-square)](https://github.com/AntinomyCollective/Retime-Phoneme-Util-GUI/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/w/AntinomyCollective/Retime-Phoneme-Util-GUI?style=flat-square)](https://github.com/AntinomyCollective/Retime-Phoneme-Util-GUI/tree/feature/add-logic) [![Issues](https://img.shields.io/github/issues/AntinomyCollective/Retime-Phoneme-Util-GUI?style=flat-square)](http://isitmaintained.com/project/AntinomyCollective/Retime-Phoneme-Util-GUI "Percentage of issues still open") [![License: MIT](https://img.shields.io/github/license/AntinomyCollective/Retime-Phoneme-Util-GUI?style=flat-square)](LICENSE.md) <img align="right" src="https://raw.githubusercontent.com/AntinomyCollective/Retime-Phoneme-Util-GUI/feature/add-logic/src/kru.gui/favicon.png" alt="Retime Phoneme Util: GUI" width="64" />
## What is this?
This is a useful graphical user interface written by EpicMorg Team in C# (.NET 7) for original console tool named as "Retime Phoneme Util" developed by [wowks](https://forum.csmania.ru/memberlist.php?mode=viewprofile&u=59383) at forum [CSMania](https://forum.csmania.ru/viewtopic.php?t=43274).
Original console program loads a phoneme from the original sound, changes its time intervals and saves it to the corrected sound. It can also be used to remove redundant data after audio data (such as the metadata left by Sony Sound Forge).
GUI saves a lot of hours with this process.
[![image](https://user-images.githubusercontent.com/1307229/212532738-7c18da74-c9c0-4401-ba21-411284974fbe.png)](https://github.com/AntinomyCollective/Retime-Phoneme-Util-GUI/)

38
src/Directory.Build.props Normal file
View File

@ -0,0 +1,38 @@
<Project>
<PropertyGroup>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<IsPackable>true</IsPackable>
<LangVersion>latest</LangVersion>
<NoWarn>SA1633;SA1623;SA1600;SA1601;CS1591;SA1300</NoWarn>
<Nullable>enable</Nullable>
<PackageLicenseExpression>AGPL-3.0-or-later</PackageLicenseExpression>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PublishDocumentationFile>true</PublishDocumentationFile>
<PublishDocumentationFiles>true</PublishDocumentationFiles>
<PublishReferencesDocumentationFiles>true</PublishReferencesDocumentationFiles>
<StyleCopTreatErrorsAsWarnings>True</StyleCopTreatErrorsAsWarnings>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<None Include="..\..\README.md" Pack="true" PackagePath="\"/>
<PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.435">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="Roslynator.Analyzers" Version="4.2.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="Roslynator.CodeAnalysis.Analyzers" Version="4.2.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="Roslynator.Formatting.Analyzers" Version="4.2.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>

View File

@ -0,0 +1,3 @@
namespace kru.gui.Core;
internal record ApplicationInfo(string Version, string Name, string Copytrigh);

View File

@ -0,0 +1,16 @@
namespace kru.gui.Core;
using System.Reflection;
internal static class ApplicationInfoProvider
{
public static ApplicationInfo GetInfo()
{
var assembly = Assembly.GetEntryAssembly()!;
var version = assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()!.InformationalVersion;
var name = assembly.GetCustomAttribute<AssemblyProductAttribute>()!.Product;
var copyright = assembly.GetCustomAttribute<AssemblyCopyrightAttribute>()!.Copyright;
return new ApplicationInfo(version, name, copyright);
}
}

View File

@ -0,0 +1,7 @@
namespace kru.gui.Core;
using System;
internal static class BitnessProvider
{
public static string BitnessName => Environment.Is64BitProcess ? "x64" : "x86";
}

View File

@ -1,17 +1,16 @@
namespace ConverterGui; namespace kru.gui.Core;
using System;
using System.Diagnostics; using System.Diagnostics;
using System.Reflection;
internal record Command(string InputFile, string OutputFile, bool Clean, bool SaveLog) internal record Command(string InputFile, string OutputDirectory, string? CleanDirectory, bool SaveLog)
{ {
private string ExecutablePath => private string ExecutablePath =>
Path.Combine( Path.Combine(
Path.GetDirectoryName(System.AppContext.BaseDirectory!)!, Path.GetDirectoryName(AppContext.BaseDirectory)!,
@"Tools\x64\retime_phoneme.exe" $@"Tools\{BitnessProvider.BitnessName}\retime_phoneme.exe");
);
public string GetBatchLine() => string.Join(" ", new[] { $"\"{ExecutablePath}\"" }.Concat(GetArguments().Select(arg => $"\"{arg}\""))); public string GetBatchLine() => string.Join(" ", new[] { $"\"{this.ExecutablePath}\"" }.Concat(this.GetArguments().Select(arg => $"\"{arg}\"")));
public Process GetProcess() public Process GetProcess()
{ {
@ -19,7 +18,7 @@ internal record Command(string InputFile, string OutputFile, bool Clean, bool Sa
{ {
StartInfo = new ProcessStartInfo StartInfo = new ProcessStartInfo
{ {
FileName = ExecutablePath FileName = this.ExecutablePath,
}, },
EnableRaisingEvents = true, EnableRaisingEvents = true,
}; };
@ -27,20 +26,24 @@ internal record Command(string InputFile, string OutputFile, bool Clean, bool Sa
{ {
proc.StartInfo.ArgumentList.Add(item); proc.StartInfo.ArgumentList.Add(item);
} }
return proc; return proc;
} }
private IEnumerable<string> GetArguments() private IEnumerable<string> GetArguments()
{ {
var filename = Path.GetFileName(this.InputFile);
yield return "-s"; yield return "-s";
yield return InputFile; yield return this.InputFile;
yield return "-d"; yield return "-d";
yield return OutputFile; yield return Path.Combine(this.OutputDirectory, filename);
if (Clean) if (this.CleanDirectory is not null)
{ {
yield return "-oc"; yield return "-oc";
yield return Path.Combine(this.CleanDirectory, filename);
} }
if (SaveLog)
if (this.SaveLog)
{ {
yield return "-l"; yield return "-l";
} }

View File

@ -6,11 +6,11 @@ internal static class Program
/// The main entry point for the application. /// The main entry point for the application.
/// </summary> /// </summary>
[STAThread] [STAThread]
static void Main() private static void Main()
{ {
// To customize application configuration such as set high DPI settings or default font, // To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration. // see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize(); ApplicationConfiguration.Initialize();
Application.Run(new frmMain()); Application.Run(new FrmMain());
} }
} }

View File

@ -0,0 +1,73 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace kru.gui.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("kru.gui.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap favicon_64 {
get {
object obj = ResourceManager.GetObject("favicon.64", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="favicon.64" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\favicon.64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

BIN
src/kru.gui/favicon.64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

202
src/kru.gui/frmAbout.Designer.cs generated Normal file
View File

@ -0,0 +1,202 @@
namespace kru.gui
{
partial class FrmAbout
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmAbout));
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.labelCopy = new System.Windows.Forms.Label();
this.linkLabelSource = new System.Windows.Forms.LinkLabel();
this.linkLabelwowks = new System.Windows.Forms.LinkLabel();
this.buttonOK = new System.Windows.Forms.Button();
this.labelappName = new System.Windows.Forms.Label();
this.labelappVer = new System.Windows.Forms.Label();
this.linkLabelGitHub = new System.Windows.Forms.LinkLabel();
this.linkLabelFreepik = new System.Windows.Forms.LinkLabel();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// pictureBox1
//
this.pictureBox1.Image = global::kru.gui.Properties.Resources.favicon_64;
this.pictureBox1.Location = new System.Drawing.Point(12, 12);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(64, 64);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 109);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(90, 15);
this.label1.TabIndex = 1;
this.label1.Text = "Original author:";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(12, 124);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(90, 15);
this.label2.TabIndex = 2;
this.label2.Text = "Original source:";
//
// labelCopy
//
this.labelCopy.AutoSize = true;
this.labelCopy.Location = new System.Drawing.Point(82, 44);
this.labelCopy.Name = "labelCopy";
this.labelCopy.Size = new System.Drawing.Size(58, 15);
this.labelCopy.TabIndex = 3;
this.labelCopy.Text = "copyright";
//
// linkLabelSource
//
this.linkLabelSource.AutoSize = true;
this.linkLabelSource.Location = new System.Drawing.Point(108, 124);
this.linkLabelSource.Name = "linkLabelSource";
this.linkLabelSource.Size = new System.Drawing.Size(268, 15);
this.linkLabelSource.TabIndex = 4;
this.linkLabelSource.TabStop = true;
this.linkLabelSource.Text = "https://forum.csmania.ru/viewtopic.php?t=43274";
this.linkLabelSource.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelSource_LinkClicked);
//
// linkLabelwowks
//
this.linkLabelwowks.AutoSize = true;
this.linkLabelwowks.Location = new System.Drawing.Point(108, 109);
this.linkLabelwowks.Name = "linkLabelwowks";
this.linkLabelwowks.Size = new System.Drawing.Size(43, 15);
this.linkLabelwowks.TabIndex = 4;
this.linkLabelwowks.TabStop = true;
this.linkLabelwowks.Text = "wowks";
this.linkLabelwowks.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelwowks_LinkClicked);
//
// buttonOK
//
this.buttonOK.Location = new System.Drawing.Point(316, 12);
this.buttonOK.Name = "buttonOK";
this.buttonOK.Size = new System.Drawing.Size(75, 23);
this.buttonOK.TabIndex = 5;
this.buttonOK.Text = "OK";
this.buttonOK.UseVisualStyleBackColor = true;
this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click);
//
// labelappName
//
this.labelappName.AutoSize = true;
this.labelappName.Font = new System.Drawing.Font("Segoe UI Semibold", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
this.labelappName.Location = new System.Drawing.Point(82, 9);
this.labelappName.Name = "labelappName";
this.labelappName.Size = new System.Drawing.Size(76, 20);
this.labelappName.TabIndex = 6;
this.labelappName.Text = "appName";
//
// labelappVer
//
this.labelappVer.AutoSize = true;
this.labelappVer.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
this.labelappVer.Location = new System.Drawing.Point(82, 29);
this.labelappVer.Name = "labelappVer";
this.labelappVer.Size = new System.Drawing.Size(44, 15);
this.labelappVer.TabIndex = 6;
this.labelappVer.Text = "appVer";
//
// linkLabelGitHub
//
this.linkLabelGitHub.AutoSize = true;
this.linkLabelGitHub.Location = new System.Drawing.Point(316, 38);
this.linkLabelGitHub.Name = "linkLabelGitHub";
this.linkLabelGitHub.Size = new System.Drawing.Size(45, 15);
this.linkLabelGitHub.TabIndex = 7;
this.linkLabelGitHub.TabStop = true;
this.linkLabelGitHub.Text = "GitHub";
this.linkLabelGitHub.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelGitHub_LinkClicked);
//
// linkLabelFreepik
//
this.linkLabelFreepik.AutoSize = true;
this.linkLabelFreepik.Location = new System.Drawing.Point(12, 79);
this.linkLabelFreepik.Name = "linkLabelFreepik";
this.linkLabelFreepik.Size = new System.Drawing.Size(45, 15);
this.linkLabelFreepik.TabIndex = 7;
this.linkLabelFreepik.TabStop = true;
this.linkLabelFreepik.Text = "Freepik";
this.linkLabelFreepik.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelFreepik_LinkClicked);
//
// frmAbout
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(403, 148);
this.Controls.Add(this.linkLabelFreepik);
this.Controls.Add(this.linkLabelGitHub);
this.Controls.Add(this.labelappVer);
this.Controls.Add(this.labelappName);
this.Controls.Add(this.buttonOK);
this.Controls.Add(this.linkLabelwowks);
this.Controls.Add(this.linkLabelSource);
this.Controls.Add(this.labelCopy);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.pictureBox1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "frmAbout";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "appName";
this.Load += new System.EventHandler(this.frmAbout_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private PictureBox pictureBox1;
private Label label1;
private Label label2;
private Label labelCopy;
private LinkLabel linkLabelSource;
private LinkLabel linkLabelwowks;
private Button buttonOK;
private Label labelappName;
private Label labelappVer;
private LinkLabel linkLabelGitHub;
private LinkLabel linkLabelFreepik;
}
}

56
src/kru.gui/frmAbout.cs Normal file
View File

@ -0,0 +1,56 @@
namespace kru.gui;
using System;
using System.Diagnostics;
using System.Windows.Forms;
using kru.gui.Core;
public partial class FrmAbout : Form
{
public FrmAbout()
{
this.InitializeComponent();
}
private static void OpenUrl(string url)
{
var uri = new Uri(url);
if (uri.Scheme is not "http" and not "https")
{
throw new ArgumentException("Invalid URL", nameof(url));
}
try
{
using var myProcess = new Process();
myProcess.StartInfo.UseShellExecute = true;
myProcess.StartInfo.FileName = uri.ToString();
myProcess.Start();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
private void frmAbout_Load(object sender, EventArgs e)
{
var (version, name, copyright) = ApplicationInfoProvider.GetInfo();
this.Text = $"{name} {version} ({BitnessProvider.BitnessName})";
this.labelappName.Text = $"{name} ({BitnessProvider.BitnessName})";
this.labelappVer.Text = version;
this.labelCopy.Text = $"Copyright © {copyright}";
}
private void linkLabelSource_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => OpenUrl("https://forum.csmania.ru/viewtopic.php?t=43274");
private void linkLabelwowks_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => OpenUrl("https://forum.csmania.ru/memberlist.php?mode=viewprofile&u=59383");
private void buttonOK_Click(object sender, EventArgs e) => this.Close();
private void linkLabelGitHub_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => OpenUrl("https://github.com/AntinomyCollective/Retime-Phoneme-Util-GUI");
private void linkLabelFreepik_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => OpenUrl("https://www.freepik.com/");
}

1833
src/kru.gui/frmAbout.resx Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
namespace ConverterGui; namespace ConverterGui;
partial class frmMain partial class FrmMain
{ {
/// <summary> /// <summary>
/// Required designer variable. /// Required designer variable.
@ -28,7 +28,7 @@ partial class frmMain
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmMain)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmMain));
this.txtInput = new System.Windows.Forms.TextBox(); this.txtInput = new System.Windows.Forms.TextBox();
this.txtOutput = new System.Windows.Forms.TextBox(); this.txtOutput = new System.Windows.Forms.TextBox();
this.btnBrowseInput = new System.Windows.Forms.Button(); this.btnBrowseInput = new System.Windows.Forms.Button();
@ -38,15 +38,17 @@ partial class frmMain
this.fbBrowseInput = new System.Windows.Forms.FolderBrowserDialog(); this.fbBrowseInput = new System.Windows.Forms.FolderBrowserDialog();
this.fbBrowseOutput = new System.Windows.Forms.FolderBrowserDialog(); this.fbBrowseOutput = new System.Windows.Forms.FolderBrowserDialog();
this.sfdOutput = new System.Windows.Forms.SaveFileDialog(); 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.chkSaveLogs = new System.Windows.Forms.CheckBox();
this.groupBoxInput = new System.Windows.Forms.GroupBox(); this.groupBoxInput = new System.Windows.Forms.GroupBox();
this.groupBoxOutput = new System.Windows.Forms.GroupBox(); this.groupBoxOutput = new System.Windows.Forms.GroupBox();
this.grpClean.SuspendLayout(); this.chkClean = new System.Windows.Forms.CheckBox();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.txtOutputClean = new System.Windows.Forms.TextBox();
this.btnBrowseOutputClean = new System.Windows.Forms.Button();
this.buttonAbout = new System.Windows.Forms.Button();
this.groupBoxInput.SuspendLayout(); this.groupBoxInput.SuspendLayout();
this.groupBoxOutput.SuspendLayout(); this.groupBoxOutput.SuspendLayout();
this.groupBox1.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
// txtInput // txtInput
@ -54,9 +56,9 @@ partial class frmMain
this.txtInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) this.txtInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right))); | System.Windows.Forms.AnchorStyles.Right)));
this.txtInput.Location = new System.Drawing.Point(5, 21); this.txtInput.Location = new System.Drawing.Point(5, 21);
this.txtInput.Margin = new System.Windows.Forms.Padding(2); this.txtInput.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.txtInput.Name = "txtInput"; this.txtInput.Name = "txtInput";
this.txtInput.Size = new System.Drawing.Size(235, 23); this.txtInput.Size = new System.Drawing.Size(292, 23);
this.txtInput.TabIndex = 1; this.txtInput.TabIndex = 1;
this.txtInput.TextChanged += new System.EventHandler(this.TxtInputTextChanged); this.txtInput.TextChanged += new System.EventHandler(this.TxtInputTextChanged);
// //
@ -65,17 +67,17 @@ partial class frmMain
this.txtOutput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) this.txtOutput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right))); | System.Windows.Forms.AnchorStyles.Right)));
this.txtOutput.Location = new System.Drawing.Point(5, 21); this.txtOutput.Location = new System.Drawing.Point(5, 21);
this.txtOutput.Margin = new System.Windows.Forms.Padding(2); this.txtOutput.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.txtOutput.Name = "txtOutput"; this.txtOutput.Name = "txtOutput";
this.txtOutput.Size = new System.Drawing.Size(234, 23); this.txtOutput.Size = new System.Drawing.Size(292, 23);
this.txtOutput.TabIndex = 3; this.txtOutput.TabIndex = 3;
this.txtOutput.TextChanged += new System.EventHandler(this.TxtOutputTextChanged); this.txtOutput.TextChanged += new System.EventHandler(this.TxtOutputTextChanged);
// //
// btnBrowseInput // btnBrowseInput
// //
this.btnBrowseInput.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btnBrowseInput.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnBrowseInput.Location = new System.Drawing.Point(244, 21); this.btnBrowseInput.Location = new System.Drawing.Point(301, 21);
this.btnBrowseInput.Margin = new System.Windows.Forms.Padding(2); this.btnBrowseInput.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnBrowseInput.Name = "btnBrowseInput"; this.btnBrowseInput.Name = "btnBrowseInput";
this.btnBrowseInput.Size = new System.Drawing.Size(75, 23); this.btnBrowseInput.Size = new System.Drawing.Size(75, 23);
this.btnBrowseInput.TabIndex = 4; this.btnBrowseInput.TabIndex = 4;
@ -86,8 +88,8 @@ partial class frmMain
// btnBrowseOutput // btnBrowseOutput
// //
this.btnBrowseOutput.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btnBrowseOutput.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnBrowseOutput.Location = new System.Drawing.Point(243, 21); this.btnBrowseOutput.Location = new System.Drawing.Point(301, 21);
this.btnBrowseOutput.Margin = new System.Windows.Forms.Padding(2); this.btnBrowseOutput.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnBrowseOutput.Name = "btnBrowseOutput"; this.btnBrowseOutput.Name = "btnBrowseOutput";
this.btnBrowseOutput.Size = new System.Drawing.Size(75, 23); this.btnBrowseOutput.Size = new System.Drawing.Size(75, 23);
this.btnBrowseOutput.TabIndex = 5; this.btnBrowseOutput.TabIndex = 5;
@ -97,10 +99,10 @@ partial class frmMain
// //
// btnSave // btnSave
// //
this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.btnSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnSave.Enabled = false; this.btnSave.Enabled = false;
this.btnSave.Location = new System.Drawing.Point(11, 210); this.btnSave.Location = new System.Drawing.Point(239, 233);
this.btnSave.Margin = new System.Windows.Forms.Padding(2); this.btnSave.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnSave.Name = "btnSave"; this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(75, 23); this.btnSave.Size = new System.Drawing.Size(75, 23);
this.btnSave.TabIndex = 6; this.btnSave.TabIndex = 6;
@ -112,8 +114,8 @@ partial class frmMain
// //
this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnStart.Enabled = false; this.btnStart.Enabled = false;
this.btnStart.Location = new System.Drawing.Point(261, 210); this.btnStart.Location = new System.Drawing.Point(318, 233);
this.btnStart.Margin = new System.Windows.Forms.Padding(2); this.btnStart.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnStart.Name = "btnStart"; this.btnStart.Name = "btnStart";
this.btnStart.Size = new System.Drawing.Size(75, 23); this.btnStart.Size = new System.Drawing.Size(75, 23);
this.btnStart.TabIndex = 7; this.btnStart.TabIndex = 7;
@ -124,55 +126,15 @@ partial class frmMain
// sfdOutput // sfdOutput
// //
this.sfdOutput.Filter = "\"Batch File|*.bat|All files|*.*\""; this.sfdOutput.Filter = "\"Batch File|*.bat|All files|*.*\"";
this.sfdOutput.FileOk += new System.ComponentModel.CancelEventHandler(this.sfdOutput_FileOk);
//
// grpClean
//
this.grpClean.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
this.grpClean.Controls.Add(this.rdClean);
this.grpClean.Controls.Add(this.rdFixed);
this.grpClean.Location = new System.Drawing.Point(5, 48);
this.grpClean.Margin = new System.Windows.Forms.Padding(2);
this.grpClean.Name = "grpClean";
this.grpClean.Padding = new System.Windows.Forms.Padding(2);
this.grpClean.Size = new System.Drawing.Size(224, 69);
this.grpClean.TabIndex = 8;
this.grpClean.TabStop = false;
this.grpClean.Text = "Mode:";
//
// rdClean
//
this.rdClean.AutoSize = true;
this.rdClean.Location = new System.Drawing.Point(4, 43);
this.rdClean.Margin = new System.Windows.Forms.Padding(2);
this.rdClean.Name = "rdClean";
this.rdClean.Size = new System.Drawing.Size(55, 19);
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(4, 20);
this.rdFixed.Margin = new System.Windows.Forms.Padding(2);
this.rdFixed.Name = "rdFixed";
this.rdFixed.Size = new System.Drawing.Size(98, 19);
this.rdFixed.TabIndex = 0;
this.rdFixed.TabStop = true;
this.rdFixed.Text = "Fixed(default)";
this.rdFixed.UseVisualStyleBackColor = true;
// //
// chkSaveLogs // chkSaveLogs
// //
this.chkSaveLogs.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.chkSaveLogs.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.chkSaveLogs.AutoSize = true; this.chkSaveLogs.AutoSize = true;
this.chkSaveLogs.Checked = true; this.chkSaveLogs.Checked = true;
this.chkSaveLogs.CheckState = System.Windows.Forms.CheckState.Checked; this.chkSaveLogs.CheckState = System.Windows.Forms.CheckState.Checked;
this.chkSaveLogs.Location = new System.Drawing.Point(243, 98); this.chkSaveLogs.Location = new System.Drawing.Point(92, 236);
this.chkSaveLogs.Margin = new System.Windows.Forms.Padding(2); this.chkSaveLogs.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.chkSaveLogs.Name = "chkSaveLogs"; this.chkSaveLogs.Name = "chkSaveLogs";
this.chkSaveLogs.Size = new System.Drawing.Size(75, 19); this.chkSaveLogs.Size = new System.Drawing.Size(75, 19);
this.chkSaveLogs.TabIndex = 9; this.chkSaveLogs.TabIndex = 9;
@ -187,7 +149,7 @@ partial class frmMain
this.groupBoxInput.Controls.Add(this.btnBrowseInput); this.groupBoxInput.Controls.Add(this.btnBrowseInput);
this.groupBoxInput.Location = new System.Drawing.Point(12, 12); this.groupBoxInput.Location = new System.Drawing.Point(12, 12);
this.groupBoxInput.Name = "groupBoxInput"; this.groupBoxInput.Name = "groupBoxInput";
this.groupBoxInput.Size = new System.Drawing.Size(324, 63); this.groupBoxInput.Size = new System.Drawing.Size(381, 63);
this.groupBoxInput.TabIndex = 10; this.groupBoxInput.TabIndex = 10;
this.groupBoxInput.TabStop = false; this.groupBoxInput.TabStop = false;
this.groupBoxInput.Text = "Input folder:"; this.groupBoxInput.Text = "Input folder:";
@ -198,38 +160,104 @@ partial class frmMain
| System.Windows.Forms.AnchorStyles.Right))); | System.Windows.Forms.AnchorStyles.Right)));
this.groupBoxOutput.Controls.Add(this.txtOutput); this.groupBoxOutput.Controls.Add(this.txtOutput);
this.groupBoxOutput.Controls.Add(this.btnBrowseOutput); this.groupBoxOutput.Controls.Add(this.btnBrowseOutput);
this.groupBoxOutput.Controls.Add(this.chkSaveLogs);
this.groupBoxOutput.Controls.Add(this.grpClean);
this.groupBoxOutput.Location = new System.Drawing.Point(12, 81); this.groupBoxOutput.Location = new System.Drawing.Point(12, 81);
this.groupBoxOutput.Name = "groupBoxOutput"; this.groupBoxOutput.Name = "groupBoxOutput";
this.groupBoxOutput.Size = new System.Drawing.Size(323, 122); this.groupBoxOutput.Size = new System.Drawing.Size(381, 63);
this.groupBoxOutput.TabIndex = 11; this.groupBoxOutput.TabIndex = 11;
this.groupBoxOutput.TabStop = false; this.groupBoxOutput.TabStop = false;
this.groupBoxOutput.Text = "Output folder:"; this.groupBoxOutput.Text = "Output folder:";
// //
// frmMain // chkClean
//
this.chkClean.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.chkClean.AutoSize = true;
this.chkClean.Location = new System.Drawing.Point(5, 50);
this.chkClean.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.chkClean.Name = "chkClean";
this.chkClean.Size = new System.Drawing.Size(112, 19);
this.chkClean.TabIndex = 9;
this.chkClean.Text = "Save Clean copy";
this.chkClean.UseVisualStyleBackColor = true;
this.chkClean.CheckedChanged += new System.EventHandler(this.chkClean_CheckedChanged);
//
// groupBox1
//
this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox1.Controls.Add(this.txtOutputClean);
this.groupBox1.Controls.Add(this.btnBrowseOutputClean);
this.groupBox1.Controls.Add(this.chkClean);
this.groupBox1.Location = new System.Drawing.Point(12, 150);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(381, 74);
this.groupBox1.TabIndex = 11;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Output folder for clean files (Optional):";
//
// txtOutputClean
//
this.txtOutputClean.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtOutputClean.Enabled = false;
this.txtOutputClean.Location = new System.Drawing.Point(5, 21);
this.txtOutputClean.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.txtOutputClean.Name = "txtOutputClean";
this.txtOutputClean.Size = new System.Drawing.Size(292, 23);
this.txtOutputClean.TabIndex = 3;
this.txtOutputClean.TextChanged += new System.EventHandler(this.TxtOutputTextChanged);
//
// btnBrowseOutputClean
//
this.btnBrowseOutputClean.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnBrowseOutputClean.Enabled = false;
this.btnBrowseOutputClean.Location = new System.Drawing.Point(301, 21);
this.btnBrowseOutputClean.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.btnBrowseOutputClean.Name = "btnBrowseOutputClean";
this.btnBrowseOutputClean.Size = new System.Drawing.Size(75, 23);
this.btnBrowseOutputClean.TabIndex = 5;
this.btnBrowseOutputClean.Text = "Browse";
this.btnBrowseOutputClean.UseVisualStyleBackColor = true;
this.btnBrowseOutputClean.Click += new System.EventHandler(this.BtnBrowseOutputCleanClick);
//
// buttonAbout
//
this.buttonAbout.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.buttonAbout.Location = new System.Drawing.Point(12, 233);
this.buttonAbout.Name = "buttonAbout";
this.buttonAbout.Size = new System.Drawing.Size(75, 23);
this.buttonAbout.TabIndex = 12;
this.buttonAbout.Text = "About";
this.buttonAbout.UseVisualStyleBackColor = true;
this.buttonAbout.Click += new System.EventHandler(this.buttonAbout_Click);
//
// FrmMain
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(347, 244); this.ClientSize = new System.Drawing.Size(404, 267);
this.Controls.Add(this.buttonAbout);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.chkSaveLogs);
this.Controls.Add(this.groupBoxOutput); this.Controls.Add(this.groupBoxOutput);
this.Controls.Add(this.groupBoxInput); this.Controls.Add(this.groupBoxInput);
this.Controls.Add(this.btnStart); this.Controls.Add(this.btnStart);
this.Controls.Add(this.btnSave); this.Controls.Add(this.btnSave);
this.HelpButton = true;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Margin = new System.Windows.Forms.Padding(2); this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.MinimumSize = new System.Drawing.Size(363, 283); this.MinimumSize = new System.Drawing.Size(418, 299);
this.Name = "frmMain"; this.Name = "FrmMain";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Retime Phoneme Util GUI 1.0.0.0"; this.Text = "appName";
this.Load += new System.EventHandler(this.frmMain_Load); this.Load += new System.EventHandler(this.frmMain_Load);
this.grpClean.ResumeLayout(false);
this.grpClean.PerformLayout();
this.groupBoxInput.ResumeLayout(false); this.groupBoxInput.ResumeLayout(false);
this.groupBoxInput.PerformLayout(); this.groupBoxInput.PerformLayout();
this.groupBoxOutput.ResumeLayout(false); this.groupBoxOutput.ResumeLayout(false);
this.groupBoxOutput.PerformLayout(); this.groupBoxOutput.PerformLayout();
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.ResumeLayout(false); this.ResumeLayout(false);
this.PerformLayout();
} }
@ -243,10 +271,12 @@ partial class frmMain
private FolderBrowserDialog fbBrowseInput; private FolderBrowserDialog fbBrowseInput;
private FolderBrowserDialog fbBrowseOutput; private FolderBrowserDialog fbBrowseOutput;
private SaveFileDialog sfdOutput; private SaveFileDialog sfdOutput;
private GroupBox grpClean;
private RadioButton rdClean;
private RadioButton rdFixed;
private CheckBox chkSaveLogs; private CheckBox chkSaveLogs;
private GroupBox groupBoxInput; private GroupBox groupBoxInput;
private GroupBox groupBoxOutput; private GroupBox groupBoxOutput;
private CheckBox chkClean;
private GroupBox groupBox1;
private TextBox txtOutputClean;
private Button btnBrowseOutputClean;
private Button buttonAbout;
} }

View File

@ -1,42 +1,50 @@
namespace ConverterGui; namespace ConverterGui;
public partial class frmMain : Form
using kru.gui;
using kru.gui.Core;
public partial class FrmMain : Form
{ {
public frmMain() => InitializeComponent(); public FrmMain() => this.InitializeComponent();
private void BtnBrowseOutputClick(object sender, EventArgs e) => this.txtOutput.Text = this.fbBrowseOutput.ShowDialog() == DialogResult.OK ? this.fbBrowseOutput.SelectedPath : string.Empty; private void BtnBrowseOutputClick(object sender, EventArgs e) => this.txtOutput.Text = this.fbBrowseOutput.ShowDialog() == DialogResult.OK ? this.fbBrowseOutput.SelectedPath : string.Empty;
private void BtnBrowseOutputCleanClick(object sender, EventArgs e) => this.txtOutputClean.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 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) private void TxtOutputTextChanged(object sender, EventArgs e)
{ {
this.fbBrowseOutput.SelectedPath = this.txtOutput.Text; this.fbBrowseOutput.SelectedPath = this.txtOutput.Text;
EnableButtons(); this.EnableButtons();
} }
private void TxtInputTextChanged(object sender, EventArgs e) private void TxtInputTextChanged(object sender, EventArgs e)
{ {
this.fbBrowseInput.SelectedPath = this.txtInput.Text; this.fbBrowseInput.SelectedPath = this.txtInput.Text;
EnableButtons(); this.EnableButtons();
} }
private void BtnSaveClick(object sender, EventArgs e) private void BtnSaveClick(object sender, EventArgs e)
{ {
var commands = GetCommands(); var commands = this.GetCommands();
if (sfdOutput.ShowDialog() == DialogResult.OK) if (this.sfdOutput.ShowDialog() == DialogResult.OK)
{ {
File.WriteAllLines(sfdOutput.FileName, commands File.WriteAllLines(this.sfdOutput.FileName, commands
.Select(a => a.GetBatchLine())); .Select(a => a.GetBatchLine()));
} }
MessageBox.Show("Done!"); MessageBox.Show("Done!", "Success!", MessageBoxButtons.OK, MessageBoxIcon.Information);
} }
private void EnableButtons() private void EnableButtons()
{ {
var enabled = !string.IsNullOrWhiteSpace(this.txtInput.Text) var enabled = !string.IsNullOrWhiteSpace(this.txtInput.Text)
&& !string.IsNullOrWhiteSpace(this.txtOutput.Text) && !string.IsNullOrWhiteSpace(this.txtOutput.Text)
&& Directory.Exists(this.txtInput.Text); && Directory.Exists(this.txtInput.Text)
&& Directory.Exists(this.txtOutput.Text)
&& (!this.chkClean.Checked || (!string.IsNullOrWhiteSpace(this.txtOutputClean.Text) && Directory.Exists(this.txtOutputClean.Text)));
this.btnSave.Enabled = this.btnStart.Enabled = enabled; this.btnSave.Enabled = this.btnStart.Enabled = enabled;
} }
@ -46,12 +54,18 @@ public partial class frmMain : Form
{ {
Input = this.txtInput.Text, Input = this.txtInput.Text,
Output = this.txtOutput.Text, Output = this.txtOutput.Text,
Clean = this.rdClean.Checked, OutputClean = this.txtOutputClean.Text,
SaveLog = chkSaveLogs.Checked, Clean = this.chkClean.Checked,
SaveLog = this.chkSaveLogs.Checked,
}; };
var commands = Directory var commands = Directory
.GetFiles(options.Input, "*.wav") .GetFiles(options.Input, "*.wav")
.Select(inputFile => new Command(inputFile, Path.Combine(options.Output, Path.GetFileName(inputFile)), options.Clean, options.SaveLog)) .Select(inputFile => new Command(
InputFile: inputFile,
OutputDirectory: options.Output,
CleanDirectory: options.Clean ? options.OutputClean : default,
SaveLog: options.SaveLog))
.ToArray(); .ToArray();
return commands; return commands;
@ -60,24 +74,47 @@ public partial class frmMain : Form
private async void btnStart_Click(object sender, EventArgs e) private async void btnStart_Click(object sender, EventArgs e)
{ {
this.Enabled = false; this.Enabled = false;
var commands = GetCommands(); try
{
var commands = this.GetCommands();
foreach (var command in commands) foreach (var command in commands)
{ {
var proc = command.GetProcess(); var proc = command.GetProcess();
try
{
proc.Start(); proc.Start();
await proc.WaitForExitAsync().ConfigureAwait(false); await proc.WaitForExitAsync().ConfigureAwait(false);
} }
catch (Exception ex)
{
MessageBox.Show("Error", $"An error has occured while trying to launch command: {ex.Message}", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
MessageBox.Show("Done!", "Success!", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally
{
this.Enabled = true; this.Enabled = true;
MessageBox.Show("Done!"); }
} }
private void frmMain_Load(object sender, EventArgs e) private void frmMain_Load(object sender, EventArgs e)
{ {
var (version, name, _) = ApplicationInfoProvider.GetInfo();
this.Text = $"{name} {version} ({BitnessProvider.BitnessName})";
} }
private void sfdOutput_FileOk(object sender, System.ComponentModel.CancelEventArgs e) private void chkClean_CheckedChanged(object sender, EventArgs e)
{ {
this.txtOutputClean.Enabled = this.btnBrowseOutputClean.Enabled = this.chkClean.Checked;
this.EnableButtons();
}
private void buttonAbout_Click(object sender, EventArgs e)
{
using var about = new FrmAbout();
about.ShowDialog();
} }
} }

View File

@ -1,36 +1,51 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<OutputType>WinExe</OutputType> <AssemblyVersion>1.1.0.0</AssemblyVersion>
<PublishSingleFile>true</PublishSingleFile> <FileVersion>1.1.0.0</FileVersion>
<SelfContained>true</SelfContained> <PackageVersion>1.1.0.0</PackageVersion>
<RuntimeIdentifier>win-x64</RuntimeIdentifier> <Version>1.1.0.0</Version>
<Nullable>enable</Nullable>
<PublishTrimmed>false</PublishTrimmed>
<PublishReadyToRun>true</PublishReadyToRun>
<TargetFramework>net7.0-windows</TargetFramework>
<ApplicationIcon>favicon.ico</ApplicationIcon> <ApplicationIcon>favicon.ico</ApplicationIcon>
<PackageId>AntinomyCollective.kru.gui</PackageId>
<Authors>Antinomy Collective, EpicMorg, kasthack, stam</Authors> <Authors>Antinomy Collective, EpicMorg, kasthack, stam</Authors>
<Company>EpicMorg</Company>
<Copyright>EpicMorg 2023</Copyright>
<Description>Retime Phoneme Util GUI by EpicMorg</Description> <Description>Retime Phoneme Util GUI by EpicMorg</Description>
<PackageProjectUrl>https://github.com/AntinomyCollective/Retime-Phoneme-Uti-GUI</PackageProjectUrl> <ImplicitUsings>enable</ImplicitUsings>
<PackageIcon>favicon.png</PackageIcon> <PackageIcon>favicon.png</PackageIcon>
<PackageId>AntinomyCollective.kru.gui</PackageId>
<PackageProjectUrl>https://github.com/AntinomyCollective/Retime-Phoneme-Uti-GUI</PackageProjectUrl>
<PackageTags>epicmorg, retime, Phoneme, Util, GUI, Antinomy, Collective</PackageTags>
<Product>Retime Phoneme Util GUI</Product>
<PublishReadyToRun>true</PublishReadyToRun>
<PublishSingleFile>true</PublishSingleFile>
<PublishTrimmed>false</PublishTrimmed>
<RepositoryType>git</RepositoryType> <RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/AntinomyCollective/Retime-Phoneme-Uti-GUI</RepositoryUrl> <RepositoryUrl>https://github.com/AntinomyCollective/Retime-Phoneme-Uti-GUI</RepositoryUrl>
<PackageTags>epicmorg, retime, Phoneme, Util, GUI, Antinomy, Collective</PackageTags> <RuntimeIdentifier>win-x64</RuntimeIdentifier>
<AssemblyVersion>1.0.0.0</AssemblyVersion> <SelfContained>true</SelfContained>
<FileVersion>1.0.0.0</FileVersion> <TargetFramework>net7.0-windows</TargetFramework>
<Version>1.0.0.0</Version>
<Copyright>EpicMorg 2023</Copyright>
<Product>Retime Phoneme Util GUI</Product>
<IsPackable>true</IsPackable>
<Company>EpicMorg</Company>
<PackageReadmeFile>README.md</PackageReadmeFile>
<UseWindowsForms>True</UseWindowsForms> <UseWindowsForms>True</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings> <OutputType>WinExe</OutputType>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Update="favicon.png" Pack="true" PackagePath=""/>
<None Update="Tools\x64\libgcc_s_seh-1.dll"> <None Update="Tools\x64\libgcc_s_seh-1.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None> </None>

View File

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