Cheats dialog - refactor and simplify how column info is saved and loaded
This commit is contained in:
parent
d809da1e8d
commit
ace8192c8a
|
@ -1,4 +1,6 @@
|
|||
using System.Drawing;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace BizHawk.Client.Common
|
||||
|
@ -98,5 +100,24 @@ namespace BizHawk.Client.Common
|
|||
return new Size(Width ?? 0, Height ?? 0);
|
||||
}
|
||||
}
|
||||
|
||||
public class ColumnList : List<Column>
|
||||
{
|
||||
public Column this[string name]
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.FirstOrDefault(c => c.Name == name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Column
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public int Width { get; set; }
|
||||
public bool Visible { get; set; }
|
||||
public int Index { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ using System.Windows.Forms;
|
|||
|
||||
using BizHawk.Common;
|
||||
using BizHawk.Common.ReflectionExtensions;
|
||||
using BizHawk.Client.Common;
|
||||
|
||||
|
||||
namespace BizHawk.Client.EmuHawk.WinFormExtensions
|
||||
|
@ -54,6 +55,25 @@ namespace BizHawk.Client.EmuHawk.WinFormExtensions
|
|||
}
|
||||
}
|
||||
|
||||
public static void AddColumn(this ListView listView, ToolDialogSettings.Column column)
|
||||
{
|
||||
if (column.Visible)
|
||||
{
|
||||
if (listView.Columns[column.Name] == null)
|
||||
{
|
||||
var lsstViewColumn = new ColumnHeader
|
||||
{
|
||||
Name = column.Name,
|
||||
Text = column.Name.Replace("Column", string.Empty),
|
||||
Width = column.Width,
|
||||
DisplayIndex = column.Index
|
||||
};
|
||||
|
||||
listView.Columns.Add(lsstViewColumn);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Point ChildPointToScreen(this Control control, Control child)
|
||||
{
|
||||
return control.PointToScreen(new Point(child.Location.X, child.Location.Y));
|
||||
|
|
|
@ -32,60 +32,32 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
public CheatsSettings()
|
||||
{
|
||||
CheatsColumnWidths = new Dictionary<string, int>
|
||||
Columns = new ColumnList
|
||||
{
|
||||
{ "NamesColumn", 128 },
|
||||
{ "AddressColumn", 60 },
|
||||
{ "ValueColumn", 59 },
|
||||
{ "CompareColumn", 59 },
|
||||
{ "OnColumn", 28 },
|
||||
{ "DomainColumn", 55 },
|
||||
{ "SizeColumn", 55 },
|
||||
{ "EndianColumn", 55 },
|
||||
{ "DisplayTypeColumn", 55 },
|
||||
};
|
||||
|
||||
CheatsColumnIndices = new Dictionary<string, int>
|
||||
{
|
||||
{ "NamesColumn", 0 },
|
||||
{ "AddressColumn", 1 },
|
||||
{ "ValueColumn", 2 },
|
||||
{ "CompareColumn", 3 },
|
||||
{ "OnColumn", 4 },
|
||||
{ "DomainColumn", 5 },
|
||||
{ "SizeColumn", 6 },
|
||||
{ "EndianColumn", 7 },
|
||||
{ "DisplayTypeColumn", 8 },
|
||||
};
|
||||
|
||||
CheatsColumnShow = new Dictionary<string, bool>
|
||||
{
|
||||
{ "NamesColumn", true },
|
||||
{ "AddressColumn", true },
|
||||
{ "ValueColumn", true },
|
||||
{ "CompareColumn", true },
|
||||
{ "OnColumn", false },
|
||||
{ "DomainColumn", true },
|
||||
{ "SizeColumn", true },
|
||||
{ "EndianColumn", false },
|
||||
{ "DisplayTypeColumn", false },
|
||||
new Column { Name = "NamesColumn", Visible = true, Index = 0, Width = 128 },
|
||||
new Column { Name = "AddressColumn", Visible = true, Index = 1, Width = 60 },
|
||||
new Column { Name = "ValueColumn", Visible = true, Index = 2, Width = 59 },
|
||||
new Column { Name = "CompareColumn", Visible = true, Index = 3, Width = 59 },
|
||||
new Column { Name = "OnColumn", Visible = false, Index = 4, Width = 28 },
|
||||
new Column { Name = "DomainColumn", Visible = true, Index = 5, Width = 55 },
|
||||
new Column { Name = "SizeColumn", Visible = true, Index = 6, Width = 55 },
|
||||
new Column { Name = "EndianColumn", Visible = false, Index = 7, Width = 55 },
|
||||
new Column { Name = "DisplayTypeColumn", Visible = false, Index = 8, Width = 55 }
|
||||
};
|
||||
}
|
||||
|
||||
public Dictionary<string, int> CheatsColumnWidths { get; set; }
|
||||
public Dictionary<string, int> CheatsColumnIndices { get; set; }
|
||||
public Dictionary<string, bool> CheatsColumnShow { get; set; }
|
||||
public ColumnList Columns { get; set; }
|
||||
}
|
||||
|
||||
public const string NAME = "NamesColumn";
|
||||
public const string ADDRESS = "AddressColumn";
|
||||
public const string VALUE = "ValueColumn";
|
||||
public const string COMPARE = "CompareColumn";
|
||||
public const string ON = "OnColumn";
|
||||
public const string DOMAIN = "DomainColumn";
|
||||
public const string SIZE = "SizeColumn";
|
||||
public const string ENDIAN = "EndianColumn";
|
||||
public const string TYPE = "DisplayTypeColumn";
|
||||
private const string NAME = "NamesColumn";
|
||||
private const string ADDRESS = "AddressColumn";
|
||||
private const string VALUE = "ValueColumn";
|
||||
private const string COMPARE = "CompareColumn";
|
||||
private const string ON = "OnColumn";
|
||||
private const string DOMAIN = "DomainColumn";
|
||||
private const string SIZE = "SizeColumn";
|
||||
private const string ENDIAN = "EndianColumn";
|
||||
private const string TYPE = "DisplayTypeColumn";
|
||||
|
||||
private int _defaultWidth;
|
||||
private int _defaultHeight;
|
||||
|
@ -288,101 +260,43 @@ namespace BizHawk.Client.EmuHawk
|
|||
private void LoadColumnInfo()
|
||||
{
|
||||
CheatListView.Columns.Clear();
|
||||
CheatListView.AddColumn(NAME, Settings.CheatsColumnShow[NAME], GetColumnWidth(NAME));
|
||||
CheatListView.AddColumn(ADDRESS, Settings.CheatsColumnShow[ADDRESS], GetColumnWidth(ADDRESS));
|
||||
CheatListView.AddColumn(VALUE, Settings.CheatsColumnShow[VALUE], GetColumnWidth(VALUE));
|
||||
CheatListView.AddColumn(COMPARE, Settings.CheatsColumnShow[COMPARE], GetColumnWidth(COMPARE));
|
||||
CheatListView.AddColumn(ON, Settings.CheatsColumnShow[ON], GetColumnWidth(ON));
|
||||
CheatListView.AddColumn(DOMAIN, Settings.CheatsColumnShow[DOMAIN], GetColumnWidth(DOMAIN));
|
||||
CheatListView.AddColumn(SIZE, Settings.CheatsColumnShow[SIZE], GetColumnWidth(SIZE));
|
||||
CheatListView.AddColumn(ENDIAN, Settings.CheatsColumnShow[ENDIAN], GetColumnWidth(ENDIAN));
|
||||
CheatListView.AddColumn(TYPE, Settings.CheatsColumnShow[TYPE], GetColumnWidth(TYPE));
|
||||
|
||||
foreach (var column in Settings.Columns)
|
||||
{
|
||||
CheatListView.AddColumn(column);
|
||||
}
|
||||
|
||||
ColumnPositions();
|
||||
}
|
||||
|
||||
private void ColumnPositions()
|
||||
{
|
||||
var columns = Settings.CheatsColumnIndices
|
||||
.Where(x => CheatListView.Columns.ContainsKey(x.Key))
|
||||
.OrderBy(x => x.Value)
|
||||
.ToList();
|
||||
|
||||
for (var i = 0; i < columns.Count; i++)
|
||||
foreach (ColumnHeader column in CheatListView.Columns)
|
||||
{
|
||||
if (CheatListView.Columns.ContainsKey(columns[i].Key))
|
||||
var index = Settings.Columns[column.Name].Index;
|
||||
if (index < CheatListView.Columns.Count)
|
||||
{
|
||||
CheatListView.Columns[columns[i].Key].DisplayIndex = i;
|
||||
column.DisplayIndex = Settings.Columns[column.Name].Index;
|
||||
}
|
||||
else
|
||||
{
|
||||
column.DisplayIndex = CheatListView.Columns.Count - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: delete me
|
||||
private int GetColumnWidth(string columnName)
|
||||
{
|
||||
return Settings.CheatsColumnWidths[columnName];
|
||||
}
|
||||
|
||||
private void SaveColumnInfo()
|
||||
{
|
||||
if (CheatListView.Columns[NAME] != null)
|
||||
foreach (ColumnHeader column in CheatListView.Columns)
|
||||
{
|
||||
Settings.CheatsColumnIndices[NAME] = CheatListView.Columns[NAME].DisplayIndex;
|
||||
Settings.CheatsColumnWidths[NAME] = CheatListView.Columns[NAME].Width;
|
||||
}
|
||||
|
||||
if (CheatListView.Columns[ADDRESS] != null)
|
||||
{
|
||||
Settings.CheatsColumnIndices[ADDRESS] = CheatListView.Columns[ADDRESS].DisplayIndex;
|
||||
Settings.CheatsColumnWidths[ADDRESS] = CheatListView.Columns[ADDRESS].Width;
|
||||
}
|
||||
|
||||
if (CheatListView.Columns[VALUE] != null)
|
||||
{
|
||||
Settings.CheatsColumnIndices[VALUE] = CheatListView.Columns[VALUE].DisplayIndex;
|
||||
Settings.CheatsColumnWidths[VALUE] = CheatListView.Columns[VALUE].Width;
|
||||
}
|
||||
|
||||
if (CheatListView.Columns[COMPARE] != null)
|
||||
{
|
||||
Settings.CheatsColumnIndices[COMPARE] = CheatListView.Columns[COMPARE].DisplayIndex;
|
||||
Settings.CheatsColumnWidths[COMPARE] = CheatListView.Columns[COMPARE].Width;
|
||||
}
|
||||
|
||||
if (CheatListView.Columns[ON] != null)
|
||||
{
|
||||
Settings.CheatsColumnIndices[ON] = CheatListView.Columns[ON].DisplayIndex;
|
||||
Settings.CheatsColumnWidths[ON] = CheatListView.Columns[ON].Width;
|
||||
}
|
||||
|
||||
if (CheatListView.Columns[DOMAIN] != null)
|
||||
{
|
||||
Settings.CheatsColumnIndices[DOMAIN] = CheatListView.Columns[DOMAIN].DisplayIndex;
|
||||
Settings.CheatsColumnWidths[DOMAIN] = CheatListView.Columns[DOMAIN].Width;
|
||||
}
|
||||
|
||||
if (CheatListView.Columns[SIZE] != null)
|
||||
{
|
||||
Settings.CheatsColumnIndices[SIZE] = CheatListView.Columns[SIZE].DisplayIndex;
|
||||
Settings.CheatsColumnWidths[SIZE] = CheatListView.Columns[SIZE].Width;
|
||||
}
|
||||
|
||||
if (CheatListView.Columns[ENDIAN] != null)
|
||||
{
|
||||
Settings.CheatsColumnIndices[ENDIAN] = CheatListView.Columns[ENDIAN].DisplayIndex;
|
||||
Settings.CheatsColumnWidths[ENDIAN] = CheatListView.Columns[ENDIAN].Width;
|
||||
}
|
||||
|
||||
if (CheatListView.Columns[TYPE] != null)
|
||||
{
|
||||
Settings.CheatsColumnIndices[TYPE] = CheatListView.Columns[TYPE].DisplayIndex;
|
||||
Settings.CheatsColumnWidths[TYPE] = CheatListView.Columns[TYPE].Width;
|
||||
Settings.Columns[column.Name].Index = column.DisplayIndex;
|
||||
Settings.Columns[column.Name].Width = column.Width;
|
||||
}
|
||||
}
|
||||
|
||||
private void DoColumnToggle(string column)
|
||||
{
|
||||
Settings.CheatsColumnShow[column] ^= true;
|
||||
Settings.Columns[column].Visible ^= true;
|
||||
SaveColumnInfo();
|
||||
LoadColumnInfo();
|
||||
}
|
||||
|
@ -757,15 +671,15 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private void ColumnsSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||
{
|
||||
ShowNameMenuItem.Checked = Settings.CheatsColumnShow[NAME];
|
||||
ShowAddressMenuItem.Checked = Settings.CheatsColumnShow[ADDRESS];
|
||||
ShowValueMenuItem.Checked = Settings.CheatsColumnShow[VALUE];
|
||||
ShowCompareMenuItem.Checked = Settings.CheatsColumnShow[COMPARE];
|
||||
ShowOnMenuItem.Checked = Settings.CheatsColumnShow[ON];
|
||||
ShowDomainMenuItem.Checked = Settings.CheatsColumnShow[DOMAIN];
|
||||
ShowSizeMenuItem.Checked = Settings.CheatsColumnShow[SIZE];
|
||||
ShowEndianMenuItem.Checked = Settings.CheatsColumnShow[ENDIAN];
|
||||
ShowDisplayTypeMenuItem.Checked = Settings.CheatsColumnShow[TYPE];
|
||||
ShowNameMenuItem.Checked = Settings.Columns[NAME].Visible;
|
||||
ShowAddressMenuItem.Checked = Settings.Columns[ADDRESS].Visible;
|
||||
ShowValueMenuItem.Checked = Settings.Columns[VALUE].Visible;
|
||||
ShowCompareMenuItem.Checked = Settings.Columns[COMPARE].Visible;
|
||||
ShowOnMenuItem.Checked = Settings.Columns[ON].Visible;
|
||||
ShowDomainMenuItem.Checked = Settings.Columns[DOMAIN].Visible;
|
||||
ShowSizeMenuItem.Checked = Settings.Columns[SIZE].Visible;
|
||||
ShowEndianMenuItem.Checked = Settings.Columns[ENDIAN].Visible;
|
||||
ShowDisplayTypeMenuItem.Checked = Settings.Columns[TYPE].Visible;
|
||||
}
|
||||
|
||||
private void ShowNameMenuItem_Click(object sender, EventArgs e)
|
||||
|
|
Loading…
Reference in New Issue