using System; using System.Collections.Generic; using System.Windows.Forms; namespace FalloutClient { public enum DataType : int { None = 0, Int = 1, Float = 2, String = 3 } public partial class EditorWindow : Form { private readonly DataType[] types = null; private string[] values; private bool save; private static bool valueInHex = false; private void ConvertValues(bool toHex) { for (int i = 0; i < values.Length; i++) { if (toHex) { if (types == null || types[i] == DataType.Int) { int val = int.Parse(values[i]); values[i] = "0x" + val.ToString("x").ToUpper(); } } else { if (types == null || types[i] == DataType.Int) { values[i] = Convert.ToInt32(values[i], 16).ToString(); } } } } private EditorWindow(string[] names, DataType[] types, string[] values, bool isMap) { this.types = types; this.values = values; InitializeComponent(); checkBox.Checked = EditorWindow.valueInHex; dataGridView1.SuspendLayout(); if (valueInHex) ConvertValues(true); if (names == null) for (int i = 0; i < types.Length; i++) { string element = i.ToString(); if (isMap && (i % 2) == 0) element += " - Key"; dataGridView1.Rows.Add(element, types[i].ToString(), values[i]); } else for (int i = 0; i < types.Length; i++) dataGridView1.Rows.Add("[0x" + (i * 4).ToString("x").ToUpper() + "]" + names[i], types[i].ToString(), values[i]); dataGridView1.ResumeLayout(); } public static string[] ShowEditor(DebugEditor form, string[] names, DataType[] types, string[] values, bool isMap = false) { form.redrawTimer.Start(); EditorWindow editor = new EditorWindow(names, types, values, isMap); editor.ShowDialog(); form.redrawTimer.Stop(); if (editor.save) { if (valueInHex) editor.ConvertValues(false); return editor.values; } return null; } private EditorWindow(string[] values) { this.values = values; InitializeComponent(); checkBox.Checked = EditorWindow.valueInHex; dataGridView1.SuspendLayout(); if (valueInHex) ConvertValues(true); for (int i = 0; i < values.Length; i++) { dataGridView1.Rows.Add(i.ToString(), "Int", values[i]); } dataGridView1.ResumeLayout(); } public static string[] ShowEditor(DebugEditor form, string[] lvalues) { form.redrawTimer.Start(); EditorWindow editor = new EditorWindow(lvalues); editor.ShowDialog(); form.redrawTimer.Stop(); if (editor.save) { if (valueInHex) editor.ConvertValues(false); return editor.values; } return null; } private bool CheckInput(DataType type, string str) { switch (type) { case DataType.Int: if (valueInHex) { try { Convert.ToInt32(str, 16); return true; } catch (Exception) { return false; } } int i; return int.TryParse(str, out i); case DataType.Float: float f; return float.TryParse(str, out f); } return true; } private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { string str = (string)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; if (str != null && CheckInput(((types != null) ? types[e.RowIndex] : DataType.Int), str)) values[e.RowIndex] = str; else dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = values[e.RowIndex]; } private void bCancel_Click(object sender, EventArgs e) { Close(); } private void bSave_Click(object sender, EventArgs e) { save = true; Close(); } private void checkBox_Click(object sender, EventArgs e) { valueInHex = checkBox.Checked; ConvertValues(valueInHex); for (int i = 0; i < values.Length; i++) { dataGridView1.Rows[i].Cells[2].Value = values[i]; } } } }