fix(mosstank): drop tooltips from the Advanced Options popup
Owner's third live look (2026-09-07): "Also still have tooltips in the advanced options, remove please." VTank's own AdvancedOptionsView has no tooltip mechanism at all (docs/research/vtank-kb/08-ui-views.md §1) — its own description readout (AdvancedOptionDescription, the label under the field) is the retail in-popup info channel, not a hover tooltip. Removes the three tooltip= attributes mosstank-advanced.xml had grown (the option list, the category checklist, the value field); nothing else in the file set one. New test AdvancedOptionsPopupHasNoElementWithATooltip builds the real mosstank-advanced.xml against a real MossTankPanel and walks the WHOLE resolved UiElement tree checking RuntimeTooltipTextSource is null everywhere, rather than re-checking the three known offenders — MarkupDocument.Build only ever sets that field when the source element declared a real tooltip= attribute, so a null source function means no tooltip was ever bound. Shown to fail first against a targeted mutation (a tooltip= temporarily reintroduced on the option list) — failed with "UiMarkupList carries a tooltip" — then reverted and restored green. App markup/plugin filter: 261 -> 262 (one new Fact). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
6be555ad47
commit
617a9c2218
2 changed files with 49 additions and 7 deletions
|
|
@ -167,12 +167,19 @@
|
||||||
AddRouteCheckpoint/AddRouteJump themselves) — nothing was deleted from
|
AddRouteCheckpoint/AddRouteJump themselves) — nothing was deleted from
|
||||||
the plugin, only the second, redundant UI surface for it. Panel height
|
the plugin, only the second, redundant UI surface for it. Panel height
|
||||||
shrinks 450->300 to match VTank's real 392x300 AdvancedOptionsView
|
shrinks 450->300 to match VTank's real 392x300 AdvancedOptionsView
|
||||||
footprint (minh follows); minw stays 392. -->
|
footprint (minh follows); minw stays 392.
|
||||||
|
|
||||||
|
Owner's third live look (2026-09-07): "Also still have tooltips in the
|
||||||
|
advanced options, remove please." VTank's own AdvancedOptionsView has no
|
||||||
|
tooltip mechanism at all — its own description readout
|
||||||
|
(AdvancedOptionDescription, the label at the bottom) is the retail
|
||||||
|
in-popup info channel, not a hover tooltip. The three tooltip= attributes
|
||||||
|
this popup had grown (the option list, the category checklist, the value
|
||||||
|
field) are removed; nothing else in this file ever set one. -->
|
||||||
<panel x="253" y="405" w="392" h="300" title="MossTank Advanced Options"
|
<panel x="253" y="405" w="392" h="300" title="MossTank Advanced Options"
|
||||||
visible="{AdvancedOptionsVisible}" resizable="true" minw="392" minh="300">
|
visible="{AdvancedOptionsVisible}" resizable="true" minw="392" minh="300">
|
||||||
<list x="4" y="4" w="256" h="160" rowheight="17" anchor="left top right"
|
<list x="4" y="4" w="256" h="160" rowheight="17" anchor="left top right"
|
||||||
selected="{SelectedAdvancedOptionIndex}" onchange="{SelectAdvancedOption}"
|
selected="{SelectedAdvancedOptionIndex}" onchange="{SelectAdvancedOption}">
|
||||||
tooltip="Select one of Virindi Tank's 137 advanced options.">
|
|
||||||
<column type="text" width="187" items="{AdvancedOptionNames}" onclick="{SelectAdvancedOption}" />
|
<column type="text" width="187" items="{AdvancedOptionNames}" onclick="{SelectAdvancedOption}" />
|
||||||
<column type="text" width="69" items="{AdvancedOptionValueColumn}" onclick="{ClickAdvancedOptionValue}" />
|
<column type="text" width="69" items="{AdvancedOptionValueColumn}" onclick="{ClickAdvancedOptionValue}" />
|
||||||
</list>
|
</list>
|
||||||
|
|
@ -181,15 +188,13 @@
|
||||||
pure checklist with no real selection concept — see
|
pure checklist with no real selection concept — see
|
||||||
SelectedAdvancedOptionCategoryIndex's own doc comment. -->
|
SelectedAdvancedOptionCategoryIndex's own doc comment. -->
|
||||||
<list x="268" y="4" w="120" h="180" rowheight="18" anchor="right"
|
<list x="268" y="4" w="120" h="180" rowheight="18" anchor="right"
|
||||||
selected="{SelectedAdvancedOptionCategoryIndex}"
|
selected="{SelectedAdvancedOptionCategoryIndex}">
|
||||||
tooltip="Uncheck a category to hide its settings from the list on the left.">
|
|
||||||
<column type="check" width="20" values="{AdvancedOptionCategoryEnabled}" onchange="{ToggleAdvancedOptionCategoryAt}" />
|
<column type="check" width="20" values="{AdvancedOptionCategoryEnabled}" onchange="{ToggleAdvancedOptionCategoryAt}" />
|
||||||
<column type="text" width="*" items="{AdvancedOptionCategoryNames}" onclick="{ToggleAdvancedOptionCategoryAt}" />
|
<column type="text" width="*" items="{AdvancedOptionCategoryNames}" onclick="{ToggleAdvancedOptionCategoryAt}" />
|
||||||
</list>
|
</list>
|
||||||
<field x="4" y="168" w="260" h="16" text="{AdvancedOptionValueDraft}"
|
<field x="4" y="168" w="260" h="16" text="{AdvancedOptionValueDraft}"
|
||||||
onchange="{SetAdvancedOptionValueDraft}" onsubmit="{SubmitAdvancedOption}"
|
onchange="{SetAdvancedOptionValueDraft}" onsubmit="{SubmitAdvancedOption}"
|
||||||
maxlength="160" clearonsubmit="false" background="#E6000000"
|
maxlength="160" clearonsubmit="false" background="#E6000000" />
|
||||||
tooltip="Edit the selected advanced-option value and press Enter to apply." />
|
|
||||||
<label x="4" y="188" w="384" h="80" text="{AdvancedOptionDescription}" color="#FFE8DEC3"
|
<label x="4" y="188" w="384" h="80" text="{AdvancedOptionDescription}" color="#FFE8DEC3"
|
||||||
anchor="left top right" />
|
anchor="left top right" />
|
||||||
</panel>
|
</panel>
|
||||||
|
|
|
||||||
|
|
@ -184,6 +184,43 @@ public sealed class MossTankMarkupBuildOverRealFilesTests
|
||||||
+ $"the repositioned category list (left edge {categoryList.Left}).");
|
+ $"the repositioned category list (left edge {categoryList.Left}).");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Owner's third live look (2026-09-07): "Also still have tooltips in
|
||||||
|
/// the advanced options, remove please." VTank's own AdvancedOptionsView
|
||||||
|
/// has no tooltip mechanism at all — its description readout is the
|
||||||
|
/// retail in-popup info channel, not a hover tooltip. Builds the real
|
||||||
|
/// mosstank-advanced.xml against a real panel (the same shape every
|
||||||
|
/// other test in this file uses) and walks the WHOLE resolved tree —
|
||||||
|
/// not just the three elements that used to carry tooltip= — so a
|
||||||
|
/// tooltip added anywhere else in this popup in the future fails this
|
||||||
|
/// pin too. <see cref="MarkupDocument.Build"/> only ever sets
|
||||||
|
/// <see cref="UiElement.RuntimeTooltipTextSource"/> when the source
|
||||||
|
/// element declared a real tooltip= attribute (MarkupDocument.cs's own
|
||||||
|
/// ApplyCommonAttributes), so a null source function here means no
|
||||||
|
/// tooltip was ever bound for that element.
|
||||||
|
/// </summary>
|
||||||
|
[Fact]
|
||||||
|
public void AdvancedOptionsPopupHasNoElementWithATooltip()
|
||||||
|
{
|
||||||
|
string xml = File.ReadAllText(
|
||||||
|
Path.Combine(MossTankMarkupDirectory, "mosstank-advanced.xml"));
|
||||||
|
var panel = new MossTankPanel(new StubHost());
|
||||||
|
|
||||||
|
UiNineSlicePanel built = MarkupDocument.Build(xml, panel, static id => (id, 32, 32));
|
||||||
|
|
||||||
|
AssertNoElementHasATooltip(built);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void AssertNoElementHasATooltip(UiElement element)
|
||||||
|
{
|
||||||
|
Assert.True(
|
||||||
|
element.RuntimeTooltipTextSource is null,
|
||||||
|
$"{element.GetType().Name} carries a tooltip — the Advanced "
|
||||||
|
+ "Options popup must have none (owner's third live look).");
|
||||||
|
foreach (UiElement child in element.Children)
|
||||||
|
AssertNoElementHasATooltip(child);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// D-6 (round E architecture re-check): every real-file re-layout pin
|
/// D-6 (round E architecture re-check): every real-file re-layout pin
|
||||||
/// so far only inspects ONE named element after a resize (the
|
/// so far only inspects ONE named element after a resize (the
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue