コード例 #1
0
        public void OnVideoSetSubtitleStartEndButtonRelease(object o, ButtonReleaseEventArgs args)
        {
            if (args.Event.Button != 1)
            {
                return;
            }

            if (Base.TimingMode == TimingMode.Times)
            {
                TimeSpan time = Base.Ui.Video.Position.CurrentTime;
                if (Base.Ui.Video.IsStatePlaying && Base.Config.VideoApplyReactionDelay)
                {
                    time -= TimeSpan.FromMilliseconds(Base.Config.VideoReactionDelay);
                }
                Base.CommandManager.Execute(new VideoSetSubtitleEndCommand(time));
                Base.Ui.View.SelectNextSubtitle();
            }
            else
            {
                int frames = Base.Ui.Video.Position.CurrentFrames;
                if (Base.Ui.Video.IsStatePlaying && Base.Config.VideoApplyReactionDelay)
                {
                    frames -= (int)TimingUtil.TimeMillisecondsToFrames(Base.Config.VideoReactionDelay, Base.Ui.Video.FrameRate);
                }
                Base.CommandManager.Execute(new VideoSetSubtitleEndCommand(frames));
                Base.Ui.View.SelectNextSubtitle();
            }
        }
コード例 #2
0
ファイル: Util.cs プロジェクト: sahwar/gnome-subtitles
        /// <summary>
        /// Note: Should be either used to set the first timing mode or to switch between modes.
        /// Should not be used if the timing mode is unchanged, as events will be assigned again.
        /// </summary>
        /// <param name="spinButton">Spin button.</param>
        /// <param name="timingMode">Timing mode.</param>
        /// <param name="frameRateForConversion">Frame rate for conversion if the spin button has a value. Use 0 for no conversion.</param>
        public static void SetSpinButtonTimingMode(SpinButton spinButton, TimingMode timingMode, float frameRateForConversion)
        {
            bool convertValue = (spinButton.ValueAsInt > 0) && (frameRateForConversion > float.Epsilon);
            int  oldValue     = spinButton.ValueAsInt;

            //Switching to Frames mode

            if (timingMode == TimingMode.Frames)
            {
                spinButton.Numeric = true;
                spinButton.Input  -= OnTimeInput;
                spinButton.Output -= OnTimeOutput;

                //Even if the value isn't converted, we need to set the old one in order for the input to be shown with the new format
                spinButton.Value = (convertValue ? TimingUtil.TimeMillisecondsToFrames(oldValue, frameRateForConversion) : oldValue);

                return;
            }

            //Switching to Times mode

            spinButton.Numeric = false;
            spinButton.Input  += OnTimeInput;
            spinButton.Output += OnTimeOutput;

            //Even if the value isn't converted, we need to set the old one in order for the input to be shown with the new format
            spinButton.Value = (convertValue ? TimingUtil.FramesToTime(oldValue, frameRateForConversion).TotalMilliseconds : oldValue);
        }
コード例 #3
0
 public void OnVideoSetSubtitleStart(object o, EventArgs args)
 {
     if (Base.TimingMode == TimingMode.Times)
     {
         TimeSpan time = Base.Ui.Video.Position.CurrentTime;
         if (Base.Ui.Video.IsStatePlaying && Base.Config.VideoApplyReactionDelay)
         {
             time -= TimeSpan.FromMilliseconds(Base.Config.VideoReactionDelay);
         }
         Base.CommandManager.Execute(new VideoSetSubtitleStartCommand(time));
     }
     else
     {
         int frames = Base.Ui.Video.Position.CurrentFrames;
         if (Base.Ui.Video.IsStatePlaying && Base.Config.VideoApplyReactionDelay)
         {
             frames -= (int)TimingUtil.TimeMillisecondsToFrames(Base.Config.VideoReactionDelay, Base.Ui.Video.FrameRate);
         }
         Base.CommandManager.Execute(new VideoSetSubtitleStartCommand(frames));
     }
 }
