Пример #1
0
 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);
     }
 }
Пример #2
0
        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();
        }
Пример #3
0
        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);
        }
Пример #4
0
        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;
                    }
                }
            }
        }
Пример #5
0
        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;
            }
        }
Пример #6
0
        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);
        }
Пример #7
0
        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;
            }
        }