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.
352 lines
17 KiB
352 lines
17 KiB
local SLE, _, E, L = unpack(select(2, ...))
|
|
local UF = E.UnitFrames
|
|
|
|
local _G = _G
|
|
local wipe = wipe
|
|
local ACH, C, SharedIconOptions, SharedTextOptions, PvPIconText
|
|
local roleValues = {}
|
|
|
|
local DeathIndicatorImages = {
|
|
SKULL = [[|TInterface\LootFrame\LootPanel-Icon:14|t]],
|
|
SKULL1 = [[|TInterface\AddOns\ElvUI_SLE\media\textures\SKULL:16|t]],
|
|
SKULL2 = [[|TInterface\AddOns\ElvUI_SLE\media\textures\SKULL1:16|t]],
|
|
SKULL3 = [[|TInterface\AddOns\ElvUI_SLE\media\textures\SKULL2:16|t]],
|
|
SKULL4 = [[|TInterface\AddOns\ElvUI_SLE\media\textures\SKULL3:16|t]],
|
|
CUSTOM = L["CUSTOM"],
|
|
}
|
|
local OfflineIndicatorImages = {
|
|
ALERT = [[|TInterface\DialogFrame\UI-Dialog-Icon-AlertNew:14|t]],
|
|
ARTHAS =[[|TInterface\LFGFRAME\UI-LFR-PORTRAIT:14|t]],
|
|
SKULL = [[|TInterface\LootFrame\LootPanel-Icon:14|t]],
|
|
PASS = [[|TInterface\PaperDollInfoFrame\UI-GearManager-LeaveItem-Transparent:14|t]],
|
|
NOTREADY = [[|TInterface\RAIDFRAME\ReadyCheck-NotReady:14|t]],
|
|
CUSTOM = L["CUSTOM"],
|
|
}
|
|
|
|
local function GetOptionsTable_Auras(auraType, updateFunc, groupName)
|
|
local config = ACH:Group(auraType == 'buffs' and L["Buffs"] or L["Debuffs"], nil, 1, nil, function(info) return E.db.sle.unitframe.units[groupName][auraType][info[#info]] end, function(info, value) E.db.sle.unitframe.units[groupName][auraType][info[#info]] = value; updateFunc(E, 'unitframe') end)
|
|
|
|
-- config.guiInline = true
|
|
config.args.enable = ACH:Toggle(L["Enable"], nil, 1)
|
|
config.args.threshold = ACH:Range(L["Low Threshold"], L["Threshold before text turns red and is in decimal form. Set to -1 for it to never turn red"], 2, { min = -1, max = 20, step = 1 }, nil, nil, nil, function(info) return not E.db.sle.unitframe.units[groupName][auraType][info[#info]] end)
|
|
|
|
return config
|
|
end
|
|
|
|
local function GetOptionsTable_DeathIndicator(updateFunc, groupName, numGroup)
|
|
local db = E.db.sle.unitframe.units[groupName].deathIndicator
|
|
local config = ACH:Group(L["Death Indicator"], nil, 50, nil, function(info) return db[info[#info]] end, function(info, value) db[info[#info]] = value; updateFunc(UF, groupName, numGroup) end)
|
|
-- config.guiInline = true
|
|
|
|
config.args = CopyTable(SharedIconOptions)
|
|
config.args.size.args.size.name = function() return db.keepSizeRatio and L["Size"] or L["Width"] end
|
|
config.args.size.args.height.hidden = function() return db.keepSizeRatio end
|
|
|
|
config.args.texturespacer = ACH:Spacer(49, 'full')
|
|
|
|
local Texture = ACH:Select(L["Texture"], nil, 50, DeathIndicatorImages)
|
|
config.args.texture = Texture
|
|
|
|
local Custom = ACH:Input(L["Custom Texture"], nil, 51, nil, 'full', nil, nil, function() return db.texture ~= 'CUSTOM' end)
|
|
config.args.custom = Custom
|
|
|
|
return config
|
|
end
|
|
|
|
local function GetOptionsTable_OfflineIndicator(updateFunc, groupName, numGroup)
|
|
local db = E.db.sle.unitframe.units[groupName].offlineIndicator
|
|
local config = ACH:Group(L["Offline Indicator"], nil, 50, nil, function(info) return db[info[#info]] end, function(info, value) db[info[#info]] = value; updateFunc(UF, groupName, numGroup) end)
|
|
-- config.guiInline = true
|
|
|
|
config.args = CopyTable(SharedIconOptions)
|
|
config.args.size.args.size.name = function() return db.keepSizeRatio and L["Size"] or L["Width"] end
|
|
config.args.size.args.height.hidden = function() return db.keepSizeRatio end
|
|
|
|
config.args.texturespacer = ACH:Spacer(49, 'full')
|
|
|
|
local Texture = ACH:Select(L["Texture"], nil, 50, OfflineIndicatorImages)
|
|
config.args.texture = Texture
|
|
|
|
local Custom = ACH:Input(L["Custom Texture"], nil, 51, nil, 'full', nil, nil, function() return db.texture ~= 'CUSTOM' end)
|
|
config.args.custom = Custom
|
|
|
|
return config
|
|
end
|
|
|
|
local function GetOptionsTable_FontGroup(unit, updateFunc, numGroup)
|
|
local config = ACH:Group(L["Font Group"], nil, 20, nil, function(info) return E.db.sle.unitframe.units[unit].pvpicontext[info[#info-2]][info[#info]] end, function(info, value) E.db.sle.unitframe.units[unit].pvpicontext[info[#info-2]][info[#info]] = value; updateFunc(UF, unit, numGroup) end)
|
|
-- config.guiInline = true
|
|
|
|
config.args.font = ACH:SharedMediaFont(L["Font"], nil, 1)
|
|
config.args.fontOutline = ACH:FontFlags(L["Font Outline"], L["Set the font outline."], 2)
|
|
config.args.fontSize = ACH:Range(L["Font Size"], nil, 3, C.Values.FontSize)
|
|
|
|
return config
|
|
end
|
|
|
|
local function GetOptionsTable_PvPIconText(name, unit, updateFunc, numGroup)
|
|
local config = ACH:Group(name, nil, 50, nil, function(info) return E.db.sle.unitframe.units[unit].pvpicontext[info[#info-1]][info[#info]] end, function(info, value) E.db.sle.unitframe.units[unit].pvpicontext[info[#info-1]][info[#info]] = value; updateFunc(UF, unit, numGroup) end)
|
|
-- config.guiInline = true
|
|
|
|
local Level = ACH:Group(L["Level"], nil, 1, nil, nil)
|
|
config.args.level = Level
|
|
Level.guiInline = true
|
|
Level.args = CopyTable(SharedTextOptions)
|
|
|
|
Level.args.fontGroup = GetOptionsTable_FontGroup(unit, updateFunc, numGroup)
|
|
|
|
local Timer = ACH:Group(L["Timer"], nil, 1, nil, nil)
|
|
config.args.timer = Timer
|
|
Timer.guiInline = true
|
|
Timer.args = CopyTable(SharedTextOptions)
|
|
|
|
Timer.args.fontGroup = GetOptionsTable_FontGroup(unit, updateFunc, numGroup)
|
|
|
|
return config
|
|
end
|
|
|
|
local function GetSharedUnitFrameOptions(name, unit, updateFunc, numGroup)
|
|
local config = ACH:Group(name, nil, 100, nil)
|
|
|
|
config.args.buffs = GetOptionsTable_Auras('buffs', E.UpdateCooldownSettings, unit)
|
|
config.args.debuffs = GetOptionsTable_Auras('debuffs', E.UpdateCooldownSettings, unit)
|
|
config.args.deathIndicator = GetOptionsTable_DeathIndicator(updateFunc, unit, numGroup)
|
|
|
|
return config
|
|
end
|
|
|
|
local function RoleIconValues()
|
|
wipe(roleValues)
|
|
for name, path in pairs(SLE.rolePaths) do
|
|
roleValues[name] = name..' |T'..path['TANK']..':15:15:0:0:64:64:2:56:2:56|t '..'|T'..path['HEALER']..':15:15:0:0:64:64:2:56:2:56|t '..'|T'..path['DAMAGER']..':15:15:0:0:64:64:2:56:2:56|t '
|
|
end
|
|
|
|
return roleValues
|
|
end
|
|
|
|
local function UpdateAuraBars()
|
|
_G.ElvUF_Player:UpdateAllElements('ElvUI_UpdateAllElements')
|
|
_G.ElvUF_Target:UpdateAllElements('ElvUI_UpdateAllElements')
|
|
_G.ElvUF_Focus:UpdateAllElements('ElvUI_UpdateAllElements')
|
|
_G.ElvUF_Pet:UpdateAllElements('ElvUI_UpdateAllElements')
|
|
end
|
|
|
|
local function configTable()
|
|
if not SLE.initialized then return end
|
|
C = unpack(E.Config)
|
|
ACH = E.Libs.ACH
|
|
|
|
SharedIconOptions = {
|
|
enable = ACH:Toggle(L["Enable"], nil, 0),
|
|
spacer = ACH:Spacer(1, 'full'),
|
|
anchorPoint = ACH:Select(L["Anchor Point"], nil, 5, C.Values.AllPoints),
|
|
xOffset = ACH:Range(L["X-Offset"], nil, 6, { min = -300, max = 300, step = 1 }),
|
|
yOffset = ACH:Range(L["Y-Offset"], nil, 6, { min = -300, max = 300, step = 1 }),
|
|
sizespacer = ACH:Spacer(99, 'full'),
|
|
size = ACH:Group(L["Size"], nil, 100),
|
|
}
|
|
SharedIconOptions.size.inline = true
|
|
SharedIconOptions.size.args.keepSizeRatio = ACH:Toggle(L["Keep Size Ratio"], nil, 0)
|
|
SharedIconOptions.size.args.size = ACH:Range('', nil, 4, { softMin = 14, softMax = 64, min = 12, max = 128, step = 1 })
|
|
SharedIconOptions.size.args.height = ACH:Range(L["Height"], nil, 5, { softMin = 14, softMax = 64, min = 12, max = 128, step = 1 })
|
|
|
|
SharedTextOptions = {
|
|
enable = ACH:Toggle(L["Enable"], nil, 0),
|
|
spacer = ACH:Spacer(1, 'full'),
|
|
anchorPoint = ACH:Select(L["Anchor Point"], nil, 5, C.Values.AllPoints),
|
|
xOffset = ACH:Range(L["X-Offset"], nil, 6, { min = -300, max = 300, step = 1 }),
|
|
yOffset = ACH:Range(L["Y-Offset"], nil, 6, { min = -300, max = 300, step = 1 }),
|
|
fontspacer = ACH:Spacer(10, 'full'),
|
|
}
|
|
|
|
local UnitFrames = ACH:Group(L["UnitFrames"], nil, 1, 'tab', nil, nil, function() return not E.private.unitframe.enable end)
|
|
E.Options.args.sle.args.modules.args.unitframes = UnitFrames
|
|
UnitFrames.args.desc = ACH:Description(L["Options for customizing unit frames. Please don't change these setting when ElvUI's testing frames for bosses and arena teams are shown. That will make them invisible until retoggling."], 1)
|
|
-- UnitFrames.args.Reset = ACH:Execute(L["Restore Defaults"], nil, 2, function() SLE:Reset('unitframes') end)
|
|
|
|
local General = ACH:Group(L["General"], nil, 10, 'tab')
|
|
UnitFrames.args.general = General
|
|
|
|
local RoleIcons = ACH:Group(L["Role Icon"], nil, 1, nil, function(info) return E.db.sle.unitframes[info[#info-1]][info[#info]] end, function(info, value) E.db.sle.unitframes[info[#info-1]][info[#info]] = value end)
|
|
General.args.roleIcons = RoleIcons
|
|
RoleIcons.inline = true
|
|
RoleIcons.args.enable = ACH:Toggle(L["Enable"], nil, 1, nil, nil, nil, nil, nil, false)
|
|
-- previous desc need to check if chat role icons works still **it doesnt, test to see about changing that :P **
|
|
-- L["Choose what icon set will unitframes and chat use."]
|
|
RoleIcons.args.icons = ACH:Select(L["LFG Icons"], nil, 2, RoleIconValues)
|
|
|
|
local StatusBarTextures = ACH:Group(L["StatusBar Texture"], nil, 5, nil, function(info) return E.db.sle.unitframe.statusbarTextures[info[#info-1]][info[#info]] end, function(info, value) E.db.sle.unitframe.statusbarTextures[info[#info-1]][info[#info]] = value; UF:Update_StatusBars(); UpdateAuraBars() end)
|
|
General.args.statusTextures = StatusBarTextures
|
|
|
|
StatusBarTextures.args.aurabar = ACH:Group(L["Aura Bars"], nil, 1)
|
|
StatusBarTextures.args.aurabar.guiInline = true
|
|
StatusBarTextures.args.aurabar.args.enable = ACH:Toggle(L["Enable"], nil, 1, nil, nil, nil, nil, nil, false)
|
|
StatusBarTextures.args.aurabar.args.texture = ACH:SharedMediaStatusbar(L["Texture"], nil, 2, nil, nil, nil, function(info) return not E.db.sle.unitframe.statusbarTextures[info[#info-1]].enable end)
|
|
|
|
StatusBarTextures.args.castbar = ACH:Group(L["Castbar"], nil, 1)
|
|
StatusBarTextures.args.castbar.guiInline = true
|
|
StatusBarTextures.args.castbar.args.enable = ACH:Toggle(L["Enable"], nil, 1, nil, nil, nil, nil, nil, false)
|
|
StatusBarTextures.args.castbar.args.texture = ACH:SharedMediaStatusbar(L["Texture"], nil, 2, nil, nil, nil, function(info) return not E.db.sle.unitframe.statusbarTextures[info[#info-1]].enable end)
|
|
|
|
StatusBarTextures.args.classbar = ACH:Group(L["Classbar"], nil, 1)
|
|
StatusBarTextures.args.classbar.guiInline = true
|
|
StatusBarTextures.args.classbar.args.enable = ACH:Toggle(L["Enable"], nil, 1, nil, nil, nil, nil, nil, false)
|
|
StatusBarTextures.args.classbar.args.texture = ACH:SharedMediaStatusbar(L["Texture"], nil, 2, nil, nil, nil, function(info) return not E.db.sle.unitframe.statusbarTextures[info[#info-1]].enable end)
|
|
|
|
StatusBarTextures.args.powerbar = ACH:Group(L["Power"], nil, 1)
|
|
StatusBarTextures.args.powerbar.guiInline = true
|
|
StatusBarTextures.args.powerbar.args.enable = ACH:Toggle(L["Enable"], nil, 1, nil, nil, nil, nil, nil, false)
|
|
StatusBarTextures.args.powerbar.args.texture = ACH:SharedMediaStatusbar(L["Texture"], nil, 2, nil, nil, nil, function(info) return not E.db.sle.unitframe.statusbarTextures[info[#info-1]].enable end)
|
|
|
|
--! Individual Units
|
|
local IndividualUnits = ACH:Group(L["Individual Units"], nil, 15, "tab")
|
|
UnitFrames.args.individualUnits = IndividualUnits
|
|
|
|
--* Player Frame
|
|
local Player = GetSharedUnitFrameOptions(L["Player"], 'player', UF.CreateAndUpdateUF)
|
|
IndividualUnits.args.player = Player
|
|
Player.order = 3
|
|
|
|
PvPIconText = GetOptionsTable_PvPIconText(L["PvP & Prestige Icon"], 'player', UF.CreateAndUpdateUF)
|
|
Player.args.pvpicontext = PvPIconText
|
|
|
|
--* Target Frame
|
|
local Target = GetSharedUnitFrameOptions(L["Target"], 'target', UF.CreateAndUpdateUF)
|
|
IndividualUnits.args.target = Target
|
|
Target.order = 4
|
|
Target.args.offlineIndicator = GetOptionsTable_OfflineIndicator(UF.CreateAndUpdateUF, 'target')
|
|
|
|
PvPIconText = GetOptionsTable_PvPIconText(L["PvP & Prestige Icon"], 'target', UF.CreateAndUpdateUF)
|
|
Target.args.pvpicontext = PvPIconText
|
|
|
|
--* TargetTarget Frame
|
|
local TargetTarget = GetSharedUnitFrameOptions(L["TargetTarget"], 'targettarget', UF.CreateAndUpdateUF)
|
|
IndividualUnits.args.targettarget = TargetTarget
|
|
TargetTarget.order = 5
|
|
TargetTarget.args.offlineIndicator = GetOptionsTable_OfflineIndicator(UF.CreateAndUpdateUF, 'targettarget')
|
|
|
|
--* TargetTargetTarget Frame
|
|
local TargetTargetTarget = GetSharedUnitFrameOptions(L["TargetTargetTarget"], 'targettargettarget', UF.CreateAndUpdateUF)
|
|
IndividualUnits.args.targettargettarget = TargetTargetTarget
|
|
TargetTargetTarget.order = 6
|
|
TargetTargetTarget.args.offlineIndicator = GetOptionsTable_OfflineIndicator(UF.CreateAndUpdateUF, 'targettargettarget')
|
|
|
|
--* Focus Frame
|
|
local Focus = GetSharedUnitFrameOptions(L["Focus"], 'focus', UF.CreateAndUpdateUF)
|
|
IndividualUnits.args.focus = Focus
|
|
Focus.order = 7
|
|
Focus.args.offlineIndicator = GetOptionsTable_OfflineIndicator(UF.CreateAndUpdateUF, 'focus')
|
|
|
|
--* FocusTarget Frame
|
|
local FocusTarget = GetSharedUnitFrameOptions(L["FocusTarget"], 'focustarget', UF.CreateAndUpdateUF)
|
|
IndividualUnits.args.focustarget = FocusTarget
|
|
FocusTarget.order = 8
|
|
FocusTarget.args.offlineIndicator = GetOptionsTable_OfflineIndicator(UF.CreateAndUpdateUF, 'focustarget')
|
|
|
|
--* Pet Frame
|
|
-- local Pet = ACH:Group(L["Pet"], nil, 9, 'tab')
|
|
local Pet = GetSharedUnitFrameOptions(L["Pet"], 'pet', UF.CreateAndUpdateUF)
|
|
IndividualUnits.args.pet = Pet
|
|
Pet.order = 9
|
|
|
|
--! Don't think Pet needs DeathIndicator as I think the frame just despawns when they die
|
|
-- Pet.args.buffs = GetOptionsTable_Auras('buffs', E.UpdateCooldownSettings, 'pet')
|
|
-- Pet.args.debuffs = GetOptionsTable_Auras('debuffs', E.UpdateCooldownSettings, 'pet')
|
|
|
|
--* PetTarget Frame
|
|
local PetTarget = ACH:Group(L["PetTarget"], nil, 10, 'tab')
|
|
IndividualUnits.args.pettarget = PetTarget
|
|
PetTarget.args.buffs = GetOptionsTable_Auras('buffs', E.UpdateCooldownSettings, 'pettarget')
|
|
PetTarget.args.debuffs = GetOptionsTable_Auras('debuffs', E.UpdateCooldownSettings, 'pettarget')
|
|
|
|
--! Group Units
|
|
local GroupUnits = ACH:Group(L["Group Units"], nil, 16, 'tab')
|
|
UnitFrames.args.groupUnits = GroupUnits
|
|
|
|
--* Party Frame
|
|
local Party = GetSharedUnitFrameOptions(L["Party"], 'party', UF.CreateAndUpdateHeaderGroup)
|
|
GroupUnits.args.party = Party
|
|
Party.order = 3
|
|
Party.args.offlineIndicator = GetOptionsTable_OfflineIndicator(UF.CreateAndUpdateHeaderGroup, 'party')
|
|
|
|
--* Raid1 Frame
|
|
local Raid1 = GetSharedUnitFrameOptions(L["Raid 1"], 'raid1', UF.CreateAndUpdateHeaderGroup)
|
|
GroupUnits.args.raid1 = Raid1
|
|
Raid1.order = 4
|
|
Raid1.args.offlineIndicator = GetOptionsTable_OfflineIndicator(UF.CreateAndUpdateHeaderGroup, 'raid1')
|
|
|
|
--* Raid2 Frame
|
|
local Raid2 = GetSharedUnitFrameOptions(L["Raid 2"], 'raid2', UF.CreateAndUpdateHeaderGroup)
|
|
GroupUnits.args.raid = Raid2
|
|
Raid2.order = 4
|
|
Raid2.args.offlineIndicator = GetOptionsTable_OfflineIndicator(UF.CreateAndUpdateHeaderGroup, 'raid2')
|
|
|
|
--* Raid3 Frame
|
|
local Raid3 = GetSharedUnitFrameOptions(L["Raid 3"], 'raid3', UF.CreateAndUpdateHeaderGroup)
|
|
GroupUnits.args.raid3 = Raid3
|
|
Raid3.order = 5
|
|
Raid3.args.offlineIndicator = GetOptionsTable_OfflineIndicator(UF.CreateAndUpdateHeaderGroup, 'raid3')
|
|
|
|
--* Raid Pet Frame
|
|
local RaidPet = ACH:Group(L["Raid Pet"], nil, 6, 'tab')
|
|
GroupUnits.args.raidpet = RaidPet
|
|
RaidPet.args.buffs = GetOptionsTable_Auras('buffs', E.UpdateCooldownSettings, 'raidpet')
|
|
RaidPet.args.debuffs = GetOptionsTable_Auras('debuffs', E.UpdateCooldownSettings, 'raidpet')
|
|
|
|
--* Tank Frame
|
|
local Tank = GetSharedUnitFrameOptions(L["Tank"], 'tank', UF.CreateAndUpdateHeaderGroup)
|
|
GroupUnits.args.tank = Tank
|
|
Tank.order = 7
|
|
Tank.args.offlineIndicator = GetOptionsTable_OfflineIndicator(UF.CreateAndUpdateHeaderGroup, 'tank')
|
|
|
|
--* Assist Frame
|
|
local Assist = GetSharedUnitFrameOptions(L["Assist"], 'assist', UF.CreateAndUpdateHeaderGroup)
|
|
GroupUnits.args.assist = Assist
|
|
Assist.order = 8
|
|
Assist.args.offlineIndicator = GetOptionsTable_OfflineIndicator(UF.CreateAndUpdateHeaderGroup, 'assist')
|
|
|
|
--* Arena Frame
|
|
local Arena = GetSharedUnitFrameOptions(L["Arena"], 'arena', UF.CreateAndUpdateUFGroup, 5)
|
|
GroupUnits.args.arena = Arena
|
|
Arena.order = 9
|
|
Arena.args.offlineIndicator = GetOptionsTable_OfflineIndicator(UF.CreateAndUpdateUFGroup, 'arena', 5)
|
|
|
|
--* Boss Frame
|
|
local Boss = ACH:Group(L["Boss"], nil, 10, 'tab')
|
|
GroupUnits.args.boss = Boss
|
|
Boss.args.buffs = GetOptionsTable_Auras('buffs', E.UpdateCooldownSettings, 'boss')
|
|
Boss.args.debuffs = GetOptionsTable_Auras('debuffs', E.UpdateCooldownSettings, 'boss')
|
|
|
|
-- party = {
|
|
-- order = 1,
|
|
-- type = 'group',
|
|
-- name = L["Party Frames"],
|
|
-- args = {
|
|
-- configureToggle = {
|
|
-- order = -10,
|
|
-- type = 'execute',
|
|
-- name = L["Display Frames"],
|
|
-- func = function()
|
|
-- UF:HeaderConfig(_G.ElvUF_Party, _G.ElvUF_Party.forceShow ~= true or nil)
|
|
-- end,
|
|
-- },
|
|
-- },
|
|
-- },
|
|
-- raid = {
|
|
-- order = 2,
|
|
-- type = 'group',
|
|
-- name = L["Raid Frames"],
|
|
-- args = {
|
|
-- configureToggle = {
|
|
-- order = -10,
|
|
-- type = 'execute',
|
|
-- name = L["Display Frames"],
|
|
-- func = function()
|
|
-- UF:HeaderConfig(_G.ElvUF_Raid, _G.ElvUF_Raid.forceShow ~= true or nil)
|
|
-- end,
|
|
-- },
|
|
-- },
|
|
-- },
|
|
end
|
|
|
|
tinsert(SLE.Configs, configTable)
|
|
|