Improve UI, implement i18n, add simple mode, group files

This commit is contained in:
Martijn van Berkel (Flitskikker) 2023-05-31 14:28:07 +02:00
parent 1b5d2499a1
commit f9f650d9fb
16 changed files with 1661 additions and 609 deletions

View File

@ -1,5 +1,5 @@

namespace Nikse.SubtitleEdit.Forms
namespace Nikse.SubtitleEdit.Forms.BeautifyTimeCodes
{
partial class BeautifyTimeCodes
{
@ -61,7 +61,7 @@ namespace Nikse.SubtitleEdit.Forms
this.buttonOK.Location = new System.Drawing.Point(415, 350);
this.buttonOK.Name = "buttonOK";
this.buttonOK.Size = new System.Drawing.Size(75, 23);
this.buttonOK.TabIndex = 3;
this.buttonOK.TabIndex = 21;
this.buttonOK.Text = "OK";
this.buttonOK.UseVisualStyleBackColor = true;
this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click);
@ -73,7 +73,7 @@ namespace Nikse.SubtitleEdit.Forms
this.buttonCancel.Location = new System.Drawing.Point(496, 350);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(75, 23);
this.buttonCancel.TabIndex = 4;
this.buttonCancel.TabIndex = 22;
this.buttonCancel.Text = "Cancel";
this.buttonCancel.UseVisualStyleBackColor = true;
//
@ -99,7 +99,7 @@ namespace Nikse.SubtitleEdit.Forms
this.checkBoxAlignTimeCodes.Location = new System.Drawing.Point(10, 22);
this.checkBoxAlignTimeCodes.Name = "checkBoxAlignTimeCodes";
this.checkBoxAlignTimeCodes.Size = new System.Drawing.Size(224, 19);
this.checkBoxAlignTimeCodes.TabIndex = 1;
this.checkBoxAlignTimeCodes.TabIndex = 2;
this.checkBoxAlignTimeCodes.Text = "Align time codes to frame time codes";
this.checkBoxAlignTimeCodes.UseVisualStyleBackColor = true;
this.checkBoxAlignTimeCodes.CheckedChanged += new System.EventHandler(this.checkBoxAlignTimeCodes_CheckedChanged);
@ -121,7 +121,7 @@ namespace Nikse.SubtitleEdit.Forms
this.checkBoxExtractExactTimeCodes.Location = new System.Drawing.Point(4, 2);
this.checkBoxExtractExactTimeCodes.Name = "checkBoxExtractExactTimeCodes";
this.checkBoxExtractExactTimeCodes.Size = new System.Drawing.Size(266, 19);
this.checkBoxExtractExactTimeCodes.TabIndex = 1;
this.checkBoxExtractExactTimeCodes.TabIndex = 3;
this.checkBoxExtractExactTimeCodes.Text = "Use ffprobe to extract exact frame time codes";
this.checkBoxExtractExactTimeCodes.UseVisualStyleBackColor = true;
this.checkBoxExtractExactTimeCodes.CheckedChanged += new System.EventHandler(this.checkBoxExtractExactTimeCodes_CheckedChanged);
@ -171,7 +171,7 @@ namespace Nikse.SubtitleEdit.Forms
this.buttonExtractTimeCodes.Location = new System.Drawing.Point(23, 18);
this.buttonExtractTimeCodes.Name = "buttonExtractTimeCodes";
this.buttonExtractTimeCodes.Size = new System.Drawing.Size(149, 23);
this.buttonExtractTimeCodes.TabIndex = 2;
this.buttonExtractTimeCodes.TabIndex = 4;
this.buttonExtractTimeCodes.Text = "Extract time codes";
this.buttonExtractTimeCodes.UseVisualStyleBackColor = true;
this.buttonExtractTimeCodes.Click += new System.EventHandler(this.buttonExtractTimeCodes_Click);
@ -195,7 +195,7 @@ namespace Nikse.SubtitleEdit.Forms
this.groupBoxShotChanges.Location = new System.Drawing.Point(12, 170);
this.groupBoxShotChanges.Name = "groupBoxShotChanges";
this.groupBoxShotChanges.Size = new System.Drawing.Size(558, 101);
this.groupBoxShotChanges.TabIndex = 2;
this.groupBoxShotChanges.TabIndex = 10;
this.groupBoxShotChanges.TabStop = false;
this.groupBoxShotChanges.Text = "Shot changes";
//
@ -207,7 +207,7 @@ namespace Nikse.SubtitleEdit.Forms
this.checkBoxSnapToShotChanges.Location = new System.Drawing.Point(10, 22);
this.checkBoxSnapToShotChanges.Name = "checkBoxSnapToShotChanges";
this.checkBoxSnapToShotChanges.Size = new System.Drawing.Size(166, 19);
this.checkBoxSnapToShotChanges.TabIndex = 1;
this.checkBoxSnapToShotChanges.TabIndex = 11;
this.checkBoxSnapToShotChanges.Text = "Snap cues to shot changes";
this.checkBoxSnapToShotChanges.UseVisualStyleBackColor = true;
this.checkBoxSnapToShotChanges.CheckedChanged += new System.EventHandler(this.checkBoxSnapToShotChanges_CheckedChanged);
@ -229,7 +229,7 @@ namespace Nikse.SubtitleEdit.Forms
this.buttonImportShotChanges.Location = new System.Drawing.Point(23, 18);
this.buttonImportShotChanges.Name = "buttonImportShotChanges";
this.buttonImportShotChanges.Size = new System.Drawing.Size(221, 23);
this.buttonImportShotChanges.TabIndex = 2;
this.buttonImportShotChanges.TabIndex = 12;
this.buttonImportShotChanges.Text = "Generate / import shot changes...";
this.buttonImportShotChanges.UseVisualStyleBackColor = true;
this.buttonImportShotChanges.Click += new System.EventHandler(this.buttonImportShotChanges_Click);
@ -249,7 +249,7 @@ namespace Nikse.SubtitleEdit.Forms
this.buttonEditProfile.Location = new System.Drawing.Point(11, 279);
this.buttonEditProfile.Name = "buttonEditProfile";
this.buttonEditProfile.Size = new System.Drawing.Size(178, 28);
this.buttonEditProfile.TabIndex = 3;
this.buttonEditProfile.TabIndex = 20;
this.buttonEditProfile.Text = "Edit profile...";
this.buttonEditProfile.UseVisualStyleBackColor = true;
this.buttonEditProfile.Click += new System.EventHandler(this.buttonEditProfile_Click);

View File

@ -1,20 +1,14 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Nikse.SubtitleEdit.Core;
using Nikse.SubtitleEdit.Core.Common;
using Nikse.SubtitleEdit.Core.Forms;
using Nikse.SubtitleEdit.Forms.ShotChanges;
using Nikse.SubtitleEdit.Logic;
namespace Nikse.SubtitleEdit.Forms
namespace Nikse.SubtitleEdit.Forms.BeautifyTimeCodes
{
public partial class BeautifyTimeCodes : Form
{

View File

@ -1,25 +1,22 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Nikse.SubtitleEdit.Core.Common;
using Nikse.SubtitleEdit.Logic;
namespace Nikse.SubtitleEdit.Forms
namespace Nikse.SubtitleEdit.Forms.BeautifyTimeCodes
{
public partial class BeautifyTimeCodesProfile : Form
{
private readonly double _frameRate;
public BeautifyTimeCodesProfile(double frameRate)
{
_frameRate = frameRate;
UiUtil.PreInitialize(this);
InitializeComponent();
UiUtil.FixFonts(this);
if (frameRate > 0)
{
cuesPreviewViewInCues.FrameRate = (float)frameRate;
@ -30,16 +27,78 @@ namespace Nikse.SubtitleEdit.Forms
cuesPreviewViewChainingInCueOnShot.FrameRate = (float)frameRate;
cuesPreviewViewChainingOutCueOnShot.FrameRate = (float)frameRate;
}
var language = LanguageSettings.Current.BeautifyTimeCodesProfile;
Text = language.Title;
// TODO i18n
buttonCreateSimple.Text = language.CreateSimple;
toolStripMenuItemLoadPreset.Text = language.LoadPreset;
groupBoxGeneral.Text = language.General;
labelGap.Text = language.Gap;
labelGapSuffix.Text = language.GapSuffix;
groupBoxInCues.Text = language.InCues;
labelInCuesGap.Text = language.Gap;
labelInCuesZones.Text = language.Zones;
groupBoxOutCues.Text = language.OutCues;
labelOutCuesGap.Text = language.Gap;
labelOutCuesZones.Text = language.Zones;
groupBoxConnectedSubtitles.Text = language.ConnectedSubtitles;
tabPageConnectedSubtitlesInCueClosest.Text = language.InCueClosest;
labelConnectedSubtitlesInCueClosestGaps.Text = language.Gap;
tabPageConnectedSubtitlesOutCueClosest.Text = language.OutCueClosest;
labelConnectedSubtitlesOutCueClosestGaps.Text = language.Gap;
labelConnectedSubtitlesZones.Text = language.Zones;
labelConnectedSubtitlesTreatConnected.Text = language.TreadAsConnected;
labelConnectedSubtitlesTreatConnectedSuffix.Text = language.Milliseconds;
groupBoxChaining.Text = language.Chaining;
tabPageChainingGeneral.Text = language.General;
radioButtonChainingGeneralMaxGap.Text = language.MaxGap;
labelChainingGeneralMaxGapSuffix.Text = language.Milliseconds;
radioButtonChainingGeneralZones.Text = language.Zones;
labelChainingGeneralShotChangeBehavior.Text = language.ShotChangeBehavior;
comboBoxChainingGeneralShotChangeBehavior.Items.Clear();
comboBoxChainingGeneralShotChangeBehavior.Items.Add(language.DontChain);
comboBoxChainingGeneralShotChangeBehavior.Items.Add(language.ExtendCrossingShotChange);
comboBoxChainingGeneralShotChangeBehavior.Items.Add(language.ExtendUntilShotChange);
radioButtonChainingInCueOnShotMaxGap.Text = language.MaxGap;
labelChainingInCueOnShotMaxGapSuffix.Text = language.Milliseconds;
radioButtonChainingInCueOnShotZones.Text = language.Zones;
radioButtonChainingOutCueOnShotMaxGap.Text = language.MaxGap;
labelChainingOutCueOnShotMaxGapSuffix.Text = language.Milliseconds;
radioButtonChainingOutCueOnShotZones.Text = language.Zones;
LoadSettings();
cuesPreviewViewInCues.PreviewText = language.SubtitlePreviewText;
cuesPreviewViewOutCues.PreviewText = language.SubtitlePreviewText;
cuesPreviewViewConnectedSubtitlesInCueClosest.PreviewText = language.SubtitlePreviewText;
cuesPreviewViewConnectedSubtitlesOutCueClosest.PreviewText = language.SubtitlePreviewText;
cuesPreviewViewChainingGeneral.PreviewText = language.SubtitlePreviewText;
cuesPreviewViewChainingInCueOnShot.PreviewText = language.SubtitlePreviewText;
cuesPreviewViewChainingOutCueOnShot.PreviewText = language.SubtitlePreviewText;
numericUpDownGap.Left = labelGap.Left + labelGap.Width + 12;
labelGapSuffix.Left = numericUpDownGap.Left + numericUpDownGap.Width + 6;
numericUpDownConnectedSubtitlesTreatConnected.Left = Math.Max(labelConnectedSubtitlesTreatConnected.Left + labelConnectedSubtitlesTreatConnected.Width + 6, numericUpDownConnectedSubtitlesTreatConnected.Left);
labelConnectedSubtitlesTreatConnectedSuffix.Left = numericUpDownConnectedSubtitlesTreatConnected.Left + numericUpDownConnectedSubtitlesTreatConnected.Width + 6;
var comboBoxRight = comboBoxChainingGeneralShotChangeBehavior.Right;
comboBoxChainingGeneralShotChangeBehavior.Left = Math.Max(labelChainingGeneralShotChangeBehavior.Left + labelChainingGeneralShotChangeBehavior.Width + 6, comboBoxChainingGeneralShotChangeBehavior.Left);
comboBoxChainingGeneralShotChangeBehavior.Width = comboBoxRight - comboBoxChainingGeneralShotChangeBehavior.Left;
foreach (BeautifyTimeCodesSettings.BeautifyTimeCodesProfile.Preset preset in Enum.GetValues(typeof(BeautifyTimeCodesSettings.BeautifyTimeCodesProfile.Preset)))
{
var toolStripMenuItem = new ToolStripMenuItem(UiUtil.GetBeautifyTimeCodesProfilePresetName(preset));
toolStripMenuItem.Click += (sender, args) =>
{
ResetSettings(preset);
};
toolStripMenuItemLoadPreset.DropDownItems.Add(toolStripMenuItem);
}
buttonOK.Text = LanguageSettings.Current.General.Ok;
buttonCancel.Text = LanguageSettings.Current.General.Cancel;
UiUtil.FixLargeFonts(this, buttonOK);
LoadSettings();
}
private void LoadSettings()
@ -204,24 +263,9 @@ namespace Nikse.SubtitleEdit.Forms
DialogResult = DialogResult.OK;
}
private void toolStripMenuItemLoadDefault_Click(object sender, EventArgs e)
{
ResetSettings(BeautifyTimeCodesSettings.BeautifyTimeCodesProfile.Preset.Default);
}
private void toolStripMenuItemLoadNetflix_Click(object sender, EventArgs e)
{
ResetSettings(BeautifyTimeCodesSettings.BeautifyTimeCodesProfile.Preset.Netflix);
}
private void toolStripMenuItemLoadSDI_Click(object sender, EventArgs e)
{
ResetSettings(BeautifyTimeCodesSettings.BeautifyTimeCodesProfile.Preset.SDI);
}
private void ResetSettings(BeautifyTimeCodesSettings.BeautifyTimeCodesProfile.Preset preset)
{
if (MessageBox.Show(this, "This will reset your current profile and replace all values with those of the selected preset. This cannot be undone.\n\nDo you want to continue?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
if (MessageBox.Show(this, LanguageSettings.Current.BeautifyTimeCodesProfile.ResetWarning, LanguageSettings.Current.General.Warning, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
Configuration.Settings.BeautifyTimeCodes.Profile = new BeautifyTimeCodesSettings.BeautifyTimeCodesProfile(preset);
LoadSettings();
@ -291,5 +335,16 @@ namespace Nikse.SubtitleEdit.Forms
numericUpDownChainingInCueOnShotLeftGreenZone.Minimum = numericUpDownChainingInCueOnShotLeftRedZone.Value;
numericUpDownChainingOutCueOnShotRightGreenZone.Minimum = numericUpDownChainingOutCueOnShotRightRedZone.Value;
}
private void buttonCreateSimple_Click(object sender, EventArgs e)
{
using (var form = new BeautifyTimeCodesProfileSimple(_frameRate))
{
if (form.ShowDialog() == DialogResult.OK)
{
LoadSettings();
}
}
}
}
}

View File

@ -0,0 +1,552 @@
namespace Nikse.SubtitleEdit.Forms.BeautifyTimeCodes
{
partial class BeautifyTimeCodesProfileSimple
{
/// <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.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BeautifyTimeCodesProfileSimple));
this.buttonCancel = new System.Windows.Forms.Button();
this.buttonOK = new System.Windows.Forms.Button();
this.labelInstructions = new System.Windows.Forms.Label();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.checkBoxSnapClosestCue = new System.Windows.Forms.CheckBox();
this.pictureBoxChainingInfo = new System.Windows.Forms.PictureBox();
this.labelChainingGapAfterShotChangesPrefix = new System.Windows.Forms.Label();
this.numericUpDownChainingGapAfterShotChanges = new System.Windows.Forms.NumericUpDown();
this.labelChainingGapAfterShotChangesSuffix = new System.Windows.Forms.Label();
this.checkBoxChainingGapAfterShotChanges = new System.Windows.Forms.CheckBox();
this.numericUpDownChainingGap = new System.Windows.Forms.NumericUpDown();
this.labelChainingGapInstruction = new System.Windows.Forms.Label();
this.labelChainingGapSuffix = new System.Windows.Forms.Label();
this.labelChainingGap = new System.Windows.Forms.Label();
this.labelOffsetInstruction = new System.Windows.Forms.Label();
this.labelOffsetSuffix = new System.Windows.Forms.Label();
this.numericUpDownOffset = new System.Windows.Forms.NumericUpDown();
this.labelOffset = new System.Windows.Forms.Label();
this.labelSafeZoneInstruction = new System.Windows.Forms.Label();
this.labelSafeZoneSuffix = new System.Windows.Forms.Label();
this.numericUpDownSafeZone = new System.Windows.Forms.NumericUpDown();
this.comboBoxOutCues = new System.Windows.Forms.ComboBox();
this.comboBoxInCues = new System.Windows.Forms.ComboBox();
this.labelOutCues = new System.Windows.Forms.Label();
this.labelInCues = new System.Windows.Forms.Label();
this.labelSafeZone = new System.Windows.Forms.Label();
this.labelGapInstruction = new System.Windows.Forms.Label();
this.labelGapHint = new System.Windows.Forms.Label();
this.labelGapSuffix = new System.Windows.Forms.Label();
this.numericUpDownGap = new System.Windows.Forms.NumericUpDown();
this.labelGap = new System.Windows.Forms.Label();
this.toolTipChaining = new System.Windows.Forms.ToolTip(this.components);
this.buttonLoadNetflixRules = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxChainingInfo)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownChainingGapAfterShotChanges)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownChainingGap)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownOffset)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownSafeZone)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownGap)).BeginInit();
this.SuspendLayout();
//
// buttonCancel
//
this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.buttonCancel.Location = new System.Drawing.Point(463, 527);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(75, 23);
this.buttonCancel.TabIndex = 101;
this.buttonCancel.Text = "Cancel";
this.buttonCancel.UseVisualStyleBackColor = true;
//
// buttonOK
//
this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK;
this.buttonOK.Location = new System.Drawing.Point(382, 527);
this.buttonOK.Name = "buttonOK";
this.buttonOK.Size = new System.Drawing.Size(75, 23);
this.buttonOK.TabIndex = 100;
this.buttonOK.Text = "OK";
this.buttonOK.UseVisualStyleBackColor = true;
this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click);
//
// labelInstructions
//
this.labelInstructions.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.labelInstructions.AutoSize = true;
this.labelInstructions.Location = new System.Drawing.Point(9, 9);
this.labelInstructions.Name = "labelInstructions";
this.labelInstructions.Size = new System.Drawing.Size(399, 15);
this.labelInstructions.TabIndex = 104;
this.labelInstructions.Text = "Enter these basic rules, and the current profile will be updated accordingly.";
//
// groupBox1
//
this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox1.Controls.Add(this.checkBoxSnapClosestCue);
this.groupBox1.Controls.Add(this.pictureBoxChainingInfo);
this.groupBox1.Controls.Add(this.labelChainingGapAfterShotChangesPrefix);
this.groupBox1.Controls.Add(this.numericUpDownChainingGapAfterShotChanges);
this.groupBox1.Controls.Add(this.labelChainingGapAfterShotChangesSuffix);
this.groupBox1.Controls.Add(this.checkBoxChainingGapAfterShotChanges);
this.groupBox1.Controls.Add(this.numericUpDownChainingGap);
this.groupBox1.Controls.Add(this.labelChainingGapInstruction);
this.groupBox1.Controls.Add(this.labelChainingGapSuffix);
this.groupBox1.Controls.Add(this.labelChainingGap);
this.groupBox1.Controls.Add(this.labelOffsetInstruction);
this.groupBox1.Controls.Add(this.labelOffsetSuffix);
this.groupBox1.Controls.Add(this.numericUpDownOffset);
this.groupBox1.Controls.Add(this.labelOffset);
this.groupBox1.Controls.Add(this.labelSafeZoneInstruction);
this.groupBox1.Controls.Add(this.labelSafeZoneSuffix);
this.groupBox1.Controls.Add(this.numericUpDownSafeZone);
this.groupBox1.Controls.Add(this.comboBoxOutCues);
this.groupBox1.Controls.Add(this.comboBoxInCues);
this.groupBox1.Controls.Add(this.labelOutCues);
this.groupBox1.Controls.Add(this.labelInCues);
this.groupBox1.Controls.Add(this.labelSafeZone);
this.groupBox1.Controls.Add(this.labelGapInstruction);
this.groupBox1.Controls.Add(this.labelGapHint);
this.groupBox1.Controls.Add(this.labelGapSuffix);
this.groupBox1.Controls.Add(this.numericUpDownGap);
this.groupBox1.Controls.Add(this.labelGap);
this.groupBox1.Location = new System.Drawing.Point(12, 27);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(525, 490);
this.groupBox1.TabIndex = 1;
this.groupBox1.TabStop = false;
//
// checkBoxSnapClosestCue
//
this.checkBoxSnapClosestCue.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.checkBoxSnapClosestCue.Checked = true;
this.checkBoxSnapClosestCue.CheckState = System.Windows.Forms.CheckState.Checked;
this.checkBoxSnapClosestCue.Location = new System.Drawing.Point(134, 157);
this.checkBoxSnapClosestCue.Name = "checkBoxSnapClosestCue";
this.checkBoxSnapClosestCue.Size = new System.Drawing.Size(377, 35);
this.checkBoxSnapClosestCue.TabIndex = 32;
this.checkBoxSnapClosestCue.Text = "For connected subtitles, snap the in or out cue to the shot change based on which" +
" one is closer";
this.checkBoxSnapClosestCue.UseVisualStyleBackColor = true;
//
// pictureBoxChainingInfo
//
this.pictureBoxChainingInfo.Image = ((System.Drawing.Image)(resources.GetObject("pictureBoxChainingInfo.Image")));
this.pictureBoxChainingInfo.Location = new System.Drawing.Point(15, 381);
this.pictureBoxChainingInfo.Name = "pictureBoxChainingInfo";
this.pictureBoxChainingInfo.Size = new System.Drawing.Size(16, 16);
this.pictureBoxChainingInfo.TabIndex = 31;
this.pictureBoxChainingInfo.TabStop = false;
//
// labelChainingGapAfterShotChangesPrefix
//
this.labelChainingGapAfterShotChangesPrefix.AutoSize = true;
this.labelChainingGapAfterShotChangesPrefix.Location = new System.Drawing.Point(150, 447);
this.labelChainingGapAfterShotChangesPrefix.Name = "labelChainingGapAfterShotChangesPrefix";
this.labelChainingGapAfterShotChangesPrefix.Size = new System.Drawing.Size(33, 15);
this.labelChainingGapAfterShotChangesPrefix.TabIndex = 30;
this.labelChainingGapAfterShotChangesPrefix.Text = "Max.";
//
// numericUpDownChainingGapAfterShotChanges
//
this.numericUpDownChainingGapAfterShotChanges.Location = new System.Drawing.Point(193, 444);
this.numericUpDownChainingGapAfterShotChanges.Maximum = new decimal(new int[] {
2000,
0,
0,
0});
this.numericUpDownChainingGapAfterShotChanges.Name = "numericUpDownChainingGapAfterShotChanges";
this.numericUpDownChainingGapAfterShotChanges.Size = new System.Drawing.Size(52, 23);
this.numericUpDownChainingGapAfterShotChanges.TabIndex = 10;
this.numericUpDownChainingGapAfterShotChanges.Value = new decimal(new int[] {
500,
0,
0,
0});
//
// labelChainingGapAfterShotChangesSuffix
//
this.labelChainingGapAfterShotChangesSuffix.AutoSize = true;
this.labelChainingGapAfterShotChangesSuffix.Location = new System.Drawing.Point(251, 447);
this.labelChainingGapAfterShotChangesSuffix.Name = "labelChainingGapAfterShotChangesSuffix";
this.labelChainingGapAfterShotChangesSuffix.Size = new System.Drawing.Size(23, 15);
this.labelChainingGapAfterShotChangesSuffix.TabIndex = 28;
this.labelChainingGapAfterShotChangesSuffix.Text = "ms";
//
// checkBoxChainingGapAfterShotChanges
//
this.checkBoxChainingGapAfterShotChanges.AutoSize = true;
this.checkBoxChainingGapAfterShotChanges.Checked = true;
this.checkBoxChainingGapAfterShotChanges.CheckState = System.Windows.Forms.CheckState.Checked;
this.checkBoxChainingGapAfterShotChanges.Location = new System.Drawing.Point(134, 422);
this.checkBoxChainingGapAfterShotChanges.Name = "checkBoxChainingGapAfterShotChanges";
this.checkBoxChainingGapAfterShotChanges.Size = new System.Drawing.Size(334, 19);
this.checkBoxChainingGapAfterShotChanges.TabIndex = 9;
this.checkBoxChainingGapAfterShotChanges.Text = "After an out cue on a shot change, the gap may be smaller";
this.checkBoxChainingGapAfterShotChanges.UseVisualStyleBackColor = true;
this.checkBoxChainingGapAfterShotChanges.CheckedChanged += new System.EventHandler(this.checkBoxChainingGapAfterShotChanges_CheckedChanged);
//
// numericUpDownChainingGap
//
this.numericUpDownChainingGap.Location = new System.Drawing.Point(134, 352);
this.numericUpDownChainingGap.Maximum = new decimal(new int[] {
2000,
0,
0,
0});
this.numericUpDownChainingGap.Name = "numericUpDownChainingGap";
this.numericUpDownChainingGap.Size = new System.Drawing.Size(52, 23);
this.numericUpDownChainingGap.TabIndex = 8;
this.numericUpDownChainingGap.Value = new decimal(new int[] {
1000,
0,
0,
0});
//
// labelChainingGapInstruction
//
this.labelChainingGapInstruction.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.labelChainingGapInstruction.ForeColor = System.Drawing.SystemColors.GrayText;
this.labelChainingGapInstruction.Location = new System.Drawing.Point(131, 381);
this.labelChainingGapInstruction.Name = "labelChainingGapInstruction";
this.labelChainingGapInstruction.Size = new System.Drawing.Size(380, 30);
this.labelChainingGapInstruction.TabIndex = 25;
this.labelChainingGapInstruction.Text = "If the space between two subtitles is smaller than this amount, the subtitles wil" +
"l be connected.";
//
// labelChainingGapSuffix
//
this.labelChainingGapSuffix.AutoSize = true;
this.labelChainingGapSuffix.Location = new System.Drawing.Point(192, 355);
this.labelChainingGapSuffix.Name = "labelChainingGapSuffix";
this.labelChainingGapSuffix.Size = new System.Drawing.Size(23, 15);
this.labelChainingGapSuffix.TabIndex = 24;
this.labelChainingGapSuffix.Text = "ms";
//
// labelChainingGap
//
this.labelChainingGap.AutoSize = true;
this.labelChainingGap.Location = new System.Drawing.Point(12, 355);
this.labelChainingGap.Name = "labelChainingGap";
this.labelChainingGap.Size = new System.Drawing.Size(108, 15);
this.labelChainingGap.TabIndex = 22;
this.labelChainingGap.Text = "Max. chaining gap:";
//
// labelOffsetInstruction
//
this.labelOffsetInstruction.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.labelOffsetInstruction.ForeColor = System.Drawing.SystemColors.GrayText;
this.labelOffsetInstruction.Location = new System.Drawing.Point(131, 237);
this.labelOffsetInstruction.Name = "labelOffsetInstruction";
this.labelOffsetInstruction.Size = new System.Drawing.Size(380, 30);
this.labelOffsetInstruction.TabIndex = 21;
this.labelOffsetInstruction.Text = "Cues within this distance from shot changes will be considered as being on the sh" +
"ot change.";
//
// labelOffsetSuffix
//
this.labelOffsetSuffix.AutoSize = true;
this.labelOffsetSuffix.Location = new System.Drawing.Point(192, 211);
this.labelOffsetSuffix.Name = "labelOffsetSuffix";
this.labelOffsetSuffix.Size = new System.Drawing.Size(43, 15);
this.labelOffsetSuffix.TabIndex = 20;
this.labelOffsetSuffix.Text = "frames";
//
// numericUpDownOffset
//
this.numericUpDownOffset.Location = new System.Drawing.Point(134, 208);
this.numericUpDownOffset.Maximum = new decimal(new int[] {
50,
0,
0,
0});
this.numericUpDownOffset.Name = "numericUpDownOffset";
this.numericUpDownOffset.Size = new System.Drawing.Size(52, 23);
this.numericUpDownOffset.TabIndex = 6;
this.numericUpDownOffset.Value = new decimal(new int[] {
3,
0,
0,
0});
//
// labelOffset
//
this.labelOffset.AutoSize = true;
this.labelOffset.Location = new System.Drawing.Point(12, 211);
this.labelOffset.Name = "labelOffset";
this.labelOffset.Size = new System.Drawing.Size(69, 15);
this.labelOffset.TabIndex = 18;
this.labelOffset.Text = "Max. offset:";
//
// labelSafeZoneInstruction
//
this.labelSafeZoneInstruction.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.labelSafeZoneInstruction.ForeColor = System.Drawing.SystemColors.GrayText;
this.labelSafeZoneInstruction.Location = new System.Drawing.Point(131, 309);
this.labelSafeZoneInstruction.Name = "labelSafeZoneInstruction";
this.labelSafeZoneInstruction.Size = new System.Drawing.Size(380, 30);
this.labelSafeZoneInstruction.TabIndex = 17;
this.labelSafeZoneInstruction.Text = "The amount of frames around shot changes where no cues are allowed.";
//
// labelSafeZoneSuffix
//
this.labelSafeZoneSuffix.AutoSize = true;
this.labelSafeZoneSuffix.Location = new System.Drawing.Point(192, 283);
this.labelSafeZoneSuffix.Name = "labelSafeZoneSuffix";
this.labelSafeZoneSuffix.Size = new System.Drawing.Size(43, 15);
this.labelSafeZoneSuffix.TabIndex = 16;
this.labelSafeZoneSuffix.Text = "frames";
//
// numericUpDownSafeZone
//
this.numericUpDownSafeZone.Location = new System.Drawing.Point(134, 280);
this.numericUpDownSafeZone.Maximum = new decimal(new int[] {
50,
0,
0,
0});
this.numericUpDownSafeZone.Name = "numericUpDownSafeZone";
this.numericUpDownSafeZone.Size = new System.Drawing.Size(52, 23);
this.numericUpDownSafeZone.TabIndex = 7;
this.numericUpDownSafeZone.Value = new decimal(new int[] {
6,
0,
0,
0});
//
// comboBoxOutCues
//
this.comboBoxOutCues.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.comboBoxOutCues.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxOutCues.FormattingEnabled = true;
this.comboBoxOutCues.Items.AddRange(new object[] {
"On the shot change",
"1 frame before the shot change",
"2 frames before the shot change",
"3 frames before the shot change",
"The same amount of frames as the gap before the shot change"});
this.comboBoxOutCues.Location = new System.Drawing.Point(134, 118);
this.comboBoxOutCues.Name = "comboBoxOutCues";
this.comboBoxOutCues.Size = new System.Drawing.Size(377, 23);
this.comboBoxOutCues.TabIndex = 4;
this.comboBoxOutCues.SelectedIndexChanged += new System.EventHandler(this.comboBoxInCues_SelectedIndexChanged);
//
// comboBoxInCues
//
this.comboBoxInCues.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.comboBoxInCues.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxInCues.FormattingEnabled = true;
this.comboBoxInCues.Items.AddRange(new object[] {
"On the shot change",
"1 frame after the shot change",
"2 frames after the shot change",
"3 frames after the shot change"});
this.comboBoxInCues.Location = new System.Drawing.Point(134, 79);
this.comboBoxInCues.Name = "comboBoxInCues";
this.comboBoxInCues.Size = new System.Drawing.Size(377, 23);
this.comboBoxInCues.TabIndex = 3;
this.comboBoxInCues.SelectedIndexChanged += new System.EventHandler(this.comboBoxInCues_SelectedIndexChanged);
//
// labelOutCues
//
this.labelOutCues.AutoSize = true;
this.labelOutCues.Location = new System.Drawing.Point(12, 121);
this.labelOutCues.Name = "labelOutCues";
this.labelOutCues.Size = new System.Drawing.Size(112, 15);
this.labelOutCues.TabIndex = 11;
this.labelOutCues.Text = "Out cues should be:";
//
// labelInCues
//
this.labelInCues.AutoSize = true;
this.labelInCues.Location = new System.Drawing.Point(12, 82);
this.labelInCues.Name = "labelInCues";
this.labelInCues.Size = new System.Drawing.Size(102, 15);
this.labelInCues.TabIndex = 10;
this.labelInCues.Text = "In cues should be:";
//
// labelSafeZone
//
this.labelSafeZone.AutoSize = true;
this.labelSafeZone.Location = new System.Drawing.Point(12, 283);
this.labelSafeZone.Name = "labelSafeZone";
this.labelSafeZone.Size = new System.Drawing.Size(60, 15);
this.labelSafeZone.TabIndex = 9;
this.labelSafeZone.Text = "Safe zone:";
//
// labelGapInstruction
//
this.labelGapInstruction.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.labelGapInstruction.ForeColor = System.Drawing.SystemColors.GrayText;
this.labelGapInstruction.Location = new System.Drawing.Point(131, 51);
this.labelGapInstruction.Name = "labelGapInstruction";
this.labelGapInstruction.Size = new System.Drawing.Size(380, 15);
this.labelGapInstruction.TabIndex = 7;
this.labelGapInstruction.Text = "The minimum amount of space between subtitles.";
//
// labelGapHint
//
this.labelGapHint.AutoSize = true;
this.labelGapHint.ForeColor = System.Drawing.SystemColors.ButtonShadow;
this.labelGapHint.Location = new System.Drawing.Point(250, 25);
this.labelGapHint.Name = "labelGapHint";
this.labelGapHint.Size = new System.Drawing.Size(95, 15);
this.labelGapHint.TabIndex = 6;
this.labelGapHint.Text = "120 ms @ 25 FPS";
//
// labelGapSuffix
//
this.labelGapSuffix.AutoSize = true;
this.labelGapSuffix.Location = new System.Drawing.Point(192, 25);
this.labelGapSuffix.Name = "labelGapSuffix";
this.labelGapSuffix.Size = new System.Drawing.Size(43, 15);
this.labelGapSuffix.TabIndex = 5;
this.labelGapSuffix.Text = "frames";
//
// numericUpDownGap
//
this.numericUpDownGap.Location = new System.Drawing.Point(134, 22);
this.numericUpDownGap.Maximum = new decimal(new int[] {
10,
0,
0,
0});
this.numericUpDownGap.Name = "numericUpDownGap";
this.numericUpDownGap.Size = new System.Drawing.Size(52, 23);
this.numericUpDownGap.TabIndex = 2;
this.numericUpDownGap.Value = new decimal(new int[] {
3,
0,
0,
0});
this.numericUpDownGap.ValueChanged += new System.EventHandler(this.numericUpDownGap_ValueChanged);
//
// labelGap
//
this.labelGap.AutoSize = true;
this.labelGap.Location = new System.Drawing.Point(12, 25);
this.labelGap.Name = "labelGap";
this.labelGap.Size = new System.Drawing.Size(31, 15);
this.labelGap.TabIndex = 0;
this.labelGap.Text = "Gap:";
//
// toolTipChaining
//
this.toolTipChaining.IsBalloon = true;
this.toolTipChaining.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info;
//
// buttonLoadNetflixRules
//
this.buttonLoadNetflixRules.Location = new System.Drawing.Point(11, 527);
this.buttonLoadNetflixRules.Name = "buttonLoadNetflixRules";
this.buttonLoadNetflixRules.Size = new System.Drawing.Size(169, 23);
this.buttonLoadNetflixRules.TabIndex = 102;
this.buttonLoadNetflixRules.Text = "Load Netflix rules";
this.buttonLoadNetflixRules.UseVisualStyleBackColor = true;
this.buttonLoadNetflixRules.Click += new System.EventHandler(this.buttonLoadNetflixRules_Click);
//
// BeautifyTimeCodesProfileSimple
//
this.AcceptButton = this.buttonOK;
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.buttonCancel;
this.ClientSize = new System.Drawing.Size(549, 562);
this.Controls.Add(this.buttonLoadNetflixRules);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.labelInstructions);
this.Controls.Add(this.buttonCancel);
this.Controls.Add(this.buttonOK);
this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "BeautifyTimeCodesProfileSimple";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "BeautifyTimeCodesProfileSimple";
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxChainingInfo)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownChainingGapAfterShotChanges)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownChainingGap)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownOffset)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownSafeZone)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownGap)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button buttonCancel;
private System.Windows.Forms.Button buttonOK;
private System.Windows.Forms.Label labelInstructions;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.Label labelGap;
private System.Windows.Forms.NumericUpDown numericUpDownGap;
private System.Windows.Forms.Label labelGapHint;
private System.Windows.Forms.Label labelGapSuffix;
private System.Windows.Forms.Label labelGapInstruction;
private System.Windows.Forms.ComboBox comboBoxOutCues;
private System.Windows.Forms.ComboBox comboBoxInCues;
private System.Windows.Forms.Label labelOutCues;
private System.Windows.Forms.Label labelInCues;
private System.Windows.Forms.Label labelSafeZone;
private System.Windows.Forms.Label labelOffsetInstruction;
private System.Windows.Forms.Label labelOffsetSuffix;
private System.Windows.Forms.NumericUpDown numericUpDownOffset;
private System.Windows.Forms.Label labelOffset;
private System.Windows.Forms.Label labelSafeZoneInstruction;
private System.Windows.Forms.Label labelSafeZoneSuffix;
private System.Windows.Forms.NumericUpDown numericUpDownSafeZone;
private System.Windows.Forms.Label labelChainingGapInstruction;
private System.Windows.Forms.Label labelChainingGapSuffix;
private System.Windows.Forms.Label labelChainingGap;
private System.Windows.Forms.NumericUpDown numericUpDownChainingGap;
private System.Windows.Forms.CheckBox checkBoxChainingGapAfterShotChanges;
private System.Windows.Forms.NumericUpDown numericUpDownChainingGapAfterShotChanges;
private System.Windows.Forms.Label labelChainingGapAfterShotChangesSuffix;
private System.Windows.Forms.Label labelChainingGapAfterShotChangesPrefix;
private System.Windows.Forms.PictureBox pictureBoxChainingInfo;
private System.Windows.Forms.ToolTip toolTipChaining;
private System.Windows.Forms.CheckBox checkBoxSnapClosestCue;
private System.Windows.Forms.Button buttonLoadNetflixRules;
}
}

