local SLE, _, E, L = unpack(select(2, ...)) local UF = E.UnitFrames local SUF = SLE.UnitFrames local texPath = [[Interface\AddOns\ElvUI_SLE\media\textures\role\]] local texPathE = [[Interface\AddOns\ElvUI\media\textures\]] local CUSTOM = CUSTOM local LEVEL = LEVEL local roleValues = {} local wipe = wipe local function CreateOfflineConfig(group) local config = { order = 5, type = 'group', name = L["Offline Indicator"], get = function(info) return E.db.sle.unitframes.unit[group].offline[info[#info]] end, set = function(info, value) E.db.sle.unitframes.unit[group].offline[info[#info]] = value; UF:CreateAndUpdateHeaderGroup(group) end, args = { enable = { order = 1, type = 'toggle', name = L["Enable"], }, size = { order = 2, type = 'range', name = L["Size"], min = 10, max = 120, step = 1, }, xOffset = { order = 3, type = 'range', name = L["X-Offset"], min = -600, max = 600, step = 1, }, yOffset = { order = 4, type = 'range', name = L["Y-Offset"], min = -600, max = 600, step = 1, }, texture = { order = 5, type = 'select', name = L["Texture"], values = { 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 = CUSTOM, }, }, CustomTexture = { order = 6, type = 'input', name = L["Custom Texture"], width = 'full', disabled = function() return E.db.sle.unitframes.unit[group].offline.texture ~= 'CUSTOM' end, }, }, } return config end local function CreateDeadConfig(group) local config = { order = 6, type = 'group', name = L["Dead Indicator"], get = function(info) return E.db.sle.unitframes.unit[group].dead[info[#info]] end, set = function(info, value) E.db.sle.unitframes.unit[group].dead[info[#info]] = value; UF:CreateAndUpdateHeaderGroup(group) end, args = { enable = { order = 1, type = 'toggle', name = L["Enable"] }, size = { order = 2, type = 'range', name = L["Size"], min = 10, max = 120, step = 1, }, xOffset = { order = 3, type = 'range', name = L["X-Offset"], min = -600, max = 600, step = 1, }, yOffset = { order = 4, type = 'range', name = L["Y-Offset"], min = -600, max = 600, step = 1, }, texture = { order = 5, type = 'select', name = L["Texture"], values = { SKULL = [[|TInterface\LootFrame\LootPanel-Icon:14|t]], SKULL1 = [[|TInterface\AddOns\ElvUI_SLE\media\textures\SKULL:14|t]], SKULL2 = [[|TInterface\AddOns\ElvUI_SLE\media\textures\SKULL1:14|t]], SKULL3 = [[|TInterface\AddOns\ElvUI_SLE\media\textures\SKULL2:14|t]], SKULL4 = [[|TInterface\AddOns\ElvUI_SLE\media\textures\SKULL3:14|t]], CUSTOM = CUSTOM, }, }, CustomTexture = { order = 6, type = 'input', name = L["Custom Texture"], width = 'full', disabled = function() return E.db.sle.unitframes.unit[group].dead.texture ~= 'CUSTOM' end, }, }, } return config end local function CreateAurasConfig(unitID) local config = { order = 6, type = 'group', name = L["Auras"], args = { buffs = { order = 1, type = 'group', name = L["Buffs"], guiInline = true, get = function(info) return E.db.sle.unitframes.unit[unitID].auras.buffs[info[#info]] end, set = function(info, value) E.db.sle.unitframes.unit[unitID].auras.buffs[info[#info]] = value end, args = { threshold = { order = 1, type = 'range', name = L["Low Threshold"], desc = L["Threshold before text turns red and is in decimal form. Set to -1 for it to never turn red"], min = -1, max = 20, step = 1, }, }, }, debuffs = { order = 2, type = 'group', name = L["Debuffs"], guiInline = true, get = function(info) return E.db.sle.unitframes.unit[unitID].auras.debuffs[info[#info]] end, set = function(info, value) E.db.sle.unitframes.unit[unitID].auras.debuffs[info[#info]] = value end, args = { threshold = { order = 1, type = 'range', name = L["Low Threshold"], desc = L["Threshold before text turns red and is in decimal form. Set to -1 for it to never turn red"], min = -1, max = 20, step = 1, }, }, }, }, } return config end local function configTable() if not SLE.initialized then return end local ACH = E.Libs.ACH E.Options.args.sle.args.modules.args.unitframes = { order = 1, type = 'group', name = L["UnitFrames"], childGroups = 'tab', disabled = function() return not E.private.unitframe.enable end, 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), Reset = { order = 2, type = 'execute', name = L["Restore Defaults"], desc = L["Reset these options to defaults"], func = function() SLE:Reset('unitframes') end, }, roleicons = { order = 3, type = 'select', name = L["LFG Icons"], desc = L["Choose what icon set will unitframes and chat use."], get = function(info) return E.db.sle.unitframes[info[#info]] end, set = function(info, value) E.db.sle.unitframes[info[#info]] = value; E.Chat:CheckLFGRoles(); UF:UpdateAllHeaders() end, values = function() 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, -- values = { -- ['ElvUI'] = 'ElvUI '..'|T'..texPathE..'tank:15:15:0:0:64:64:2:56:2:56|t '..'|T'..texPathE..'healer:15:15:0:0:64:64:2:56:2:56|t '..'|T'..texPathE..'dps:15:15:0:0:64:64:2:56:2:56|t ', -- ['SupervillainUI'] = 'Supervillain UI '..'|T'..texPath..'svui-tank:15:15:0:0:64:64:2:56:2:56|t '..'|T'..texPath..'svui-healer:15:15:0:0:64:64:2:56:2:56|t '..'|T'..texPath..'svui-dps:15:15:0:0:64:64:2:56:2:56|t ', -- ['Blizzard'] = 'Blizzard '..'|T'..texPath..'blizz-tank:15:15:0:0:64:64:2:56:2:56|t '..'|T'..texPath..'blizz-healer:15:15:0:0:64:64:2:56:2:56|t '..'|T'..texPath..'blizz-dps:15:15:0:0:64:64:2:56:2:56|t ', -- ['MiirGui'] = 'MiirGui '..'|T'..texPath..'mg-tank:15:15:0:0:64:64:2:56:2:56|t '..'|T'..texPath..'mg-healer:15:15:0:0:64:64:2:56:2:56|t '..'|T'..texPath..'mg-dps:15:15:0:0:64:64:2:56:2:56|t ', -- ['Lyn'] = 'Lyn '..'|T'..texPath..'lyn-tank:15:15:0:0:64:64:2:56:2:56|t '..'|T'..texPath..'lyn-healer:15:15:0:0:64:64:2:56:2:56|t '..'|T'..texPath..'lyn-dps:15:15:0:0:64:64:2:56:2:56|t ', -- ['Philmod'] = 'Philmod '..'|T'..texPath..'philmod-tank:15:15:0:0:64:64:2:56:2:56|t '..'|T'..texPath..'philmod-healer:15:15:0:0:64:64:2:56:2:56|t '..'|T'..texPath..'philmod-dps:15:15:0:0:64:64:2:56:2:56|t ', -- }, }, player = { order = 10, type = 'group', name = L["Player Frame"], args = { pvpIconText = { order = 5, type = 'group', name = L["PvP & Prestige Icon"], get = function(info) return E.db.sle.unitframes.unit.player.pvpIconText[info[#info]] end, set = function(info, value) E.db.sle.unitframes.unit.player.pvpIconText[info[#info]] = value; UF:Configure_PVPIcon(_G.ElvUF_Player) end, args = { enable = { order = 1, type = 'toggle', name = L["Enable"], }, xoffset = { order = 2, type = 'range', name = L["X-Offset"], min = -300, max = 300, step = 1, }, yoffset = { order = 3, type = 'range', name = L["Y-Offset"], min = -150, max = 150, step = 1, }, level = { order = 4, type = 'toggle', name = LEVEL, }, }, }, auras = CreateAurasConfig('player'), }, }, pet = { order = 11, type = 'group', name = L["Pet Frame"], args = { auras = CreateAurasConfig('pet'), }, }, pettarget = { order = 12, type = 'group', name = L["PetTarget Frame"], args = { auras = CreateAurasConfig('pettarget'), }, }, target = { order = 13, type = 'group', name = L["Target Frame"], args = { pvpIconText = { order = 5, type = 'group', name = L["PvP & Prestige Icon"], get = function(info) return E.db.sle.unitframes.unit.target.pvpIconText[info[#info]] end, set = function(info, value) E.db.sle.unitframes.unit.target.pvpIconText[info[#info]] = value; UF:Configure_PVPIcon(_G.ElvUF_Target) end, args = { level = { order = 4, type = 'toggle', name = LEVEL, }, }, }, auras = CreateAurasConfig('target'), }, }, targettarget = { order = 14, type = 'group', name = L["TargetTarget Frame"], args = { auras = CreateAurasConfig('targettarget'), }, }, targettargettarget = { order = 15, type = 'group', name = L["TargetTargetTarget Frame"], args = { auras = CreateAurasConfig('targettargettarget'), }, }, focus = { order = 16, type = 'group', name = L["Focus Frame"], args = { auras = CreateAurasConfig('focus'), }, }, focustarget = { order = 17, type = 'group', name = L["FocusTarget Frame"], args = { auras = CreateAurasConfig('focustarget'), }, }, party = { order = 20, 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, }, offline = CreateOfflineConfig('party'), dead = CreateDeadConfig('party'), auras = CreateAurasConfig('party'), }, }, raid = { order = 21, 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, }, offline = CreateOfflineConfig('raid'), dead = CreateDeadConfig('raid'), auras = CreateAurasConfig('raid'), }, }, raid40 = { order = 22, type = 'group', name = L["Raid-40 Frames"], args = { configureToggle = { order = -10, type = 'execute', name = L["Display Frames"], func = function() UF:HeaderConfig(_G.ElvUF_Raid40, _G.ElvUF_Raid40.forceShow ~= true or nil) end, }, offline = CreateOfflineConfig('raid40'), dead = CreateDeadConfig('raid40'), auras = CreateAurasConfig('raid40'), }, }, boss = { order = 23, type = 'group', name = L["Boss Frames"], args = { auras = CreateAurasConfig('boss'), }, }, arena = { order = 24, type = 'group', name = L["Arena Frames"], args = { auras = CreateAurasConfig("arena"), }, }, statusbars = { order = 50, type = 'group', name = L["Statusbars"], get = function(info) return E.db.sle.unitframes.statusTextures[info[#info]] end, set = function(info, value) E.db.sle.unitframes.statusTextures[info[#info]] = value; SUF:BuildStatusTable(); SUF:UpdateStatusBars() end, args = { power = { order = 1, type = 'toggle', name = L["Power"], disabled = function() return SLE._Compatibility['ElvUI_CustomTweaks'] end, get = function(info) return E.private.sle.unitframe.statusbarTextures[info[#info]] end, set = function(info, value) E.private.sle.unitframe.statusbarTextures[info[#info]] = value; E:StaticPopup_Show('PRIVATE_RL') end, }, powerTexture = { order = 2, type = 'select', name = L["Power Texture"], dialogControl = 'LSM30_Statusbar', disabled = function() return not E.private.unitframe.enable or not E.private.sle.unitframe.statusbarTextures.power or SLE._Compatibility['ElvUI_CustomTweaks'] end, values = AceGUIWidgetLSMlists.statusbar, }, spacer1 = ACH:Spacer(3), cast = { order = 4, type = 'toggle', name = L["Castbar"], get = function(info) return E.private.sle.unitframe.statusbarTextures[info[#info]] end, set = function(info, value) E.private.sle.unitframe.statusbarTextures[info[#info]] = value; E:StaticPopup_Show('PRIVATE_RL') end, }, castTexture = { order = 5, type = 'select', name = L["Castbar Texture"], dialogControl = 'LSM30_Statusbar', disabled = function() return not E.private.unitframe.enable or not E.private.sle.unitframe.statusbarTextures.cast end, values = AceGUIWidgetLSMlists.statusbar, }, spacer2 = ACH:Spacer(6), aura = { order = 7, type = 'toggle', name = L["Aura Bars"], get = function(info) return E.private.sle.unitframe.statusbarTextures[info[#info]] end, set = function(info, value) E.private.sle.unitframe.statusbarTextures[info[#info]] = value; E:StaticPopup_Show('PRIVATE_RL') end, }, auraTexture = { order = 8, type = 'select', name = L["Aura Bars Texture"], dialogControl = 'LSM30_Statusbar', disabled = function() return not E.private.unitframe.enable or not E.private.sle.unitframe.statusbarTextures.aura end, values = AceGUIWidgetLSMlists.statusbar, }, spacer3 = ACH:Spacer(9), class = { order = 10, type = 'toggle', name = L["Classbar"], get = function(info) return E.private.sle.unitframe.statusbarTextures[info[#info]] end, set = function(info, value) E.private.sle.unitframe.statusbarTextures[info[#info]] = value; E:StaticPopup_Show('PRIVATE_RL') end, }, classTexture = { order = 11, type = 'select', name = L["Classbar Texture"], dialogControl = 'LSM30_Statusbar', disabled = function() return not E.private.unitframe.enable or not E.private.sle.unitframe.statusbarTextures.class end, set = function(info, value) E.db.sle.unitframes.statusTextures[info[#info]] = value; UF:CreateAndUpdateUF('player') end, values = AceGUIWidgetLSMlists.statusbar, }, }, }, }, } end tinsert(SLE.Configs, configTable)