Hex Editor - make freezing a range of addresses not slow

This commit is contained in:
adelikat 2014-03-01 18:04:21 +00:00
parent 1fbc833361
commit 75b9b132b6
2 changed files with 33 additions and 14 deletions

View File

@ -131,7 +131,8 @@ namespace BizHawk.Client.Common
public void AddRange(IEnumerable<Cheat> cheats)
{
_cheatList.AddRange(cheats);
_cheatList.AddRange(
cheats.Where(c => !_cheatList.Contains(c)));
Changes = true;
}
@ -187,7 +188,7 @@ namespace BizHawk.Client.Common
public void RemoveRange(IEnumerable<Cheat> cheats)
{
foreach (var cheat in cheats)
foreach (var cheat in cheats.ToList())
{
_cheatList.Remove(cheat);
}

View File

@ -791,6 +791,34 @@ namespace BizHawk.Client.EmuHawk
}
}
private void FreezeSecondaries()
{
var cheats = new List<Cheat>();
foreach (var address in _secondaryHighlightedAddresses)
{
var watch = Watch.GenerateWatch(
_domain,
address,
WatchSize,
Watch.DisplayType.Hex,
string.Empty,
_bigEndian);
cheats.Add(new Cheat(
watch,
watch.Value ?? 0));
}
Global.CheatList.AddRange(cheats);
}
private void UnfreezeSecondaries()
{
Global.CheatList.RemoveRange(
Global.CheatList.Where(
cheat => !cheat.IsSeparator && cheat.Domain == _domain && _secondaryHighlightedAddresses.Contains(cheat.Address.Value)));
}
private void SaveFileBinary(string path)
{
var file = new FileInfo(path);
@ -1348,22 +1376,12 @@ namespace BizHawk.Client.EmuHawk
if (IsFrozen(HighlightedAddress.Value))
{
UnFreezeAddress(HighlightedAddress.Value);
UnfreezeSecondaries();
}
else
{
FreezeAddress(HighlightedAddress.Value);
}
}
foreach (var addr in _secondaryHighlightedAddresses)
{
if (IsFrozen(addr))
{
UnFreezeAddress(addr);
}
else
{
FreezeAddress(addr);
FreezeSecondaries();
}
}