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.

250 lines
6.6 KiB

if not WeakAuras.IsCorrectVersion() then return end
local AddonName, OptionsPrivate = ...
local L = WeakAuras.L
function OptionsPrivate.GetInformationOptions(data)
local isGroup = data.controlledChildren
local isTmpGroup = type(data.id) == "table"
local options = {
type = "group",
name = L["Information"],
order = 1,
args = {
}
}
local order = 1
local args = options.args
-- NAME
-- One Aura or Group: Allows editing of aura/group name
-- Multi-selection: Don't allow any editing
if not isTmpGroup then
args.name = {
type = "input",
name = L["Name:"],
width = WeakAuras.doubleWidth,
order = order,
get = function()
return data.id
end,
set = function(info, newid)
if data.id ~= newid and not WeakAuras.GetData(newid) then
local oldid = data.id
WeakAuras.Rename(data, newid);
end
end
}
order = order + 1
end
-- URL
-- One Aura: Edit URL of the aura
-- Group/Multi-selection: Edit URLs of both parent and children
local sameURL = true
local commonURL
local desc = ""
local traverseForUrl = isTmpGroup and OptionsPrivate.Private.TraverseAllChildren or OptionsPrivate.Private.TraverseAll
for child in traverseForUrl(data) do
if child.url then
desc = desc .. "|cFFE0E000"..child.id..": |r"..child.url .. "\n"
end
if not commonURL then
commonURL = child.url or ""
elseif child.url ~= commonURL then
sameURL = false
end
end
args.url = {
type = "input",
name = sameURL and L["URL"] or "|cFF4080FF" .. L["URL"],
width = WeakAuras.doubleWidth,
get = function()
return sameURL and commonURL or ""
end,
set = function(info, v)
for child in traverseForUrl(data) do
child.url = v
WeakAuras.Add(child)
OptionsPrivate.ClearOptions(child.id)
end
WeakAuras.ClearAndUpdateOptions(data.id)
end,
desc = sameURL and "" or desc,
order = order
}
order = order + 1
if isGroup then
args.url_note = {
type = "description",
name = isTmpGroup and L["|cFFE0E000Note:|r This sets the URL on all selected auras"]
or L["|cFFE0E000Note:|r This sets the URL on this group and all its members."],
width = WeakAuras.doubleWidth,
order = order
}
order = order + 1
end
-- Description
-- One Aura/Group: Edit description of the aura or group
-- Multi-selection: No editing
if not isTmpGroup then
args.description = {
type = "input",
name = isGroup and L["Group Description"] or L["Description"],
width = WeakAuras.doubleWidth,
multiline = true,
order = order,
get = function()
return data.desc
end,
set = function(info, v)
data.desc = v
WeakAuras.Add(data)
WeakAuras.ClearAndUpdateOptions(data.id)
end
}
order = order + 1
if isGroup then
args.description_note = {
type = "description",
name = string.format(L["|cFFE0E000Note:|r This sets the description only on '%s'"], data.id),
width = WeakAuras.doubleWidth,
order = order,
}
order = order + 1
end
end
-- Show warnings only for single selection for now
if not isGroup then
local icon, title, message = OptionsPrivate.Private.AuraWarnings.FormatWarnings(data.uid)
if title and message then
args.warningTitle = {
type = "header",
name = title,
width = WeakAuras.doubleWidth,
order = order,
}
order = order + 1
args.warnings = {
type = "description",
name = message,
width = WeakAuras.doubleWidth,
order = order,
fontSize = "medium"
}
order = order + 1
end
end
-- compatibility Options
args.compabilityTitle = {
type = "header",
name = L["Compatibility Options"],
width = WeakAuras.doubleWidth,
order = order,
}
order = order + 1
local properties = {
ignoreOptionsEventErrors = {
name = L["Ignore Lua Errors on OPTIONS event"],
},
groupOffset = {
name = L["Offset by 1px"],
onParent = true,
regionType = "group"
}
}
local same = {
ignoreOptionsEventErrors = true,
groupOffset = true
}
local common = {
}
local mergedDesc = {
}
for property, propertyData in pairs(properties) do
if propertyData.onParent then
if not isTmpGroup and (not propertyData.regionType or propertyData.regionType == data.regionType) then
if data.information[property] ~= nil then
common[property] = data.information[property]
else
common[property] = false
end
end
else
for child in OptionsPrivate.Private.TraverseLeafsOrAura(data) do
if not propertyData.regionType or propertyData.regionType == child.regionType then
local effectiveProperty = child.information[property]
if effectiveProperty == nil then
effectiveProperty = false
end
mergedDesc[property] = (mergedDesc[property] or "") .. "|cFFE0E000" .. child.id .. ": |r"
.. (effectiveProperty and "true" or "false") .. "\n"
if common[property] == nil then
common[property] = effectiveProperty
elseif effectiveProperty ~= common[property] then
same[property] = false
end
end
end
end
if common[property] ~= nil then
args["compatibility_" .. property] = {
type = "toggle",
name = same[property] and propertyData.name or "|cFF4080FF" .. propertyData.name,
width = WeakAuras.doubleWidth,
get = function()
if propertyData.onParent then
return data.information[property]
else
return same[property] and common[property] or false
end
end,
set = function(info, v)
if propertyData.onParent then
data.information[property] = v
WeakAuras.Add(data)
OptionsPrivate.ClearOptions(data.id)
else
for child in OptionsPrivate.Private.TraverseLeafsOrAura(data) do
if not propertyData.regionType or propertyData.regionType == child.regionType then
child.information[property] = v
WeakAuras.Add(child)
OptionsPrivate.ClearOptions(child.id)
end
end
end
WeakAuras.ClearAndUpdateOptions(data.id)
end,
desc = same[property] and "" or mergedDesc[property],
order = order
}
order = order + 1
end
end
return options
end