Exemple #1
0
        private void treeViewParser_AfterSelect(object sender, TreeViewEventArgs e)
        {
            TreeNode  selectedNode = e.Node;
            FieldItem fieldItem    = null;

            if (null != selectedNode)
            {
                if (selectedNode.Tag is FieldItem)
                {
                    fieldItem = (FieldItem)selectedNode.Tag;
                }
            }

            int binarySelectStart  = 0;
            int binarySelectLength = 0;

            if (null != fieldItem)
            {
                if (selectedDataStore != fieldItem.GetDataStore())
                {
                    richTextBoxHexString.Clear();

                    //Display the hex string.
                    richTextBoxHexString.Text = fieldItem.GetDataStoreHexString();

                    //Set it as current selected.
                    selectedDataStore = fieldItem.GetDataStore();
                }

                //Select the bytes for this field.
                Int64 offsetStart = fieldItem.Offset / 8;
                Int64 offsetEnd   = (fieldItem.Offset + fieldItem.Length) / 8;

                //Block start and block end.
                Int64 blockStart = fieldItem.Offset / 64;                      //To calculate the count of Environment.NewLine.
                Int64 blockEnd   = (fieldItem.Offset + fieldItem.Length) / 64; //To calculate the count of Environment.NewLine.

                if (0 != (fieldItem.Offset + fieldItem.Length) % 8)
                {
                    offsetEnd++;
                }

                if (0 == ((fieldItem.Offset + fieldItem.Length) % 64))
                {
                    blockEnd--;
                }

                richTextBoxHexString.Select((int)(offsetStart * 3 + blockStart), (int)((offsetEnd - offsetStart) * 3 + (blockEnd - blockStart)));
                richTextBoxHexString.SelectionColor = Color.Red;
                //richTextBoxHexString.ScrollToCaret();

                //To show the detail field property as below.

                /*
                 * Binary  :10100010 11000011 00101001 01000001
                 * Heximal :   A2C32941
                 * Decimal : 2730699073
                 * Length  :          4 byte
                 * Length  :         32 bit
                 * Position:         12 byte
                 * Position:         96 bit
                 */
                String binaryStr  = null;
                String hexStr     = null;
                String decimalStr = null;

                //We'll show the fieldValue only when the bit length is less then 64.
                if ((64 >= fieldItem.Length) && (fieldItem.Type == ItemType.FIELD))
                {
                    Int64  bytesValue = 0;
                    byte[] data       = selectedDataStore.GetData();

                    for (Int64 i = offsetStart; i < offsetEnd; i++)
                    {
                        bytesValue = bytesValue << 8;
                        bytesValue = bytesValue | data[i];
                    }
                    String binary = "Binary  :";
                    binaryStr  = binary + Utility.GetValueBinaryString(bytesValue, (offsetEnd - offsetStart) * 8);
                    hexStr     = "Heximal :" + Utility.GetValueHexString(fieldItem.Value, fieldItem.Length);
                    decimalStr = "Decimal :" + Utility.GetValueDecimalString(fieldItem.Value, fieldItem.Length);

                    //Select those bits belonged to this field.
                    Int64 spaceCount = (fieldItem.Offset + fieldItem.Length) / 8 - (fieldItem.Offset) / 8;

                    String lengthPositionStr = String.Format("Length  :{0}-byte" + Environment.NewLine
                                                             + "Length  :{1}-bit" + Environment.NewLine
                                                             + "Offset  :{2}-byte" + Environment.NewLine
                                                             + "Offset  :{3}-bit",
                                                             offsetEnd - offsetStart,
                                                             fieldItem.Length,
                                                             fieldItem.Offset / 8,
                                                             fieldItem.Offset);

                    richTextBoxProperty.Text = binaryStr + Environment.NewLine
                                               + hexStr + Environment.NewLine
                                               + decimalStr + Environment.NewLine
                                               + lengthPositionStr + Environment.NewLine;

                    binarySelectStart  = (int)(binary.Length + fieldItem.Offset % 8);
                    binarySelectLength = (int)(fieldItem.Length + spaceCount);
                }
                else
                {
                    String lengthPositionStr = String.Format("Length  :{0}-byte" + Environment.NewLine
                                                             + "Length  :{1}-bit" + Environment.NewLine
                                                             + "Offset  :{2}-byte" + Environment.NewLine
                                                             + "Offset  :{3}-bit",
                                                             offsetEnd - offsetStart,
                                                             fieldItem.Length,
                                                             fieldItem.Offset / 8,
                                                             fieldItem.Offset);

                    richTextBoxProperty.Text = binaryStr + Environment.NewLine
                                               + hexStr + Environment.NewLine
                                               + decimalStr + Environment.NewLine
                                               + lengthPositionStr + Environment.NewLine;
                }


                //Show the repeat number.
                String repeatStr = "Repeat  :" + selectedDataStore.GetRepeatTimes();
                richTextBoxProperty.AppendText(repeatStr + Environment.NewLine);

                //Show the packet metadata.
                List <TsPacketMetadata> packetMetadataList = selectedDataStore.GetPacketMetadataList();
                richTextBoxProperty.AppendText("Packet Count: " + packetMetadataList.Count + Environment.NewLine);
                String packetMetadataStr = "(Packet Number,File Offset): ";
                foreach (TsPacketMetadata packetMetadata in packetMetadataList)
                {
                    packetMetadataStr += " (" + packetMetadata.PacketNumber + "," + packetMetadata.FileOffset + ")";
                }
                richTextBoxProperty.AppendText(packetMetadataStr + Environment.NewLine);

                if (binarySelectLength != 0)
                {
                    //Select the binary bits finally. We can't make the selection and then insert new sectionDetail. It will not work in such case.

                    richTextBoxProperty.Select(binarySelectStart, binarySelectLength);
                    richTextBoxProperty.SelectionColor = Color.Red;
                    //richTextBoxProperty.ScrollToCaret();
                }
            }//null != fieldItem
        }