docs(quest): QT5 is specified — and it is the Journal panel, not a contract one
Measuring the host layout rather than assuming changed what this slice is. gmContractsUI is not a panel of its own: it is tab 1 of a THREE-tab "Journal" panel at gmPanelUI slot 25, beside a notes page and a page list. Building it as a standalone window would have produced something retail does not have, and the mistake would only have surfaced at a visual gate. The other two tabs are out of scope, so the expected intermediate state is a panel with two dead tabs — recorded here so it is not filed as a defect. Everything else the page needs is now measured out of the dats: every authored label, the per-row child ids RefreshContractListbox writes, and the list's scrollbar link. The list is a UiTemplateListBox, the widget OP2 already built, so the page is binding work rather than new widget work. LayoutDump --props now resolves StringInfo through DatStringResolver instead of printing the type name, which is how the labels were read at all. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
ef6b7310c5
commit
fac2dc7248
2 changed files with 70 additions and 5 deletions
|
|
@ -163,6 +163,8 @@ if (findAt >= 0)
|
|||
}
|
||||
}
|
||||
|
||||
var stringResolver = new DatStringResolver(adapter);
|
||||
|
||||
ElementInfo? root = ids.Length > 1
|
||||
? LayoutImporter.ImportInfos(adapter, ids[0], ids[1])
|
||||
: LayoutImporter.ImportInfos(adapter, ids[0]);
|
||||
|
|
@ -326,13 +328,25 @@ void Print(ElementInfo e, int depth)
|
|||
.OrderBy(kv => kv.Key)
|
||||
.Select(kv => $"0x{kv.Key:X2}={Describe(kv.Value)}"));
|
||||
|
||||
static string Describe(UiPropertyValue v) => v.Kind switch
|
||||
string Describe(UiPropertyValue v) => v.Kind switch
|
||||
{
|
||||
UiPropertyKind.Bool => v.BoolValue.ToString(),
|
||||
UiPropertyKind.Integer => v.IntegerValue.ToString(),
|
||||
UiPropertyKind.Enum => $"0x{v.UnsignedValue:X}",
|
||||
// An authored StringInfo is a table id + string id, which says
|
||||
// nothing on its own -- resolve it, because "what does this
|
||||
// label SAY?" is the whole reason to dump properties.
|
||||
UiPropertyKind.StringInfo => DescribeString(v.StringInfoValue),
|
||||
_ => v.Kind.ToString(),
|
||||
};
|
||||
|
||||
string DescribeString(UiStringInfoValue info)
|
||||
{
|
||||
string? resolved = stringResolver.Resolve(info.TableId, info.StringId);
|
||||
return !string.IsNullOrEmpty(resolved)
|
||||
? $"\"{resolved}\""
|
||||
: $"StringInfo(table=0x{info.TableId:X8}, id={info.StringId})";
|
||||
}
|
||||
Console.WriteLine($"{pad} state {stateId}: props {ids}");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue