InputRoll - column reordering, including saving and loading

This commit is contained in:
adelikat 2014-10-19 14:04:59 +00:00
parent eb28732087
commit bcb8a00c77
1 changed files with 65 additions and 6 deletions

View File

@ -29,6 +29,11 @@ namespace BizHawk.Client.EmuHawk
private int _rowCount;
private Size _charSize;
private RollColumn _columnDown;
private int? _currentX;
private int? _currentY;
public InputRoll()
{
@ -618,6 +623,8 @@ namespace BizHawk.Client.EmuHawk
//Foreground
DrawData(e);
DrawColumnDrag(e);
Gdi.CopyToScreen();
Gdi.EndOffScreenBitmap();
}
@ -628,6 +635,22 @@ namespace BizHawk.Client.EmuHawk
// Do nothing, and this should never be called
}
private void DrawColumnDrag(PaintEventArgs e)
{
if (_columnDown != null && _currentX.HasValue && _currentY.HasValue && IsHoveringOnColumnCell)
{
int x1 = _currentX.Value - (_columnDown.Width.Value / 2);
int y1 = _currentY.Value - (CellHeight / 2);
int x2 = x1 + _columnDown.Width.Value;
int y2 = y1 + CellHeight;
Gdi.SetSolidPen(this.BackColor);
Gdi.DrawRectangle(x1, y1, x2, y2);
Gdi.PrepDrawString(this.Font, this.ForeColor);
Gdi.DrawString(_columnDown.Text, new Point(x1 + CellWidthPadding, y1 + CellHeightPadding));
}
}
private void DrawColumnText(PaintEventArgs e)
{
var columns = _columns.VisibleColumns.ToList();
@ -1097,6 +1120,9 @@ namespace BizHawk.Client.EmuHawk
protected override void OnMouseMove(MouseEventArgs e)
{
_currentX = e.X;
_currentY = e.Y;
var newCell = CalculatePointedCell(e.X, e.Y);
newCell.RowIndex += FirstVisibleRow;
if (!newCell.Equals(CurrentCell))
@ -1108,6 +1134,14 @@ namespace BizHawk.Client.EmuHawk
{
Refresh();
}
else if (_columnDown != null)
{
Refresh();
}
}
else if (_columnDown != null) // Kind of silly feeling to have this check twice, but the only alternative I can think of has it refreshing twice when pointed column changes with column down, and speed matters
{
Refresh();
}
base.OnMouseMove(e);
@ -1126,6 +1160,8 @@ namespace BizHawk.Client.EmuHawk
protected override void OnMouseLeave(EventArgs e)
{
_currentX = null;
_currentY = null;
CurrentCell = null;
IsPaintDown = false;
Refresh();
@ -1135,9 +1171,16 @@ namespace BizHawk.Client.EmuHawk
// TODO add query callback of whether to select the cell or not
protected override void OnMouseDown(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && InputPaintingMode)
if (e.Button == MouseButtons.Left)
{
IsPaintDown = true;
if (IsHoveringOnColumnCell)
{
_columnDown = CurrentCell.Column;
}
else if (InputPaintingMode)
{
IsPaintDown = true;
}
}
if (e.Button == MouseButtons.Right)
@ -1247,7 +1290,13 @@ namespace BizHawk.Client.EmuHawk
{
if (IsHoveringOnColumnCell)
{
if (e.Button == MouseButtons.Left)
if (_columnDown != null)
{
DoColumnReorder();
_columnDown = null;
Refresh();
}
else if (e.Button == MouseButtons.Left)
{
ColumnClickEvent(ColumnAtX(e.X));
}
@ -1256,10 +1305,10 @@ namespace BizHawk.Client.EmuHawk
ColumnRightClickEvent(ColumnAtX(e.X));
}
}
IsPaintDown = false;
RightButtonHeld = false;
_columnDown = null;
RightButtonHeld = false;
IsPaintDown = false;
base.OnMouseUp(e);
}
@ -1425,6 +1474,16 @@ namespace BizHawk.Client.EmuHawk
#region Helpers
private void DoColumnReorder()
{
if (_columnDown != CurrentCell.Column)
{
var newIndex = _columns.IndexOf(CurrentCell.Column);
_columns.Remove(_columnDown);
_columns.Insert(newIndex, _columnDown);
}
}
//ScrollBar.Maximum = DesiredValue + ScrollBar.LargeChange - 1
//See MSDN Page for more information on the dumb ScrollBar.Maximum Property
private void RecalculateScrollBars()