97 lines
No EOL
2.6 KiB
Lua
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 |