View File

@ -0,0 +1,176 @@
using Nikse.SubtitleEdit.Core.Common;
using Nikse.SubtitleEdit.Logic;
using System;
using System.Windows.Forms;
using Nikse.SubtitleEdit.Core.SubtitleFormats;
namespace Nikse.SubtitleEdit.Forms.BeautifyTimeCodes
{
public partial class BeautifyTimeCodesProfileSimple : Form
{
private readonly double _frameRate;
public BeautifyTimeCodesProfileSimple(double frameRate)
{
_frameRate = frameRate;
UiUtil.PreInitialize(this);
InitializeComponent();
UiUtil.FixFonts(this);
var language = LanguageSettings.Current.BeautifyTimeCodesProfile;
Text = language.CreateSimpleTitle;
labelInstructions.Text = language.CreateSimpleInstruction;
labelGap.Text = language.Gap;
labelGapSuffix.Text = language.Frames;
labelGapInstruction.Text = language.CreateSimpleGapInstruction;
labelInCues.Text = language.CreateSimpleInCues;
comboBoxInCues.Items.Clear();
comboBoxInCues.Items.Add(language.CreateSimpleInCues0Frames);
comboBoxInCues.Items.Add(language.CreateSimpleInCues1Frames);
comboBoxInCues.Items.Add(language.CreateSimpleInCues2Frames);
comboBoxInCues.Items.Add(language.CreateSimpleInCues3Frames);
comboBoxInCues.SelectedIndex = 0;
labelOutCues.Text = language.CreateSimpleOutCues;
comboBoxOutCues.Items.Clear();
comboBoxOutCues.Items.Add(language.CreateSimpleOutCues0Frames);
comboBoxOutCues.Items.Add(language.CreateSimpleOutCues1Frames);
comboBoxOutCues.Items.Add(language.CreateSimpleOutCues2Frames);
comboBoxOutCues.Items.Add(language.CreateSimpleOutCues3Frames);
comboBoxOutCues.Items.Add(language.CreateSimpleOutCuesGap);
comboBoxOutCues.SelectedIndex = 0;
checkBoxSnapClosestCue.Text = language.CreateSimpleSnapClosestCue;
checkBoxSnapClosestCue.Checked = true;
labelOffset.Text = language.CreateSimpleMaxOffset;
labelOffsetSuffix.Text = language.Frames;
labelOffsetInstruction.Text = language.CreateSimpleMaxOffsetInstruction;
labelSafeZone.Text = language.CreateSimpleSafeZone;
labelSafeZoneSuffix.Text = language.Frames;
labelSafeZoneInstruction.Text = language.CreateSimpleSafeZoneInstruction;
labelChainingGap.Text = language.CreateSimpleChainingGap;
labelChainingGapSuffix.Text = language.Milliseconds;
labelChainingGapInstruction.Text = language.CreateSimpleChainingGapInstruction;
checkBoxChainingGapAfterShotChanges.Text = language.CreateSimpleChainingGapAfterShotChanges;
labelChainingGapAfterShotChangesPrefix.Text = language.Maximum;
labelChainingGapAfterShotChangesSuffix.Text = language.Milliseconds;
toolTipChaining.SetToolTip(pictureBoxChainingInfo, language.CreateSimpleChainingToolTip);
buttonLoadNetflixRules.Text = language.CreateSimpleLoadNetflixRules;
buttonOK.Text = LanguageSettings.Current.General.Ok;
buttonCancel.Text = LanguageSettings.Current.General.Cancel;
UiUtil.FixLargeFonts(this, buttonOK);
RefreshControls();
}
private void RefreshControls()
{
numericUpDownGap_ValueChanged(numericUpDownGap, EventArgs.Empty);
checkBoxChainingGapAfterShotChanges_CheckedChanged(checkBoxChainingGapAfterShotChanges, EventArgs.Empty);
comboBoxInCues_SelectedIndexChanged(comboBoxInCues, EventArgs.Empty);
}
private void buttonOK_Click(object sender, EventArgs e)
{
// Validation
if (numericUpDownSafeZone.Value < numericUpDownOffset.Value)
{
MessageBox.Show(this, LanguageSettings.Current.BeautifyTimeCodesProfile.OffsetSafeZoneError, LanguageSettings.Current.General.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
// Save settings
var gap = Convert.ToInt32(numericUpDownGap.Value);
var inCuesGap = comboBoxInCues.SelectedIndex;
var outCuesGap = comboBoxOutCues.SelectedIndex;
if (comboBoxOutCues.SelectedIndex == comboBoxOutCues.Items.Count - 1)
{
outCuesGap = gap;
}
var redZone = Convert.ToInt32(numericUpDownOffset.Value);
var greenZone = Convert.ToInt32(numericUpDownSafeZone.Value);
Configuration.Settings.BeautifyTimeCodes.Profile.Gap = Convert.ToInt32(numericUpDownGap.Value);
Configuration.Settings.BeautifyTimeCodes.Profile.InCuesGap = inCuesGap;
Configuration.Settings.BeautifyTimeCodes.Profile.InCuesLeftGreenZone = greenZone;
Configuration.Settings.BeautifyTimeCodes.Profile.InCuesLeftRedZone = redZone;
Configuration.Settings.BeautifyTimeCodes.Profile.InCuesRightRedZone = redZone;
Configuration.Settings.BeautifyTimeCodes.Profile.InCuesRightGreenZone = greenZone;
Configuration.Settings.BeautifyTimeCodes.Profile.OutCuesGap = outCuesGap;
Configuration.Settings.BeautifyTimeCodes.Profile.OutCuesLeftGreenZone = greenZone;
Configuration.Settings.BeautifyTimeCodes.Profile.OutCuesLeftRedZone = redZone;
Configuration.Settings.BeautifyTimeCodes.Profile.OutCuesRightRedZone = redZone;
Configuration.Settings.BeautifyTimeCodes.Profile.OutCuesRightGreenZone = greenZone;
Configuration.Settings.BeautifyTimeCodes.Profile.ConnectedSubtitlesInCueClosestLeftGap = Math.Max(gap, outCuesGap);
Configuration.Settings.BeautifyTimeCodes.Profile.ConnectedSubtitlesInCueClosestRightGap = inCuesGap;
Configuration.Settings.BeautifyTimeCodes.Profile.ConnectedSubtitlesOutCueClosestLeftGap = checkBoxSnapClosestCue.Checked ? inCuesGap : Math.Max(gap, outCuesGap);
Configuration.Settings.BeautifyTimeCodes.Profile.ConnectedSubtitlesOutCueClosestRightGap = checkBoxSnapClosestCue.Checked ? Math.Max(gap, outCuesGap) : inCuesGap;
Configuration.Settings.BeautifyTimeCodes.Profile.ConnectedSubtitlesLeftGreenZone = greenZone;
Configuration.Settings.BeautifyTimeCodes.Profile.ConnectedSubtitlesLeftRedZone = redZone;
Configuration.Settings.BeautifyTimeCodes.Profile.ConnectedSubtitlesRightRedZone = redZone;
Configuration.Settings.BeautifyTimeCodes.Profile.ConnectedSubtitlesRightGreenZone = greenZone;
var treadConnectedMs = Math.Round(SubtitleFormat.FramesToMilliseconds(gap, _frameRate) * 1.5);
Configuration.Settings.BeautifyTimeCodes.Profile.ConnectedSubtitlesTreatConnected = Convert.ToInt32(treadConnectedMs);
Configuration.Settings.BeautifyTimeCodes.Profile.ChainingGeneralUseZones = false;
Configuration.Settings.BeautifyTimeCodes.Profile.ChainingGeneralMaxGap = Convert.ToInt32(numericUpDownChainingGap.Value);
Configuration.Settings.BeautifyTimeCodes.Profile.ChainingGeneralLeftGreenZone = greenZone;
Configuration.Settings.BeautifyTimeCodes.Profile.ChainingGeneralLeftRedZone = redZone;
Configuration.Settings.BeautifyTimeCodes.Profile.ChainingGeneralShotChangeBehavior = BeautifyTimeCodesSettings.BeautifyTimeCodesProfile.ChainingGeneralShotChangeBehaviorEnum.ExtendUntilShotChange;
Configuration.Settings.BeautifyTimeCodes.Profile.ChainingInCueOnShotUseZones = false;
Configuration.Settings.BeautifyTimeCodes.Profile.ChainingInCueOnShotMaxGap = Convert.ToInt32(numericUpDownChainingGap.Value);
Configuration.Settings.BeautifyTimeCodes.Profile.ChainingInCueOnShotLeftGreenZone = greenZone;
Configuration.Settings.BeautifyTimeCodes.Profile.ChainingInCueOnShotLeftRedZone = redZone;
Configuration.Settings.BeautifyTimeCodes.Profile.ChainingOutCueOnShotUseZones = false;
Configuration.Settings.BeautifyTimeCodes.Profile.ChainingOutCueOnShotMaxGap = checkBoxChainingGapAfterShotChanges.Checked ? Convert.ToInt32(numericUpDownChainingGapAfterShotChanges.Value) : Convert.ToInt32(numericUpDownChainingGap.Value);
Configuration.Settings.BeautifyTimeCodes.Profile.ChainingOutCueOnShotRightRedZone = redZone;
Configuration.Settings.BeautifyTimeCodes.Profile.ChainingOutCueOnShotRightGreenZone = greenZone;
DialogResult = DialogResult.OK;
}
private void numericUpDownGap_ValueChanged(object sender, EventArgs e)
{
int gapFrames = Convert.ToInt32(numericUpDownGap.Value);
double gapMs = SubtitleFormat.FramesToMilliseconds(gapFrames, _frameRate);
labelGapHint.Text = string.Format(LanguageSettings.Current.BeautifyTimeCodesProfile.GapInMsFormat, Math.Round(gapMs), Math.Round(_frameRate, 3));
}
private void checkBoxChainingGapAfterShotChanges_CheckedChanged(object sender, EventArgs e)
{
labelChainingGapAfterShotChangesPrefix.Enabled = checkBoxChainingGapAfterShotChanges.Checked;
numericUpDownChainingGapAfterShotChanges.Enabled = checkBoxChainingGapAfterShotChanges.Checked;
labelChainingGapAfterShotChangesSuffix.Enabled = checkBoxChainingGapAfterShotChanges.Checked;
}
private void comboBoxInCues_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBoxInCues.SelectedIndex != 0 || comboBoxOutCues.SelectedIndex != 0)
{
checkBoxSnapClosestCue.Checked = false;
}
}
private void buttonLoadNetflixRules_Click(object sender, EventArgs e)
{
numericUpDownGap.Value = 2;
comboBoxInCues.SelectedIndex = 0;
comboBoxOutCues.SelectedIndex = 2;
checkBoxSnapClosestCue.Checked = false;
numericUpDownOffset.Value = 7;
numericUpDownSafeZone.Value = 12;
numericUpDownChainingGap.Value = 500;
checkBoxChainingGapAfterShotChanges.Checked = false;
RefreshControls();
}
}
}

