private void ValidateItem(EditorMetaData meta) { MsgPackValidation.ValidationItem[] issues = MsgPackValidation.ValidateItem(meta.Item); for (int t = issues.Length - 1; t >= 0; t--) { AddValidationItem(issues[t].WaistedBytes, meta, issues[t].Severity, issues[t].Message); } }
private void RefreshTree() { treeView1.Nodes.Clear(); richTextBox1.Clear(); lineairList.Clear(); listView1.Items.Clear(); if (ReferenceEquals(item, null)) { return; } TreeNode root = GetTreeNodeFor(item); Traverse(root, item); treeView1.Nodes.Add(root); treeView1.ExpandAll(); if (ReferenceEquals(data, null) || data.Length == 0) { data = item.ToBytes(); } //richTextBox1.Text = BitConverter.ToString(data).Replace('-', ' '); string[] hex = BitConverter.ToString(data).Split('-'); StringBuilder sb = new StringBuilder("{\\rtf1 {\\colortbl ;\\red255\\green0\\blue0;\\red0\\green77\\blue187;\\red127\\green127\\blue127;}\r\n"); int byteOffset = 0; EditorMetaData meta = null; byteOffset = AddParts(hex, root, byteOffset, sb, ref meta); if (!ReferenceEquals(meta, null) && !ReferenceEquals(meta.Item, null)) { while (meta.Item.StoredOffset + meta.Item.StoredLength > byteOffset) { sb.Append(hex[byteOffset]).Append(' '); byteOffset++; meta.Length++; } } meta = (EditorMetaData)item.Tag; meta.Length = byteOffset; if (hex.Length - 1 > byteOffset) { sb.Append("\\cf3 "); // gray } while (hex.Length - 1 > byteOffset) { sb.Append(hex[byteOffset]).Append(' '); byteOffset++; } sb.Append("\r\n}\r\n"); richTextBox1.Rtf = sb.ToString(); }
private void AddValidationItem(int waistedBytes, EditorMetaData meta, MsgPackValidation.ValidationSeverity sev, string message) { int iconId = (meta.Item.TypeId == MsgPackTypeId.NeverUsed) ? -1 : GetIconFor(meta.Item); ListViewItem lvi = new ListViewItem(waistedBytes.ToString(), iconId); lvi.StateImageIndex = (int)sev; lvi.SubItems.Add(message); lvi.Tag = meta.Node; listView1.Items.Add(lvi); }
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { if (ReferenceEquals(e.Node, null)) { propertyGrid1.SelectedObject = null; ColorSelectedNodeInHexView(null); ClearValidationSelection(); } else { propertyGrid1.SelectedObject = e.Node.Tag; propertyGrid1.ExpandAllGridItems(); MsgPackItem item = e.Node.Tag as MsgPackItem; if (ReferenceEquals(item, null)) { statusOffset.Text = "0 (0x00)"; ColorSelectedNodeInHexView(null); } else { statusOffset.Text = string.Concat(item.StoredOffset, " (0x", item.StoredOffset.ToString("X"), ")"); EditorMetaData meta = item.Tag as EditorMetaData; ColorSelectedNodeInHexView(meta); } if (!lvSelecting) { lvSelecting = true; try { for (int t = listView1.Items.Count - 1; t >= 0; t--) { bool select = listView1.Items[t].Tag == e.Node; listView1.Items[t].Selected = select; } } finally { lvSelecting = false; errorDetails.Visible = false; splitter4.Visible = false; } } } }
private void ColorSelectedNodeInHexView(EditorMetaData meta) { int preserveSelStart = richTextBox1.SelectionStart; int preserveSelLength = richTextBox1.SelectionLength; bool preserveSelecting = rtbSelecting; rtbSelecting = true; SendMessage(richTextBox1.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero); try { richTextBox1.SelectAll(); richTextBox1.SelectionBackColor = richTextBox1.BackColor; if (!ReferenceEquals(meta, null)) { richTextBox1.SelectionStart = meta.CharOffset; richTextBox1.SelectionLength = meta.Length * 3; richTextBox1.SelectionBackColor = Color.LightGreen; } if (!preserveSelecting) { richTextBox1.ScrollToCaret(); richTextBox1.SelectionLength = 0; } else { richTextBox1.SelectionStart = preserveSelStart; richTextBox1.SelectionLength = preserveSelLength; } } finally { SendMessage(richTextBox1.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); richTextBox1.Invalidate(); rtbSelecting = preserveSelecting; } }
private int AddParts(string[] hex, TreeNode node, int byteOffset, StringBuilder sb, ref EditorMetaData previousMeta) { MsgPackItem item = (MsgPackItem)node.Tag; if (ReferenceEquals(item, null)) { return(byteOffset); } int additionalBytes = 0; while (item.StoredOffset > byteOffset) { sb.Append(hex[byteOffset]).Append(' '); byteOffset++; additionalBytes++; } if (additionalBytes > 0) { previousMeta.Length += additionalBytes; TreeNode parent = previousMeta.Node.Parent; while (!ReferenceEquals(parent, null)) { ((EditorMetaData)((MsgPackItem)parent.Tag).Tag).Length += additionalBytes; parent = parent.Parent; } } EditorMetaData meta = new EditorMetaData() { CharOffset = byteOffset * 3, Node = node, Item = item }; lineairList.Add(meta); item.Tag = meta; previousMeta = meta; if (!ReferenceEquals(item, null) && !(item is MpError && !ReferenceEquals(((MpError)item).PartialItem, null)) && byteOffset < hex.Length) { sb.Append("\\cf1 "); // red sb.Append(hex[byteOffset]).Append(' '); byteOffset++; } if (item is MsgPackVarLen) { int lengthBytes = 0; switch (item.TypeId) { case MsgPackTypeId.MpBin8: lengthBytes = 1; break; case MsgPackTypeId.MpBin16: lengthBytes = 2; break; case MsgPackTypeId.MpBin32: lengthBytes = 4; break; case MsgPackTypeId.MpStr8: lengthBytes = 1; break; case MsgPackTypeId.MpStr16: lengthBytes = 2; break; case MsgPackTypeId.MpStr32: lengthBytes = 4; break; case MsgPackTypeId.MpMap16: lengthBytes = 2; break; case MsgPackTypeId.MpMap32: lengthBytes = 4; break; case MsgPackTypeId.MpArray16: lengthBytes = 2; break; case MsgPackTypeId.MpArray32: lengthBytes = 4; break; case MsgPackTypeId.MpExt8: lengthBytes = 1; break; case MsgPackTypeId.MpExt16: lengthBytes = 2; break; case MsgPackTypeId.MpExt32: lengthBytes = 4; break; } if (lengthBytes > 0) { sb.Append("\\cf2 "); // blue for (int t = lengthBytes - 1; t >= 0; t--) { sb.Append(hex[byteOffset]).Append(' '); byteOffset++; } } } sb.Append("\\cf0 "); // black for (int t = 0; t < node.Nodes.Count; t++) { byteOffset = AddParts(hex, node.Nodes[t], byteOffset, sb, ref previousMeta); } ValidateItem(meta); meta.Length = (byteOffset - (int)item.StoredOffset); return(byteOffset); }
public void RefreshTree() { SuspendLayout(); treeView1.SuspendLayout(); treeView1.BeginUpdate(); richTextBox1.SuspendLayout(); Cursor = Cursors.WaitCursor; try { treeView1.Nodes.Clear(); richTextBox1.Clear(); lineairList.Clear(); listView1.Items.Clear(); if (ReferenceEquals(item, null)) { return; } TreeNode root = GetTreeNodeFor(item); _nodeCount = 0; Traverse(root, item); if (_nodeCount > _displayLimit) { root.Nodes.Add(string.Concat("Limit of ", _displayLimit, " displayed items reached...")); } treeView1.Nodes.Add(root); treeView1.ExpandAll(); if (ReferenceEquals(data, null) || data.Length == 0) { data = item.ToBytes(); } //richTextBox1.Text = BitConverter.ToString(data).Replace('-', ' '); string[] hex = BitConverter.ToString(data).Split('-'); StringBuilder sb = new StringBuilder("{\\rtf1 {\\colortbl ;\\red255\\green0\\blue0;\\red0\\green77\\blue187;\\red127\\green127\\blue127;}\r\n"); int byteOffset = 0; EditorMetaData meta = null; byteOffset = AddParts(hex, root, byteOffset, sb, ref meta); if (!ReferenceEquals(meta, null) && !ReferenceEquals(meta.Item, null)) { while (meta.Item.StoredOffset + meta.Item.StoredLength > byteOffset) { sb.Append(hex[byteOffset]).Append(' '); byteOffset++; meta.Length++; } } meta = (EditorMetaData)item.Tag; meta.Length = byteOffset; if (hex.Length - 1 > byteOffset) { sb.Append("\\cf3 "); // gray } while (hex.Length - 1 > byteOffset) { sb.Append(hex[byteOffset]).Append(' '); byteOffset++; } sb.Append("\r\n}\r\n"); richTextBox1.Rtf = sb.ToString(); } finally { ResumeLayout(); treeView1.EndUpdate(); treeView1.ResumeLayout(); richTextBox1.ResumeLayout(); Cursor = Cursors.Default; } }