New shortcuts to move start/end one frame

Related to #4078
This commit is contained in:
Nikolaj Olsson 2020-05-05 08:53:01 +02:00
parent 60bbe8e043
commit 11b86412c3
8 changed files with 115 additions and 1 deletions

View File

@ -2008,6 +2008,10 @@ can edit in same subtitle file (collaboration)</Information>
<AdjustStartXMsForward>Move start {0} ms forward</AdjustStartXMsForward>
<AdjustEndXMsBack>Move end {0} ms back</AdjustEndXMsBack>
<AdjustEndXMsForward>Move end {0} ms forward</AdjustEndXMsForward>
<AdjustStartOneFrameBack>Move start 1 frame back</AdjustStartOneFrameBack>
<AdjustStartOneFrameForward>Move start 1 frame forward</AdjustStartOneFrameForward>
<AdjustEndOneFrameBack>Move end 1 frame back</AdjustEndOneFrameBack>
<AdjustEndOneFrameForward>Move start 1 frame forward</AdjustEndOneFrameForward>
<AdjustSetStartTimeKeepDuration>Set start time, keep duration</AdjustSetStartTimeKeepDuration>
<AdjustSetEndAndOffsetTheRest>Set end, offset the rest</AdjustSetEndAndOffsetTheRest>
<AdjustSetEndAndOffsetTheRestAndGoToNext>Set end, offset the rest and go to next</AdjustSetEndAndOffsetTheRestAndGoToNext>

View File

@ -2302,6 +2302,10 @@ can edit in same subtitle file (collaboration)",
AdjustStartXMsForward = "Move start {0} ms forward",
AdjustEndXMsBack = "Move end {0} ms back",
AdjustEndXMsForward = "Move end {0} ms forward",
AdjustStartOneFrameBack = "Move start 1 frame back",
AdjustStartOneFrameForward = "Move start 1 frame forward",
AdjustEndOneFrameBack = "Move end 1 frame back",
AdjustEndOneFrameForward = "Move start 1 frame forward",
AdjustSetStartTimeKeepDuration = "Set start time, keep duration",
AdjustSetEndAndOffsetTheRest = "Set end, offset the rest",
AdjustSetEndAndOffsetTheRestAndGoToNext = "Set end, offset the rest and go to next",

View File

@ -5446,6 +5446,18 @@ namespace Nikse.SubtitleEdit.Core
case "Settings/AdjustEndXMsForward":
language.Settings.AdjustEndXMsForward = reader.Value;
break;
case "Settings/AdjustStartOneFrameBack":
language.Settings.AdjustStartOneFrameBack = reader.Value;
break;
case "Settings/AdjustStartOneFrameForward":
language.Settings.AdjustStartOneFrameForward = reader.Value;
break;
case "Settings/AdjustEndOneFrameBack":
language.Settings.AdjustEndOneFrameBack = reader.Value;
break;
case "Settings/AdjustEndOneFrameForward":
language.Settings.AdjustEndOneFrameForward = reader.Value;
break;
case "Settings/AdjustSetStartTimeKeepDuration":
language.Settings.AdjustSetStartTimeKeepDuration = reader.Value;
break;

View File

@ -2173,6 +2173,10 @@
public string AdjustStartXMsForward { get; set; }
public string AdjustEndXMsBack { get; set; }
public string AdjustEndXMsForward { get; set; }
public string AdjustStartOneFrameBack { get; set; }
public string AdjustStartOneFrameForward { get; set; }
public string AdjustEndOneFrameBack { get; set; }
public string AdjustEndOneFrameForward { get; set; }
public string AdjustSetStartTimeKeepDuration { get; set; }
public string AdjustSetEndAndOffsetTheRest { get; set; }
public string AdjustSetEndAndOffsetTheRestAndGoToNext { get; set; }

View File

