Files
BMGEditor/BMGEditor/UI/BcsvEditorForm.cs

130 lines
4.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace BMGEditor
{
public partial class BcsvEditorForm : Form
{
public BcsvEditorForm(RarcFilesystem arcFs)
{
InitializeComponent();
Text += $" - {Variables.softwareName} {Variables.softwareVersion}";
if (Variables.isBeta) Text += " [BETA]";
m_File = new Bcsv(arcFs.OpenFile($"{arcFs.rootName}/messageid.tbl"));
dgvBcsv.Rows.Clear();
dgvBcsv.Columns.Clear();
foreach (Bcsv.Field field in m_File.Fields.Values)
{
dgvBcsv.Columns.Add(field.NameHash.ToString("X8"), field.Name);
}
foreach (Bcsv.Entry entry in m_File.Entries)
{
object[] row = new object[entry.Count];
int i = 0;
foreach (KeyValuePair<uint, object> _val in entry)
{
object val = _val.Value;
row[i++] = val;
}
dgvBcsv.Rows.Add(row);
}
btnSave.Enabled = true;
}
private Bcsv m_File = null;
private void btnSave_Click(object sender, EventArgs e)
{
m_File.Entries.Clear();
foreach (DataGridViewRow row in dgvBcsv.Rows)
{
if (row.IsNewRow) continue;
Bcsv.Entry entry = new Bcsv.Entry();
m_File.Entries.Add(entry);
foreach (Bcsv.Field field in m_File.Fields.Values)
{
uint hash = field.NameHash;
string valstring = row.Cells[hash.ToString("X8")].FormattedValue.ToString();
try
{
switch (field.Type)
{
case 0:
case 3: entry.Add(hash, uint.Parse(valstring)); break;
case 4: entry.Add(hash, ushort.Parse(valstring)); break;
case 5: entry.Add(hash, byte.Parse(valstring)); break;
case 2: entry.Add(hash, float.Parse(valstring)); break;
case 6: entry.Add(hash, valstring); break;
}
}
catch
{
switch (field.Type)
{
case 0:
case 3: entry.Add(hash, (uint)0); break;
case 4: entry.Add(hash, (ushort)0); break;
case 5: entry.Add(hash, (byte)0); break;
case 2: entry.Add(hash, 0f); break;
case 6: entry.Add(hash, ""); break;
}
}
}
}
m_File.Flush();
}
private void BcsvEditorForm_FormClosing(object sender, FormClosingEventArgs e)
{
m_File.Close();
}
private void sortBtn_Click(object sender, EventArgs e)
{
dgvBcsv.Sort(new RowCompare(SortOrder.Ascending));
}
private class RowCompare : System.Collections.IComparer
{
private static int sortOrderModifier = 1;
public RowCompare(SortOrder sortOrder)
{
switch (sortOrder)
{
case SortOrder.Ascending:
sortOrderModifier = 1;
break;
case SortOrder.Descending:
sortOrderModifier = -1;
break;
}
}
public int Compare(object x, object y)
{
DataGridViewRow curRow = (DataGridViewRow)x;
DataGridViewRow nextRow = (DataGridViewRow)y;
int CompareResult = System.String.CompareOrdinal(curRow.Cells[0].Value.ToString(),
nextRow.Cells[0].Value.ToString());
return CompareResult * sortOrderModifier;
}
}
}
}