Switch-Toolbox/File_Format_Library/GUI/Advanced Editor/TextureViewer.cs
KillzXGaming 7cf2e9c571 Cleanup
2019-07-16 17:45:10 -04:00

210 lines
7.5 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;
using System.Windows.Forms;
using Toolbox.Library;
using Toolbox.Library.Rendering;
using Toolbox.Library.Forms;
using FirstPlugin.Forms;
namespace FirstPlugin
{
public partial class TextureViewer : STUserControl
{
public ImageList textureImageList;
public TextureData SelectedTex;
public TextureViewer()
{
InitializeComponent();
textureListView.SetDoubleBuffer();
textureImageList = new ImageList()
{
ColorDepth = ColorDepth.Depth32Bit,
ImageSize = new Size(75, 75),
};
}
public void ClearForm()
{
textureImageList.Images.Clear();
textureListView.Items.Clear();
textureImageList = null;
}
public void LoadTextures()
{
textureListView.SuspendLayout();
textureListView.BeginUpdate();
textureImageList.Images.Clear();
textureListView.Items.Clear();
textureListView.LargeImageList = textureImageList;
textureListView.View = View.LargeIcon;
textureListView.FullRowSelect = true;
TextureLoader.SetControlSpacing(textureListView, 80, 80);
int imageIndex = 0;
Thread Thread = new Thread((ThreadStart)(() =>
{
foreach (BNTX bntx in PluginRuntime.bntxContainers)
{
foreach (var tex in bntx.Textures.Values)
{
Bitmap temp = tex.GetBitmap();
if (textureListView.InvokeRequired)
{
textureListView.Invoke((MethodInvoker)delegate {
textureListView.Items.Add(tex.Text, imageIndex++);
// Running on the UI thread
textureImageList.Images.Add(temp);
var dummy = textureImageList.Handle;
});
}
temp.Dispose();
}
}
foreach (BFLIM tex in PluginRuntime.bflimTextures.Values)
{
Bitmap temp = tex.GetBitmap();
if (textureListView.InvokeRequired)
{
textureListView.Invoke((MethodInvoker)delegate {
textureListView.Items.Add(tex.Text, imageIndex++);
// Running on the UI thread
textureImageList.Images.Add(temp);
var dummy = textureImageList.Handle;
});
}
temp.Dispose();
}
}));
Thread.Start();
textureListView.EndUpdate();
textureListView.ResumeLayout();
}
private void textureListView_SelectedIndexChanged(object sender, EventArgs e)
{
}
ImageEditorForm imageEditorForm;
private void textureListView_DoubleClick(object sender, EventArgs e)
{
if (PluginRuntime.bflimTextures.Count > 0)
{
if (PluginRuntime.bflimTextures.ContainsKey(textureListView.SelectedItems[0].Text))
{
var tex = PluginRuntime.bflimTextures[textureListView.SelectedItems[0].Text];
if (imageEditorForm == null || imageEditorForm.IsDisposed)
{
imageEditorForm = new ImageEditorForm(false);
imageEditorForm.Show(this);
}
imageEditorForm.editorBase.Text = Text;
imageEditorForm.editorBase.Dock = DockStyle.Fill;
imageEditorForm.editorBase.LoadProperties(tex.GenericProperties);
imageEditorForm.editorBase.LoadImage(tex);
}
}
foreach (BNTX bntx in PluginRuntime.bntxContainers)
{
if (bntx.Textures.ContainsKey(textureListView.SelectedItems[0].Text))
{
TextureData tex = bntx.Textures[textureListView.SelectedItems[0].Text];
if (imageEditorForm == null || imageEditorForm.IsDisposed)
{
imageEditorForm = new ImageEditorForm(false);
imageEditorForm.Show(this);
}
imageEditorForm.editorBase.Text = Text;
imageEditorForm.editorBase.Dock = DockStyle.Fill;
imageEditorForm.editorBase.LoadProperties(tex.Texture);
imageEditorForm.editorBase.LoadImage(tex);
break;
}
}
}
public override void OnControlClosing()
{
ClearForm();
}
private void textureListView_MouseClick(object sender, MouseEventArgs e)
{
switch (e.Button)
{
case MouseButtons.Right:
{
foreach (BNTX bntx in PluginRuntime.bntxContainers)
{
if (bntx.Textures.ContainsKey(textureListView.SelectedItems[0].Text))
{
SelectedTex = bntx.Textures[textureListView.SelectedItems[0].Text];
Point p = new Point(e.X, e.Y);
textureContextMenuStrip1.Show(textureListView, p);
}
}
}
break;
}
}
private void exportToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.FileName = SelectedTex.Text;
sfd.DefaultExt = "bftex";
sfd.Filter = "Supported Formats|*.bftex;*.dds; *.png;*.tga;*.jpg;*.tiff|" +
"Binary Texture |*.bftex|" +
"Microsoft DDS |*.dds|" +
"Portable Network Graphics |*.png|" +
"Joint Photographic Experts Group |*.jpg|" +
"Bitmap Image |*.bmp|" +
"Tagged Image File Format |*.tiff|" +
"All files(*.*)|*.*";
if (sfd.ShowDialog() == DialogResult.OK)
{
SelectedTex.Export(sfd.FileName);
}
}
private void replaceToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Supported Formats|*.bftex;*.dds; *.png;*.tga;*.jpg;*.tiff|" +
"Binary Texture |*.bftex|" +
"Microsoft DDS |*.dds|" +
"Portable Network Graphics |*.png|" +
"Joint Photographic Experts Group |*.jpg|" +
"Bitmap Image |*.bmp|" +
"Tagged Image File Format |*.tiff|" +
"All files(*.*)|*.*";
ofd.Multiselect = false;
if (ofd.ShowDialog() == DialogResult.OK)
{
SelectedTex.Replace(ofd.FileName);
}
}
}
}