Files
coa-weakauras/WeakAurasOptions/RegionOptions/Icon.lua
T
Bunny67 e9957582cb beta
2020-09-16 23:03:25 +03:00

422 lines
10 KiB
Lua

if not WeakAuras.IsCorrectVersion() then return end
local AddonName, OptionsPrivate = ...
local Masque = LibStub("Masque", true)
local L = WeakAuras.L
local function createOptions(id, data)
local hiddenIconExtra = function()
return WeakAuras.IsCollapsed("icon", "icon", "iconextra", true);
end
local indentWidth = 0.15
local options = {
__title = L["Icon Settings"],
__order = 1,
color = {
type = "color",
width = WeakAuras.normalWidth,
name = L["Color"],
hasAlpha = true,
order = 1
},
auto = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Automatic Icon"],
order = 2,
disabled = function() return not WeakAuras.CanHaveAuto(data); end,
get = function() return WeakAuras.CanHaveAuto(data) and data.auto; end
},
displayIcon = {
type = "input",
width = WeakAuras.normalWidth,
name = L["Display Icon"],
hidden = function() return WeakAuras.CanHaveAuto(data) and data.auto; end,
order = 3,
get = function()
return data.displayIcon and tostring(data.displayIcon) or "";
end,
set = function(info, v)
data.displayIcon = v;
WeakAuras.Add(data);
WeakAuras.UpdateThumbnail(data);
end
},
chooseIcon = {
type = "execute",
width = WeakAuras.normalWidth,
name = L["Choose"],
hidden = function() return WeakAuras.CanHaveAuto(data) and data.auto; end,
order = 4,
func = function() WeakAuras.OpenIconPicker(data, "displayIcon"); end
},
desaturate = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Desaturate"],
order = 5,
},
useTooltip = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Tooltip on Mouseover"],
hidden = function() return not WeakAuras.CanHaveTooltip(data) end,
order = 6
},
iconExtraDescription = {
type = "execute",
control = "WeakAurasExpandSmall",
name = function()
local line = L["|cFFffcc00Extra Options:|r"]
local changed = false
if data.alpha ~= 1 then
line = L["%s Alpha: %d%%"]:format(line, data.alpha*100)
changed = true
end
if data.zoom ~= 0 then
line = L["%s Zoom: %d%%"]:format(line, data.zoom*100)
changed = true
end
if data.iconInset and data.iconInset ~= 0 then
line = L["%s Inset: %d%%"]:format(line, data.iconInset*100)
changed = true
end
if data.keepAspectRatio then
line = L["%s Keep Aspect Ratio"]:format(line)
changed = true
end
if not changed then
line = L["%s Default Alpha, Zoom, Icon Inset, Aspect Ratio"]:format(line)
end
return line
end,
width = WeakAuras.doubleWidth,
order = 7,
image = function()
local collapsed = WeakAuras.IsCollapsed("icon", "icon", "iconextra", true);
return collapsed and "collapsed" or "expanded"
end,
imageWidth = 15,
imageHeight = 15,
func = function(info, button)
local collapsed = WeakAuras.IsCollapsed("icon", "icon", "iconextra", true);
WeakAuras.SetCollapsed("icon", "icon", "iconextra", not collapsed);
end,
arg = {
expanderName = "icon"
}
},
iconExtra_space1 = {
type = "description",
name = "",
width = indentWidth,
order = 7.02,
hidden = hiddenIconExtra,
},
alpha = {
type = "range",
width = WeakAuras.normalWidth - indentWidth,
name = L["Alpha"],
order = 7.03,
min = 0,
max = 1,
bigStep = 0.01,
isPercent = true,
hidden = hiddenIconExtra,
},
zoom = {
type = "range",
width = WeakAuras.normalWidth,
name = L["Zoom"],
order = 7.04,
min = 0,
max = 1,
bigStep = 0.01,
isPercent = true,
hidden = hiddenIconExtra,
},
iconExtra_space2 = {
type = "description",
name = "",
width = indentWidth,
order = 7.05,
hidden = hiddenIconExtra,
},
iconInset = {
type = "range",
width = WeakAuras.normalWidth - indentWidth,
name = L["Icon Inset"],
order = 7.06,
min = 0,
max = 1,
bigStep = 0.01,
isPercent = true,
hidden = function()
return not Masque or hiddenIconExtra();
end
},
keepAspectRatio = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Keep Aspect Ratio"],
order = 7.07,
hidden = hiddenIconExtra,
},
iconExtraAnchor = {
type = "description",
name = "",
order = 8,
hidden = hiddenIconExtra,
control = "WeakAurasExpandAnchor",
arg = {
expanderName = "icon"
}
},
cooldownHeader = {
type = "header",
order = 11,
name = L["Cooldown Settings"],
},
cooldown = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Show Cooldown"],
order = 11.1,
disabled = function() return not WeakAuras.CanHaveDuration(data); end,
get = function() return WeakAuras.CanHaveDuration(data) and data.cooldown; end
},
inverse = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Inverse"],
order = 11.2,
disabled = function() return not (WeakAuras.CanHaveDuration(data) and data.cooldown); end,
get = function() return data.inverse and WeakAuras.CanHaveDuration(data) and data.cooldown; end,
hidden = function() return not data.cooldown end
},
cooldownEdge = {
type = "toggle",
width = WeakAuras.normalWidth,
name = L["Cooldown Edge"],
order = 11.3,
disabled = function() return not WeakAuras.CanHaveDuration(data) end,
hidden = function() return not data.cooldown end,
},
endHeader = {
type = "header",
order = 100,
name = "",
},
};
return {
icon = options,
position = WeakAuras.commonOptions.PositionOptions(id, data),
};
end
local function createThumbnail()
local frame = CreateFrame("FRAME", nil, UIParent)
local icon = frame:CreateTexture();
icon:SetTexture("Interface\\Icons\\INV_Misc_QuestionMark");
icon:SetAllPoints(frame)
frame.icon = icon
return frame;
end
local function modifyThumbnail(parent, frame, data)
local texWidth = 0.25 * data.zoom;
frame.icon:SetTexCoord(texWidth, 1 - texWidth, texWidth, 1 - texWidth);
frame:SetParent(parent)
function frame:SetIcon(path)
local iconPath = data.auto and path or data.displayIcon or "Interface\\Icons\\INV_Misc_QuestionMark"
self.icon:SetTexture(iconPath)
end
if data then
local name, icon = WeakAuras.GetNameAndIcon(data);
frame:SetIcon(icon)
end
end
local templates = {
{
title = L["Default"],
icon = "Interface\\ICONS\\Temp.blp",
data = {
cooldown = true,
inverse = true,
};
},
{
title = L["Tiny Icon"],
description = L["A 20x20 pixels icon"],
icon = "Interface\\ICONS\\Temp.blp",
data = {
width = 20,
height = 20,
cooldown = true,
inverse = true,
};
},
{
title = L["Small Icon"],
description = L["A 32x32 pixels icon"],
icon = "Interface\\ICONS\\Temp.blp",
data = {
width = 32,
height = 32,
cooldown = true,
inverse = true,
};
},
{
title = L["Medium Icon"],
description = L["A 40x40 pixels icon"],
icon = "Interface\\ICONS\\Temp.blp",
data = {
width = 40,
height = 40,
cooldown = true,
inverse = true,
};
},
{
title = L["Big Icon"],
description = L["A 48x48 pixels icon"],
icon = "Interface\\ICONS\\Temp.blp",
data = {
width = 48,
height = 48,
cooldown = true,
inverse = true,
};
},
{
title = L["Huge Icon"],
description = L["A 64x64 pixels icon"],
icon = "Interface\\ICONS\\Temp.blp",
data = {
width = 64,
height = 64,
cooldown = true,
inverse = true,
};
}
}
local anchorPoints = {
BOTTOMLEFT = {
display = { L["Edge"], L["Bottom Left"] },
type = "point"
},
BOTTOM = {
display = { L["Edge"], L["Bottom"] },
type = "point"
},
BOTTOMRIGHT = {
display = { L["Edge"], L["Bottom Right"] },
type = "point"
},
RIGHT = {
display = { L["Edge"], L["Right"] },
type = "point"
},
TOPRIGHT = {
display = { L["Edge"], L["Top Right"] },
type = "point"
},
TOP = {
display = { L["Edge"], L["Top"] },
type = "point"
},
TOPLEFT = {
display = { L["Edge"], L["Top Left"] },
type = "point"
},
LEFT = {
display = { L["Edge"], L["Left"] },
type = "point"
},
CENTER = {
display = L["Center"],
type = "point"
},
INNER_BOTTOMLEFT = {
display = { L["Inner"], L["Bottom Left"] },
type = "point"
},
INNER_BOTTOM = {
display = { L["Inner"], L["Bottom"] },
type = "point"
},
INNER_BOTTOMRIGHT = {
display = { L["Inner"], L["Bottom Right"] },
type = "point"
},
INNER_RIGHT = {
display = { L["Inner"], L["Right"] },
type = "point"
},
INNER_TOPRIGHT = {
display = { L["Inner"], L["Top Right"] },
type = "point"
},
INNER_TOP = {
display = { L["Inner"], L["Top"] },
type = "point"
},
INNER_TOPLEFT = {
display = { L["Inner"], L["Top Left"] },
type = "point"
},
INNER_LEFT = {
display = { L["Inner"], L["Left"] },
type = "point"
},
OUTER_BOTTOMLEFT = {
display = { L["Outer"], L["Bottom Left"] },
type = "point"
},
OUTER_BOTTOM = {
display = { L["Outer"], L["Bottom"] },
type = "point"
},
OUTER_BOTTOMRIGHT = {
display = { L["Outer"], L["Bottom Right"] },
type = "point"
},
OUTER_RIGHT = {
display = { L["Outer"], L["Right"] },
type = "point"
},
OUTER_TOPRIGHT = {
display = { L["Outer"], L["Top Right"] },
type = "point"
},
OUTER_TOP = {
display = { L["Outer"], L["Top"] },
type = "point"
},
OUTER_TOPLEFT = {
display = { L["Outer"], L["Top Left"] },
type = "point"
},
OUTER_LEFT = {
display = { L["Outer"], L["Left"] },
type = "point"
},
ALL = {
display = L["Whole Area"],
type = "area"
}
}
local function GetAnchors(data)
return anchorPoints;
end
WeakAuras.RegisterRegionOptions("icon", createOptions, "interface\\icons\\spell_holy_sealofsalvation.blp", L["Icon"], createThumbnail, modifyThumbnail, L["Shows a spell icon with an optional cooldown overlay"], templates, GetAnchors);