local mod = StarTip:NewModule("RaidIcon", "AceEvent-3.0")
mod.name = "RaidIcon"
mod.toggled = true
local _G = _G
local GameTooltip = _G.GameTooltip
local GetRaidTargetIndex = _G.GetRaidTargetIndex
local SetRaidTargetIconTexture = _G.SetRaidTargetIconTexture
local self = mod
local L = StarTip.L
local defaults = {
profile = {
width = 16,
height = 16,
points = {{"TOP", "StarTipTooltipMain", "TOP", 0, 4}}
}
}
function mod:OnInitialize()
self.db = StarTip.db:RegisterNamespace(self:GetName(), defaults)
local frame = CreateFrame("Frame", nil, StarTip.tooltipMain)
local icon = frame:CreateTexture(nil, "OVERLAY")
icon:SetHeight(self.db.profile.height)
icon:SetWidth(self.db.profile.width)
icon:SetTexture("Interface\\TargetingFrame\\UI-RaidTargetingIcons")
icon:Hide()
self.icon = icon
self:ReAnchor()
end
function mod:OnEnable()
self:RegisterEvent("RAID_TARGET_UPDATE")
end
function mod:OnDisable()
self:UnregisterEvent("RAID_TARGET_UPDATE")
end
function mod:SetUnit()
self:RAID_TARGET_UPDATE()
end
function mod:OnHide()
if self.icon:IsShown() then self.icon:Hide() end
end
function mod:ReAnchor()
self.icon:ClearAllPoints()
for i, v in ipairs(self.db.profile.points) do
self.icon:SetPoint(unpack(v))
end
end
function mod:RAID_TARGET_UPDATE(event)
local index = _G.GetRaidTargetIndex("mouseover")
if(index) then
_G.SetRaidTargetIconTexture(self.icon, index)
self.icon:Show()
else
self.icon:Hide()
end
end
function mod:GetOptions()
local options = {
icon = {
name = L["Raid Icon"],
type = "group",
args = {
add = {
name = L["Add Point"],
desc = L["Add a new point"],
type = "input",
set = function(info, v)
tinsert(db.points, {"TOP", "StarTipTooltipMain", "TOP", 0, 0})
end,
order = 1
}
}
},
width = {
name = L["Icon Width"],
desc = L["How wide to make the raid icon."],
type = "input",
pattern = "%d",
get = function() return tostring(self.db.profile.width or 16) end,
set = function(info, v)
self.db.profile.width = tonumber(v)
self.icon:SetWidth(self.db.profile.width)
end,
order = 1
},
height = {
name = L["Icon Height"],
desc = L["How tall to make the raid icon."],
type = "input",
pattern = "%d",
get = function() return tostring(self.db.profile.height or 16) end,
set = function(info, v)
self.db.profile.height = tonumber(v)
self.icon:SetHeight(self.db.profile.height)
end,
order = 1
}
}
for i, point in ipairs(self.db.profile.points) do
options.icon.args["point" .. i] = {
name = "Point #" .. i,
type = "group",
order = i + 1,
args = {
point = {
name = L["Icon Point"],
desc = L["Which point of the PvP icon is attached at the relative point."],
type = "select",
values = LibWidget.anchors,
get = function() return LibWidget.anchorsDict[point[1] or 1] end,
set = function(info, v)
point[1] = LibWidget.anchors[v]
self:ReAnchor()
end,
order = 1
},
--[[
relativeFrame = {
name = L["Relative Frame"],
type = "input",
get = function() return point[2] end,
set = function(info, v)
points[2] = v
end,
order = 2
},
]]
relativePoint = {
name = L["Relative Point"],
desc = L["Which point of StarTip's tooltip should the PvP icon be attached."],
type = "select",
values = LibWidget.anchors,
get = function() return LibWidget.anchorsDict[point[3] or 1] end,
set = function(info, v)
point[3] = LibWidget.anchors[v]
self:ReAnchor()
end,
order = 3
},
xOfs = {
name = L["X Offset"],
desc = L["X axis offset from attached point."],
type = "input",
pattern = "%d",
get = function() return tostring(point[4] or 0) end,
set = function(info, v)
point[4] = tonumber(v)
self:ReAnchor()
end,
order = 5
},
yOfs = {
name = L["Y Offset"],
desc = L["Y axis offset from attached point."],
type = "input",
pattern = "%d",
get = function() return tostring(point[5] or 0) end,
set = function(info, v)
point[5] = tonumber(v)
self:ReAnchor()
end,
order = 5
},
delete = {
name = L["Delete"],
desc = L["Delete this point"],
type = "execute",
func = function()
tremove(self.db.profile.points, i)
end,
order = 6
}
}
}
end
return options
end