local E, L, V, P, G = unpack(ElvUI) local EE = E:GetModule("ElvUI_Enhanced") local function GeneralOptions() local M = E:GetModule("Enhanced_Misc") return { type = "group", name = L["General"], get = function(info) return E.db.enhanced.general[info[#info]] end, args = { header = { order = 1, type = "header", name = EE:ColorizeSettingName(L["General"]) }, pvpAutoRelease = { type = "toggle", name = L["PvP Autorelease"], desc = L["Automatically release body when killed inside a battleground."], set = function(info, value) E.db.enhanced.general[info[#info]] = value M:AutoRelease() end }, autoRepChange = { type = "toggle", name = L["Track Reputation"], desc = L["Automatically change your watched faction on the reputation bar to the faction you got reputation points for."], set = function(info, value) E.db.enhanced.general[info[#info]] = value M:WatchedFaction() end }, selectQuestReward = { type = "toggle", name = L["Select Quest Reward"], desc = L["Automatically select the quest reward with the highest vendor sell value."], get = function(info) return E.private.general[info[#info]] end, set = function(info, value) E.private.general[info[#info]] = value M:ToggleQuestReward() end }, declineduel = { type = "toggle", name = L["Decline Duel"], desc = L["Auto decline all duels"], set = function(info, value) E.db.enhanced.general[info[#info]] = value M:DeclineDuel() end }, hideZoneText = { type = "toggle", name = L["Hide Zone Text"], set = function(info, value) E.db.enhanced.general[info[#info]] = value M:HideZone() end }, alreadyKnown = { type = "toggle", name = L["Already Known"], desc = L["Change color of item icons which already known."], set = function(info, value) E.db.enhanced.general[info[#info]] = value E:GetModule("Enhanced_AlreadyKnown"):ToggleState() end }, altBuyMaxStack = { type = "toggle", name = L["Alt-Click Merchant"], desc = L["Holding Alt key while buying something from vendor will now buy an entire stack."], set = function(info, value) E.db.enhanced.general[info[#info]] = value M:BuyStackToggle() end }, trainAllSkills = { type = "toggle", name = L["Train All Button"], desc = L["Add button to Trainer frame with ability to train all available skills in one click."], set = function(info, value) E.db.enhanced.general.trainAllSkills = value E:GetModule("Enhanced_TrainAll"):ToggleState() end }, showQuestLevel = { type = "toggle", name = L["Show Quest Level"], desc = L["Display quest levels at Quest Log."], set = function(info, value) E.db.enhanced.general.showQuestLevel = value M:QuestLevelToggle() end }, dpsLinks = { type = "toggle", name = L["Filter DPS meters Spam"], desc = L["Replaces reports from damage meters with a clickable hyperlink to reduce chat spam"], get = function(info) return E.db.enhanced.chat.dpsLinks end, set = function(info, value) E.db.enhanced.chat.dpsLinks = value E:GetModule("Enhanced_DPSLinks"):UpdateSettings() end }, moverTransparancy = { order = -2, type = "range", isPercent = true, name = L["Mover Transparency"], desc = L["Changes the transparency of all the movers."], min = 0, max = 1, step = 0.01, set = function(info, value) E.db.enhanced.general[info[#info]] = value M:UpdateMoverTransparancy() end } } } end local function ActionbarOptions() local KPA = E:GetModule("Enhanced_KeyPressAnimation") return { type = "group", name = L["ActionBars"], args = { header = { order = 0, type = "header", name = EE:ColorizeSettingName(L["ActionBars"]) }, keyPressAnimation = { order = 1, type = "group", name = L["Key Press Animation"], guiInline = true, get = function(info) return E.db.enhanced.actionbar.keyPressAnimation[info[#info]] end, set = function(info, value) E.db.enhanced.actionbar.keyPressAnimation[info[#info]] = value KPA:UpdateSetting() end, args = { enable = { order = 1, type = "toggle", name = L["Enable"], get = function(info) return E.private.enhanced.actionbar.keyPressAnimation end, set = function(info, value) E.private.enhanced.actionbar.keyPressAnimation = value E:StaticPopup_Show("PRIVATE_RL") end, }, color = { order = 2, type = "color", name = L["COLOR"], get = function(info) local t = E.db.enhanced.actionbar.keyPressAnimation[info[#info]] local d = P.enhanced.actionbar.keyPressAnimation[info[#info]] return t.r, t.g, t.b, t.a, d.r, d.g, d.b end, set = function(info, r, g, b) local t = E.db.enhanced.actionbar.keyPressAnimation[info[#info]] t.r, t.g, t.b = r, g, b KPA:UpdateSetting() end, disabled = function() return not E.private.enhanced.actionbar.keyPressAnimation end, }, scale = { order = 3, type = "range", min = 1, max = 3, step = 0.1, isPercent = true, name = L["Scale"], disabled = function() return not E.private.enhanced.actionbar.keyPressAnimation end, }, rotation = { order = 4, type = "range", min = 0, max = 360, step = 1, name = L["Rotation"], disabled = function() return not E.private.enhanced.actionbar.keyPressAnimation end, }, } } } } end local function BlizzardOptions() local B = E:GetModule("Enhanced_Blizzard") local WF = E:GetModule("Enhanced_WatchFrame") local TAM = E:GetModule("Enhanced_TakeAllMail") local choices = { ["NONE"] = L["NONE"], ["COLLAPSED"] = L["Collapsed"], ["HIDDEN"] = L["Hidden"] } return { type = "group", childGroups = "tree", name = L["BlizzUI Improvements"], get = function(info) return E.private.enhanced[info[#info]] end, set = function(info, value) E.private.enhanced[info[#info]] = value E:StaticPopup_Show("PRIVATE_RL") end, args = { header = { order = 1, type = "header", name = EE:ColorizeSettingName(L["BlizzUI Improvements"]) }, general = { order = 2, type = "group", name = L["General"], args = { header = { order = 1, type = "header", name = L["General"] }, deathRecap = { order = 2, type = "toggle", name = L["Death Recap Frame"] }, takeAllMail = { order = 3, type = "toggle", name = L["Take All Mail"], get = function(info) return E.db.enhanced.blizzard.takeAllMail end, set = function(info, value) E.db.enhanced.blizzard.takeAllMail = value if value and not TAM.initialized then TAM:Initialize() elseif not value then E:StaticPopup_Show("CONFIG_RL") end end }, animatedAchievementBars = { order = 4, type = "toggle", name = L["Animated Achievement Bars"] } } }, dressingRoom = { order = 4, type = "group", name = L["Dressing Room"], get = function(info) return E.db.enhanced.blizzard.dressUpFrame[info[#info]] end, set = function(info, value) E.db.enhanced.blizzard.dressUpFrame[info[#info]] = value E:GetModule("Enhanced_Blizzard"):UpdateDressUpFrame() end, args = { header = { order = 1, type = "header", name = L["Dressing Room"], }, enable = { order = 2, type = "toggle", name = L["Enable"], set = function(info, value) E.db.enhanced.blizzard.dressUpFrame[info[#info]] = value E:StaticPopup_Show("PRIVATE_RL") end, }, multiplier = { order = 3, type = "range", min = 1, max = 2, step = 0.01, isPercent = true, name = L["Scale"], disabled = function() return not E.db.enhanced.blizzard.dressUpFrame.enable end }, undressButton = { order = 4, type = "toggle", name = L["Undress Button"], desc = L["Add button to Dressing Room frame with ability to undress model."], get = function(info) return E.db.enhanced.general.undressButton end, set = function(info, value) E.db.enhanced.general.undressButton = value E:GetModule("Enhanced_UndressButtons"):ToggleState() end } } }, timerTracker = { order = 5, type = "group", name = L["Timer Tracker"], get = function(info) return E.db.enhanced.timerTracker[info[#info]] end, args = { header = { order = 1, type = "header", name = L["Timer Tracker"] }, enable = { order = 2, type = "toggle", name = L["Enable"], set = function(info, value) E.db.enhanced.timerTracker.enable = value E:GetModule("Enhanced_TimerTracker"):ToggleState() end }, dbm = { order = 3, type = "toggle", name = L["Hook DBM"], set = function(info, value) E.db.enhanced.timerTracker.dbm = value E:GetModule("Enhanced_TimerTracker"):HookDBM() end, disabled = function() return not E.db.enhanced.timerTracker.enable end } } }, watchframe = { order = 6, type = "group", name = L["Watch Frame"], get = function(info) return E.db.enhanced.watchframe[info[#info]] end, set = function(info, value) E.db.enhanced.watchframe[info[#info]] = value WF:UpdateSettings() end, args = { header = { order = 1, type = "header", name = L["Watch Frame"], }, intro = { order = 2, type = "description", name = L["WATCHFRAME_DESC"] }, enable = { order = 3, type = "toggle", name = L["Enable"] }, settings = { order = 4, type = "group", name = L["Visibility State"], guiInline = true, get = function(info) return E.db.enhanced.watchframe[info[#info]] end, set = function(info, value) E.db.enhanced.watchframe[info[#info]] = value WF:ChangeState() end, disabled = function() return not E.db.enhanced.watchframe.enable end, args = { city = { order = 1, type = "select", name = L["City (Resting)"], values = choices }, pvp = { order = 2, type = "select", name = L["PvP"], values = choices }, arena = { order = 3, type = "select", name = L["Arena"], values = choices }, party = { order = 4, type = "select", name = L["Party"], values = choices }, raid = { order = 5, type = "select", name = L["Raid"], values = choices } } } } }, errorFrame = { order = 7, type = "group", name = L["Error Frame"], get = function(info) return E.db.enhanced.blizzard.errorFrame[info[#info]] end, set = function(info, value) E.db.enhanced.blizzard.errorFrame[info[#info]] = value B:ErrorFrameSize() end, args = { header = { order = 1, type = "header", name = L["Error Frame"] }, enable = { order = 2, type = "toggle", name = L["Enable"], set = function(info, value) E.db.enhanced.blizzard.errorFrame[info[#info]] = value B:CustomErrorFrameToggle() end }, width = { order = 3, type = "range", min = 100, max = 1000, step = 1, name = L["Width"], desc = L["Set the width of Error Frame. Too narrow frame may cause messages to be split in several lines"], disabled = function() return not E.db.enhanced.blizzard.errorFrame.enable end }, height = { order = 4, type = "range", min = 30, max = 300, step = 1, name = L["Height"], desc = L["Set the height of Error Frame. Higher frame can show more lines at once."], disabled = function() return not E.db.enhanced.blizzard.errorFrame.enable end }, spacer = { order = 5, type = "description", name = " " }, font = { order = 6, type = "select", dialogControl = "LSM30_Font", name = L["Font"], values = AceGUIWidgetLSMlists.font, disabled = function() return not E.db.enhanced.blizzard.errorFrame.enable end }, fontSize = { order = 7, type = "range", min = 6, max = 36, step = 1, name = L["FONT_SIZE"], disabled = function() return not E.db.enhanced.blizzard.errorFrame.enable end }, fontOutline = { order = 8, type = "select", name = L["Font Outline"], values = { ["NONE"] = L["NONE"], ["OUTLINE"] = "OUTLINE", ["MONOCHROMEOUTLINE"] = "MONOCROMEOUTLINE", ["THICKOUTLINE"] = "THICKOUTLINE" }, disabled = function() return not E.db.enhanced.blizzard.errorFrame.enable end } } } } } end local function EquipmentInfoOptions() local EI = E:GetModule("Enhanced_EquipmentInfo") return { type = "group", name = L["Equipment Info"], args = { header = { order = 1, type = "header", name = EE:ColorizeSettingName(L["Equipment Info"]) }, enable = { order = 2, type = "toggle", width = "full", name = L["Enable"], get = function(info) return E.db.enhanced.equipment[info[#info]] end, set = function(info, value) E.db.enhanced.equipment[info[#info]] = value EI:ToggleState() end, }, itemlevel = { order = 3, type = "group", guiInline = true, name = L["Item Level"], get = function(info) return E.db.enhanced.equipment.itemlevel[info[#info]] end, set = function(info, value) E.db.enhanced.equipment.itemlevel[info[#info]] = value EI:UpdateText() end, disabled = function() return not (E.db.enhanced.equipment.enable and E.db.enhanced.equipment.itemlevel.enable) end, args = { info = { order = 1, type = "description", name = L["ITEMLEVEL_DESC"] }, enable = { order = 2, type = "toggle", name = L["Enable"], desc = L["Enable/Disable the display of item levels on the character screen."], disabled = function() return not E.db.enhanced.equipment.enable end, }, qualityColor = { order = 3, type = "toggle", name = L["Quality Color"] }, spacer = { order = 4, type = "description", name = " " }, position = { order = 5, type = "select", name = L["Position"], values = { ["TOP"] = "TOP", ["TOPLEFT"] = "TOPLEFT", ["TOPRIGHT"] = "TOPRIGHT", ["BOTTOM"] = "BOTTOM", ["BOTTOMLEFT"] = "BOTTOMLEFT", ["BOTTOMRIGHT"] = "BOTTOMRIGHT" }, set = function(info, value) E.db.enhanced.equipment.itemlevel[info[#info]] = value EI:UpdateTextSettings() end }, xOffset = { order = 6, type = "range", min = -50, max = 50, step = 1, name = L["X-Offset"], set = function(info, value) E.db.enhanced.equipment.itemlevel[info[#info]] = value EI:UpdateTextSettings() end }, yOffset = { order = 7, type = "range", min = -50, max = 50, step = 1, name = L["Y-Offset"], set = function(info, value) E.db.enhanced.equipment.itemlevel[info[#info]] = value EI:UpdateTextSettings() end } } }, durability = { order = 4, type = "group", name = DURABILITY, guiInline = true, get = function(info) return E.db.enhanced.equipment.durability[info[#info]] end, set = function(info, value) E.db.enhanced.equipment.durability[info[#info]] = value EI:UpdateText() end, disabled = function() return not (E.db.enhanced.equipment.enable and E.db.enhanced.equipment.durability.enable) end, args = { info = { order = 1, type = "description", name = L["DURABILITY_DESC"] }, enable = { order = 2, type = "toggle", name = L["Enable"], desc = L["Enable/Disable the display of durability information on the character screen."], disabled = function() return not E.db.enhanced.equipment.enable end, }, onlydamaged = { order = 3, type = "toggle", name = L["Damaged Only"], desc = L["Only show durabitlity information for items that are damaged."], }, spacer = { order = 4, type = "description", name = " " }, position = { order = 5, type = "select", name = L["Position"], values = { ["TOP"] = "TOP", ["TOPLEFT"] = "TOPLEFT", ["TOPRIGHT"] = "TOPRIGHT", ["BOTTOM"] = "BOTTOM", ["BOTTOMLEFT"] = "BOTTOMLEFT", ["BOTTOMRIGHT"] = "BOTTOMRIGHT" }, set = function(info, value) E.db.enhanced.equipment.durability[info[#info]] = value EI:UpdateTextSettings() end }, xOffset = { order = 6, type = "range", min = -50, max = 50, step = 1, name = L["X-Offset"], set = function(info, value) E.db.enhanced.equipment.durability[info[#info]] = value EI:UpdateTextSettings() end }, yOffset = { order = 7, type = "range", min = -50, max = 50, step = 1, name = L["Y-Offset"], set = function(info, value) E.db.enhanced.equipment.durability[info[#info]] = value EI:UpdateTextSettings() end } } }, fontGroup = { order = 5, type = "group", guiInline = true, name = L["Font"], get = function(info) return E.db.enhanced.equipment[info[#info]] end, set = function(info, value) E.db.enhanced.equipment[info[#info]] = value EI:UpdateTextSettings() end, disabled = function() return not E.db.enhanced.equipment.enable end, args = { font = { order = 1, type = "select", dialogControl = "LSM30_Font", name = L["Font"], values = AceGUIWidgetLSMlists.font }, fontSize = { order = 2, type = "range", min = 6, max = 36, step = 1, name = L["FONT_SIZE"] }, fontOutline = { order = 3, type = "select", name = L["Font Outline"], values = { ["NONE"] = L["NONE"], ["OUTLINE"] = "OUTLINE", ["MONOCHROMEOUTLINE"] = "MONOCROMEOUTLINE", ["THICKOUTLINE"] = "THICKOUTLINE" } } } } } } end local function MapOptions() local MFC = E:GetModule("Enhanced_FogClear") return { type = "group", name = L["Map"], args = { header = { order = 0, type = "header", name = EE:ColorizeSettingName(L["Map"]) }, fogClear ={ type = "group", name = L["Fog of War"], guiInline = true, args = { enable = { order = 1, type = "toggle", name = L["Enable"], get = function(info) return E.db.enhanced.map.fogClear.enable end, set = function(info, value) E.db.enhanced.map.fogClear.enable = value MFC:UpdateFog() end }, overlay = { order = 2, type = "color", name = L["Overlay Color"], hasAlpha = true, get = function(info) local t = E.db.enhanced.map.fogClear.color local d = E.db.enhanced.map.fogClear.color return t.r, t.g, t.b, t.a, d.r, d.g, d.b, d.a end, set = function(_, r, g, b, a) local color = E.db.enhanced.map.fogClear.color color.r, color.g, color.b, color.a = r, g, b, a MFC:UpdateWorldMapOverlays() end, disabled = function() return not E.db.enhanced.map.fogClear.enable end } } } } } end local function MinimapOptions() E.Options.args.maps.args.minimap.args.locationTextGroup.args.locationText.values = { ["MOUSEOVER"] = L["Minimap Mouseover"], ["SHOW"] = L["Always Display"], ["ABOVE"] = EE:ColorizeSettingName(L["Above Minimap"]), ["HIDE"] = L["HIDE"] } local MBG = E:GetModule("Enhanced_MinimapButtonGrabber") return { type = "group", name = L["Minimap"], get = function(info) return E.db.enhanced.minimap[info[#info]] end, set = function(info, value) E.db.enhanced.minimap[info[#info]] = value E:GetModule("Enhanced_MinimapLocation"):UpdateSettings() end, disabled = function() return not E.private.general.minimap.enable end, args = { header = { order = 0, type = "header", name = EE:ColorizeSettingName(L["Minimap"]) }, location = { order = 1, type = "toggle", name = L["Location Panel"], desc = L["Toggle Location Panel."] }, locationText = E.Options.args.maps.args.minimap.args.locationTextGroup.args.locationText, showlocationdigits = { order = 2, type = "toggle", name = L["Show Location Digits"], desc = L["Toggle Location Digits."], disabled = function() return not (E.db.enhanced.minimap.location and E.db.general.minimap.locationText == "ABOVE") end }, locationdigits = { order = 3, type = "range", name = L["Location Digits"], desc = L["Number of digits for map location."], min = 0, max = 2, step = 1, set = function(info, value) E.db.enhanced.minimap[info[#info]] = value E:GetModule("Minimap"):UpdateSettings() end, disabled = function() return not (E.db.enhanced.minimap.location and E.db.general.minimap.locationText == "ABOVE" and E.db.enhanced.minimap.showlocationdigits) end }, combatHide = { order = 4, type = "group", name = L["Combat Hide"], guiInline = true, args = { hideincombat = { order = 5, type = "toggle", name = L["Enable"], desc = L["Hide minimap while in combat."], }, fadeindelay = { order = 6, type = "range", name = L["FadeIn Delay"], desc = L["The time to wait before fading the minimap back in after combat hide. (0 = Disabled)"], min = 0, max = 20, step = 1, disabled = function() return not E.db.enhanced.minimap.hideincombat end } } }, minimapButtons = { order = 5, type = "group", name = L["Minimap Button Grabber"], guiInline = true, get = function(info) return E.db.enhanced.minimap.buttonGrabber[info[#info]] end, set = function(info, value) E.db.enhanced.minimap.buttonGrabber[info[#info]] = value MBG:UpdateLayout() end, disabled = function() return not E.private.enhanced.minimapButtonGrabber end, args = { enable = { order = 1, type = "toggle", name = L["Enable"], get = function(info) return E.private.enhanced.minimapButtonGrabber end, set = function(info, value) E.private.enhanced.minimapButtonGrabber = value if value and not MBG.initialized then MBG:Initialize() elseif not value then E:StaticPopup_Show("PRIVATE_RL") end end, disabled = false }, spacer = { order = 2, type = "description", name = " ", width = "full" }, growFrom = { order = 3, type = "select", name = L["Grow direction"], values = { ["TOPLEFT"] = "DOWN -> RIGHT", ["TOPRIGHT"] = "DOWN -> LEFT", ["BOTTOMLEFT"] = "UP -> RIGHT", ["BOTTOMRIGHT"] = "UP -> LEFT" } }, buttonsPerRow = { order = 4, type = "range", name = L["Buttons Per Row"], desc = L["The amount of buttons to display per row."], min = 1, max = 12, step = 1 }, buttonSize = { order = 5, type = "range", name = L["Button Size"], min = 2, max = 60, step = 1 }, buttonSpacing = { order = 6, type = "range", name = L["Button Spacing"], desc = L["The spacing between buttons."], min = -1, max = 24, step = 1 }, backdrop = { order = 7, type = "toggle", name = L["Backdrop"] }, backdropSpacing = { order = 8, type = "range", name = L["Backdrop Spacing"], desc = L["The spacing between the backdrop and the buttons."], min = -1, max = 15, step = 1, disabled = function() return not E.private.enhanced.minimapButtonGrabber or not E.db.enhanced.minimap.buttonGrabber.backdrop end, }, mouseover = { order = 9, type = "toggle", name = L["Mouse Over"], desc = L["The frame is not shown unless you mouse over the frame."], set = function(info, value) E.db.enhanced.minimap.buttonGrabber[info[#info]] = value MBG:ToggleMouseover() end }, alpha = { order = 10, type = "range", name = L["Alpha"], min = 0, max = 1, step = 0.01, set = function(info, value) E.db.enhanced.minimap.buttonGrabber[info[#info]] = value MBG:UpdateAlpha() end }, insideMinimapGroup = { order = 11, type = "group", name = L["Inside Minimap"], guiInline = true, get = function(info) return E.db.enhanced.minimap.buttonGrabber.insideMinimap[info[#info]] end, set = function(info, value) E.db.enhanced.minimap.buttonGrabber.insideMinimap[info[#info]] = value MBG:UpdatePosition() end, disabled = function() return not E.db.enhanced.minimap.buttonGrabber.insideMinimap.enable end, args = { enable = { order = 1, type = "toggle", name = L["Enable"], disabled = function() return not E.private.enhanced.minimapButtonGrabber end }, position = { order = 2, type = "select", name = L["Position"], values = { ["TOPLEFT"] = "TOPLEFT", ["LEFT"] = "LEFT", ["BOTTOMLEFT"] = "BOTTOMLEFT", ["RIGHT"] = "RIGHT", ["TOPRIGHT"] = "TOPRIGHT", ["BOTTOMRIGHT"] = "BOTTOMRIGHT", ["CENTER"] = "CENTER", ["TOP"] = "TOP", ["BOTTOM"] = "BOTTOM" } }, xOffset = { order = 3, type = "range", name = L["xOffset"], min = -20, max = 20, step = 1 }, yOffset = { order = 4, type = "range", name = L["yOffset"], min = -20, max = 20, step = 1 } } } } } } } end local function NamePlatesOptions() return { type = "group", name = L["NamePlates"], get = function(info) return E.db.enhanced.nameplates[info[#info]] end, args = { header = { order = 0, type = "header", name = EE:ColorizeSettingName(L["NamePlates"]) }, classCache = { order = 1, type = "toggle", name = L["Cache Unit Class"], set = function(info, value) E.db.enhanced.nameplates[info[#info]] = value E:GetModule("Enhanced_NamePlates"):UpdateAllSettings() end }, chatBubbles = { order = 2, type = "toggle", name = L["Chat Bubbles"], set = function(info, value) E.db.enhanced.nameplates[info[#info]] = value E:GetModule("Enhanced_NamePlates"):UpdateAllSettings() E:GetModule("NamePlates"):ConfigureAll() end }, titleCacheGroup = { order = 3, type = "group", name = L["Cache Unit Guilds / NPC Titles"], guiInline = true, get = function(info) return E.db.enhanced.nameplates[info[#info]] end, args = { titleCache = { order = 1, type = "toggle", name = L["Enable"], set = function(info, value) E.db.enhanced.nameplates[info[#info]] = value E:GetModule("Enhanced_NamePlates"):UpdateAllSettings() E:GetModule("NamePlates"):ConfigureAll() end }, guildGroup = { order = 3, type = "group", name = L["Guild"], guiInline = true, get = function(info) return E.db.enhanced.nameplates.guild[info[#info]] end, set = function(info, value) E.db.enhanced.nameplates.guild[info[#info]] = value E:GetModule("NamePlates"):ConfigureAll() end, disabled = function() return not E.db.enhanced.nameplates.titleCache end, args = { font = { order = 1, type = "select", dialogControl = "LSM30_Font", name = L["Font"], values = AceGUIWidgetLSMlists.font, }, fontSize = { order = 2, type = "range", name = L["FONT_SIZE"], min = 4, max = 33, step = 1, }, fontOutline = { order = 3, type = "select", name = L["Font Outline"], values = { ["NONE"] = L["NONE"], ["OUTLINE"] = "OUTLINE", ["MONOCHROMEOUTLINE"] = "MONOCROMEOUTLINE", ["THICKOUTLINE"] = "THICKOUTLINE" } }, separator = { order = 4, type = "select", name = L["Separator"], values = { [" "] = L["NONE"], ["<"] = "< >", ["("] = "( )", ["["] = "[ ]", ["{"] = "{ }" } }, colorsGroup = { order = 5, type = "group", name = L["COLORS"], guiInline = true, get = function(info) local t = E.db.enhanced.nameplates.guild.colors[info[#info]] local d = P.enhanced.nameplates.guild.colors[info[#info]] return t.r, t.g, t.b, t.a, d.r, d.g, d.b end, set = function(info, r, g, b) local t = E.db.enhanced.nameplates.guild.colors[info[#info]] t.r, t.g, t.b = r, g, b E:GetModule("NamePlates"):ConfigureAll() end, args = { raid = { order = 1, type = "color", name = L["RAID"], }, party = { order = 2, type = "color", name = L["PARTY"], }, guild = { order = 3, type = "color", name = L["GUILD"], }, none = { order = 4, type = "color", name = L["ALL"], }, } }, visabilityGroup = { order = 6, type = "group", name = L["Visibility State"], guiInline = true, get = function(info) return E.db.enhanced.nameplates.guild.visibility[info[#info]] end, set = function(info, value) E.db.enhanced.nameplates.guild.visibility[info[#info]] = value E:GetModule("NamePlates"):ConfigureAll() end, args = { city = { order = 1, type = "toggle", name = L["City (Resting)"] }, pvp = { order = 2, type = "toggle", name = L["PvP"] }, arena = { order = 3, type = "toggle", name = L["Arena"] }, party = { order = 4, type = "toggle", name = L["Party"] }, raid = { order = 5, type = "toggle", name = L["Raid"] } } } } }, npcGroup = { order = 3, type = "group", name = L["NPC"], guiInline = true, get = function(info) return E.db.enhanced.nameplates.npc[info[#info]] end, set = function(info, value) E.db.enhanced.nameplates.npc[info[#info]] = value E:GetModule("NamePlates"):ConfigureAll() end, disabled = function() return not E.db.enhanced.nameplates.titleCache end, args = { font = { order = 1, type = "select", dialogControl = "LSM30_Font", name = L["Font"], values = AceGUIWidgetLSMlists.font }, fontSize = { order = 2, type = "range", name = L["FONT_SIZE"], min = 4, max = 33, step = 1 }, fontOutline = { order = 3, type = "select", name = L["Font Outline"], values = { ["NONE"] = L["NONE"], ["OUTLINE"] = "OUTLINE", ["MONOCHROMEOUTLINE"] = "MONOCROMEOUTLINE", ["THICKOUTLINE"] = "THICKOUTLINE" } }, reactionColor = { order = 4, type = "toggle", name = L["Reaction Color"], desc = L["Color based on reaction type."] }, color = { order = 5, type = "color", name = L["COLOR"], get = function(info) local t = E.db.enhanced.nameplates.npc[info[#info]] local d = P.enhanced.nameplates.npc[info[#info]] return t.r, t.g, t.b, t.a, d.r, d.g, d.b end, set = function(info, r, g, b) local t = E.db.enhanced.nameplates.npc[info[#info]] t.r, t.g, t.b = r, g, b E:GetModule("NamePlates"):ConfigureAll() end, disabled = function() return E.db.enhanced.nameplates.npc.reactionColor end }, separator = { order = 5, type = "select", name = L["Separator"], values = { [" "] = L["NONE"], ["<"] = "< >", ["("] = "( )" } } } } } } } } end local function TooltipOptions() local TI = E:GetModule("Enhanced_TooltipIcon") local PI = E:GetModule("Enhanced_ProgressionInfo") return { type = "group", name = L["Tooltip"], get = function(info) return E.db.enhanced.tooltip[info[#info]] end, args = { header = { order = 0, type = "header", name = EE:ColorizeSettingName(L["Tooltip"]) }, itemQualityBorderColor = { order = 1, type = "toggle", name = L["Item Border Color"], desc = L["Colorize the tooltip border based on item quality."], set = function(info, value) E.db.enhanced.tooltip.itemQualityBorderColor = value E:GetModule("Enhanced_ItemBorderColor"):ToggleState() end }, tooltipIcon = { order = 2, type = "group", name = L["Tooltip Icon"], guiInline = true, get = function(info) return E.db.enhanced.tooltip.tooltipIcon[info[#info]] end, args = { tooltipIcon = { order = 1, type = "toggle", name = L["Enable"], desc = L["Show/Hides an Icon for Spells and Items on the Tooltip."], get = function(info) return E.db.enhanced.tooltip.tooltipIcon.enable end, set = function(info, value) E.db.enhanced.tooltip.tooltipIcon.enable = value TI:ToggleItemsState() TI:ToggleSpellsState() TI:ToggleAchievementsState() end }, spacer = { order = 2, type = "description", name = "", width = "full" }, tooltipIconSpells = { order = 3, type = "toggle", name = SPELLS, desc = L["Show/Hides an Icon for Spells on the Tooltip."], get = function(info) return E.db.enhanced.tooltip.tooltipIcon.tooltipIconSpells end, set = function(info, value) E.db.enhanced.tooltip.tooltipIcon.tooltipIconSpells = value TI:ToggleSpellsState() end, disabled = function() return not E.db.enhanced.tooltip.tooltipIcon.enable end }, tooltipIconItems = { order = 4, type = "toggle", name = ITEMS, desc = L["Show/Hides an Icon for Items on the Tooltip."], get = function(info) return E.db.enhanced.tooltip.tooltipIcon.tooltipIconItems end, set = function(info, value) E.db.enhanced.tooltip.tooltipIcon.tooltipIconItems = value TI:ToggleItemsState() end, disabled = function() return not E.db.enhanced.tooltip.tooltipIcon.enable end }, tooltipIconAchievements = { order = 5, type = "toggle", name = ACHIEVEMENTS, desc = L["Show/Hides an Icon for Achievements on the Tooltip."], get = function(info) return E.db.enhanced.tooltip.tooltipIcon.tooltipIconAchievements end, set = function(info, value) E.db.enhanced.tooltip.tooltipIcon.tooltipIconAchievements = value TI:ToggleAchievementsState() end, disabled = function() return not E.db.enhanced.tooltip.tooltipIcon.enable end } } }, progressInfo = { order = 3, type = "group", name = L["Progress Info"], guiInline = true, get = function(info) return E.db.enhanced.tooltip.progressInfo[info[#info]] end, set = function(info, value) E.db.enhanced.tooltip.progressInfo[info[#info]] = value end, disabled = function() return not E.db.enhanced.tooltip.progressInfo.enable end, args = { enable = { order = 1, type = "toggle", name = L["Enable"], set = function(info, value) E.db.enhanced.tooltip.progressInfo[info[#info]] = value PI:ToggleState() end, disabled = false }, checkAchievements = { order = 2, type = "toggle", name = L["Check Achievements"], desc = L["Check achievement completion instead of boss kill stats.\nSome servers log incorrect boss kill statistics, this is an alternative way to get player progress."] }, checkPlayer = { order = 3, type = "toggle", name = L["Check Player"] }, modifier = { order = 4, type = "select", name = L["Visibility"], set = function(info, value) E.db.enhanced.tooltip.progressInfo[info[#info]] = value PI:UpdateModifier() end, values = { ["ALL"] = ALWAYS, ["SHIFT"] = L["SHIFT_KEY"], ["ALT"] = L["ALT_KEY"], ["CTRL"] = L["CTRL_KEY"] } }, tiers = { order = 5, type = "group", name = L["Tiers"], get = function(info) return E.db.enhanced.tooltip.progressInfo.tiers[info[#info]] end, set = function(info, value) E.db.enhanced.tooltip.progressInfo.tiers[info[#info]] = value PI:UpdateSettings() end, disabled = function() return not E.db.enhanced.tooltip.progressInfo.enable end, args = { RS = { order = 1, type = "toggle", name = L["Ruby Sanctum"] }, ICC = { order = 2, type = "toggle", name = L["Icecrown Citadel"] }, ToC = { order = 3, type = "toggle", name = L["Trial of the Crusader"] }, Ulduar = { order = 4, type = "toggle", name = L["Ulduar"] } } } } } } } end local function LoseControlOptions() return { type = "group", name = L["Lose Control"], get = function(info) return E.db.enhanced.loseControl[info[#info]] end, set = function(info, value) E.db.enhanced.loseControl[info[#info]] = value E:GetModule("Enhanced_LoseControl"):UpdateSettings() end, args = { header = { order = 0, type = "header", name = EE:ColorizeSettingName(L["Lose Control"]) }, enable = { order = 1, type = "toggle", width = "full", name = L["Enable"], get = function(info) return E.private.enhanced.loseControl.enable end, set = function(info, value) E.private.enhanced.loseControl.enable = value E:GetModule("Enhanced_LoseControl"):ToggleState() end, }, compactMode = { order = 2, type = "toggle", name = L["Compact mode"], disabled = function() return not E.private.enhanced.loseControl.enable end }, iconSize = { order = 3, type = "range", min = 30, max = 120, step = 1, name = L["Icon Size"], disabled = function() return not E.private.enhanced.loseControl.enable end }, typeGroup = { order = 4, type = "group", name = TYPE, guiInline = true, get = function(info) return E.db.enhanced.loseControl[info[#info]] end, set = function(info, value) E.db.enhanced.loseControl[info[#info]] = value end, disabled = function() return not E.private.enhanced.loseControl.enable end, args = { CC = { order = 1, type = "toggle", name = L["CC"] }, PvE = { order = 2, type = "toggle", name = L["PvE"] }, Silence = { order = 3, type = "toggle", name = L["Silence"] }, Disarm = { order = 4, type = "toggle", name = L["Disarm"] }, Root = { order = 5, type = "toggle", name = L["Root"] }, Snare = { order = 6, type = "toggle", name = L["Snare"] } } } } } end local function InterruptTrackerOptions() return { type = "group", name = L["Interrupt Tracker"], get = function(info) return E.db.enhanced.interruptTracker[info[#info]] end, set = function(info, value) E.db.enhanced.interruptTracker[info[#info]] = value E:GetModule("Enhanced_InterruptTracker"):UpdateAllIconsTimers() end, args = { header = { order = 0, type = "header", name = EE:ColorizeSettingName(L["Interrupt Tracker"]) }, enable = { order = 1, type = "toggle", width = "full", name = L["Enable"], get = function(info) return E.private.enhanced.interruptTracker.enable end, set = function(info, value) E.private.enhanced.interruptTracker.enable = value E:StaticPopup_Show("PRIVATE_RL") end }, size = { order = 2, type = "range", min = 10, max = 120, step = 1, name = L["Size"], disabled = function() return not E.private.enhanced.interruptTracker.enable end, }, enableGroup = { order = 3, type = "group", name = L["Where to show"], guiInline = true, get = function(info) return E.private.enhanced.interruptTracker[info[#info]] end, set = function(info, value) E.private.enhanced.interruptTracker[info[#info]] = value E:GetModule("Enhanced_InterruptTracker"):UpdateState() end, disabled = function() return not E.private.enhanced.interruptTracker.enable end, args = { everywhere = { order = 1, type = "toggle", name = L["Everywhere"], desc = L["Show Everywhere"] }, arena = { order = 2, type = "toggle", name = ARENA, desc = L["Show on Arena."], disabled = function() return not E.private.enhanced.interruptTracker.enable or E.private.enhanced.interruptTracker.everywhere end }, battleground = { order = 3, type = "toggle", name = BATTLEGROUND, desc = L["Show on Battleground."], disabled = function() return not E.private.enhanced.interruptTracker.enable or E.private.enhanced.interruptTracker.everywhere end } } }, textGroup = { order = 4, type = "group", name = L["Text"], guiInline = true, get = function(info) return E.db.enhanced.interruptTracker.text[info[#info]] end, set = function(info, value) E.db.enhanced.interruptTracker.text[info[#info]] = value E:GetModule("Enhanced_InterruptTracker"):UpdateAllIconsTimers() end, disabled = function() return not E.private.enhanced.interruptTracker.enable end, args = { position = { order = 1, type = "select", name = L["Text Position"], values = { TOPLEFT = "TOPLEFT", LEFT = "LEFT", BOTTOMLEFT = "BOTTOMLEFT", RIGHT = "RIGHT", TOPRIGHT = "TOPRIGHT", BOTTOMRIGHT = "BOTTOMRIGHT", CENTER = "CENTER", TOP = "TOP", BOTTOM = "BOTTOM" } }, 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 = -300, max = 300, step = 1 }, font = { order = 4, type = "select", dialogControl = "LSM30_Font", name = L["Font"], values = AceGUIWidgetLSMlists.font }, fontSize = { order = 5, type = "range", name = L["FONT_SIZE"], min = 6, max = 32, step = 1 }, fontOutline = { order = 6, type = "select", name = L["Font Outline"], desc = L["Set the font outline."], values = { ["NONE"] = L["NONE"], ["OUTLINE"] = "OUTLINE", ["MONOCHROMEOUTLINE"] = "MONOCROMEOUTLINE", ["THICKOUTLINE"] = "THICKOUTLINE" } } } } } } end local function UnitFrameOptions() local TC = E:GetModule("Enhanced_TargetClass") return { type = "group", name = L["UnitFrames"], childGroups = "tab", args = { header = { order = 1, type = "header", name = EE:ColorizeSettingName(L["UnitFrames"]) }, general = { order = 2, type = "group", name = L["General"], args = { header = { order = 1, type = "header", name = L["General"] }, portraitHDModelFix = { order = 2, type = "group", guiInline = true, name = L["Portrait HD Fix"], get = function(info) return E.db.enhanced.unitframe.portraitHDModelFix[info[#info]] end, set = function(info, value) E.db.enhanced.unitframe.portraitHDModelFix[info[#info]] = value end, disabled = function() return not E.db.enhanced.unitframe.portraitHDModelFix.enable end, args = { enable = { order = 1, type = "toggle", name = L["Enable"], set = function(info, value) E.db.enhanced.unitframe.portraitHDModelFix.enable = value E:GetModule("Enhanced_PortraitHDModelFix"):ToggleState() end, disabled = false }, debug = { order = 2, type = "toggle", name = L["Debug"], desc = L["Print to chat model names of units with enabled 3D portraits."] }, modelsToFix = { order = 3, type = "input", name = L["Models to fix"], desc = L["List of models with broken portrait camera. Separete each model name with ';' simbol"], width = "full", multiline = true, set = function(info, value) E.db.enhanced.unitframe.portraitHDModelFix.modelsToFix = value E:GetModule("Enhanced_PortraitHDModelFix"):UpdatePortraits() end } } } } }, player = { order = 3, type = "group", name = L["PLAYER"], args = { header = { order = 1, type = "header", name = L["PLAYER"] }, detachPortrait = { order = 3, type = "group", name = L["Detached Portrait"], get = function(info) return E.db.enhanced.unitframe.detachPortrait.player[info[#info]] end, set = function(info, value) E.db.enhanced.unitframe.detachPortrait.player[info[#info]] = value E:GetModule("UnitFrames"):CreateAndUpdateUF("player") end, disabled = function() return not E.db.unitframe.units.player.portrait.enable or E.db.unitframe.units.player.portrait.overlay end, args = { header = { order = 0, type = "header", name = L["Portrait"] }, enable = { order = 1, type = "toggle", name = L["Detach From Frame"], set = function(info, value) E.db.enhanced.unitframe.detachPortrait.player[info[#info]] = value E:GetModule("Enhanced_DetachedPortrait"):ToggleState("player") end }, spacer = { order = 2, type = "description", name = " " }, width = { order = 3, type = "range", name = L["Detached Width"], min = 10, max = 600, step = 1 }, height = { order = 4, type = "range", name = L["Detached Height"], min = 10, max = 600, step = 1 } } } } }, target = { order = 4, type = "group", name = L["TARGET"], args = { header = { order = 1, type = "header", name = L["TARGET"] }, classIcon = { order = 2, type = "group", name = L["Class Icons"], get = function(info) return E.db.enhanced.unitframe.units.target.classicon[info[#info]] end, set = function(info, value) E.db.enhanced.unitframe.units.target.classicon[info[#info]] = value TC:ToggleSettings() end, disabled = function() return not E.db.enhanced.unitframe.units.target.classicon.enable end, args = { header = { order = 0, type = "header", name = L["Class Icons"] }, enable = { order = 1, type = "toggle", name = L["Enable"], desc = L["Show class icon for units."], disabled = false }, spacer = { order = 2, type = "description", name = " " }, size = { order = 3, type = "range", name = L["Size"], desc = L["Size of the indicator icon."], min = 16, max = 40, step = 1 }, xOffset = { order = 4, type = "range", name = L["X-Offset"], min = -100, max = 100, step = 1 }, yOffset = { order = 5, type = "range", name = L["Y-Offset"], min = -80, max = 40, step = 1 } } }, detachPortrait = { order = 3, type = "group", name = L["Detached Portrait"], get = function(info) return E.db.enhanced.unitframe.detachPortrait.target[info[#info]] end, set = function(info, value) E.db.enhanced.unitframe.detachPortrait.target[info[#info]] = value E:GetModule("UnitFrames"):CreateAndUpdateUF("target") end, disabled = function() return not E.db.unitframe.units.target.portrait.enable or E.db.unitframe.units.target.portrait.overlay end, args = { header = { order = 0, type = "header", name = L["Portrait"] }, enable = { order = 1, type = "toggle", name = L["Detach From Frame"], set = function(info, value) E.db.enhanced.unitframe.detachPortrait.target[info[#info]] = value E:GetModule("Enhanced_DetachedPortrait"):ToggleState("target") end }, spacer = { order = 2, type = "description", name = " " }, width = { order = 3, type = "range", name = L["Detached Width"], min = 10, max = 600, step = 1 }, height = { order = 4, type = "range", name = L["Detached Height"], min = 10, max = 600, step = 1 } } } } } } } end function EE:GetOptions() E.Options.args.enhanced = { order = 50, type = "group", childGroups = "tab", name = EE:ColorizeSettingName(L["Enhanced"]), args = { generalGroup = GeneralOptions(), actionbarGroup = ActionbarOptions(), blizzardGroup = BlizzardOptions(), equipmentInfoGroup = EquipmentInfoOptions(), mapGroup = MapOptions(), minimapGroup = MinimapOptions(), -- namePlatesGroup = NamePlatesOptions(), tooltipGroup = TooltipOptions(), unitframesGroup = UnitFrameOptions(), -- loseControlGroup = LoseControlOptions(), interruptGroup = InterruptTrackerOptions(), } } E.Options.args.enhanced.args.generalGroup.order = 1 E.Options.args.enhanced.args.blizzardGroup.order = 2 -- E.Options.args.enhanced.args.actionbarGroup.order = 3 -- E.Options.args.enhanced.args.equipmentInfoGroup.order = 4 -- E.Options.args.enhanced.args.minimapGroup.order = 5 -- E.Options.args.enhanced.args.namePlatesGroup.order = 6 -- E.Options.args.enhanced.args.tooltipGroup.order = 7 -- E.Options.args.enhanced.args.loseControlGroup.order = 8 -- E.Options.args.enhanced.args.interruptGroup.order = 9 -- E.Options.args.enhanced.args.unitframesGroup.order = 10 end