You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
4.6 KiB

local SLE, T, E, L, V, P, G = unpack(select(2, ...))
local DTP = SLE.Datatexts
local DT = E.DataTexts
--GLOBALS: ElvDB, hooksecurefunc
local format = format
--Table to remember where default Gold DT is
DTP.GoldCache = {}
--* Table of datatext panels format for S&L Guild & Friends dt
DTP.PanelStyles = {
DEFAULT = '%s: %s%s|r',
DEFAULTTOTALS = '%s: %s%s/%s|r',
ICON = '%s: %s%s|r',
ICONTOTALS = '%s: %s%s/%s|r',
NOTEXT = '%s%s|r',
NOTEXTTOTALS = '%s%s/%s|r',
}
--The hook to core DT:LoadDataTexts function
local OnLoadThrottle = true
function DTP:LoadDTHook(...)
--Is S&L's currency dt set anywhere
local IsCurrencyDTSelected = false
--Wipe the table. We assume after last settings change there is no default gold DTs
wipe(DTP.GoldCache)
--Going through all registered datapanels
for panelName, panel in pairs(DT.RegisteredPanels) do
for i=1, panel.numPoints do
--Searching for gold
for panelName, panelSettings in pairs(DT.db.panels) do
if panelSettings and type(panelSettings) == 'table' then --if options for panel exist and it is 2+ slot panel (2 cause DTBars exists)
if panelName == panelName and DT.db.panels[panelName][i] and DT.db.panels[panelName][i] == 'Gold' then
--if it is current panel and options for it exist and it is gold dt, put the location in da cache
DTP.GoldCache[panelName] = panel.dataPanels[i]
elseif panelName == panelName and DT.db.panels[panelName][i] and DT.db.panels[panelName][i] == 'S&L Currency' then
--if it is current panel and options for it exist and it is s&l currency dt, set the flag to true
IsCurrencyDTSelected = true
end
elseif panelSettings and type(panelSettings) == 'string' and panelSettings == 'Gold' then --if options for panel exist and it is 1 slot panel with gold dt
if DT.db.panels[panelName] == 'Gold' and panelName == panelName then
DTP.GoldCache[panelName] = panel.dataPanels[i]
end
elseif panelSettings and type(panelSettings) == 'string' and panelSettings == 'S&L Currency' then --if options for panel exist and it is 1 slot panel with s&l currency
if DT.db.panels[panelName] == 'Gold' and panelName == panelName then
IsCurrencyDTSelected = true
end
end
end
end
--This should help with icons not following data panels
-- if DTP.Names[panelName] then E:Delay(0.1, function() Bar_OnLeave(panel, true) end) end
end
--Throttle for the amount of times this message is called. This func is called for every single change in DT options, so having it flood the chat is bad
if OnLoadThrottle then
OnLoadThrottle = false
if IsCurrencyDTSelected then
for panelName, datatext in pairs(DTP.GoldCache) do
--Message about this particular panel having gold dt
local message = format(L["SLE_DT_CURRENCY_WARNING_GOLD"], '|cff1784d1'..L[panelName]..'|r')
SLE:Print(message, 'warning')
--Unregister all events for this gold dt to prevent weird shit on currency
if datatext then datatext:UnregisterAllEvents() end
end
end
--1 second reset time should be enough to suppress all excessive automatic calls
E:Delay(1, function() OnLoadThrottle = true end)
end
end
--This deletes gold data for selected character. Called from config.
function DTP:DeleteCurrencyEntry(data)
if ElvDB['gold'][data.realm] and ElvDB['gold'][data.realm][data.name] then
ElvDB['gold'][data.realm][data.name] = nil
end
if ElvDB['class'] and ElvDB['class'][data.realm] then
if ElvDB['class'][data.realm][data.name] then
ElvDB['class'][data.realm][data.name] = nil
end
end
if ElvDB['faction'] and ElvDB['faction'][data.realm] then
if ElvDB['faction'][data.realm]['Alliance'][data.name] then
ElvDB['faction'][data.realm]['Alliance'][data.name] = nil
end
if ElvDB['faction'][data.realm]['Horde'][data.name] then
ElvDB['faction'][data.realm]['Horde'][data.name] = nil
end
end
E.Libs['AceConfigDialog']:ConfigTableChanged(nil, 'ElvUI')
end
function DTP:PLAYER_ENTERING_WORLD(event, message)
if event == 'PLAYER_ENTERING_WORLD' then
if message or not ElvDB.SLEMinimize then
ElvDB.SLEMinimize = {} -- * Temp table friends and guild dt can use to track temp visibility states
end
end
end
function DTP:Initialize()
if not SLE.initialized then return end
DTP:RegisterEvent('PLAYER_ENTERING_WORLD')
--Hooking to default DTs for additional features
DTP:HookTimeDT()
--Finishing setup for delete character gold data popup
local popup = E.PopupDialogs['SLE_CONFIRM_DELETE_CURRENCY_CHARACTER']
popup.OnAccept = DTP.DeleteCurrencyEntry
--Hooking to default functions to remove gold conflicts
hooksecurefunc(DT, 'LoadDataTexts', DTP.LoadDTHook)
end
SLE:RegisterModule(DTP:GetName())