2013-12-15 19:16:52 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
2014-07-09 16:35:39 +00:00
|
|
|
|
using BizHawk.Client.Common;
|
2014-12-21 18:25:04 +00:00
|
|
|
|
using BizHawk.Emulation.Common;
|
2015-11-25 20:28:46 +00:00
|
|
|
|
using BizHawk.Client.EmuHawk.WinFormExtensions;
|
2014-07-09 16:35:39 +00:00
|
|
|
|
|
2013-12-16 03:23:28 +00:00
|
|
|
|
namespace BizHawk.Client.EmuHawk
|
2013-12-15 19:16:52 +00:00
|
|
|
|
{
|
|
|
|
|
public partial class MarkerControl : UserControl
|
|
|
|
|
{
|
2014-07-16 02:20:14 +00:00
|
|
|
|
public TAStudio Tastudio { get; set; }
|
2014-12-21 18:25:04 +00:00
|
|
|
|
public IEmulator Emulator { get; set; }
|
2015-11-25 20:28:46 +00:00
|
|
|
|
public TasMovieMarkerList Markers { get { return Tastudio.CurrentTasMovie.Markers; } }
|
2014-07-16 02:17:19 +00:00
|
|
|
|
|
2014-07-16 02:20:14 +00:00
|
|
|
|
public MarkerControl()
|
2013-12-15 19:16:52 +00:00
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
2014-09-18 00:23:40 +00:00
|
|
|
|
|
2014-10-12 16:37:45 +00:00
|
|
|
|
MarkerView.AllColumns.AddRange(new InputRoll.RollColumn[]
|
2014-08-23 23:40:01 +00:00
|
|
|
|
{
|
2014-09-18 00:23:40 +00:00
|
|
|
|
new InputRoll.RollColumn
|
|
|
|
|
{
|
|
|
|
|
Name = "FrameColumn",
|
|
|
|
|
Text = "Frame",
|
2014-10-18 16:22:24 +00:00
|
|
|
|
Width = 52
|
2014-09-18 00:23:40 +00:00
|
|
|
|
},
|
|
|
|
|
new InputRoll.RollColumn
|
|
|
|
|
{
|
|
|
|
|
Name = "LabelColumn",
|
2014-10-18 16:22:24 +00:00
|
|
|
|
Text = "",
|
2015-07-18 20:10:56 +00:00
|
|
|
|
Width = 125
|
2014-09-18 00:23:40 +00:00
|
|
|
|
}
|
|
|
|
|
});
|
2014-08-23 23:40:01 +00:00
|
|
|
|
|
2014-07-13 14:13:20 +00:00
|
|
|
|
MarkerView.QueryItemBkColor += MarkerView_QueryItemBkColor;
|
|
|
|
|
MarkerView.QueryItemText += MarkerView_QueryItemText;
|
2013-12-15 19:16:52 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void MarkerControl_Load(object sender, EventArgs e)
|
|
|
|
|
{
|
2015-02-25 21:17:50 +00:00
|
|
|
|
|
2013-12-15 19:16:52 +00:00
|
|
|
|
}
|
2014-07-13 14:13:20 +00:00
|
|
|
|
|
2014-10-25 13:41:23 +00:00
|
|
|
|
public InputRoll MarkerInputRoll { get { return MarkerView; } }
|
|
|
|
|
|
2014-10-13 19:30:59 +00:00
|
|
|
|
private void MarkerView_QueryItemBkColor(int index, InputRoll.RollColumn column, ref Color color)
|
2014-07-13 14:13:20 +00:00
|
|
|
|
{
|
2016-12-14 03:37:06 +00:00
|
|
|
|
var prev = Markers.PreviousOrCurrent(0);
|
2014-07-15 23:43:17 +00:00
|
|
|
|
|
2016-12-14 03:37:06 +00:00
|
|
|
|
if (this.Emulator!=null) //Temp fix
|
|
|
|
|
prev = Markers.PreviousOrCurrent(Emulator.Frame);
|
|
|
|
|
|
2015-11-25 20:28:46 +00:00
|
|
|
|
if (prev != null && index == Markers.IndexOf(prev))
|
2014-07-15 23:43:17 +00:00
|
|
|
|
{
|
2014-07-21 02:23:47 +00:00
|
|
|
|
color = TAStudio.Marker_FrameCol;
|
|
|
|
|
}
|
2015-11-25 20:28:46 +00:00
|
|
|
|
else if (index < Markers.Count)
|
2014-07-21 02:23:47 +00:00
|
|
|
|
{
|
2015-11-25 20:28:46 +00:00
|
|
|
|
var marker = Markers[index];
|
2014-10-20 19:04:59 +00:00
|
|
|
|
var record = Tastudio.CurrentTasMovie[marker.Frame];
|
2014-10-18 16:34:41 +00:00
|
|
|
|
|
|
|
|
|
if (record.Lagged.HasValue)
|
2014-07-15 23:43:17 +00:00
|
|
|
|
{
|
2014-07-21 02:23:47 +00:00
|
|
|
|
if (record.Lagged.Value)
|
|
|
|
|
{
|
2014-10-13 19:30:59 +00:00
|
|
|
|
color = column.Name == "FrameColumn" ? TAStudio.LagZone_FrameCol : TAStudio.LagZone_InputLog;
|
2014-07-21 02:23:47 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2014-10-13 19:30:59 +00:00
|
|
|
|
color = column.Name == "LabelColumn" ? TAStudio.GreenZone_FrameCol : TAStudio.GreenZone_InputLog;
|
2014-07-21 02:23:47 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
color = Color.White;
|
2014-07-15 23:43:17 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2015-03-01 05:47:32 +00:00
|
|
|
|
else
|
|
|
|
|
color = Color.White;
|
2014-07-13 14:13:20 +00:00
|
|
|
|
}
|
|
|
|
|
|
2015-08-24 22:30:45 +00:00
|
|
|
|
private void MarkerView_QueryItemText(int index, InputRoll.RollColumn column, out string text, ref int offsetX, ref int offsetY)
|
2014-07-13 14:13:20 +00:00
|
|
|
|
{
|
|
|
|
|
text = "";
|
|
|
|
|
|
2014-10-13 19:10:11 +00:00
|
|
|
|
if (column.Name == "FrameColumn")
|
2014-07-13 14:13:20 +00:00
|
|
|
|
{
|
2015-11-25 20:28:46 +00:00
|
|
|
|
text = Markers[index].Frame.ToString();
|
2014-07-13 14:13:20 +00:00
|
|
|
|
}
|
2014-10-13 19:10:11 +00:00
|
|
|
|
else if (column.Name == "LabelColumn")
|
2014-07-13 14:13:20 +00:00
|
|
|
|
{
|
2015-11-25 20:28:46 +00:00
|
|
|
|
text = Markers[index].Message;
|
2014-07-13 14:13:20 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2014-07-15 23:43:17 +00:00
|
|
|
|
|
2015-11-24 21:10:34 +00:00
|
|
|
|
private void MarkerContextMenu_Opening(object sender, CancelEventArgs e)
|
|
|
|
|
{
|
2015-11-25 20:28:46 +00:00
|
|
|
|
EditMarkerToolStripMenuItem.Enabled =
|
|
|
|
|
RemoveMarkerToolStripMenuItem.Enabled =
|
|
|
|
|
JumpToMarkerToolStripMenuItem.Enabled =
|
2015-11-24 21:10:34 +00:00
|
|
|
|
ScrollToMarkerToolStripMenuItem.Enabled =
|
2015-11-25 20:28:46 +00:00
|
|
|
|
MarkerInputRoll.AnyRowsSelected && MarkerView.SelectedRows.First() != 0;
|
2015-11-24 21:10:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ScrollToMarkerToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (MarkerView.AnyRowsSelected)
|
|
|
|
|
{
|
|
|
|
|
Tastudio.SetVisibleIndex(SelectedMarkerFrame());
|
|
|
|
|
Tastudio.RefreshDialog();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void JumpToMarkerToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (MarkerView.AnyRowsSelected)
|
|
|
|
|
{
|
|
|
|
|
var index = MarkerView.SelectedRows.First();
|
2015-11-25 20:28:46 +00:00
|
|
|
|
var marker = Markers[index];
|
2015-11-24 21:10:34 +00:00
|
|
|
|
Tastudio.GoToFrame(marker.Frame);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void EditMarkerToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (MarkerView.AnyRowsSelected)
|
|
|
|
|
{
|
|
|
|
|
var index = MarkerView.SelectedRows.First();
|
2015-11-25 20:28:46 +00:00
|
|
|
|
var marker = Markers[index];
|
|
|
|
|
EditMarkerPopUp(marker);
|
2015-11-24 21:10:34 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void AddMarkerToolStripMenuItem_Click(object sender, EventArgs e)
|
2014-07-15 23:43:17 +00:00
|
|
|
|
{
|
2015-12-01 16:36:13 +00:00
|
|
|
|
AddMarker();
|
|
|
|
|
MarkerView_SelectedIndexChanged(null, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void AddMarkerWithTextToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
AddMarker(editText: true);
|
2015-11-24 21:10:34 +00:00
|
|
|
|
MarkerView_SelectedIndexChanged(null, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RemoveMarkerToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (MarkerView.AnyRowsSelected)
|
|
|
|
|
{
|
2015-11-25 20:28:46 +00:00
|
|
|
|
SelectedMarkers.ForEach(i => Markers.Remove(i));
|
2015-11-24 21:10:34 +00:00
|
|
|
|
MarkerInputRoll.DeselectAll();
|
|
|
|
|
Tastudio.RefreshDialog();
|
|
|
|
|
MarkerView_SelectedIndexChanged(null, null);
|
|
|
|
|
}
|
2014-07-15 23:43:17 +00:00
|
|
|
|
}
|
|
|
|
|
|
2015-12-01 16:36:13 +00:00
|
|
|
|
public void AddMarker(bool editText = false, int? frame = null)
|
2015-11-25 20:28:46 +00:00
|
|
|
|
{
|
2015-12-01 16:36:13 +00:00
|
|
|
|
// feos: we specify the selected frame if we call this from TasView, otherwise marker should be added to the emulated frame
|
2016-12-04 18:30:51 +00:00
|
|
|
|
var markerFrame = frame ?? Emulator.Frame;
|
2015-11-25 20:28:46 +00:00
|
|
|
|
|
2015-12-01 16:36:13 +00:00
|
|
|
|
if (editText)
|
2015-11-25 20:28:46 +00:00
|
|
|
|
{
|
2015-12-01 16:36:13 +00:00
|
|
|
|
InputPrompt i = new InputPrompt
|
|
|
|
|
{
|
|
|
|
|
Text = "Marker for frame " + markerFrame,
|
|
|
|
|
TextInputType = InputPrompt.InputType.Text,
|
|
|
|
|
Message = "Enter a message",
|
|
|
|
|
InitialValue =
|
|
|
|
|
Markers.IsMarker(markerFrame) ?
|
|
|
|
|
Markers.PreviousOrCurrent(markerFrame).Message :
|
|
|
|
|
""
|
|
|
|
|
};
|
|
|
|
|
var result = i.ShowHawkDialog();
|
|
|
|
|
if (result == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
Markers.Add(new TasMovieMarker(markerFrame, i.PromptText));
|
|
|
|
|
UpdateValues();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Markers.Add(new TasMovieMarker(markerFrame, ""));
|
2015-11-25 20:28:46 +00:00
|
|
|
|
UpdateValues();
|
|
|
|
|
}
|
2016-01-27 09:53:26 +00:00
|
|
|
|
Tastudio.RefreshDialog();
|
2015-11-25 20:28:46 +00:00
|
|
|
|
}
|
|
|
|
|
|
2015-12-02 17:15:12 +00:00
|
|
|
|
public void EditMarkerPopUp(TasMovieMarker marker)
|
2015-11-25 20:28:46 +00:00
|
|
|
|
{
|
|
|
|
|
var markerFrame = marker.Frame;
|
|
|
|
|
InputPrompt i = new InputPrompt
|
|
|
|
|
{
|
|
|
|
|
Text = "Marker for frame " + markerFrame,
|
|
|
|
|
TextInputType = InputPrompt.InputType.Text,
|
|
|
|
|
Message = "Enter a message",
|
|
|
|
|
InitialValue =
|
|
|
|
|
Markers.IsMarker(markerFrame) ?
|
|
|
|
|
Markers.PreviousOrCurrent(markerFrame).Message :
|
|
|
|
|
""
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var result = i.ShowHawkDialog();
|
|
|
|
|
|
|
|
|
|
if (result == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
marker.Message = i.PromptText;
|
|
|
|
|
UpdateValues();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-08-29 00:04:42 +00:00
|
|
|
|
public void UpdateValues()
|
2014-07-15 23:43:17 +00:00
|
|
|
|
{
|
2014-09-28 17:16:00 +00:00
|
|
|
|
if (MarkerView != null &&
|
|
|
|
|
Tastudio != null &&
|
2014-10-20 19:04:59 +00:00
|
|
|
|
Tastudio.CurrentTasMovie != null &&
|
2015-11-25 20:28:46 +00:00
|
|
|
|
Markers != null)
|
2014-07-15 23:43:17 +00:00
|
|
|
|
{
|
2015-11-25 20:28:46 +00:00
|
|
|
|
MarkerView.RowCount = Markers.Count;
|
2014-07-15 23:43:17 +00:00
|
|
|
|
}
|
|
|
|
|
|
2014-08-29 00:04:42 +00:00
|
|
|
|
MarkerView.Refresh();
|
2014-07-15 23:43:17 +00:00
|
|
|
|
}
|
2014-07-16 02:17:19 +00:00
|
|
|
|
|
2015-09-06 18:56:12 +00:00
|
|
|
|
public void Restart()
|
|
|
|
|
{
|
|
|
|
|
MarkerView.DeselectAll();
|
|
|
|
|
UpdateValues();
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-16 02:17:19 +00:00
|
|
|
|
private void MarkerView_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
2015-11-24 21:10:34 +00:00
|
|
|
|
EditMarkerButton.Enabled =
|
|
|
|
|
RemoveMarkerButton.Enabled =
|
|
|
|
|
JumpToMarkerButton.Enabled =
|
|
|
|
|
ScrollToMarkerButton.Enabled =
|
|
|
|
|
MarkerInputRoll.AnyRowsSelected && MarkerView.SelectedRows.First() != 0;
|
2014-07-16 02:17:19 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<TasMovieMarker> SelectedMarkers
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2014-10-25 14:10:32 +00:00
|
|
|
|
return MarkerView.SelectedRows
|
2015-11-25 20:28:46 +00:00
|
|
|
|
.Select(index => Markers[index])
|
2014-07-16 02:17:19 +00:00
|
|
|
|
.ToList();
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-07-23 23:04:43 +00:00
|
|
|
|
|
|
|
|
|
private void MarkerView_ItemActivate(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Tastudio.GoToMarker(SelectedMarkers.First());
|
|
|
|
|
}
|
2014-10-20 23:03:39 +00:00
|
|
|
|
|
2015-02-25 21:17:50 +00:00
|
|
|
|
// SuuperW: Marker renaming can be done with a right-click.
|
|
|
|
|
// A much more useful feature would be to easily jump to it.
|
|
|
|
|
private void MarkerView_MouseDoubleClick(object sender, MouseEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (MarkerView.CurrentCell != null && MarkerView.CurrentCell.RowIndex.HasValue &&
|
|
|
|
|
MarkerView.CurrentCell.RowIndex < MarkerView.RowCount)
|
|
|
|
|
{
|
2015-11-25 20:28:46 +00:00
|
|
|
|
var marker = Markers[MarkerView.CurrentCell.RowIndex.Value];
|
2015-02-25 21:17:50 +00:00
|
|
|
|
Tastudio.GoToFrame(marker.Frame);
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-10-25 13:41:23 +00:00
|
|
|
|
|
2015-11-24 21:10:34 +00:00
|
|
|
|
public int SelectedMarkerFrame()
|
2014-10-25 13:41:23 +00:00
|
|
|
|
{
|
2015-07-26 03:42:50 +00:00
|
|
|
|
if (MarkerView.AnyRowsSelected)
|
2014-10-25 13:41:23 +00:00
|
|
|
|
{
|
|
|
|
|
var index = MarkerView.SelectedRows.First();
|
2015-11-25 20:28:46 +00:00
|
|
|
|
var marker = Markers[index];
|
2015-11-24 21:10:34 +00:00
|
|
|
|
return marker.Frame;
|
2014-10-25 13:41:23 +00:00
|
|
|
|
}
|
2015-11-24 21:10:34 +00:00
|
|
|
|
return -1;
|
2014-10-25 13:41:23 +00:00
|
|
|
|
}
|
2015-12-03 18:16:10 +00:00
|
|
|
|
|
|
|
|
|
private void MarkerView_MouseClick(object sender, MouseEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
MarkerContextMenu.Close();
|
|
|
|
|
}
|
2013-12-15 19:16:52 +00:00
|
|
|
|
}
|
|
|
|
|
}
|