コード例 #4
0
        /* Private members */

        private string FieldEvaluator(Match match)
        {
            Group  fieldGroup = match.Groups["Field"];
            string field      = fieldGroup.Value;

            switch (field)
            {
            case "StartFrame":
                int startFrame = subtitle.Frames.Start;
                return(FormatedField(startFrame, match));

            case "StartElapsedFrames":
                int previousFrames     = (previousSubtitle == null ? 0 : previousSubtitle.Frames.End);
                int startElapsedFrames = subtitle.Frames.Start - previousFrames;
                return(FormatedField(startElapsedFrames, match));

            case "EndFrame":
                int endFrame = subtitle.Frames.End;
                return(FormatedField(endFrame, match));

            case "EndElapsedFrames":
                int endElapsedFrames = subtitle.Frames.Duration;
                return(FormatedField(endElapsedFrames, match));

            case "StartHours":
                int startHours = subtitle.Times.Start.Hours;
                return(FormatedField(startHours, 2, match));

            case "StartMinutes":
                int startMinutes = subtitle.Times.Start.Minutes;
                return(FormatedField(startMinutes, 2, match));

            case "StartSeconds":
                int startSeconds = subtitle.Times.Start.Seconds;
                return(FormatedField(startSeconds, 2, match));

            case "StartDeciseconds":
                int startDeciseconds = DivideAndRound(subtitle.Times.Start.Milliseconds, 100);
                return(FormatedField(startDeciseconds, 1, match));

            case "StartTotalDeciseconds":
                int startTotalDeciseconds = DivideAndRound((int)subtitle.Times.Start.TotalMilliseconds, 100);
                return(startTotalDeciseconds.ToString());

            case "StartCentiseconds":
                int startCentiseconds = DivideAndRound(subtitle.Times.Start.Milliseconds, 10);
                return(FormatedField(startCentiseconds, 2, match));

            case "StartMilliseconds":
                int startMilliseconds = subtitle.Times.Start.Milliseconds;
                return(FormatedField(startMilliseconds, 3, match));

            case "StartMillisecondsAsFrames":
                int startMillisecondsAsFrames = (int)TimingUtil.TimeMillisecondsToFrames(subtitle.Times.Start.Milliseconds, this.subtitleProperties.CurrentFrameRate);
                return(FormatedField(startMillisecondsAsFrames, 2, match));

            case "StartMillisecondsAsFramesPAL":
                int startMillisecondsAsFramesPAL = (int)TimingUtil.TimeMillisecondsToFrames(subtitle.Times.Start.Milliseconds, 25);
                return(FormatedField(startMillisecondsAsFramesPAL, 2, match));

            case "StartMillisecondsAsFramesNTSC":
                int startMillisecondsAsFramesNTSC = (int)TimingUtil.TimeMillisecondsToFrames(subtitle.Times.Start.Milliseconds, 29.97F);
                return(FormatedField(startMillisecondsAsFramesNTSC, 2, match));

            case "EndMillisecondsAsFrames":
                int endMillisecondsAsFrames = (int)TimingUtil.TimeMillisecondsToFrames(subtitle.Times.End.Milliseconds, this.subtitleProperties.CurrentFrameRate);
                return(FormatedField(endMillisecondsAsFrames, 2, match));

            case "EndMillisecondsAsFramesPAL":
                int endMillisecondsAsFramesPAL = (int)TimingUtil.TimeMillisecondsToFrames(subtitle.Times.End.Milliseconds, 25);
                return(FormatedField(endMillisecondsAsFramesPAL, 2, match));

            case "EndMillisecondsAsFramesNTSC":
                int endMillisecondsAsFramesNTSC = (int)TimingUtil.TimeMillisecondsToFrames(subtitle.Times.End.Milliseconds, 29.97F);
                return(FormatedField(endMillisecondsAsFramesNTSC, 2, match));

            case "StartElapsedTime":
                TimeSpan previousTime     = (previousSubtitle == null ? TimeSpan.Zero : previousSubtitle.Times.End);
                TimeSpan startElapsedTime = subtitle.Times.Start - previousTime;
                return(FormatedField(startElapsedTime.TotalSeconds));

            case "EndHours":
                int endHours = subtitle.Times.End.Hours;
                return(FormatedField(endHours, 2, match));

            case "EndMinutes":
                int endMinutes = subtitle.Times.End.Minutes;
                return(FormatedField(endMinutes, 2, match));

            case "EndSeconds":
                int endSeconds = subtitle.Times.End.Seconds;
                return(FormatedField(endSeconds, 2, match));

            case "EndDeciseconds":
                int endDeciseconds = DivideAndRound(subtitle.Times.End.Milliseconds, 100);
                return(FormatedField(endDeciseconds, 1, match));

            case "EndTotalDeciseconds":
                int endTotalDeciseconds = DivideAndRound((int)subtitle.Times.End.TotalMilliseconds, 100);
                return(endTotalDeciseconds.ToString());

            case "EndCentiseconds":
                int endCentiseconds = DivideAndRound(subtitle.Times.End.Milliseconds, 10);
                return(FormatedField(endCentiseconds, 2, match));

            case "EndMilliseconds":
                int endMilliseconds = subtitle.Times.End.Milliseconds;
                return(FormatedField(endMilliseconds, 3, match));

            case "EndElapsedTime":
                TimeSpan endElapsedTime = subtitle.Times.Duration;
                return(FormatedField(endElapsedTime.TotalSeconds));

            case "Text":
                SubtitleText subtitleText = (textType == SubtitleTextType.Text ? subtitle.Text : subtitle.Translation);
                string       text         = subtitleText.GetTrimLines(format.LineBreak);
                return(text.ToString());

            case "Style":
                string style = format.StyleToString(subtitle.Style);
                return(style.ToString());

            case "EndOfStyle":
                string endOfStyle = format.EndOfStyleToString(subtitle.Style);
                return(endOfStyle.ToString());

            case "SubtitleNumber":
                return(FormatedField(subtitleNumber, match));

            default:
                return(match.Value);
            }
        }