local SLE , T , E , L , V , P , G = unpack ( ElvUI_SLE )
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 )