Switch-Toolbox/File_Format_Library/GUI/AAMP/EditBox.cs
KillzXGaming c922ff1e4f Big BYAML and AAMP update!
- AAMP can now save back to YAML!
- Added text editor for AAMP editor
- AAMP library has been improved signifcantly, now using one library for all versions.
- BYAML now uses YAML by default. You can still right click in the editor and export as XML if needed.
- BYAML saving speed improved signifcantly.
- BYAML now supports reference nodes and works with 3DW byml files.
- BYAML can now load shift JIS encoding for japanese characters.
- YAML syntax for text editor improved with proper folding and highlighting for certain values.
2020-02-06 18:20:42 -05:00

385 lines
16 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 AampLibraryCSharp;
using Syroot.Maths;
namespace FirstPlugin.Forms
{
public partial class EditBox : Form
{
public EditBox()
{
InitializeComponent();
}
public void ToggleNameEditing(bool CanEdit)
{
nameTB.Enabled = CanEdit;
}
ParamEntry paramEntry;
public void LoadEntry(ParamEntry entry)
{
typeCB.Items.Clear();
foreach (var type in Enum.GetValues(typeof(ParamType)).Cast<ParamType>())
typeCB.Items.Add(type);
paramEntry = entry;
nameTB.Text = entry.HashString;
typeCB.SelectedItem = entry.ParamType;
dataTB.Text = entry.Value.ToString();
switch (entry.ParamType)
{
case ParamType.Vector2F:
var vec2 = (Vector2F)entry.Value;
dataTB.Text = $"{vec2.X} {vec2.Y}";
break;
case ParamType.Vector3F:
var vec3 = (Vector3F)entry.Value;
dataTB.Text = $"{vec3.X} {vec3.Y} {vec3.Z}";
break;
case ParamType.Vector4F:
case ParamType.Color4F:
var vec4 = (Vector4F)entry.Value;
dataTB.Text = $"{vec4.X} {vec4.Y} {vec4.Z} {vec4.W}";
break;
case ParamType.BufferBinary:
dataTB.Text = string.Join(",", (byte[])entry.Value);
break;
case ParamType.BufferFloat:
dataTB.Text = string.Join(",", (float[])entry.Value);
break;
case ParamType.BufferInt:
dataTB.Text = string.Join(",", (int[])entry.Value);
break;
case ParamType.BufferUint:
dataTB.Text = string.Join(",", (uint[])entry.Value);
break;
}
}
public void SaveEntry()
{
if (paramEntry != null)
{
paramEntry.ParamType = (ParamType)typeCB.SelectedItem;
if (nameTB.Enabled)
paramEntry.HashString = nameTB.Text;
switch (paramEntry.ParamType)
{
case ParamType.Boolean:
bool value = false;
bool.TryParse(dataTB.Text, out value);
paramEntry.Value = value;
break;
case ParamType.Float:
float valueF = 0;
float.TryParse(dataTB.Text, out valueF);
paramEntry.Value = valueF;
break;
case ParamType.Int:
int valueInt = 0;
int.TryParse(dataTB.Text, out valueInt);
paramEntry.Value = valueInt;
break;
case ParamType.BufferUint:
{
var strings = dataTB.Text.Split(',');
var array = new uint[strings.Length];
for (int i = 0; i < array.Length; i++)
array[i] = uint.Parse(strings[i]);
paramEntry.Value = array;
}
break;
case ParamType.BufferInt:
{
var strings = dataTB.Text.Split(',');
var array = new int[strings.Length];
for (int i = 0; i < array.Length; i++)
array[i] = int.Parse(strings[i]);
paramEntry.Value = array;
}
break;
case ParamType.BufferFloat:
{
var strings = dataTB.Text.Split(',');
var array = new float[strings.Length];
for (int i = 0; i < array.Length; i++)
array[i] = float.Parse(strings[i]);
paramEntry.Value = array;
}
break;
case ParamType.BufferBinary:
{
var strings = dataTB.Text.Split(',');
var array = new byte[strings.Length];
for (int i = 0; i < array.Length; i++)
array[i] = byte.Parse(strings[i]);
paramEntry.Value = array;
}
break;
case ParamType.Vector2F:
var values2F = dataTB.Text.Split(' ');
if (values2F.Length == 2) {
float x, y;
float.TryParse(values2F[0], out x);
float.TryParse(values2F[1], out y);
paramEntry.Value = new Vector2F(x, y);
}
else
throw new Exception("Invalid amount of values. Type requires 2 values.");
break;
case ParamType.Vector3F:
var values3F = dataTB.Text.Split(' ');
if (values3F.Length == 3) {
float x, y, z;
float.TryParse(values3F[0], out x);
float.TryParse(values3F[1], out y);
float.TryParse(values3F[2], out z);
paramEntry.Value = new Vector3F(x, y, z);
}
else
throw new Exception("Invalid amount of values. Type requires 3 values.");
break;
case ParamType.Vector4F:
case ParamType.Color4F:
var values = dataTB.Text.Split(' ');
if (values.Length == 4)
{
float x, y, z, w;
float.TryParse(values[0], out x);
float.TryParse(values[1], out y);
float.TryParse(values[2], out z);
float.TryParse(values[3], out w);
paramEntry.Value = new Vector4F(x, y, z, w);
}
else
throw new Exception("Invalid amount of values. Type requires 4 values.");
break;
case ParamType.Uint:
uint valueUInt = 0;
uint.TryParse(dataTB.Text, out valueUInt);
paramEntry.Value = valueUInt;
break;
case ParamType.String64:
case ParamType.String32:
case ParamType.String256:
case ParamType.StringRef:
paramEntry.Value = new AampLibraryCSharp.StringEntry(dataTB.Text);
break;
}
}
}
private void dataTB_TextChanged(object sender, EventArgs e)
{
switch (paramEntry.ParamType)
{
case ParamType.Color4F:
UpdatePictureboxColor();
break;
}
}
private void UpdatePictureboxColor()
{
var values = dataTB.Text.Split(' ');
if (values.Length == 4)
{
float x, y, z, w;
float.TryParse(values[0], out x);
float.TryParse(values[1], out y);
float.TryParse(values[2], out z);
float.TryParse(values[3], out w);
pictureBox1.BackColor = System.Drawing.Color.FromArgb(
FloatToIntClamp(w), FloatToIntClamp(x), FloatToIntClamp(y), FloatToIntClamp(z));
}
}
public static int FloatToIntClamp(float r)
{
return Clamp((int)(r * 255), 0, 255);
}
public static T Clamp<T>(T val, T min, T max) where T : IComparable<T>
{
if (val.CompareTo(min) < 0) return min;
else if (val.CompareTo(max) > 0) return max;
else return val;
}
private void pictureBox1_Click(object sender, EventArgs e)
{
if (paramEntry != null)
{
if (paramEntry.ParamType == ParamType.Color4F)
{
ColorDialog dlg = new ColorDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
paramEntry.Value = new Vector4F(
dlg.Color.R / 255.0f,
dlg.Color.G / 255.0f,
dlg.Color.B / 255.0f,
dlg.Color.A / 255.0f);
var vec4 = (Vector4F)paramEntry.Value;
dataTB.Text = $"{vec4.X} {vec4.Y} {vec4.Z} {vec4.W}";
}
}
}
}
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.nameTB = new System.Windows.Forms.TextBox();
this.typeCB = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.button1 = new System.Windows.Forms.Button();
this.dataTB = new System.Windows.Forms.TextBox();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// nameTB
//
this.nameTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.nameTB.Enabled = false;
this.nameTB.Location = new System.Drawing.Point(76, 12);
this.nameTB.Name = "nameTB";
this.nameTB.Size = new System.Drawing.Size(220, 20);
this.nameTB.TabIndex = 0;
//
// typeCB
//
this.typeCB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.typeCB.FormattingEnabled = true;
this.typeCB.Location = new System.Drawing.Point(76, 38);
this.typeCB.Name = "typeCB";
this.typeCB.Size = new System.Drawing.Size(220, 21);
this.typeCB.TabIndex = 1;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 15);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(38, 13);
this.label1.TabIndex = 2;
this.label1.Text = "Name:";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(12, 41);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(34, 13);
this.label2.TabIndex = 3;
this.label2.Text = "Type:";
//
// button1
//
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.button1.DialogResult = System.Windows.Forms.DialogResult.OK;
this.button1.Location = new System.Drawing.Point(275, 187);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 5;
this.button1.Text = "Save";
this.button1.UseVisualStyleBackColor = true;
//
// dataTB
//
this.dataTB.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.dataTB.Location = new System.Drawing.Point(12, 74);
this.dataTB.Multiline = true;
this.dataTB.Name = "dataTB";
this.dataTB.Size = new System.Drawing.Size(346, 107);
this.dataTB.TabIndex = 6;
this.dataTB.TextChanged += new System.EventHandler(this.dataTB_TextChanged);
//
// pictureBox1
//
this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.pictureBox1.Location = new System.Drawing.Point(302, 12);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(56, 50);
this.pictureBox1.TabIndex = 7;
this.pictureBox1.TabStop = false;
this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);
//
// EditBox
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(362, 216);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.dataTB);
this.Controls.Add(this.button1);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.typeCB);
this.Controls.Add(this.nameTB);
this.Name = "EditBox";
this.Text = "EditBox";
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox nameTB;
private System.Windows.Forms.ComboBox typeCB;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox dataTB;
private System.Windows.Forms.PictureBox pictureBox1;
}
}