2011-01-18 03:36:43 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Windows.Forms;
|
2011-01-18 17:17:14 +00:00
|
|
|
|
using System.IO;
|
2011-01-18 03:36:43 +00:00
|
|
|
|
|
2013-10-25 00:57:23 +00:00
|
|
|
|
using BizHawk.Client.Common;
|
|
|
|
|
|
2011-01-18 03:36:43 +00:00
|
|
|
|
namespace BizHawk.MultiClient
|
|
|
|
|
{
|
2011-06-16 02:39:35 +00:00
|
|
|
|
public partial class RamWatch : Form
|
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
public const string ADDRESS = "AddressColumn";
|
|
|
|
|
public const string VALUE = "ValueColumn";
|
|
|
|
|
public const string PREV = "PrevColumn";
|
|
|
|
|
public const string CHANGES = "ChangesColumn";
|
|
|
|
|
public const string DIFF = "DiffColumn";
|
|
|
|
|
public const string DOMAIN = "DomainColumn";
|
|
|
|
|
public const string NOTES = "NotesColumn";
|
|
|
|
|
|
|
|
|
|
private readonly Dictionary<string, int> DefaultColumnWidths = new Dictionary<string, int>
|
|
|
|
|
{
|
|
|
|
|
{ ADDRESS, 60 },
|
|
|
|
|
{ VALUE, 59 },
|
|
|
|
|
{ PREV, 59 },
|
|
|
|
|
{ CHANGES, 55 },
|
|
|
|
|
{ DIFF, 59 },
|
|
|
|
|
{ DOMAIN, 55 },
|
|
|
|
|
{ NOTES, 128 },
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
private int defaultWidth;
|
2013-04-14 23:56:45 +00:00
|
|
|
|
private int defaultHeight;
|
2013-10-20 18:02:43 +00:00
|
|
|
|
private readonly WatchList Watches = new WatchList(Global.Emulator.MainMemory);
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private string _sortedColumn = "";
|
|
|
|
|
private bool _sortReverse = false;
|
|
|
|
|
|
|
|
|
|
public RamWatch()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
WatchListView.QueryItemText += WatchListView_QueryItemText;
|
|
|
|
|
WatchListView.QueryItemBkColor += WatchListView_QueryItemBkColor;
|
|
|
|
|
WatchListView.VirtualMode = true;
|
|
|
|
|
Closing += (o, e) => SaveConfigSettings();
|
|
|
|
|
_sortedColumn = "";
|
|
|
|
|
_sortReverse = false;
|
2013-09-25 23:09:39 +00:00
|
|
|
|
|
|
|
|
|
TopMost = Global.Config.RamWatchAlwaysOnTop;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void UpdateValues()
|
|
|
|
|
{
|
|
|
|
|
if ((!IsHandleCreated || IsDisposed) && !Global.Config.DisplayRamWatch)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-19 13:53:38 +00:00
|
|
|
|
if (Watches.Any())
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
2013-09-19 13:53:38 +00:00
|
|
|
|
Watches.UpdateValues();
|
|
|
|
|
|
|
|
|
|
if (Global.Config.DisplayRamWatch)
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
2013-09-19 13:53:38 +00:00
|
|
|
|
for (int x = 0; x < Watches.Count; x++)
|
|
|
|
|
{
|
2013-10-20 18:02:43 +00:00
|
|
|
|
bool alert = Watches[x].IsSeparator ? false : Global.CheatList.IsActive(Watches[x].Domain, Watches[x].Address.Value);
|
2013-10-25 00:57:23 +00:00
|
|
|
|
GlobalWinF.OSD.AddGUIText(
|
2013-09-19 13:53:38 +00:00
|
|
|
|
Watches[x].ToString(),
|
|
|
|
|
Global.Config.DispRamWatchx,
|
|
|
|
|
(Global.Config.DispRamWatchy + (x * 14)),
|
|
|
|
|
alert,
|
|
|
|
|
Color.Black,
|
|
|
|
|
Color.White,
|
|
|
|
|
0
|
|
|
|
|
);
|
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
2013-04-14 23:56:45 +00:00
|
|
|
|
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-19 13:53:38 +00:00
|
|
|
|
if (!IsHandleCreated || IsDisposed) return;
|
|
|
|
|
|
|
|
|
|
WatchListView.BlazingFast = true;
|
|
|
|
|
WatchListView.Refresh();
|
|
|
|
|
WatchListView.BlazingFast = false;
|
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
2011-06-19 19:10:01 +00:00
|
|
|
|
|
2011-06-16 02:39:35 +00:00
|
|
|
|
public void Restart()
|
|
|
|
|
{
|
2013-04-14 23:56:45 +00:00
|
|
|
|
if ((!IsHandleCreated || IsDisposed) && !Global.Config.DisplayRamWatch)
|
2012-08-15 01:35:17 +00:00
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (!String.IsNullOrWhiteSpace(Watches.CurrentFileName))
|
2012-08-15 01:35:17 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Watches.Reload();
|
2012-08-15 01:35:17 +00:00
|
|
|
|
}
|
2011-08-20 15:41:33 +00:00
|
|
|
|
else
|
2012-08-15 01:35:17 +00:00
|
|
|
|
{
|
2011-08-20 15:41:33 +00:00
|
|
|
|
NewWatchList(true);
|
2012-08-15 01:35:17 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
public void AddWatch(Watch watch)
|
|
|
|
|
{
|
|
|
|
|
Watches.Add(watch);
|
|
|
|
|
DisplayWatches();
|
|
|
|
|
UpdateValues();
|
|
|
|
|
UpdateWatchCount();
|
|
|
|
|
Changes();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void LoadWatchFile(FileInfo file, bool append)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (file != null)
|
|
|
|
|
{
|
|
|
|
|
bool result = true;
|
|
|
|
|
if (Watches.Changes)
|
|
|
|
|
{
|
|
|
|
|
result = AskSave();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (result)
|
|
|
|
|
{
|
2013-09-28 02:42:56 +00:00
|
|
|
|
Watches.Load(file.FullName, append);
|
2013-09-14 02:31:21 +00:00
|
|
|
|
DisplayWatches();
|
|
|
|
|
UpdateMessageLabel();
|
|
|
|
|
UpdateWatchCount();
|
|
|
|
|
Global.Config.RecentWatches.Add(Watches.CurrentFileName);
|
2013-09-28 01:44:52 +00:00
|
|
|
|
SetMemoryDomain(GetDomainPos(Watches.Domain.ToString()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private int GetDomainPos(string name)
|
|
|
|
|
{
|
|
|
|
|
//Attempts to find the memory domain by name, if it fails, it defaults to index 0
|
2013-10-20 18:02:43 +00:00
|
|
|
|
for (int i = 0; i < Global.Emulator.MemoryDomains.Count; i++)
|
2013-09-28 01:44:52 +00:00
|
|
|
|
{
|
2013-10-20 18:02:43 +00:00
|
|
|
|
if (Global.Emulator.MemoryDomains[i].Name == name)
|
2013-09-28 01:44:52 +00:00
|
|
|
|
{
|
|
|
|
|
return i;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2013-09-28 01:44:52 +00:00
|
|
|
|
return 0;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
public List<int> AddressList
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
get
|
2012-08-15 01:35:17 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
return Watches.Where(x => !x.IsSeparator).Select(x => x.Address.Value).ToList();
|
2012-08-15 01:35:17 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
2011-09-12 23:08:42 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
public bool AskSave()
|
|
|
|
|
{
|
|
|
|
|
if (Global.Config.SupressAskSave) //User has elected to not be nagged
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
return true;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
2011-09-12 23:08:42 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (Watches.Changes)
|
2011-09-12 23:08:42 +00:00
|
|
|
|
{
|
2013-10-25 00:57:23 +00:00
|
|
|
|
GlobalWinF.Sound.StopSound();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
DialogResult result = MessageBox.Show("Save Changes?", "Ram Watch", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button3);
|
2013-10-25 00:57:23 +00:00
|
|
|
|
GlobalWinF.Sound.StartSound();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (result == DialogResult.Yes)
|
|
|
|
|
{
|
|
|
|
|
Watches.Save();
|
|
|
|
|
}
|
|
|
|
|
else if (result == DialogResult.No)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else if (result == DialogResult.Cancel)
|
2011-09-12 23:08:42 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
return false;
|
2011-09-12 23:08:42 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
return true;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
public void SaveConfigSettings()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
SaveColumnInfo();
|
|
|
|
|
Global.Config.RamWatchWndx = Location.X;
|
|
|
|
|
Global.Config.RamWatchWndy = Location.Y;
|
|
|
|
|
Global.Config.RamWatchWidth = Right - Left;
|
|
|
|
|
Global.Config.RamWatchHeight = Bottom - Top;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void SaveColumnInfo()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (WatchListView.Columns[ADDRESS] != null)
|
2012-09-10 02:37:44 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchColumnIndexes[ADDRESS] = WatchListView.Columns[ADDRESS].DisplayIndex;
|
|
|
|
|
Global.Config.RamWatchColumnWidths[ADDRESS] = WatchListView.Columns[ADDRESS].Width;
|
2012-09-10 02:37:44 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (WatchListView.Columns[VALUE] != null)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchColumnIndexes[VALUE] = WatchListView.Columns[VALUE].DisplayIndex;
|
|
|
|
|
Global.Config.RamWatchColumnWidths[VALUE] = WatchListView.Columns[VALUE].Width;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
2012-09-10 02:37:44 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (WatchListView.Columns[PREV] != null)
|
2012-09-10 02:37:44 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchColumnIndexes[PREV] = WatchListView.Columns[PREV].DisplayIndex;
|
|
|
|
|
Global.Config.RamWatchColumnWidths[PREV] = WatchListView.Columns[PREV].Width;
|
2012-09-10 02:37:44 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
|
|
|
|
if (WatchListView.Columns[CHANGES] != null)
|
2012-09-10 02:37:44 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchColumnIndexes[CHANGES] = WatchListView.Columns[CHANGES].DisplayIndex;
|
|
|
|
|
Global.Config.RamWatchColumnWidths[CHANGES] = WatchListView.Columns[CHANGES].Width;
|
2012-09-10 02:37:44 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
|
|
|
|
if (WatchListView.Columns[DIFF] != null)
|
2012-09-10 02:37:44 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchColumnIndexes[DIFF] = WatchListView.Columns[DIFF].DisplayIndex;
|
|
|
|
|
Global.Config.RamWatchColumnWidths[DIFF] = WatchListView.Columns[DIFF].Width;
|
2012-09-10 02:37:44 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
|
|
|
|
if (WatchListView.Columns[DOMAIN] != null)
|
2012-09-10 02:37:44 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchColumnIndexes[DOMAIN] = WatchListView.Columns[DOMAIN].DisplayIndex;
|
|
|
|
|
Global.Config.RamWatchColumnWidths[DOMAIN] = WatchListView.Columns[DOMAIN].Width;
|
2012-09-10 02:37:44 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
|
|
|
|
if (WatchListView.Columns[NOTES] != null)
|
2012-09-10 02:37:44 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchColumnIndexes[NOTES] = WatchListView.Columns[NOTES].Index;
|
|
|
|
|
Global.Config.RamWatchColumnWidths[NOTES] = WatchListView.Columns[NOTES].Width;
|
2012-09-10 02:37:44 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void OnClosing(CancelEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (!AskSave())
|
|
|
|
|
e.Cancel = true;
|
|
|
|
|
base.OnClosing(e);
|
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
|
|
|
|
private int GetColumnWidth(string columnName)
|
|
|
|
|
{
|
|
|
|
|
var width = Global.Config.RamWatchColumnWidths[columnName];
|
|
|
|
|
if (width == -1)
|
|
|
|
|
{
|
|
|
|
|
width = DefaultColumnWidths[columnName];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return width;
|
|
|
|
|
}
|
|
|
|
|
|
2011-06-16 02:39:35 +00:00
|
|
|
|
private void WatchListView_QueryItemBkColor(int index, int column, ref Color color)
|
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (index >= Watches.ItemCount)
|
2012-08-15 00:56:34 +00:00
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2011-08-27 13:56:06 +00:00
|
|
|
|
if (column == 0)
|
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (Watches[index].IsSeparator)
|
2012-09-03 23:42:00 +00:00
|
|
|
|
{
|
2013-04-14 23:56:45 +00:00
|
|
|
|
color = BackColor;
|
2012-09-03 23:42:00 +00:00
|
|
|
|
}
|
2013-10-20 18:02:43 +00:00
|
|
|
|
else if (Global.CheatList.IsActive(Watches.Domain, Watches[index].Address.Value))
|
2012-09-03 23:42:00 +00:00
|
|
|
|
{
|
2011-08-27 13:56:06 +00:00
|
|
|
|
color = Color.LightCyan;
|
2012-09-03 23:42:00 +00:00
|
|
|
|
}
|
2011-08-27 13:56:06 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void WatchListView_QueryItemText(int index, int column, out string text)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
|
|
|
|
text = "";
|
2012-09-03 23:42:00 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (index >= Watches.ItemCount || Watches[index].IsSeparator)
|
2012-08-15 00:56:34 +00:00
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
string columnName = WatchListView.Columns[column].Name;
|
2012-08-15 00:56:34 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
switch (columnName)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
case ADDRESS:
|
|
|
|
|
text = Watches[index].AddressString;
|
2012-09-10 02:37:44 +00:00
|
|
|
|
break;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
case VALUE:
|
2012-10-04 21:01:58 +00:00
|
|
|
|
text = Watches[index].ValueString;
|
2012-09-10 02:37:44 +00:00
|
|
|
|
break;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
case PREV:
|
2013-09-15 16:01:16 +00:00
|
|
|
|
text = Watches[index].PreviousStr;
|
2012-09-10 02:37:44 +00:00
|
|
|
|
break;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
case CHANGES:
|
2013-09-28 02:42:56 +00:00
|
|
|
|
if (!Watches[index].IsSeparator)
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
2013-09-28 02:42:56 +00:00
|
|
|
|
text = Watches[index].ChangeCount.ToString();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
2012-09-10 02:37:44 +00:00
|
|
|
|
break;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
case DIFF:
|
2013-09-28 02:42:56 +00:00
|
|
|
|
text = Watches[index].Diff;
|
2012-09-10 02:37:44 +00:00
|
|
|
|
break;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
case DOMAIN:
|
2012-09-10 02:37:44 +00:00
|
|
|
|
text = Watches[index].Domain.Name;
|
|
|
|
|
break;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
case NOTES:
|
2013-09-28 02:42:56 +00:00
|
|
|
|
text = Watches[index].Notes;
|
2012-09-10 02:37:44 +00:00
|
|
|
|
break;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void DisplayWatches()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
WatchListView.ItemCount = Watches.ItemCount;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void UpdateWatchCount()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
WatchCountLabel.Text = Watches.WatchCount.ToString() + (Watches.WatchCount == 1 ? " watch" : " watches");
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void SetPlatformAndMemoryDomainLabel()
|
|
|
|
|
{
|
2013-10-20 18:02:43 +00:00
|
|
|
|
MemDomainLabel.Text = Global.Emulator.SystemId + " " + Watches.Domain.Name;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void NewWatchList(bool suppressAsk)
|
|
|
|
|
{
|
|
|
|
|
bool result = true;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (Watches.Changes)
|
|
|
|
|
{
|
|
|
|
|
result = AskSave();
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-04-14 23:56:45 +00:00
|
|
|
|
if (result || suppressAsk)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2012-09-03 23:42:00 +00:00
|
|
|
|
Watches.Clear();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
DisplayWatches();
|
2012-06-09 21:57:00 +00:00
|
|
|
|
UpdateWatchCount();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
UpdateMessageLabel();
|
|
|
|
|
_sortReverse = false;
|
|
|
|
|
_sortedColumn = String.Empty;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
public void LoadFileFromRecent(string path)
|
2012-06-09 21:57:00 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
bool ask_result = true;
|
|
|
|
|
if (Watches.Changes)
|
|
|
|
|
{
|
|
|
|
|
ask_result = AskSave();
|
|
|
|
|
}
|
2012-06-09 21:57:00 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (ask_result)
|
|
|
|
|
{
|
2013-09-28 02:42:56 +00:00
|
|
|
|
bool load_result = Watches.Load(path, append: false);
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (!load_result)
|
|
|
|
|
{
|
2013-10-17 00:21:45 +00:00
|
|
|
|
ToolHelpers.HandleLoadError(Global.Config.RecentWatches, path);
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Global.Config.RecentWatches.Add(path);
|
|
|
|
|
DisplayWatches();
|
|
|
|
|
UpdateWatchCount();
|
|
|
|
|
UpdateMessageLabel();
|
|
|
|
|
Watches.Changes = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
2012-06-09 21:57:00 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void UpdateMessageLabel(bool saved = false)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
string message = String.Empty;
|
|
|
|
|
if (!String.IsNullOrWhiteSpace(Watches.CurrentFileName))
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (saved)
|
2012-06-10 17:45:20 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
message = Path.GetFileName(Watches.CurrentFileName) + " saved.";
|
2012-06-10 17:45:20 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
else
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
message = Path.GetFileName(Watches.CurrentFileName) + (Watches.Changes ? " *" : String.Empty);
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
2012-06-07 03:16:25 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
MessageLabel.Text = message;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void SetMemoryDomain(int pos)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-10-20 18:02:43 +00:00
|
|
|
|
if (pos < Global.Emulator.MemoryDomains.Count) //Sanity check
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-10-20 18:02:43 +00:00
|
|
|
|
Watches.Domain = Global.Emulator.MemoryDomains[pos];
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
|
|
|
|
SetPlatformAndMemoryDomainLabel();
|
|
|
|
|
Update();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void SelectAll()
|
2012-06-10 17:45:20 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
for (int i = 0; i < Watches.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
WatchListView.SelectItem(i, true);
|
|
|
|
|
}
|
2012-06-10 17:45:20 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void Changes()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Watches.Changes = true;
|
|
|
|
|
UpdateMessageLabel();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void MoveUp()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
ListView.SelectedIndexCollection indexes = WatchListView.SelectedIndices;
|
|
|
|
|
if (indexes.Count == 0 || indexes[0] == 0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
foreach (int index in indexes)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
var watch = Watches[index];
|
|
|
|
|
Watches.Remove(Watches[index]);
|
|
|
|
|
Watches.Insert(index - 1, watch);
|
|
|
|
|
|
|
|
|
|
//Note: here it will get flagged many times redundantly potentially,
|
|
|
|
|
//but this avoids it being flagged falsely when the user did not select an index
|
2011-06-16 02:39:35 +00:00
|
|
|
|
Changes();
|
|
|
|
|
}
|
2013-10-04 23:50:26 +00:00
|
|
|
|
|
|
|
|
|
var indices = new List<int>();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
for (int i = 0; i < indexes.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
indices.Add(indexes[i] - 1);
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
WatchListView.SelectedIndices.Clear();
|
|
|
|
|
foreach (int t in indices)
|
2012-09-10 02:03:24 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
WatchListView.SelectItem(t, true);
|
2012-09-10 02:03:24 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
DisplayWatches();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void MoveDown()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-10-04 23:50:26 +00:00
|
|
|
|
var indexes = WatchListView.SelectedIndices;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (indexes.Count == 0)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
return;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
foreach (int index in indexes)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
var watch = Watches[index];
|
2011-09-12 23:14:57 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (index < Watches.Count - 1)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Watches.Remove(Watches[index]);
|
|
|
|
|
Watches.Insert(index + 1, watch);
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-10-04 23:50:26 +00:00
|
|
|
|
//Note: here it will get flagged many times redundantly potentially,
|
2011-06-16 02:39:35 +00:00
|
|
|
|
//but this avoids it being flagged falsely when the user did not select an index
|
|
|
|
|
Changes();
|
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
2013-10-04 23:50:26 +00:00
|
|
|
|
var indices = new List<int>();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
for (int i = 0; i < indexes.Count; i++)
|
2012-09-04 00:33:47 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
indices.Add(indexes[i] + 1);
|
2012-09-04 00:33:47 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
|
|
|
|
WatchListView.SelectedIndices.Clear();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
foreach (int t in indices)
|
2012-09-04 00:33:47 +00:00
|
|
|
|
{
|
2013-04-14 23:56:45 +00:00
|
|
|
|
WatchListView.SelectItem(t, true);
|
2012-09-04 00:33:47 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
DisplayWatches();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void InsertSeparator()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
var indexes = WatchListView.SelectedIndices;
|
|
|
|
|
if (indexes.Count > 0)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Watches.Insert(indexes[0], SeparatorWatch.Instance);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Watches.Add(SeparatorWatch.Instance);
|
|
|
|
|
}
|
|
|
|
|
DisplayWatches();
|
|
|
|
|
Changes();
|
|
|
|
|
UpdateWatchCount();
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private Point GetPromptPoint()
|
|
|
|
|
{
|
|
|
|
|
return PointToScreen(new Point(WatchListView.Location.X, WatchListView.Location.Y));
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void AddNewWatch()
|
|
|
|
|
{
|
|
|
|
|
WatchEditor we = new WatchEditor
|
|
|
|
|
{
|
|
|
|
|
InitialLocation = GetPromptPoint()
|
|
|
|
|
};
|
|
|
|
|
we.SetWatch(Watches.Domain);
|
2013-10-25 00:57:23 +00:00
|
|
|
|
GlobalWinF.Sound.StopSound();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
we.ShowDialog();
|
2013-10-25 00:57:23 +00:00
|
|
|
|
GlobalWinF.Sound.StartSound();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (we.DialogResult == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
Watches.Add(we.Watches[0]);
|
2011-06-16 02:39:35 +00:00
|
|
|
|
Changes();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
UpdateWatchCount();
|
|
|
|
|
DisplayWatches();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void EditWatch(bool duplicate = false)
|
|
|
|
|
{
|
|
|
|
|
var indexes = WatchListView.SelectedIndices;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (indexes.Count > 0)
|
2013-04-14 23:56:45 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
WatchEditor we = new WatchEditor
|
|
|
|
|
{
|
|
|
|
|
InitialLocation = GetPromptPoint(),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (!SelectedWatches.Any())
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
we.SetWatch(Watches.Domain, SelectedWatches, duplicate ? WatchEditor.Mode.Duplicate : WatchEditor.Mode.Edit);
|
2013-10-25 00:57:23 +00:00
|
|
|
|
GlobalWinF.Sound.StopSound();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
var result = we.ShowDialog();
|
|
|
|
|
if (result == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
Changes();
|
|
|
|
|
if (duplicate)
|
|
|
|
|
{
|
|
|
|
|
Watches.AddRange(we.Watches);
|
|
|
|
|
DisplayWatches();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < we.Watches.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
Watches[indexes[i]] = we.Watches[i];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-10-25 00:57:23 +00:00
|
|
|
|
GlobalWinF.Sound.StartSound();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
UpdateValues();
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void PokeAddress()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (SelectedWatches.Any())
|
|
|
|
|
{
|
2013-09-14 03:13:22 +00:00
|
|
|
|
RamPoke poke = new RamPoke
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
|
|
|
|
InitialLocation = GetPromptPoint()
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (SelectedWatches.Any())
|
|
|
|
|
{
|
|
|
|
|
poke.SetWatch(SelectedWatches);
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-10-25 00:57:23 +00:00
|
|
|
|
GlobalWinF.Sound.StopSound();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
var result = poke.ShowDialog();
|
|
|
|
|
if (result == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
UpdateValues();
|
|
|
|
|
}
|
2013-10-25 00:57:23 +00:00
|
|
|
|
GlobalWinF.Sound.StartSound();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private List<Watch> SelectedWatches
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
var selected = new List<Watch>();
|
2013-09-29 16:09:48 +00:00
|
|
|
|
ListView.SelectedIndexCollection indices = WatchListView.SelectedIndices;
|
|
|
|
|
if (indices.Count > 0)
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
2013-09-29 16:09:48 +00:00
|
|
|
|
foreach (int index in indices)
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
|
|
|
|
if (!Watches[index].IsSeparator)
|
|
|
|
|
{
|
|
|
|
|
selected.Add(Watches[index]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return selected;
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void ColumnPositions()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 05:37:53 +00:00
|
|
|
|
List<KeyValuePair<string, int>> Columns =
|
|
|
|
|
Global.Config.RamWatchColumnIndexes
|
|
|
|
|
.Where(x => WatchListView.Columns.ContainsKey(x.Key))
|
|
|
|
|
.OrderBy(x => x.Value).ToList();
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < Columns.Count; i++)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 05:37:53 +00:00
|
|
|
|
if (WatchListView.Columns.ContainsKey(Columns[i].Key))
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 05:37:53 +00:00
|
|
|
|
WatchListView.Columns[Columns[i].Key].DisplayIndex = i;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void LoadConfigSettings()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
//Size and Positioning
|
|
|
|
|
defaultWidth = Size.Width; //Save these first so that the user can restore to its original size
|
|
|
|
|
defaultHeight = Size.Height;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (Global.Config.RamWatchSaveWindowPosition && Global.Config.RamWatchWndx >= 0 && Global.Config.RamWatchWndy >= 0)
|
2012-06-02 22:06:00 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Location = new Point(Global.Config.RamWatchWndx, Global.Config.RamWatchWndy);
|
2012-06-02 22:06:00 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
|
|
|
|
if (Global.Config.RamWatchWidth >= 0 && Global.Config.RamWatchHeight >= 0)
|
2011-06-26 18:56:56 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Size = new Size(Global.Config.RamWatchWidth, Global.Config.RamWatchHeight);
|
2011-06-26 18:56:56 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
|
|
|
|
LoadColumnInfo();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void LoadColumnInfo()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
WatchListView.Columns.Clear();
|
2013-10-04 16:06:08 +00:00
|
|
|
|
ToolHelpers.AddColumn(WatchListView, ADDRESS, true, GetColumnWidth(ADDRESS));
|
|
|
|
|
ToolHelpers.AddColumn(WatchListView, VALUE, true, GetColumnWidth(VALUE));
|
|
|
|
|
ToolHelpers.AddColumn(WatchListView, PREV, Global.Config.RamWatchShowPrevColumn, GetColumnWidth(PREV));
|
|
|
|
|
ToolHelpers.AddColumn(WatchListView, CHANGES, Global.Config.RamWatchShowChangeColumn, GetColumnWidth(CHANGES));
|
|
|
|
|
ToolHelpers.AddColumn(WatchListView, DIFF, Global.Config.RamWatchShowDiffColumn, GetColumnWidth(DIFF));
|
|
|
|
|
ToolHelpers.AddColumn(WatchListView, DOMAIN, Global.Config.RamWatchShowDomainColumn, GetColumnWidth(DOMAIN));
|
|
|
|
|
ToolHelpers.AddColumn(WatchListView, NOTES, true, GetColumnWidth(NOTES));
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
|
|
|
|
ColumnPositions();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void RemoveWatch()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
var indexes = WatchListView.SelectedIndices;
|
|
|
|
|
if (indexes.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
foreach (int index in indexes)
|
|
|
|
|
{
|
|
|
|
|
Watches.Remove(Watches[indexes[0]]); //index[0] used since each iteration will make this the correct list index
|
|
|
|
|
}
|
|
|
|
|
indexes.Clear();
|
|
|
|
|
DisplayWatches();
|
|
|
|
|
}
|
|
|
|
|
UpdateValues();
|
|
|
|
|
UpdateWatchCount();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private string GetColumnValue(string name, int index)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
switch (name)
|
|
|
|
|
{
|
|
|
|
|
default:
|
|
|
|
|
return String.Empty;
|
|
|
|
|
case ADDRESS:
|
|
|
|
|
return Watches[index].AddressString;
|
|
|
|
|
case VALUE:
|
|
|
|
|
return Watches[index].ValueString;
|
|
|
|
|
case PREV:
|
2013-09-15 16:01:16 +00:00
|
|
|
|
return Watches[index].PreviousStr;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
case CHANGES:
|
2013-09-28 02:42:56 +00:00
|
|
|
|
return Watches[index].ChangeCount.ToString();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
case DIFF:
|
2013-09-28 02:42:56 +00:00
|
|
|
|
return Watches[index].Diff;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
case DOMAIN:
|
|
|
|
|
return Watches[index].Domain.Name;
|
|
|
|
|
case NOTES:
|
2013-09-28 02:42:56 +00:00
|
|
|
|
return Watches[index].Notes;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void CopyWatchesToClipBoard()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
var indexes = WatchListView.SelectedIndices;
|
|
|
|
|
|
|
|
|
|
if (indexes.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
|
foreach (int index in indexes)
|
|
|
|
|
{
|
|
|
|
|
foreach (ColumnHeader column in WatchListView.Columns)
|
|
|
|
|
{
|
|
|
|
|
sb.Append(GetColumnValue(column.Name, index)).Append('\t');
|
|
|
|
|
}
|
|
|
|
|
sb.Remove(sb.Length - 1, 1);
|
|
|
|
|
sb.AppendLine();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (sb.Length > 0)
|
|
|
|
|
{
|
|
|
|
|
Clipboard.SetDataObject(sb.ToString());
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void OrderColumn(int index)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
var column = WatchListView.Columns[index];
|
|
|
|
|
if (column.Name != _sortedColumn)
|
|
|
|
|
{
|
|
|
|
|
_sortReverse = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Watches.OrderWatches(column.Name, _sortReverse);
|
|
|
|
|
|
|
|
|
|
_sortedColumn = column.Name;
|
|
|
|
|
_sortReverse ^= true;
|
|
|
|
|
WatchListView.Refresh();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
#region Winform Events
|
|
|
|
|
|
|
|
|
|
private void NewRamWatch_Load(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
LoadConfigSettings();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void NewRamWatch_Activated(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
WatchListView.Refresh();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void NewRamWatch_DragEnter(object sender, DragEventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.Copy : DragDropEffects.None;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void NewRamWatch_DragDrop(object sender, DragEventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
string[] filePaths = (string[])e.Data.GetData(DataFormats.FileDrop);
|
|
|
|
|
if (Path.GetExtension(filePaths[0]) == (".wch"))
|
|
|
|
|
{
|
2013-09-28 02:42:56 +00:00
|
|
|
|
Watches.Load(filePaths[0], append:false);
|
2013-09-14 02:31:21 +00:00
|
|
|
|
DisplayWatches();
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void NewRamWatch_Enter(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
WatchListView.Focus();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
/*************File***********************/
|
2011-06-16 02:39:35 +00:00
|
|
|
|
private void filesToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
|
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
saveToolStripMenuItem.Enabled = Watches.Changes;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void newListToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
NewWatchList(false);
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
2013-09-07 01:38:24 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void openToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
bool append = sender == appendFileToolStripMenuItem;
|
2013-09-22 12:50:47 +00:00
|
|
|
|
LoadWatchFile(WatchList.GetFileFromUser(Watches.CurrentFileName), append);
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (Watches.Save())
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
UpdateMessageLabel(saved: true);
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
bool result = Watches.SaveAs();
|
|
|
|
|
if (result)
|
|
|
|
|
{
|
|
|
|
|
UpdateMessageLabel(saved: true);
|
|
|
|
|
Global.Config.RecentWatches.Add(Watches.CurrentFileName);
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void recentToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
recentToolStripMenuItem.DropDownItems.Clear();
|
2013-10-17 00:21:45 +00:00
|
|
|
|
recentToolStripMenuItem.DropDownItems.AddRange(
|
|
|
|
|
ToolHelpers.GenerateRecentMenu(Global.Config.RecentWatches, LoadFileFromRecent)
|
|
|
|
|
);
|
|
|
|
|
recentToolStripMenuItem.DropDownItems.Add(
|
|
|
|
|
ToolHelpers.GenerateAutoLoadItem(Global.Config.RecentWatches)
|
|
|
|
|
);
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (!AskSave())
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
return;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Close();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
/*************Watches***********************/
|
|
|
|
|
private void watchesToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
|
|
|
|
ListView.SelectedIndexCollection indexes = WatchListView.SelectedIndices;
|
|
|
|
|
if (indexes.Count > 0)
|
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
editWatchToolStripMenuItem.Enabled = true;
|
|
|
|
|
duplicateWatchToolStripMenuItem.Enabled = true;
|
|
|
|
|
removeWatchToolStripMenuItem.Enabled = true;
|
|
|
|
|
moveUpToolStripMenuItem.Enabled = true;
|
|
|
|
|
moveDownToolStripMenuItem.Enabled = true;
|
|
|
|
|
pokeAddressToolStripMenuItem.Enabled = true;
|
|
|
|
|
freezeAddressToolStripMenuItem.Enabled = true;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
2012-09-04 00:33:47 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
editWatchToolStripMenuItem.Enabled = false;
|
|
|
|
|
duplicateWatchToolStripMenuItem.Enabled = false;
|
|
|
|
|
removeWatchToolStripMenuItem.Enabled = false;
|
|
|
|
|
moveUpToolStripMenuItem.Enabled = false;
|
|
|
|
|
moveDownToolStripMenuItem.Enabled = false;
|
|
|
|
|
pokeAddressToolStripMenuItem.Enabled = false;
|
|
|
|
|
freezeAddressToolStripMenuItem.Enabled = false;
|
2012-09-04 00:33:47 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void memoryDomainsToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
memoryDomainsToolStripMenuItem.DropDownItems.Clear();
|
|
|
|
|
memoryDomainsToolStripMenuItem.DropDownItems.AddRange(ToolHelpers.GenerateMemoryDomainMenuItems(SetMemoryDomain, Watches.Domain.Name));
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void newWatchToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
|
|
|
|
AddNewWatch();
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void editWatchToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
EditWatch();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void removeWatchToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
RemoveWatch();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void duplicateWatchToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
EditWatch(duplicate: true);
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void pokeAddressToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
PokeAddress();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void freezeAddressToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-10-14 01:37:09 +00:00
|
|
|
|
bool allCheats = true;
|
|
|
|
|
foreach (var watch in SelectedWatches)
|
|
|
|
|
{
|
|
|
|
|
if (!watch.IsSeparator)
|
|
|
|
|
{
|
2013-10-20 18:02:43 +00:00
|
|
|
|
if (!Global.CheatList.IsActive(watch.Domain, watch.Address.Value))
|
2013-10-14 01:37:09 +00:00
|
|
|
|
{
|
|
|
|
|
allCheats = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (allCheats)
|
|
|
|
|
{
|
|
|
|
|
ToolHelpers.UnfreezeAddress(SelectedWatches);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ToolHelpers.FreezeAddress(SelectedWatches);
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void insertSeparatorToolStripMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
InsertSeparator();
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void clearChangeCountsToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Watches.ClearChangeCounts();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void moveUpToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
MoveUp();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void moveDownToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
MoveDown();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void selectAllToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
SelectAll();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-26 00:51:08 +00:00
|
|
|
|
/*************Columns***********************/
|
|
|
|
|
private void ColumnsSubMenu_DropDownOpened(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-26 00:51:08 +00:00
|
|
|
|
ShowPreviousMenuItem.Checked = Global.Config.RamWatchShowPrevColumn;
|
|
|
|
|
ShowChangesMenuItem.Checked = Global.Config.RamWatchShowChangeColumn;
|
|
|
|
|
ShowDiffMenuItem.Checked = Global.Config.RamWatchShowDiffColumn;
|
|
|
|
|
ShowDomainMenuItem.Checked = Global.Config.RamWatchShowDomainColumn;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void showPreviousValueToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchShowPrevColumn ^= true;
|
|
|
|
|
SaveColumnInfo();
|
|
|
|
|
LoadColumnInfo();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void showChangeCountsToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchShowChangeColumn ^= true;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
SaveColumnInfo();
|
|
|
|
|
LoadColumnInfo();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void diffToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchShowDiffColumn ^= true;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
SaveColumnInfo();
|
|
|
|
|
LoadColumnInfo();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void domainToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchShowDomainColumn ^= true;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
SaveColumnInfo();
|
|
|
|
|
LoadColumnInfo();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
/*************Options***********************/
|
|
|
|
|
private void optionsToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
displayWatchesOnScreenToolStripMenuItem.Checked = Global.Config.DisplayRamWatch;
|
|
|
|
|
saveWindowPositionToolStripMenuItem.Checked = Global.Config.RamWatchSaveWindowPosition;
|
2013-09-25 23:09:39 +00:00
|
|
|
|
AlwaysOnTopMenuItem.Checked = Global.Config.RamWatchAlwaysOnTop;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void definePreviousValueAsToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
lastChangeToolStripMenuItem.Checked = false;
|
|
|
|
|
previousFrameToolStripMenuItem.Checked = false;
|
|
|
|
|
originalToolStripMenuItem.Checked = false;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
switch (Global.Config.RamWatchDefinePrevious)
|
2013-04-14 23:56:45 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
default:
|
|
|
|
|
case Watch.PreviousType.LastFrame:
|
|
|
|
|
previousFrameToolStripMenuItem.Checked = true;
|
|
|
|
|
break;
|
|
|
|
|
case Watch.PreviousType.LastChange:
|
|
|
|
|
lastChangeToolStripMenuItem.Checked = true;
|
|
|
|
|
break;
|
2013-09-20 01:18:55 +00:00
|
|
|
|
case Watch.PreviousType.Original:
|
2013-09-14 02:31:21 +00:00
|
|
|
|
originalToolStripMenuItem.Checked = true;
|
|
|
|
|
break;
|
2013-04-14 23:56:45 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void previousFrameToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchDefinePrevious = Watch.PreviousType.LastFrame;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void lastChangeToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchDefinePrevious = Watch.PreviousType.LastChange;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void originalToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-20 01:18:55 +00:00
|
|
|
|
Global.Config.RamWatchDefinePrevious = Watch.PreviousType.Original;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void displayWatchesOnScreenToolStripMenuItem_Click(object sender, EventArgs e)
|
2012-07-04 23:11:17 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.DisplayRamWatch ^= true;
|
2012-09-15 14:35:13 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (!Global.Config.DisplayRamWatch)
|
2012-09-15 14:35:13 +00:00
|
|
|
|
{
|
2013-10-25 00:57:23 +00:00
|
|
|
|
GlobalWinF.OSD.ClearGUIText();
|
2012-09-15 14:35:13 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
UpdateValues();
|
2012-09-15 14:35:13 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void saveWindowPositionToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchSaveWindowPosition ^= true;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-25 23:09:39 +00:00
|
|
|
|
private void AlwaysOnTopMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.RamWatchAlwaysOnTop ^= true;
|
|
|
|
|
TopMost = Global.Config.RamWatchAlwaysOnTop;
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void restoreWindowSizeToolStripMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Size = new Size(defaultWidth, defaultHeight);
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchColumnIndexes = new Dictionary<string, int>
|
|
|
|
|
{
|
|
|
|
|
{ "AddressColumn", 0 },
|
|
|
|
|
{ "ValueColumn", 1 },
|
|
|
|
|
{ "PrevColumn", 2 },
|
|
|
|
|
{ "ChangesColumn", 3 },
|
|
|
|
|
{ "DiffColumn", 4 },
|
|
|
|
|
{ "DomainColumn", 5 },
|
|
|
|
|
{ "NotesColumn", 6 },
|
|
|
|
|
};
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
ColumnPositions();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchShowChangeColumn = true;
|
|
|
|
|
Global.Config.RamWatchShowDomainColumn = true;
|
|
|
|
|
Global.Config.RamWatchShowPrevColumn = false;
|
|
|
|
|
Global.Config.RamWatchShowDiffColumn = false;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
WatchListView.Columns[ADDRESS].Width = DefaultColumnWidths[ADDRESS];
|
|
|
|
|
WatchListView.Columns[VALUE].Width = DefaultColumnWidths[VALUE];
|
|
|
|
|
//WatchListView.Columns[PREV].Width = DefaultColumnWidths[PREV];
|
|
|
|
|
WatchListView.Columns[CHANGES].Width = DefaultColumnWidths[CHANGES];
|
|
|
|
|
//WatchListView.Columns[DIFF].Width = DefaultColumnWidths[DIFF];
|
|
|
|
|
WatchListView.Columns[DOMAIN].Width = DefaultColumnWidths[DOMAIN];
|
|
|
|
|
WatchListView.Columns[NOTES].Width = DefaultColumnWidths[NOTES];
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.DisplayRamWatch = false;
|
|
|
|
|
Global.Config.RamWatchSaveWindowPosition = true;
|
2013-09-26 00:51:08 +00:00
|
|
|
|
Global.Config.RamWatchAlwaysOnTop = TopMost = false;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
LoadColumnInfo();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
/*************Context Menu***********************/
|
|
|
|
|
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
|
2011-08-07 04:19:49 +00:00
|
|
|
|
{
|
|
|
|
|
ListView.SelectedIndexCollection indexes = WatchListView.SelectedIndices;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
EditContextMenuItem.Visible =
|
|
|
|
|
RemoveContextMenuItem.Visible =
|
|
|
|
|
DuplicateContextMenuItem.Visible =
|
|
|
|
|
PokeContextMenuItem.Visible =
|
|
|
|
|
FreezeContextMenuItem.Visible =
|
|
|
|
|
Separator6.Visible =
|
|
|
|
|
InsertSeperatorContextMenuItem.Visible =
|
|
|
|
|
MoveUpContextMenuItem.Visible =
|
|
|
|
|
MoveDownContextMenuItem.Visible =
|
2013-09-27 01:02:28 +00:00
|
|
|
|
Separator6.Visible =
|
|
|
|
|
toolStripSeparator4.Visible =
|
2013-09-14 02:31:21 +00:00
|
|
|
|
indexes.Count > 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool allCheats = true;
|
|
|
|
|
foreach (int i in indexes)
|
|
|
|
|
{
|
|
|
|
|
if (!Watches[i].IsSeparator)
|
2011-08-07 04:19:49 +00:00
|
|
|
|
{
|
2013-10-20 18:02:43 +00:00
|
|
|
|
if (!Global.CheatList.IsActive(Watches[i].Domain, Watches[i].Address.Value))
|
2011-08-07 04:19:49 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
allCheats = false;
|
2011-08-07 04:19:49 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if (allCheats)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
FreezeContextMenuItem.Text = "&Unfreeze address";
|
|
|
|
|
FreezeContextMenuItem.Image = Properties.Resources.Unfreeze;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
2013-04-14 23:56:45 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
FreezeContextMenuItem.Text = "&Freeze address";
|
|
|
|
|
FreezeContextMenuItem.Image = Properties.Resources.Freeze;
|
2013-04-14 23:56:45 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
ShowChangeCountsContextMenuItem.Text = Global.Config.RamWatchShowChangeColumn ? "Hide change counts" : "Show change counts";
|
|
|
|
|
ShowPreviousValueContextMenuItem.Text = Global.Config.RamWatchShowPrevColumn ? "Hide previous value" : "Show previous value";
|
|
|
|
|
ShowDiffContextMenuItem.Text = Global.Config.RamWatchShowDiffColumn ? "Hide difference value" : "Show difference value";
|
|
|
|
|
ShowDomainContextMenuItem.Text = Global.Config.RamWatchShowDomainColumn ? "Hide domain" : "Show domain";
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-10-20 18:02:43 +00:00
|
|
|
|
UnfreezeAllContextMenuItem.Visible = Global.CheatList.ActiveCount > 0;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
ViewInHexEditorContextMenuItem.Visible = SelectedWatches.Count == 1;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void UnfreezeAllContextMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-10-06 16:40:51 +00:00
|
|
|
|
ToolHelpers.UnfreezeAll();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
2011-06-19 19:10:01 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void ViewInHexEditorContextMenuItem_Click(object sender, EventArgs e)
|
2011-06-19 19:10:01 +00:00
|
|
|
|
{
|
2013-09-29 16:09:48 +00:00
|
|
|
|
var selected = SelectedWatches;
|
|
|
|
|
if (selected.Any())
|
2012-09-10 02:37:44 +00:00
|
|
|
|
{
|
2013-10-25 00:57:23 +00:00
|
|
|
|
GlobalWinF.MainForm.LoadHexEditor();
|
2013-09-29 16:09:48 +00:00
|
|
|
|
|
|
|
|
|
if (selected.Select(x => x.Domain).Distinct().Count() > 1)
|
|
|
|
|
{
|
|
|
|
|
ToolHelpers.ViewInHexEditor(selected[0].Domain, new List<int> { selected.First().Address.Value });
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ToolHelpers.ViewInHexEditor(selected[0].Domain, selected.Select(x => x.Address.Value));
|
|
|
|
|
}
|
2012-09-10 02:37:44 +00:00
|
|
|
|
}
|
2011-06-19 19:10:01 +00:00
|
|
|
|
}
|
2011-06-26 19:13:52 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
/*************ListView Events***********************/
|
2011-09-16 23:29:36 +00:00
|
|
|
|
|
|
|
|
|
private void WatchListView_KeyDown(object sender, KeyEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.KeyCode == Keys.Delete && !e.Control && !e.Alt && !e.Shift)
|
|
|
|
|
{
|
|
|
|
|
RemoveWatch();
|
|
|
|
|
}
|
|
|
|
|
else if (e.KeyCode == Keys.A && e.Control && !e.Alt && !e.Shift) //Select All
|
|
|
|
|
{
|
2012-09-03 23:42:00 +00:00
|
|
|
|
for (int x = 0; x < Watches.Count; x++)
|
2011-09-16 23:29:36 +00:00
|
|
|
|
{
|
|
|
|
|
WatchListView.SelectItem(x, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
2013-03-17 03:21:58 +00:00
|
|
|
|
else if (e.KeyCode == Keys.C && e.Control && !e.Alt && !e.Shift) //Copy
|
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
CopyWatchesToClipBoard();
|
2013-03-17 03:21:58 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
else if (e.KeyCode == Keys.Enter && !e.Control && !e.Alt && !e.Shift) //Enter
|
2012-07-05 01:58:33 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
EditWatch();
|
2012-07-05 01:58:33 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2012-09-15 14:35:13 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void WatchListView_MouseDoubleClick(object sender, MouseEventArgs e)
|
2012-09-15 14:53:34 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
EditWatch();
|
2012-09-15 14:53:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void WatchListView_ColumnClick(object sender, ColumnClickEventArgs e)
|
2012-09-15 14:53:34 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
OrderColumn(e.Column);
|
2012-09-15 14:53:34 +00:00
|
|
|
|
}
|
2012-09-23 15:37:25 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private void WatchListView_ColumnReordered(object sender, ColumnReorderedEventArgs e)
|
2012-09-23 15:37:25 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
Global.Config.RamWatchColumnIndexes[ADDRESS] = WatchListView.Columns[ADDRESS].DisplayIndex;
|
|
|
|
|
Global.Config.RamWatchColumnIndexes[VALUE] = WatchListView.Columns[VALUE].DisplayIndex;
|
|
|
|
|
Global.Config.RamWatchColumnIndexes[PREV] = WatchListView.Columns[ADDRESS].DisplayIndex;
|
|
|
|
|
Global.Config.RamWatchColumnIndexes[CHANGES] = WatchListView.Columns[CHANGES].DisplayIndex;
|
|
|
|
|
Global.Config.RamWatchColumnIndexes[DIFF] = WatchListView.Columns[DIFF].DisplayIndex;
|
|
|
|
|
Global.Config.RamWatchColumnIndexes[DOMAIN] = WatchListView.Columns[DOMAIN].DisplayIndex;
|
|
|
|
|
Global.Config.RamWatchColumnIndexes[NOTES] = WatchListView.Columns[NOTES].DisplayIndex;
|
2012-09-23 15:37:25 +00:00
|
|
|
|
}
|
2013-03-17 03:21:58 +00:00
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
#endregion
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|