1
0
mirror of synced 2024-12-15 00:51:36 +01:00
Switch-Toolbox/Switch_FileFormatsMain/GUI/BFRES/Materials/RenderInfoEditor.cs

189 lines
6.1 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 Bfres.Structs;
using Switch_Toolbox.Library.Forms;
using Syroot.NintenTools.NSW.Bfres;
namespace FirstPlugin.Forms
{
public partial class RenderInfoEditor : UserControl
{
public RenderInfoEditor()
{
InitializeComponent();
renderInfoListView.ListViewItemSorter = new ListSorter();
}
FMAT material;
BfresRenderInfo activeRenderInfo;
public void InitializeRenderInfoList(FMAT mat)
{
material = mat;
renderInfoListView.BeginUpdate();
renderInfoListView.Items.Clear();
foreach (var rnd in material.renderinfo)
renderInfoListView.Items.Add(CreateRenderInfoItem(rnd));
renderInfoListView.FullRowSelect = true;
renderInfoListView.EndUpdate();
}
private ListViewItem CreateRenderInfoItem(BfresRenderInfo rnd)
{
ListViewItem item = new ListViewItem();
item.Text = rnd.Name;
string Value = "";
switch (rnd.Type)
{
case RenderInfoType.Int32:
Value = string.Join(",", rnd.ValueInt);
break;
case RenderInfoType.Single:
Value = string.Join(",", rnd.ValueFloat);
break;
case RenderInfoType.String:
Value = string.Join(",", rnd.ValueString);
break;
}
item.SubItems.Add(Value);
item.SubItems.Add(rnd.Type.ToString());
return item;
}
private void btnAddRenderInfo_Click(object sender, EventArgs e)
{
BfresRenderInfo info = new BfresRenderInfo();
activeRenderInfo = info;
activeRenderInfo.Type = RenderInfoType.Int32;
activeRenderInfo.ValueInt = new int[0];
bool IsEdited = EditData();
if (IsEdited)
{
material.renderinfo.Add(activeRenderInfo);
InitializeRenderInfoList(material);
}
}
private bool EditData()
{
if (activeRenderInfo == null)
return false;
RenderInfoDataEditor editor = new RenderInfoDataEditor();
editor.RenderInfoName = activeRenderInfo.Name;
editor.FormatType = activeRenderInfo.Type.ToString();
editor.LoadPresets();
switch (activeRenderInfo.Type)
{
case RenderInfoType.String:
editor.LoadValues(activeRenderInfo.ValueString);
break;
case RenderInfoType.Single:
editor.LoadValues(activeRenderInfo.ValueFloat);
break;
case RenderInfoType.Int32:
editor.LoadValues(activeRenderInfo.ValueInt);
break;
}
if (editor.ShowDialog() == DialogResult.OK)
{
activeRenderInfo.Name = editor.RenderInfoName;
if (editor.FormatType == "Single")
{
activeRenderInfo.Type = RenderInfoType.Single;
activeRenderInfo.ValueFloat = editor.GetFloats();
}
if (editor.FormatType == "Int32")
{
activeRenderInfo.Type = RenderInfoType.Int32;
activeRenderInfo.ValueInt = editor.GetInts();
}
if (editor.FormatType == "String")
{
activeRenderInfo.Type = RenderInfoType.String;
activeRenderInfo.ValueString = editor.GetStrings();
}
InitializeRenderInfoList(material);
return true;
}
return false;
}
private void btnRemoveRenderInfo_Click(object sender, EventArgs e)
{
if (renderInfoListView.SelectedItems.Count > 0)
{
var result = MessageBox.Show($"Are you sure you want to remove {renderInfoListView.SelectedItems[0].Text}? This could potentially break things!",
"Render Info Editor", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
if (result == DialogResult.OK)
{
material.renderinfo.RemoveAt(renderInfoListView.SelectedIndices[0]);
renderInfoListView.Items.RemoveAt(renderInfoListView.SelectedIndices[0]);
}
}
}
private void renderInfoListView_SelectedIndexChanged(object sender, EventArgs e)
{
if (renderInfoListView.SelectedItems.Count > 0)
{
btnRemove.Enabled = true;
}
else
btnRemove.Enabled = false;
}
private void renderInfoListView_DoubleClick(object sender, EventArgs e)
{
EditData();
}
private void renderInfoListView_SelectedIndexChanged_1(object sender, EventArgs e)
{
if (renderInfoListView.SelectedItems.Count > 0)
{
btnScrolDown.Enabled = true;
btnScrollUp.Enabled = true;
btnEdit.Enabled = true;
btnRemove.Enabled = true;
foreach (var info in material.renderinfo)
{
if (info.Name == renderInfoListView.SelectedItems[0].Text)
activeRenderInfo = info;
}
}
else
{
activeRenderInfo = null;
btnScrolDown.Enabled = false;
btnScrollUp.Enabled = false;
btnEdit.Enabled = false;
btnRemove.Enabled = false;
}
}
private void btnEdit_Click(object sender, EventArgs e)
{
EditData();
}
}
}