coa: dynamic PopulateListFrame buttons for 21 CoA custom classes
Closes the deferred UI piece from 32324ff. The 11 vanilla class buttons
in Dcr_lists.xml stay hardcoded so this fork keeps working on stock
clients with no CoA extras (DC.ClassNumToUName produces 0 entries at
idx >= 22 there, builder returns early).
D:BuildPopulateExtraClassButtons(frame) walks DC.ClassNumToUName for
keys 22+, sorted, and creates one GameMenuButtonTemplate per class:
- First extra fills row 6's empty right column (beside Hero)
- Remaining alternate left/right, chained off Hero / Deathknight
- Frame grows by ceil((n-1)/2) * 20 px so the existing BOTTOM-anchored
Close button slides down with it
Idempotent via frame.coa_extras_built.
Wired from DecursivePopulateListFrame OnShow with a Dcr.BuildPopulateExtraClassButtons
nil-guard so an out-of-order load doesn't break the frame.
Bumped toc to Asc-1.1.1-coa.
This commit is contained in:
@@ -598,4 +598,54 @@ function D:PopulateButtonPress(frame) --{{{
|
||||
|
||||
end --}}}
|
||||
|
||||
-- CoA: append PopulateListFrame buttons for class indices 22+ (CoA custom
|
||||
-- classes added in Dcr_Raid.lua). The vanilla 11 buttons stay hardcoded in
|
||||
-- Dcr_lists.xml so this fork keeps working on stock clients with no extras.
|
||||
function D:BuildPopulateExtraClassButtons(frame) --{{{
|
||||
if frame.coa_extras_built then return end
|
||||
|
||||
local extras = {}
|
||||
for k in pairs(DC.ClassNumToUName) do
|
||||
if k >= 22 then extras[#extras + 1] = k end
|
||||
end
|
||||
table.sort(extras)
|
||||
|
||||
if #extras == 0 then
|
||||
frame.coa_extras_built = true
|
||||
return
|
||||
end
|
||||
|
||||
-- Each row added below the existing 6-row class grid is 20px tall. The
|
||||
-- first extra slots into row 6's empty right column, so only ceil((n-1)/2)
|
||||
-- new rows are needed.
|
||||
local newRows = math.ceil((#extras - 1) / 2)
|
||||
frame:SetHeight(frame:GetHeight() + newRows * 20)
|
||||
|
||||
local frameName = frame:GetName()
|
||||
local prevLeft = _G[frameName .. "Hero"]
|
||||
local prevRight = _G[frameName .. "Deathknight"]
|
||||
|
||||
for i, classIdx in ipairs(extras) do
|
||||
local class = DC.ClassNumToUName[classIdx]
|
||||
local btn = CreateFrame("Button", frameName .. "Coa" .. classIdx, frame, "GameMenuButtonTemplate")
|
||||
btn:SetSize(80, 20)
|
||||
btn.ClassType = class
|
||||
btn:SetText(D:ColorText(LC[class] or class, "FF" .. D:GetClassHexColor(class)))
|
||||
btn:SetScript("OnClick", function(b) D:PopulateButtonPress(b) end)
|
||||
|
||||
if i == 1 then
|
||||
btn:SetPoint("TOP", prevRight, "BOTTOM", 0, 0)
|
||||
prevRight = btn
|
||||
elseif i % 2 == 0 then
|
||||
btn:SetPoint("TOP", prevLeft, "BOTTOM", 0, 0)
|
||||
prevLeft = btn
|
||||
else
|
||||
btn:SetPoint("TOP", prevRight, "BOTTOM", 0, 0)
|
||||
prevRight = btn
|
||||
end
|
||||
end
|
||||
|
||||
frame.coa_extras_built = true
|
||||
end --}}}
|
||||
|
||||
T._LoadedFiles["Dcr_lists.lua"] = "2.5.1-6-gd3885c5";
|
||||
|
||||
@@ -440,6 +440,7 @@
|
||||
<Scripts>
|
||||
<OnShow>
|
||||
_G[self:GetName().."Title"]:SetText(Dcr.L["STR_QUICK_POP"]);
|
||||
if Dcr.BuildPopulateExtraClassButtons then Dcr:BuildPopulateExtraClassButtons(self); end
|
||||
</OnShow>
|
||||
</Scripts>
|
||||
<Layers>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
## SavedVariables: DecursiveDB
|
||||
|
||||
## Version: Asc-1.1.0-coa (orig 2.5.1-6-gd3885c5)
|
||||
## Version: Asc-1.1.1-coa (orig 2.5.1-6-gd3885c5)
|
||||
## Author: Archarodim
|
||||
|
||||
## X-License: All Rights Reserved
|
||||
|
||||
Reference in New Issue
Block a user