diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.Editing.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.Editing.cs index bead4dccb7..533d0bacec 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.Editing.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.Editing.cs @@ -108,11 +108,15 @@ namespace BizHawk.Client.Common InvalidateAfter(frame); } - public void InsertEmptyFrame(int frame) + public void InsertEmptyFrame(int frame, int count = 1) { var lg = LogGeneratorInstance(); lg.SetSource(Global.MovieSession.MovieControllerInstance()); - _log.Insert(frame, lg.EmptyEntry); + + for (int i = 0; i < count; i++) + { + _log.Insert(frame, lg.EmptyEntry); + } Changes = true; InvalidateAfter(frame - 1); diff --git a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj index 8795a0d8ce..db40540529 100644 --- a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj +++ b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj @@ -823,6 +823,12 @@ BookmarksBranchesBox.cs + + Form + + + FramesPrompt.cs + Form @@ -1258,6 +1264,9 @@ BookmarksBranchesBox.cs + + FramesPrompt.cs + GreenzoneSettings.cs diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/FramesPrompt.Designer.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/FramesPrompt.Designer.cs new file mode 100644 index 0000000000..a79e0c2c60 --- /dev/null +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/FramesPrompt.Designer.cs @@ -0,0 +1,111 @@ +namespace BizHawk.Client.EmuHawk +{ + partial class FramesPrompt + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.OkBtn = new System.Windows.Forms.Button(); + this.CancelBtn = new System.Windows.Forms.Button(); + this.NumFramesBox = new BizHawk.Client.EmuHawk.WatchValueBox(); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // OkBtn + // + this.OkBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.OkBtn.Location = new System.Drawing.Point(67, 47); + this.OkBtn.Name = "OkBtn"; + this.OkBtn.Size = new System.Drawing.Size(60, 23); + this.OkBtn.TabIndex = 1; + this.OkBtn.Text = "&Ok"; + this.OkBtn.UseVisualStyleBackColor = true; + this.OkBtn.Click += new System.EventHandler(this.OkBtn_Click); + // + // CancelBtn + // + this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBtn.Location = new System.Drawing.Point(134, 47); + this.CancelBtn.Name = "CancelBtn"; + this.CancelBtn.Size = new System.Drawing.Size(60, 23); + this.CancelBtn.TabIndex = 2; + this.CancelBtn.Text = "&Cancel"; + this.CancelBtn.UseVisualStyleBackColor = true; + this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); + // + // NumFramesBox + // + this.NumFramesBox.ByteSize = BizHawk.Client.Common.Watch.WatchSize.Byte; + this.NumFramesBox.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper; + this.NumFramesBox.Location = new System.Drawing.Point(138, 16); + this.NumFramesBox.MaxLength = 3; + this.NumFramesBox.Name = "NumFramesBox"; + this.NumFramesBox.Nullable = false; + this.NumFramesBox.Size = new System.Drawing.Size(51, 20); + this.NumFramesBox.TabIndex = 3; + this.NumFramesBox.Text = "1"; + this.NumFramesBox.Type = BizHawk.Client.Common.Watch.DisplayType.Unsigned; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 20); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(120, 13); + this.label1.TabIndex = 4; + this.label1.Text = "Insert number of frames:"; + // + // FramesPrompt + // + this.AcceptButton = this.OkBtn; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.CancelBtn; + this.ClientSize = new System.Drawing.Size(206, 82); + this.Controls.Add(this.label1); + this.Controls.Add(this.NumFramesBox); + this.Controls.Add(this.CancelBtn); + this.Controls.Add(this.OkBtn); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Name = "FramesPrompt"; + this.ShowIcon = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Insert Frames"; + this.Load += new System.EventHandler(this.FramesPrompt_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button OkBtn; + private System.Windows.Forms.Button CancelBtn; + private WatchValueBox NumFramesBox; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/FramesPrompt.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/FramesPrompt.cs new file mode 100644 index 0000000000..0d646bbbad --- /dev/null +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/FramesPrompt.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace BizHawk.Client.EmuHawk +{ + public partial class FramesPrompt : Form + { + public FramesPrompt() + { + InitializeComponent(); + } + + public int Frames + { + get { return NumFramesBox.ToRawInt() ?? 0; } + } + + private void FramesPrompt_Load(object sender, EventArgs e) + { + NumFramesBox.Select(); + } + + private void OkBtn_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.OK; + Close(); + } + + private void CancelBtn_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + Close(); + } + } +} diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/FramesPrompt.resx b/BizHawk.Client.EmuHawk/tools/TAStudio/FramesPrompt.resx new file mode 100644 index 0000000000..29dcb1b3a3 --- /dev/null +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/FramesPrompt.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs index 86c3639077..b9bb162466 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Designer.cs @@ -394,11 +394,11 @@ namespace BizHawk.Client.EmuHawk // // InsertNumFramesMenuItem // - this.InsertNumFramesMenuItem.Enabled = false; this.InsertNumFramesMenuItem.Name = "InsertNumFramesMenuItem"; this.InsertNumFramesMenuItem.ShortcutKeyDisplayString = "Ins"; this.InsertNumFramesMenuItem.Size = new System.Drawing.Size(240, 22); this.InsertNumFramesMenuItem.Text = "Insert # of Frames"; + this.InsertNumFramesMenuItem.Click += new System.EventHandler(this.InsertNumFramesMenuItem_Click); // // toolStripSeparator6 // diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs index 7723ba6fc0..85875687d1 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs @@ -417,21 +417,24 @@ namespace BizHawk.Client.EmuHawk private void CopyMenuItem_Click(object sender, EventArgs e) { - _tasClipboard.Clear(); - var list = TasView.SelectedIndices; - var sb = new StringBuilder(); - for (var i = 0; i < list.Count; i++) + if (SelectedIndices.Any()) { - var input = _tas.GetInputState(list[i]); - _tasClipboard.Add(new TasClipboardEntry(list[i], input)); - var lg = _tas.LogGeneratorInstance(); - lg.SetSource(input); - sb.AppendLine(lg.GenerateLogEntry()); + _tasClipboard.Clear(); + var list = TasView.SelectedIndices; + var sb = new StringBuilder(); + for (var i = 0; i < list.Count; i++) + { + var input = _tas.GetInputState(list[i]); + _tasClipboard.Add(new TasClipboardEntry(list[i], input)); + var lg = _tas.LogGeneratorInstance(); + lg.SetSource(input); + sb.AppendLine(lg.GenerateLogEntry()); + } + + Clipboard.SetDataObject(sb.ToString()); + + SetSplicer(); } - - Clipboard.SetDataObject(sb.ToString()); - - SetSplicer(); } private void PasteMenuItem_Click(object sender, EventArgs e) @@ -441,44 +444,43 @@ namespace BizHawk.Client.EmuHawk if (_tasClipboard.Any()) { _tas.CopyOverInput(FirstSelectedIndex, _tasClipboard.Select(x => x.ControllerState)); + RefreshDialog(); } - - RefreshDialog(); } private void PasteInsertMenuItem_Click(object sender, EventArgs e) { - // TODO: if highlighting 2 rows and pasting 3, only paste 2 of them - // FCEUX Taseditor does't do this, but I think it is the expected behavior in editor programs if (_tasClipboard.Any()) { _tas.InsertInput(FirstSelectedIndex, _tasClipboard.Select(x => x.ControllerState)); + RefreshDialog(); } - - RefreshDialog(); } private void CutMenuItem_Click(object sender, EventArgs e) { - _tasClipboard.Clear(); - var list = SelectedIndices.ToArray(); - var sb = new StringBuilder(); - for (var i = 0; i < list.Length; i++) + if (SelectedIndices.Any()) { - var input = _tas.GetInputState(i); - _tasClipboard.Add(new TasClipboardEntry(list[i], input)); - var lg = _tas.LogGeneratorInstance(); - lg.SetSource(input); - sb.AppendLine(lg.GenerateLogEntry()); + _tasClipboard.Clear(); + var list = SelectedIndices.ToArray(); + var sb = new StringBuilder(); + for (var i = 0; i < list.Length; i++) + { + var input = _tas.GetInputState(i); + _tasClipboard.Add(new TasClipboardEntry(list[i], input)); + var lg = _tas.LogGeneratorInstance(); + lg.SetSource(input); + sb.AppendLine(lg.GenerateLogEntry()); + } + + Clipboard.SetDataObject(sb.ToString()); + + _tas.RemoveFrames(list); + + SetSplicer(); + TasView.DeselectAll(); + RefreshDialog(); } - - Clipboard.SetDataObject(sb.ToString()); - - _tas.RemoveFrames(list); - - SetSplicer(); - TasView.DeselectAll(); - RefreshDialog(); } private void ClearMenuItem_Click(object sender, EventArgs e) @@ -493,39 +495,66 @@ namespace BizHawk.Client.EmuHawk private void DeleteFramesMenuItem_Click(object sender, EventArgs e) { - _tasClipboard.Clear(); - _tas.RemoveFrames(SelectedIndices.ToArray()); - SetSplicer(); - TasView.DeselectAll(); - RefreshDialog(); + if (SelectedIndices.Any()) + { + _tasClipboard.Clear(); + _tas.RemoveFrames(SelectedIndices.ToArray()); + SetSplicer(); + TasView.DeselectAll(); + RefreshDialog(); + } } private void CloneMenuItem_Click(object sender, EventArgs e) { - var framesToInsert = SelectedIndices.ToList(); - var insertionFrame = LastSelectedIndex + 1; - var inputLog = new List(); - - foreach (var frame in framesToInsert) + if (SelectedIndices.Any()) { - inputLog.Add(_tas.GetInput(frame)); + var framesToInsert = SelectedIndices.ToList(); + var insertionFrame = LastSelectedIndex + 1; + var inputLog = new List(); + + foreach (var frame in framesToInsert) + { + inputLog.Add(_tas.GetInput(frame)); + } + + _tas.InsertInput(insertionFrame, inputLog); + + RefreshDialog(); } - - _tas.InsertInput(insertionFrame, inputLog); - - RefreshDialog(); } private void InsertFrameMenuItem_Click(object sender, EventArgs e) { - _tas.InsertEmptyFrame(LastSelectedIndex + 1); + if (SelectedIndices.Any()) + { + _tas.InsertEmptyFrame(LastSelectedIndex + 1); + RefreshDialog(); + } + } + + private void InsertNumFramesMenuItem_Click(object sender, EventArgs e) + { + if (SelectedIndices.Any()) + { + var framesPrompt = new FramesPrompt(); + var result = framesPrompt.ShowDialog(); + if (result == DialogResult.OK) + { + _tas.InsertEmptyFrame(LastSelectedIndex + 1, framesPrompt.Frames); + } + } + RefreshDialog(); } private void TruncateMenuItem_Click(object sender, EventArgs e) { - _tas.Truncate(LastSelectedIndex + 1); - RefreshDialog(); + if (SelectedIndices.Any()) + { + _tas.Truncate(LastSelectedIndex + 1); + RefreshDialog(); + } }