1
0
mirror of synced 2024-12-04 20:08:00 +01:00
Switch-Toolbox/File_Format_Library/GUI/BCH/MetaData/UserDataParser.cs

270 lines
6.7 KiB
C#
Raw Normal View History

2020-01-15 02:26:51 +01:00
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 FirstPlugin.CtrLibrary.Forms
{
public partial class BCHUserDataParser : STForm
{
public BCHUserDataParser()
{
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)
{
foreach (var str in strings)
valueTB.Text += $"{str}\n";
}
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)
{
}
}
}