local mod = _G.StarTip:NewModule("Borders")
mod.name = "Borders"
mod.toggled = true
mod.defaultOff = false
local L = StarTip.L
local WidgetColor = LibStub("LibScriptableWidgetColor-1.0")
local _G = _G
local StarTip = _G.StarTip
local UIParent = _G.UIParent
local environment = {}
local borders = {}
local defaults = {
profile = {
borders = {
[1] = {
name = "Border",
enabled = true,
expression = [[
if not UnitExists(unit) then return self.oldr, self.oldg, self.oldb end
if UnitIsPlayer(unit) then
self.oldr, self.oldg, self.oldb = ClassColor(unit)
return ClassColor(unit)
else
self.oldr, self.oldg, self.oldb = UnitSelectionColor(unit)
return UnitSelectionColor(unit)
end
]],
update = 300
}
}
}
}
local options = {}
local optionsDefaults = {
--[[ add = {
name = L["Add Border"],
desc = L["Add a border"],
type = "input",
set = function(info, v)
local widget = {
name = v,
type = "border",
enabled = true,
expression = "return random(100)",
}
tinsert(mod.db.profile.borders, widget)
StarTip:RebuildOpts()
end,
order = 5
},
defaults = {
name = L["Restore Defaults"],
desc = L["Restore Defaults"],
type = "execute",
func = function()
mod.db.profile.borders = copy(defaultWidgets);
StarTip:RebuildOpts()
end,
order = 6
},
]]
}
local function copy(tbl)
if type(tbl) ~= "table" then return tbl end
local newTbl = {}
for k, v in pairs(tbl) do
newTbl[k] = copy(v)
end
return newTbl
end
local function draw(widget)
_G["StarTipTooltipMain"]:SetBackdropBorderColor(widget.r or 1, widget.g or 1, widget.b or 1, widget.a or 1)
end
function mod:CreateBorders()
for i, border in ipairs(self.db.profile.borders) do
local widget = WidgetColor:New(StarTip.core, border.name, copy(border), StarTip.db.profile.errorLevel, draw)
tinsert(borders, widget)
end
end
function mod:WipeBorders()
for i, border in ipairs(borders) do
border:Del()
end
wipe(borders)
end
function mod:OnInitialize()
self.db = StarTip.db:RegisterNamespace(self:GetName(), defaults)
StarTip:SetOptionsDisabled(options, true)
end
function mod:OnEnable()
StarTip:SetOptionsDisabled(options, false)
self:CreateBorders()
end
function mod:OnDisable()
StarTip:SetOptionsDisabled(options, true)
self:WipeBorders()
end
function mod:GetOptions()
return options
end
function mod:SetUnit()
for k, v in pairs(borders) do
v:Start()
end
end
function mod:OnHide()
for k, v in pairs(borders) do
v:Stop()
end
end
function mod:RebuildOpts()
local defaults = WidgetColor.defaults
self:WipeBorders()
self:CreateBorders()
wipe(options)
for k, v in pairs(optionsDefaults) do
options[k] = v
end
for i, db in ipairs(self.db.profile.borders) do
options[db.name:gsub(" ", "_")] = {
name = db.name,
type="group",
order = i,
args=WidgetColor:GetOptions(db, StarTip.RebuildOpts, StarTip)
}
options[db.name:gsub(" ", "_")].args.delete = {
name = L["Delete"],
desc = L["Delete this widget"],
type = "execute",
func = function()
self.db.profile.borders[i] = nil
StarTip:RebuildOpts()
end,
order = 100
}
end
end