Mesen-X/GUI.NET/Debugger/frmPpuViewer.cs

90 lines
2.4 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Mesen.GUI.Config;
using Mesen.GUI.Forms;
namespace Mesen.GUI.Debugger
{
public partial class frmPpuViewer : BaseForm
{
private InteropEmu.NotificationListener _notifListener;
private int _autoRefreshCounter = 0;
public frmPpuViewer()
{
InitializeComponent();
this.mnuAutoRefresh.Checked = ConfigManager.Config.DebugInfo.PpuAutoRefresh;
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if(!this.DesignMode) {
this._notifListener = new InteropEmu.NotificationListener();
this._notifListener.OnNotification += this._notifListener_OnNotification;
this.ctrlNametableViewer.RefreshViewer();
this.ctrlChrViewer.RefreshViewer();
this.ctrlSpriteViewer.RefreshViewer();
this.ctrlPaletteViewer.RefreshViewer();
}
}
private void _notifListener_OnNotification(InteropEmu.NotificationEventArgs e)
{
if(e.NotificationType == InteropEmu.ConsoleNotificationType.CodeBreak) {
this.BeginInvoke((MethodInvoker)(() => this.RefreshViewers()));
} else if(e.NotificationType == InteropEmu.ConsoleNotificationType.PpuFrameDone) {
this.BeginInvoke((MethodInvoker)(() => this.AutoRefresh()));
}
}
private void RefreshViewers()
{
if(this.tabMain.SelectedTab == this.tpgNametableViewer) {
this.ctrlNametableViewer.RefreshViewer();
} else if(this.tabMain.SelectedTab == this.tpgChrViewer) {
this.ctrlChrViewer.RefreshViewer();
} else if(this.tabMain.SelectedTab == this.tpgSpriteViewer) {
this.ctrlSpriteViewer.RefreshViewer();
} else if(this.tabMain.SelectedTab == this.tpgPaletteViewer) {
this.ctrlPaletteViewer.RefreshViewer();
}
}
private void AutoRefresh()
{
if(_autoRefreshCounter % 4 == 0 && this.mnuAutoRefresh.Checked) {
this.RefreshViewers();
}
_autoRefreshCounter++;
}
private void mnuRefresh_Click(object sender, EventArgs e)
{
this.RefreshViewers();
}
private void mnuClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void mnuAutoRefresh_Click(object sender, EventArgs e)
{
ConfigManager.Config.DebugInfo.PpuAutoRefresh = this.mnuAutoRefresh.Checked;
ConfigManager.ApplyChanges();
}
}
}