330 lines
12 KiB
C#
330 lines
12 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using Syroot.NintenTools.Bfres;
|
|
using ResNX = Syroot.NintenTools.NSW.Bfres;
|
|
using ResBNTX = Syroot.NintenTools.NSW.Bntx;
|
|
|
|
namespace FirstPlugin
|
|
{
|
|
public partial class UserDataEditor : UserControl
|
|
{
|
|
public UserDataEditor()
|
|
{
|
|
InitializeComponent();
|
|
|
|
listViewCustom1.HeaderStyle = ColumnHeaderStyle.Nonclickable;
|
|
}
|
|
|
|
ResDict<UserData> userData;
|
|
List<ResNX.UserData> userDataNX;
|
|
|
|
UserData SelectedDataU;
|
|
ResNX.UserData SelectedDataNX;
|
|
|
|
bool IsWiiU = false;
|
|
public void LoadUserData(List<ResNX.UserData> UserDataList)
|
|
{
|
|
listViewCustom1.Items.Clear();
|
|
|
|
userDataNX = UserDataList;
|
|
foreach (var item in userDataNX)
|
|
LoadUserData(item);
|
|
}
|
|
|
|
//Convert the user data from bntx
|
|
public void LoadUserData(List<ResBNTX.UserData> UserDataList)
|
|
{
|
|
userDataNX = new List<ResNX.UserData>();
|
|
|
|
listViewCustom1.Items.Clear();
|
|
|
|
foreach (var item in UserDataList)
|
|
{
|
|
var userData = new ResNX.UserData();
|
|
|
|
userData.Name = item.Name;
|
|
if (item.Type == ResBNTX.UserDataType.Byte)
|
|
userData.SetValue(item.GetValueByteArray());
|
|
if (item.Type == ResBNTX.UserDataType.String)
|
|
userData.SetValue(item.GetValueStringArray());
|
|
if (item.Type == ResBNTX.UserDataType.WString)
|
|
userData.SetValue(item.GetValueStringArray());
|
|
if (item.Type == ResBNTX.UserDataType.Single)
|
|
userData.SetValue(item.GetValueSingleArray());
|
|
if (item.Type == ResBNTX.UserDataType.Int32)
|
|
userData.SetValue(item.GetValueInt32Array());
|
|
|
|
userDataNX.Add(userData);
|
|
LoadUserData(userData);
|
|
}
|
|
}
|
|
|
|
public void LoadUserData(ResDict<UserData> UserDataList)
|
|
{
|
|
listViewCustom1.Items.Clear();
|
|
|
|
IsWiiU = true;
|
|
|
|
userData = UserDataList;
|
|
|
|
foreach (var item in userData.Values)
|
|
LoadUserData(item);
|
|
}
|
|
|
|
private void LoadUserData(ResNX.UserData item)
|
|
{
|
|
ListViewItem listItem = new ListViewItem();
|
|
listItem.Text = item.Name;
|
|
listItem.SubItems.Add(item.Type.ToString());
|
|
|
|
string value = "";
|
|
|
|
switch (item.Type)
|
|
{
|
|
case ResNX.UserDataType.WString:
|
|
case ResNX.UserDataType.String:
|
|
if (item.GetValueStringArray() != null)
|
|
{
|
|
foreach (var val in item.GetValueStringArray())
|
|
value += $" {val}";
|
|
}
|
|
break;
|
|
case ResNX.UserDataType.Single:
|
|
if (item.GetValueSingleArray() != null)
|
|
{
|
|
foreach (var val in item.GetValueSingleArray())
|
|
value += $" {val}";
|
|
}
|
|
break;
|
|
case ResNX.UserDataType.Int32:
|
|
if (item.GetValueInt32Array() != null)
|
|
{
|
|
foreach (var val in item.GetValueInt32Array())
|
|
value += $" {val}";
|
|
}
|
|
break;
|
|
case ResNX.UserDataType.Byte:
|
|
if (item.GetValueByteArray() != null)
|
|
{
|
|
foreach (var val in item.GetValueByteArray())
|
|
value += $" {val}";
|
|
}
|
|
break;
|
|
}
|
|
listItem.SubItems.Add(value);
|
|
|
|
listViewCustom1.Items.Add(listItem);
|
|
}
|
|
|
|
private void LoadUserData(UserData item)
|
|
{
|
|
ListViewItem listItem = new ListViewItem();
|
|
listItem.Text = item.Name;
|
|
listItem.SubItems.Add(item.Type.ToString());
|
|
|
|
string value = "";
|
|
|
|
switch (item.Type)
|
|
{
|
|
case UserDataType.WString:
|
|
case UserDataType.String:
|
|
foreach (var val in item.GetValueStringArray())
|
|
value += $" {val}";
|
|
break;
|
|
case UserDataType.Single:
|
|
foreach (var val in item.GetValueSingleArray())
|
|
value += $" {val}";
|
|
break;
|
|
case UserDataType.Int32:
|
|
foreach (var val in item.GetValueInt32Array())
|
|
value += $" {val}";
|
|
break;
|
|
case UserDataType.Byte:
|
|
foreach (var val in item.GetValueByteArray())
|
|
value += $" {val}";
|
|
break;
|
|
}
|
|
listItem.SubItems.Add(value);
|
|
listViewCustom1.Items.Add(listItem);
|
|
}
|
|
|
|
private void listViewCustom1_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if (listViewCustom1.SelectedItems.Count > 0)
|
|
{
|
|
btnScrolDown.Enabled = true;
|
|
btnScrollUp.Enabled = true;
|
|
btnEdit.Enabled = true;
|
|
btnRemove.Enabled = true;
|
|
|
|
if (IsWiiU)
|
|
SelectedDataU = userData[listViewCustom1.SelectedIndices[0]];
|
|
else
|
|
SelectedDataNX = userDataNX[listViewCustom1.SelectedIndices[0]];
|
|
}
|
|
else
|
|
{
|
|
SelectedDataU = null;
|
|
SelectedDataNX = null;
|
|
btnScrolDown.Enabled = false;
|
|
btnScrollUp.Enabled = false;
|
|
btnEdit.Enabled = false;
|
|
btnRemove.Enabled = false;
|
|
}
|
|
}
|
|
|
|
private void btnEdit_Click(object sender, EventArgs e)
|
|
{
|
|
EditData();
|
|
}
|
|
|
|
private void btnAdd_Click(object sender, EventArgs e)
|
|
{
|
|
if (IsWiiU)
|
|
{
|
|
UserData userDataNew = new UserData();
|
|
userDataNew.SetValue(new int[0]);
|
|
SelectedDataU = userDataNew;
|
|
bool IsEdited = EditData();
|
|
|
|
if (IsEdited)
|
|
{
|
|
userData.Add(SelectedDataU.Name, SelectedDataU);
|
|
LoadUserData(SelectedDataU);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ResNX.UserData userDataNew = new ResNX.UserData();
|
|
userDataNew.SetValue(new int[0]);
|
|
SelectedDataNX = userDataNew;
|
|
bool IsEdited = EditData();
|
|
|
|
if (IsEdited)
|
|
{
|
|
userDataNX.Add(SelectedDataNX);
|
|
LoadUserData(SelectedDataNX);
|
|
}
|
|
}
|
|
}
|
|
private bool EditData()
|
|
{
|
|
if (SelectedDataU != null)
|
|
{
|
|
UserDataParser parser = new UserDataParser();
|
|
parser.UserDataName = SelectedDataU.Name;
|
|
parser.Type = SelectedDataU.Type.ToString();
|
|
|
|
switch (SelectedDataU.Type)
|
|
{
|
|
case UserDataType.WString:
|
|
case UserDataType.String:
|
|
if (SelectedDataU.GetValueStringArray() != null)
|
|
parser.LoadValues(SelectedDataU.GetValueStringArray());
|
|
break;
|
|
case UserDataType.Single:
|
|
if (SelectedDataU.GetValueSingleArray() != null)
|
|
parser.LoadValues(SelectedDataU.GetValueSingleArray());
|
|
break;
|
|
case UserDataType.Int32:
|
|
if (SelectedDataU.GetValueInt32Array() != null)
|
|
parser.LoadValues(SelectedDataU.GetValueInt32Array());
|
|
break;
|
|
case UserDataType.Byte:
|
|
if (SelectedDataU.GetValueByteArray() != null)
|
|
parser.LoadValues(SelectedDataU.GetValueByteArray());
|
|
break;
|
|
}
|
|
if (parser.ShowDialog() == DialogResult.OK)
|
|
{
|
|
SelectedDataU.Name = parser.UserDataName;
|
|
|
|
if (parser.Type == "Byte")
|
|
SelectedDataU.SetValue(parser.GetBytes());
|
|
if (parser.Type == "Single")
|
|
SelectedDataU.SetValue(parser.GetFloats());
|
|
if (parser.Type == "Int32")
|
|
SelectedDataU.SetValue(parser.GetInts());
|
|
if (parser.Type == "String")
|
|
SelectedDataU.SetValue(parser.GetStringASCII());
|
|
if (parser.Type == "WString")
|
|
SelectedDataU.SetValue(parser.GetStringUnicode(), true);
|
|
|
|
return true;
|
|
}
|
|
}
|
|
else if (SelectedDataNX != null)
|
|
{
|
|
UserDataParser parser = new UserDataParser();
|
|
parser.UserDataName = SelectedDataNX.Name;
|
|
parser.Type = SelectedDataNX.Type.ToString();
|
|
|
|
switch (SelectedDataNX.Type)
|
|
{
|
|
case ResNX.UserDataType.WString:
|
|
case ResNX.UserDataType.String:
|
|
if (SelectedDataNX.GetValueStringArray() != null)
|
|
parser.LoadValues(SelectedDataNX.GetValueStringArray());
|
|
break;
|
|
case ResNX.UserDataType.Single:
|
|
if (SelectedDataNX.GetValueSingleArray() != null)
|
|
parser.LoadValues(SelectedDataNX.GetValueSingleArray());
|
|
break;
|
|
case ResNX.UserDataType.Int32:
|
|
if (SelectedDataNX.GetValueInt32Array() != null)
|
|
parser.LoadValues(SelectedDataNX.GetValueInt32Array());
|
|
break;
|
|
case ResNX.UserDataType.Byte:
|
|
if (SelectedDataNX.GetValueByteArray() != null)
|
|
parser.LoadValues(SelectedDataNX.GetValueByteArray());
|
|
break;
|
|
}
|
|
if (parser.ShowDialog() == DialogResult.OK)
|
|
{
|
|
SelectedDataNX.Name = parser.UserDataName;
|
|
|
|
if (parser.Type == "Byte")
|
|
SelectedDataNX.SetValue(parser.GetBytes());
|
|
if (parser.Type == "Single")
|
|
SelectedDataNX.SetValue(parser.GetFloats());
|
|
if (parser.Type == "Int32")
|
|
SelectedDataNX.SetValue(parser.GetInts());
|
|
if (parser.Type == "String")
|
|
SelectedDataNX.SetValue(parser.GetStringASCII());
|
|
if (parser.Type == "WString")
|
|
SelectedDataNX.SetValue(parser.GetStringUnicode());
|
|
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private void btnRemove_Click(object sender, EventArgs e)
|
|
{
|
|
if (listViewCustom1.SelectedIndices.Count > 0)
|
|
{
|
|
int index = listViewCustom1.SelectedIndices[0];
|
|
listViewCustom1.Items.RemoveAt(index);
|
|
|
|
if (userData != null)
|
|
userData.RemoveAt(index);
|
|
if (userDataNX != null)
|
|
userDataNX.RemoveAt(index);
|
|
}
|
|
}
|
|
|
|
private void listViewCustom1_DoubleClick(object sender, EventArgs e)
|
|
{
|
|
EditData();
|
|
}
|
|
}
|
|
}
|