mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/PCK-Studio.git
synced 2026-05-23 20:14:37 +00:00
221 lines
7.2 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|