Files
florian.berthold bbe2492a5b chore: flatten Altoholic-Addon/ wrapper + add standard .gitignore/.gitattributes
Each DataStore_* / Altoholic_* addon now lives at the repo root, matching
the Exiles fork-layout convention (one folder per addon, no wrapper dir).
2026-05-25 10:59:24 +02:00

132 lines
3.4 KiB
Lua

local addonName = "Altoholic"
local addon = _G[addonName]
local WHITE = "|cFFFFFFFF"
local view
local highlightIndex
addon.Tabs.Achievements = {}
local ns = addon.Tabs.Achievements -- ns = namespace
local function BuildView()
view = view or {}
wipe(view)
local cats = GetCategoryList()
for _, categoryID in ipairs(cats) do
local _, parentID = GetCategoryInfo(categoryID)
if parentID == -1 then -- add categories, followed by their respective sub-categories
table.insert(view, { id = categoryID, isCollapsed = true } )
for _, subCatID in ipairs(cats) do
local _, subCatParentID = GetCategoryInfo(subCatID)
if subCatParentID == categoryID then
table.insert(view, subCatID )
end
end
end
end
end
local function Header_OnClick(frame)
highlightIndex = frame.categoryIndex
local header = view[highlightIndex]
header.isCollapsed = not header.isCollapsed
ns:Update();
AltoholicFrameAchievements:Show()
addon.Achievements:SetCategory(header.id)
addon.Achievements:Update()
end
local function Item_OnClick(frame)
highlightIndex = frame.subCategoryIndex
local item = view[highlightIndex]
ns:Update();
AltoholicFrameAchievements:Show()
addon.Achievements:SetCategory(item)
addon.Achievements:Update()
end
function ns:Update()
if not view then
BuildView()
end
local VisibleLines = 15
local categoryIndex -- index of the category in the menu table
local categoryCacheIndex -- index of the category in the cache table
local MenuCache = {}
for k, v in pairs (view) do -- rebuild the cache
if type(v) == "table" then -- header
categoryIndex = k
table.insert(MenuCache, { linetype=1, nameIndex=k } )
categoryCacheIndex = #MenuCache
if (highlightIndex) and (highlightIndex == k) then
MenuCache[#MenuCache].needsHighlight = true
end
else
if view[categoryIndex].isCollapsed == false then
table.insert(MenuCache, { linetype=2, nameIndex=k, parentIndex=categoryIndex } )
if (highlightIndex) and (highlightIndex == k) then
MenuCache[#MenuCache].needsHighlight = true
MenuCache[categoryCacheIndex].needsHighlight = true
end
end
end
end
local buttonWidth = 156
if #MenuCache > 15 then
buttonWidth = 136
end
local scrollFrame = AltoholicAchievementsMenuScrollFrame
local offset = FauxScrollFrame_GetOffset( scrollFrame );
local itemButtom = "AltoholicTabAchievementsMenuItem"
for i=1, VisibleLines do
local line = i + offset
if line > #MenuCache then
_G[itemButtom..i]:Hide()
else
local p = MenuCache[line]
_G[itemButtom..i]:SetWidth(buttonWidth)
_G[itemButtom..i.."NormalText"]:SetWidth(buttonWidth - 21)
if p.needsHighlight then
_G[itemButtom..i]:LockHighlight()
else
_G[itemButtom..i]:UnlockHighlight()
end
if p.linetype == 1 then
local catName = GetCategoryInfo(view[p.nameIndex].id)
_G[itemButtom..i.."NormalText"]:SetText(WHITE .. catName)
_G[itemButtom..i]:SetScript("OnClick", Header_OnClick)
_G[itemButtom..i].categoryIndex = p.nameIndex
elseif p.linetype == 2 then
local catName = GetCategoryInfo(view[p.nameIndex])
_G[itemButtom..i.."NormalText"]:SetText("|cFFBBFFBB " .. catName)
_G[itemButtom..i]:SetScript("OnClick", Item_OnClick)
_G[itemButtom..i].categoryIndex = p.parentIndex
_G[itemButtom..i].subCategoryIndex = p.nameIndex
end
_G[itemButtom..i]:Show()
end
end
FauxScrollFrame_Update( scrollFrame, #MenuCache, VisibleLines, 20);
end