View File

@ -0,0 +1,133 @@
<?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.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pictureBoxChainingInfo.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAANVJREFUOE+l
k1EOgjAQRPuLpwHPRc8DwmXUUwg3kQ/1TVk1oSsS3eTFZmdmaYuEZdV1XcYYG7jA1Rjoq1eaLS8MBYYD
3ODugUeaPIXF5rLw8Wn8Bv4Tv+8hNDQ1M5ocPI1Ml0QWJbjbTgbK05SBSgN0OZlhI42mD4vmZnj4oB3o
NbkGO4F7BEF2kvjfAG3DE4Xl1waMEj9eouXXBrTaQQW/vsZ9MrDoPFMSKU8j05ucDAUN/T0zowfeM7jf
Qw+rHxP0sLNYXoi6kxZGQpOhdQvzmV8VwgNvzMGlpptvoQAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="toolTipChaining.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@ -34106,7 +34106,7 @@ namespace Nikse.SubtitleEdit.Forms
return;
}
using (var form = new BeautifyTimeCodes(_subtitle, _videoInfo, _videoFileName, audioVisualizer.ShotChanges))
using (var form = new BeautifyTimeCodes.BeautifyTimeCodes(_subtitle, _videoInfo, _videoFileName, audioVisualizer.ShotChanges))
{
if (form.ShowDialog(this) == DialogResult.OK)
{

View File

@ -14,6 +14,7 @@ using System.Linq;
using System.Reflection;
using System.Text;
using System.Windows.Forms;
using Nikse.SubtitleEdit.Forms.BeautifyTimeCodes;
namespace Nikse.SubtitleEdit.Forms.Options
{

BIN
src/ui/Icons/Info.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

View File

@ -546,15 +546,96 @@ namespace Nikse.SubtitleEdit.Logic
EditProfile = "Edit profile...",
NoTimeCodesLoaded = "No time codes loaded",
XTimeCodesLoaded = "{0} time codes loaded",
NoTimeCodesLoadedError = "You've selected to extract exact frame time codes, but there are no time codes loaded.\n\nPlease click \"{0}\" to extract the time codes first, or disable this option.",
NoTimeCodesLoadedError =
"You've selected to extract exact frame time codes, but there are no time codes loaded." +
Environment.NewLine + Environment.NewLine +
"Please click \"{0}\" to extract the time codes first, or disable this option.",
NoShotChangesLoaded = "No shot changes loaded",
XShotChangesLoaded = "{0} shot changes loaded",
NoShotChangesLoadedError = "You've selected to snap cues to shot changes, but there are no shot changes loaded.\n\nPlease click \"{0}\" to generate or import shot changes first, or disable this option.",
NoShotChangesLoadedError =
"You've selected to snap cues to shot changes, but there are no shot changes loaded." +
Environment.NewLine + Environment.NewLine +
"Please click \"{0}\" to generate or import shot changes first, or disable this option.",
};
BeautifyTimeCodesProfile = new LanguageStructure.BeautifyTimeCodesProfile
{
Title = "Edit profile",
LoadPreset = "Load preset...",
PresetDefault = "Default",
PresetNetflix = "Netflix",
PresetSDI = "SDI",
CreateSimple = "Simple mode...",
General = "General",
Gap = "Gap:",
GapSuffix = "frames (will overwrite custom settings)",
InCues = "In cues",
SubtitlePreviewText = "Subtitle text.",
Zones = "Zones:",
OutCues = "Out cues",
ConnectedSubtitles = "Connected subtitles",
InCueClosest = "In cue is closest",
OutCueClosest = "Out cue is closest",
TreadAsConnected = "Treat as connected if gap is smaller than:",
Milliseconds = "ms",
Chaining = "Chaining",
InCueOnShot = "In cue on shot change",
OutCueOnShot = "Out cue on shot change",
MaxGap = "Max. gap:",
ShotChangeBehavior = "If there is a shot change in between:",
DontChain = "Don't chain",
ExtendCrossingShotChange = "Extend, crossing shot change",
ExtendUntilShotChange = "Extend until shot change",
ResetWarning =
"This will reset your current profile and replace all values with those of the selected preset. This cannot be undone." +
Environment.NewLine +
Environment.NewLine +
"Do you want to continue?",
CreateSimpleTitle = "Create simple",
CreateSimpleInstruction =
"Enter these basic rules, and the current profile will be updated accordingly.",
CreateSimpleGapInstruction = "The minimum amount of space between subtitles.",
CreateSimpleInCues = "In cues should be:",
CreateSimpleInCues0Frames = "On the shot change",
CreateSimpleInCues1Frames = "1 frame after the shot change",
CreateSimpleInCues2Frames = "2 frames after the shot change",
CreateSimpleInCues3Frames = "3 frames after the shot change",
CreateSimpleOutCues = "Out cues should be:",
CreateSimpleOutCues0Frames = "On the shot change",
CreateSimpleOutCues1Frames = "1 frame before the shot change",
CreateSimpleOutCues2Frames = "2 frames before the shot change",
CreateSimpleOutCues3Frames = "3 frames before the shot change",
CreateSimpleOutCuesGap = "Minimum gap before the shot change",
CreateSimpleSnapClosestCue =
"For connected subtitles, snap the in or out cue to the shot change based on which one is closer",
CreateSimpleMaxOffset = "Max. offset:",
CreateSimpleMaxOffsetInstruction =
"Cues within this distance from shot changes will be considered as being on the shot change.",
CreateSimpleSafeZone = "Safe zone:",
CreateSimpleSafeZoneInstruction = "The amount of frames around shot changes where no cues are allowed.",
CreateSimpleChainingGap = "Max. chaining gap:",
CreateSimpleChainingGapInstruction =
"If the space between two subtitles is smaller than this amount, the subtitles will be connected.",
CreateSimpleChainingGapAfterShotChanges = "After an out cue on a shot change, the gap may be smaller",
CreateSimpleChainingToolTip =
"Chaining subtitles is recommended to ensure a consistent \"rhythm\" in the \"flashing\" of the subtitles." +
Environment.NewLine +
"This offers a more relaxed viewing experience." +
Environment.NewLine +
Environment.NewLine +
"After chaining, subtitles are either connected (i.e. a subtitle disappears and a new subtitle appears immediately after a slight pause) or not." +
Environment.NewLine +
"This gives the viewer some sense on when they can shift their focus back to the screen." +
Environment.NewLine +
Environment.NewLine +
"The length of the chaining gap can be a bit smaller right after a subtitle disappears on a shot change, because the changing shot \"resets\" the image in a way." +
Environment.NewLine +
"We leverage the intrinsic rhythm of the image.",
CreateSimpleLoadNetflixRules = "Load Netflix rules",
Frames = "frames",
Maximum = "Max.",
GapInMsFormat = "{0} ms @ {1} FPS",
OffsetSafeZoneError = "The safe zone should be larger than the max. offset.",
};
BinEdit = new LanguageStructure.BinEdit

View File

@ -410,6 +410,60 @@ namespace Nikse.SubtitleEdit.Logic
public class BeautifyTimeCodesProfile
{
public string Title { get; set; }
public string LoadPreset { get; set; }
public string PresetDefault { get; set; }
public string PresetNetflix { get; set; }
public string PresetSDI { get; set; }
public string CreateSimple { get; set; }
public string General { get; set; }
public string Gap { get; set; }
public string GapSuffix { get; set; }
public string InCues { get; set; }
public string SubtitlePreviewText { get; set; }
public string Zones { get; set; }
public string OutCues { get; set; }
public string ConnectedSubtitles { get; set; }
public string InCueClosest { get; set; }
public string OutCueClosest { get; set; }
public string TreadAsConnected { get; set; }
public string Milliseconds { get; set; }
public string Chaining { get; set; }
public string InCueOnShot { get; set; }
public string OutCueOnShot { get; set; }
public string MaxGap { get; set; }
public string ShotChangeBehavior { get; set; }
public string DontChain { get; set; }
public string ExtendCrossingShotChange { get; set; }
public string ExtendUntilShotChange { get; set; }
public string ResetWarning { get; set; }
public string CreateSimpleTitle { get; set; }
public string CreateSimpleInstruction { get; set; }
public string CreateSimpleGapInstruction { get; set; }
public string CreateSimpleInCues { get; set; }
public string CreateSimpleInCues0Frames { get; set; }
public string CreateSimpleInCues1Frames { get; set; }
public string CreateSimpleInCues2Frames { get; set; }
public string CreateSimpleInCues3Frames { get; set; }
public string CreateSimpleOutCues { get; set; }
public string CreateSimpleOutCues0Frames { get; set; }
public string CreateSimpleOutCues1Frames { get; set; }
public string CreateSimpleOutCues2Frames { get; set; }
public string CreateSimpleOutCues3Frames { get; set; }
public string CreateSimpleOutCuesGap { get; set; }
public string CreateSimpleSnapClosestCue { get; set; }
public string CreateSimpleMaxOffset { get; set; }
public string CreateSimpleMaxOffsetInstruction { get; set; }
public string CreateSimpleSafeZone { get; set; }
public string CreateSimpleSafeZoneInstruction { get; set; }
public string CreateSimpleChainingGap { get; set; }
public string CreateSimpleChainingGapInstruction { get; set; }
public string CreateSimpleChainingGapAfterShotChanges { get; set; }
public string CreateSimpleChainingToolTip { get; set; }
public string CreateSimpleLoadNetflixRules { get; set; }
public string Frames { get; set; }
public string Maximum { get; set; }
public string GapInMsFormat { get; set; }
public string OffsetSafeZoneError { get; set; }
}
public class BinEdit

View File

@ -1386,6 +1386,21 @@ namespace Nikse.SubtitleEdit.Logic
}
}
public static string GetBeautifyTimeCodesProfilePresetName(BeautifyTimeCodesSettings.BeautifyTimeCodesProfile.Preset preset)
{
switch (preset)
{
case BeautifyTimeCodesSettings.BeautifyTimeCodesProfile.Preset.Default:
return LanguageSettings.Current.BeautifyTimeCodesProfile.PresetDefault;
case BeautifyTimeCodesSettings.BeautifyTimeCodesProfile.Preset.Netflix:
return LanguageSettings.Current.BeautifyTimeCodesProfile.PresetNetflix;
case BeautifyTimeCodesSettings.BeautifyTimeCodesProfile.Preset.SDI:
return LanguageSettings.Current.BeautifyTimeCodesProfile.PresetSDI;
default:
return preset.ToString();
}
}
public static string DecimalSeparator => CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
public static Control FindFocusedControl(Control control)

