Markers/branch multi-selection (#2409)

Fixes #2215 

* Make marker/branch columns use ColumnType.Text

One step towards fixing multiselect for markers and branches

* Disable some input operations while TasView is unfocused

This prevents accidentally deleting inputs while branches or markers are selected.
This commit is contained in:
RetroEdit 2020-09-18 19:39:04 +00:00 committed by GitHub
parent 0ecd155758
commit 9e4f81e3a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 32 additions and 20 deletions

View File

@ -946,6 +946,11 @@ namespace BizHawk.Client.EmuHawk
public bool AnyRowsSelected => _selectedItems.Any(cell => cell.RowIndex.HasValue);
/// <summary>
/// Rows are selected and the selection is in focus.
/// </summary>
public bool SelectionFocused => AnyRowsSelected && Focused;
public IEnumerable<ToolStripItem> GenerateContextMenuItems()
{
if (Rotatable)

View File

@ -8,7 +8,9 @@
public int Right { get; set; }
public string Name { get; set; }
public string Text { get; set; }
public ColumnType Type { get; set; }
// Is this the default we want? ColumnType.Text is the most common.
public ColumnType Type { get; set; } = ColumnType.Boolean;
public bool Visible { get; set; } = true;
/// <summary>

View File

@ -76,19 +76,22 @@ namespace BizHawk.Client.EmuHawk
{
Name = BranchNumberColumnName,
Text = "#",
UnscaledWidth = 30
UnscaledWidth = 30,
Type = ColumnType.Text
},
new RollColumn
{
Name = FrameColumnName,
Text = "Frame",
UnscaledWidth = 64
UnscaledWidth = 64,
Type = ColumnType.Text
},
new RollColumn
{
Name = UserTextColumnName,
Text = "UserText",
UnscaledWidth = 90
UnscaledWidth = 90,
Type = ColumnType.Text
}
});
}

View File

@ -43,13 +43,15 @@ namespace BizHawk.Client.EmuHawk
{
Name = "FrameColumn",
Text = "Frame",
UnscaledWidth = 52
UnscaledWidth = 52,
Type = ColumnType.Text
},
new RollColumn
{
Name = "LabelColumn",
Text = "",
UnscaledWidth = 125
UnscaledWidth = 125,
Type = ColumnType.Text
}
});
}

View File

@ -205,7 +205,7 @@ namespace BizHawk.Client.EmuHawk
private void SaveSelectionToMacroMenuItem_Click(object sender, EventArgs e)
{
if (!TasView.AnyRowsSelected)
if (!TasView.SelectionFocused)
{
return;
}
@ -230,7 +230,7 @@ namespace BizHawk.Client.EmuHawk
private void PlaceMacroAtSelectionMenuItem_Click(object sender, EventArgs e)
{
if (!TasView.AnyRowsSelected)
if (!TasView.SelectionFocused)
{
return;
}
@ -392,7 +392,7 @@ namespace BizHawk.Client.EmuHawk
private void SelectBetweenMarkersMenuItem_Click(object sender, EventArgs e)
{
if (TasView.AnyRowsSelected)
if (TasView.SelectionFocused)
{
var prevMarker = CurrentTasMovie.Markers.PreviousOrCurrent(TasView.LastSelectedIndex ?? 0);
var nextMarker = CurrentTasMovie.Markers.Next(TasView.LastSelectedIndex ?? 0);
@ -424,7 +424,7 @@ namespace BizHawk.Client.EmuHawk
private void CopyMenuItem_Click(object sender, EventArgs e)
{
if (TasView.AnyRowsSelected)
if (TasView.SelectionFocused)
{
_tasClipboard.Clear();
var list = TasView.SelectedRows.ToArray();
@ -450,7 +450,7 @@ namespace BizHawk.Client.EmuHawk
private void PasteMenuItem_Click(object sender, EventArgs e)
{
if (TasView.AnyRowsSelected)
if (TasView.SelectionFocused)
{
// TODO: if highlighting 2 rows and pasting 3, only paste 2 of them
// FCEUX Taseditor doesn't do this, but I think it is the expected behavior in editor programs
@ -493,7 +493,7 @@ namespace BizHawk.Client.EmuHawk
private void PasteInsertMenuItem_Click(object sender, EventArgs e)
{
if (TasView.AnyRowsSelected)
if (TasView.SelectionFocused)
{
// copy paste from PasteMenuItem_Click!
IDataObject data = Clipboard.GetDataObject();
@ -534,7 +534,7 @@ namespace BizHawk.Client.EmuHawk
private void CutMenuItem_Click(object sender, EventArgs e)
{
if (TasView.AnyRowsSelected)
if (TasView.SelectionFocused)
{
var needsToRollback = TasView.FirstSelectedIndex < Emulator.Frame;
var rollBackFrame = TasView.FirstSelectedIndex ?? 0;
@ -572,7 +572,7 @@ namespace BizHawk.Client.EmuHawk
private void ClearFramesMenuItem_Click(object sender, EventArgs e)
{
if (TasView.AnyRowsSelected)
if (TasView.SelectionFocused)
{
var firstWithInput = FirstNonEmptySelectedFrame;
bool needsToRollback = firstWithInput.HasValue && firstWithInput < Emulator.Frame;
@ -598,7 +598,7 @@ namespace BizHawk.Client.EmuHawk
private void DeleteFramesMenuItem_Click(object sender, EventArgs e)
{
if (TasView.AnyRowsSelected)
if (TasView.SelectionFocused)
{
var needsToRollback = TasView.FirstSelectedIndex < Emulator.Frame;
var rollBackFrame = TasView.FirstSelectedIndex ?? 0;
@ -640,7 +640,7 @@ namespace BizHawk.Client.EmuHawk
{
for (int i = 0; i < timesToClone; i++)
{
if (TasView.AnyRowsSelected)
if (TasView.SelectionFocused)
{
var framesToInsert = TasView.SelectedRows;
var insertionFrame = Math.Min((TasView.LastSelectedIndex ?? 0) + 1, CurrentTasMovie.InputLogLength);
@ -665,7 +665,7 @@ namespace BizHawk.Client.EmuHawk
private void InsertFrameMenuItem_Click(object sender, EventArgs e)
{
if (TasView.AnyRowsSelected)
if (TasView.SelectionFocused)
{
var insertionFrame = TasView.FirstSelectedIndex ?? 0;
var needsToRollback = TasView.FirstSelectedIndex < Emulator.Frame;
@ -684,7 +684,7 @@ namespace BizHawk.Client.EmuHawk
private void InsertNumFramesMenuItem_Click(object sender, EventArgs e)
{
if (TasView.AnyRowsSelected)
if (TasView.SelectionFocused)
{
int insertionFrame = TasView.FirstSelectedIndex ?? 0;
using var framesPrompt = new FramesPrompt();
@ -697,7 +697,7 @@ namespace BizHawk.Client.EmuHawk
private void TruncateMenuItem_Click(object sender, EventArgs e)
{
if (TasView.AnyRowsSelected)
if (TasView.SelectionFocused)
{
var rollbackFrame = TasView.LastSelectedIndex ?? 0;
var needsToRollback = TasView.FirstSelectedIndex < Emulator.Frame;

View File

@ -702,7 +702,7 @@ namespace BizHawk.Client.EmuHawk
private void DummyLoadMacro(string path)
{
if (!TasView.AnyRowsSelected)
if (!TasView.SelectionFocused)
{
return;
}