Files
PCK-Studio/MinecraftUSkinEditor/Forms/Utilities/COLEditor.cs
2022-06-05 20:27:04 +02:00

221 lines
7.2 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MetroFramework.Forms;
using PckStudio.Classes.FileTypes;
namespace PckStudio.Forms.Utilities
{
public partial class COLEditor : MetroForm
{
COLFile cf = new COLFile();
public byte[] data { get; private set; } = new byte[0];
public COLEditor(COLFile colFile)
{
InitializeComponent();
cf = colFile;
foreach (var obj in cf.entries)
{
TreeNode tn = new TreeNode(obj.name);
tn.Tag = obj;
treeView1.Nodes.Add(tn);
}
foreach (var obj in cf.waterEntries)
{
TreeNode tn = new TreeNode(obj.name);
tn.Tag = obj;
treeView2.Nodes.Add(tn);
}
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (treeView1.SelectedNode.Tag == null)
return;
var colorEntry = (COLFile.ColorEntry)treeView1.SelectedNode.Tag;
alphaUpDown.Visible = false;
alphaLabel.Visible = false;
var color = colorEntry.color;
redUpDown.Value = color >> 16 & 0xff;
greenUpDown.Value = color >> 8 & 0xff;
blueUpDown.Value = color & 0xff;
pictureBox1.BackColor = Color.FromArgb(0xff << 24 | (int)color);
}
private void treeView2_AfterSelect(object sender, TreeViewEventArgs e)
{
if (treeView2.SelectedNode.Tag == null)
return;
var colorEntry = (COLFile.ExtendedColorEntry)treeView2.SelectedNode.Tag;
int color = (int)colorEntry.color;
alphaUpDown.Enabled = true;
alphaUpDown.Visible = true;
alphaLabel.Visible = true;
alphaUpDown.Value = color >> 24 & 0xff;
redUpDown.Value = color >> 16 & 0xff;
greenUpDown.Value = color >> 8 & 0xff;
blueUpDown.Value = color & 0xff;
pictureBox1.BackColor = Color.FromArgb(color);
}
private void saveToolStripMenuItem1_Click(object sender, EventArgs e)
{
using (var stream = new MemoryStream())
{
cf.Save(stream);
data = stream.ToArray();
}
}
static byte[] StringToByteArrayFastest(string hex)
{
if (hex.Length % 2 == 1)
throw new Exception("The binary key cannot have an odd number of digits");
byte[] arr = new byte[hex.Length >> 1];
for (int i = 0; i < hex.Length >> 1; ++i)
{
arr[i] = (byte)((GetHexVal(hex[i << 1]) << 4) + (GetHexVal(hex[(i << 1) + 1])));
}
return arr;
}
static int GetHexVal(char hex)
{
int val = (int)hex;
return val - (val < 58 ? 48 : (val < 97 ? 55 : 87));
}
public void treeView1_KeyDown(object sender, KeyEventArgs e)
{
var node = treeView1.SelectedNode;
if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ColorEntry)
{
cf.entries.Remove((COLFile.ColorEntry)node.Tag);
if (treeView1.Nodes.Count > 0) treeView1.Nodes.Remove(node);
}
}
private void treeView2_KeyDown(object sender, KeyEventArgs e)
{
var node = treeView2.SelectedNode;
if (e.KeyCode == Keys.Delete && node.Tag is COLFile.ExtendedColorEntry)
{
cf.waterEntries.Remove((COLFile.ExtendedColorEntry)node.Tag);
if (treeView2.Nodes.Count > 0) treeView2.Nodes.Remove(node);
}
}
private void colorBox_TextChanged(object sender, EventArgs e)
{
//TreeView tv = (TreeView)tabControl.SelectedTab.Controls[0];
//if (tv.SelectedNode == null || tv.SelectedNode.Tag == null)
// return;
//bool hasAlpha = tabControl.SelectedTab == waterTab;
//alphaUpDown.Enabled = hasAlpha;
//redUpDown.Value = StringToByteArrayFastest(colorTextbox.Text)[!hasAlpha ? 0 : 1];
//greenUpDown.Value = StringToByteArrayFastest(colorTextbox.Text)[!hasAlpha ? 1 : 2];
//blueUpDown.Value = StringToByteArrayFastest(colorTextbox.Text)[!hasAlpha ? 2 : 3];
//int color = 0; /*colorEntry.color*/;
// int argb = (int)((0xff000000u) | (color >> 24));
//colorTextbox.MaxLength = hasAlpha ? 8 : 6;
//alphaLabel.Visible = false;
//alphaUpDown.Visible = false;
//if (hasAlpha)
//{
// alphaLabel.Visible = true;
// alphaUpDown.Visible = true;
// alphaUpDown.Value = StringToByteArrayFastest(colorTextbox.Text)[0];
// argb = color >> 24 | color << 8;
//}
//pictureBox1.BackColor = Color.FromArgb(argb);
}
private void color_ValueChanged(object sender, EventArgs e)
{
//TreeView tv = (TreeView)tabControl.SelectedTab.Controls[0];
//if (tv.SelectedNode == null) return;
//byte[] origHex = StringToByteArrayFastest(tv.SelectedNode.Tag.ToString());
//bool hasAlpha = tabControl.SelectedTab == waterTab;
//string hex = "";
//if (((NumericUpDown)sender).Name == "numericUpDown2")
//{
// hex += ((int)alphaUpDown.Value).ToString("X2");
// hex += origHex[1].ToString("X2");
// hex += origHex[2].ToString("X2");
// hex += origHex[3].ToString("X2");
//}
//else if (((NumericUpDown)sender).Name == "numericUpDown3")
//{
// if (hasAlpha) hex += origHex[0].ToString("X2");
// hex += ((int)redUpDown.Value).ToString("X2");
// hex += origHex[hasAlpha ? 2 : 1].ToString("X2");
// hex += origHex[hasAlpha ? 3 : 2].ToString("X2");
//}
//else if (((NumericUpDown)sender).Name == "numericUpDown4")
//{
// if (hasAlpha) hex += origHex[0].ToString("X2");
// hex += origHex[hasAlpha ? 1 : 0].ToString("X2");
// hex += ((int)greenUpDown.Value).ToString("X2");
// hex += origHex[hasAlpha ? 3 : 2].ToString("X2");
//}
//else if (((NumericUpDown)sender).Name == "numericUpDown5")
//{
// if (hasAlpha) hex += origHex[0].ToString("X2");
// hex += origHex[hasAlpha ? 1 : 0].ToString("X2");
// hex += origHex[hasAlpha ? 2 : 1].ToString("X2");
// hex += ((int)blueUpDown.Value).ToString("X2");
//}
//else // just in case some weird thing happens i dunno - matt
//{
// if (hasAlpha) hex += origHex[0].ToString("X2");
// hex += origHex[hasAlpha ? 1 : 0].ToString("X2");
// hex += origHex[hasAlpha ? 2 : 1].ToString("X2");
// hex += origHex[hasAlpha ? 3 : 2].ToString("X2");
//}
//Console.WriteLine(hex);
//colorTextbox.Text = hex;
}
private void setColorBtn_Click(object sender, EventArgs e)
{
ColorDialog colorPick = new ColorDialog();
colorPick.AllowFullOpen = true;
colorPick.AnyColor = true;
colorPick.SolidColorOnly = tabControl.SelectedTab == colorsTab;
if (colorPick.ShowDialog() != DialogResult.OK) return;
pictureBox1.BackColor = colorPick.Color;
if (tabControl.SelectedTab == waterTab && treeView2.SelectedNode != null &&
treeView2.SelectedNode.Tag != null && treeView2.SelectedNode.Tag is COLFile.ExtendedColorEntry)
{
var colorEntry = ((COLFile.ExtendedColorEntry)treeView2.SelectedNode.Tag);
colorEntry.color = (uint)colorPick.Color.ToArgb();
}
else if (tabControl.SelectedTab == colorsTab && treeView1.SelectedNode != null &&
treeView1.SelectedNode.Tag != null && treeView1.SelectedNode.Tag is COLFile.ColorEntry)
{
var colorEntry = ((COLFile.ColorEntry)treeView1.SelectedNode.Tag);
colorEntry.color = (uint)colorPick.Color.ToArgb() & 0xffffff;
}
colorPick.Dispose();
}
private void COLEditor_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult = DialogResult.OK;
}
}
}