Files
BMGEditor/BMGEditor/UI/BMGEditForm.cs

137 lines
4.3 KiB
C#

using BMGEditor.UI;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BMGEditor
{
public partial class BMGEditForm : Form
{
public BMGEditForm(RarcFilesystem arcFs)
{
InitializeComponent();
Text = $"Text editor - {Variables.softwareName} {Variables.softwareVersion}";
if (Variables.isBeta) Text += " [BETA]";
m_FileTbl = new Bcsv(arcFs.OpenFile($"{arcFs.rootName}/messageid.tbl"));
m_File = new BMG(arcFs.OpenFile($"{arcFs.rootName}/message.bmg"), m_FileTbl);
foreach (BMG.TextEntry txtEntry in m_File.Entries)
{
entriesListBox.Items.Add(txtEntry.entryName);
}
addEntryBtn.Enabled = false;
deleteEntryBtn.Enabled = false;
}
private BMG m_File = null;
private Bcsv m_FileTbl = null;
private void BMGEditForm_FormClosing(object sender, FormClosingEventArgs e)
{
m_File.Close();
m_FileTbl.Close();
}
private void openEntryBtn_Click(object sender, EventArgs e)
{
if (entriesListBox.SelectedIndex == -1) { }
else openEditor();
}
private void addEntryBtn_Click(object sender, EventArgs e)
{
Form newEntryForm = new NewEntryForm();
newEntryForm.Show();
}
private void deleteEntryBtn_Click(object sender, EventArgs e)
{
throw new NotImplementedException();
}
private void openEditor()
{
Form txtEditForm = new TextEntryEditorForm(m_File.Entries[entriesListBox.SelectedIndex]);
txtEditForm.Show();
}
private void entriesListBox_DoubleClick(object sender, EventArgs e)
{
openEditor();
}
private void saveBMGbtn_Click(object sender, EventArgs e)
{
m_File.Entries.Sort((x, y) =>
{
string entryNameA = x.entryName, entryNameB = y.entryName;
return String.CompareOrdinal(entryNameA, entryNameB);
});
m_FileTbl.Entries.Clear();
foreach (BMG.TextEntry txtEntry in m_File.Entries)
{
Bcsv.Entry entry = new Bcsv.Entry();
m_FileTbl.Entries.Add(entry);
int index = 0;
foreach (Bcsv.Field field in m_FileTbl.Fields.Values)
{
uint hash = field.NameHash;
string valstring;
if (index == 0)
valstring = txtEntry.entryName;
else
valstring = String.Concat(txtEntry.entryNo);
index++;
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_FileTbl.Flush();
m_File.Entries.Sort((x, y) =>
{
int entryIndexA = x.entryNo, entryIndexB = y.entryNo;
return entryIndexA.CompareTo(entryIndexB);
});
m_File.WriteToFile();
}
}
}