using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using ComponentsAdv;
using CompoundFileBinary;
namespace BinaryControlTest
{
public partial class MDIChild : AbstractMDIChild
{
string CurrentFileName;
TNComparator_Marker m_MarkerComparator = new TNComparator_Marker();
public MDIChild(Stream s, string filename, bool openasbiff)
{
InitializeComponent();
CurrentFileName = filename;
treeListViewAdv1.Nodes.Comparer = m_MarkerComparator;
binaryControl2.Root.MarkerAdded += new MarkerRoot.MarkerAdded_Handler(Root_MarkerAdded);
binaryControl2.Root.MarkerRemoved += new MarkerRoot.MarkerRemoved_Handler(Root_MarkerRemoved);
binaryControl2.Root.ChildStartAtChanged += new IMarkerGroup.ChildStartAtChanged_Handler(Root_ChildStartAtChanged);
if (openasbiff)
{
ZBiffFile zbiffile = new ZBiffFile(s);
zbiffile.Read();
TreeNode tn = new TreeNode(Path.GetFileName(filename));
zbiffile.Root.PopulateTreeView(tn);
treeView1.Nodes.Add(tn);
s.Close();
}
else
{
splitContainer2.Panel1Collapsed = true;
binaryControl2.DataStream = s;
}
}
void Root_ChildStartAtChanged(object sender, IMarker value)
{
foreach (Node n in treeListViewAdv1.Nodes)
{
if (n.Tag == value)
{
// That's the easiest way for now to "sort" the tree.
treeListViewAdv1.Nodes.Remove(n);
treeListViewAdv1.Nodes.Add(n);
break;
}
}
}
void Root_MarkerAdded(object sender, IMarker m)
{
if (m is IMarkerPrimitive)
treeListViewAdv1.Nodes.Add(new TN_MarkerPrimitive(m as IMarkerPrimitive));
else if (m is MarkerStructure)
treeListViewAdv1.Nodes.Add(new TN_MarkerStructure(m as MarkerStructure));
else if (m is MarkerArray)
treeListViewAdv1.Nodes.Add(new TN_MarkerArray(m as MarkerArray));
else
throw new Exception("Invalid type of object to add to the TreeListView.");
}
void Root_MarkerRemoved(object sender, IMarker value)
{
foreach (Node n in treeListViewAdv1.Nodes)
{
if (n.Tag == value)
{
treeListViewAdv1.Nodes.Remove(n);
break;
}
}
}
// For biff file only:
TreeNode lastnode = null;
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
// Open new stream
treeListViewAdv1.Nodes.Clear();
if (e.Node.Tag is ZBiffDirectoryStream)
binaryControl2.DataStream = new MemoryStream((e.Node.Tag as ZBiffDirectoryStream).Data);
else
binaryControl2.DataStream = null;
lastnode = e.Node;
}
private void copySelectionToolStripMenuItem_Click(object sender, System.EventArgs e)
{
}
private void markToolStripMenuItem_Click(object sender, System.EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveBloc("", "", binaryControl2.SelectionStart, (int)binaryControl2.SelectionLenght + 1));
}
private void floatToolStripMenuItem_Click(object sender, System.EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveFloat("", "", binaryControl2.CaretPos));
}
private void double64bitsToolStripMenuItem_Click(object sender, System.EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveDouble("", "", binaryControl2.CaretPos));
}
private void byteToolStripMenuItem_Click(object sender, EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveByte("", "", binaryControl2.CaretPos));
}
private void int16ToolStripMenuItem_Click(object sender, System.EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveInt16("", "", binaryControl2.CaretPos));
}
private void int32ToolStripMenuItem_Click(object sender, System.EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveInt32("", "", binaryControl2.CaretPos));
}
private void int64ToolStripMenuItem_Click(object sender, System.EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveInt64("", "", binaryControl2.CaretPos));
}
private void guidToolStripMenuItem_Click(object sender, System.EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveGuid("", "", binaryControl2.CaretPos));
}
private void aSCIIStringToolStripMenuItem_Click(object sender, System.EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveASCIIStringEndByZero("", "", binaryControl2.CaretPos));
}
private void aSCIIString8bitLengthToolStripMenuItem_Click(object sender, System.EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveASCIIString8bitLength("", "", binaryControl2.CaretPos));
}
private void aSCIIString16bitLengthToolStripMenuItem_Click(object sender, System.EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveASCIIString16bitLength("", "", binaryControl2.CaretPos));
}
private void aSCIIString32bitLengthToolStripMenuItem_Click(object sender, System.EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveASCIIString32bitLength("", "", binaryControl2.CaretPos));
}
private void aSCIIStringFixedLengthToolStripMenuItem_Click(object sender, EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveFixedLengthASCIIString("", "", binaryControl2.SelectionStart, binaryControl2.SelectionLenght));
}
private void unicodeStringToolStripMenuItem_Click(object sender, System.EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveUnicodeStringEndByZero("", "", binaryControl2.CaretPos));
}
private void unicodeString8bitLengthToolStripMenuItem_Click(object sender, System.EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveUnicodeString8bitLength("", "", binaryControl2.CaretPos));
}
private void unicodeString16bitLengthToolStripMenuItem_Click(object sender, System.EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveUnicodeString16bitLength("", "", binaryControl2.CaretPos));
}
private void unicodeString32bitLengthToolStripMenuItem_Click(object sender, System.EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveUnicodeString32bitLength("", "", binaryControl2.CaretPos));
}
private void unicodeStringFixedLengthToolStripMenuItem_Click(object sender, EventArgs e)
{
binaryControl2.Root.Add(new MarkerPrimitiveFixedLengthUnicodeString("", "", binaryControl2.SelectionStart, binaryControl2.SelectionLenght / 2));
}
private void removeToolStripMenuItem_Click(object sender, System.EventArgs e)
{
IMarker m = (IMarker)contextMenuStrip2.Tag;
binaryControl2.RemoveMarker(m.StartAt);
contextMenuStrip2.Tag = null;
}
private void structuredStorageHeaderToolStripMenuItem_Click(object sender, System.EventArgs e)
{
}
public override BinaryControl GetBinaryControl()
{
return binaryControl2;
}
private void binaryControl2_MarkerAdded(object sender, IMarker m)
{
}
private void renameToolStripMenuItem_Click(object sender, EventArgs e)
{
FormMarkerRename frm = new FormMarkerRename();
frm.textBox1.Text = treeListViewAdv1.FocusedNode.Text;
if (frm.ShowDialog(this) == DialogResult.OK)
{
(treeListViewAdv1.FocusedNode.Tag as IMarker).Name = frm.textBox1.Text;
}
}
private void groupToolStripMenuItem_Click(object sender, EventArgs e)
{
MarkerStructure s = new MarkerStructure("", "");
binaryControl2.Root.Add(s);
List<Node> nodelist = treeListViewAdv1.NodesSelection.GetRootOnly();
foreach (Node nn in nodelist)
{
if (nn.Tag is IMarker)
{
IMarker m = nn.Tag as IMarker;
if (m.Parent != null &&
m.Parent is IMarkerList)
{
IMarkerList p = m.Parent as IMarkerList;
p.Remove(m);
s.Add(m);
}
else
throw new Exception("'Node.Tag.Parent' have to be of type 'IMarkerList'.");
}
else
throw new Exception("'Node.Tag' have to be of type 'IMarker'.");
}
}
private void createAGroupToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void createAnArrayToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void removeToolStripMenuItem1_Click(object sender, EventArgs e)
{
List<Node> nodelist = treeListViewAdv1.NodesSelection.GetRootOnly();
foreach (Node nn in nodelist)
{
if (nn.Tag is IMarker)
{
IMarker m = nn.Tag as IMarker;
if (m.Parent != null &&
m.Parent is IMarkerList)
{
(m.Parent as IMarkerList).Remove(m);
}
else
throw new Exception("'Node.Tag.Parent' have to be of type 'IMarkerList'.");
}
else
throw new Exception("'Node.Tag' have to be of type 'IMarker'.");
}
}
}
}