156 lines
5.4 KiB
Lua
156 lines
5.4 KiB
Lua
|
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
||
|
local DT = E:GetModule('DataTexts')
|
||
|
|
||
|
local _G = _G
|
||
|
local ipairs, pairs, format = ipairs, pairs, format
|
||
|
local tinsert, tremove, next = tinsert, tremove, next
|
||
|
local C_CurrencyInfo_GetCurrencyInfo = C_CurrencyInfo.GetCurrencyInfo
|
||
|
local C_CurrencyInfo_GetCurrencyListInfo = C_CurrencyInfo.GetCurrencyListInfo
|
||
|
local C_CurrencyInfo_GetCurrencyListSize = C_CurrencyInfo.GetCurrencyListSize
|
||
|
|
||
|
local CustomCurrencies = {}
|
||
|
local CurrencyListNameToIndex = {}
|
||
|
|
||
|
local function OnEvent(self)
|
||
|
local currency = CustomCurrencies[self.name]
|
||
|
if currency then
|
||
|
local info = C_CurrencyInfo_GetCurrencyInfo(currency.ID)
|
||
|
if not info then return end
|
||
|
|
||
|
if currency.DISPLAY_STYLE == 'ICON' then
|
||
|
if currency.SHOW_MAX then
|
||
|
self.text:SetFormattedText('%s %d / %d', currency.ICON, info.quantity, info.maxQuantity)
|
||
|
else
|
||
|
self.text:SetFormattedText('%s %d', currency.ICON, info.quantity)
|
||
|
end
|
||
|
elseif currency.DISPLAY_STYLE == 'ICON_TEXT' then
|
||
|
if currency.SHOW_MAX then
|
||
|
self.text:SetFormattedText('%s %s %d / %d', currency.ICON, currency.NAME, info.quantity, info.maxQuantity)
|
||
|
else
|
||
|
self.text:SetFormattedText('%s %s %d', currency.ICON, currency.NAME, info.quantity)
|
||
|
end
|
||
|
else --ICON_TEXT_ABBR
|
||
|
if currency.SHOW_MAX then
|
||
|
self.text:SetFormattedText('%s %s %d / %d', currency.ICON, E:AbbreviateString(currency.NAME), info.quantity, info.maxQuantity)
|
||
|
else
|
||
|
self.text:SetFormattedText('%s %s %d', currency.ICON, E:AbbreviateString(currency.NAME), info.quantity)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function OnEnter(self)
|
||
|
DT.tooltip:ClearLines()
|
||
|
|
||
|
local currency = CustomCurrencies[self.name]
|
||
|
if not currency or not currency.USE_TOOLTIP then return end
|
||
|
|
||
|
local index = CurrencyListNameToIndex[self.name]
|
||
|
if not index then return end
|
||
|
DT.tooltip:SetCurrencyToken(index)
|
||
|
DT.tooltip:Show()
|
||
|
end
|
||
|
|
||
|
local function AddCurrencyNameToIndex(name)
|
||
|
for index = 1, C_CurrencyInfo_GetCurrencyListSize() do
|
||
|
local info = C_CurrencyInfo_GetCurrencyListInfo(index)
|
||
|
if info.name == name then
|
||
|
CurrencyListNameToIndex[name] = index
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function RegisterNewDT(currencyID)
|
||
|
local info = C_CurrencyInfo_GetCurrencyInfo(currencyID)
|
||
|
if info.discovered then
|
||
|
local name = info.name
|
||
|
|
||
|
--Add to internal storage, stored with name as key
|
||
|
CustomCurrencies[name] = {NAME = name, ID = currencyID, ICON = format('|T%s:16:16:0:0:64:64:4:60:4:60|t', info.iconFileID), DISPLAY_STYLE = 'ICON', USE_TOOLTIP = true, SHOW_MAX = false, DISPLAY_IN_MAIN_TOOLTIP = true}
|
||
|
--Register datatext
|
||
|
DT:RegisterDatatext(name, _G.CURRENCY, {'CHAT_MSG_CURRENCY', 'CURRENCY_DISPLAY_UPDATE'}, OnEvent, nil, nil, OnEnter, nil, name)
|
||
|
--Save info to persistent storage, stored with ID as key
|
||
|
E.global.datatexts.customCurrencies[currencyID] = CustomCurrencies[name]
|
||
|
--Get the currency index for this currency, so we can use it for a tooltip
|
||
|
AddCurrencyNameToIndex(name)
|
||
|
|
||
|
--Set the HyperDT
|
||
|
local menuIndex = DT:GetMenuListCategory(_G.CURRENCY)
|
||
|
local hyperList = DT.HyperList[menuIndex]
|
||
|
if hyperList then
|
||
|
local menuList = hyperList.menuList
|
||
|
|
||
|
tinsert(menuList, {
|
||
|
text = name,
|
||
|
checked = function() return DT.EasyMenu.MenuGetItem(DT.SelectedDatatext, name) end,
|
||
|
func = function() DT.EasyMenu.MenuSetItem(DT.SelectedDatatext, name) end
|
||
|
})
|
||
|
|
||
|
DT:SortMenuList(menuList)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function DT:UpdateCustomCurrencySettings(currencyName, option, value)
|
||
|
if not currencyName or not option then return end
|
||
|
|
||
|
if option == 'DISPLAY_STYLE' then
|
||
|
CustomCurrencies[currencyName].DISPLAY_STYLE = value
|
||
|
elseif option == 'USE_TOOLTIP' then
|
||
|
CustomCurrencies[currencyName].USE_TOOLTIP = value
|
||
|
elseif option == 'SHOW_MAX' then
|
||
|
CustomCurrencies[currencyName].SHOW_MAX = value
|
||
|
elseif option == 'DISPLAY_IN_MAIN_TOOLTIP' then
|
||
|
CustomCurrencies[currencyName].DISPLAY_IN_MAIN_TOOLTIP = value
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function DT:RegisterCustomCurrencyDT(currencyID)
|
||
|
if currencyID then
|
||
|
--We added a new datatext through the config
|
||
|
if not next(CustomCurrencies) then -- add Currency category if one didn't already exist
|
||
|
tinsert(DT.HyperList, { text = _G.CURRENCY, notCheckable = true, hasArrow = true, menuList = {} } )
|
||
|
DT:SortMenuList(DT.HyperList)
|
||
|
end
|
||
|
|
||
|
RegisterNewDT(currencyID)
|
||
|
else
|
||
|
--We called this in DT:Initialize, so load all the stored currency datatexts
|
||
|
for _, info in pairs(E.global.datatexts.customCurrencies) do
|
||
|
CustomCurrencies[info.NAME] = {NAME = info.NAME, ID = info.ID, ICON = info.ICON, DISPLAY_STYLE = info.DISPLAY_STYLE, USE_TOOLTIP = info.USE_TOOLTIP, SHOW_MAX = info.SHOW_MAX}
|
||
|
DT:RegisterDatatext(info.NAME, _G.CURRENCY, {'CHAT_MSG_CURRENCY', 'CURRENCY_DISPLAY_UPDATE'}, OnEvent, nil, nil, OnEnter, nil, info.NAME)
|
||
|
--Get the currency index for this currency, so we can use it for a tooltip
|
||
|
AddCurrencyNameToIndex(info.NAME)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function DT:RemoveCustomCurrency(currencyName)
|
||
|
--Remove from internal storage
|
||
|
CustomCurrencies[currencyName] = nil
|
||
|
|
||
|
if not next(CustomCurrencies) then
|
||
|
for i, menu in ipairs(DT.HyperList) do
|
||
|
if menu.text == _G.CURRENCY then
|
||
|
tremove(DT.HyperList, i)
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
else
|
||
|
local menuIndex = DT:GetMenuListCategory(_G.CURRENCY)
|
||
|
local hyperList = DT.HyperList[menuIndex]
|
||
|
if hyperList then
|
||
|
local menuList = hyperList.menuList
|
||
|
|
||
|
for i, info in ipairs(menuList) do
|
||
|
if info.text == currencyName then
|
||
|
tremove(menuList, i)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
DT:SortMenuList(DT.HyperList)
|
||
|
end
|