Bagnon-3.3.5/Bagnon_Forever/ui.lua
Richard Steininger 37d072dcc4 Initial commit
2023-10-18 20:34:32 +02:00

97 lines
No EOL
2.6 KiB
Lua

--[[
BagnonDBUI
Functions for the dropdown menu for showing cached data
No alterations if this code should be needed to make it work with other databases
Essentially the dropdown is used to switch between the inventory of other characters
Why not use a normal dropdown? It takes a lot of memory
--]]
local currentFrame
local dropdown
local info = {}
--adds a checkable item to a dropdown menu
local function AddCheckItem(text, value, func, checked, hasArrow, level, arg1, arg2)
info.text = text
info.func = func
info.value = value
info.hasArrow = (hasArrow and true) or nil
info.notCheckable = false
info.checked = checked
info.arg1 = arg1
info.arg2 = arg2
UIDropDownMenu_AddButton(info, level)
end
--adds an uncheckable item to a dropdown menu
local function AddItem(text, value, func, level, arg1, arg2)
info.text = text
info.func = func
info.value = value
info.hasArrow = false
info.notCheckable = true
info.checked = false
info.arg1 = arg1
info.arg2 = arg2
UIDropDownMenu_AddButton(info, level)
end
local function CharSelect_OnClick(player, delete)
local newPlayer
if delete then
--remove the selected player
BagnonDB:RemovePlayer(player)
--select the current player
newPlayer = UnitName('player')
else
--select the clicked player
newPlayer = player
end
--show the given player, and check the selected one
currentFrame:SetPlayer(newPlayer)
--hide the previous dropdown menus (hack)
for i = 1, UIDROPDOWNMENU_MENU_LEVEL-1 do
getglobal("DropDownList"..i):Hide()
end
end
--populate the list, add a delete button to all characters that aren't the current player
local function CharSelect_Initialize(level)
local playerList = BagnonDB:GetPlayerList()
local level = level or 1
if level == 1 then
local selected = currentFrame:GetPlayer()
local current = UnitName('player')
for i,player in ipairs(playerList) do
AddCheckItem(player, i, CharSelect_OnClick, player == selected, player ~= current, level, player)
end
elseif level == 2 then
AddItem(REMOVE, nil, CharSelect_OnClick, level, playerList[UIDROPDOWNMENU_MENU_VALUE], true)
end
end
local function CharSelect_Create()
dropdown = CreateFrame("Frame", "BagnonDBCharSelect", UIParent, "UIDropDownMenuTemplate")
dropdown:SetID(1)
UIDropDownMenu_Initialize(dropdown, CharSelect_Initialize, "MENU")
return dropdown
end
--[[ Usable Functions ]]--
--set which frame to "parent" the dropdown to
function BagnonDB:SetDropdownFrame(frame)
currentFrame = frame
end
--show the character select list at the given location
function BagnonDB:ToggleDropdown(anchor, offX, offY)
ToggleDropDownMenu(1, nil, dropdown or CharSelect_Create(), anchor, offX, offY)
end