Files
coa-altoholic/Altoholic/Frames/TabSummary.lua
T
florian.berthold d1616b4354
release / release (push) Successful in 6s
coa.22: Skills view as a vertical list (character header + one row per profession)
Rewrote the Skills tab from the cramped multi-column per-character grid to a vertical
list: each character is a header row, followed by one row per known primary profession
(incl Woodcutting/Woodworking) + secondary skills (Cooking/First Aid/Fishing) + Riding,
icon + name + rank/max, top to bottom. Simplified the column headers to match.
2026-05-29 22:04:19 +02:00

270 lines
9.8 KiB
Lua

local addonName = ...
local addon = _G[addonName]
local L = LibStub("AceLocale-3.0"):GetLocale(addonName)
local GREEN = "|cFF00FF00"
local THISREALM_THISACCOUNT = 1
local THISREALM_ALLACCOUNTS = 2
local ALLREALMS_THISACCOUNT = 3
local ALLREALMS_ALLACCOUNTS = 4
local currentMode
local childrenFrames = {
"Summary",
"BagUsage",
"Skills",
"Activity",
"GuildMembers",
"GuildProfessions",
"GuildBankTabs",
"Calendar",
}
local childrenObjects -- these are the tables that actually contain the BuildView & Update methods. Not really OOP, but enough for our needs
addon.Tabs.Summary = {}
local ns = addon.Tabs.Summary -- ns = namespace
local locationLabels = {
[THISREALM_THISACCOUNT] = format("%s %s(%s)", L["This realm"], GREEN, L["This account"]),
[THISREALM_ALLACCOUNTS] = format("%s %s(%s)", L["This realm"], GREEN, L["All accounts"]),
[ALLREALMS_THISACCOUNT] = format("%s %s(%s)", L["All realms"], GREEN, L["This account"]),
[ALLREALMS_ALLACCOUNTS] = format("%s %s(%s)", L["All realms"], GREEN, L["All accounts"]),
}
local function OnRealmFilterChange(self)
UIDropDownMenu_SetSelectedValue(AltoholicTabSummary_SelectLocation, self.value);
addon.Options:Set("TabSummaryMode", self.value)
addon.Characters:BuildList()
addon.Characters:BuildView()
ns:Refresh()
end
local function DropDownLocation_Initialize()
local info = UIDropDownMenu_CreateInfo();
info.text = locationLabels[THISREALM_THISACCOUNT]
info.value = THISREALM_THISACCOUNT
info.func = OnRealmFilterChange
info.checked = nil;
info.icon = nil;
UIDropDownMenu_AddButton(info, 1);
info.text = locationLabels[THISREALM_ALLACCOUNTS]
info.value = THISREALM_ALLACCOUNTS
info.func = OnRealmFilterChange
info.checked = nil;
info.icon = nil;
UIDropDownMenu_AddButton(info, 1);
info.text = locationLabels[ALLREALMS_THISACCOUNT]
info.value = ALLREALMS_THISACCOUNT
info.func = OnRealmFilterChange
info.checked = nil;
info.icon = nil;
UIDropDownMenu_AddButton(info, 1);
info.text = locationLabels[ALLREALMS_ALLACCOUNTS]
info.value = ALLREALMS_ALLACCOUNTS
info.func = OnRealmFilterChange
info.checked = nil;
info.icon = nil;
UIDropDownMenu_AddButton(info, 1);
end
function ns:Init()
childrenObjects = {
addon.Summary,
addon.BagUsage,
addon.TradeSkills,
addon.Activity,
addon.Guild.Members,
addon.Guild.Professions,
addon.Guild.BankTabs,
addon.Calendar,
}
local f = AltoholicTabSummary_SelectLocation
UIDropDownMenu_SetSelectedValue(f, addon.Options:Get("TabSummaryMode"))
UIDropDownMenu_SetText(f, select(addon.Options:Get("TabSummaryMode"), locationLabels[THISREALM_THISACCOUNT], locationLabels[THISREALM_ALLACCOUNTS], locationLabels[ALLREALMS_THISACCOUNT], locationLabels[ALLREALMS_ALLACCOUNTS]))
UIDropDownMenu_Initialize(f, DropDownLocation_Initialize)
addon.Calendar:Init()
end
function ns:MenuItem_OnClick(id)
for _, v in pairs(childrenFrames) do -- hide all frames
_G[ "AltoholicFrame" .. v]:Hide()
end
ns:SetMode(id)
if id == 5 then -- specific treatment per frame goes here
if IsInGuild() then
GuildRoster()
end
end
local f = _G[ "AltoholicFrame" .. childrenFrames[id]]
local o = childrenObjects[id]
if o.BuildView then
o:BuildView()
end
f:Show()
o:Update()
for i=1, 8 do
_G[ "AltoholicTabSummaryMenuItem"..i ]:UnlockHighlight();
end
_G[ "AltoholicTabSummaryMenuItem"..id ]:LockHighlight();
end
function ns:SetMode(mode)
currentMode = mode
AltoholicTabSummaryStatus:SetText("")
AltoholicTabSummaryToggleView:Show()
AltoholicTabSummary_SelectLocation:Show()
AltoholicTabSummary_RequestSharing:Show()
AltoholicTabSummary_Options:Show()
AltoholicTabSummary_OptionsDataStore:Show()
local Columns = addon.Tabs.Columns
Columns:Init()
local title
if currentMode == 1 then
Columns:Add(NAME, 100, function(self) addon.Characters:Sort(self, "GetCharacterName") end)
Columns:Add(LEVEL, 60, function(self) addon.Characters:Sort(self, "GetCharacterLevel") end)
Columns:Add(MONEY, 115, function(self) addon.Characters:Sort(self, "GetMoney") end)
Columns:Add(PLAYED, 105, function(self) addon.Characters:Sort(self, "GetPlayTime") end)
Columns:Add(XP, 55, function(self) addon.Characters:Sort(self, "GetXPRate") end)
Columns:Add(TUTORIAL_TITLE26, 70, function(self) addon.Characters:Sort(self, "GetRestXPRate") end)
Columns:Add("AiL", 55, function(self) addon.Characters:Sort(self, "GetAverageItemLevel") end)
elseif currentMode == 2 then
Columns:Add(NAME, 100, function(self) addon.Characters:Sort(self, "GetCharacterName") end)
Columns:Add(LEVEL, 60, function(self) addon.Characters:Sort(self, "GetCharacterLevel") end)
Columns:Add(L["Bags"], 120, function(self) addon.Characters:Sort(self, "GetNumBagSlots") end)
Columns:Add(L["free"], 50, function(self) addon.Characters:Sort(self, "GetNumFreeBagSlots") end)
Columns:Add(L["Bank"], 190, function(self) addon.Characters:Sort(self, "GetNumBankSlots") end)
Columns:Add(L["free"], 50, function(self) addon.Characters:Sort(self, "GetNumFreeBankSlots") end)
elseif currentMode == 3 then
-- CoA: the Skills view is now a vertical list (character header, then one row per
-- known profession/secondary skill, top to bottom). A single wide column header
-- replaces the old per-skill columns, which no longer match the layout.
Columns:Add((L["Character"] or "Character") .. " / " .. (L["Professions"] or "Professions"), 460, function(self) addon.Characters:Sort(self, "GetCharacterName") end)
Columns:Add((SKILL or "Skill"), 220, function(self) addon.Characters:Sort(self, "GetCharacterName") end)
elseif currentMode == 4 then
Columns:Add(NAME, 100, function(self) addon.Characters:Sort(self, "GetCharacterName") end)
Columns:Add(LEVEL, 60, function(self) addon.Characters:Sort(self, "GetCharacterLevel") end)
Columns:Add(L["Mails"], 60, function(self) addon.Characters:Sort(self, "GetNumMails") end)
Columns:Add(L["Visited"], 60, function(self) addon.Characters:Sort(self, "GetMailboxLastVisit") end)
Columns:Add(AUCTIONS, 70, function(self) addon.Characters:Sort(self, "GetNumAuctions") end)
Columns:Add(BIDS, 60, function(self) addon.Characters:Sort(self, "GetNumBids") end)
Columns:Add(L["Visited"], 60, function(self) addon.Characters:Sort(self, "GetAuctionHouseLastVisit") end)
Columns:Add(LASTONLINE, 90, function(self) addon.Characters:Sort(self, "GetLastLogout") end)
elseif currentMode == 5 then
Columns:Add(NAME, 100, function(self) addon.Guild.Members:Sort(self, "name") end)
Columns:Add(LEVEL, 60, function(self) addon.Guild.Members:Sort(self, "level") end)
Columns:Add("AiL", 65, function(self) addon.Guild.Members:Sort(self, "averageItemLvl") end)
Columns:Add(GAME_VERSION_LABEL, 80, function(self) addon.Guild.Members:Sort(self, "version") end)
Columns:Add(CLASS, 100, function(self) addon.Guild.Members:Sort(self, "englishClass") end)
elseif currentMode == 6 then
Columns:Add(NAME, 60, function(self) addon.Guild.Professions:Sort(self, "name") end)
Columns:Add(LEVEL, 60, function(self) addon.Guild.Professions:Sort(self, "level") end)
Columns:Add(CLASS, 120, function(self) addon.Guild.Professions:Sort(self, "englishClass") end)
Columns:Add(L["Prof. 1"], 110, function(self) addon.Guild.Professions:Sort(self, "profLink", 1) end)
Columns:Add(L["Prof. 2"], 110, function(self) addon.Guild.Professions:Sort(self, "profLink", 2) end)
title = GetSpellInfo(2550) -- cooking
Columns:Add(title, 110, function(self) addon.Guild.Professions:Sort(self, "profLink", 3) end)
elseif currentMode == 7 then
Columns:Add(NAME, 100, nil)
Columns:Add(TIMEMANAGER_TOOLTIP_LOCALTIME, 120, nil)
Columns:Add(TIMEMANAGER_TOOLTIP_REALMTIME, 120, nil)
elseif currentMode == 8 then
AltoholicTabSummaryToggleView:Hide()
AltoholicTabSummary_SelectLocation:Hide()
AltoholicTabSummary_RequestSharing:Hide()
AltoholicTabSummary_Options:Hide()
AltoholicTabSummary_OptionsDataStore:Hide()
end
end
function ns:Refresh()
if AltoholicFrameSummary:IsVisible() then
addon.Summary:Update()
elseif AltoholicFrameBagUsage:IsVisible() then
addon.BagUsage:Update()
elseif AltoholicFrameSkills:IsVisible() then
addon.TradeSkills:Update()
elseif AltoholicFrameActivity:IsVisible() then
addon.Activity:Update()
elseif AltoholicFrameGuildMembers:IsVisible() then
addon.Guild.Members:Update()
elseif AltoholicFrameGuildProfessions:IsVisible() then
addon.Guild.Professions:Update()
elseif AltoholicFrameGuildBankTabs:IsVisible() then
addon.Guild.BankTabs:Update()
elseif AltoholicFrameCalendar:IsVisible() then
addon.Calendar.Events:BuildList()
addon.Calendar:Update()
end
end
function ns:ToggleView(frame)
if not frame.isCollapsed then
frame.isCollapsed = true
AltoholicTabSummaryToggleView:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up");
else
frame.isCollapsed = nil
AltoholicTabSummaryToggleView:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up");
end
if (currentMode >= 1) and (currentMode <= 4) then
addon.Characters:ToggleView(frame)
ns:Refresh()
elseif currentMode == 5 then
addon.Guild.Members:ToggleView(frame)
elseif currentMode == 6 then
addon.Guild.Professions:ToggleView(frame)
elseif currentMode == 7 then
addon.Guild.BankTabs:ToggleView(frame)
end
end
function ns:AccountSharingButton_OnEnter(self)
AltoTooltip:SetOwner(self, "ANCHOR_RIGHT")
AltoTooltip:ClearLines()
AltoTooltip:SetText(L["Account Sharing Request"])
AltoTooltip:AddLine(L["Click this button to ask a player\nto share his entire Altoholic Database\nand add it to your own"],1,1,1)
AltoTooltip:Show()
end
function ns:AccountSharingButton_OnClick()
if addon.Options:Get("AccSharingHandlerEnabled") == 0 then
addon:Print(L["Both parties must enable account sharing\nbefore using this feature (see options)"])
return
end
addon:ToggleUI()
if AltoAccountSharing_SendButton.requestMode then
addon.Comm.Sharing:SetMode(2)
else
addon.Comm.Sharing:SetMode(1)
end
AltoAccountSharing:Show()
end