Files
libexeinfo/exeinfogui/GEM/TabGemResources.xeto.cs

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;
}
}
}
}