mirror of
https://github.com/Gericom/EveryFileExplorer.git
synced 2025-06-19 09:25:42 -04:00
259 lines
6.9 KiB
C#
259 lines
6.9 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.Windows.Forms;
|
|
using Tao.OpenGl;
|
|
using LibEveryFileExplorer._3D;
|
|
using System.Drawing.Imaging;
|
|
using LibEveryFileExplorer.Files;
|
|
using LibEveryFileExplorer;
|
|
using System.Runtime.InteropServices;
|
|
using _3DS.NintendoWare.GFX;
|
|
|
|
namespace _3DS.UI
|
|
{
|
|
public partial class CGFXViewer : Form
|
|
{
|
|
ImageList ImageL;
|
|
CMDLViewer ModViewer = null;
|
|
|
|
CGFX mod;
|
|
|
|
public CGFXViewer(CGFX mod)
|
|
{
|
|
this.mod = mod;
|
|
InitializeComponent();
|
|
Win32Util.SetWindowTheme(treeView1.Handle, "explorer", null);
|
|
ImageL = new ImageList();
|
|
ImageL.ColorDepth = ColorDepth.Depth32Bit;
|
|
ImageL.ImageSize = new Size(16, 16);
|
|
ImageL.Images.Add(Resource.jar);
|
|
ImageL.Images.Add(Resource.point);
|
|
ImageL.Images.Add(Resource.images_stack);
|
|
ImageL.Images.Add(Resource.image_sunset);
|
|
ImageL.Images.Add(Resource.films);
|
|
ImageL.Images.Add(Resource.film);
|
|
ImageL.Images.Add(Resource.tables_stacks);
|
|
ImageL.Images.Add(Resource.table);
|
|
ImageL.Images.Add(Resource.weather_clouds);
|
|
ImageL.Images.Add(Resource.weather_cloud);
|
|
ImageL.Images.Add(Resource.lighthouse_shine);
|
|
ImageL.Images.Add(Resource.light_bulb);
|
|
treeView1.ImageList = ImageL;
|
|
}
|
|
|
|
|
|
private void CGFX_Load(object sender, EventArgs e)
|
|
{
|
|
bool sel = false;
|
|
treeView1.BeginUpdate();
|
|
treeView1.Nodes.Clear();
|
|
if (mod.Data.Models != null)
|
|
{
|
|
TreeNode section = new TreeNode("Models", 0, 0);
|
|
treeView1.Nodes.Add(section);
|
|
for (int i = 0; i < mod.Data.Models.Length; i++)
|
|
{
|
|
TreeNode entry = new TreeNode(mod.Data.Models[i].Name, 1, 1) { Tag = mod.Data.Models[i] };
|
|
section.Nodes.Add(entry);
|
|
if (i == 0 && !sel)
|
|
{
|
|
section.Expand();
|
|
treeView1.SelectedNode = entry;
|
|
sel = true;
|
|
}
|
|
//TODO: Content of CMDL
|
|
}
|
|
}
|
|
if (mod.Data.Textures != null)
|
|
{
|
|
TreeNode section = new TreeNode("Textures", 2, 2);
|
|
treeView1.Nodes.Add(section);
|
|
for (int i = 0; i < mod.Data.Textures.Length; i++)
|
|
{
|
|
TreeNode entry = new TreeNode(mod.Data.Textures[i].Name, 3, 3) { Tag = mod.Data.Textures[i] };
|
|
section.Nodes.Add(entry);
|
|
if (i == 0 && !sel)
|
|
{
|
|
section.Expand();
|
|
treeView1.SelectedNode = entry;
|
|
sel = true;
|
|
}
|
|
}
|
|
}
|
|
if (mod.Data.Dictionaries[2] != null)
|
|
{
|
|
TreeNode section = new TreeNode("Lookup Tables", 6, 6);
|
|
treeView1.Nodes.Add(section);
|
|
for (int i = 0; i < mod.Data.Dictionaries[2].Count; i++)
|
|
{
|
|
TreeNode entry = new TreeNode(mod.Data.Dictionaries[2][i].Name, 7, 7);// { Tag = mod.Data.Textures[i] };
|
|
section.Nodes.Add(entry);
|
|
}
|
|
}
|
|
if (mod.Data.Dictionaries[6] != null)
|
|
{
|
|
TreeNode section = new TreeNode("Lights", 10, 10);
|
|
treeView1.Nodes.Add(section);
|
|
for (int i = 0; i < mod.Data.Dictionaries[6].Count; i++)
|
|
{
|
|
TreeNode entry = new TreeNode(mod.Data.Dictionaries[6][i].Name, 11, 11);// { Tag = mod.Data.Textures[i] };
|
|
section.Nodes.Add(entry);
|
|
if (i == 0 && !sel)
|
|
{
|
|
section.Expand();
|
|
treeView1.SelectedNode = entry;
|
|
sel = true;
|
|
}
|
|
}
|
|
}
|
|
if (mod.Data.Dictionaries[7] != null)
|
|
{
|
|
TreeNode section = new TreeNode("Fog", 8, 8);
|
|
treeView1.Nodes.Add(section);
|
|
for (int i = 0; i < mod.Data.Dictionaries[7].Count; i++)
|
|
{
|
|
TreeNode entry = new TreeNode(mod.Data.Dictionaries[7][i].Name, 9, 9);// { Tag = mod.Data.Textures[i] };
|
|
section.Nodes.Add(entry);
|
|
if (i == 0 && !sel)
|
|
{
|
|
section.Expand();
|
|
treeView1.SelectedNode = entry;
|
|
sel = true;
|
|
}
|
|
}
|
|
}
|
|
if (mod.Data.SkeletonAnimations != null)
|
|
{
|
|
TreeNode section = new TreeNode("Skeleton Animations", 4, 4);
|
|
treeView1.Nodes.Add(section);
|
|
for (int i = 0; i < mod.Data.SkeletonAnimations.Length; i++)
|
|
{
|
|
TreeNode entry = new TreeNode(mod.Data.SkeletonAnimations[i].Name, 5, 5) { Tag = mod.Data.SkeletonAnimations[i] };
|
|
section.Nodes.Add(entry);
|
|
if (i == 0 && !sel)
|
|
{
|
|
section.Expand();
|
|
treeView1.SelectedNode = entry;
|
|
sel = true;
|
|
}
|
|
}
|
|
}
|
|
if (mod.Data.MaterialAnimations != null)
|
|
{
|
|
TreeNode section = new TreeNode("Material Animations", 4, 4);
|
|
treeView1.Nodes.Add(section);
|
|
for (int i = 0; i < mod.Data.MaterialAnimations.Length; i++)
|
|
{
|
|
TreeNode entry = new TreeNode(mod.Data.MaterialAnimations[i].Name, 5, 5) { Tag = mod.Data.MaterialAnimations[i] };
|
|
section.Nodes.Add(entry);
|
|
if (i == 0 && !sel)
|
|
{
|
|
section.Expand();
|
|
treeView1.SelectedNode = entry;
|
|
sel = true;
|
|
}
|
|
}
|
|
}
|
|
if (mod.Data.VisibilityAnimations != null)
|
|
{
|
|
TreeNode section = new TreeNode("Visibility Animations", 4, 4);
|
|
treeView1.Nodes.Add(section);
|
|
for (int i = 0; i < mod.Data.VisibilityAnimations.Length; i++)
|
|
{
|
|
TreeNode entry = new TreeNode(mod.Data.VisibilityAnimations[i].Name, 5, 5) { Tag = mod.Data.VisibilityAnimations[i] };
|
|
section.Nodes.Add(entry);
|
|
if (i == 0 && !sel)
|
|
{
|
|
section.Expand();
|
|
treeView1.SelectedNode = entry;
|
|
sel = true;
|
|
}
|
|
}
|
|
}
|
|
treeView1.EndUpdate();
|
|
}
|
|
|
|
private void CGFX_Resize(object sender, EventArgs e)
|
|
{
|
|
if (ModViewer != null)
|
|
{
|
|
ModViewer.Render();
|
|
ModViewer.Render();
|
|
}
|
|
}
|
|
|
|
private void CGFX_Layout(object sender, LayoutEventArgs e)
|
|
{
|
|
if (ModViewer != null)
|
|
{
|
|
ModViewer.Render();
|
|
}
|
|
}
|
|
|
|
private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
|
|
{
|
|
if (ModViewer != null)
|
|
{
|
|
ModViewer.Render();
|
|
}
|
|
}
|
|
|
|
private void NSBMDViewer_Activated(object sender, EventArgs e)
|
|
{
|
|
//render it multiple times to avoid glitches!
|
|
if (ModViewer != null)
|
|
{
|
|
for (int i = 0; i < 8; i++) ModViewer.Render();
|
|
}
|
|
}
|
|
|
|
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
|
|
{
|
|
switch (e.Node.ImageIndex)
|
|
{
|
|
case 1:
|
|
ModViewer = new CMDLViewer(mod, (CMDL)e.Node.Tag) { Dock = DockStyle.Fill };
|
|
ModViewer.Width = panel1.Width;
|
|
ModViewer.Height = panel1.Height;
|
|
panel1.SuspendLayout();
|
|
panel1.Controls.Add(ModViewer);
|
|
if (panel1.Controls.Count > 1) panel1.Controls.RemoveAt(0);
|
|
panel1.Invalidate();
|
|
panel1.ResumeLayout();
|
|
ModViewer.Invalidate();
|
|
ModViewer.Render();
|
|
ModViewer.Render();
|
|
break;
|
|
case 3:
|
|
ModViewer = null;
|
|
panel1.SuspendLayout();
|
|
panel1.Controls.Add(new TXOBViewer((ImageTextureCtr)e.Node.Tag) { Dock = DockStyle.Fill, Width = panel1.Width, Height = panel1.Height });
|
|
if (panel1.Controls.Count > 1) panel1.Controls.RemoveAt(0);
|
|
panel1.Invalidate();
|
|
panel1.ResumeLayout();
|
|
break;
|
|
default:
|
|
ModViewer = null;
|
|
panel1.SuspendLayout();
|
|
panel1.Controls.Clear();
|
|
panel1.Invalidate();
|
|
panel1.ResumeLayout();
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)
|
|
{
|
|
if (ModViewer != null)
|
|
{
|
|
ModViewer.Render();
|
|
}
|
|
}
|
|
}
|
|
}
|