TAStudio: -Fix: Undo/Redo didn't always jump back to valid frame.
-Performance boosts with multiple selected rows
This commit is contained in:
parent
7a0103963d
commit
f72eadb76e
|
@ -164,7 +164,7 @@ namespace BizHawk.Client.Common
|
||||||
if (!batch.Where(a => a.GetType() != typeof(MovieActionMarker)).Any())
|
if (!batch.Where(a => a.GetType() != typeof(MovieActionMarker)).Any())
|
||||||
return Movie.InputLogLength;
|
return Movie.InputLogLength;
|
||||||
|
|
||||||
return PreviousUndoFrame;
|
return PreviousRedoFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanUndo { get { return UndoIndex > -1; } }
|
public bool CanUndo { get { return UndoIndex > -1; } }
|
||||||
|
@ -180,7 +180,7 @@ namespace BizHawk.Client.Common
|
||||||
if (History[UndoIndex + 1].Count == 0)
|
if (History[UndoIndex + 1].Count == 0)
|
||||||
return Movie.InputLogLength;
|
return Movie.InputLogLength;
|
||||||
|
|
||||||
return History[UndoIndex + 1].Max(a => a.FirstFrame);
|
return History[UndoIndex + 1].Min(a => a.FirstFrame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public int PreviousRedoFrame
|
public int PreviousRedoFrame
|
||||||
|
@ -193,7 +193,7 @@ namespace BizHawk.Client.Common
|
||||||
if (History[UndoIndex].Count == 0)
|
if (History[UndoIndex].Count == 0)
|
||||||
return Movie.InputLogLength;
|
return Movie.InputLogLength;
|
||||||
|
|
||||||
return History[UndoIndex].Max(a => a.FirstFrame);
|
return History[UndoIndex].Min(a => a.FirstFrame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (BranchView.SelectedRows.Any())
|
if (BranchView.AnyRowsSelected)
|
||||||
{
|
{
|
||||||
return Branches[BranchView.SelectedRows.First()];
|
return Branches[BranchView.SelectedRows.First()];
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
public class InputRoll : Control
|
public class InputRoll : Control
|
||||||
{
|
{
|
||||||
private readonly GDIRenderer Gdi;
|
private readonly GDIRenderer Gdi;
|
||||||
private readonly List<Cell> SelectedItems = new List<Cell>();
|
private readonly SortedSet<Cell> SelectedItems = new SortedSet<Cell>(new sortCell());
|
||||||
|
|
||||||
private readonly VScrollBar VBar;
|
private readonly VScrollBar VBar;
|
||||||
private readonly HScrollBar HBar;
|
private readonly HScrollBar HBar;
|
||||||
|
@ -448,8 +448,8 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var items = SelectedItems.Where(cell => cell.RowIndex == index);
|
IEnumerable<Cell> items = SelectedItems.Where(cell => cell.RowIndex == index);
|
||||||
SelectedItems.RemoveAll(items.Contains);
|
SelectedItems.RemoveWhere(items.Contains);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -471,7 +471,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
public void TruncateSelection(int index)
|
public void TruncateSelection(int index)
|
||||||
{
|
{
|
||||||
SelectedItems.RemoveAll(cell => cell.RowIndex > index);
|
SelectedItems.RemoveWhere(cell => cell.RowIndex > index);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Browsable(false)]
|
[Browsable(false)]
|
||||||
|
@ -490,11 +490,9 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (SelectedRows.Any())
|
if (AnyRowsSelected)
|
||||||
{
|
{
|
||||||
return SelectedRows
|
return SelectedRows.Min();
|
||||||
.OrderBy(x => x)
|
|
||||||
.First();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -507,11 +505,9 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (SelectedRows.Any())
|
if (AnyRowsSelected)
|
||||||
{
|
{
|
||||||
return SelectedRows
|
return SelectedRows.Max();
|
||||||
.OrderBy(x => x)
|
|
||||||
.Last();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -852,6 +848,13 @@ namespace BizHawk.Client.EmuHawk
|
||||||
.Distinct();
|
.Distinct();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public bool AnyRowsSelected
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return SelectedItems.Any(cell => cell.RowIndex.HasValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void ClearSelectedRows()
|
public void ClearSelectedRows()
|
||||||
{
|
{
|
||||||
|
@ -998,7 +1001,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private void DrawData(PaintEventArgs e)
|
private void DrawData(PaintEventArgs e)
|
||||||
{
|
{
|
||||||
var columns = _columns.VisibleColumns.ToList();
|
List<RollColumn> columns = _columns.VisibleColumns.ToList();
|
||||||
if (QueryItemText != null)
|
if (QueryItemText != null)
|
||||||
{
|
{
|
||||||
if (HorizontalOrientation)
|
if (HorizontalOrientation)
|
||||||
|
@ -1300,12 +1303,12 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
// SuuperW: This allows user to see other colors in selected frames.
|
// SuuperW: This allows user to see other colors in selected frames.
|
||||||
Color Highlight_Color = new Color();
|
Color Highlight_Color = new Color();
|
||||||
foreach (var cell in SelectedItems)
|
foreach (Cell cell in SelectedItems)
|
||||||
{
|
{
|
||||||
if (cell.RowIndex > LastVisibleRow || cell.RowIndex < FirstVisibleRow)
|
if (cell.RowIndex > LastVisibleRow || cell.RowIndex < FirstVisibleRow)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
var relativeCell = new Cell
|
Cell relativeCell = new Cell
|
||||||
{
|
{
|
||||||
RowIndex = cell.RowIndex - FirstVisibleRow,
|
RowIndex = cell.RowIndex - FirstVisibleRow,
|
||||||
Column = cell.Column,
|
Column = cell.Column,
|
||||||
|
@ -1366,7 +1369,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
/// <param name="e"></param>
|
/// <param name="e"></param>
|
||||||
private void DoBackGroundCallback(PaintEventArgs e)
|
private void DoBackGroundCallback(PaintEventArgs e)
|
||||||
{
|
{
|
||||||
var columns = _columns.VisibleColumns.ToList();
|
List<RollColumn> columns = _columns.VisibleColumns.ToList();
|
||||||
|
|
||||||
if (HorizontalOrientation)
|
if (HorizontalOrientation)
|
||||||
{
|
{
|
||||||
|
@ -2588,6 +2591,33 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class sortCell : IComparer<Cell>
|
||||||
|
{
|
||||||
|
int IComparer<Cell>.Compare(Cell a, Cell b)
|
||||||
|
{
|
||||||
|
Cell c1 = a as Cell;
|
||||||
|
Cell c2 = b as Cell;
|
||||||
|
if (c1.RowIndex.HasValue)
|
||||||
|
{
|
||||||
|
if (c2.RowIndex.HasValue)
|
||||||
|
{
|
||||||
|
int row = c1.RowIndex.Value.CompareTo(c2.RowIndex.Value);
|
||||||
|
if (row == 0)
|
||||||
|
{
|
||||||
|
return c1.Column.Name.CompareTo(c2.Column.Name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if (c2.RowIndex.HasValue)
|
||||||
|
return -1;
|
||||||
|
else
|
||||||
|
return c1.Column.Name.CompareTo(c2.Column.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,7 +156,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
public void EditMarker()
|
public void EditMarker()
|
||||||
{
|
{
|
||||||
if (MarkerView.SelectedRows.Any())
|
if (MarkerView.AnyRowsSelected)
|
||||||
{
|
{
|
||||||
var index = MarkerView.SelectedRows.First();
|
var index = MarkerView.SelectedRows.First();
|
||||||
var marker = Tastudio.CurrentTasMovie.Markers[index];
|
var marker = Tastudio.CurrentTasMovie.Markers[index];
|
||||||
|
@ -179,7 +179,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
public int SelectedMarkerFrame()
|
public int SelectedMarkerFrame()
|
||||||
{
|
{
|
||||||
if (MarkerView.SelectedRows.Any())
|
if (MarkerView.AnyRowsSelected)
|
||||||
{
|
{
|
||||||
var index = MarkerView.SelectedRows.First();
|
var index = MarkerView.SelectedRows.First();
|
||||||
var marker = Tastudio.CurrentTasMovie.Markers[index];
|
var marker = Tastudio.CurrentTasMovie.Markers[index];
|
||||||
|
|
|
@ -228,7 +228,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private void TasView_ColumnClick(object sender, InputRoll.ColumnClickEventArgs e)
|
private void TasView_ColumnClick(object sender, InputRoll.ColumnClickEventArgs e)
|
||||||
{
|
{
|
||||||
if (TasView.SelectedRows.Any())
|
if (TasView.AnyRowsSelected)
|
||||||
{
|
{
|
||||||
var columnName = e.Column.Name;
|
var columnName = e.Column.Name;
|
||||||
|
|
||||||
|
|
|
@ -123,7 +123,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
if (TasView.LastSelectedIndex == CurrentTasMovie.InputLogLength)
|
if (TasView.LastSelectedIndex == CurrentTasMovie.InputLogLength)
|
||||||
TasView.SelectRow(CurrentTasMovie.InputLogLength, false);
|
TasView.SelectRow(CurrentTasMovie.InputLogLength, false);
|
||||||
|
|
||||||
if (!TasView.SelectedRows.Any())
|
if (!TasView.AnyRowsSelected)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
MovieZone macro = new MovieZone(CurrentTasMovie, TasView.FirstSelectedIndex.Value,
|
MovieZone macro = new MovieZone(CurrentTasMovie, TasView.FirstSelectedIndex.Value,
|
||||||
|
@ -132,7 +132,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
private void placeMacroAtSelectionToolStripMenuItem_Click(object sender, EventArgs e)
|
private void placeMacroAtSelectionToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (!TasView.SelectedRows.Any())
|
if (!TasView.AnyRowsSelected)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
MovieZone macro = MacroInputTool.LoadMacro();
|
MovieZone macro = MacroInputTool.LoadMacro();
|
||||||
|
@ -207,7 +207,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
DeleteFramesMenuItem.Enabled =
|
DeleteFramesMenuItem.Enabled =
|
||||||
CloneMenuItem.Enabled =
|
CloneMenuItem.Enabled =
|
||||||
TruncateMenuItem.Enabled =
|
TruncateMenuItem.Enabled =
|
||||||
TasView.SelectedRows.Any();
|
TasView.AnyRowsSelected;
|
||||||
ReselectClipboardMenuItem.Enabled =
|
ReselectClipboardMenuItem.Enabled =
|
||||||
PasteMenuItem.Enabled =
|
PasteMenuItem.Enabled =
|
||||||
PasteInsertMenuItem.Enabled =
|
PasteInsertMenuItem.Enabled =
|
||||||
|
@ -235,7 +235,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private void SelectBetweenMarkersMenuItem_Click(object sender, EventArgs e)
|
private void SelectBetweenMarkersMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (TasView.SelectedRows.Any())
|
if (TasView.AnyRowsSelected)
|
||||||
{
|
{
|
||||||
var prevMarker = CurrentTasMovie.Markers.PreviousOrCurrent(TasView.LastSelectedIndex.Value);
|
var prevMarker = CurrentTasMovie.Markers.PreviousOrCurrent(TasView.LastSelectedIndex.Value);
|
||||||
var nextMarker = CurrentTasMovie.Markers.Next(TasView.LastSelectedIndex.Value);
|
var nextMarker = CurrentTasMovie.Markers.Next(TasView.LastSelectedIndex.Value);
|
||||||
|
@ -265,7 +265,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private void CopyMenuItem_Click(object sender, EventArgs e)
|
private void CopyMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (TasView.SelectedRows.Any())
|
if (TasView.AnyRowsSelected)
|
||||||
{
|
{
|
||||||
_tasClipboard.Clear();
|
_tasClipboard.Clear();
|
||||||
var list = TasView.SelectedRows.ToList();
|
var list = TasView.SelectedRows.ToList();
|
||||||
|
@ -348,7 +348,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private void CutMenuItem_Click(object sender, EventArgs e)
|
private void CutMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (TasView.SelectedRows.Any())
|
if (TasView.AnyRowsSelected)
|
||||||
{
|
{
|
||||||
var wasPaused = GlobalWin.MainForm.EmulatorPaused;
|
var wasPaused = GlobalWin.MainForm.EmulatorPaused;
|
||||||
var needsToRollback = TasView.FirstSelectedIndex < Emulator.Frame;
|
var needsToRollback = TasView.FirstSelectedIndex < Emulator.Frame;
|
||||||
|
@ -392,7 +392,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private void ClearMenuItem_Click(object sender, EventArgs e)
|
private void ClearMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (TasView.SelectedRows.Any())
|
if (TasView.AnyRowsSelected)
|
||||||
{
|
{
|
||||||
bool wasPaused = GlobalWin.MainForm.EmulatorPaused;
|
bool wasPaused = GlobalWin.MainForm.EmulatorPaused;
|
||||||
bool needsToRollback = !(TasView.FirstSelectedIndex > Emulator.Frame);
|
bool needsToRollback = !(TasView.FirstSelectedIndex > Emulator.Frame);
|
||||||
|
@ -426,7 +426,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private void DeleteFramesMenuItem_Click(object sender, EventArgs e)
|
private void DeleteFramesMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (TasView.SelectedRows.Any())
|
if (TasView.AnyRowsSelected)
|
||||||
{
|
{
|
||||||
var wasPaused = GlobalWin.MainForm.EmulatorPaused;
|
var wasPaused = GlobalWin.MainForm.EmulatorPaused;
|
||||||
var needsToRollback = TasView.FirstSelectedIndex < Emulator.Frame;
|
var needsToRollback = TasView.FirstSelectedIndex < Emulator.Frame;
|
||||||
|
@ -461,7 +461,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private void CloneMenuItem_Click(object sender, EventArgs e)
|
private void CloneMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (TasView.SelectedRows.Any())
|
if (TasView.AnyRowsSelected)
|
||||||
{
|
{
|
||||||
var wasPaused = GlobalWin.MainForm.EmulatorPaused;
|
var wasPaused = GlobalWin.MainForm.EmulatorPaused;
|
||||||
var framesToInsert = TasView.SelectedRows.ToList();
|
var framesToInsert = TasView.SelectedRows.ToList();
|
||||||
|
@ -496,7 +496,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
private void InsertFrameMenuItem_Click(object sender, EventArgs e)
|
private void InsertFrameMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
var wasPaused = GlobalWin.MainForm.EmulatorPaused;
|
var wasPaused = GlobalWin.MainForm.EmulatorPaused;
|
||||||
var insertionFrame = TasView.SelectedRows.Any() ? TasView.FirstSelectedIndex.Value : 0;
|
var insertionFrame = TasView.AnyRowsSelected ? TasView.FirstSelectedIndex.Value : 0;
|
||||||
var needsToRollback = TasView.FirstSelectedIndex < Emulator.Frame;
|
var needsToRollback = TasView.FirstSelectedIndex < Emulator.Frame;
|
||||||
|
|
||||||
CurrentTasMovie.InsertEmptyFrame(insertionFrame);
|
CurrentTasMovie.InsertEmptyFrame(insertionFrame);
|
||||||
|
@ -522,7 +522,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
private void InsertNumFramesMenuItem_Click(object sender, EventArgs e)
|
private void InsertNumFramesMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
bool wasPaused = GlobalWin.MainForm.EmulatorPaused;
|
bool wasPaused = GlobalWin.MainForm.EmulatorPaused;
|
||||||
int insertionFrame = TasView.SelectedRows.Any() ? TasView.FirstSelectedIndex.Value : 0;
|
int insertionFrame = TasView.AnyRowsSelected ? TasView.FirstSelectedIndex.Value : 0;
|
||||||
bool needsToRollback = TasView.FirstSelectedIndex < Emulator.Frame;
|
bool needsToRollback = TasView.FirstSelectedIndex < Emulator.Frame;
|
||||||
|
|
||||||
FramesPrompt framesPrompt = new FramesPrompt();
|
FramesPrompt framesPrompt = new FramesPrompt();
|
||||||
|
@ -552,7 +552,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private void TruncateMenuItem_Click(object sender, EventArgs e)
|
private void TruncateMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (TasView.SelectedRows.Any())
|
if (TasView.AnyRowsSelected)
|
||||||
{
|
{
|
||||||
var rollbackFrame = TasView.LastSelectedIndex.Value;
|
var rollbackFrame = TasView.LastSelectedIndex.Value;
|
||||||
var needsToRollback = TasView.FirstSelectedIndex < Emulator.Frame;
|
var needsToRollback = TasView.FirstSelectedIndex < Emulator.Frame;
|
||||||
|
@ -981,7 +981,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
InsertFrameContextMenuItem.Enabled =
|
InsertFrameContextMenuItem.Enabled =
|
||||||
InsertNumFramesContextMenuItem.Enabled =
|
InsertNumFramesContextMenuItem.Enabled =
|
||||||
TruncateContextMenuItem.Enabled =
|
TruncateContextMenuItem.Enabled =
|
||||||
TasView.SelectedRows.Any();
|
TasView.AnyRowsSelected;
|
||||||
|
|
||||||
StartFromNowSeparator.Visible =
|
StartFromNowSeparator.Visible =
|
||||||
StartNewProjectFromNowMenuItem.Visible =
|
StartNewProjectFromNowMenuItem.Visible =
|
||||||
|
|
|
@ -469,7 +469,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
private void DummyLoadMacro(string path)
|
private void DummyLoadMacro(string path)
|
||||||
{
|
{
|
||||||
if (!TasView.SelectedRows.Any())
|
if (!TasView.AnyRowsSelected)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
MovieZone loadZone = new MovieZone(path);
|
MovieZone loadZone = new MovieZone(path);
|
||||||
|
@ -803,7 +803,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
EditMarkerContextMenuItem.Enabled =
|
EditMarkerContextMenuItem.Enabled =
|
||||||
RemoveMarkerContextMenuItem.Enabled =
|
RemoveMarkerContextMenuItem.Enabled =
|
||||||
ScrollToMarkerToolStripMenuItem.Enabled =
|
ScrollToMarkerToolStripMenuItem.Enabled =
|
||||||
MarkerControl.MarkerInputRoll.SelectedRows.Any();
|
MarkerControl.MarkerInputRoll.AnyRowsSelected;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ScrollToMarkerToolStripMenuItem_Click(object sender, EventArgs e)
|
private void ScrollToMarkerToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
|
|
Loading…
Reference in New Issue