- `UnitHasRelicSlot` is real in 1.12 and benilla had no binding for it: `0x519e50` reads `ChrClasses.dbc` field 16 — set for Paladin, Shaman and Druid in `patch.MPQ`'s 17-column copy (the base `dbc.MPQ` copy has 16 columns and no such field, which is how the "always false in vanilla" belief survived twice in decisions and seven times in code) — and stock `PaperDollFrame.lua` calls it unconditionally, so the character sheet would have raised for EVERY class; a druid, paladin or shaman's sheet now hides the ammo slot, shows the relic plate where the bow was, tooltips "Relic", and reports ranged Attack/Damage/Power as N/A, all four branches transcribed from the reference - the loot window is the reference's own `LootFrame.xml`: `LootButton` is built as a real widget type rather than aliased (a Button plus one slot dword and one overridden OnClick — right-click loots exactly like left, no shift/ctrl/alt takes, a row whose Lua handler errored still loots, a fast double-click takes two slots), `LOOT_SLOT_CLEARED` fires per row again because the stock file hangs hide-in-place AND the emptied-page auto-advance off it, `EditBox:Insert(nil)` is a no-op as `lua_tostring` makes it, and an alias `GameTooltip.xml` had quietly become a reader of would have turned every item tooltip white, silently, had it just gone nil - the vendor cursor: `PickupMerchantItem` is two verbs behind one name, decided by what the cursor holds and never by the caller — a held bag item SELLS (index ignored, no merchant-open gate), otherwise the vendor row is grabbed as cursor mode 5, which is invisible to `CursorHasItem` (modes 1 and 9 only) so all thirteen stock gates stay closed while it is held; the drop is the buy, `CMSG_BUY_ITEM_IN_SLOT`, count 1, into a bag or an equipment slot, and every refusal is silent and clears the cursor; the four `Model_*` rotation handlers land in UIParent where the reference keeps them - the gap report reads `:Method(` sites now — it found `SetMerchantCompareItem`, which would have raised on the first vendor-row hover with every check green, and `LootButton:SetSlot`, and 28 "free" windows became 25; the shared coin kit moved out of the merchant window into `MoneyFrame.xml` so the eight windows that draw coins through it can reach it without loading a vendor Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
1060 lines
71 KiB
XML
1060 lines
71 KiB
XML
<Ui>
|
|
<!--
|
|
benilla's inspect window (decision 0631) — right-click a player → Inspect → their name,
|
|
portrait, level/race/class line, full-body model, and their 19 equipped items.
|
|
|
|
Dressed from the real 1.12.1 `Blizzard_InspectUI.xml`/`.lua` + `InspectPaperDollFrame.xml`/
|
|
`.lua`, extracted from the MPQ chain to session scratch this session (director-local
|
|
reference artifacts, never committed — the 0068/0138/0208 pattern; the `ref l.N` cites below
|
|
are into that extraction). Note the reference is NOT base FrameXML: it is the LoadOnDemand
|
|
addon `Blizzard_InspectUI` (`## LoadOnDemand: 1`). We implement no LoD mechanism for one
|
|
addon (decision 0631 §1) — this file simply loads with the rest, and `InspectUnit` below
|
|
stands in for the ref's `UIParentLoadAddOn`-then-show wrapper.
|
|
|
|
WHY THIS WINDOW NEEDS NO NEW READS: a player's worn gear rides `PLAYER_VISIBLE_ITEM_<n>_0`,
|
|
which is PUBLIC — the server streams it to every observer, and benilla already decodes it to
|
|
render other players' equipment. So the reference's own unit-keyed `GetInventoryItemTexture(
|
|
unit, slot)` family answers here exactly as it does for "player"; `Model::inv_slot` routes
|
|
the token to the inspect view (decision 0631 §2). Nothing waits on `SMSG_INSPECT` — it
|
|
echoes the guid and nothing else, and the ref paints immediately (`Blizzard_InspectUI.lua:
|
|
6-13` shows `NotifyInspect` and `ShowUIPanel` in the same breath).
|
|
|
|
Docks the left UIPanel slot like the character window (`UiPanels.xml`'s
|
|
`UIPanelWindows["BenillaInspectFrame"] = { area = "left", pushable = 0 }`, mirroring the
|
|
ref's own row `Blizzard_InspectUI.lua:4`) — so it competes for/replaces those windows rather
|
|
than stacking with them.
|
|
|
|
Naming: every frame here is Benilla-prefixed, this codebase's convention
|
|
(CharacterFrame.xml's header) — including the strings passed around internally. The two
|
|
addon-facing entry points keep their real global names (`InspectUnit`, and the engine's
|
|
`CanInspect`/`NotifyInspect`/`ClearInspectPlayer`), the same posture `ToggleCharacter`
|
|
takes.
|
|
|
|
THE HONOR TAB LANDED (ref tab 2, `Blizzard_InspectUI/InspectHonorFrame.{xml,lua}`, extracted
|
|
to session scratch alongside the rest of this window's reference). It was 0631's first named
|
|
deferral — it needed `MSG_INSPECT_HONOR_STATS` and an honor model that did not exist, and
|
|
the OWN character window had no Honor tab either — and the honor arc supplied all three at
|
|
once. The page is `BenillaInspectHonorFrame`, this window's own prefix convention; its five
|
|
row templates and both of its painters come from `HonorFrame.xml`, which is exactly the
|
|
sharing the reference does (its `HonorFrameTemplates.xml` is inherited straight into
|
|
`Blizzard_InspectUI`) and why that file must load first — see this window's `benilla.toc`
|
|
entry.
|
|
|
|
Named deferrals (decision 0631; each re-cited at its site):
|
|
- `InspectTitleText` / `InspectGuildText` — both `hidden="true"` in the ref itself, filled
|
|
only from PVP-rank / guild-query data (0208's own two named gaps). Not transcribed.
|
|
- Ctrl-click `DressUpItemLink` and shift-click chat-link insert (ref
|
|
`InspectPaperDollFrame.lua:104-112`) — 0208's named deferrals, both LANDED (decisions
|
|
1059/1060): ctrl previews the inspected item on your own body, shift posts its link.
|
|
Nothing else happens on a click, which is still the reference's own shape.
|
|
- `UnitHasRelicSlot` (ref l.123, l.22) — this note used to say "vanilla-always-false, so
|
|
the relic branch can never fire". **That is wrong** (decision 1785): the flag is set
|
|
for Paladin, Shaman and Druid, and the binding now exists and answers for any token,
|
|
with no `"player"` fast path — inspecting an enemy druid answers 1. The branch is
|
|
still not transcribed here, but for a different and honest reason: 1.12's inspect pane
|
|
ships inside `Blizzard_InspectUI`, which is a packed `.pub` on this install, so there
|
|
is no reference source to transcribe from. Restoring it is part of migrating this
|
|
window, not something to reconstruct from memory. The shared
|
|
`PaperDollFrame_SetRangedAttack(unit, prefix)` in CharacterFrame.xml — which the ref's
|
|
inspect pane drives with the inspected unit and the "Inspect" prefix — does honour
|
|
`hasRelic` now.
|
|
- The held-button continuous spin (ref `InspectModelFrame_OnUpdate`, l.7-22) needs
|
|
`GetButtonState() == "PUSHED"`, which this engine's Button has no method for
|
|
(CharacterFrame.xml hit the identical wall) — click-only, so no OnUpdate is wired.
|
|
-->
|
|
<Script><![CDATA[
|
|
-- ══ THE HONOUR-PANE PAINTERS, rehomed (1751 window 15) ═══════════════════════════════
|
|
-- These four lived in our HonorFrame.xml, shared by the character sheet's honour page and
|
|
-- this window's inspect twin. That page is the reference's own `Interface\FrameXML\
|
|
-- HonorFrame.xml` now, which paints itself with its own `HonorFrame_Update`, so the only
|
|
-- remaining caller is this file — and a helper belongs with its caller.
|
|
--
|
|
-- `BenillaHonorRow_OnLoad`/`_OnEnter` come with them: they drive the row hover that the
|
|
-- reference's page does not have (a benilla addition, and a `frame_flag_gate` KNOWN entry
|
|
-- until the swap made it true only of this window). The names keep their `Benilla` prefix
|
|
-- because that is what they are — ours, on our window, colliding with nothing.
|
|
|
|
-- ── The row: two strings and a hover ────────────────────────────────────────────────────
|
|
|
|
-- A row remembers the pair its hover shows: its own label as the tip's title, and the
|
|
-- matching detailed explanation as the body. Both are the player's strings, passed in by
|
|
-- the instance below rather than baked into a template, so the five leaf templates differ
|
|
-- only in what they LOOK like.
|
|
function BenillaHonorRow_OnLoad(row, title, detail)
|
|
row.title = title
|
|
row.detail = detail
|
|
end
|
|
|
|
-- The house newbie tip (this file's header, deviation 2): label in highlight white, the
|
|
-- explanation wrapped under it in NORMAL_FONT_COLOR, both only when the player has detailed
|
|
-- tips on.
|
|
function BenillaHonorRow_OnEnter(row)
|
|
BenillaTooltip_AddNewbieTipFor(row, row.title,
|
|
HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b, row.detail)
|
|
end
|
|
|
|
-- ── The two painters both honor panes share (ref-lua l.19-77 and its inspect twin) ───────
|
|
|
|
-- Paint a set of counters. `pane` is the owning frame's name, `values` a
|
|
-- `{ [rowSuffix] = number }` table: each row frame is `<pane><suffix>` and its figure lives
|
|
-- in that frame's own `$parentValue` string, so a repaint is a table walk rather than
|
|
-- twelve hand-written assignments. Rows are looked up by name and skipped when absent,
|
|
-- which is what lets a caller paint a SUBSET (the character pane repaints its weekly
|
|
-- sections on a different trigger from its session ones — see HonorFrame_Update).
|
|
--
|
|
-- A nil figure is likewise not painted, and that falls out of Lua rather than being coded:
|
|
-- a nil value never enters the table at all, so `pairs` cannot reach it. That is the
|
|
-- behaviour we want on the inspect side, where the whole twelve-wide read answers with
|
|
-- NOTHING until the server's reply lands — better a row that has not been filled in yet
|
|
-- than a row confidently showing a zero nobody sent.
|
|
function BenillaHonorPane_SetRows(pane, values)
|
|
for suffix, value in pairs(values) do
|
|
local figure = getglobal(pane .. suffix .. "Value")
|
|
if figure then
|
|
figure:SetText(value)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Paint the rank block: the badge, the rank's title, the "(Rank N)" that trails it, and the
|
|
-- progress bar under both. `rank` is the unit's rank as the engine reports it, `progress`
|
|
-- the 0..1 position within that rank, `unit` the token whose faction colours the bar.
|
|
--
|
|
-- Called with ("HonorFrame", …, "player") by the page below and with
|
|
-- ("BenillaInspectHonorFrame", …, the inspected token) by InspectFrame.xml.
|
|
function BenillaHonorPane_SetRank(pane, rank, progress, unit)
|
|
local rankName, rankNumber = GetPVPRankInfo(rank)
|
|
local title = getglobal(pane .. "CurrentPVPTitle")
|
|
local ordinal = getglobal(pane .. "CurrentPVPRank")
|
|
|
|
-- THE NIL IS THE MECHANISM, not an edge case. The rank names are GlobalStrings keyed
|
|
-- `PVP_RANK_<rank>_<team>` and there is no `PVP_RANK_0_*`: rank 0 means "no rank at
|
|
-- all", which is every character who has never taken an honorable kill. So the name
|
|
-- comes back nil there and the pane says NONE. The NUMBER is not guarded, and that is
|
|
-- deliberate too: it is a rank arithmetic result, never absent, and swallowing a nil
|
|
-- would hide a broken binding instead of reporting it.
|
|
title:SetText(rankName or NONE)
|
|
-- `RANK or ""` rather than a bare concat: a harness with no install behind it has no
|
|
-- GlobalStrings, and taking the pane down over a missing label helps nobody.
|
|
ordinal:SetText("(" .. (RANK or "") .. " " .. rankNumber .. ")")
|
|
|
|
-- The badge is built HERE, not by the engine: the file name is the rank number padded
|
|
-- to two digits, and it is shown only above zero. Verified against the patch chain this
|
|
-- session: `PvPRank01`..`PvPRank15` exist and `PvPRank00`/`16`/`17`/`18`/`19` do not,
|
|
-- which is exactly the range the arithmetic can produce (the fourteen player ranks plus
|
|
-- the PvP-leader one); zero and the four negative ranks have no badge to show.
|
|
local badge = getglobal(pane .. "PvPIcon")
|
|
if rankNumber > 0 then
|
|
badge:SetTexture(format("Interface\\PvPRankBadges\\PvPRank%02d", rankNumber))
|
|
badge:Show()
|
|
else
|
|
badge:Hide()
|
|
end
|
|
|
|
-- The bar wears the unit's own faction: Alliance navy, everything else Horde red. The
|
|
-- fork is a positive test for Alliance with an `else`, not a two-sided test, so a unit
|
|
-- whose faction group reads nil (a race the app has no snapshot for yet — ui_unit.rs's
|
|
-- own note) still gets a painted bar rather than a bare trough.
|
|
local bar = getglobal(pane .. "ProgressBar")
|
|
if UnitFactionGroup(unit) == "Alliance" then
|
|
bar:SetStatusBarColor(0.05, 0.15, 0.36)
|
|
else
|
|
bar:SetStatusBarColor(0.63, 0.09, 0.09)
|
|
end
|
|
bar:SetValue(progress)
|
|
|
|
-- Re-centre the PAIR, not the title. The title is centred on the pane and then shifted
|
|
-- left by half the width of the "(Rank N)" that trails it, so title and ordinal read as
|
|
-- one centred phrase. It has to be redone on every repaint because that width moves
|
|
-- with the number and with the locale.
|
|
title:SetPoint("TOP", pane, "TOP", -ordinal:GetWidth() / 2, -83)
|
|
end
|
|
|
|
-- ── GlobalStrings values this window uses (ref-GlobalStrings.lua, cited per line — the
|
|
-- `X = X or "..."` idiom is this codebase's convention, CharacterFrame.xml/CastingBar.xml:
|
|
-- a real GlobalStrings.lua, if one ever loads, wins over the fallback). Declared HERE and
|
|
-- not borrowed from CharacterFrame.xml's identical line: load order must not be a hidden
|
|
-- dependency between two windows (it bit exactly this file — the level line errored
|
|
-- "string expected, got nil" when the window was driven without CharacterFrame loaded).
|
|
PLAYER_LEVEL = PLAYER_LEVEL or "Level %d %s %s" -- :3075
|
|
|
|
-- The subframe roster (ref INSPECTFRAME_SUBFRAMES, l.2), now the reference's own two. Index
|
|
-- N is tab N's page, and each page's `id=` is the same mapping written the other way round
|
|
-- — the invariant CharacterFrame.xml states for its own row, and the reason `ToggleInspect`
|
|
-- below can select the tab from the page rather than being told which one it is.
|
|
BENILLA_INSPECTFRAME_SUBFRAMES = {
|
|
"BenillaInspectPaperDollFrame", "BenillaInspectHonorFrame",
|
|
}
|
|
|
|
-- The 19 inspect slots, in the ref's own `InspectPaperDollFrame_OnShow` order (l.60-78).
|
|
-- Note there is NO ammo slot and NO bag buttons: a foreign player exposes neither.
|
|
BENILLA_INSPECT_SLOTS = {
|
|
"Head", "Neck", "Shoulder", "Back", "Chest", "Shirt", "Tabard", "Wrist",
|
|
"Hands", "Waist", "Legs", "Feet", "Finger0", "Finger1", "Trinket0", "Trinket1",
|
|
"MainHand", "SecondaryHand", "Ranged",
|
|
}
|
|
|
|
-- ref InspectUnit: in the real client this is the FrameXML wrapper that load-on-demands the
|
|
-- addon and then shows the frame. We have no LoD (header), so it IS the show path — kept
|
|
-- under the real global name because that is what the UnitPopup row and any addon call.
|
|
function InspectUnit(unit)
|
|
BenillaInspectFrame_Show(unit)
|
|
end
|
|
|
|
-- ref InspectFrame_Show (l.6-13) verbatim in shape: hide first, gate on CanInspect, request,
|
|
-- remember the token, show. The CanInspect gate is the real client's `0x48a1b0` — a 10-yard
|
|
-- d² test (wow-re §5-VERIFIED), which the app folds together with is-a-player and
|
|
-- not-attackable (decision 0631 §"What the pin verified" 3/4).
|
|
function BenillaInspectFrame_Show(unit)
|
|
local frame = getglobal("BenillaInspectFrame")
|
|
HideUIPanel(frame)
|
|
if CanInspect(unit) then
|
|
NotifyInspect(unit)
|
|
frame.unit = unit
|
|
ShowUIPanel(frame)
|
|
end
|
|
end
|
|
|
|
-- ref InspectFrame_OnLoad (l.15-25). UNIT_PORTRAIT_UPDATE is NOT registered in the ref
|
|
-- either (its OnEvent has a branch for it, l.34-38, that can therefore never fire — a
|
|
-- reference bug, transcribed as the ref behaves, not as it reads).
|
|
function BenillaInspectFrame_OnLoad(frame)
|
|
frame:RegisterEvent("PLAYER_TARGET_CHANGED")
|
|
frame:RegisterEvent("PARTY_MEMBERS_CHANGED")
|
|
frame:RegisterEvent("UNIT_NAME_UPDATE")
|
|
frame:RegisterEvent("UNIT_MODEL_CHANGED")
|
|
frame.unit = nil
|
|
PanelTemplates_SetNumTabs(frame, 2)
|
|
PanelTemplates_SetTab(frame, 1)
|
|
end
|
|
|
|
-- ref InspectFrame_OnEvent (l.27-45). The retarget branch re-runs InspectUnit on the STORED
|
|
-- TOKEN, so an inspect window follows a re-target — the token resolves to whoever is
|
|
-- selected now. That is the ref's real behavior, not a quirk of ours.
|
|
function BenillaInspectFrame_OnEvent(frame)
|
|
if not frame:IsVisible() then
|
|
return
|
|
end
|
|
if event == "PLAYER_TARGET_CHANGED" or event == "PARTY_MEMBERS_CHANGED" then
|
|
InspectUnit(frame.unit)
|
|
elseif event == "UNIT_NAME_UPDATE" then
|
|
if arg1 == frame.unit then
|
|
getglobal("BenillaInspectNameText"):SetText(UnitName(arg1))
|
|
end
|
|
end
|
|
end
|
|
|
|
-- ref InspectFrame_OnShow (l.47-51), with ONE deliberate deviation: the unit is nil-guarded.
|
|
-- The ref calls SetPortraitTexture(portrait, this.unit) unguarded, and `this.unit` is nil on
|
|
-- any show that didn't come through InspectFrame_Show — `ToggleInspect` re-opening after
|
|
-- OnHide cleared it is the reachable one. In the real client that leaks a swallowed Lua
|
|
-- arg error every time (the same class decision 0413 caught in the merchant frame); ours
|
|
-- would throw out of OnShow and abandon the rest of it, so the window would open with a
|
|
-- stale name too. Guarding paints nothing instead, and the ref's own OnUpdate closes a
|
|
-- target-less window on the next frame regardless.
|
|
function BenillaInspectFrame_OnShow(frame)
|
|
PlaySound("igCharacterInfoOpen")
|
|
if frame.unit then
|
|
SetPortraitTexture(getglobal("BenillaInspectFramePortrait"), frame.unit)
|
|
getglobal("BenillaInspectNameText"):SetText(UnitName(frame.unit))
|
|
end
|
|
end
|
|
|
|
-- ref InspectFrame_OnHide (l.53-59): drop the token, play the close sound, and tell the
|
|
-- engine to stop inspecting (which stops the app's per-frame slot resolve). No subframe
|
|
-- hide-loop is needed (unlike CharacterFrame_OnHide's): BOTH pages are true engine children
|
|
-- of this frame — they are declared inside its own `<Frames>`, not as separate top-level
|
|
-- files the way the character window's four are — so they hide on the parent's cascade.
|
|
-- Dropping the token here is also what makes the honor page's nil check load-bearing: an
|
|
-- `MSG_INSPECT_HONOR_STATS` reply can outlive the window that asked for it.
|
|
function BenillaInspectFrame_OnHide(frame)
|
|
frame.unit = nil
|
|
PlaySound("igCharacterInfoClose")
|
|
ClearInspectPlayer()
|
|
end
|
|
|
|
-- ref ToggleInspect (l.67-83) + InspectFrame_ShowSubFrame (l.85-93). The ref's own "clicking
|
|
-- the tab of the page already showing CLOSES the window" is kept rather than smoothed away,
|
|
-- because that is what the real tab does. ToggleInspect is BARE (not Benilla-prefixed), the
|
|
-- addon-facing name, matching this codebase's ToggleCharacter/ToggleQuestLog precedent.
|
|
--
|
|
-- THE TAB ROW IS SELECTED HERE, from the page's own id, on every path — the line
|
|
-- CharacterFrame.xml's `ToggleCharacter` carries and the defect it records (director,
|
|
-- 2026-08-06: a page switch that did not move the row left the old tab enabled, and
|
|
-- clicking it took the "already visible" arm and shut the window). This window could not
|
|
-- show that defect while it had one tab; it can now, so the line lands with the second one
|
|
-- rather than after the report.
|
|
function ToggleInspect(tab)
|
|
local subFrame = getglobal(tab)
|
|
if not subFrame then
|
|
return
|
|
end
|
|
local frame = getglobal("BenillaInspectFrame")
|
|
PanelTemplates_SetTab(frame, subFrame:GetID())
|
|
if frame:IsVisible() then
|
|
if subFrame:IsVisible() then
|
|
HideUIPanel(frame)
|
|
else
|
|
PlaySound("igCharacterInfoTab")
|
|
BenillaInspectFrame_ShowSubFrame(tab)
|
|
end
|
|
else
|
|
ShowUIPanel(frame)
|
|
BenillaInspectFrame_ShowSubFrame(tab)
|
|
end
|
|
end
|
|
|
|
function BenillaInspectFrame_ShowSubFrame(frameName)
|
|
for _, name in ipairs(BENILLA_INSPECTFRAME_SUBFRAMES) do
|
|
local subFrame = getglobal(name)
|
|
if subFrame then
|
|
if name == frameName then subFrame:Show() else subFrame:Hide() end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- ref InspectFrame_OnUpdate (l.61-65): the window closes the moment there is no target.
|
|
-- The ref's behaviour kept, bluntness included — the ref checks "target" specifically, even
|
|
-- when inspecting a party token, so inspecting a party member and then clearing your target
|
|
-- closes the window. That is the shipped 1.12 behavior.
|
|
function BenillaInspectFrame_OnUpdate(frame)
|
|
if not UnitExists("target") then
|
|
HideUIPanel(frame)
|
|
end
|
|
end
|
|
|
|
-- ── The paper-doll page (ref InspectPaperDollFrame.lua) ─────────────────────────────────
|
|
|
|
-- ref InspectPaperDollFrame_OnLoad (l.2-5).
|
|
function BenillaInspectPaperDollFrame_OnLoad(frame)
|
|
frame:RegisterEvent("UNIT_MODEL_CHANGED")
|
|
frame:RegisterEvent("UNIT_LEVEL")
|
|
end
|
|
|
|
-- ref InspectPaperDollFrame_OnEvent (l.41-50). The model branch is a no-op for us: the pane
|
|
-- samples the "inspect" booth slot, which the app re-bakes off the live unit's dressed look
|
|
-- on its own (decision 0631 §4) — there is no `SetUnit` to re-issue.
|
|
function BenillaInspectPaperDollFrame_OnEvent(frame)
|
|
local unit = getglobal("BenillaInspectFrame").unit
|
|
if arg1 and arg1 == unit and event == "UNIT_LEVEL" then
|
|
BenillaInspectPaperDollFrame_SetLevel()
|
|
end
|
|
end
|
|
|
|
-- ref InspectPaperDollFrame_SetLevel (l.52-55). The "?" placeholders match
|
|
-- CharacterFrame.xml's: UnitRace/UnitClass read nil for the one tick before the app's first
|
|
-- snapshot for this token lands (an unguarded format() errors on nil), which for a foreign
|
|
-- unit is a genuinely reachable window, not just a startup race.
|
|
function BenillaInspectPaperDollFrame_SetLevel()
|
|
local unit = getglobal("BenillaInspectFrame").unit
|
|
getglobal("BenillaInspectLevelText"):SetText(
|
|
format(PLAYER_LEVEL, UnitLevel(unit) or 0, UnitRace(unit) or "?", UnitClass(unit) or "?"))
|
|
end
|
|
|
|
-- ref InspectPaperDollFrame_OnShow (l.57-79): the level line then all 19 slots.
|
|
function BenillaInspectPaperDollFrame_OnShow()
|
|
BenillaInspectPaperDollFrame_SetLevel()
|
|
for _, slot in ipairs(BENILLA_INSPECT_SLOTS) do
|
|
BenillaInspectSlot_Update(getglobal("BenillaInspect" .. slot .. "Slot"))
|
|
end
|
|
end
|
|
|
|
-- ref InspectPaperDollItemSlotButton_OnLoad (l.81-93). `strsub(slotName, 8)` in the ref
|
|
-- strips its "Inspect" prefix to reach the GetInventorySlotInfo name; ours passes the bare
|
|
-- name in, CharacterFrame.xml's own convention (the prefix is longer here anyway).
|
|
function BenillaInspectSlot_OnLoad(button, slotName)
|
|
button:RegisterEvent("UNIT_INVENTORY_CHANGED")
|
|
local id, texture = GetInventorySlotInfo(slotName)
|
|
button.invSlotId = id
|
|
button.slotName = slotName
|
|
button.emptyTexture = texture
|
|
button.icon = getglobal(button:GetName() .. "IconTexture")
|
|
-- No RegisterForDrag and no right-click: an inspected item cannot be picked up, used, or
|
|
-- swapped. The ref registers no drag on these either — its OnClick (l.104-112) handles
|
|
-- ONLY ctrl (dressing room) and shift (chat link), both named deferrals here, so this
|
|
-- ships with the plain left-click registration and an inert handler.
|
|
button:RegisterForClicks("LeftButtonUp")
|
|
BenillaInspectSlot_Update(button)
|
|
end
|
|
|
|
-- ref InspectPaperDollItemSlotButton_OnEvent (l.95-102): only the inspected unit's own
|
|
-- inventory change repaints.
|
|
function BenillaInspectSlot_OnEvent(button)
|
|
if event == "UNIT_INVENTORY_CHANGED" and arg1 == getglobal("BenillaInspectFrame").unit then
|
|
BenillaInspectSlot_Update(button)
|
|
end
|
|
end
|
|
|
|
-- ref InspectPaperDollItemSlotButton_OnClick (l.104-112): CTRL previews the inspected
|
|
-- player's item on YOUR character in the dressing room (decision 1060), SHIFT posts its
|
|
-- link to chat (decision 1059) — "link me that" being most of why anyone inspects. Both
|
|
-- read through the unit-keyed `GetInventoryItemLink(unit, slot)`, the same binding the
|
|
-- paper doll uses: a foreign player's worn items are PUBLIC descriptor data, so their
|
|
-- links are as readable as our own (decision 0631's whole premise). Nothing else happens on
|
|
-- a click here — the reference has no third branch, and an inspected item is not ours to
|
|
-- pick up or use.
|
|
function BenillaInspectSlot_OnClick(button, mouseButton)
|
|
local unit = getglobal("BenillaInspectFrame").unit
|
|
if IsControlKeyDown() then
|
|
-- DressUpItemLink carries the reference's own nil guard (DressUpFrame.lua:11-13).
|
|
DressUpItemLink(GetInventoryItemLink(unit, button.invSlotId))
|
|
elseif IsShiftKeyDown() then
|
|
-- The visible-and-non-nil guards both live in the shared helper (UIParent.xml).
|
|
-- Waiting on a template is the COMMON case at this window — an inspected player's
|
|
-- gear is usually gear we have never seen — so the nil arm is a live path here,
|
|
-- not a theoretical one.
|
|
BenillaChatEdit_InsertLink(GetInventoryItemLink(unit, button.invSlotId))
|
|
end
|
|
end
|
|
|
|
-- ref InspectPaperDollItemSlotButton_Update (l.114-139). No count text and no broken tint:
|
|
-- a foreign player's gear comes from the PUBLIC visible-item entries, which carry no stack
|
|
-- count and no durability (decision 0631) — which is exactly why the reference's inspect
|
|
-- window shows neither. SetItemButtonCount's 0 branch is therefore always the one taken,
|
|
-- and is dropped with the count region.
|
|
function BenillaInspectSlot_Update(button)
|
|
local unit = getglobal("BenillaInspectFrame").unit
|
|
local textureName = GetInventoryItemTexture(unit, button.invSlotId)
|
|
if textureName then
|
|
button.icon:SetTexture(textureName)
|
|
else
|
|
button.icon:SetTexture(button.emptyTexture)
|
|
end
|
|
-- ref l.130-138: a tooltip already owned by this button re-renders in place.
|
|
if GameTooltip:IsOwned(button) then
|
|
BenillaInspectSlot_OnEnter(button)
|
|
end
|
|
end
|
|
|
|
-- ref InspectPaperDollItemSlotButtonTemplate's OnEnter (InspectPaperDollFrame.xml:18-28):
|
|
-- SetInventoryItem against the INSPECTED unit, falling back to the slot-name string.
|
|
function BenillaInspectSlot_OnEnter(button)
|
|
GameTooltip:SetOwner(button, "ANCHOR_RIGHT")
|
|
local unit = getglobal("BenillaInspectFrame").unit
|
|
if not GameTooltip:SetInventoryItem(unit, button.invSlotId) then
|
|
GameTooltip:SetText(getglobal(strupper(button.slotName)) or button.slotName)
|
|
end
|
|
GameTooltip:Show()
|
|
end
|
|
|
|
-- ── The model pane (ref InspectModelFrame, l.24-39) ─────────────────────────────────────
|
|
-- A booth-texture stand-in, not a live <PlayerModel> — the settled doctrine (0105's
|
|
-- "I don't like 3d btw go for better 2d", 0208 §5, decision 0631 §4). `frame.facing` stands
|
|
-- in for the ref's `model.rotation`; the ref's sign convention is preserved verbatim
|
|
-- (rotate-left SUBTRACTS, rotate-right ADDS — ref l.29-39), as is its 0.61 default (l.25).
|
|
function BenillaInspectModel_OnLoad(frame)
|
|
frame.facing = 0.61
|
|
BenillaInspectModel_SetFacing(frame.facing)
|
|
end
|
|
|
|
function BenillaInspectModel_RotateLeft(frame)
|
|
frame.facing = frame.facing - 0.03
|
|
BenillaInspectModel_SetFacing(frame.facing)
|
|
PlaySound("igInventoryRotateCharacter")
|
|
end
|
|
|
|
function BenillaInspectModel_RotateRight(frame)
|
|
frame.facing = frame.facing + 0.03
|
|
BenillaInspectModel_SetFacing(frame.facing)
|
|
PlaySound("igInventoryRotateCharacter")
|
|
end
|
|
|
|
-- The character window's twin (CharacterFrame.xml's BenillaPaperDollModel_OnUpdate — the
|
|
-- same ref Model_OnUpdate, UIParent.lua:1444-1462, that EVERY 1.12 model pane wires:
|
|
-- PaperDollFrame l.222-224, DressUpFrame.xml:202-204, TabardFrame.xml:406-408). Held button
|
|
-- = half a turn per second; the 0.03 click above is the tap. The ref's held-vs-click sign
|
|
-- flip is quoted, not corrected.
|
|
function BenillaInspectModel_OnUpdate(frame, elapsed)
|
|
local step = elapsed * 2 * PI * ROTATIONS_PER_SECOND
|
|
if getglobal(frame:GetName() .. "RotateLeftButton"):GetButtonState() == "PUSHED" then
|
|
frame.facing = frame.facing + step
|
|
if frame.facing < 0 then
|
|
frame.facing = frame.facing + (2 * PI)
|
|
end
|
|
BenillaInspectModel_SetFacing(frame.facing)
|
|
end
|
|
if getglobal(frame:GetName() .. "RotateRightButton"):GetButtonState() == "PUSHED" then
|
|
frame.facing = frame.facing - step
|
|
if frame.facing > (2 * PI) then
|
|
frame.facing = frame.facing - (2 * PI)
|
|
end
|
|
BenillaInspectModel_SetFacing(frame.facing)
|
|
end
|
|
end
|
|
|
|
-- ── The honor page (ref Blizzard_InspectUI/InspectHonorFrame.lua) ───────────────────────
|
|
--
|
|
-- WHY THIS PAGE WAITS WHERE THE PAPER DOLL DOES NOT. The gear page needs no round trip at
|
|
-- all — worn items ride PUBLIC descriptor fields the server already streams (this file's
|
|
-- header). A player's kill counters do not: they are private fields on their own object,
|
|
-- which we never see, so they come over a request and a reply of their own
|
|
-- (`MSG_INSPECT_HONOR_STATS`). Their RANK is the exception and rides the public bytes like
|
|
-- the gear does, which is why the rank block can paint from the unit while the counters
|
|
-- wait.
|
|
function BenillaInspectHonorFrame_OnLoad(frame)
|
|
frame:RegisterEvent("INSPECT_HONOR_UPDATE")
|
|
end
|
|
|
|
function BenillaInspectHonorFrame_OnEvent()
|
|
if event == "INSPECT_HONOR_UPDATE" then
|
|
BenillaInspectHonorFrame_Update()
|
|
end
|
|
end
|
|
|
|
-- ref InspectHonorFrame_OnShow: ask only when this player's numbers are not already held,
|
|
-- and repaint from them when they are. Both arms matter — the request arm is the first
|
|
-- visit, the repaint arm is every visit after it, and skipping the request when the answer
|
|
-- is already in hand is what keeps flipping between the two tabs from re-asking the server.
|
|
function BenillaInspectHonorFrame_OnShow()
|
|
if HasInspectHonorData() then
|
|
BenillaInspectHonorFrame_Update()
|
|
else
|
|
RequestInspectHonorData()
|
|
end
|
|
end
|
|
|
|
function BenillaInspectHonorFrame_Update()
|
|
-- THE TOKEN IS THIS WINDOW'S OWN, not the reference's hardcoded "target". The ref reads
|
|
-- `UnitPVPRank("target")`/`UnitFactionGroup("target")` while its own paper doll reads
|
|
-- `this.unit`, so inspecting a PARTY member paints that party member's gear under
|
|
-- whoever you happen to be targeting's rank and faction colour. This window already
|
|
-- tracks the token it was opened on (`BenillaInspectFrame_Show` stores it; every other
|
|
-- read in this file goes through it), so the honor page reads it too and the two halves
|
|
-- of one window agree about whose player they are showing.
|
|
local unit = getglobal("BenillaInspectFrame").unit
|
|
-- The token is nil'd when the window closes, and the reply is asynchronous: closing
|
|
-- before it lands is an ordinary thing to do. The reference cannot notice, because
|
|
-- "target" is still a unit; ours would paint a rank block for nobody, so it doesn't.
|
|
if not unit then
|
|
return
|
|
end
|
|
|
|
-- Twelve figures in one call, in the order the reply's own body carries them.
|
|
local sessionHK, sessionDK, yesterdayHK, yesterdayHonor, thisWeekHK, thisWeekHonor,
|
|
lastWeekHK, lastWeekHonor, lastWeekStanding, lifetimeHK, lifetimeDK, lifetimeRank =
|
|
GetInspectHonorData()
|
|
-- The same twelve rows the character window's page paints, through the same painter
|
|
-- (HonorFrame.xml) — one section per line, in the order they read down the page.
|
|
BenillaHonorPane_SetRows("BenillaInspectHonorFrame", {
|
|
CurrentHK = sessionHK, CurrentDK = sessionDK,
|
|
YesterdayHK = yesterdayHK, YesterdayContribution = yesterdayHonor,
|
|
ThisWeekHK = thisWeekHK, ThisWeekContribution = thisWeekHonor,
|
|
LastWeekHK = lastWeekHK, LastWeekContribution = lastWeekHonor,
|
|
LastWeekStanding = lastWeekStanding,
|
|
LifeTimeHK = lifetimeHK, LifeTimeDK = lifetimeDK,
|
|
LifeTimeRank = GetPVPRankInfo(lifetimeRank) or NONE,
|
|
})
|
|
-- The rank block, off the unit for the rank and the reply for the bar. The two do come
|
|
-- from different places and that is not an inconsistency: the rank is public unit state
|
|
-- we can read at any time, the bar position is a private byte that only the reply
|
|
-- carries.
|
|
BenillaHonorPane_SetRank("BenillaInspectHonorFrame", UnitPVPRank(unit),
|
|
GetInspectPVPRankProgress(), unit)
|
|
end
|
|
]]></Script>
|
|
|
|
<!--
|
|
The inspect slot button. The ref's own template inherits ItemButtonTemplate
|
|
(InspectPaperDollFrame.xml:4-46); ItemButtonTemplate's XML isn't part of this session's
|
|
extraction, so its shape is taken from this codebase's prior reconstruction of it
|
|
(CharacterFrame.xml's BenillaPaperDollItemSlotTemplate) minus what inspect can't have:
|
|
no $parentCount region (no stack counts on public gear), no PushedTexture (nothing to press
|
|
— the click is inert), no cooldown.
|
|
-->
|
|
<Button name="BenillaInspectItemSlotTemplate" virtual="true">
|
|
<Size><AbsDimension x="37" y="37"/></Size>
|
|
<Layers>
|
|
<Layer level="BACKGROUND">
|
|
<Texture name="$parentIconTexture"/>
|
|
</Layer>
|
|
</Layers>
|
|
<NormalTexture file="Interface\Buttons\UI-Quickslot2">
|
|
<Size><AbsDimension x="64" y="64"/></Size>
|
|
<Anchors>
|
|
<Anchor point="CENTER" relativePoint="CENTER"><Offset><AbsDimension x="0" y="-1"/></Offset></Anchor>
|
|
</Anchors>
|
|
</NormalTexture>
|
|
<HighlightTexture file="Interface\Buttons\ButtonHilight-Square" alphaMode="ADD"/>
|
|
<Scripts>
|
|
<OnClick>BenillaInspectSlot_OnClick(self, arg1)</OnClick>
|
|
<OnEnter>BenillaInspectSlot_OnEnter(self)</OnEnter>
|
|
<OnLeave>GameTooltip:Hide()</OnLeave>
|
|
<OnEvent>BenillaInspectSlot_OnEvent(self)</OnEvent>
|
|
</Scripts>
|
|
</Button>
|
|
|
|
<Frame name="BenillaInspectFrame" hidden="true">
|
|
<!-- The real 384x512 window (ref l.4-14). No <Anchors> — ShowUIPanel SetPoints this to the
|
|
left slot on open (UiPanels.xml's convention, CharacterFrame.xml's precedent). -->
|
|
<Size><AbsDimension x="384" y="512"/></Size>
|
|
<HitRectInsets><AbsInset left="0" right="30" top="0" bottom="45"/></HitRectInsets>
|
|
<Layers>
|
|
<!-- Portrait 60x60 TOPLEFT (7,-6) (ref l.19-31) — the inspected unit's booth bake,
|
|
pointed at the token in OnShow (unlike the character window's fixed "player"). -->
|
|
<Layer level="ARTWORK">
|
|
<Texture name="BenillaInspectFramePortrait">
|
|
<Size><AbsDimension x="60" y="60"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="7" y="-6"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
</Layer>
|
|
</Layers>
|
|
<Frames>
|
|
<!-- Name: CENTER (6,232) wrapper, GameFontNormal centered inside it, white (ref l.35-64). -->
|
|
<Frame name="BenillaInspectNameFrame">
|
|
<Size><AbsDimension x="109" y="12"/></Size>
|
|
<Anchors><Anchor point="CENTER"><Offset><AbsDimension x="6" y="232"/></Offset></Anchor></Anchors>
|
|
<Layers>
|
|
<Layer>
|
|
<FontString name="BenillaInspectNameText" inherits="GameFontNormal" text="NAME">
|
|
<Size><AbsDimension x="300" y="12"/></Size>
|
|
<Anchors><Anchor point="CENTER"/></Anchors>
|
|
<Color r="1.0" g="1.0" b="1.0"/>
|
|
</FontString>
|
|
</Layer>
|
|
</Layers>
|
|
<Scripts>
|
|
<OnLoad>self:SetFrameLevel(self:GetFrameLevel() + 1)</OnLoad>
|
|
</Scripts>
|
|
</Frame>
|
|
<!-- Close: the ref's own position (CENTER of TOPRIGHT, -44,-25 — ref l.65-78) on the
|
|
minimize-button art this codebase's close buttons all use. The +1 frame level is
|
|
CharacterFrame.xml's documented compensation: the page's BACKGROUND art is a
|
|
full-window sibling created after this button, so at level 0 it would paint over. -->
|
|
<Button name="BenillaInspectFrameCloseButton">
|
|
<Size><AbsDimension x="32" y="32"/></Size>
|
|
<Anchors><Anchor point="CENTER" relativePoint="TOPRIGHT"><Offset><AbsDimension x="-44" y="-25"/></Offset></Anchor></Anchors>
|
|
<NormalTexture file="Interface\Buttons\UI-Panel-MinimizeButton-Up"/>
|
|
<PushedTexture file="Interface\Buttons\UI-Panel-MinimizeButton-Down"/>
|
|
<HighlightTexture file="Interface\Buttons\UI-Panel-MinimizeButton-Highlight" alphaMode="ADD"/>
|
|
<Scripts>
|
|
<OnLoad>self:SetFrameLevel(self:GetFrameLevel() + 1)</OnLoad>
|
|
<OnClick>HideUIPanel(getglobal("BenillaInspectFrame"))</OnClick>
|
|
</Scripts>
|
|
</Button>
|
|
<!-- The tab row (ref l.79-120 — CENTER of BOTTOMLEFT +60,+61, the second chained off
|
|
the first's RIGHT by -16, CharacterFrame.xml's own row spacing). BOTH of the ref's
|
|
tabs now. Its tabs carry a hover tooltip (CHARACTER_INFO / HONOR); ours follows
|
|
CharacterFrame.xml's own tab row, which carries none — the visible label already
|
|
says what it does. Tab 2's label is the GlobalStrings KEY, so it localizes with the
|
|
player's install; tab 1's enUS literal predates that convention and is left where
|
|
it is rather than swept up in an honor change. -->
|
|
<Button name="BenillaInspectFrameTab1" inherits="CharacterFrameTabButtonTemplate" text="Character">
|
|
<Anchors><Anchor point="CENTER" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="60" y="61"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnClick>ToggleInspect("BenillaInspectPaperDollFrame")</OnClick></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectFrameTab2" inherits="CharacterFrameTabButtonTemplate" text="HONOR">
|
|
<Anchors><Anchor point="LEFT" relativeTo="BenillaInspectFrameTab1" relativePoint="RIGHT"><Offset><AbsDimension x="-16" y="0"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnClick>ToggleInspect("BenillaInspectHonorFrame")</OnClick></Scripts>
|
|
</Button>
|
|
|
|
<!-- The paper-doll page (ref InspectPaperDollFrame, l.47-371). The ref uses
|
|
setAllPoints="true"; this is sized to fill the parent instead — equivalent, and the
|
|
shape CharacterFrame.xml's own paper doll takes (its header has the history).
|
|
id=1 is the ref's own, and it is what `ToggleInspect` selects the tab from: a
|
|
page's id IS its slot in this window's tab row (the roster's own note above). It
|
|
was absent while one page shipped, because a row of one cannot disagree. -->
|
|
<Frame name="BenillaInspectPaperDollFrame" id="1">
|
|
<Size><AbsDimension x="384" y="512"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT" relativePoint="TOPLEFT"/></Anchors>
|
|
<HitRectInsets><AbsInset left="0" right="30" top="0" bottom="45"/></HitRectInsets>
|
|
<Layers>
|
|
<Layer level="BACKGROUND">
|
|
<!-- The same four quadrant slabs the character tab uses (ref l.49-93). -->
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-CharacterTab-L1">
|
|
<Size><AbsDimension x="256" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"/></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-CharacterTab-R1">
|
|
<Size><AbsDimension x="128" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="256" y="0"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-CharacterTab-BottomLeft">
|
|
<Size><AbsDimension x="256" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="0" y="-256"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-CharacterTab-BottomRight">
|
|
<Size><AbsDimension x="128" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="256" y="-256"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<!-- "Level %d %s %s" under the name (ref l.94-102). -->
|
|
<FontString name="BenillaInspectLevelText" inherits="GameFontNormalSmall">
|
|
<Anchors>
|
|
<Anchor point="TOP" relativeTo="BenillaInspectNameText" relativePoint="BOTTOM"><Offset><AbsDimension x="0" y="-6"/></Offset></Anchor>
|
|
</Anchors>
|
|
</FontString>
|
|
</Layer>
|
|
</Layers>
|
|
<Frames>
|
|
<!-- The model pane (ref PlayerModel InspectModelFrame, l.124-187): 233x300 at
|
|
TOPLEFT (65,-78) — taller than the character window's 233x224 because the
|
|
inspect page carries no stats block under it. A plain Frame sampling the
|
|
"inspect" booth bake (header). -->
|
|
<Frame name="BenillaInspectModelFrame">
|
|
<Size><AbsDimension x="233" y="300"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="65" y="-78"/></Offset></Anchor></Anchors>
|
|
<Layers>
|
|
<!-- BACKGROUND, not ARTWORK — the booth quad is an OPAQUE stand-in for a
|
|
widget the reference renders outside the layer batches, so it must
|
|
sit as low as a region goes or it swallows same-level siblings
|
|
(decision 1070; the pet page's diet icon is where that bit). -->
|
|
<Layer level="BACKGROUND">
|
|
<Texture name="$parentTexture">
|
|
<Size><AbsDimension x="233" y="300"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"/></Anchors>
|
|
</Texture>
|
|
</Layer>
|
|
</Layers>
|
|
<Frames>
|
|
<!-- Rotate buttons (ref l.148-185): 35x35, left then right chained off
|
|
its TOPRIGHT, both at the pane's own TOPLEFT. RegisterForClicks on
|
|
both edges + the pane's OnUpdate below = the ref's tap-and-hold. -->
|
|
<Button name="BenillaInspectModelFrameRotateLeftButton">
|
|
<Size><AbsDimension x="35" y="35"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT" relativePoint="TOPLEFT"/></Anchors>
|
|
<NormalTexture file="Interface\Buttons\UI-RotationLeft-Button-Up"/>
|
|
<PushedTexture file="Interface\Buttons\UI-RotationLeft-Button-Down"/>
|
|
<HighlightTexture file="Interface\Buttons\ButtonHilight-Round" alphaMode="ADD"/>
|
|
<Scripts>
|
|
<OnLoad>self:RegisterForClicks("LeftButtonDown", "LeftButtonUp")</OnLoad>
|
|
<OnClick>BenillaInspectModel_RotateLeft(getglobal("BenillaInspectModelFrame"))</OnClick>
|
|
</Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectModelFrameRotateRightButton">
|
|
<Size><AbsDimension x="35" y="35"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectModelFrameRotateLeftButton" relativePoint="TOPRIGHT"/></Anchors>
|
|
<NormalTexture file="Interface\Buttons\UI-RotationRight-Button-Up"/>
|
|
<PushedTexture file="Interface\Buttons\UI-RotationRight-Button-Down"/>
|
|
<HighlightTexture file="Interface\Buttons\ButtonHilight-Round" alphaMode="ADD"/>
|
|
<Scripts>
|
|
<OnLoad>self:RegisterForClicks("LeftButtonDown", "LeftButtonUp")</OnLoad>
|
|
<OnClick>BenillaInspectModel_RotateRight(getglobal("BenillaInspectModelFrame"))</OnClick>
|
|
</Scripts>
|
|
</Button>
|
|
</Frames>
|
|
<Scripts>
|
|
<OnLoad>
|
|
BenillaInspectModel_OnLoad(self)
|
|
BenillaSetBoothTexture(getglobal(self:GetName() .. "Texture"), "inspect")
|
|
</OnLoad>
|
|
<OnUpdate>BenillaInspectModel_OnUpdate(self, arg1)</OnUpdate>
|
|
</Scripts>
|
|
</Frame>
|
|
|
|
<!-- The 19 slots (ref l.188-358). Left column from TOPLEFT (21,-74) chaining
|
|
-4 down; right column from (305,-74); the three weapon slots from
|
|
BOTTOMLEFT (122,127) chaining +5 right. The ref's own geometry, and the
|
|
same numbers the character window's doll uses. -->
|
|
<Button name="BenillaInspectHeadSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="21" y="-74"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "HeadSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectNeckSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectHeadSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "NeckSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectShoulderSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectNeckSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "ShoulderSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectBackSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectShoulderSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "BackSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectChestSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectBackSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "ChestSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectShirtSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectChestSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "ShirtSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectTabardSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectShirtSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "TabardSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectWristSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectTabardSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "WristSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectHandsSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="305" y="-74"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "HandsSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectWaistSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectHandsSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "WaistSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectLegsSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectWaistSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "LegsSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectFeetSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectLegsSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "FeetSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectFinger0Slot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectFeetSlot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "Finger0Slot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectFinger1Slot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectFinger0Slot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "Finger1Slot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectTrinket0Slot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectFinger1Slot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "Trinket0Slot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectTrinket1Slot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectTrinket0Slot" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "Trinket1Slot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectMainHandSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="122" y="127"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "MainHandSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectSecondaryHandSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectMainHandSlot" relativePoint="TOPRIGHT"><Offset><AbsDimension x="5" y="0"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "SecondaryHandSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
<Button name="BenillaInspectRangedSlot" inherits="BenillaInspectItemSlotTemplate">
|
|
<Anchors><Anchor point="TOPLEFT" relativeTo="BenillaInspectSecondaryHandSlot" relativePoint="TOPRIGHT"><Offset><AbsDimension x="5" y="0"/></Offset></Anchor></Anchors>
|
|
<Scripts><OnLoad>BenillaInspectSlot_OnLoad(self, "RangedSlot")</OnLoad></Scripts>
|
|
</Button>
|
|
</Frames>
|
|
<Scripts>
|
|
<OnLoad>BenillaInspectPaperDollFrame_OnLoad(self)</OnLoad>
|
|
<OnEvent>BenillaInspectPaperDollFrame_OnEvent(self)</OnEvent>
|
|
<OnShow>BenillaInspectPaperDollFrame_OnShow()</OnShow>
|
|
</Scripts>
|
|
</Frame>
|
|
|
|
<!--
|
|
The honor page (ref InspectHonorFrame, its own file's l.4-364), id=2. Geometry for
|
|
geometry it is the character window's Honor tab with the level line taken out and
|
|
the frame names re-prefixed — the reference ships the two as near-copies of each
|
|
other, and every number below is quoted from the inspect one. What it is NOT a copy
|
|
of is the LOGIC: the row templates and both painters are HonorFrame.xml's, called
|
|
from this file's `BenillaInspectHonorFrame_Update` above.
|
|
|
|
A true engine child of this window (declared inside its `<Frames>`), unlike the
|
|
character window's pages, which are separate top-level files pinned by name. That is
|
|
why it needs no `parent=` substitute and why the parent's hide cascade closes it.
|
|
-->
|
|
<Frame name="BenillaInspectHonorFrame" enableMouse="true" hidden="true" id="2">
|
|
<Size><AbsDimension x="384" y="512"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT" relativePoint="TOPLEFT"/></Anchors>
|
|
<HitRectInsets><AbsInset left="0" right="30" top="0" bottom="75"/></HitRectInsets>
|
|
<Layers>
|
|
<Layer level="BACKGROUND">
|
|
<!-- The shared "General" quadrants every PaperDollInfoFrame page wears,
|
|
carrying the portrait-ring cutout the window's own portrait shows
|
|
through (ref l.10-57). -->
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-General-TopLeft">
|
|
<Size><AbsDimension x="256" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="2" y="-1"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-General-TopRight">
|
|
<Size><AbsDimension x="128" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="258" y="-1"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-General-BottomLeft">
|
|
<Size><AbsDimension x="256" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="2" y="-257"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-General-BottomRight">
|
|
<Size><AbsDimension x="128" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="258" y="-257"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
</Layer>
|
|
<Layer level="ARTWORK">
|
|
<!-- The honor plaque and the five section plates (ref l.60-107). -->
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-Honor-TopLeft">
|
|
<Size><AbsDimension x="256" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="22" y="-69"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-Honor-TopRight">
|
|
<Size><AbsDimension x="128" y="256"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="275" y="-69"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-Honor-BottomLeft">
|
|
<Size><AbsDimension x="256" y="128"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="22" y="-325"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<Texture file="Interface\PaperDollInfoFrame\UI-Character-Honor-BottomRight">
|
|
<Size><AbsDimension x="128" y="128"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="275" y="-325"/></Offset></Anchor></Anchors>
|
|
</Texture>
|
|
<!-- The rank title and its "(Rank N)". The title's y is the one the repaint
|
|
writes, not the reference's XML -81 that nothing ever sees —
|
|
HonorFrame.xml's header states the collapse and its reason. -->
|
|
<FontString name="BenillaInspectHonorFrameCurrentPVPTitle" inherits="GameFontNormal">
|
|
<Anchors><Anchor point="TOP"><Offset><AbsDimension x="0" y="-83"/></Offset></Anchor></Anchors>
|
|
</FontString>
|
|
<FontString name="BenillaInspectHonorFrameCurrentPVPRank" inherits="GameFontNormalSmall">
|
|
<Anchors>
|
|
<Anchor point="LEFT" relativeTo="BenillaInspectHonorFrameCurrentPVPTitle" relativePoint="RIGHT"><Offset><AbsDimension x="5" y="-1"/></Offset></Anchor>
|
|
</Anchors>
|
|
</FontString>
|
|
<!-- The five section headings (ref l.126-170), each chained off the last;
|
|
the uneven gaps are each section's own row count. -->
|
|
<FontString name="BenillaInspectHonorFrameCurrentSessionTitle" inherits="GameFontNormal" text="HONOR_THIS_SESSION">
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="36" y="-112"/></Offset></Anchor></Anchors>
|
|
</FontString>
|
|
<FontString name="BenillaInspectHonorFrameYesterdayTitle" inherits="GameFontNormal" text="HONOR_YESTERDAY">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameCurrentSessionTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-41"/></Offset></Anchor>
|
|
</Anchors>
|
|
</FontString>
|
|
<FontString name="BenillaInspectHonorFrameThisWeekTitle" inherits="GameFontNormal" text="HONOR_THISWEEK">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameYesterdayTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-43"/></Offset></Anchor>
|
|
</Anchors>
|
|
</FontString>
|
|
<FontString name="BenillaInspectHonorFrameLastWeekTitle" inherits="GameFontNormal" text="HONOR_LASTWEEK">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameThisWeekTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-42"/></Offset></Anchor>
|
|
</Anchors>
|
|
</FontString>
|
|
<FontString name="BenillaInspectHonorFrameLifeTimeTitle" inherits="GameFontNormal" text="HONOR_LIFETIME">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameLastWeekTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-64"/></Offset></Anchor>
|
|
</Anchors>
|
|
</FontString>
|
|
</Layer>
|
|
<Layer level="OVERLAY">
|
|
<!-- The rank badge (ref l.172-185). Pathless: the file is chosen per rank at
|
|
repaint time and there is none below rank 1. -->
|
|
<Texture name="BenillaInspectHonorFramePvPIcon">
|
|
<Size><AbsDimension x="24" y="24"/></Size>
|
|
<Anchors>
|
|
<Anchor point="RIGHT" relativeTo="BenillaInspectHonorFrameCurrentPVPTitle" relativePoint="LEFT"><Offset><AbsDimension x="-5" y="0"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Texture>
|
|
</Layer>
|
|
</Layers>
|
|
<Frames>
|
|
<!-- The twelve rows (ref l.188-295), on HonorFrame.xml's five templates. Same
|
|
sections and the same row sets as the character window's page, because they
|
|
are the same figures about a different player. Today. -->
|
|
<Frame name="BenillaInspectHonorFrameCurrentHK" inherits="HonorFrameHKButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameCurrentSessionTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="10" y="-3"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
<Frame name="BenillaInspectHonorFrameCurrentDK" inherits="HonorFrameDKButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameCurrentHK" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-2"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
|
|
<!-- Yesterday. -->
|
|
<Frame name="BenillaInspectHonorFrameYesterdayHK" inherits="HonorFrameHKButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameYesterdayTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="10" y="-3"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
<Frame name="BenillaInspectHonorFrameYesterdayContribution" inherits="HonorFrameContributionButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameYesterdayHK" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-3"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
|
|
<!-- This Week. -->
|
|
<Frame name="BenillaInspectHonorFrameThisWeekHK" inherits="HonorFrameHKButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameThisWeekTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="10" y="-3"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
<Frame name="BenillaInspectHonorFrameThisWeekContribution" inherits="HonorFrameContributionButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameThisWeekHK" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-3"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
|
|
<!-- Last Week, the only three-row section. -->
|
|
<Frame name="BenillaInspectHonorFrameLastWeekHK" inherits="HonorFrameHKButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameLastWeekTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="10" y="-3"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
<Frame name="BenillaInspectHonorFrameLastWeekContribution" inherits="HonorFrameContributionButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameLastWeekHK" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-2"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
<Frame name="BenillaInspectHonorFrameLastWeekStanding" inherits="HonorFrameStandingButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameLastWeekContribution" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-2"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
|
|
<!-- Lifetime. -->
|
|
<Frame name="BenillaInspectHonorFrameLifeTimeHK" inherits="HonorFrameHKButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameLifeTimeTitle" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="10" y="-4"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
<Frame name="BenillaInspectHonorFrameLifeTimeDK" inherits="HonorFrameDKButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameLifeTimeHK" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
<Frame name="BenillaInspectHonorFrameLifeTimeRank" inherits="HonorFrameRankButtonTemplate">
|
|
<Anchors>
|
|
<Anchor point="TOPLEFT" relativeTo="BenillaInspectHonorFrameLifeTimeDK" relativePoint="BOTTOMLEFT"><Offset><AbsDimension x="0" y="-4"/></Offset></Anchor>
|
|
</Anchors>
|
|
</Frame>
|
|
|
|
<!-- The rank hover: an invisible strip spanning badge to ordinal (ref
|
|
l.296-315), so the whole phrase explains itself. -->
|
|
<Frame name="BenillaInspectHonorFrameRankButton" enableMouse="true">
|
|
<Size><AbsDimension x="10" y="24"/></Size>
|
|
<Anchors>
|
|
<Anchor point="LEFT" relativeTo="BenillaInspectHonorFramePvPIcon"/>
|
|
<Anchor point="RIGHT" relativeTo="BenillaInspectHonorFrameCurrentPVPRank"/>
|
|
</Anchors>
|
|
<Scripts>
|
|
<OnEnter>BenillaTooltip_AddNewbieTipFor(self, RANK, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b, NEWBIE_TOOLTIP_RANK)</OnEnter>
|
|
<OnLeave>GameTooltip:Hide()</OnLeave>
|
|
</Scripts>
|
|
</Frame>
|
|
|
|
<!-- The progress bar (ref l.316-351). The two frame-level drops are the
|
|
reference's own and the mechanism is the same one HonorFrame.xml's twin
|
|
documents: they put the BORDER-layer fill in the pane's own bucket so the
|
|
pane's ARTWORK plaque draws over it rather than under. -->
|
|
<StatusBar name="BenillaInspectHonorFrameProgressBar" enableMouse="true" drawLayer="BORDER" minValue="0" maxValue="1" defaultValue="0">
|
|
<Size><AbsDimension x="315" y="29"/></Size>
|
|
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="22" y="-77"/></Offset></Anchor></Anchors>
|
|
<Frames>
|
|
<Frame name="BenillaInspectHonorFrameProgressButton" enableMouse="true" setAllPoints="true">
|
|
<Scripts>
|
|
<OnLoad>self:SetFrameLevel(self:GetFrameLevel() - 1)</OnLoad>
|
|
<OnEnter>BenillaTooltip_AddNewbieTipFor(self, RANK_POSITION, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b, NEWBIE_TOOLTIP_RANK_POSITION)</OnEnter>
|
|
<OnLeave>GameTooltip:Hide()</OnLeave>
|
|
</Scripts>
|
|
</Frame>
|
|
</Frames>
|
|
<Scripts>
|
|
<OnLoad>self:SetFrameLevel(self:GetFrameLevel() - 1)</OnLoad>
|
|
</Scripts>
|
|
<BarTexture name="$parentBar" file="Interface\PaperDollInfoFrame\UI-Character-Skills-Bar"/>
|
|
</StatusBar>
|
|
</Frames>
|
|
<Scripts>
|
|
<OnLoad>BenillaInspectHonorFrame_OnLoad(self)</OnLoad>
|
|
<OnEvent>BenillaInspectHonorFrame_OnEvent()</OnEvent>
|
|
<OnShow>BenillaInspectHonorFrame_OnShow()</OnShow>
|
|
</Scripts>
|
|
</Frame>
|
|
</Frames>
|
|
<Scripts>
|
|
<OnLoad>BenillaInspectFrame_OnLoad(self)</OnLoad>
|
|
<OnEvent>BenillaInspectFrame_OnEvent(self)</OnEvent>
|
|
<OnShow>BenillaInspectFrame_OnShow(self)</OnShow>
|
|
<OnHide>BenillaInspectFrame_OnHide(self)</OnHide>
|
|
<OnUpdate>BenillaInspectFrame_OnUpdate(self)</OnUpdate>
|
|
</Scripts>
|
|
</Frame>
|
|
</Ui>
|