2011-01-18 03:36:43 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Drawing;
|
2013-11-28 22:06:38 +00:00
|
|
|
|
using System.IO;
|
2011-01-18 03:36:43 +00:00
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
2014-09-01 18:43:41 +00:00
|
|
|
|
using BizHawk.Emulation.Common;
|
|
|
|
|
using BizHawk.Emulation.Common.IEmulatorExtensions;
|
|
|
|
|
|
2013-10-25 00:57:23 +00:00
|
|
|
|
using BizHawk.Client.Common;
|
2014-07-27 15:22:30 +00:00
|
|
|
|
using BizHawk.Client.EmuHawk.WinFormExtensions;
|
2014-07-28 01:51:11 +00:00
|
|
|
|
using BizHawk.Client.EmuHawk.ToolExtensions;
|
2013-10-25 00:57:23 +00:00
|
|
|
|
|
2013-11-03 03:54:37 +00:00
|
|
|
|
namespace BizHawk.Client.EmuHawk
|
2011-01-18 03:36:43 +00:00
|
|
|
|
{
|
2013-11-02 19:28:45 +00:00
|
|
|
|
public partial class RamWatch : Form, IToolForm
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private readonly Dictionary<string, int> _defaultColumnWidths = new Dictionary<string, int>
|
2014-01-01 02:16:47 +00:00
|
|
|
|
{
|
2013-10-25 13:04:30 +00:00
|
|
|
|
{ WatchList.ADDRESS, 60 },
|
|
|
|
|
{ WatchList.VALUE, 59 },
|
|
|
|
|
{ WatchList.PREV, 59 },
|
|
|
|
|
{ WatchList.CHANGES, 55 },
|
|
|
|
|
{ WatchList.DIFF, 59 },
|
|
|
|
|
{ WatchList.DOMAIN, 55 },
|
|
|
|
|
{ WatchList.NOTES, 128 },
|
2013-09-14 02:31:21 +00:00
|
|
|
|
};
|
|
|
|
|
|
2014-09-28 16:39:53 +00:00
|
|
|
|
private WatchList _watches;
|
2013-11-28 22:06:38 +00:00
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private int _defaultWidth;
|
|
|
|
|
private int _defaultHeight;
|
2014-01-30 14:29:34 +00:00
|
|
|
|
private string _sortedColumn = string.Empty;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private bool _sortReverse;
|
2014-07-02 14:37:02 +00:00
|
|
|
|
private bool _paused = false;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
2014-12-15 03:19:23 +00:00
|
|
|
|
[RequiredService]
|
|
|
|
|
private IMemoryDomains _core { get; set; }
|
2014-12-15 22:25:06 +00:00
|
|
|
|
[RequiredService]
|
|
|
|
|
private IEmulator _emu { get; set; }
|
2014-12-13 21:54:59 +00:00
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
public RamWatch()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
WatchListView.QueryItemText += WatchListView_QueryItemText;
|
|
|
|
|
WatchListView.QueryItemBkColor += WatchListView_QueryItemBkColor;
|
|
|
|
|
WatchListView.VirtualMode = true;
|
|
|
|
|
Closing += (o, e) =>
|
|
|
|
|
{
|
2014-08-19 19:24:17 +00:00
|
|
|
|
if (AskSaveChanges())
|
2013-11-28 22:06:38 +00:00
|
|
|
|
{
|
|
|
|
|
SaveConfigSettings();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
e.Cancel = true;
|
|
|
|
|
}
|
|
|
|
|
};
|
2014-01-30 14:29:34 +00:00
|
|
|
|
|
|
|
|
|
_sortedColumn = string.Empty;
|
2013-11-28 22:06:38 +00:00
|
|
|
|
_sortReverse = false;
|
|
|
|
|
|
2014-01-30 14:29:34 +00:00
|
|
|
|
TopMost = Global.Config.RamWatchSettings.TopMost;
|
2013-11-28 22:06:38 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private IEnumerable<int> SelectedIndices
|
|
|
|
|
{
|
|
|
|
|
get { return WatchListView.SelectedIndices.Cast<int>(); }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private IEnumerable<Watch> SelectedItems
|
|
|
|
|
{
|
|
|
|
|
get { return SelectedIndices.Select(index => _watches[index]); }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private IEnumerable<Watch> SelectedWatches
|
|
|
|
|
{
|
|
|
|
|
get { return SelectedItems.Where(x => !x.IsSeparator); }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region Properties
|
|
|
|
|
|
2014-07-03 01:46:14 +00:00
|
|
|
|
public IEnumerable<Watch> Watches
|
2013-11-28 22:06:38 +00:00
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2014-07-03 01:46:14 +00:00
|
|
|
|
return _watches.Where(x => !x.IsSeparator);
|
2013-11-28 22:06:38 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool UpdateBefore
|
|
|
|
|
{
|
2014-04-25 20:02:57 +00:00
|
|
|
|
get { return false; }
|
2013-11-28 22:06:38 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
2013-11-20 01:17:01 +00:00
|
|
|
|
|
|
|
|
|
#region API
|
|
|
|
|
|
|
|
|
|
public void AddWatch(Watch watch)
|
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
_watches.Add(watch);
|
|
|
|
|
WatchListView.ItemCount = _watches.ItemCount;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
UpdateValues();
|
|
|
|
|
UpdateWatchCount();
|
|
|
|
|
Changes();
|
|
|
|
|
}
|
|
|
|
|
|
2014-08-19 19:24:17 +00:00
|
|
|
|
public bool AskSaveChanges()
|
2013-11-20 01:17:01 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
if (_watches.Changes)
|
2013-11-20 01:17:01 +00:00
|
|
|
|
{
|
|
|
|
|
GlobalWin.Sound.StopSound();
|
2013-11-25 02:08:45 +00:00
|
|
|
|
var result = MessageBox.Show("Save Changes?", "Ram Watch", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button3);
|
2013-11-20 01:17:01 +00:00
|
|
|
|
GlobalWin.Sound.StartSound();
|
|
|
|
|
if (result == DialogResult.Yes)
|
|
|
|
|
{
|
2014-03-23 16:58:54 +00:00
|
|
|
|
if (string.IsNullOrWhiteSpace(_watches.CurrentFileName))
|
|
|
|
|
{
|
|
|
|
|
SaveAs();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_watches.Save();
|
|
|
|
|
}
|
2013-11-20 01:17:01 +00:00
|
|
|
|
}
|
|
|
|
|
else if (result == DialogResult.No)
|
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
_watches.Changes = false;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else if (result == DialogResult.Cancel)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void LoadFileFromRecent(string path)
|
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
var ask_result = true;
|
|
|
|
|
if (_watches.Changes)
|
2013-11-20 01:17:01 +00:00
|
|
|
|
{
|
2014-08-19 19:24:17 +00:00
|
|
|
|
ask_result = AskSaveChanges();
|
2013-11-20 01:17:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ask_result)
|
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
var load_result = _watches.Load(path, append: false);
|
2013-11-20 01:17:01 +00:00
|
|
|
|
if (!load_result)
|
|
|
|
|
{
|
2014-07-28 01:51:11 +00:00
|
|
|
|
Global.Config.RecentWatches.HandleLoadError(path);
|
2013-11-20 01:17:01 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Global.Config.RecentWatches.Add(path);
|
2013-11-25 02:08:45 +00:00
|
|
|
|
WatchListView.ItemCount = _watches.ItemCount;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
UpdateWatchCount();
|
2014-05-04 16:01:46 +00:00
|
|
|
|
UpdateStatusBar();
|
2013-11-25 02:08:45 +00:00
|
|
|
|
_watches.Changes = false;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void LoadWatchFile(FileInfo file, bool append)
|
|
|
|
|
{
|
|
|
|
|
if (file != null)
|
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
var result = true;
|
|
|
|
|
if (_watches.Changes)
|
2013-11-20 01:17:01 +00:00
|
|
|
|
{
|
2014-08-19 19:24:17 +00:00
|
|
|
|
result = AskSaveChanges();
|
2013-11-20 01:17:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (result)
|
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
_watches.Load(file.FullName, append);
|
|
|
|
|
WatchListView.ItemCount = _watches.ItemCount;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
UpdateWatchCount();
|
2013-11-25 02:08:45 +00:00
|
|
|
|
Global.Config.RecentWatches.Add(_watches.CurrentFileName);
|
|
|
|
|
SetMemoryDomain(_watches.Domain.ToString());
|
2014-05-04 16:01:46 +00:00
|
|
|
|
UpdateStatusBar();
|
2013-11-20 01:17:01 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2013-11-02 19:28:45 +00:00
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
public void Restart()
|
|
|
|
|
{
|
|
|
|
|
if ((!IsHandleCreated || IsDisposed) && !Global.Config.DisplayRamWatch)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-30 14:29:34 +00:00
|
|
|
|
if (!string.IsNullOrWhiteSpace(_watches.CurrentFileName))
|
2013-11-20 01:17:01 +00:00
|
|
|
|
{
|
2014-10-11 19:49:22 +00:00
|
|
|
|
_watches.RefreshDomans(_core, _core.MemoryDomains.MainMemory);
|
2013-11-25 02:08:45 +00:00
|
|
|
|
_watches.Reload();
|
2014-10-11 19:49:22 +00:00
|
|
|
|
SetPlatformAndMemoryDomainLabel();
|
2014-05-04 16:01:46 +00:00
|
|
|
|
UpdateStatusBar();
|
2013-11-20 01:17:01 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2014-12-15 22:25:06 +00:00
|
|
|
|
_watches = new WatchList(_core, _core.MemoryDomains.MainMemory, _emu.SystemId);
|
2013-11-20 01:17:01 +00:00
|
|
|
|
NewWatchList(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
public void UpdateValues()
|
|
|
|
|
{
|
2014-07-02 14:37:02 +00:00
|
|
|
|
if (_paused)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
if ((!IsHandleCreated || IsDisposed) && !Global.Config.DisplayRamWatch)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-25 02:08:45 +00:00
|
|
|
|
if (_watches.Any())
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
_watches.UpdateValues();
|
2013-09-19 13:53:38 +00:00
|
|
|
|
|
|
|
|
|
if (Global.Config.DisplayRamWatch)
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
2014-04-27 13:01:10 +00:00
|
|
|
|
for (var i = 0; i < _watches.Count; i++)
|
2013-09-19 13:53:38 +00:00
|
|
|
|
{
|
2014-04-27 13:01:10 +00:00
|
|
|
|
var frozen = !_watches[i].IsSeparator && Global.CheatList.IsActive(_watches[i].Domain, _watches[i].Address ?? 0);
|
2013-11-03 16:07:58 +00:00
|
|
|
|
GlobalWin.OSD.AddGUIText(
|
2014-04-27 13:01:10 +00:00
|
|
|
|
_watches[i].ToString(),
|
2013-09-19 13:53:38 +00:00
|
|
|
|
Global.Config.DispRamWatchx,
|
2014-04-27 13:01:10 +00:00
|
|
|
|
Global.Config.DispRamWatchy + (i * 14),
|
2013-09-19 13:53:38 +00:00
|
|
|
|
Color.Black,
|
2014-04-27 13:01:10 +00:00
|
|
|
|
frozen ? Color.Cyan : Color.White,
|
2013-09-19 13:53:38 +00:00
|
|
|
|
0
|
|
|
|
|
);
|
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
2013-04-14 23:56:45 +00:00
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
if (!IsHandleCreated || IsDisposed)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
2013-09-19 13:53:38 +00:00
|
|
|
|
|
|
|
|
|
WatchListView.BlazingFast = true;
|
2014-07-30 21:31:13 +00:00
|
|
|
|
WatchListView.UseCustomBackground = NeedsBackground;
|
2014-07-30 22:31:52 +00:00
|
|
|
|
WatchListView.Invalidate();
|
2013-09-19 13:53:38 +00:00
|
|
|
|
WatchListView.BlazingFast = false;
|
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
2011-06-19 19:10:01 +00:00
|
|
|
|
|
2014-07-30 21:31:13 +00:00
|
|
|
|
private bool NeedsBackground
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
foreach(var watch in _watches)
|
|
|
|
|
{
|
2014-08-02 01:36:06 +00:00
|
|
|
|
if (watch.IsSeparator)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-30 21:31:13 +00:00
|
|
|
|
if (Global.CheatList.IsActive(_watches.Domain, watch.Address ?? 0))
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (watch.IsOutOfRange)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-07-25 01:55:21 +00:00
|
|
|
|
public void FastUpdate()
|
|
|
|
|
{
|
|
|
|
|
if (_paused)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((!IsHandleCreated || IsDisposed) && !Global.Config.DisplayRamWatch)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (_watches.Any())
|
|
|
|
|
{
|
|
|
|
|
_watches.UpdateValues();
|
|
|
|
|
|
|
|
|
|
if (Global.Config.DisplayRamWatch)
|
|
|
|
|
{
|
|
|
|
|
for (var i = 0; i < _watches.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
var frozen = !_watches[i].IsSeparator && Global.CheatList.IsActive(_watches[i].Domain, _watches[i].Address ?? 0);
|
|
|
|
|
GlobalWin.OSD.AddGUIText(
|
|
|
|
|
_watches[i].ToString(),
|
|
|
|
|
Global.Config.DispRamWatchx,
|
|
|
|
|
Global.Config.DispRamWatchy + (i * 14),
|
|
|
|
|
Color.Black,
|
|
|
|
|
frozen ? Color.Cyan : Color.White,
|
|
|
|
|
0
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Private Methods
|
|
|
|
|
|
|
|
|
|
private void Changes()
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
_watches.Changes = true;
|
2014-05-04 16:01:46 +00:00
|
|
|
|
UpdateStatusBar();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private void ColumnPositions()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
var columns = Global.Config.RamWatchColumnIndexes
|
2013-11-20 01:17:01 +00:00
|
|
|
|
.Where(x => WatchListView.Columns.ContainsKey(x.Key))
|
2013-11-28 22:06:38 +00:00
|
|
|
|
.OrderBy(x => x.Value)
|
|
|
|
|
.ToList();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
for (var i = 0; i < columns.Count; i++)
|
2013-11-20 01:17:01 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
if (WatchListView.Columns.ContainsKey(columns[i].Key))
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
WatchListView.Columns[columns[i].Key].DisplayIndex = i;
|
2013-09-28 01:44:52 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private void CopyWatchesToClipBoard()
|
2013-09-28 01:44:52 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
var indexes = SelectedIndices.ToList();
|
2013-11-20 01:17:01 +00:00
|
|
|
|
|
2013-11-25 02:08:45 +00:00
|
|
|
|
if (indexes.Any())
|
2013-09-28 01:44:52 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
var sb = new StringBuilder();
|
|
|
|
|
foreach (var index in indexes)
|
2013-09-28 01:44:52 +00:00
|
|
|
|
{
|
2013-11-20 01:17:01 +00:00
|
|
|
|
foreach (ColumnHeader column in WatchListView.Columns)
|
|
|
|
|
{
|
|
|
|
|
sb.Append(GetColumnValue(column.Name, index)).Append('\t');
|
|
|
|
|
}
|
2013-11-28 22:06:38 +00:00
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
sb.Remove(sb.Length - 1, 1);
|
|
|
|
|
sb.AppendLine();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
if (sb.Length > 0)
|
|
|
|
|
{
|
|
|
|
|
Clipboard.SetDataObject(sb.ToString());
|
|
|
|
|
}
|
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-11-20 01:17:01 +00:00
|
|
|
|
private void EditWatch(bool duplicate = false)
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
var indexes = SelectedIndices.ToList();
|
2011-09-12 23:08:42 +00:00
|
|
|
|
|
2013-11-25 02:08:45 +00:00
|
|
|
|
if (SelectedWatches.Any())
|
2011-09-12 23:08:42 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
var we = new WatchEditor
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
2014-07-28 02:31:51 +00:00
|
|
|
|
InitialLocation = this.ChildPointToScreen(WatchListView)
|
2013-11-20 01:17:01 +00:00
|
|
|
|
};
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
we.SetWatch(_watches.Domain, SelectedWatches, duplicate ? WatchEditor.Mode.Duplicate : WatchEditor.Mode.Edit);
|
2013-11-25 02:08:45 +00:00
|
|
|
|
|
2013-11-28 22:39:00 +00:00
|
|
|
|
var result = we.ShowHawkDialog();
|
2013-11-20 01:17:01 +00:00
|
|
|
|
if (result == DialogResult.OK)
|
2011-09-12 23:08:42 +00:00
|
|
|
|
{
|
2013-11-20 01:17:01 +00:00
|
|
|
|
Changes();
|
|
|
|
|
if (duplicate)
|
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
_watches.AddRange(we.Watches);
|
|
|
|
|
WatchListView.ItemCount = _watches.ItemCount;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
for (var i = 0; i < we.Watches.Count; i++)
|
2013-11-20 01:17:01 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
_watches[indexes[i]] = we.Watches[i];
|
2013-11-20 01:17:01 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2011-09-12 23:08:42 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
UpdateValues();
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private string GetColumnValue(string name, int index)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-20 01:17:01 +00:00
|
|
|
|
switch (name)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-20 01:17:01 +00:00
|
|
|
|
default:
|
2014-01-30 14:29:34 +00:00
|
|
|
|
return string.Empty;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
case WatchList.ADDRESS:
|
2013-11-25 02:08:45 +00:00
|
|
|
|
return _watches[index].AddressString;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
case WatchList.VALUE:
|
2013-11-25 02:08:45 +00:00
|
|
|
|
return _watches[index].ValueString;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
case WatchList.PREV:
|
2013-11-25 02:08:45 +00:00
|
|
|
|
return _watches[index].PreviousStr;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
case WatchList.CHANGES:
|
2013-11-25 02:08:45 +00:00
|
|
|
|
return _watches[index].ChangeCount.ToString();
|
2013-11-20 01:17:01 +00:00
|
|
|
|
case WatchList.DIFF:
|
2013-11-25 02:08:45 +00:00
|
|
|
|
return _watches[index].Diff;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
case WatchList.DOMAIN:
|
2013-11-25 02:08:45 +00:00
|
|
|
|
return _watches[index].Domain.Name;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
case WatchList.NOTES:
|
2013-11-25 02:08:45 +00:00
|
|
|
|
return _watches[index].Notes;
|
2012-09-10 02:37:44 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
private int GetColumnWidth(string columnName)
|
|
|
|
|
{
|
|
|
|
|
var width = Global.Config.RamWatchColumnWidths[columnName];
|
|
|
|
|
if (width == -1)
|
|
|
|
|
{
|
2013-11-20 01:17:01 +00:00
|
|
|
|
width = _defaultColumnWidths[columnName];
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return width;
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private void LoadColumnInfo()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-20 01:17:01 +00:00
|
|
|
|
WatchListView.Columns.Clear();
|
2014-07-28 02:10:31 +00:00
|
|
|
|
WatchListView.AddColumn(WatchList.ADDRESS, Global.Config.RamWatchShowAddressColumn, GetColumnWidth(WatchList.ADDRESS));
|
|
|
|
|
WatchListView.AddColumn(WatchList.VALUE, true, GetColumnWidth(WatchList.VALUE));
|
|
|
|
|
WatchListView.AddColumn(WatchList.PREV, Global.Config.RamWatchShowPrevColumn, GetColumnWidth(WatchList.PREV));
|
|
|
|
|
WatchListView.AddColumn(WatchList.CHANGES, Global.Config.RamWatchShowChangeColumn, GetColumnWidth(WatchList.CHANGES));
|
|
|
|
|
WatchListView.AddColumn(WatchList.DIFF, Global.Config.RamWatchShowDiffColumn, GetColumnWidth(WatchList.DIFF));
|
|
|
|
|
WatchListView.AddColumn(WatchList.DOMAIN, Global.Config.RamWatchShowDomainColumn, GetColumnWidth(WatchList.DOMAIN));
|
|
|
|
|
WatchListView.AddColumn(WatchList.NOTES, true, GetColumnWidth(WatchList.NOTES));
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
ColumnPositions();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private void LoadConfigSettings()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
// Size and Positioning
|
2014-01-30 22:32:29 +00:00
|
|
|
|
_defaultWidth = Size.Width;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
_defaultHeight = Size.Height;
|
|
|
|
|
|
2014-01-30 14:29:34 +00:00
|
|
|
|
if (Global.Config.RamWatchSettings.UseWindowPosition)
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
2014-01-30 22:32:29 +00:00
|
|
|
|
Location = Global.Config.RamWatchSettings.WindowPosition;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2014-01-30 14:29:34 +00:00
|
|
|
|
if (Global.Config.RamWatchSettings.UseWindowSize)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2014-01-30 22:32:29 +00:00
|
|
|
|
Size = Global.Config.RamWatchSettings.WindowSize;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
2013-11-20 01:17:01 +00:00
|
|
|
|
|
|
|
|
|
LoadColumnInfo();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private void NewWatchList(bool suppressAsk)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
var result = true;
|
|
|
|
|
if (_watches.Changes)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2014-08-19 19:24:17 +00:00
|
|
|
|
result = AskSaveChanges();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
if (result || suppressAsk)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
_watches.Clear();
|
|
|
|
|
WatchListView.ItemCount = _watches.ItemCount;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
UpdateWatchCount();
|
2014-05-04 16:01:46 +00:00
|
|
|
|
UpdateStatusBar();
|
2013-11-20 01:17:01 +00:00
|
|
|
|
_sortReverse = false;
|
2014-01-30 14:29:34 +00:00
|
|
|
|
_sortedColumn = string.Empty;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
2013-11-20 01:17:01 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private void OrderColumn(int index)
|
|
|
|
|
{
|
|
|
|
|
var column = WatchListView.Columns[index];
|
|
|
|
|
if (column.Name != _sortedColumn)
|
2012-09-04 00:33:47 +00:00
|
|
|
|
{
|
2013-11-20 01:17:01 +00:00
|
|
|
|
_sortReverse = false;
|
2012-09-04 00:33:47 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-11-25 02:08:45 +00:00
|
|
|
|
_watches.OrderWatches(column.Name, _sortReverse);
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
_sortedColumn = column.Name;
|
|
|
|
|
_sortReverse ^= true;
|
|
|
|
|
WatchListView.Refresh();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private void SaveAs()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
var result = _watches.SaveAs(ToolHelpers.GetWatchSaveFileFromUser(_watches.CurrentFileName));
|
2013-11-20 01:17:01 +00:00
|
|
|
|
if (result)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2014-05-04 16:01:46 +00:00
|
|
|
|
UpdateStatusBar(saved: true);
|
2013-11-25 02:08:45 +00:00
|
|
|
|
Global.Config.RecentWatches.Add(_watches.CurrentFileName);
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private void SaveColumnInfo()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-20 01:17:01 +00:00
|
|
|
|
if (WatchListView.Columns[WatchList.ADDRESS] != null)
|
|
|
|
|
{
|
2014-06-20 17:41:40 +00:00
|
|
|
|
Global.Config.RamWatchColumnIndexes[WatchList.ADDRESS] = WatchListView.Columns[WatchList.ADDRESS].DisplayIndex;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
Global.Config.RamWatchColumnWidths[WatchList.ADDRESS] = WatchListView.Columns[WatchList.ADDRESS].Width;
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
if (WatchListView.Columns[WatchList.VALUE] != null)
|
2012-06-02 22:06:00 +00:00
|
|
|
|
{
|
2014-06-20 17:41:40 +00:00
|
|
|
|
Global.Config.RamWatchColumnIndexes[WatchList.VALUE] = WatchListView.Columns[WatchList.VALUE].DisplayIndex;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
Global.Config.RamWatchColumnWidths[WatchList.VALUE] = WatchListView.Columns[WatchList.VALUE].Width;
|
2012-06-02 22:06:00 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
if (WatchListView.Columns[WatchList.PREV] != null)
|
2011-06-26 18:56:56 +00:00
|
|
|
|
{
|
2014-06-20 17:41:40 +00:00
|
|
|
|
Global.Config.RamWatchColumnIndexes[WatchList.PREV] = WatchListView.Columns[WatchList.PREV].DisplayIndex;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
Global.Config.RamWatchColumnWidths[WatchList.PREV] = WatchListView.Columns[WatchList.PREV].Width;
|
2011-06-26 18:56:56 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
if (WatchListView.Columns[WatchList.CHANGES] != null)
|
|
|
|
|
{
|
2014-06-20 17:41:40 +00:00
|
|
|
|
Global.Config.RamWatchColumnIndexes[WatchList.CHANGES] = WatchListView.Columns[WatchList.CHANGES].DisplayIndex;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
Global.Config.RamWatchColumnWidths[WatchList.CHANGES] = WatchListView.Columns[WatchList.CHANGES].Width;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (WatchListView.Columns[WatchList.DIFF] != null)
|
|
|
|
|
{
|
2014-06-20 17:41:40 +00:00
|
|
|
|
Global.Config.RamWatchColumnIndexes[WatchList.DIFF] = WatchListView.Columns[WatchList.DIFF].DisplayIndex;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
Global.Config.RamWatchColumnWidths[WatchList.DIFF] = WatchListView.Columns[WatchList.DIFF].Width;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (WatchListView.Columns[WatchList.DOMAIN] != null)
|
|
|
|
|
{
|
2014-06-20 17:41:40 +00:00
|
|
|
|
Global.Config.RamWatchColumnIndexes[WatchList.DOMAIN] = WatchListView.Columns[WatchList.DOMAIN].DisplayIndex;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
Global.Config.RamWatchColumnWidths[WatchList.DOMAIN] = WatchListView.Columns[WatchList.DOMAIN].Width;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (WatchListView.Columns[WatchList.NOTES] != null)
|
|
|
|
|
{
|
2014-06-20 18:38:08 +00:00
|
|
|
|
Global.Config.RamWatchColumnIndexes[WatchList.NOTES] = WatchListView.Columns[WatchList.NOTES].DisplayIndex;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
Global.Config.RamWatchColumnWidths[WatchList.NOTES] = WatchListView.Columns[WatchList.NOTES].Width;
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private void SaveConfigSettings()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-20 01:17:01 +00:00
|
|
|
|
SaveColumnInfo();
|
2014-01-30 14:29:34 +00:00
|
|
|
|
Global.Config.RamWatchSettings.Wndx = Location.X;
|
|
|
|
|
Global.Config.RamWatchSettings.Wndy = Location.Y;
|
|
|
|
|
Global.Config.RamWatchSettings.Width = Right - Left;
|
|
|
|
|
Global.Config.RamWatchSettings.Height = Bottom - Top;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private void SetMemoryDomain(string name)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2014-09-28 16:39:53 +00:00
|
|
|
|
_watches.Domain = _core.MemoryDomains[name];
|
2013-11-20 01:17:01 +00:00
|
|
|
|
SetPlatformAndMemoryDomainLabel();
|
|
|
|
|
Update();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private void SetPlatformAndMemoryDomainLabel()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2014-12-15 22:25:06 +00:00
|
|
|
|
MemDomainLabel.Text = _emu.SystemId + " " + _watches.Domain.Name;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
|
2014-05-04 16:01:46 +00:00
|
|
|
|
private void UpdateStatusBar(bool saved = false)
|
2013-11-20 01:17:01 +00:00
|
|
|
|
{
|
2014-01-30 14:29:34 +00:00
|
|
|
|
var message = string.Empty;
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(_watches.CurrentFileName))
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
2013-11-20 01:17:01 +00:00
|
|
|
|
if (saved)
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
message = Path.GetFileName(_watches.CurrentFileName) + " saved.";
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
2013-11-20 01:17:01 +00:00
|
|
|
|
else
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
2014-01-30 14:29:34 +00:00
|
|
|
|
message = Path.GetFileName(_watches.CurrentFileName) + (_watches.Changes ? " *" : string.Empty);
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2013-11-20 01:17:01 +00:00
|
|
|
|
|
2014-08-07 22:48:10 +00:00
|
|
|
|
ErrorIconButton.Visible = _watches.Where(watch => !watch.IsSeparator).Any(watch => (watch.Address ?? 0) >= watch.Domain.Size);
|
2014-05-04 15:30:18 +00:00
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
MessageLabel.Text = message;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private void UpdateWatchCount()
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
WatchCountLabel.Text = _watches.WatchCount + (_watches.WatchCount == 1 ? " watch" : " watches");
|
2013-11-20 01:17:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void WatchListView_QueryItemBkColor(int index, int column, ref Color color)
|
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
if (index >= _watches.ItemCount)
|
2013-09-14 02:31:21 +00:00
|
|
|
|
{
|
2013-11-20 01:17:01 +00:00
|
|
|
|
return;
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
if (column == 0)
|
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
if (_watches[index].IsSeparator)
|
2013-11-20 01:17:01 +00:00
|
|
|
|
{
|
|
|
|
|
color = BackColor;
|
|
|
|
|
}
|
2014-05-04 15:30:18 +00:00
|
|
|
|
else if (_watches[index].Address.Value >= _watches[index].Domain.Size)
|
|
|
|
|
{
|
|
|
|
|
color = Color.PeachPuff;
|
|
|
|
|
}
|
2013-11-25 02:08:45 +00:00
|
|
|
|
else if (Global.CheatList.IsActive(_watches.Domain, _watches[index].Address ?? 0))
|
2013-11-20 01:17:01 +00:00
|
|
|
|
{
|
|
|
|
|
color = Color.LightCyan;
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
private void WatchListView_QueryItemText(int index, int column, out string text)
|
2013-10-27 07:54:00 +00:00
|
|
|
|
{
|
2014-01-30 14:29:34 +00:00
|
|
|
|
text = string.Empty;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
|
2013-11-25 02:08:45 +00:00
|
|
|
|
if (index >= _watches.ItemCount || _watches[index].IsSeparator)
|
2013-10-27 07:54:00 +00:00
|
|
|
|
{
|
2013-11-20 01:17:01 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
2013-11-28 22:06:38 +00:00
|
|
|
|
|
2013-11-25 02:08:45 +00:00
|
|
|
|
var columnName = WatchListView.Columns[column].Name;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
|
|
|
|
|
switch (columnName)
|
|
|
|
|
{
|
|
|
|
|
case WatchList.ADDRESS:
|
2013-11-25 02:08:45 +00:00
|
|
|
|
text = _watches[index].AddressString;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
break;
|
|
|
|
|
case WatchList.VALUE:
|
2013-11-25 02:08:45 +00:00
|
|
|
|
text = _watches[index].ValueString;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
break;
|
|
|
|
|
case WatchList.PREV:
|
2013-11-25 02:08:45 +00:00
|
|
|
|
text = _watches[index].PreviousStr;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
break;
|
|
|
|
|
case WatchList.CHANGES:
|
2013-11-25 02:08:45 +00:00
|
|
|
|
if (!_watches[index].IsSeparator)
|
2013-11-20 01:17:01 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
text = _watches[index].ChangeCount.ToString();
|
2013-11-20 01:17:01 +00:00
|
|
|
|
}
|
2013-11-28 22:06:38 +00:00
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
break;
|
|
|
|
|
case WatchList.DIFF:
|
2013-11-25 02:08:45 +00:00
|
|
|
|
text = _watches[index].Diff;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
break;
|
|
|
|
|
case WatchList.DOMAIN:
|
2013-11-25 02:08:45 +00:00
|
|
|
|
text = _watches[index].Domain.Name;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
break;
|
|
|
|
|
case WatchList.NOTES:
|
2013-11-25 02:08:45 +00:00
|
|
|
|
text = _watches[index].Notes;
|
2013-11-20 01:17:01 +00:00
|
|
|
|
break;
|
2013-10-27 07:54:00 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-30 14:29:34 +00:00
|
|
|
|
private void RefreshFloatingWindowControl()
|
|
|
|
|
{
|
|
|
|
|
Owner = Global.Config.RamWatchSettings.FloatingWindow ? null : GlobalWin.MainForm;
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-20 01:17:01 +00:00
|
|
|
|
#endregion
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
#region Winform Events
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
#region File Menu
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void FileSubMenu_DropDownOpened(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
SaveMenuItem.Enabled = _watches.Changes;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void NewListMenuItem_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-11-28 22:06:38 +00:00
|
|
|
|
private void OpenMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
var append = sender == AppendMenuItem;
|
2013-11-25 02:08:45 +00:00
|
|
|
|
LoadWatchFile(ToolHelpers.GetWatchFileFromUser(_watches.CurrentFileName), append);
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void SaveMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2014-01-30 14:29:34 +00:00
|
|
|
|
if (!string.IsNullOrWhiteSpace(_watches.CurrentFileName))
|
2013-10-25 13:27:20 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
if (_watches.Save())
|
2013-10-27 07:54:00 +00:00
|
|
|
|
{
|
2014-05-04 16:01:46 +00:00
|
|
|
|
UpdateStatusBar(saved: true);
|
2013-10-27 07:54:00 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SaveAs();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void SaveAsMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-10-27 07:54:00 +00:00
|
|
|
|
SaveAs();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void RecentSubMenu_DropDownOpened(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
RecentSubMenu.DropDownItems.Clear();
|
|
|
|
|
RecentSubMenu.DropDownItems.AddRange(
|
2014-07-28 01:51:11 +00:00
|
|
|
|
Global.Config.RecentWatches.RecentMenu(LoadFileFromRecent, true));
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void ExitMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
Close();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Watch
|
|
|
|
|
|
|
|
|
|
private void WatchesSubMenu_DropDownOpened(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
EditWatchMenuItem.Enabled =
|
|
|
|
|
DuplicateWatchMenuItem.Enabled =
|
|
|
|
|
RemoveWatchMenuItem.Enabled =
|
|
|
|
|
MoveUpMenuItem.Enabled =
|
|
|
|
|
MoveDownMenuItem.Enabled =
|
|
|
|
|
PokeAddressMenuItem.Enabled =
|
|
|
|
|
FreezeAddressMenuItem.Enabled =
|
2013-11-25 02:08:45 +00:00
|
|
|
|
SelectedIndices.Any();
|
2014-07-02 14:37:02 +00:00
|
|
|
|
|
|
|
|
|
PauseMenuItem.Text = _paused ? "Unpause" : "Pause";
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void MemoryDomainsSubMenu_DropDownOpened(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
MemoryDomainsSubMenu.DropDownItems.Clear();
|
2014-07-28 02:10:31 +00:00
|
|
|
|
MemoryDomainsSubMenu.DropDownItems.AddRange(
|
2014-09-28 16:39:53 +00:00
|
|
|
|
_core.MemoryDomains.MenuItems(SetMemoryDomain, _watches.Domain.Name)
|
2014-07-28 02:10:31 +00:00
|
|
|
|
.ToArray());
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void NewWatchMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
var we = new WatchEditor
|
|
|
|
|
{
|
2014-07-28 02:31:51 +00:00
|
|
|
|
InitialLocation = this.ChildPointToScreen(WatchListView)
|
2013-11-28 22:06:38 +00:00
|
|
|
|
};
|
|
|
|
|
we.SetWatch(_watches.Domain);
|
2013-11-28 22:39:00 +00:00
|
|
|
|
we.ShowHawkDialog();
|
2013-11-28 22:06:38 +00:00
|
|
|
|
if (we.DialogResult == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
_watches.Add(we.Watches[0]);
|
|
|
|
|
Changes();
|
|
|
|
|
UpdateWatchCount();
|
|
|
|
|
WatchListView.ItemCount = _watches.ItemCount;
|
|
|
|
|
UpdateValues();
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void EditWatchMenuItem_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-11-28 22:06:38 +00:00
|
|
|
|
private void RemoveWatchMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
var items = SelectedItems.ToList();
|
|
|
|
|
if (items.Any())
|
|
|
|
|
{
|
|
|
|
|
foreach (var item in items)
|
|
|
|
|
{
|
|
|
|
|
_watches.Remove(item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
WatchListView.ItemCount = _watches.ItemCount;
|
|
|
|
|
UpdateValues();
|
|
|
|
|
UpdateWatchCount();
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void DuplicateWatchMenuItem_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-11-28 22:06:38 +00:00
|
|
|
|
private void PokeAddressMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
if (SelectedWatches.Any())
|
|
|
|
|
{
|
|
|
|
|
var poke = new RamPoke
|
|
|
|
|
{
|
2014-07-28 02:31:51 +00:00
|
|
|
|
InitialLocation = this.ChildPointToScreen(WatchListView)
|
2013-11-28 22:06:38 +00:00
|
|
|
|
};
|
|
|
|
|
|
2014-04-25 20:29:18 +00:00
|
|
|
|
poke.SetWatch(SelectedWatches);
|
2013-11-28 22:06:38 +00:00
|
|
|
|
|
2013-11-28 22:39:00 +00:00
|
|
|
|
if (poke.ShowHawkDialog() == DialogResult.OK)
|
2013-11-28 22:06:38 +00:00
|
|
|
|
{
|
|
|
|
|
UpdateValues();
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void FreezeAddressMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-12-03 19:50:10 +00:00
|
|
|
|
var allCheats = SelectedWatches.All(x => Global.CheatList.IsActive(x.Domain, x.Address ?? 0));
|
2013-10-14 01:37:09 +00:00
|
|
|
|
if (allCheats)
|
|
|
|
|
{
|
2014-07-28 01:55:20 +00:00
|
|
|
|
SelectedWatches.UnfreezeAll();
|
2013-10-14 01:37:09 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2014-07-28 01:55:20 +00:00
|
|
|
|
SelectedWatches.FreezeAll();
|
2013-10-14 01:37:09 +00:00
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void InsertSeparatorMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
var indexes = SelectedIndices.ToList();
|
|
|
|
|
if (indexes.Any())
|
|
|
|
|
{
|
|
|
|
|
_watches.Insert(indexes[0], SeparatorWatch.Instance);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_watches.Add(SeparatorWatch.Instance);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
WatchListView.ItemCount = _watches.ItemCount;
|
|
|
|
|
Changes();
|
|
|
|
|
UpdateWatchCount();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void ClearChangeCountsMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
_watches.ClearChangeCounts();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void MoveUpMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
var indexes = SelectedIndices.ToList();
|
|
|
|
|
if (!indexes.Any() || indexes[0] == 0)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
foreach (var index in indexes)
|
|
|
|
|
{
|
|
|
|
|
var watch = _watches[index];
|
|
|
|
|
_watches.Remove(watch);
|
|
|
|
|
_watches.Insert(index - 1, watch);
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
Changes();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
var indices = indexes.Select(t => t - 1).ToList();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
WatchListView.SelectedIndices.Clear();
|
|
|
|
|
foreach (var t in indices)
|
|
|
|
|
{
|
|
|
|
|
WatchListView.SelectItem(t, true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
WatchListView.ItemCount = _watches.ItemCount;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void MoveDownMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
var indices = SelectedIndices.ToList();
|
|
|
|
|
if (indices.Count == 0 || indices.Last() == _watches.Count - 1)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
for (var i = indices.Count - 1; i >= 0; i--)
|
|
|
|
|
{
|
|
|
|
|
var watch = _watches[indices[i]];
|
|
|
|
|
_watches.Remove(watch);
|
|
|
|
|
_watches.Insert(indices[i] + 1, watch);
|
|
|
|
|
}
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
var newindices = indices.Select(t => t + 1).ToList();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
WatchListView.SelectedIndices.Clear();
|
|
|
|
|
foreach (var t in newindices)
|
|
|
|
|
{
|
|
|
|
|
WatchListView.SelectItem(t, true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Changes();
|
|
|
|
|
WatchListView.ItemCount = _watches.ItemCount;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void SelectAllMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2014-02-15 19:15:04 +00:00
|
|
|
|
WatchListView.SelectAll();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2014-07-02 14:37:02 +00:00
|
|
|
|
private void PauseMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
_paused ^= true;
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Options
|
|
|
|
|
|
|
|
|
|
private void OptionsSubMenu_DropDownOpened(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
WatchesOnScreenMenuItem.Checked = Global.Config.DisplayRamWatch;
|
2014-01-30 14:29:34 +00:00
|
|
|
|
SaveWindowPositionMenuItem.Checked = Global.Config.RamWatchSettings.SaveWindowPosition;
|
|
|
|
|
AlwaysOnTopMenuItem.Checked = Global.Config.RamWatchSettings.TopMost;
|
|
|
|
|
FloatingWindowMenuItem.Checked = Global.Config.RamWatchSettings.FloatingWindow;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void DefinePreviousValueSubMenu_DropDownOpened(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
PreviousFrameMenuItem.Checked = Global.Config.RamWatchDefinePrevious == Watch.PreviousType.LastFrame;
|
|
|
|
|
LastChangeMenuItem.Checked = Global.Config.RamWatchDefinePrevious == Watch.PreviousType.LastChange;
|
|
|
|
|
OriginalMenuItem.Checked = Global.Config.RamWatchDefinePrevious == Watch.PreviousType.Original;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void PreviousFrameMenuItem_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-11-28 22:06:38 +00:00
|
|
|
|
private void LastChangeMenuItem_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-11-28 22:06:38 +00:00
|
|
|
|
private void OriginalMenuItem_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-11-28 22:06:38 +00:00
|
|
|
|
private void WatchesOnScreenMenuItem_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-11-03 16:07:58 +00:00
|
|
|
|
GlobalWin.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-11-28 22:06:38 +00:00
|
|
|
|
private void SaveWindowPositionMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2014-01-30 14:29:34 +00:00
|
|
|
|
Global.Config.RamWatchSettings.SaveWindowPosition ^= 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)
|
|
|
|
|
{
|
2014-01-30 14:29:34 +00:00
|
|
|
|
Global.Config.RamWatchSettings.TopMost ^= true;
|
|
|
|
|
TopMost = Global.Config.RamWatchSettings.TopMost;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void FloatingWindowMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.RamWatchSettings.FloatingWindow ^= true;
|
|
|
|
|
RefreshFloatingWindowControl();
|
2013-09-25 23:09:39 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void RestoreWindowSizeMenuItem_Click(object sender, EventArgs e)
|
2011-06-16 02:39:35 +00:00
|
|
|
|
{
|
2013-11-20 01:17:01 +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>
|
2014-06-20 18:05:32 +00:00
|
|
|
|
{
|
|
|
|
|
{ "AddressColumn", 0 },
|
|
|
|
|
{ "ValueColumn", 1 },
|
|
|
|
|
{ "PrevColumn", 2 },
|
|
|
|
|
{ "ChangesColumn", 3 },
|
|
|
|
|
{ "DiffColumn", 4 },
|
|
|
|
|
{ "DomainColumn", 5 },
|
|
|
|
|
{ "NotesColumn", 6 },
|
|
|
|
|
};
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2014-06-20 18:05:32 +00:00
|
|
|
|
Global.Config.RamWatchColumnWidths = new Dictionary<string, int>
|
|
|
|
|
{
|
|
|
|
|
{ "AddressColumn", -1 },
|
|
|
|
|
{ "ValueColumn", -1 },
|
|
|
|
|
{ "PrevColumn", -1 },
|
|
|
|
|
{ "ChangesColumn", -1 },
|
|
|
|
|
{ "DiffColumn", -1 },
|
|
|
|
|
{ "DomainColumn", -1 },
|
|
|
|
|
{ "NotesColumn", -1 },
|
|
|
|
|
};
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2014-06-29 16:04:41 +00:00
|
|
|
|
Global.Config.RamWatchShowAddressColumn = true;
|
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
|
|
|
|
Global.Config.DisplayRamWatch = false;
|
2014-01-30 14:29:34 +00:00
|
|
|
|
Global.Config.RamWatchSettings.SaveWindowPosition = true;
|
|
|
|
|
Global.Config.RamWatchSettings.TopMost = TopMost = false;
|
2014-01-30 15:28:05 +00:00
|
|
|
|
Global.Config.RamWatchSettings.FloatingWindow = false;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
|
2014-01-30 15:28:05 +00:00
|
|
|
|
RefreshFloatingWindowControl();
|
2014-06-20 18:05:32 +00:00
|
|
|
|
ColumnPositions();
|
2013-09-14 02:31:21 +00:00
|
|
|
|
LoadColumnInfo();
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Columns
|
|
|
|
|
|
|
|
|
|
private void ColumnsSubMenu_DropDownOpened(object sender, EventArgs e)
|
|
|
|
|
{
|
2014-06-29 16:04:41 +00:00
|
|
|
|
ShowAddressMenuItem.Checked = Global.Config.RamWatchShowAddressColumn;
|
2013-11-28 22:06:38 +00:00
|
|
|
|
ShowPreviousMenuItem.Checked = Global.Config.RamWatchShowPrevColumn;
|
|
|
|
|
ShowChangesMenuItem.Checked = Global.Config.RamWatchShowChangeColumn;
|
|
|
|
|
ShowDiffMenuItem.Checked = Global.Config.RamWatchShowDiffColumn;
|
|
|
|
|
ShowDomainMenuItem.Checked = Global.Config.RamWatchShowDomainColumn;
|
|
|
|
|
}
|
|
|
|
|
|
2014-06-29 16:04:41 +00:00
|
|
|
|
private void ShowAddressMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.RamWatchShowAddressColumn ^= true;
|
|
|
|
|
SaveColumnInfo();
|
|
|
|
|
LoadColumnInfo();
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
private void ShowPreviousMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.RamWatchShowPrevColumn ^= true;
|
|
|
|
|
SaveColumnInfo();
|
|
|
|
|
LoadColumnInfo();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ShowChangesMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.RamWatchShowChangeColumn ^= true;
|
|
|
|
|
|
|
|
|
|
SaveColumnInfo();
|
|
|
|
|
LoadColumnInfo();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ShowDiffMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.RamWatchShowDiffColumn ^= true;
|
|
|
|
|
|
|
|
|
|
SaveColumnInfo();
|
|
|
|
|
LoadColumnInfo();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ShowDomainMenuItem_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
Global.Config.RamWatchShowDomainColumn ^= true;
|
|
|
|
|
|
|
|
|
|
SaveColumnInfo();
|
|
|
|
|
LoadColumnInfo();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Dialog, Context Menu, and ListView Events
|
|
|
|
|
|
|
|
|
|
private void NewRamWatch_Load(object sender, EventArgs e)
|
|
|
|
|
{
|
2014-12-15 22:25:06 +00:00
|
|
|
|
_watches = new WatchList(_core, _core.MemoryDomains.MainMemory, _emu.SystemId);
|
2013-11-28 22:06:38 +00:00
|
|
|
|
LoadConfigSettings();
|
2014-05-04 16:01:46 +00:00
|
|
|
|
UpdateStatusBar();
|
2013-11-28 22:06:38 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void NewRamWatch_Activated(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
WatchListView.Refresh();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void NewRamWatch_DragEnter(object sender, DragEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.Copy : DragDropEffects.None;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void NewRamWatch_DragDrop(object sender, DragEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var filePaths = (string[])e.Data.GetData(DataFormats.FileDrop);
|
|
|
|
|
if (Path.GetExtension(filePaths[0]) == ".wch")
|
|
|
|
|
{
|
|
|
|
|
_watches.Load(filePaths[0], append: false);
|
|
|
|
|
WatchListView.ItemCount = _watches.ItemCount;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void NewRamWatch_Enter(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
WatchListView.Focus();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ListViewContextMenu_Opening(object sender, CancelEventArgs e)
|
2011-08-07 04:19:49 +00:00
|
|
|
|
{
|
2013-11-25 02:08:45 +00:00
|
|
|
|
var 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;
|
|
|
|
|
|
2013-11-25 02:08:45 +00:00
|
|
|
|
var allCheats = _watches.All(x => Global.CheatList.IsActive(x.Domain, x.Address ?? 0));
|
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
|
|
|
|
{
|
2014-03-01 15:21:17 +00:00
|
|
|
|
FreezeContextMenuItem.Text = "&Unfreeze Address";
|
2013-09-14 02:31:21 +00:00
|
|
|
|
FreezeContextMenuItem.Image = Properties.Resources.Unfreeze;
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
2013-04-14 23:56:45 +00:00
|
|
|
|
{
|
2014-03-01 15:21:17 +00:00
|
|
|
|
FreezeContextMenuItem.Text = "&Freeze Address";
|
2013-09-14 02:31:21 +00:00
|
|
|
|
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-11-25 02:08:45 +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
|
|
|
|
{
|
2014-03-23 13:21:48 +00:00
|
|
|
|
Global.CheatList.RemoveAll();
|
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-11-25 02:08:45 +00:00
|
|
|
|
var selected = SelectedWatches.ToList();
|
2013-09-29 16:09:48 +00:00
|
|
|
|
if (selected.Any())
|
2012-09-10 02:37:44 +00:00
|
|
|
|
{
|
2013-11-03 16:07:58 +00:00
|
|
|
|
GlobalWin.Tools.Load<HexEditor>();
|
2013-09-29 16:09:48 +00:00
|
|
|
|
|
|
|
|
|
if (selected.Select(x => x.Domain).Distinct().Count() > 1)
|
|
|
|
|
{
|
2014-07-28 01:24:57 +00:00
|
|
|
|
ToolHelpers.ViewInHexEditor(selected[0].Domain, new List<int> { selected.First().Address ?? 0 }, selected.First().Size);
|
2013-09-29 16:09:48 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2014-07-28 01:24:57 +00:00
|
|
|
|
ToolHelpers.ViewInHexEditor(selected.First().Domain, selected.Select(x => x.Address ?? 0), selected.First().Size);
|
2013-09-29 16:09:48 +00:00
|
|
|
|
}
|
2012-09-10 02:37:44 +00:00
|
|
|
|
}
|
2011-06-19 19:10:01 +00:00
|
|
|
|
}
|
2011-06-26 19:13:52 +00:00
|
|
|
|
|
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)
|
|
|
|
|
{
|
2013-11-28 22:06:38 +00:00
|
|
|
|
RemoveWatchMenuItem_Click(sender, e);
|
2011-09-16 23:29:36 +00:00
|
|
|
|
}
|
2013-11-28 22:06:38 +00:00
|
|
|
|
else if (e.KeyCode == Keys.C && e.Control && !e.Alt && !e.Shift) // Copy
|
2013-03-17 03:21:58 +00:00
|
|
|
|
{
|
2013-09-14 02:31:21 +00:00
|
|
|
|
CopyWatchesToClipBoard();
|
2013-03-17 03:21:58 +00:00
|
|
|
|
}
|
2013-11-28 22:06:38 +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
|
|
|
|
|
2014-01-30 14:29:34 +00:00
|
|
|
|
protected override void OnShown(EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
RefreshFloatingWindowControl();
|
|
|
|
|
base.OnShown(e);
|
|
|
|
|
}
|
|
|
|
|
|
2014-05-04 16:01:46 +00:00
|
|
|
|
private void ErrorIconButton_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var items = _watches
|
|
|
|
|
.Where(watch => (watch.Address ?? 0) >= watch.Domain.Size)
|
|
|
|
|
.ToList();
|
|
|
|
|
|
|
|
|
|
foreach (var item in items)
|
|
|
|
|
{
|
|
|
|
|
_watches.Remove(item);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
WatchListView.ItemCount = _watches.ItemCount;
|
|
|
|
|
UpdateValues();
|
|
|
|
|
UpdateWatchCount();
|
|
|
|
|
UpdateStatusBar();
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-14 02:31:21 +00:00
|
|
|
|
#endregion
|
2014-01-30 14:29:34 +00:00
|
|
|
|
|
2013-11-28 22:06:38 +00:00
|
|
|
|
#endregion
|
2011-06-16 02:39:35 +00:00
|
|
|
|
}
|
2013-09-14 02:31:21 +00:00
|
|
|
|
}
|