New Ram Watch - column ordering

This commit is contained in:
adelikat 2013-09-09 00:25:03 +00:00
parent 85b25ec371
commit 450fc79086
2 changed files with 185 additions and 24 deletions

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Data; using System.Data;
@ -12,14 +13,14 @@ namespace BizHawk.MultiClient
{ {
public partial class NewRamWatch : Form public partial class NewRamWatch : Form
{ {
private const string ADDRESS = "AddressColumn"; public const string ADDRESS = "AddressColumn";
private const string VALUE = "ValueColumn"; public const string VALUE = "ValueColumn";
private const string PREV = "PrevColumn"; public const string PREV = "PrevColumn";
private const string CHANGES = "ChangesColumn"; public const string CHANGES = "ChangesColumn";
private const string DIFF = "DiffColumn"; public const string DIFF = "DiffColumn";
private const string DOMAIN = "DomainColumn"; public const string DOMAIN = "DomainColumn";
private const string NOTES = "NotesColumn"; public const string NOTES = "NotesColumn";
private Dictionary<string, int> DefaultColumnWidths = new Dictionary<string, int>() private Dictionary<string, int> DefaultColumnWidths = new Dictionary<string, int>()
{ {
{ ADDRESS, 60 }, { ADDRESS, 60 },
@ -35,8 +36,8 @@ namespace BizHawk.MultiClient
private int defaultHeight; private int defaultHeight;
private WatchList Watches = new WatchList(); private WatchList Watches = new WatchList();
private string systemID = "NULL"; private string systemID = "NULL";
private string sortedCol = ""; private string _sortedColumn = "";
private bool sortReverse = false; private bool _sortReverse = false;
public NewRamWatch() public NewRamWatch()
{ {
@ -45,8 +46,8 @@ namespace BizHawk.MultiClient
WatchListView.QueryItemBkColor += WatchListView_QueryItemBkColor; WatchListView.QueryItemBkColor += WatchListView_QueryItemBkColor;
WatchListView.VirtualMode = true; WatchListView.VirtualMode = true;
Closing += (o, e) => SaveConfigSettings(); Closing += (o, e) => SaveConfigSettings();
sortedCol = ""; _sortedColumn = "";
sortReverse = false; _sortReverse = false;
} }
public void UpdateValues() public void UpdateValues()
@ -292,8 +293,8 @@ namespace BizHawk.MultiClient
DisplayWatches(); DisplayWatches();
UpdateWatchCount(); UpdateWatchCount();
MessageLabel.Text = ""; MessageLabel.Text = "";
sortReverse = false; _sortReverse = false;
sortedCol = ""; _sortedColumn = "";
} }
} }
@ -426,21 +427,18 @@ namespace BizHawk.MultiClient
private void InsertSeparator() private void InsertSeparator()
{ {
Changes(); var indexes = WatchListView.SelectedIndices;
ListView.SelectedIndexCollection indexes = WatchListView.SelectedIndices;
if (indexes.Count > 0) if (indexes.Count > 0)
{ {
if (indexes[0] > 0) Watches.Insert(indexes[0], SeparatorWatch.Instance);
{
Watches.Insert(indexes[0], SeparatorWatch.Instance);
}
} }
else else
{ {
Watches.Add(SeparatorWatch.Instance); Watches.Add(SeparatorWatch.Instance);
} }
DisplayWatches(); DisplayWatches();
Changes();
UpdateWatchCount();
} }
private Point GetPromptPoint() private Point GetPromptPoint()
@ -725,9 +723,19 @@ namespace BizHawk.MultiClient
} }
} }
private void OrderColumn(int columnToOrder) private void OrderColumn(int index)
{ {
//TODO var column = WatchListView.Columns[index];
if (column.Name != _sortedColumn)
{
_sortReverse = false;
}
Watches.OrderWatches(column.Name, _sortReverse);
_sortedColumn = column.Name;
_sortReverse ^= true;
WatchListView.Refresh();
} }
#region Winform Events #region Winform Events

View File