View File

@ -258,18 +258,24 @@
<Compile Include="Forms\BatchConvertTsSettings.Designer.cs">
<DependentUpon>BatchConvertTsSettings.cs</DependentUpon>
</Compile>
<Compile Include="Forms\BeautifyTimeCodes.cs">
<Compile Include="Forms\BeautifyTimeCodes\BeautifyTimeCodes.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\BeautifyTimeCodes.Designer.cs">
<Compile Include="Forms\BeautifyTimeCodes\BeautifyTimeCodes.Designer.cs">
<DependentUpon>BeautifyTimeCodes.cs</DependentUpon>
</Compile>
<Compile Include="Forms\BeautifyTimeCodesProfile.cs">
<Compile Include="Forms\BeautifyTimeCodes\BeautifyTimeCodesProfile.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\BeautifyTimeCodesProfile.Designer.cs">
<Compile Include="Forms\BeautifyTimeCodes\BeautifyTimeCodesProfile.Designer.cs">
<DependentUpon>BeautifyTimeCodesProfile.cs</DependentUpon>
</Compile>
<Compile Include="Forms\BeautifyTimeCodes\BeautifyTimeCodesProfileSimple.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\BeautifyTimeCodes\BeautifyTimeCodesProfileSimple.Designer.cs">
<DependentUpon>BeautifyTimeCodesProfileSimple.cs</DependentUpon>
</Compile>
<Compile Include="Forms\BinaryEdit\BinEdit.cs">
<SubType>Form</SubType>
</Compile>
@ -1592,12 +1598,15 @@
<EmbeddedResource Include="Forms\BatchConvertTsSettings.resx">
<DependentUpon>BatchConvertTsSettings.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\BeautifyTimeCodes.resx">
<EmbeddedResource Include="Forms\BeautifyTimeCodes\BeautifyTimeCodes.resx">
<DependentUpon>BeautifyTimeCodes.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\BeautifyTimeCodesProfile.resx">
<EmbeddedResource Include="Forms\BeautifyTimeCodes\BeautifyTimeCodesProfile.resx">
<DependentUpon>BeautifyTimeCodesProfile.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\BeautifyTimeCodes\BeautifyTimeCodesProfileSimple.resx">
<DependentUpon>BeautifyTimeCodesProfileSimple.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\BinaryEdit\BinEdit.resx">
<DependentUpon>BinEdit.cs</DependentUpon>
</EmbeddedResource>