1
0
mirror of synced 2024-12-15 00:51:36 +01:00
Switch-Toolbox/Switch_FileFormatsMain/GUI/Advanced Editor/TextureViewer.cs
KillzXGaming d5f50d91b8 More fixes to UI and file saving. Also add in bflim editing.
Fixed the shader param editor not adjusting the height for float4 types.
Fixed the shape editor not adjusting some lists properly.
Fixed hash based sarcs not saving right (menu.szs for example).
Fixed bflim sarc alignment from being corrupted.
Add alignment for effect file formats in sarc.
Add bflim to the texture loader in sarc for batch previewing/edits
2019-03-29 15:28:35 -04:00

211 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 Switch_Toolbox.Library;
using Switch_Toolbox.Library.Rendering;
using Switch_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);
}
}
}
}