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.7 KiB
117 lines
4.7 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())
|
|
|