mirror of
https://github.com/SourMesen/VisualNes.git
synced 2025-04-02 10:31:49 -04:00
149 lines
4 KiB
C#
149 lines
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.Text;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace GUI
|
|
{
|
|
public partial class frmSelectColumns : Form
|
|
{
|
|
private static List<SelectTreeNode> _nodeNames;
|
|
private static HashSet<string> _selectedColumns;
|
|
private static ChipDefinitions _chipDef;
|
|
|
|
public frmSelectColumns(ChipDefinitions chipDef, List<string> originalColumns)
|
|
{
|
|
if(_chipDef == null) {
|
|
_chipDef = chipDef;
|
|
HashSet<string> existingColumns = new HashSet<string>();
|
|
_nodeNames = new List<SelectTreeNode>();
|
|
|
|
ChipDefinitions chipDefinitions = new ChipDefinitions();
|
|
|
|
foreach(KeyValuePair<string, int> kvp in chipDefinitions.NodeNumberByName) {
|
|
string nodename = kvp.Key;
|
|
_nodeNames.Add(new SelectTreeNode(nodename));
|
|
existingColumns.Add(nodename);
|
|
string withoutNumber = Regex.Replace(nodename, "[_0-9]+$", "");
|
|
if(withoutNumber != nodename && !existingColumns.Contains(withoutNumber)) {
|
|
_nodeNames.Add(new SelectTreeNode(withoutNumber));
|
|
existingColumns.Add(withoutNumber);
|
|
}
|
|
}
|
|
_nodeNames.Add(new SelectTreeNode("cycle"));
|
|
}
|
|
|
|
InitializeComponent();
|
|
_selectedColumns = new HashSet<string>(originalColumns);
|
|
RefreshList();
|
|
}
|
|
|
|
protected override void OnActivated(EventArgs e)
|
|
{
|
|
base.OnActivated(e);
|
|
txtSearchString.Focus();
|
|
}
|
|
|
|
public static HashSet<string> SelectedColumns { get { return _selectedColumns; } }
|
|
|
|
private void RefreshList()
|
|
{
|
|
List<SelectTreeNode> nodes = new List<SelectTreeNode>();
|
|
foreach(SelectTreeNode node in _nodeNames) {
|
|
if(string.IsNullOrWhiteSpace(txtSearchString.Text) || Regex.Match(node.Name, txtSearchString.Text, RegexOptions.IgnoreCase).Success) {
|
|
nodes.Add(node);
|
|
}
|
|
}
|
|
nodes.Sort();
|
|
|
|
lstSelectedColumns.BeginUpdate();
|
|
lstSelectedColumns.Items.Clear();
|
|
foreach(SelectTreeNode node in nodes) {
|
|
lstSelectedColumns.Items.Add(node, _selectedColumns.Contains(node.Name));
|
|
}
|
|
lstSelectedColumns.EndUpdate();
|
|
}
|
|
|
|
private void lstSelectedColumns_ItemCheck(object sender, ItemCheckEventArgs e)
|
|
{
|
|
SelectTreeNode node = (SelectTreeNode)lstSelectedColumns.Items[e.Index];
|
|
if(e.NewValue == CheckState.Checked) {
|
|
_selectedColumns.Add(node.Name);
|
|
} else {
|
|
_selectedColumns.Remove(node.Name);
|
|
}
|
|
}
|
|
|
|
private void txtSearchString_TextChanged(object sender, EventArgs e)
|
|
{
|
|
try {
|
|
Regex.Match("", txtSearchString.Text);
|
|
RefreshList();
|
|
} catch { }
|
|
}
|
|
|
|
private void btnCancel_Click(object sender, EventArgs e)
|
|
{
|
|
this.DialogResult = DialogResult.Cancel;
|
|
this.Close();
|
|
}
|
|
|
|
private void btnOk_Click(object sender, EventArgs e)
|
|
{
|
|
this.DialogResult = DialogResult.OK;
|
|
this.Close();
|
|
}
|
|
|
|
private void btnClear_Click(object sender, EventArgs e)
|
|
{
|
|
_selectedColumns = new HashSet<string>();
|
|
RefreshList();
|
|
}
|
|
|
|
private void btnReset_Click(object sender, EventArgs e)
|
|
{
|
|
_selectedColumns = new HashSet<string>() { "cycle", "hpos", "vpos", "vbl_flag", "spr0_hit", "spr_overflow", "vramaddr_t", "vramaddr_v", "io_db", "io_ab", "io_rw", "io_ce", "rd", "wr", "ab", "ale", "db" };
|
|
RefreshList();
|
|
}
|
|
}
|
|
|
|
public class SelectTreeNode : IComparable
|
|
{
|
|
private string _name;
|
|
private string _sortName;
|
|
|
|
public SelectTreeNode(string name)
|
|
{
|
|
_name = name;
|
|
_sortName = name.Replace("+", "").Replace("_", "").Replace("\\", "").Replace("/", "").Replace("(", "").Replace(")", "");
|
|
}
|
|
|
|
public string Name { get { return _name; } }
|
|
|
|
public override string ToString()
|
|
{
|
|
return _name;
|
|
}
|
|
|
|
int IComparable.CompareTo(object obj)
|
|
{
|
|
SelectTreeNode b = (SelectTreeNode)obj;
|
|
bool aSelected = frmSelectColumns.SelectedColumns.Contains(this.Name);
|
|
bool bSelected = frmSelectColumns.SelectedColumns.Contains(b.Name);
|
|
if(aSelected && !bSelected) {
|
|
return -1;
|
|
} else if(!aSelected && bSelected) {
|
|
return 1;
|
|
} else {
|
|
return this._sortName.CompareTo(b._sortName);
|
|
}
|
|
}
|
|
}
|
|
}
|