freeso/TSOClient/FSO.IDE/ResourceBrowser/OBJDSelectorControl.cs
riperiperi b57ebbd141 Cleanup: Remove most unused usings and MPL per-file licenses
MPL per-file was used in older project files, but should apply to the whole project, so having it there was redundant.
2023-11-25 03:45:29 +00:00

141 lines
4.4 KiB
C#

using System;
using System.Windows.Forms;
using FSO.Files.Formats.IFF.Chunks;
using FSO.Files.Formats.IFF;
using FSO.Content;
namespace FSO.IDE.ResourceBrowser
{
public partial class OBJDSelectorControl : UserControl
{
public OBJDSelectorControl()
{
InitializeComponent();
}
private OBJDSelector[] Selectors;
private OBJD Definition;
private IffChunk Active;
private bool OwnChange;
public void SetSelectors(OBJD objd, IffChunk active, OBJDSelector[] selectors)
{
Active = active;
Definition = objd;
SelectButton.Dock = DockStyle.Fill;
SelectCombo.Dock = DockStyle.Fill;
SelectButton.Visible = selectors.Length == 1;
SelectCombo.Visible = selectors.Length > 1;
Selectors = selectors;
if (selectors.Length > 1)
{
SelectCombo.Items.Clear();
SelectCombo.Items.Add("-- Not Selected --");
int i = 1;
OwnChange = true;
SelectCombo.SelectedIndex = 0;
foreach (var sel in selectors)
{
SelectCombo.Items.Add(sel);
if (sel.FieldName != null && objd.GetPropertyByName<ushort>(sel.FieldName) == active.ChunkID)
SelectCombo.SelectedIndex = i;
i++;
}
OwnChange = false;
} else if (selectors.Length > 0)
{
var sel = selectors[0];
if (sel.FieldName != null && objd.GetPropertyByName<ushort>(sel.FieldName) == active.ChunkID)
{
SelectButton.Text = "Selected as " + sel.Name;
SelectButton.Enabled = false;
} else
{
SelectButton.Text = "Select as " + sel.Name;
SelectButton.Enabled = true;
}
}
else
{
Enabled = false;
Visible = false;
}
}
private void SelectCombo_SelectedIndexChanged(object sender, EventArgs e)
{
if (SelectCombo.SelectedIndex == -1 || OwnChange) return;
var id = Active.ChunkID;
var def = Definition;
if (SelectCombo.SelectedIndex == 0)
{
foreach (var sel2 in Selectors)
{
if (def.GetPropertyByName<ushort>(sel2.FieldName) == id)
{
var prop = sel2.FieldName;
Content.Content.Get().Changes.BlockingResMod(new ResAction(() =>
{
def.SetPropertyByName(prop, 0);
}, def));
}
}
}
else
{
var sel = Selectors[SelectCombo.SelectedIndex - 1];
if (sel.FieldName != null)
{
var prop = sel.FieldName;
Content.Content.Get().Changes.BlockingResMod(new ResAction(() =>
{
def.SetPropertyByName(prop, id);
}, def));
}
}
}
private void SelectButton_Click(object sender, EventArgs e)
{
var sel = Selectors[0];
if (sel.Callback != null) sel.Callback(Active);
else if (sel.FieldName != null)
{
var prop = sel.FieldName;
var id = Active.ChunkID;
var def = Definition;
Content.Content.Get().Changes.BlockingResMod(new ResAction(() =>
{
def.SetPropertyByName(prop, id);
}, def));
}
}
}
public class OBJDSelector
{
public delegate void OBJDSelectorCallback(IffChunk chunk);
public string Name;
public string FieldName;
public OBJDSelectorCallback Callback;
public OBJDSelector(string name, string field) : this(name, field, null) { }
public OBJDSelector(string name, string field, OBJDSelectorCallback callback)
{
Name = name;
FieldName = field;
Callback = callback;
}
public override string ToString()
{
return Name;
}
}
}