@ -1622,6 +1622,10 @@ $HorzAlign = Center
public string MainAdjustStartXMsForward { get; set; }
public string MainAdjustEndXMsBack { get; set; }
public string MainAdjustEndXMsForward { get; set; }
public string MoveStartOneFrameBack { get; set; }
public string MoveStartOneFrameForward { get; set; }
public string MoveEndOneFrameBack { get; set; }
public string MoveEndOneFrameForward { get; set; }
public string MainAdjustExtendToNextSceneChange { get; set; }
public string MainAdjustExtendToPreviousSceneChange { get; set; }
public string MainAdjustExtendToNextSubtitle { get; set; }
@ -6332,6 +6336,30 @@ $HorzAlign = Center
settings.Shortcuts.MainAdjustEndXMsForward = subNode.InnerText;
}
subNode = node.SelectSingleNode("MoveStartOneFrameBack");
if (subNode != null)
{
settings.Shortcuts.MoveStartOneFrameBack = subNode.InnerText;
}
subNode = node.SelectSingleNode("MoveStartOneFrameForward");
if (subNode != null)
{
settings.Shortcuts.MoveStartOneFrameForward = subNode.InnerText;
}
subNode = node.SelectSingleNode("MoveEndOneFrameBack");
if (subNode != null)
{
settings.Shortcuts.MoveEndOneFrameBack = subNode.InnerText;
}
subNode = node.SelectSingleNode("MoveEndOneFrameForward");
if (subNode != null)
{
settings.Shortcuts.MoveEndOneFrameForward = subNode.InnerText;
}
subNode = node.SelectSingleNode("MainAdjustExtendToNextSceneChange");
if (subNode != null)
{
@ -7527,6 +7555,10 @@ $HorzAlign = Center
textWriter.WriteElementString("MainAdjustStartXMsForward", settings.Shortcuts.MainAdjustStartXMsForward);
textWriter.WriteElementString("MainAdjustEndXMsBack", settings.Shortcuts.MainAdjustEndXMsBack);
textWriter.WriteElementString("MainAdjustEndXMsForward", settings.Shortcuts.MainAdjustEndXMsForward);
textWriter.WriteElementString("MoveStartOneFrameBack", settings.Shortcuts.MoveStartOneFrameBack);
textWriter.WriteElementString("MoveStartOneFrameForward", settings.Shortcuts.MoveStartOneFrameForward);
textWriter.WriteElementString("MoveEndOneFrameBack", settings.Shortcuts.MoveEndOneFrameBack);
textWriter.WriteElementString("MoveEndOneFrameForward", settings.Shortcuts.MoveEndOneFrameForward);
textWriter.WriteElementString("MainAdjustExtendToNextSceneChange", settings.Shortcuts.MainAdjustExtendToNextSceneChange);
textWriter.WriteElementString("MainAdjustExtendToPreviousSceneChange", settings.Shortcuts.MainAdjustExtendToPreviousSceneChange);
textWriter.WriteElementString("MainAdjustExtendToNextSubtitle", settings.Shortcuts.MainAdjustExtendToNextSubtitle);

View File

@ -14699,6 +14699,25 @@ namespace Nikse.SubtitleEdit.Forms
MoveEndCurrent(Configuration.Settings.Tools.MoveStartEndMs);
e.SuppressKeyPress = true;
}
else if (_shortcuts.MainAdjustMoveStartOneFrameBack == e.KeyData)
{
MoveStartCurrent(-(int)Math.Round(1000.0 / CurrentFrameRate));
e.SuppressKeyPress = true;
}
else if (_shortcuts.MainAdjustMoveStartOneFrameForward == e.KeyData)
{
MoveStartCurrent((int)Math.Round(1000.0 / CurrentFrameRate));
}
else if (_shortcuts.MainAdjustMoveEndOneFrameBack == e.KeyData)
{
MoveEndCurrent(-(int)Math.Round(1000.0 / CurrentFrameRate));
}
else if (_shortcuts.MainAdjustMoveEndOneFrameForward == e.KeyData)
{
MoveEndCurrent((int)Math.Round(1000.0 / CurrentFrameRate));
}
else if (mediaPlayer.VideoPlayer != null && (_shortcuts.MainAdjustSetStartAndOffsetTheRest == e.KeyData || _shortcuts.MainAdjustSetStartAndOffsetTheRest2 == e.KeyData))
{
ButtonSetStartAndOffsetRestClick(null, null);
@ -15410,6 +15429,17 @@ namespace Nikse.SubtitleEdit.Forms
return;
}
// snap to scene change
if (Configuration.Settings.VideoControls.WaveformSnapToSceneChanges && audioVisualizer?.SceneChanges?.Count > 0)
{
var seconds = (p.StartTime.TotalMilliseconds + ms) / 1000.0;
var closest = audioVisualizer.SceneChanges.OrderBy(sc => Math.Abs(seconds - sc)).First() * 1000.0;
if (Math.Abs(p.StartTime.TotalMilliseconds + ms - closest) < CurrentFrameRate * 0.9)
{
ms = (int)Math.Round(closest - p.StartTime.TotalMilliseconds);
}
}
if (ms > 0)
{
if (p.StartTime.TotalMilliseconds + ms + 100 > p.EndTime.TotalMilliseconds)
@ -15472,6 +15502,22 @@ namespace Nikse.SubtitleEdit.Forms
}
var p = _subtitle.GetParagraphOrDefault(i);
if (p == null)
{
return;
}
// snap to scene change
if (Configuration.Settings.VideoControls.WaveformSnapToSceneChanges && audioVisualizer?.SceneChanges?.Count > 0)
{
var seconds = (p.EndTime.TotalMilliseconds + ms) / 1000.0;
var closest = audioVisualizer.SceneChanges.OrderBy(sc => Math.Abs(seconds - sc)).First() * 1000.0;
if (Math.Abs(p.EndTime.TotalMilliseconds + ms - closest) < CurrentFrameRate * 0.9)
{
ms = (int)Math.Round(closest - p.EndTime.TotalMilliseconds);
}
}
if (ms > 0)
{
if (p.Duration.TotalMilliseconds + ms > Configuration.Settings.General.SubtitleMaximumDisplayMilliseconds)

View File

@ -1335,6 +1335,10 @@ namespace Nikse.SubtitleEdit.Forms
AddNode(createAndAdjustNode, string.Format(language.AdjustStartXMsForward, Configuration.Settings.Tools.MoveStartEndMs), nameof(Configuration.Settings.Shortcuts.MainAdjustStartXMsForward));
AddNode(createAndAdjustNode, string.Format(language.AdjustEndXMsBack, Configuration.Settings.Tools.MoveStartEndMs), nameof(Configuration.Settings.Shortcuts.MainAdjustEndXMsBack));
AddNode(createAndAdjustNode, string.Format(language.AdjustEndXMsForward, Configuration.Settings.Tools.MoveStartEndMs), nameof(Configuration.Settings.Shortcuts.MainAdjustEndXMsForward));
AddNode(createAndAdjustNode, language.AdjustStartOneFrameBack, nameof(Configuration.Settings.Shortcuts.MoveStartOneFrameBack));
AddNode(createAndAdjustNode, language.AdjustStartOneFrameForward, nameof(Configuration.Settings.Shortcuts.MoveStartOneFrameForward));
AddNode(createAndAdjustNode, language.AdjustEndOneFrameBack, nameof(Configuration.Settings.Shortcuts.MoveEndOneFrameBack));
AddNode(createAndAdjustNode, language.AdjustEndOneFrameForward, nameof(Configuration.Settings.Shortcuts.MoveEndOneFrameForward));
AddNode(createAndAdjustNode, language.RecalculateDurationOfCurrentSubtitle, nameof(Configuration.Settings.Shortcuts.GeneralAutoCalcCurrentDuration));
AddNode(createAndAdjustNode, language.AdjustExtendToNextSceneChange, nameof(Configuration.Settings.Shortcuts.MainAdjustExtendToNextSceneChange));
AddNode(createAndAdjustNode, language.AdjustExtendToPreviousSceneChange, nameof(Configuration.Settings.Shortcuts.MainAdjustExtendToPreviousSceneChange));
@ -1841,7 +1845,7 @@ namespace Nikse.SubtitleEdit.Forms
Configuration.Settings.VideoControls.WaveformColor = panelWaveformColor.BackColor;
Configuration.Settings.VideoControls.WaveformBackgroundColor = panelWaveformBackgroundColor.BackColor;
Configuration.Settings.VideoControls.WaveformTextColor = panelWaveformTextColor.BackColor;
Configuration.Settings.VideoControls.WaveformCursorColor = panelWaveformCursorColor.BackColor ;
Configuration.Settings.VideoControls.WaveformCursorColor = panelWaveformCursorColor.BackColor;
Configuration.Settings.VideoControls.GenerateSpectrogram = checkBoxGenerateSpectrogram.Checked;
Configuration.Settings.VideoControls.SpectrogramAppearance = comboBoxSpectrogramAppearance.SelectedIndex == 0 ? "OneColorGradient" : "Classic";

View File

@ -98,6 +98,10 @@ namespace Nikse.SubtitleEdit.Logic
public Keys MainAdjustAdjustStartXMsForward { get; set; }
public Keys MainAdjustAdjustEndXMsBack { get; set; }
public Keys MainAdjustAdjustEndXMsForward { get; set; }
public Keys MainAdjustMoveStartOneFrameBack { get; set; }
public Keys MainAdjustMoveStartOneFrameForward { get; set; }
public Keys MainAdjustMoveEndOneFrameBack { get; set; }
public Keys MainAdjustMoveEndOneFrameForward { get; set; }
public Keys MainAdjustExtendToNextSceneChange { get; set; }
public Keys MainAdjustExtendToPreviousSceneChange { get; set; }
public Keys MainAdjustExtendToNextSubtitle { get; set; }
@ -264,6 +268,10 @@ namespace Nikse.SubtitleEdit.Logic
MainAdjustAdjustStartXMsForward = UiUtil.GetKeys(Configuration.Settings.Shortcuts.MainAdjustStartXMsForward);
MainAdjustAdjustEndXMsBack = UiUtil.GetKeys(Configuration.Settings.Shortcuts.MainAdjustEndXMsBack);
MainAdjustAdjustEndXMsForward = UiUtil.GetKeys(Configuration.Settings.Shortcuts.MainAdjustEndXMsForward);
MainAdjustMoveStartOneFrameBack = UiUtil.GetKeys(Configuration.Settings.Shortcuts.MoveStartOneFrameBack);
MainAdjustMoveStartOneFrameForward = UiUtil.GetKeys(Configuration.Settings.Shortcuts.MoveStartOneFrameForward);
MainAdjustMoveEndOneFrameBack = UiUtil.GetKeys(Configuration.Settings.Shortcuts.MoveEndOneFrameBack);
MainAdjustMoveEndOneFrameForward = UiUtil.GetKeys(Configuration.Settings.Shortcuts.MoveEndOneFrameForward);
MainAdjustExtendToNextSceneChange = UiUtil.GetKeys(Configuration.Settings.Shortcuts.MainAdjustExtendToNextSceneChange);
MainAdjustExtendToPreviousSceneChange = UiUtil.GetKeys(Configuration.Settings.Shortcuts.MainAdjustExtendToPreviousSceneChange);
MainAdjustExtendToNextSubtitle = UiUtil.GetKeys(Configuration.Settings.Shortcuts.MainAdjustExtendToNextSubtitle);