object GetToolTip(MultiResourceDataHeaderData resDataHdr, HexPosition position) { var toolTipCreator = toolTipCreatorFactory.Create(); var contentCreator = toolTipCreator.ToolTipContentCreator; contentCreator.Image = ImageReferenceUtils.GetImageReference(resDataHdr.ResourceInfo.Name) ?? ImageReferenceUtils.GetImageReference(resDataHdr.ResourceInfo.TypeCode); contentCreator.Writer.WriteFilename(resDataHdr.ResourceInfo.Name); if (string.IsNullOrEmpty(resDataHdr.ResourceInfo.UserTypeName)) { contentCreator.Writer.WriteSpace(); contentCreator.Writer.Write("(", PredefinedClassifiedTextTags.Punctuation); var typeCode = resDataHdr.ResourceInfo.TypeCode; if (typeCode < ResourceTypeCode.UserTypes) { contentCreator.Writer.Write(typeCode.ToString(), PredefinedClassifiedTextTags.EnumField); } else { contentCreator.Writer.Write("UserType" + (typeCode - ResourceTypeCode.UserTypes).ToString(), PredefinedClassifiedTextTags.EnumField); } contentCreator.Writer.Write(")", PredefinedClassifiedTextTags.Punctuation); contentCreator.CreateNewWriter(); } else { contentCreator.CreateNewWriter(); contentCreator.Writer.Write(resDataHdr.ResourceInfo.UserTypeName, PredefinedClassifiedTextTags.Text); contentCreator.Writer.WriteLine(); } contentCreator.Writer.WriteFieldAndValue(resDataHdr, position); return(toolTipCreator.Create()); }
object GetToolTip(TableRecordData tableRecord, HexPosition position) { var tablesHeap = tableRecord.TablesHeap; Debug.Assert((uint)tableRecord.Token.Table < (uint)tablesHeap.MDTables.Count); if ((uint)tableRecord.Token.Table >= (uint)tablesHeap.MDTables.Count) { return(null); } var mdTable = tablesHeap.MDTables[(int)tableRecord.Token.Table]; int offset = (int)(position - tableRecord.Span.Span.Start).ToUInt64(); var column = mdTable.Columns.FirstOrDefault(a => a.Offset <= offset && offset < a.Offset + a.Size); Debug.Assert(column != null); if (column == null) { return(null); } var mdHeaders = tablesHeap.Metadata; var toolTipCreator = toolTipCreatorFactory.Create(); var contentCreator = toolTipCreator.ToolTipContentCreator; contentCreator.Image = ImageReferenceUtils.GetImageReference(tableRecord.Token.Table); contentCreator.Writer.WriteFieldAndValue(tableRecord, position); var pos = tableRecord.Span.Span.Start + column.Offset; switch (column.ColumnSize) { case ColumnSize.Strings: var s = GetString(mdHeaders.StringsStream, column, pos); if (s == null) { break; } contentCreator.Writer.WriteSpace(); contentCreator.Writer.Write("(", PredefinedClassifiedTextTags.Punctuation); contentCreator.Writer.WriteString(s); contentCreator.Writer.Write(")", PredefinedClassifiedTextTags.Punctuation); break; case ColumnSize.GUID: var g = GetGuid(mdHeaders.GUIDStream, column, pos); if (g == null) { break; } contentCreator.Writer.WriteSpace(); contentCreator.Writer.Write("(", PredefinedClassifiedTextTags.Punctuation); contentCreator.Writer.Write(g.Value.ToString(), PredefinedClassifiedTextTags.Text); contentCreator.Writer.Write(")", PredefinedClassifiedTextTags.Punctuation); break; } return(toolTipCreator.Create()); }
ImageReference GetResourceImage(DotNetEmbeddedResource resource, string filename) { var span = resource.Content.Data.Span; // Check if it's a multi-file resource if (span.Length >= 4 && span.Buffer.ReadUInt32(span.Start) == 0xBEEFCACE) { return(DsImages.SourceFileGroup); } return(ImageReferenceUtils.GetImageReference(filename) ?? DsImages.Dialog); }
ImageReference?GetImageReference(MultiResourceUnicodeNameAndOffsetData nameOffset) { var name = nameOffset.ResourceName.Data.String.Data.ReadValue(); return(ImageReferenceUtils.GetImageReference(name)); }