- the Character window's third tab is in: faction rows under their headers, standing bars, the detail popup and the watch bar, at the reference's own anchors - all four reputation opcodes parse byte-exact, the flag byte reads the way the client reads it, and a standing gain reveals the faction unless it is hidden - an end-to-end golden drives live wire bytes through the game data to the exact visible row list - the reference-code overlap is measured by an instrument instead of asserted — the start of a debt paid in full later in the day Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
375 lines
25 KiB
TeX
375 lines
25 KiB
TeX
# benilla.toc — the built-in interface, as an ordinary addon manifest.
|
|
#
|
|
# The reference's own interface ships as `FrameXML.toc`; ours was a hand-ordered Rust array until
|
|
# decision 1178. It is parsed by the same `.toc` parser any third-party addon will be
|
|
# (`benilla-ui/src/toc.rs`), and that is the point: a privileged built-in UI is how addon support
|
|
# rots. If our own interface loads through the addon path, the addon path works — it is exercised
|
|
# by every single run. If it keeps a private door, that path is untested by construction.
|
|
#
|
|
# The order is LOAD order and it is load-bearing: a template must be defined before the frame that
|
|
# inherits it, and a later file paints on top of an earlier one. Every entry's comment is why it
|
|
# sits where it sits; those comments are knowledge, not decoration.
|
|
#
|
|
# The FIRST entry is the font-object registry, and the loader splits there: it alone loads at
|
|
# startup, ahead of the glue screens that share our one glyph atlas, and everything after it
|
|
# materializes on entering the world (decision 1051).
|
|
|
|
## Interface: 11200
|
|
## Title: benilla
|
|
|
|
# The named virtual Font objects (decision 0084) — must load first so any FontString's
|
|
# `inherits="GameFontNormal"` resolves against a registered object.
|
|
Fonts.xml
|
|
# The reference's own second file, in its own position: TEXT/message/_ERRORMESSAGE, the
|
|
# ScriptErrors dialog, and the DialogBoxFrame + DialogButton*Texture kit it is built from.
|
|
# Straight after Fonts.xml because those are the only things it needs (GameFontRedLarge,
|
|
# DialogButtonNormalText/HighlightText) and everything above it in FrameXML.toc is engine.
|
|
BasicControls.xml
|
|
# The `SetItemButton*` family (ref ItemButtonTemplate.lua) — script-only, no frames and no
|
|
# dependencies of its own, so it sits as early as it can be read. Every window that paints an item
|
|
# slot calls these, ours and third-party alike: their absence is what left the director's Bagnon
|
|
# window with a title, a gold line and no bag slots at all (see the file's own header).
|
|
ItemButtonTemplate.xml
|
|
# The UIPanel slot manager (decision 0084 §2): script-only, no frames of its own — must load
|
|
# before any panel frame (Gossip/Merchant today) so ShowUIPanel/HideUIPanel already exist
|
|
# when those frames' OnLoad/OnEvent reference them.
|
|
UiPanels.xml
|
|
# The managed bottom-stack positions (decision 0272): script-only —
|
|
# UIPARENT_MANAGED_FRAME_POSITIONS + UIParent_ManageFramePositions, the ref
|
|
# UIParent.lua mechanism that re-anchors the cast bar / chat over the bottom bars.
|
|
# Loaded early so the stance bar's OnShow/OnHide can call it; applied once by the
|
|
# loader's post-load bootstrap (ui_script/manifest.rs).
|
|
UIParent.xml
|
|
# The tooltip: a hover window the bag/merchant/loot/unit frames drive. Loaded before them so
|
|
# `GameTooltip` + its verbs exist when their OnEnter handlers fire (runtime, so order
|
|
# is not strictly required — but it keeps the dependency legible). It also declares the two
|
|
# virtual templates (GameTooltipTemplate, ShoppingTooltipTemplate), which IS an order
|
|
# requirement: ItemRef.xml below expands one, and so do the 27 corpus addons that name
|
|
# GameTooltipTemplate in an XML inherits=.
|
|
GameTooltip.xml
|
|
# The dropdown kit (0203 phase 2's closing sub-slice, widened for 0434 phase 5):
|
|
# UIDropDownMenuTemplate + DropDownList1/2 + the UIDropDownMenu_* API — before its
|
|
# first customers (the unit popups below, the world map's pickers, the trainer filter).
|
|
UIDropDownMenu.xml
|
|
# The unit right-click popups (0434 phase 5): UnitPopupMenus/Buttons + UnitPopup_ShowMenu
|
|
# — after the dropdown kit it drives, before the unit/party frames whose DropDown
|
|
# children's OnLoad initialize into it.
|
|
UnitPopup.xml
|
|
# The chat-link click router (SetItemRef): item links → ItemRefTooltip:SetHyperlink; a
|
|
# player name → left-click whisper / right-click FRIEND dropdown. After GameTooltip.xml —
|
|
# ItemRefTooltip inherits=GameTooltipTemplate, so this order is now REQUIRED, not just legible
|
|
# (GameTooltip_OnLoad was the old, runtime-only reason) — AND after the dropdown kit +
|
|
# UnitPopup, since its FriendsDropDown inherits UIDropDownMenuTemplate and opens a UnitPopup
|
|
# FRIEND menu.
|
|
ItemRef.xml
|
|
# The shared status-bar numerals machinery (decision 1082): TextStatusBar_* + the opt-in
|
|
# template — before its customers (the XP bar in ActionBar.xml today; the unit-frame
|
|
# health/mana numerals are the ref's other users, when that slice lands). The ref's own TOC
|
|
# loads TextStatusBar right before its unit frames, same seat as here.
|
|
TextStatusBar.xml
|
|
UnitFrames.xml
|
|
# The combo-point dots (decision 0869) — anchored to TargetFrame, so after
|
|
# UnitFrames.xml; its fade chain needs UiPanels.xml's UIFrameFade above.
|
|
ComboFrame.xml
|
|
# The center-screen scrolling combat text (decision 0578) — the Blizzard_CombatText
|
|
# transcription; consumes COMBAT_TEXT_UPDATE + the regen/health/power events, needs
|
|
# only Fonts.xml (CombatTextFont) + UIParent before it.
|
|
CombatText.xml
|
|
# The party member frames + the PARTY_INVITE popup + its event driver (decision 0434
|
|
# phase 2): a StaticPopup registry entry, so after UiPanels.xml.
|
|
PartyFrame.xml
|
|
# The death arc's dialogs + event driver (decision 0308): registry entries on the shared
|
|
# StaticPopup engine, so after UiPanels.xml.
|
|
DeathFrame.xml
|
|
# The two duel dialogs + their event driver (decision 0633): registry entries on the same
|
|
# StaticPopup engine, and DUEL_OUTOFBOUNDS leans on its per-tick countdown branch.
|
|
DuelFrame.xml
|
|
# The two enchant-apply confirms + their event driver (decision 0928): the same StaticPopup
|
|
# registry again. Not CraftFrame's — the gate that raises them is the generic item-target
|
|
# bind, reached by a poison or a sharpening stone with no profession window open.
|
|
EnchantConfirm.xml
|
|
# The shared CooldownFrame_SetTimer (the ref's Cooldown.lua file split) — before its
|
|
# consumers (ActionBar's buttons, the multibars, the stance bar, BagFrame's slots).
|
|
Cooldown.xml
|
|
ActionBar.xml
|
|
# The two always-on bottom multibars (actions 61-72 / 49-60): pure XML/Lua over
|
|
# ActionBar.xml's shared button template + handler set — loads right after it
|
|
# (inherits BenillaActionButtonTemplate, anchors to ActionButton1, and its
|
|
# buttons join the BENILLA_ACTION_BUTTONS roster ActionBar.xml declares).
|
|
MultiBars.xml
|
|
# The stance/shapeshift bar: hidden until `crate::ui_shapeshift`'s feed pushes a
|
|
# non-empty form list (a formless class never shows it). After Cooldown.xml
|
|
# (CooldownFrame_SetTimer) + ActionBar.xml (BENILLA_FALLBACK_ICON, the MainMenuBar
|
|
# anchor target).
|
|
StanceBar.xml
|
|
# The pet action bar (decision 0982): hidden until `crate::ui_pet`'s feed reports a bar,
|
|
# i.e. until the server sends `SMSG_PET_SPELLS` for a live pet or charm — so a class that
|
|
# never has one never sees it. Right after the stance bar, whose row it shares (either
|
|
# one showing raises UIParent.xml's managed "pet" delta), and after Cooldown.xml
|
|
# (CooldownFrame_SetTimer), ActionBar.xml (the `MainMenuBar` anchor target) and
|
|
# GameTooltip.xml (its hover). It is also the pet ARC's file, so decision 1066's three
|
|
# right-click-menu dialogs (ABANDON_PET / RENAME_PET / PETRENAMECONFIRM) register here —
|
|
# which adds UiPanels.xml to its dependency set, already far above.
|
|
PetActionBar.xml
|
|
# The micro-button row in the bar's right-hand recess (the ref's own file split, its TOC
|
|
# loads MainMenuBarMicroButtons right after MainMenuBar). After ActionBar.xml: it anchors
|
|
# into MainMenuBarArtFrame by name and seats itself with that file's
|
|
# BenillaActionBarArt_SeatAbove. It must come BEFORE the panels it toggles, because each of
|
|
# their OnShow/OnHide calls the `UpdateMicroButtons` this file defines (the panel frames
|
|
# themselves are read back through getglobal, so the reverse dependency is call-time).
|
|
MicroMenu.xml
|
|
# The HUD minimap cluster (decision 0203 phase 1): the chrome around the engine-rendered
|
|
# <Minimap> widget hole (`crate::minimap` fills it). After GameTooltip (its zone-text
|
|
# hover uses the shared tooltip).
|
|
MinimapCluster.xml
|
|
# The minimap's time-of-day indicator (GameTimeFrame): the reference's own file split — its
|
|
# TOC loads GameTime.xml right after Minimap.xml. After MinimapCluster (its parent) and
|
|
# GameTooltip (the hover tooltip); driven by the app's game clock (`minimap::feed_game_time`).
|
|
GameTime.xml
|
|
# The zone-entry splash (decision 0287): ZoneTextFrame/SubZoneTextFrame + the inlined
|
|
# FadingFrame kit, driven by the ZONE_CHANGED family `crate::area` fires. Needs only
|
|
# Fonts (ZoneTextFont/SubZoneTextFont) + UIParent; kept by the minimap cluster — the
|
|
# other consumer of the zone-text host globals.
|
|
ZoneText.xml
|
|
# The faux-scroll kit (decisions 0247/0250/0251): BenillaScrollBarTemplate (the draggable
|
|
# Slider scroll bar) + FauxScrollFrameTemplate + the reference's own FauxScrollFrame_*
|
|
# API (Update/GetOffset/SetOffset/OnVerticalScroll + ScrollFrame_OnLoad) —
|
|
# before its first customer (the trainer list) below.
|
|
ScrollTemplates.xml
|
|
# The reference's SHARED widget kit (decision 1203's queue): UIPanelButtonTemplate,
|
|
# UICheckButtonTemplate, UIPanelCloseButton, InputBoxTemplate, the UIPanelScroll* family and
|
|
# their siblings, under the reference's own names — the templates a third-party addon names in
|
|
# `CreateFrame(kind, name, parent, "Template")`, which nothing in benilla's own XML consumes
|
|
# yet (each of our windows still carries its private copy; see the file's header). After
|
|
# ScrollTemplates.xml because UIPanelScrollFrameTemplate's OnLoad is that file's
|
|
# ScrollFrame_OnLoad, and this file supplies the two remaining handlers of that same kit
|
|
# (ScrollFrameTemplate_OnMouseWheel, ScrollFrame_OnScrollRangeChanged).
|
|
UIPanelTemplates.xml
|
|
# The reference's shared OPTIONS widgets: OptionsCheckButtonTemplate /
|
|
# UIOptionsCheckButtonTemplate / OptionsSliderTemplate / OptionsButtonTemplate /
|
|
# OptionFrameBoxTemplate. Straight after UIPanelTemplates.xml — two of them inherit its
|
|
# UICheckButtonTemplate and UIPanelButtonTemplate. Not benilla's own options window
|
|
# (OptionsFrame.xml, far below): these are the shared names addons build panels out of.
|
|
OptionsFrameTemplates.xml
|
|
# The reference's money-frame kit: MoneyFrameTemplate/SmallMoneyFrameTemplate + MoneyTypeInfo
|
|
# + the MoneyFrame_* API. Needs only Fonts (NumberFontNormal/NumberFontNormalLarge), and
|
|
# nothing benilla ships consumes it yet — our own eight coin displays run on MerchantFrame.xml's
|
|
# BenillaMoney_* slot kit, and MoneyFrame.xml's header is where the two are reconciled. Seated
|
|
# beside the scroll kit (the other shared widget kit) and ahead of every window that shows
|
|
# coins, which is where the reference's own TOC puts it too.
|
|
MoneyFrame.xml
|
|
# The shared colour dialog + its opacity slider (`ColorPickerFrame`, `OpacitySliderFrame`,
|
|
# `ColorPickerOkayButton`, `ColorPickerCancelButton`). Last of the "shared FrameXML surface with no
|
|
# benilla consumer yet" cluster that runs from UIPanelTemplates.xml down — the same posture as
|
|
# MoneyFrame.xml above, and for the same reason: 86 of the 218 corpus addons reach this window (64
|
|
# of those files are `Dewdrop-2.0.lua`, which drives THIS one rather than rolling its own), and
|
|
# nothing we ship opens it. The seat is a REQUIREMENT, not tidiness: its Okay/Cancel buttons
|
|
# `inherits="GameMenuButtonTemplate"`, which is resolved at LOAD, and that template lives in
|
|
# UIPanelTemplates.xml six lines up (it moved there from GameMenuFrame.xml — the reference's own
|
|
# file for it — precisely because GameMenuFrame.xml is deliberately LAST). Everything else it needs
|
|
# is far above (Fonts' GameFontNormal/…Small trio; UiPanels' ShowUIPanel/HideUIPanel, its
|
|
# UISpecialFrames entry and the ESC rung that cancel-clicks it). UIDropDownMenu.xml, which owns the
|
|
# colour-swatch row that OPENS this window, sits above too — but that direction is call-time only
|
|
# (`UIDropDownMenuButton_OpenColorPicker` reaches `ColorPickerFrame` by name when the swatch is
|
|
# clicked), so the two could sit either way round.
|
|
ColorPickerFrame.xml
|
|
# The fullscreen world map (decision 0203 phase 2), over the worldmap host API
|
|
# (`crate::ui_world_map` feeds it); the 'M' binding (ui_script/input.rs) calls its
|
|
# ToggleWorldMap().
|
|
WorldMapFrame.xml
|
|
# The cast bar (decision 0137 phase 1) — the extracted 1.12 CastingBarFrame, driven by
|
|
# the SPELLCAST_* events `crate::ui_cast` fires. Only needs Fonts before it.
|
|
CastingBar.xml
|
|
# The mirror timers (decision 0874): the breath/fatigue bars at top-center, driven by the
|
|
# MIRROR_TIMER_* events `crate::ui_mirror` fires. Needs only Fonts (GameFontHighlight)
|
|
# before it; kept beside the cast bar, whose border art it shares.
|
|
MirrorTimer.xml
|
|
# The player buff/debuff bar (decisions 0255/0257 — the player aura arc): the HUD row of
|
|
# aura icons under the minimap, driven by the UnitAura feed (`crate::ui_aura`). Needs Fonts
|
|
# (its FontStrings) and ActionBar's `BENILLA_FALLBACK_ICON` global (both already loaded).
|
|
BuffFrame.xml
|
|
# The durability alert (the "armor guy"): under the minimap beside BuffFrame, driven by
|
|
# UPDATE_INVENTORY_ALERTS off the same inventory push the character window reads. Needs
|
|
# MinimapCluster (its anchor) — loaded above.
|
|
DurabilityFrame.xml
|
|
ErrorsFrame.xml
|
|
BagFrame.xml
|
|
# The stack-split spinner (decision 0216 §6/slice 2): loaded beside BagFrame, whose slot
|
|
# click handler (`BenillaBagSlot_OnClick`) calls `OpenStackSplitFrame`. Order between the
|
|
# two doesn't matter for correctness (Lua globals resolve at call time, and neither file's
|
|
# XML `inherits=` reaches into the other's templates) — kept adjacent for legibility.
|
|
StackSplit.xml
|
|
# Our ADAPTERS over the reference's own `Interface\\FrameXML\\ContainerFrame.lua`, which this
|
|
# client EXECUTES off the patch chain rather than transcribing (`ui_script::reference_ui`) — see
|
|
# that file's header for the rule. Must load AFTER the sourced reference file (every builtin does)
|
|
# and after BagFrame/StackSplit, whose globals it leans on.
|
|
ContainerFrameAdapters.xml
|
|
# The character window (decision 0208 phase 1a): the C-key paper doll. Loaded after BagFrame
|
|
# (needs nothing from it, but keeps player-state windows grouped) and before the NPC session
|
|
# windows (Gossip/Merchant/Quest*) — it depends only on Fonts/UiPanels/GameTooltip, all
|
|
# already loaded above.
|
|
CharacterFrame.xml
|
|
# The Pet tab (decision 1057): the same separate-top-level-file shape as SkillFrame below,
|
|
# and ahead of it because it is the earlier tab. It leans on CharacterFrame.xml for real —
|
|
# the `(unit, prefix)` stat setters, the `BenillaStatRow`/`BenillaMagicResistanceFrame`
|
|
# templates and the tab row it raises tab 2 of — all of which only exist once that file has
|
|
# loaded, so this order is a requirement here, not just tidiness.
|
|
PetPaperDollFrame.xml
|
|
# The Reputation tab: the same separate-top-level-file shape as the two pages around it, seated
|
|
# BETWEEN them because that is the real client's tab order (Character 1, Pet 2, Reputation 3,
|
|
# Skills 4 — ref CharacterFrame.xml:79-168), and the page's `id=` is that slot. Its hard
|
|
# dependencies are all far above: CharacterFrame.xml (the anchor target it is pinned to by name,
|
|
# and the tab row it raises tab 3 of), ScrollTemplates.xml (the faux list + its trough template),
|
|
# UIPanelTemplates.xml (`UIPanelCloseButton`, the detail popup's X — this page is that shared
|
|
# template's first benilla consumer), OptionsFrameTemplates.xml (`OptionsCheckButtonTemplate`, two
|
|
# of the three detail boxes), GameTooltip.xml (the column newbie tips) and Fonts.xml. One
|
|
# dependency runs the other way and is worth naming: the WATCH BAR half of the reference's
|
|
# ReputationFrame lives in ActionBar.xml (entry 94) beside the MainMenuBar frames it drives — that
|
|
# file's own comment carries the justification — so `FACTION_BAR_COLORS` and
|
|
# `ReputationWatchBar_Update` are already defined when this page paints a row or ticks the
|
|
# "Show as Experience Bar" box.
|
|
ReputationFrame.xml
|
|
# The Skills tab (decision 0437 phase 4): a CharacterFrame child page, but a separate
|
|
# top-level file (SkillFrame.xml's own header comment — this engine has no cross-file
|
|
# `parent=` attachment, so it's positioned by name via `<Anchors relativeTo=
|
|
# "CharacterFrame">` instead). Loaded after CharacterFrame.xml so it paints ON TOP of
|
|
# it (later file = higher z) and so `CharacterFrame` already exists for that anchor to
|
|
# resolve against — and last of the three sibling pages, because it is the last of the
|
|
# three tabs (the real client's 4).
|
|
SkillFrame.xml
|
|
# The inspect window (decision 0631): another player's paper doll. Beside the character
|
|
# window it mirrors — it needs the same three (Fonts/UiPanels/GameTooltip) plus
|
|
# `CharacterFrameTabButtonTemplate` from UiPanels.xml, and nothing from CharacterFrame.xml
|
|
# itself (its slot template, handlers, and booth slot are all its own — the two windows
|
|
# share only the reference's art).
|
|
InspectFrame.xml
|
|
# The dressing room (decision 1060): the ctrl-click item preview. Loaded right after the
|
|
# windows whose slots feed it (the character window above, the bags before that) and before
|
|
# everything else that ctrl-clicks into it — order is legibility only, since `DressUpItemLink`
|
|
# is a global resolved at call time. Needs UiPanels (the panel manager, its left-slot row) and
|
|
# Fonts; its booth pane needs nothing loaded at all.
|
|
DressUpFrame.xml
|
|
# The spellbook window (decision 0216 §8, slice 5): the P-key window, the spell SOURCE
|
|
# for the cursor-payload arc. Loaded right after CharacterFrame (the same "player-state
|
|
# windows grouped" posture, same Fonts/UiPanels/GameTooltip-only dependency set); the
|
|
# 'P' binding (ui_script/input.rs) calls its bare ToggleSpellBook(BOOKTYPE_SPELL).
|
|
SpellBookFrame.xml
|
|
# The talent window (decision 0304 §4): the N-key window, the class talent grid over the
|
|
# `benilla-ui::script::talent` engine seam. Loaded right after SpellBookFrame (the same
|
|
# "player-state windows grouped" posture; needs Fonts/UiPanels/GameTooltip plus
|
|
# ScrollTemplates.xml — its real ScrollFrame's scrollbar reuses BenillaScrollBarTemplate —
|
|
# all already loaded above). The 'N' binding (ui_script/input.rs) calls its bare
|
|
# ToggleTalentFrame().
|
|
TalentFrame.xml
|
|
# The social window (decision 0668): the O-key friends/ignore/who window over the social
|
|
# API (`benilla-ui/src/script/social.rs`) + `crate::ui_social`'s feed/drain. Needs
|
|
# UiPanels (the panel manager, `CharacterFrameTabButtonTemplate`, and the StaticPopup
|
|
# engine its two name-entry dialogs register into), ScrollTemplates (three faux lists),
|
|
# GameTooltip (the newbie tips) and UIDropDownMenu (the who list's variable column) —
|
|
# all loaded above.
|
|
FriendsFrame.xml
|
|
GossipFrame.xml
|
|
MerchantFrame.xml
|
|
# The mail window (decision 0544 P1/P2): the mailbox inbox, open-letter, and send tab over
|
|
# the Era mail API (`benilla-ui/src/script/mail.rs`) + `crate::ui_mail`'s feed/drain. Loaded
|
|
# right after MerchantFrame because it REUSES that file's global BenillaMoney_Set/_Clear
|
|
# coin helpers (postage/enclosed/COD displays) — they must be defined first.
|
|
MailFrame.xml
|
|
# The player-to-player trade window (decision 0592 P1): the two-sided offer over the trade
|
|
# API (`benilla-ui/src/script/trade.rs`) + `crate::ui_trade`'s feed/drain. Loaded after
|
|
# MerchantFrame because it REUSES that file's global BenillaMoney_Set coin helpers (the two
|
|
# gold displays) — they must be defined first.
|
|
TradeFrame.xml
|
|
# The item-text reader: letters (mail-made permanent copies) and, later, books/plaques —
|
|
# the ItemTextGet* seam (`benilla-ui/src/script/item_text.rs`) over `crate::ui_item_text`'s
|
|
# feed/drain. Loaded right after MailFrame (the same arc; needs only Fonts/UiPanels, both
|
|
# loaded above).
|
|
ItemTextFrame.xml
|
|
# The trainer window (decision 0237 phase 3): the read-only class/profession trainer list.
|
|
# Loaded right after MerchantFrame per the director's brief (kept adjacent even though this
|
|
# v1 uses plain-text costs, not MerchantFrame's coin helpers) and before the other NPC
|
|
# session windows below.
|
|
TrainerFrame.xml
|
|
# The bank window (decision 0604 phase 4): the vault, purchase ladder, and the 6 bank-bag
|
|
# popouts, over the container feed already carrying container -1/5..10 (ui_items.rs) +
|
|
# the bank Lua surface (benilla-ui/src/script/bank.rs) + crate::ui_bank's feed/drain.
|
|
# Loaded AFTER MerchantFrame.xml (reuses its BenillaMoney_* coin helpers for the purchase
|
|
# row + purse) and AFTER BagFrame.xml, already above (its BenillaBagSlotTemplate/
|
|
# BenillaBagWindowTemplate + the BenillaBagSlot_*/BenillaBagFrame_* function family are
|
|
# reused verbatim — the 24 generic slots and the 6 bank-bag popouts are, respectively, a
|
|
# container-slot grid and ordinary container windows, exactly like the bag arc's own).
|
|
# Kept in the "NPC session windows grouped" cluster beside Trainer/Taxi.
|
|
BankFrame.xml
|
|
# The taxi-map window (decision 0484 phase 2): the flight-master session, driven by the
|
|
# taxi engine seam (`benilla-ui/src/script/taxi.rs`) over `crate::ui_taxi`'s feed/drain.
|
|
# Loaded right after TrainerFrame per the same "NPC session windows grouped" posture — it
|
|
# needs only Fonts/UiPanels/GameTooltip (SetTooltipMoney), both already loaded above.
|
|
TaxiFrame.xml
|
|
# The crafting window (decision 0437 phase 2): NOT an NPC session (opens off your own cast of
|
|
# an effect-47 opener spell, TradeSkillFrame.xml's own header comment) — loaded right after
|
|
# TrainerFrame per the same "player-state/profession window" grouping and because it depends
|
|
# on nothing TrainerFrame doesn't already need (Fonts/UiPanels/GameTooltip/ScrollTemplates,
|
|
# all loaded above).
|
|
TradeSkillFrame.xml
|
|
# The Enchanting window (decision 0437 phase 3): the exact twin of TradeSkillFrame above —
|
|
# same "opens off your own cast, not an NPC session" shape (CraftFrame.xml's own header
|
|
# comment) — loaded right after it so `BuildColoredListString` (a guarded GLOBAL
|
|
# TradeSkillFrame.xml defines) already exists when CraftFrame.xml reuses it without
|
|
# redefining (CraftFrame.xml's own header comment, deviation 2).
|
|
CraftFrame.xml
|
|
LootFrame.xml
|
|
# The group-loot roll popups (decision 0591): the Need/Greed/Pass dialogs, a sibling of
|
|
# LootFrame.xml (loaded right after it) over the `benilla-ui::script::loot_roll` seam
|
|
# (`crate::ui_loot_roll`'s feed/drain). NOT a UIPanel — four `frameStrata="DIALOG"` toplevel
|
|
# popups with their own hardcoded anchors — so it needs only Fonts (GameFontNormalSmall) +
|
|
# GameTooltip (the item/PASS/NEED/GREED hovers), both already loaded above.
|
|
GroupLootFrame.xml
|
|
# The questgiver window (decision 0088): four sub-panels over the Era quest API. Loaded after
|
|
# MerchantFrame (the BenillaMoney coin helpers live there) and GossipFrame (shared parchment
|
|
# art conventions); its title/panel-button labels use the auto-centred ButtonText slot.
|
|
QuestFrame.xml
|
|
# The quest log window (decision 0088 arc, the quest-log slice): durable player state, not an
|
|
# NPC session — loaded after MerchantFrame (the BenillaMoney coin helpers it reuses) and
|
|
# alongside QuestFrame (same arc); the 'L' binding (ui_script/input.rs) calls its
|
|
# ToggleQuestLog().
|
|
QuestLogFrame.xml
|
|
# The timed-quest countdown window under the minimap (decision 1150): the reference's own
|
|
# file split. After MinimapCluster (its anchor), UIParent (the manage pass that re-seats it,
|
|
# and SecondsToTime), GameTooltip (its row hover), and QuestLogFrame — whose window a row
|
|
# click opens, and whose MAX_QUESTS it shares.
|
|
QuestTimerFrame.xml
|
|
ChatFrame.xml
|
|
# The macro window (decision 0983): the editor + its name/icon popup, driven over the
|
|
# engine's OWN macro table (`benilla_ui::script::macros` — 1.12 macros have no server
|
|
# side, so this is the one window whose model is not an app feed). Needs UiPanels (the
|
|
# panel manager + `TabButtonTemplate`), ScrollTemplates (BOTH kits — the real one scrolls
|
|
# the body box, the faux one the icon grid), MicroMenu (`UpdateMicroButtons` on
|
|
# show/hide), and it must come AFTER SpellBookFrame, whose shift-click reaches
|
|
# `BenillaMacroFrame_AddMacroLine`. Before GameMenuFrame, whose Macros button opens it.
|
|
MacroFrame.xml
|
|
# The Keybindings page MODULE (decision 1008, superseding 0997's standalone window):
|
|
# the templates + script of the Options window's Keybindings category, over the
|
|
# engine's binding table (benilla_ui::script::keybind + crate::bindings — the 1.12
|
|
# GetBinding/SetBinding Lua API). Needs UiPanels (popup engine) and GameTooltip (the
|
|
# character-specific checkbox's hover); MUST load before OptionsFrame.xml, whose
|
|
# Keybindings body inherits these templates and calls this script at OnLoad.
|
|
KeyBindingsPage.xml
|
|
# The options window (the 0985 provenance split: 0950's era structure, 0978's
|
|
# 1.12-native art, 0981/0984's 1.14 chrome + working era search, 0989's directed
|
|
# cuts — bare fully-live sliders, no corner X; 0992's dropdown rows + the Nameplates
|
|
# page): the era-shaped OptionsFrame the game menu's Options button opens. Needs
|
|
# Fonts' objects, UiPanels' panel manager, and UIDropDownMenu's capsule template
|
|
# (all far above); sits right before GameMenuFrame so the menu — which reaches it by
|
|
# name at click time — stays the last, outermost layer.
|
|
OptionsFrame.xml
|
|
# The in-game AddOns list (decision 1197) — the ESC menu's AddOns entry. Before GameMenuFrame,
|
|
# which reaches AddonList_Toggle by name at click time; it depends only on the AddOn API verbs
|
|
# (1191) and defines its own templates, so it can sit anywhere after the fonts.
|
|
AddonList.xml
|
|
# The game menu (decision 0674): the frame ESC opens, plus the CAMP/QUIT dialogs and their
|
|
# event driver. LAST on purpose — it is the outermost layer of the shell, it depends on
|
|
# everything it touches being loaded (UiPanels' popup engine + panel manager, MicroMenu's
|
|
# UpdateMicroButtons, BagFrame's Disable_BagButtons), and nothing depends on it: the ESC
|
|
# chain and the micro button both reach it by name at call time.
|
|
GameMenuFrame.xml
|