GenGen.decimalLength=ACH:Range(L["Decimal Length"],L["Controls the amount of decimals used in values displayed on elements like NamePlates and UnitFrames."],2,{min=0,max=4,step=1},nil,nil,function(info,value)E.db.general[info[#info]]=valueE:BuildPrefixValues()E:StaggeredUpdateAll()end)
GenGen.tagUpdateRate=ACH:Range(E.NewSign..L["Tag Update Rate"],L["Maximum tick rate allowed for tag updates per second."],3,{min=0.1,max=0.5,step=0.01,bigStep=0.1},nil,nil,function(info,value)E.db.general[info[#info]]=value;E:TagUpdateRate(value)end)
GenGen.smoothingAmount=ACH:Range(L["Smoothing Amount"],L["Controls the speed at which smoothed bars will be updated."],4,{isPercent=true,min=0.2,max=0.8,softMax=0.75,softMin=0.25,step=0.01},nil,nil,function(info,value)E.db.general[info[#info]]=valueE:SetSmoothingAmount(value)end)
GenGen.taintLog=ACH:Toggle(L["Log Taints"],L["Send ADDON_ACTION_BLOCKED errors to the Lua Error frame. These errors are less important in most cases and will not effect your game performance. Also a lot of these errors cannot be fixed. Please only report these errors if you notice a Defect in gameplay."],5)
GenGen.messageRedirect=ACH:Select(L["Chat Output"],L["This selects the Chat Frame to use as the output of ElvUI messages."],7,function()returnGetChatWindowInfo()end)
GenGen.numberPrefixStyle=ACH:Select(L["Unit Prefix Style"],L["The unit prefixes you want to use when values are shortened in ElvUI. This is mostly used on UnitFrames."],8,{TCHINESE='萬, 億',CHINESE='万, 亿',ENGLISH='K, M, B',GERMAN='Tsd, Mio, Mrd',KOREAN='천, 만, 억',METRIC='k, M, G'},nil,nil,nil,function(info,value)E.db.general[info[#info]]=valueE:BuildPrefixValues()E:StaggeredUpdateAll()end)
GenGen.automation.args.interruptAnnounce=ACH:Select(L["Announce Interrupts"],L["Announce when you interrupt a spell to the specified chat channel."],1,{NONE=L["None"],SAY=L["Say"],YELL=L["Yell"],PARTY=L["Party Only"],RAID=L["Party / Raid"],RAID_ONLY=L["Raid Only"],EMOTE=L["CHAT_MSG_EMOTE"]},nil,nil,nil,function(info,value)E.db.general[info[#info]]=valueifvalue=='NONE'thenMisc:UnregisterEvent('COMBAT_LOG_EVENT_UNFILTERED')elseMisc:RegisterEvent('COMBAT_LOG_EVENT_UNFILTERED')endend)
GenGen.automation.args.autoAcceptInvite=ACH:Toggle(L["Accept Invites"],L["Automatically accept invites from guild/friends."],2)
GenGen.automation.args.autoRepair=ACH:Select(L["Auto Repair"],L["Automatically repair using the following method when visiting a merchant."],5,{NONE=L["None"],GUILD=notE.ClassicandL["Guild"]ornil,PLAYER=L["Player"]})
Media.textureGroup.args.normTex=ACH:SharedMediaStatusbar(L["Primary Texture"],L["The texture that will be used mainly for statusbars."],1,nil,nil,function(info,value)E.private.general[info[#info]]=valueE:UpdateMedia()E:UpdateStatusBars()end)
Media.textureGroup.args.glossTex=ACH:SharedMediaStatusbar(L["Secondary Texture"],L["This texture will get used on objects like chat windows and dropdown menus."],2,nil,nil,function(info,value)E.private.general[info[#info]]=valueE:UpdateMedia()E:UpdateFrameTemplates()end)
Media.textureGroup.args.applyTextureToAll=ACH:Execute(L["Copy Primary Texture"],L["Replaces the StatusBar texture setting on Unitframes and Nameplates with the primary texture."],3,function()E.db.unitframe.statusbar,E.db.nameplates.statusbar=E.private.general.normTex,E.private.general.normTexUF:Update_StatusBars()NP:ConfigureAll()end)
Media.general.args.font=ACH:SharedMediaFont(L["Default Font"],L["The font that the core of the UI will use."],1)
Media.general.args.fontSize=ACH:Range(L["Font Size"],L["Set the font size for everything in UI. Note: This doesn't effect somethings that have their own separate options (UnitFrame Font, Datatext Font, ect..)"],2,C.Values.FontSize)
Media.general.args.applyFontToAll=ACH:Execute(L["Apply Font To All"],L["Applies the font and font size settings throughout the entire user interface. Note: Some font size settings will be skipped due to them having a smaller font size by default."],4,function()E:StaticPopup_Show('APPLY_FONT_WARNING')end)
Media.blizzard.args.replaceBlizzFonts=ACH:Toggle(L["Replace Blizzard Fonts"],L["Replaces the default Blizzard fonts on various panels and frames with the fonts chosen in the Media section of the ElvUI Options. NOTE: Any font that inherits from the fonts ElvUI usually replaces will be affected as well if you disable this. Enabled by default."],1)
Media.blizzard.args.unifiedBlizzFonts=ACH:Toggle(L["Unified Font Sizes"],L["This setting mimics the older style of Replace Blizzard Fonts, with a more static unified font sizing."],2,nil,nil,nil,nil,function(info,value)E.private.general[info[#info]]=valueE:UpdateBlizzardFonts()end,function()returnnotE.private.general.replaceBlizzFontsend)
Media.names.args.replaceNameFont=ACH:Toggle(L["Replace Name Font"],nil,1)
Media.names.args.namefont=ACH:SharedMediaFont(L["Name Font"],L["The font that appears on the text above players heads. |cffFF3333WARNING: This requires a game restart or re-log for this change to take effect.|r"],2,nil,nil,nil,function()returnnotE.private.general.replaceNameFontend)
Media.combat.args.dmgfont=ACH:SharedMediaFont(L["Combat Font"],L["The font that combat text will use. |cffFF3333WARNING: This requires a game restart or re-log for this change to take effect.|r"],2,nil,nil,nil,function()returnE.eyefinityorE.ultrawideornotE.private.general.replaceCombatFontend)
Media.combat.args.replaceCombatText=ACH:Toggle(L["Replace Text on Me"],nil,3)
Cosmetic.bordersGroup.args.uiThinBorders=ACH:Toggle(L["Thin Borders"],L["The Thin Border Theme option will change the overall apperance of your UI. Using Thin Border Theme is a slight performance increase over the traditional layout."],1,nil,nil,nil,function()returnE.private.general.pixelPerfectend,function(_,value)E.private.general.pixelPerfect=valueE.ShowPopup=trueend)
Cosmetic.bordersGroup.args.ufThinBorders=ACH:Toggle(L["Unitframe Thin Borders"],L["Use thin borders on certain unitframe elements."],2,nil,nil,nil,function()returnE.db.unitframe.thinBordersend,function(_,value)E.db.unitframe.thinBorders=valueE.ShowPopup=trueend)
Cosmetic.bordersGroup.args.npThinBorders=ACH:Toggle(L["Nameplate Thin Borders"],L["Use thin borders on certain nameplate elements."],3,nil,nil,nil,function()returnE.db.nameplates.thinBordersend,function(_,value)E.db.nameplates.thinBorders=valueE.ShowPopup=trueend)
Cosmetic.bordersGroup.args.cropIcon=ACH:Toggle(L["Crop Icons"],L["This is for Customized Icons in your Interface/Icons folder."],4,true,nil,nil,function(info)localvalue=E.db.general[info[#info]]ifvalue==2thenreturntrueelseifvalue==1thenreturnnilelsereturnfalseendend,function(info,value)E.db.general[info[#info]]=(valueand2)or(value==niland1)or0E.ShowPopup=trueend)
Cosmetic.cosmeticBottomPanel.args.bottomPanel=ACH:Toggle(L["Enable"],L["Display a panel across the bottom of the screen. This is for cosmetic only."],1,nil,nil,nil,nil,function(info,value)E.db.general[info[#info]]=valueLayout:UpdateBottomPanel()end)
Cosmetic.cosmeticTopPanel.args.topPanel=ACH:Toggle(L["Enable"],L["Display a panel across the top of the screen. This is for cosmetic only."],1,nil,nil,nil,nil,function(info,value)E.db.general[info[#info]]=valueLayout:UpdateTopPanel()end)
Cosmetic.afkGroup.args.afk=ACH:Toggle(L["Enable"],L["When you go AFK display the AFK screen."],1,nil,nil,nil,nil,function(info,value)E.db.general[info[#info]]=valueAFK:Toggle()end)
Cosmetic.afkGroup.args.afkChat=ACH:Toggle(L["Chat"],L["Display messages from Guild and Whisper on AFK screen.\nThis chat can be dragged around (position will be saved)."],2,nil,nil,nil,nil,function(info,value)E.db.general[info[#info]]=valueAFK:Toggle()end)
Cosmetic.chatBubblesGroup.args.warning=ACH:Description(L["|cffFF3333This does not work in Instances or Garrisons!|r"],11,'medium')
Cosmetic.chatBubblesGroup.args.chatBubbles=ACH:Select(L["Chat Bubbles Style"],L["Skin the blizzard chat bubbles."],12,{backdrop=L["Skin Backdrop"],nobackdrop=L["Remove Backdrop"],backdrop_noborder=L["Skin Backdrop (No Borders)"],disabled=L["Disable"]})
Cosmetic.chatBubblesGroup.args.chatBubbleName=ACH:Toggle(L["Chat Bubble Names"],L["Display the name of the unit on the chat bubble. This will not work if backdrop is disabled or when you are in an instance."],13)
General.alternativePowerGroup.args.enable=ACH:Toggle(L["Enable"],L["Replace Blizzard's Alternative Power Bar"],1,nil,nil,nil,nil,function(info,value)E.db.general.altPowerBar[info[#info]]=valueE.ShowPopup=trueend)
General.alternativePowerGroup.args.textGroup.args.textFormat=ACH:Select(L["Text Format"],nil,4,{NONE=L["None"],NAME=L["Name"],NAMEPERC=L["Name: Percent"],NAMECURMAX=L["Name: Current / Max"],NAMECURMAXPERC=L["Name: Current / Max - Percent"],PERCENT=L["Percent"],CURMAX=L["Current / Max"],CURMAXPERC=L["Current / Max - Percent"]})
blizz.general.args.hideErrorFrame=ACH:Toggle(L["Hide Error Text"],L["Hides the red error text at the top of the screen while in combat."],1)
blizz.general.args.enhancedPvpMessages=ACH:Toggle(L["Enhanced PVP Messages"],L["Display battleground messages in the middle of the screen."],2)
blizz.general.args.disableTutorialButtons=ACH:Toggle(L["Disable Tutorial Buttons"],L["Disables the tutorial button found on some frames."],3,nil,nil,nil,function(info)returnE.global.general[info[#info]]end,function(info,value)E.global.general[info[#info]]=valueE.ShowPopup=trueend)
blizz.general.args.raidUtility=ACH:Toggle(L["RAID_CONTROL"],L["Enables the ElvUI Raid Control panel."],4,nil,nil,nil,function(info)returnE.private.general[info[#info]]end,function(info,value)E.private.general[info[#info]]=valueE.ShowPopup=trueend)
blizz.general.args.resurrectSound=ACH:Toggle(L["Resurrect Sound"],L["Enable to hear sound if you receive a resurrect."],6)
blizz.general.args.loot=ACH:Toggle(L["Loot Frame"],L["Enable/Disable the loot frame."],7,nil,nil,nil,function(info)returnE.private.general[info[#info]]end,function(info,value)E.private.general[info[#info]]=valueE.ShowPopup=trueend)
blizz.general.args.hideZoneText=ACH:Toggle(L["Hide Zone Text"],L["Enable/Disable the on-screen zone text when you change zones."],8,nil,nil,nil,function(info)returnE.db.general[info[#info]]end,function(info,value)E.db.general[info[#info]]=value;Misc:ZoneTextToggle()end)
blizz.general.args.spacer1=ACH:Spacer(14,'full')
blizz.general.args.commandBarSetting=ACH:Select(L["Order Hall Command Bar"],nil,15,{DISABLED=L["Disable"],ENABLED=L["Enable"],ENABLED_RESIZEPARENT=L["Enable + Adjust Movers"]},nil,nil,function(info)returnE.global.general[info[#info]]end,function(info,value)E.global.general[info[#info]]=valueE.ShowPopup=trueend,nil,notE.Retail)
blizz.lootRollGroup.args.lootRoll=ACH:Toggle(L["Enable"],L["Enable/Disable the loot roll frame."],0,nil,nil,nil,function(info)returnE.private.general[info[#info]]end,function(info,value)E.private.general[info[#info]]=value;E.ShowPopup=trueend)
blizz.itemLevelInfo.args.displayCharacterInfo=ACH:Toggle(L["Display Character Info"],L["Shows item level of each item, enchants, and gems on the character page."],1)
blizz.itemLevelInfo.args.displayInspectInfo=ACH:Toggle(L["Display Inspect Info"],L["Shows item level of each item, enchants, and gems when inspecting another player."],2)
blizz.objectiveFrameGroup.args.objectiveFrameAutoHide=ACH:Toggle(L["Auto Hide"],L["Automatically hide the objective frame during boss or arena fights."],1,nil,nil,nil,nil,function(info,value)E.db.general[info[#info]]=valueBlizzard:SetObjectiveFrameAutoHide()end,nil,not(E.RetailorE.Wrath))
blizz.objectiveFrameGroup.args.objectiveFrameAutoHideInKeystone=ACH:Toggle(L["Hide In Keystone"],L["Automatically hide the objective frame during boss fights while you are running a key."],2,nil,nil,nil,nil,nil,nil,function()returnnotE.RetailornotE.db.general.objectiveFrameAutoHideend)
blizz.objectiveFrameGroup.args.objectiveFrameHeight=ACH:Range(L["Objective Frame Height"],L["Height of the objective tracker. Increase size to be able to see more objectives."],3,{min=400,max=ceil(E.screenHeight),step=1},nil,nil,function(info,value)E.db.general[info[#info]]=valueBlizzard:SetObjectiveFrameHeight()end,nil,notE.Wrath)
blizz.objectiveFrameGroup.args.bonusObjectivePosition=ACH:Select(L["Bonus Reward Position"],L["Position of bonus quest reward frame relative to the objective tracker."],4,{RIGHT=L["Right"],LEFT=L["Left"],AUTO=L["Automatic"]},nil,nil,nil,nil,nil,notE.Retail)
blizz.objectiveFrameGroup.args.torghastBuffsPosition=ACH:Select(L["Maw Buffs Position"],L["Position of the Maw Buffs list relative to the objective tracker."],5,{RIGHT=L["Right"],LEFT=L["Left"],AUTO=L["Automatic"]},nil,nil,nil,function(info,value)E.db.general[info[#info]]=valueBlizzard:HandleMawBuffsFrame()end,nil,notE.Retail)