@ -683,7 +683,7 @@ namespace BizHawk.MultiClient
} }
} }
public class WatchList : IEnumerable public class WatchList : IEnumerable<Watch>
{ {
private string _currentFilename = ""; private string _currentFilename = "";
@ -737,6 +737,159 @@ namespace BizHawk.MultiClient
} }
} }
public void OrderWatches(string column, bool reverse)
{
switch (column)
{
case NewRamWatch.ADDRESS:
if (reverse)
{
_watchList = _watchList
.OrderByDescending(x => x.Address ?? 0)
.ThenBy(x => x.Domain.Name)
.ThenBy(x => x.Size)
.ThenBy(x => x.Type)
.ThenBy(x => x.BigEndian)
.ToList();
}
else
{
_watchList = _watchList
.OrderBy(x => x.Address ?? 0)
.ThenBy(x => x.Domain.Name)
.ThenBy(x => x.Size)
.ThenBy(x => x.Type)
.ThenBy(x => x.BigEndian)
.ToList();
}
break;
case NewRamWatch.VALUE:
if (reverse)
{
_watchList = _watchList
.OrderByDescending(x => x.Value ?? 0)
.ThenBy(x => x.Address ?? 0)
.ThenBy(x => x.Size)
.ThenBy(x => x.Type)
.ThenBy(x => x.BigEndian)
.ToList();
}
else
{
_watchList = _watchList
.OrderBy(x => x.Value ?? 0)
.ThenBy(x => x.Address ?? 0)
.ThenBy(x => x.Size)
.ThenBy(x => x.Type)
.ThenBy(x => x.BigEndian)
.ToList();
}
break;
case NewRamWatch.PREV: //Note: these only work if all entries are detailed objects!
if (reverse)
{
_watchList = _watchList
.OrderByDescending(x => (x as IWatchDetails).PreviousStr)
.ThenBy(x => x.Address ?? 0)
.ThenBy(x => x.Size)
.ThenBy(x => x.Type)
.ToList();
}
else
{
_watchList = _watchList
.OrderBy(x => (x as IWatchDetails).PreviousStr)
.ThenBy(x => x.Address ?? 0)
.ThenBy(x => x.Size)
.ThenBy(x => x.Type)
.ToList();
}
break;
case NewRamWatch.DIFF:
if (reverse)
{
_watchList = _watchList
.OrderByDescending(x => (x as IWatchDetails).Diff)
.ThenBy(x => x.Address ?? 0)
.ThenBy(x => x.Size)
.ThenBy(x => x.Type)
.ToList();
}
else
{
_watchList = _watchList
.OrderBy(x => (x as IWatchDetails).Diff)
.ThenBy(x => x.Address ?? 0)
.ThenBy(x => x.Size)
.ThenBy(x => x.Type)
.ToList();
}
break;
case NewRamWatch.CHANGES:
if (reverse)
{
_watchList = _watchList
.OrderByDescending(x => (x as IWatchDetails).ChangeCount)
.ThenBy(x => x.Address ?? 0)
.ThenBy(x => x.Size)
.ThenBy(x => x.Type)
.ToList();
}
else
{
_watchList = _watchList
.OrderBy(x => (x as IWatchDetails).ChangeCount)
.ThenBy(x => x.Address ?? 0)
.ThenBy(x => x.Size)
.ThenBy(x => x.Type)
.ToList();
}
break;
case NewRamWatch.DOMAIN:
if (reverse)
{
_watchList = _watchList
.OrderByDescending(x => x.Domain)
.ThenBy(x => x.Address ?? 0)
.ThenBy(x => x.Size)
.ThenBy(x => x.Type)
.ThenBy(x => x.BigEndian)
.ToList();
}
else
{
_watchList = _watchList
.OrderBy(x => x.Domain)
.ThenBy(x => x.Address ?? 0)
.ThenBy(x => x.Size)
.ThenBy(x => x.Type)
.ThenBy(x => x.BigEndian)
.ToList();
}
break;
case NewRamWatch.NOTES:
if (reverse)
{
_watchList = _watchList
.OrderByDescending(x => (x as IWatchDetails).Notes)
.ThenBy(x => x.Address ?? 0)
.ThenBy(x => x.Size)
.ThenBy(x => x.Type)
.ToList();
}
else
{
_watchList = _watchList
.OrderBy(x => (x as IWatchDetails).Notes)
.ThenBy(x => x.Address ?? 0)
.ThenBy(x => x.Size)
.ThenBy(x => x.Type)
.ToList();
}
break;
}
}
public string AddressFormatStr public string AddressFormatStr
{ {
get get