Switch-Toolbox/File_Format_Library/GUI/BFLYT/UserDataParser.cs
KillzXGaming 4a92d0320a Some fixes.
USD1 fixes and also start to impliment an editor for USD1.
Fix L8 and LA8 displaying.
Fix channel compents. Temporaily uses the swizzle parameter. Todo, do these by shader.
Material saving fixes for bflyt version 8 and higher
2019-09-03 18:58:58 -04:00

268 lines
6.6 KiB
C#

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;
using Toolbox.Library.Forms;
namespace LayoutBXLYT
{
public partial class UserDataParser : STForm
{
public UserDataParser()
{
InitializeComponent();
valueTB.BackColor = FormThemes.BaseTheme.FormBackColor;
valueTB.ForeColor = FormThemes.BaseTheme.FormForeColor;
typeCB.Items.Add("WString");
typeCB.Items.Add("String");
typeCB.Items.Add("Single");
typeCB.Items.Add("Int32");
typeCB.Items.Add("Byte");
}
public string UserDataName
{
set {
nameTB.Text = value;
}
get {
return nameTB.Text;
}
}
public string Type
{
set
{
typeCB.SelectedItem = value;
}
get
{
return typeCB.GetItemText(typeCB.SelectedItem);
}
}
public void LoadValues(string strings)
{
valueTB.Text += $"{strings}";
}
public void LoadValues(float[] floats)
{
foreach (var str in floats)
valueTB.Text += $"{str}\n";
}
public void LoadValues(int[] ints)
{
foreach (var str in ints)
valueTB.Text += $"{str}\n";
}
public void LoadValues(byte[] bytes)
{
foreach (var str in bytes)
valueTB.Text += $"{str}\n";
}
public float[] GetFloats()
{
List<float> values = new List<float>();
int curLine = 0;
foreach (string line in valueTB.Lines)
{
if (line == string.Empty)
continue;
float valResult;
bool sucess = float.TryParse(line, out valResult);
if (!sucess)
throw new Exception($"Failed to parse float at line {curLine}");
values.Add(valResult);
curLine++;
}
if (values.Count == 0)
values.Add(0);
return values.ToArray();
}
public byte[] GetBytes()
{
List<byte> values = new List<byte>();
int curLine = 0;
foreach (string line in valueTB.Lines)
{
if (line == string.Empty)
continue;
byte valResult;
bool sucess = byte.TryParse(line, out valResult);
if (!sucess)
throw new Exception($"Failed to parse byte at line {curLine}");
values.Add(valResult);
curLine++;
}
if (values.Count == 0)
values.Add(0);
return values.ToArray();
}
public int[] GetInts()
{
List<int> values = new List<int>();
int curLine = 0;
foreach (string line in valueTB.Lines)
{
if (line == string.Empty)
continue;
int valResult;
bool sucess = int.TryParse(line, out valResult);
if (!sucess)
throw new Exception($"Failed to parse int at line {curLine}");
values.Add(valResult);
curLine++;
}
if (values.Count == 0)
values.Add(0);
return values.ToArray();
}
public string[] GetStringUnicode()
{
List<string> values = new List<string>();
int curLine = 0;
foreach (string line in valueTB.Lines)
{
if (line == string.Empty)
continue;
values.Add(line);
curLine++;
}
if (values.Count == 0)
values.Add("");
return values.ToArray();
}
public string[] GetStringASCII()
{
List<string> values = new List<string>();
int curLine = 0;
foreach (string line in valueTB.Lines)
{
if (line == string.Empty)
continue;
values.Add(line);
curLine++;
}
if (values.Count == 0)
values.Add("");
return values.ToArray();
}
private void btnOk_Click(object sender, EventArgs e)
{
if (!CheckParser())
return;
if (UserDataName == string.Empty)
{
MessageBox.Show("Name parameter not set!", Application.ProductName,
MessageBoxButtons.OK, MessageBoxIcon.Error);
DialogResult = DialogResult.None;
}
else
{
DialogResult = DialogResult.OK;
}
}
private bool CheckParser()
{
bool CanParse = true;
float valSingle;
int valInt;
byte valByte;
string Error = "";
int curLine = 0;
foreach (var line in valueTB.Lines)
{
bool Success = true;
if (Type == "WString")
{
}
else if (Type == "String")
{
}
else if (line == string.Empty) //Don't parse empty lines, instead we'll skip those
{
}
else if (Type == "Single")
Success = float.TryParse(line, out valSingle);
else if (Type == "Int32")
Success = int.TryParse(line, out valInt);
else if (Type == "Byte")
Success = byte.TryParse(line, out valByte);
if (!Success)
{
CanParse = false;
Error += $"Invalid data type at line {curLine}.\n";
}
curLine++;
}
if (CanParse == false)
{
STErrorDialog.Show($"Data must be type of {Type}","User Data", Error);
}
return CanParse;
}
private void valueTB_TextChanged(object sender, EventArgs e)
{
}
private void contentContainer_Paint(object sender, PaintEventArgs e)
{
}
}
}