HexViewer.HighLight[] GetHighLights(Table table) { HexViewer.HighLight[] ret; if (hls.TryGetValue(table, out ret)) { return(ret); } var tbls = Model.Stream; var mdTable = tbls.Get(table); ret = new HexViewer.HighLight[mdTable.Rows + 1]; var rowCountOffset = CalculateTableRowsOffset(table); var rowOffset = (uint)mdTable.StartOffset - (uint)tbls.StartOffset; using (var colorSeq = Utils.GetAlternateColorSequence(Color.Green, Color.Orange).GetEnumerator()) { ret[0] = new HexViewer.HighLight(Color.Brown, rowCountOffset, rowCountOffset + 4); for (int i = 1; i < ret.Length && colorSeq.MoveNext(); i++) { ret[i] = new HexViewer.HighLight(colorSeq.Current, rowOffset, rowOffset + mdTable.RowSize); rowOffset += mdTable.RowSize; } } hls[table] = ret; return(ret); }
void OnNodeSelected(object sender, TreeViewEventArgs e) { gridView.Clear(); var node = (DataTreeNodeX)treeView.SelectedNode; if (node.Model is MDTableModel) { var mdTable = ((MDTableModel)node.Model).MDTable; hexView.SetHighLights(GetHighLights(mdTable.Table)); if (followInHex) { var tbls = Model.Stream; var begin = mdTable.StartOffset - tbls.StartOffset; var end = mdTable.EndOffset - tbls.StartOffset; hexView.Select(begin, end); } } else if (node.Model is MDRowModel) { var rowModel = (MDRowModel)node.Model; var mdTable = rowModel.Parent.MDTable; var rid = rowModel.Rid; var rowHL = GetHighLights(mdTable.Table); rowHL = (HexViewer.HighLight[])rowHL.Clone(); var row = rowHL[rid]; row = new HexViewer.HighLight(Color.Blue, row.Start, row.End); rowHL[rid] = row; hexView.SetHighLights(rowHL); RowInfoPopulator.PopulateGridView(this, gridView, rowModel); if (followInHex) { hexView.Select(row.Start, row.End); } } else { hexView.ClearHighLight(); } }