Пример #1
0
        private unsafe void DrawResourceMap(ResourceCategory category, uint ext, StdMap <uint, Pointer <ResourceHandle> > *map)
        {
            if (map == null)
            {
                return;
            }

            var label = GetNodeLabel(( uint )category, ext, map->Count);

            using var tree = ImRaii.TreeNode(label);
            if (!tree || map->Count == 0)
            {
                return;
            }

            using var table = ImRaii.Table("##table", 4, ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.RowBg);
            if (!table)
            {
                return;
            }

            ImGui.TableSetupColumn("Hash", ImGuiTableColumnFlags.WidthFixed, _hashColumnWidth);
            ImGui.TableSetupColumn("Ptr", ImGuiTableColumnFlags.WidthFixed, _hashColumnWidth);
            ImGui.TableSetupColumn("Path", ImGuiTableColumnFlags.WidthFixed, _pathColumnWidth);
            ImGui.TableSetupColumn("Refs", ImGuiTableColumnFlags.WidthFixed, _refsColumnWidth);
            ImGui.TableHeadersRow();

            ResourceLoader.IterateResourceMap(map, (hash, r) =>
            {
                // Filter unwanted names.
                if (_resourceManagerFilter.Length != 0 &&
                    !r->FileName.ToString().Contains(_resourceManagerFilter, StringComparison.InvariantCultureIgnoreCase))
                {
                    return;
                }

                var address = $"0x{( ulong )r:X}";
                ImGuiUtil.TextNextColumn($"0x{hash:X8}");
                ImGui.TableNextColumn();
                ImGuiUtil.CopyOnClickSelectable(address);

                var resource = (Interop.Structs.ResourceHandle *)r;
                ImGui.TableNextColumn();
                Text(resource);
                if (ImGui.IsItemClicked())
                {
                    var data = Interop.Structs.ResourceHandle.GetData(resource);
                    if (data != null)
                    {
                        var length = ( int )Interop.Structs.ResourceHandle.GetLength(resource);
                        ImGui.SetClipboardText(string.Join(" ",
                                                           new ReadOnlySpan <byte>(data, length).ToArray().Select(b => b.ToString("X2"))));
                    }
                }

                ImGuiUtil.HoverTooltip("Click to copy byte-wise file data to clipboard, if any.");

                ImGuiUtil.TextNextColumn(r->RefCount.ToString());
            });
        }
Пример #2
0
        // Draw a full category for the resource manager.
        private unsafe void DrawCategoryContainer(ResourceCategory category,
                                                  StdMap <uint, Pointer <StdMap <uint, Pointer <ResourceHandle> > > > *map)
        {
            if (map == null)
            {
                return;
            }

            using var tree = ImRaii.TreeNode($"({( uint )category:D2}) {category} - {map->Count}###{( uint )category}");
            if (tree)
            {
                SetTableWidths();
                ResourceLoader.IterateExtMap(map, (ext, m) => DrawResourceMap(category, ext, m));
            }
        }
Пример #3
0
    private unsafe void DrawResourceMap(string label, StdMap <uint, Pointer <ResourceHandle> > *typeMap)
    {
        if (typeMap == null || !ImGui.TreeNodeEx(label))
        {
            return;
        }

        using var raii = ImGuiRaii.DeferredEnd(ImGui.TreePop);

        if (typeMap->Count == 0 || !ImGui.BeginTable($"##{label}_table", 4, ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.RowBg))
        {
            return;
        }

        raii.Push(ImGui.EndTable);

        ImGui.TableSetupColumn("Hash", ImGuiTableColumnFlags.WidthFixed, 100 * ImGuiHelpers.GlobalScale);
        ImGui.TableSetupColumn("Ptr", ImGuiTableColumnFlags.WidthFixed, 100 * ImGuiHelpers.GlobalScale);
        ImGui.TableSetupColumn("Path", ImGuiTableColumnFlags.WidthFixed,
                               ImGui.GetWindowContentRegionWidth() - 300 * ImGuiHelpers.GlobalScale);
        ImGui.TableSetupColumn("Refs", ImGuiTableColumnFlags.WidthFixed, 30 * ImGuiHelpers.GlobalScale);
        ImGui.TableHeadersRow();

        var node = typeMap->SmallestValue;

        while (!node->IsNil)
        {
            ImGui.TableNextRow();
            ImGui.TableNextColumn();
            ImGui.Text($"0x{node->KeyValuePair.Item1:X8}");
            ImGui.TableNextColumn();
            var address = $"0x{( ulong )node->KeyValuePair.Item2.Value:X}";
            ImGui.Text(address);
            if (ImGui.IsItemClicked())
            {
                ImGui.SetClipboardText(address);
            }

            ImGui.TableNextColumn();
            ImGui.Text(node->KeyValuePair.Item2.Value->FileName.ToString());
            ImGui.TableNextColumn();
            ImGui.Text(node->KeyValuePair.Item2.Value->RefCount.ToString());
            node = node->Next();
        }
    }