mirror of
https://github.com/claunia/libexeinfo.git
synced 2025-12-16 19:14:24 +00:00
118 lines
4.1 KiB
C#
118 lines
4.1 KiB
C#
|
|
using System;
|
|||
|
|
using Eto.Forms;
|
|||
|
|
using Eto.Serialization.Xaml;
|
|||
|
|
|
|||
|
|
namespace exeinfogui.GEM
|
|||
|
|
{
|
|||
|
|
public class TabGemResources : TabPage
|
|||
|
|
{
|
|||
|
|
PanelGemBox panelBox;
|
|||
|
|
PanelGemGeneric panelGeneric;
|
|||
|
|
PanelGemIcon panelIcon;
|
|||
|
|
PanelGemImage panelImage;
|
|||
|
|
PanelGemString panelString;
|
|||
|
|
PanelGemText panelText;
|
|||
|
|
Panel pnlResource;
|
|||
|
|
TreeGridItemCollection treeData;
|
|||
|
|
TreeGridView treeResources;
|
|||
|
|
|
|||
|
|
public TabGemResources()
|
|||
|
|
{
|
|||
|
|
XamlReader.Load(this);
|
|||
|
|
|
|||
|
|
treeResources.Columns.Add(new GridColumn {HeaderText = "Type", DataCell = new TextBoxCell(0)});
|
|||
|
|
|
|||
|
|
treeResources.AllowMultipleSelection = false;
|
|||
|
|
treeResources.SelectionChanged += TreeResourcesOnSelectionChanged;
|
|||
|
|
|
|||
|
|
panelGeneric = new PanelGemGeneric();
|
|||
|
|
panelString = new PanelGemString();
|
|||
|
|
panelText = new PanelGemText();
|
|||
|
|
panelBox = new PanelGemBox();
|
|||
|
|
panelImage = new PanelGemImage();
|
|||
|
|
panelIcon = new PanelGemIcon();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void Update(libexeinfo.GEM.TreeObjectNode[] roots)
|
|||
|
|
{
|
|||
|
|
treeData = new TreeGridItemCollection();
|
|||
|
|
|
|||
|
|
for(int i = 0; i < roots.Length; i++)
|
|||
|
|
{
|
|||
|
|
TreeGridItem root = new TreeGridItem {Values = new object[] {$"Root {i}", null}};
|
|||
|
|
|
|||
|
|
AddObjectToTree(root, roots[i]);
|
|||
|
|
|
|||
|
|
treeData.Add(root);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
treeResources.DataStore = treeData;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void TreeResourcesOnSelectionChanged(object sender, EventArgs eventArgs)
|
|||
|
|
{
|
|||
|
|
if(!(((TreeGridItem)treeResources.SelectedItem)?.Values[1] is libexeinfo.GEM.TreeObjectNode node))
|
|||
|
|
{
|
|||
|
|
pnlResource.Content = null;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
switch(node.type)
|
|||
|
|
{
|
|||
|
|
case libexeinfo.GEM.ObjectTypes.G_BUTTON:
|
|||
|
|
case libexeinfo.GEM.ObjectTypes.G_STRING:
|
|||
|
|
case libexeinfo.GEM.ObjectTypes.G_TITLE:
|
|||
|
|
panelString.Update(node);
|
|||
|
|
pnlResource.Content = panelString;
|
|||
|
|
break;
|
|||
|
|
case libexeinfo.GEM.ObjectTypes.G_TEXT:
|
|||
|
|
case libexeinfo.GEM.ObjectTypes.G_BOXTEXT:
|
|||
|
|
case libexeinfo.GEM.ObjectTypes.G_FTEXT:
|
|||
|
|
case libexeinfo.GEM.ObjectTypes.G_FBOXTEXT:
|
|||
|
|
panelText.Update(node);
|
|||
|
|
pnlResource.Content = panelText;
|
|||
|
|
break;
|
|||
|
|
case libexeinfo.GEM.ObjectTypes.G_BOX:
|
|||
|
|
case libexeinfo.GEM.ObjectTypes.G_IBOX:
|
|||
|
|
case libexeinfo.GEM.ObjectTypes.G_BOXCHAR:
|
|||
|
|
panelBox.Update(node);
|
|||
|
|
pnlResource.Content = panelBox;
|
|||
|
|
break;
|
|||
|
|
case libexeinfo.GEM.ObjectTypes.G_IMAGE:
|
|||
|
|
panelImage.Update(node);
|
|||
|
|
pnlResource.Content = panelImage;
|
|||
|
|
break;
|
|||
|
|
case libexeinfo.GEM.ObjectTypes.G_ICON:
|
|||
|
|
panelIcon.Update(node);
|
|||
|
|
pnlResource.Content = panelIcon;
|
|||
|
|
break;
|
|||
|
|
/* case libexeinfo.GEM.ObjectTypes.G_USERDEF: break;
|
|||
|
|
case libexeinfo.GEM.ObjectTypes.G_CICON: break;*/
|
|||
|
|
default:
|
|||
|
|
panelGeneric.Update(node);
|
|||
|
|
pnlResource.Content = panelGeneric;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static void AddObjectToTree(TreeGridItem parent, libexeinfo.GEM.TreeObjectNode node)
|
|||
|
|
{
|
|||
|
|
while(true)
|
|||
|
|
{
|
|||
|
|
TreeGridItem item = new TreeGridItem {Values = new object[] {$"{node.type}", node}};
|
|||
|
|
|
|||
|
|
if(node.child != null) AddObjectToTree(item, node.child);
|
|||
|
|
|
|||
|
|
parent.Children.Add(item);
|
|||
|
|
|
|||
|
|
if(node.sibling != null)
|
|||
|
|
{
|
|||
|
|
node = node.sibling;
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|