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.

287 lines
10 KiB

local Details = Details
local GameTooltip = GameTooltip
local unpack = unpack
local CreateFrame = CreateFrame
local GetSpellInfo = GetSpellInfo
local auras_tab_create = function(tab, frame)
local DF = DetailsFramework
local scroll_line_amount = 22
local scroll_width = 410
local scrollHeight = 445
local scroll_line_height = 19
local text_size = 10
local debuffScrollStartX = 445
local headerOffsetsBuffs = {
--buff label, uptime, applications, refreshes, wa
6, 190, 290, 336, 380
}
local headerOffsetsDebuffs = {
--debuff label, uptime, applications, refreshes, wa
426, 630, 729, 775, 820
}
local line_onenter = function(self)
GameTooltip:SetOwner(self, "ANCHOR_TOPRIGHT")
Details:GameTooltipSetSpellByID (self.spellID)
GameTooltip:Show()
self:SetBackdropColor(1, 1, 1, .2)
end
local line_onleave = function(self)
GameTooltip:Hide()
self:SetBackdropColor(unpack(self.BackgroundColor))
end
local line_onclick = function(self)
end
--buff scroll
--icon - name - applications - refreshes - uptime
--
--local wa_button = function(self, mouseButton, spellID, auraType)
-- local spellName, _, spellIcon = GetSpellInfo(spellID)
-- Details:OpenAuraPanel (spellID, spellName, spellIcon, nil, auraType == "BUFF" and 4 or 2, 1)
--end
local scroll_createline = function(self, index)
local line = CreateFrame("button", "$parentLine" .. index, self,"BackdropTemplate")
line:SetPoint("topleft", self, "topleft", 1, -((index-1)*(scroll_line_height+1)))
line:SetSize(scroll_width -2, scroll_line_height)
line:SetScript("OnEnter", line_onenter)
line:SetScript("OnLeave", line_onleave)
line:SetScript("OnClick", line_onclick)
line:SetBackdrop({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true})
line:SetBackdropColor(0, 0, 0, 0.2)
local icon = line:CreateTexture("$parentIcon", "overlay")
icon:SetSize(scroll_line_height -2 , scroll_line_height - 2)
local name = line:CreateFontString("$parentName", "overlay", "GameFontNormal")
local uptime = line:CreateFontString("$parentName", "overlay", "GameFontNormal")
local apply = line:CreateFontString("$parentName", "overlay", "GameFontNormal")
local refresh = line:CreateFontString("$parentName", "overlay", "GameFontNormal")
--local waButton = DF:CreateButton(line, wa_button, 18, 18)
--waButton:SetIcon ([[Interface\AddOns\WeakAuras\Media\Textures\icon]])
DF:SetFontSize(name, text_size)
DF:SetFontSize(uptime, text_size)
DF:SetFontSize(apply, text_size)
DF:SetFontSize(refresh, text_size)
icon:SetPoint("left", line, "left", 2, 0)
name:SetPoint("left", icon, "right", 2, 0)
uptime:SetPoint("left", line, "left", 186, 0)
apply:SetPoint("left", line, "left", 276, 0)
refresh:SetPoint("left", line, "left", 322, 0)
--waButton:SetPoint("left", line, "left", 372, 0)
line.Icon = icon
line.Name = name
line.Uptime = uptime
line.Apply = apply
line.Refresh = refresh
--line.WaButton = waButton
name:SetJustifyH("left")
uptime:SetJustifyH("left")
apply:SetJustifyH("center")
refresh:SetJustifyH("center")
apply:SetWidth(26)
refresh:SetWidth(26)
return line
end
local line_bg_color = {{1, 1, 1, .1}, {1, 1, 1, 0}}
local scroll_buff_refresh = function(self, data, offset, total_lines)
local haveWA = false --_G.WeakAuras
for i = 1, total_lines do
local index = i + offset
local aura = data [index]
if (aura) then
local line = self:GetLine (i)
line.spellID = aura.spellID
line.Icon:SetTexture(aura [1])
line.Icon:SetTexCoord(.1, .9, .1, .9)
line.Name:SetText(aura [2])
line.Uptime:SetText(DF:IntegerToTimer(aura [3]) .. " (|cFFBBAAAA" .. math.floor(aura [6]) .. "%|r)")
line.Apply:SetText(aura [4])
line.Refresh:SetText(aura [5])
--if (haveWA) then
-- line.WaButton:SetClickFunction(wa_button, aura.spellID, line.AuraType)
--else
-- line.WaButton:Disable()
--end
if (i%2 == 0) then
line:SetBackdropColor(unpack(line_bg_color [1]))
line.BackgroundColor = line_bg_color [1]
else
line:SetBackdropColor(unpack(line_bg_color [2]))
line.BackgroundColor = line_bg_color [2]
end
end
end
end
local create_titledesc_frame = function(anchorWidget, desc)
local f = CreateFrame("frame", nil, frame)
f:SetSize(40, 20)
f:SetPoint("center", anchorWidget, "center")
f:SetScript("OnEnter", function()
GameTooltip:SetOwner(f, "ANCHOR_TOPRIGHT")
GameTooltip:AddLine(desc)
GameTooltip:Show()
end)
f:SetScript("OnLeave", function()
GameTooltip:Hide()
end)
return f
end
local buffLabel = DF:CreateLabel(frame, "Buff Name")
buffLabel:SetPoint(headerOffsetsBuffs[1], -10)
local uptimeLabel = DF:CreateLabel(frame, "Uptime")
uptimeLabel:SetPoint(headerOffsetsBuffs[2], -10)
local appliedLabel = DF:CreateLabel(frame, "A")
appliedLabel:SetPoint(headerOffsetsBuffs[3], -10)
create_titledesc_frame (appliedLabel.widget, "applications")
local refreshedLabel = DF:CreateLabel(frame, "R")
refreshedLabel:SetPoint(headerOffsetsBuffs[4], -10)
create_titledesc_frame (refreshedLabel.widget, "refreshes")
--local waLabel = DF:CreateLabel(frame, "WA")
--waLabel:SetPoint(headerOffsetsBuffs[5], -10)
--create_titledesc_frame (waLabel.widget, "create weak aura")
local buffScroll = DF:CreateScrollBox (frame, "$parentBuffUptimeScroll", scroll_buff_refresh, {}, scroll_width, scrollHeight, scroll_line_amount, scroll_line_height)
buffScroll:SetPoint("topleft", frame, "topleft", 5, -30)
for i = 1, scroll_line_amount do
local line = buffScroll:CreateLine (scroll_createline)
line.AuraType = "BUFF"
end
DF:ReskinSlider(buffScroll)
tab.BuffScroll = buffScroll
--debuff scroll
--icon - name - applications - refreshes - uptime
--
local debuffLabel = DF:CreateLabel(frame, "Debuff Name")
debuffLabel:SetPoint(headerOffsetsDebuffs[1], -10)
local uptimeLabel2 = DF:CreateLabel(frame, "Uptime")
uptimeLabel2:SetPoint(headerOffsetsDebuffs[2], -10)
local appliedLabel2 = DF:CreateLabel(frame, "A")
appliedLabel2:SetPoint(headerOffsetsDebuffs[3], -10)
create_titledesc_frame (appliedLabel2.widget, "applications")
local refreshedLabel2 = DF:CreateLabel(frame, "R")
refreshedLabel2:SetPoint(headerOffsetsDebuffs[4], -10)
create_titledesc_frame (refreshedLabel2.widget, "refreshes")
--local waLabel2 = DF:CreateLabel(frame, "WA")
--waLabel2:SetPoint(headerOffsetsDebuffs[5], -10)
--create_titledesc_frame (waLabel2.widget, "create weak aura")
local debuffScroll = DF:CreateScrollBox (frame, "$parentDebuffUptimeScroll", scroll_buff_refresh, {}, scroll_width, scrollHeight, scroll_line_amount, scroll_line_height)
debuffScroll:SetPoint("topleft", frame, "topleft", debuffScrollStartX, -30)
for i = 1, scroll_line_amount do
local line = debuffScroll:CreateLine (scroll_createline)
line.AuraType = "DEBUFF"
end
DF:ReskinSlider(debuffScroll)
tab.DebuffScroll = debuffScroll
if (not frame.__background) then
DetailsFramework:ApplyStandardBackdrop(frame)
frame.__background:SetAlpha(0.6)
end
end
local auras_tab_fill = function(tab, player, combat)
local miscActor = combat:GetActor(4, player:name())
local combatTime = combat:GetCombatTime()
do --buffs
local newAuraTable = {}
if (miscActor and miscActor.buff_uptime_spells) then
for spellID, spellObject in pairs(miscActor.buff_uptime_spells._ActorTable) do
local spellName, _, spellIcon = GetSpellInfo(spellID)
if (not spellObject.uptime) then
--print(_GetSpellInfo(spellID))
--dumpt(spellObject)
end
table.insert(newAuraTable, {spellIcon, spellName, spellObject.uptime, spellObject.appliedamt, spellObject.refreshamt, spellObject.uptime/combatTime*100, spellID = spellID})
end
end
table.sort (newAuraTable, Details.Sort3)
tab.BuffScroll:SetData (newAuraTable)
tab.BuffScroll:Refresh()
end
do --debuffs
local newAuraTable = {}
if (miscActor and miscActor.debuff_uptime_spells) then
for spellID, spellObject in pairs(miscActor.debuff_uptime_spells._ActorTable) do
local spellName, _, spellIcon = GetSpellInfo(spellID)
table.insert(newAuraTable, {spellIcon, spellName, spellObject.uptime, spellObject.appliedamt, spellObject.refreshamt, spellObject.uptime/combatTime*100, spellID = spellID})
end
end
table.sort (newAuraTable, Details.Sort3)
tab.DebuffScroll:SetData (newAuraTable)
tab.DebuffScroll:Refresh()
end
end
local iconTableAuras = {
texture = [[Interface\AddOns\Details\images\icons]],
coords = {257/512, 278/512, 0/512, 19/512},
width = 16,
height = 16,
}
function Details:InitializeAurasTab()
--check if the tab is already created
for i = 1, #_detalhes.player_details_tabs do
local tabButton = _detalhes.player_details_tabs[i]
if (tabButton.tabname == "Auras") then
return
end
end
Details:CreatePlayerDetailsTab("Auras", --[1] tab name
"Auras", --[2] localized name
function(tabOBject, playerObject) --[3] condition
return true
end,
auras_tab_fill, --[4] fill function
nil, --[5] onclick
auras_tab_create, --[6] oncreate
iconTableAuras --icon table
)
end