if (true) then --return end --[[ search '~10' to go directly to tooltips settings ~01 - display ~02 - skins ~03 - bars general ~04 - bars texts ~05 - title bar ~06 - body setings ~07 - status bar ~08 - plugins ~09 - profiles ~10 - tooltips ~11 - datafeed ~12 - wallpaper ~13 - automation ~14 - raid tools ~15 - broadcaster ~16 - custom spells ~17 - charts data ~18 - mythic dungeon ~19 - search results ~20 - combatlog options --]] local Details = _G.Details local DF = _G.DetailsFramework local Loc = _G.LibStub("AceLocale-3.0"):GetLocale("Details") local SharedMedia = _G.LibStub:GetLibrary("LibSharedMedia-3.0") local LDB = _G.LibStub("LibDataBroker-1.1", true) local LDBIcon = LDB and _G.LibStub("LibDBIcon-1.0", true) local addonName, Details222 = ... local _ = nil local unpack = _G.unpack local tinsert = table.insert local startX = 200 local startY = -75 local heightSize = 600 local presetVersion = 3 --templates local options_text_template = DF:GetTemplate("font", "OPTIONS_FONT_TEMPLATE") local options_dropdown_template = DF:GetTemplate("dropdown", "OPTIONS_DROPDOWN_TEMPLATE") local options_switch_template = DF:GetTemplate("switch", "OPTIONS_CHECKBOX_TEMPLATE") local options_slider_template = DF:GetTemplate("slider", "OPTIONS_SLIDER_TEMPLATE") local options_button_template = DF:GetTemplate("button", "OPTIONS_BUTTON_TEMPLATE") local subSectionTitleTextTemplate = DF:GetTemplate("font", "ORANGE_FONT_TEMPLATE") local font_select_icon, font_select_texcoord = [[Interface\AddOns\Details\images\icons]], {472/512, 513/512, 186/512, 230/512} --store the current instance being edited local currentInstance function Details222.OptionsPanel.SetCurrentInstance(instance) currentInstance = instance end function Details222.OptionsPanel.SetCurrentInstanceAndRefresh(instance) currentInstance = instance _G.DetailsOptionsWindow.instance = instance --get all the frames created and update the options for i = 1, Details222.OptionsPanel.maxSectionIds do local sectionFrame = Details222.OptionsPanel.GetOptionsSection(i) if (sectionFrame.RefreshOptions) then sectionFrame:RefreshOptions() end end Details222.OptionsPanel.UpdateAutoHideSettings(instance) end function Details222.OptionsPanel.UpdateAutoHideSettings(instance) for contextId, line in ipairs(_G.DetailsOptionsWindowTab13.AutoHideOptions) do --tab13 = automation settings line.enabledCheckbox:SetValue(instance.hide_on_context[contextId].enabled) line.reverseCheckbox:SetValue(instance.hide_on_context[contextId].inverse) line.alphaSlider:SetValue(instance.hide_on_context[contextId].value) end end function Details222.OptionsPanel.RefreshInstances(instance) if (instance) then Details:InstanceGroupCall(instance, "InstanceRefreshRows") instance:InstanceReset() else Details:InstanceGroupCall(instance, "InstanceRefreshRows") Details:InstanceGroupCall(instance, "InstanceReset") end end function Details222.OptionsPanel.GetCurrentInstanceInOptionsPanel() return currentInstance end local afterUpdate = function(instance) Details:SendOptionsModifiedEvent(instance or currentInstance) end local isGroupEditing = function() return Details.options_group_edit end local editInstanceSetting = function(instance, funcName, ...) if (Details[funcName]) then if (isGroupEditing()) then Details:InstanceGroupCall(instance, funcName, ...) else instance[funcName](instance, ...) end else local keyName = funcName local value1, value2, value3 = ... if (value2 == nil) then if (isGroupEditing()) then Details:InstanceGroupEditSetting(instance, keyName, value1) else instance[keyName] = value1 end else if (value3 == nil) then if (isGroupEditing()) then Details:InstanceGroupEditSettingOnTable(instance, keyName, value1, value2) else instance[keyName][value1] = value2 end else if (isGroupEditing()) then Details:InstanceGroupEditSettingOnTable(instance, keyName, value1, value2, value3) else instance[keyName][value1][value2] = value3 end end end end end -- ~01 - display do local buildSection = function(sectionFrame) --abbreviation options local icon = [[Interface\COMMON\mini-hourglass]] local iconcolor = {1, 1, 1, .5} local iconsize = {14, 14} local onSelectTimeAbbreviation = function(_, _, abbreviationtype) Details.ps_abbreviation = abbreviationtype Details:UpdateToKFunctions() afterUpdate() end local abbreviationOptions = { {value = 1, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_NONE"], desc = Loc ["STRING_EXAMPLE"] .. ": 305.500 -> 305500", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 2, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOK"], desc = Loc ["STRING_EXAMPLE"] .. ": 305.500 -> 305.5K", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 3, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOK2"], desc = Loc ["STRING_EXAMPLE"] .. ": 305.500 -> 305K", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 4, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOK0"], desc = Loc ["STRING_EXAMPLE"] .. ": 25.305.500 -> 25M", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 5, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOKMIN"], desc = Loc ["STRING_EXAMPLE"] .. ": 305.500 -> 305.5k", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 6, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOK2MIN"], desc = Loc ["STRING_EXAMPLE"] .. ": 305.500 -> 305k", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 7, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOK0MIN"], desc = Loc ["STRING_EXAMPLE"] .. ": 25.305.500 -> 25m", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 8, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_COMMA"], desc = Loc ["STRING_EXAMPLE"] .. ": 25305500 -> 25.305.500", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize} --, desc = "" } local buildAbbreviationMenu = function() return abbreviationOptions end --number system local onSelectNumeralSystem = function(_, _, systemNumber) Details:SelectNumericalSystem(systemNumber) end local asian1K, asian10K, asian1B = DF:GetAsianNumberSymbols() local asianNumerals = {value = 2, label = Loc ["STRING_NUMERALSYSTEM_MYRIAD_EASTASIA"], desc = "1" .. asian1K .. " = 1.000 \n1" .. asian10K .. " = 10.000 \n10" .. asian10K .. " = 100.000 \n100" .. asian10K .. " = 1.000.000", onclick = onSelectNumeralSystem, icon = icon, iconcolor = iconcolor, iconsize = iconsize} --if region is western it'll be using Korean symbols, set a font on the dropdown so it won't show ????? local clientRegion = DF:GetClientRegion() if (clientRegion == "western" or clientRegion == "russia") then asianNumerals.descfont = DF:GetBestFontForLanguage("koKR") end local numeralSystems = { {value = 1, label = Loc ["STRING_NUMERALSYSTEM_ARABIC_WESTERN"], desc = "1K = 1.000 \n10K = 10.000 \n100K = 100.000 \n1M = 1.000.000", onclick = onSelectNumeralSystem, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, asianNumerals } local buildNumeralSystemsMenu = function() return numeralSystems end --time measure type local onSelectTimeType = function(_, _, timetype) Details.time_type = timetype Details.time_type_original = timetype Details:RefreshMainWindow(-1, true) afterUpdate() end local timetypeOptions = { --localize-me {value = 1, label = "Activity Time", onclick = onSelectTimeType, icon = "Interface\\Icons\\Achievement_Quests_Completed_Daily_08", iconcolor = {1, .9, .9}, texcoord = {0.078125, 0.921875, 0.078125, 0.921875}}, {value = 2, label = "Effective Time", onclick = onSelectTimeType, icon = "Interface\\Icons\\Achievement_Quests_Completed_08"}, --{value = 3, label = "Real Time", onclick = onSelectTimeType, icon = "Interface\\Icons\\Ability_Evoker_TipTheScales"}, } local buildTimeTypeMenu = function() return timetypeOptions end --auto erase | erase data local onSelectEraseData = function(_, _, eraseType) Details.segments_auto_erase = eraseType afterUpdate() end local eraseDataOptions = { {value = 1, label = Loc ["STRING_OPTIONS_ED1"], onclick = onSelectEraseData, icon = [[Interface\Addons\Details\Images\reset_button2]]}, {value = 2, label = Loc ["STRING_OPTIONS_ED2"], onclick = onSelectEraseData, icon = [[Interface\Addons\Details\Images\reset_button2]]}, {value = 3, label = Loc ["STRING_OPTIONS_ED3"], onclick = onSelectEraseData, icon = [[Interface\Addons\Details\Images\reset_button2]]}, } local buildEraseDataMenu = function() return eraseDataOptions end local sectionOptions = { {type = "label", get = function() return Loc ["STRING_OPTIONS_GENERAL_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--animate bars type = "toggle", get = function() return Details.use_row_animations end, set = function(self, fixedparam, value) Details:SetUseAnimations(value) afterUpdate() end, name = Loc ["STRING_OPTIONS_ANIMATEBARS"], desc = Loc ["STRING_OPTIONS_ANIMATEBARS_DESC"], boxfirst = true, }, {--scroll speed type = "range", get = function() return Details.scroll_speed end, set = function(self, fixedparam, value) Details.scroll_speed = value end, min = 1, max = 3, step = 1, name = Loc ["STRING_OPTIONS_WHEEL_SPEED"], desc = Loc ["STRING_OPTIONS_WHEEL_SPEED_DESC"], }, {--instances amount type = "range", get = function() return Details.instances_amount end, set = function(self, fixedparam, value) Details.instances_amount = value end, min = 1, max = 30, step = 1, name = Loc ["STRING_OPTIONS_MAXINSTANCES"], desc = Loc ["STRING_OPTIONS_MAXINSTANCES_DESC"], }, {--abbreviation type type = "select", get = function() return Details.ps_abbreviation end, values = function() return buildAbbreviationMenu() end, name = Loc ["STRING_OPTIONS_PS_ABBREVIATE"], desc = Loc ["STRING_OPTIONS_PS_ABBREVIATE_DESC"], }, {--number system type = "select", get = function() return Details.numerical_system end, values = function() return buildNumeralSystemsMenu() end, name = Loc ["STRING_NUMERALSYSTEM"], desc = Loc ["STRING_NUMERALSYSTEM_DESC"], }, {--update speed type = "range", get = function() return Details.update_speed end, set = function(self, fixedparam, value) Details:SetWindowUpdateSpeed(value) afterUpdate() end, min = 0.05, max = 3, step = 0.05, usedecimals = true, name = Loc ["STRING_OPTIONS_WINDOWSPEED"], desc = Loc ["STRING_OPTIONS_WINDOWSPEED_DESC"], }, {--time measure type = "select", get = function() return Details.time_type end, values = function() return buildTimeTypeMenu() end, name = Loc ["STRING_OPTIONS_TIMEMEASURE"], desc = Loc ["STRING_OPTIONS_TIMEMEASURE_DESC"], }, {--use real time type = "toggle", get = function() return Details.use_realtimedps end, set = function(self, fixedparam, value) Details.use_realtimedps = value end, name = "Show 'Real Time' DPS", desc = "If Enabled and while in combat, show the damage done of the latest 5 seconds divided by 5.", boxfirst = true, }, {--real time dps order bars type = "toggle", get = function() return Details.realtimedps_order_bars end, set = function(self, fixedparam, value) Details.realtimedps_order_bars = value end, name = "Order Bars By Real Time DPS", desc = "If Enabled, players dealing more real time DPS are place above other players in the window.", boxfirst = true, }, {--always use real time in arenas type = "toggle", get = function() return Details.realtimedps_always_arena end, set = function(self, fixedparam, value) Details.realtimedps_always_arena = value end, name = "Always Use Real Time in Arenas", desc = "If Enabled, real time DPS is always used in arenas, even if the option above is disabled.", boxfirst = true, }, {type = "blank"}, {type = "label", get = function() return "Segments:" end, text_template = subSectionTitleTextTemplate}, {--segments locked type = "toggle", get = function() return Details.instances_segments_locked end, set = function(self, fixedparam, value) Details.instances_segments_locked = value end, name = Loc ["STRING_OPTIONS_LOCKSEGMENTS"], desc = Loc ["STRING_OPTIONS_LOCKSEGMENTS_DESC"], boxfirst = true, }, {--battleground remote parser type = "toggle", get = function() return Details.use_battleground_server_parser end, set = function(self, fixedparam, value) Details.use_battleground_server_parser = value end, name = Loc ["STRING_OPTIONS_BG_UNIQUE_SEGMENT"], desc = Loc ["STRING_OPTIONS_BG_UNIQUE_SEGMENT_DESC"], boxfirst = true, }, {--battleground show enemies type = "toggle", get = function() return Details.pvp_as_group end, set = function(self, fixedparam, value) Details.pvp_as_group = value end, name = Loc ["STRING_OPTIONS_BG_ALL_ALLY"], desc = Loc ["STRING_OPTIONS_BG_ALL_ALLY_DESC"], boxfirst = true, }, {--max segments type = "range", get = function() return Details.segments_amount end, set = function(self, fixedparam, value) Details.segments_amount = value afterUpdate() end, min = 1, max = 40, step = 1, name = Loc ["STRING_OPTIONS_MAXSEGMENTS"], desc = Loc ["STRING_OPTIONS_MAXSEGMENTS_DESC"], }, {--max segments saved type = "range", get = function() return Details.segments_amount_to_save end, set = function(self, fixedparam, value) Details.segments_amount_to_save = value afterUpdate() end, min = 1, max = 40, step = 1, name = Loc ["STRING_OPTIONS_SEGMENTSSAVE"], desc = Loc ["STRING_OPTIONS_SEGMENTSSAVE_DESC"], }, {--max segments on boss wipes type = "range", get = function() return Details.segments_amount_boss_wipes end, set = function(self, fixedparam, value) Details.segments_amount_boss_wipes = value afterUpdate() end, min = 1, max = 40, step = 1, name = "Segments Boss Wipe", desc = "Amount of segments to keep for wipes on the same boss.", }, {--wipe segments keep the best segments and delete the worst ones type = "toggle", get = function() return Details.segments_boss_wipes_keep_best_performance end, set = function(self, fixedparam, value) Details.segments_boss_wipes_keep_best_performance = value end, name = "Keep Best Performance (boss wipes)", desc = "Keep the segments with more progress in the boss health and delete the ones with less progress.", boxfirst = true, }, {type = "breakline"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_OVERALL_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--erase overall data on new boss type = "toggle", get = function() return Details.overall_clear_newboss end, set = function(self, fixedparam, value) Details:SetOverallResetOptions(value) afterUpdate() end, name = Loc ["STRING_OPTIONS_OVERALL_NEWBOSS"], desc = Loc ["STRING_OPTIONS_OVERALL_NEWBOSS_DESC"], boxfirst = true, }, {--erase overall data on mythic plus type = "toggle", get = function() return Details.overall_clear_newchallenge end, set = function(self, fixedparam, value) Details:SetOverallResetOptions(nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_OVERALL_MYTHICPLUS"], desc = Loc ["STRING_OPTIONS_OVERALL_MYTHICPLUS_DESC"], boxfirst = true, }, {--erase overall data on logout type = "toggle", get = function() return Details.overall_clear_pvp end, set = function(self, fixedparam, value) Details:SetOverallResetOptions(nil, nil, nil, value) afterUpdate() end, name = "Clear On Start PVP", --localize-me desc = "When enabled, overall data is automatically wiped when a new arena or battleground starts.", --localize-me boxfirst = true, }, {--erase overall data on logout type = "toggle", get = function() return Details.overall_clear_logout end, set = function(self, fixedparam, value) Details:SetOverallResetOptions(nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_OVERALL_LOGOFF"], desc = Loc ["STRING_OPTIONS_OVERALL_LOGOFF_DESC"], boxfirst = true, }, {--auto switch to dynamic overall data when selecting overall data type = "toggle", get = function() return Details.auto_swap_to_dynamic_overall end, set = function(self, fixedparam, value) Details.auto_swap_to_dynamic_overall = value afterUpdate() end, name = "Use Dynamic Overall Damage", desc = "When showing Damage Done Overall, swap to Dynamic Overall Damage on entering combat.", boxfirst = true, }, {type = "blank"}, {type = "label", get = function() return "Window Control:" end, text_template = DF:GetTemplate("font", "ORANGE_FONT_TEMPLATE")}, --localize-me {--lock instance type = "execute", func = function(self) local instanceLockButton = currentInstance.baseframe.lock_button Details.lock_instance_function(instanceLockButton, "leftclick", true, true) end, icontexture = [[Interface\PetBattles\PetBattle-LockIcon]], icontexcoords = {0.0703125, 0.9453125, 0.0546875, 0.9453125}, name = Loc ["STRING_OPTIONS_WC_LOCK"], desc = Loc ["STRING_OPTIONS_WC_LOCK_DESC"], }, {--ungroup instance type = "execute", func = function(self) currentInstance:UngroupInstance() end, icontexture = [[Interface\AddOns\Details\images\icons]], icontexcoords = {160/512, 179/512, 142/512, 162/512}, name = Loc ["STRING_OPTIONS_WC_UNSNAP"], desc = Loc ["STRING_OPTIONS_WC_UNSNAP_DESC"], }, {--close instance close window type = "execute", func = function(self) currentInstance:Shutdown() end, icontexture = [[Interface\Buttons\UI-Panel-MinimizeButton-Up]], icontexcoords = {0.143125, 0.8653125, 0.1446875, 0.8653125}, name = Loc ["STRING_OPTIONS_WC_CLOSE"], desc = Loc ["STRING_OPTIONS_WC_CLOSE_DESC"], }, {--create instance type = "execute", func = function(self) Details:CreateInstance() end, icontexture = [[Interface\Buttons\UI-AttributeButton-Encourage-Up]], --icontexcoords = {160/512, 179/512, 142/512, 162/512}, name = Loc ["STRING_OPTIONS_WC_CREATE"], desc = Loc ["STRING_OPTIONS_WC_CREATE_DESC"], }, {type = "blank"}, {--class colors type = "execute", func = function(self) Details:OpenClassColorsConfig() end, icontexture = [[Interface\AddOns\Details\images\icons]], icontexcoords = {432/512, 464/512, 276/512, 309/512}, name = Loc ["STRING_OPTIONS_CHANGE_CLASSCOLORS"], desc = Loc ["STRING_OPTIONS_CHANGE_CLASSCOLORS_DESC"], }, {--bookmarks type = "execute", func = function(self) Details:OpenBookmarkConfig() end, icontexture = [[Interface\LootFrame\toast-star]], icontexcoords = {0.1, .64, 0.1, .69}, name = Loc ["STRING_OPTIONS_WC_BOOKMARK"], desc = Loc ["STRING_OPTIONS_WC_BOOKMARK_DESC"], }, {type = "blank"}, {type = "label", get = function() return "Immersion" end, text_template = subSectionTitleTextTemplate}, --localize-me {--show pets when solo type = "toggle", get = function() return Details.immersion_pets_on_solo_play end, set = function(self, fixedparam, value) Details.immersion_pets_on_solo_play = value afterUpdate() end, name = "Show pets when solo", --localize-me desc = "Show pets when solo", boxfirst = true, }, {--always show players even on stardard mode type = "toggle", get = function() return Details.all_players_are_group end, set = function(self, fixedparam, value) Details.all_players_are_group = value afterUpdate() end, name = Loc ["STRING_OPTIONS_ALWAYSSHOWPLAYERS"], desc = Loc ["STRING_OPTIONS_ALWAYSSHOWPLAYERS_DESC"], boxfirst = true, }, {type = "breakline"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_SOCIAL"] end, text_template = subSectionTitleTextTemplate}, {--nickname type = "textentry", get = function() return Details:GetNickname(_G.UnitName("player"), _G.UnitName("player"), true) or "" end, func = function(self, _, text) local accepted, errortext = Details:SetNickname(text) if (not accepted) then Details:ResetPlayerPersona() Details222.OptionsPanel.SetCurrentInstanceAndRefresh(currentInstance) end afterUpdate() end, name = Loc ["STRING_OPTIONS_NICKNAME"], desc = Loc ["STRING_OPTIONS_NICKNAME"], }, {--remove nickname type = "execute", func = function(self) Details:ResetPlayerPersona() Details222.OptionsPanel.SetCurrentInstanceAndRefresh(currentInstance) end, icontexture = [[Interface\GLUES\LOGIN\Glues-CheckBox-Check]], --icontexcoords = {160/512, 179/512, 142/512, 162/512}, name = "Reset Nickname", desc = "Reset Nickname", }, {--ignore nicknames type = "toggle", get = function() return Details.ignore_nicktag end, set = function(self, fixedparam, value) Details.ignore_nicktag = value afterUpdate() end, name = Loc ["STRING_OPTIONS_IGNORENICKNAME"], desc = Loc ["STRING_OPTIONS_IGNORENICKNAME_DESC"], boxfirst = true, }, {--remove realm name type = "toggle", get = function() return Details.remove_realm_from_name end, set = function(self, fixedparam, value) Details.remove_realm_from_name = value afterUpdate() end, name = Loc ["STRING_OPTIONS_REALMNAME"], desc = Loc ["STRING_OPTIONS_REALMNAME_DESC"], boxfirst = true, }, {type = "blank"}, {type = "label", get = function() return "Your Self" end, text_template = subSectionTitleTextTemplate}, {--player bar color toggle type = "toggle", get = function() return Details.use_self_color end, set = function(self, fixedparam, value) Details.use_self_color = value afterUpdate() end, name = "Use Different Color for You", desc = "Use a different color on your own bar", boxfirst = true, }, {--player bar color type = "color", get = function() local r, g, b = unpack(Details.class_colors.SELF) return {r, g, b, 1} end, set = function(self, r, g, b, a) Details.class_colors.SELF[1] = r Details.class_colors.SELF[2] = g Details.class_colors.SELF[3] = b afterUpdate() end, name = "Your Bar Color", desc = "Your Bar Color", boxfirst = true, }, {type = "blank"}, {type = "label", get = function() return "Auto Erase:" end, text_template = subSectionTitleTextTemplate}, {--auto erase settings | erase data type = "select", get = function() return Details.segments_auto_erase end, values = function() return buildEraseDataMenu() end, name = Loc ["STRING_OPTIONS_ED"], desc = Loc ["STRING_OPTIONS_ED_DESC"], }, {--auto erase trash segments type = "toggle", get = function() return Details.trash_auto_remove end, set = function(self, fixedparam, value) Details.trash_auto_remove = value afterUpdate() end, name = Loc ["STRING_OPTIONS_CLEANUP"], desc = Loc ["STRING_OPTIONS_CLEANUP_DESC"], boxfirst = true, }, {--auto erase world segments type = "toggle", get = function() return Details.world_combat_is_trash end, set = function(self, fixedparam, value) Details.world_combat_is_trash = value afterUpdate() end, name = Loc ["STRING_OPTIONS_PERFORMANCE_ERASEWORLD"], desc = Loc ["STRING_OPTIONS_PERFORMANCE_ERASEWORLD_DESC"], boxfirst = true, }, {--erase chart data type = "toggle", get = function() return Details.clear_graphic end, set = function(self, fixedparam, value) Details.clear_graphic = value afterUpdate() end, name = Loc ["STRING_OPTIONS_ERASECHARTDATA"], desc = Loc ["STRING_OPTIONS_ERASECHARTDATA_DESC"], boxfirst = true, }, } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize+40, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) end tinsert(Details.optionsSection, buildSection) --optionsSection is declared on boot.lua end -- ~02 - skins do local buildSection = function(sectionFrame) function Details:OptionPanelOnChangeSkin(skinName) self:ChangeSkin(skinName) if (self._ElvUIEmbed) then local AS, ASL = unpack(_G.AddOnSkins) AS:Embed_Details() end end --skin selection local onSelectSkin = function(_, _, skinName) if (isGroupEditing()) then Details:InstanceGroupCall(currentInstance, "OptionPanelOnChangeSkin", skinName) else currentInstance:OptionPanelOnChangeSkin(skinName) end afterUpdate() end local buildSkinMenu = function() local skinOptions = {} for skin_name, skin_table in pairs(Details.skins) do local file = skin_table.file:gsub([[Interface\AddOns\Details\images\skins\]], "") local desc = "Author: |cFFFFFFFF" .. skin_table.author .. "|r\nVersion: |cFFFFFFFF" .. skin_table.version .. "|r\nSite: |cFFFFFFFF" .. skin_table.site .. "|r\n\nDesc: |cFFFFFFFF" .. skin_table.desc .. "|r\n\nFile: |cFFFFFFFF" .. file .. ".tga|r" skinOptions [#skinOptions+1] = {value = skin_name, label = skin_name, onclick = onSelectSkin, icon = "Interface\\GossipFrame\\TabardGossipIcon", desc = desc} end return skinOptions end --save skin local saveAsSkin = function(skinName, dontSave) local fileName = skinName or "" if (fileName == "") then return end local savedObject = { version = presetVersion, name = skinName, } for key, value in pairs(currentInstance) do if (Details.instance_defaults[key] ~= nil) then if (type(value) == "table") then savedObject[key] = Details.CopyTable(value) else savedObject[key] = value end end end if (not dontSave) then Details.savedStyles[#Details.savedStyles+1] = savedObject end return savedObject end --load skin local loadSkin = function(instance, skinObject) function Details:LoadSkinFromOptionsPanel(skinObject) --set skin preset local instance = self local skin = skinObject.skin instance.skin = "" instance:ChangeSkin(skin) --overwrite all instance parameters with saved ones for key, value in pairs(skinObject) do if (key ~= "skin" and not Details.instance_skin_ignored_values[key]) then if (type(value) == "table") then instance[key] = Details.CopyTable(value) else instance[key] = value end end end --apply all changed attributes instance:ChangeSkin() end if (isGroupEditing()) then Details:InstanceGroupCall(instance, "LoadSkinFromOptionsPanel", skinObject) else instance:LoadSkinFromOptionsPanel(skinObject) end end --import skin string local importSaved = function() --when clicking in the okay button in the import window, it send the text in the first argument Details:ShowImportWindow("", function(skinString) if (type(skinString) ~= "string" or string.len(skinString) < 2) then return end skinString = DF:Trim(skinString) local dataTable = Details:DecompressData (skinString, "print") if (dataTable) then --add the new skin Details.savedStyles [#Details.savedStyles+1] = dataTable Details:Msg(Loc ["STRING_OPTIONS_SAVELOAD_IMPORT_OKEY"]) Details222.OptionsPanel.SetCurrentInstanceAndRefresh(currentInstance) afterUpdate() else Details:Msg(Loc ["STRING_CUSTOM_IMPORT_ERROR"]) end end, "Details! Import Skin (paste string)") --localize-me end local sectionOptions = { {type = "label", get = function() return Loc ["STRING_OPTIONS_SKIN_SELECT_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--skin selection type = "select", get = function() return currentInstance.skin end, values = function() return buildSkinMenu() end, name = Loc ["STRING_OPTIONS_INSTANCE_SKIN"], desc = Loc ["STRING_OPTIONS_INSTANCE_SKIN_DESC"], }, {--custom skin file type = "textentry", get = function() return currentInstance.skin_custom or "" end, func = function(self, _, text) local fileName = text or "" Details:InstanceGroupCall(currentInstance, "SetUserCustomSkinFile", fileName) afterUpdate() end, name = Loc ["STRING_CUSTOM_SKIN_TEXTURE"], desc = Loc ["STRING_CUSTOM_SKIN_TEXTURE_DESC"], }, {--remove custom skin file type = "execute", func = function(self) Details:InstanceGroupCall(currentInstance, "SetUserCustomSkinFile", "") Details222.OptionsPanel.SetCurrentInstanceAndRefresh(currentInstance) afterUpdate() end, icontexture = [[Interface\GLUES\LOGIN\Glues-CheckBox-Check]], --icontexcoords = {160/512, 179/512, 142/512, 162/512}, name = "Reset Custom Skin", desc = "Reset Custom Skin", }, {--save as skin type = "textentry", get = function() return "" end, set = function(self, _, text) saveAsSkin(text) Details222.OptionsPanel.SetCurrentInstanceAndRefresh(currentInstance) Details:Msg(Loc ["STRING_OPTIONS_SAVELOAD_SKINCREATED"]) afterUpdate() end, name = Loc ["STRING_OPTIONS_SAVELOAD_SAVE"], desc = Loc ["STRING_OPTIONS_SAVELOAD_CREATE_DESC"], }, {--apply to all type = "execute", func = function(self) local tempPreset = saveAsSkin("temp", true) for instanceId, instance in Details:ListInstances() do if (instance ~= currentInstance) then if (not instance:IsStarted()) then instance:RestoreWindow() loadSkin(instance, tempPreset) instance:Shutdown() else loadSkin(instance, tempPreset) afterUpdate(instance) end end end Details:Msg(Loc ["STRING_OPTIONS_SAVELOAD_APPLYALL"]) Details222.OptionsPanel.SetCurrentInstanceAndRefresh(currentInstance) afterUpdate() end, icontexture = [[Interface\Buttons\UI-HomeButton]], icontexcoords = {1/16, 14/16, 0, 1}, name = Loc ["STRING_OPTIONS_SAVELOAD_APPLYTOALL"], desc = Loc ["STRING_OPTIONS_SAVELOAD_APPLYALL_DESC"], }, {type = "blank"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_SKIN_PRESETS_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--apply custom skin type = "select", get = function() return 0 end, values = function() local loadtable = {} for index, _table in ipairs(Details.savedStyles) do tinsert(loadtable, {value = index, label = _table.name, onclick = function() loadSkin(currentInstance, _table) end, icon = "Interface\\GossipFrame\\TabardGossipIcon", iconcolor = {.7, .7, .5, 1}}) end return loadtable end, name = Loc ["STRING_OPTIONS_SKIN_SELECT"], desc = Loc ["STRING_OPTIONS_SKIN_SELECT"], }, {--erase custom skin type = "select", get = function() return 0 end, values = function() local loadtable = {} for index, _table in ipairs(Details.savedStyles) do tinsert(loadtable, {value = index, label = _table.name, onclick = function(_, _, index) table.remove (Details.savedStyles, index) Details222.OptionsPanel.SetCurrentInstanceAndRefresh(currentInstance) afterUpdate() Details:Msg(Loc ["STRING_OPTIONS_SKIN_REMOVED"]) end, icon = [[Interface\Glues\LOGIN\Glues-CheckBox-Check]], color = {1, 1, 1}, iconcolor = {1, .9, .9, 0.8}}) end return loadtable end, name = Loc ["STRING_OPTIONS_SAVELOAD_REMOVE"], desc = Loc ["STRING_OPTIONS_SAVELOAD_REMOVE"], }, {--export custom skin type = "select", get = function() return 0 end, values = function() local loadtable = {} for index, _table in ipairs(Details.savedStyles) do tinsert(loadtable, {value = index, label = _table.name, onclick = function(_, _, index) local compressedData = Details:CompressData(Details.savedStyles[index], "print") if (compressedData) then Details:ShowImportWindow(compressedData, nil, "Details! Export Skin") else Details:Msg("failed to export skin.") --localize-me end Details222.OptionsPanel.SetCurrentInstanceAndRefresh(currentInstance) afterUpdate() end, icon = [[Interface\Buttons\UI-GuildButton-MOTD-Up]], color = {1, 1, 1}, iconcolor = {1, .9, .9, 0.8}, texcoord = {1, 0, 0, 1}}) end return loadtable end, name = Loc ["STRING_OPTIONS_SAVELOAD_EXPORT"], desc = Loc ["STRING_OPTIONS_SAVELOAD_EXPORT_DESC"], }, {--import custom skin string type = "execute", func = function(self) importSaved() end, icontexture = [[Interface\Buttons\UI-GuildButton-MOTD-Up]], icontexcoords = {1, 0, 0, 1}, name = Loc ["STRING_OPTIONS_SAVELOAD_IMPORT"], desc = Loc ["STRING_OPTIONS_SAVELOAD_IMPORT_DESC"], }, {type = "breakline"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_TABEMB_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--chat tab embed enabled type = "toggle", get = function() return Details.chat_tab_embed.enabled end, set = function(self, fixedparam, value) Details.chat_embed:SetTabSettings(nil, value) Details222.OptionsPanel.SetCurrentInstanceAndRefresh(currentInstance) afterUpdate() end, name = Loc ["STRING_ENABLED"], desc = Loc ["STRING_OPTIONS_TABEMB_ENABLED_DESC"], }, {--tab name type = "textentry", get = function() return Details.chat_tab_embed.tab_name or "" end, func = function(self, _, text) Details.chat_embed:SetTabSettings(text) end, name = Loc ["STRING_OPTIONS_TABEMB_TABNAME"], desc = Loc ["STRING_OPTIONS_TABEMB_TABNAME_DESC"], }, {--single window type = "toggle", get = function() return Details.chat_tab_embed.single_window end, set = function(self, fixedparam, value) Details.chat_embed:SetTabSettings (nil, nil, value) Details222.OptionsPanel.SetCurrentInstanceAndRefresh(currentInstance) afterUpdate() end, name = Loc ["STRING_OPTIONS_TABEMB_SINGLE"], desc = Loc ["STRING_OPTIONS_TABEMB_SINGLE_DESC"], }, {--chat tab width offset type = "range", get = function() return tonumber(Details.chat_tab_embed.x_offset) end, set = function(self, fixedparam, value) Details.chat_tab_embed.x_offset = value if (Details.chat_embed.enabled) then Details.chat_embed:DoEmbed() end afterUpdate() end, min = -100, max = 100, step = 1, name = "Width Offset", --localize-me desc = "Fine tune the size of the window while embeded in the chat.", --localize-me }, {--chat tab height offset type = "range", get = function() return tonumber(Details.chat_tab_embed.y_offset) end, set = function(self, fixedparam, value) Details.chat_tab_embed.y_offset = value if (Details.chat_embed.enabled) then Details.chat_embed:DoEmbed() end afterUpdate() end, min = -100, max = 100, step = 1, name = "Height Offset", --localize-me desc = "Fine tune the size of the window while embeded in the chat.", --localize-me }, } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) end tinsert(Details.optionsSection, buildSection) end -- ~03 - bars general do --bar grow direction local set_bar_grow_direction = function(_, instance, value) editInstanceSetting(currentInstance, "SetBarGrowDirection", value) afterUpdate() end local grow_icon_size = {14, 14} local orientation_icon_size = {14, 14} local grow_options = { {value = 1, label = Loc ["STRING_TOP_TO_BOTTOM"], iconsize = orientation_icon_size, onclick = set_bar_grow_direction, icon = [[Interface\Calendar\MoreArrow]], texcoord = {0, 1, 0, 0.7}}, {value = 2, label = Loc ["STRING_BOTTOM_TO_TOP"], iconsize = orientation_icon_size, onclick = set_bar_grow_direction, icon = [[Interface\Calendar\MoreArrow]], texcoord = {0, 1, 0.7, 0}} } local growMenu = function() return grow_options end --bar orientation local set_bar_orientation = function(_, instance, value) editInstanceSetting(currentInstance, "SetBarOrientationDirection", value) afterUpdate() end local orientation_options = { {value = false, label = Loc ["STRING_LEFT_TO_RIGHT"], iconsize = orientation_icon_size, onclick = set_bar_orientation, icon = [[Interface\CHATFRAME\ChatFrameExpandArrow]]}, {value = true, label = Loc ["STRING_RIGHT_TO_LEFT"], iconsize = orientation_icon_size, onclick = set_bar_orientation, icon = [[Interface\CHATFRAME\ChatFrameExpandArrow]], texcoord = {1, 0, 0, 1}} } local orientation_menu = function() return orientation_options end --sort direction local set_bar_sorting = function(_, instance, value) editInstanceSetting(currentInstance, "bars_sort_direction", value) Details:RefreshMainWindow(-1, true) afterUpdate() end local sorting_options = { {value = 1, label = Loc ["STRING_DESCENDING"], iconsize ={14, 14}, onclick = set_bar_sorting, icon = [[Interface\Calendar\MoreArrow]], texcoord = {0, 1, 0, 0.7}}, {value = 2, label = Loc ["STRING_ASCENDING"], iconsize = {14, 14}, onclick = set_bar_sorting, icon = [[Interface\Calendar\MoreArrow]], texcoord = {0, 1, 0.7, 0}} } local sorting_menu = function() return sorting_options end --select texture local texture_icon = [[Interface\TARGETINGFRAME\UI-PhasingIcon]] local texture_icon = [[Interface\AddOns\Details\images\icons]] local texture_icon_size = {14, 14} local texture_texcoord = {469/512, 505/512, 249/512, 284/512} local onSelectTexture = function(_, instance, textureName) editInstanceSetting(currentInstance, "SetBarSettings", nil, textureName) afterUpdate() end local buildTextureMenu = function() local textures = SharedMedia:HashTable("statusbar") local texTable = {} for name, texturePath in pairs(textures) do texTable[#texTable+1] = {value = name, label = name, iconsize = texture_icon_size, statusbar = texturePath, onclick = onSelectTexture, icon = texture_icon, texcoord = texture_texcoord} end table.sort (texTable, function(t1, t2) return t1.label < t2.label end) return texTable end --select background texture local onSelectTextureBackground = function(_, instance, textureName) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, textureName) afterUpdate() end local buildTextureMenu2 = function() local textures2 = SharedMedia:HashTable ("statusbar") local texTable2 = {} for name, texturePath in pairs(textures2) do texTable2[#texTable2+1] = {value = name, label = name, iconsize = texture_icon_size, statusbar = texturePath, onclick = onSelectTextureBackground, icon = texture_icon, texcoord = texture_texcoord} end table.sort (texTable2, function(t1, t2) return t1.label < t2.label end) return texTable2 end --select icon file from dropdown local OnSelectIconFileSpec = function(_, _, iconpath) editInstanceSetting(currentInstance, "SetBarSpecIconSettings", true, iconpath, true) afterUpdate() end local OnSelectIconFile = function(_, _, iconpath) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, nil, nil, nil, iconpath) if (currentInstance.row_info.use_spec_icons) then editInstanceSetting(currentInstance, "SetBarSpecIconSettings", false) end afterUpdate() end local onSelectBarTextureOverlay = function(_, instance, textureName) editInstanceSetting(currentInstance, "SetBarOverlaySettings", textureName) end local buildTextureOverlayMenu = function() local textures2 = SharedMedia:HashTable("statusbar") local texTable2 = {} for name, texturePath in pairs(textures2) do texTable2[#texTable2+1] = {value = name, label = name, iconsize = texture_icon_size, statusbar = texturePath, onclick = onSelectBarTextureOverlay, icon = texture_icon, texcoord = texture_texcoord} end table.sort(texTable2, function(t1, t2) return t1.label < t2.label end) return texTable2 end local builtIconList = function() for k,v in ipairs(Details222.BarIconSetList) do if v.isSpec then v.onclick = OnSelectIconFileSpec else v.onclick = OnSelectIconFile end end return Details222.BarIconSetList end local buildSection = function(sectionFrame) local sectionOptions = { {--line height type = "range", get = function() return tonumber(currentInstance.row_info.height) end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarSettings", value) afterUpdate() end, min = 10, max = 30, step = 1, name = Loc ["STRING_OPTIONS_BAR_HEIGHT"], desc = Loc ["STRING_OPTIONS_BAR_HEIGHT_DESC"], }, {--padding type = "range", get = function() return tonumber(currentInstance.row_info.space.between) end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, min = -2, max = 10, step = 1, name = Loc ["STRING_OPTIONS_BAR_SPACING"], desc = Loc ["STRING_OPTIONS_BAR_SPACING_DESC"], }, {--disable highlight type = "toggle", get = function() return Details.instances_disable_bar_highlight end, set = function(self, fixedparam, value) Details.instances_disable_bar_highlight = value afterUpdate() end, name = Loc ["STRING_OPTIONS_DISABLE_BARHIGHLIGHT"], desc = Loc ["STRING_OPTIONS_DISABLE_BARHIGHLIGHT_DESC"], }, {--fast dps updates type = "toggle", get = function() return currentInstance.row_info.fast_ps_update end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "row_info", "fast_ps_update", value) afterUpdate() end, name = Loc ["STRING_OPTIONS_BARUR_ANCHOR"], desc = Loc ["STRING_OPTIONS_BARUR_DESC"], }, {--always show me type = "toggle", get = function() return currentInstance.following.enabled end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "following", "enabled", value) afterUpdate() end, name = Loc ["STRING_OPTIONS_BAR_FOLLOWING"], desc = Loc ["STRING_OPTIONS_BAR_FOLLOWING_DESC"], }, {--grow direction type = "select", get = function() return currentInstance.bars_grow_direction end, values = function() return growMenu() end, name = Loc ["STRING_OPTIONS_BAR_GROW"], desc = Loc ["STRING_OPTIONS_BAR_GROW_DESC"], }, {--bar orientation type = "select", get = function() return currentInstance.bars_inverted and 2 or 1 end, values = function() return orientation_menu() end, name = Loc ["STRING_OPTIONS_BARORIENTATION"], desc = Loc ["STRING_OPTIONS_BARORIENTATION_DESC"], }, {--bar sort direction type = "select", get = function() return currentInstance.bars_sort_direction end, values = function() return sorting_menu() end, name = Loc ["STRING_OPTIONS_BARSORT"], desc = Loc ["STRING_OPTIONS_BARSORT_DESC"], }, {type = "blank"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_TEXT_TEXTUREU_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--select texture type = "select", get = function() return currentInstance.row_info.texture end, values = function() return buildTextureMenu() end, name = Loc ["STRING_TEXTURE"], desc = Loc ["STRING_OPTIONS_BAR_TEXTURE_DESC"], }, {--custom texture type = "textentry", get = function() return currentInstance.row_info.texture_custom end, func = function(self, _, text) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, text) afterUpdate() end, name = Loc ["STRING_OPTIONS_BARS_CUSTOM_TEXTURE"], desc = Loc ["STRING_CUSTOM_TEXTURE_GUIDE"] }, {--remove custom texture type = "execute", func = function(self) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, "") afterUpdate() end, icontexture = [[Interface\Buttons\UI-GroupLoot-Pass-Down]], --icontexcoords = {160/512, 179/512, 142/512, 162/512}, name = "Remove Custom Texture", --localize-me desc = "Remove Custom Texture", }, {--bar color type = "color", get = function() local r, g, b = unpack(currentInstance.row_info.fixed_texture_color) local alpha = currentInstance.row_info.alpha return {r, g, b, alpha} end, set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, {r, g, b}) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, nil, nil, a) afterUpdate() end, name = Loc ["STRING_COLOR"], desc = Loc ["STRING_OPTIONS_BAR_COLOR_DESC"], }, {--color by player class type = "toggle", get = function() return currentInstance.row_info.texture_class_colors end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_BAR_COLORBYCLASS"], desc = Loc ["STRING_OPTIONS_BAR_COLORBYCLASS_DESC"], }, {type = "blank"}, {type = "label", get = function() return "Overlay:" end, text_template = subSectionTitleTextTemplate}, {--overlay texture type = "select", get = function() return currentInstance.row_info.overlay_texture end, values = function() return buildTextureOverlayMenu() end, name = Loc ["STRING_TEXTURE"], desc = "Texture which sits above the bar", }, {--overlay color type = "color", get = function() local r, g, b, a = unpack(currentInstance.row_info.overlay_color) return {r, g, b, a} end, set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetBarOverlaySettings", nil, {r, g, b, a}) afterUpdate() end, name = Loc ["STRING_COLOR"], desc = Loc ["STRING_COLOR"], }, {type = "blank"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_TEXT_TEXTUREL_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--select background texture type = "select", get = function() return currentInstance.row_info.texture_background end, values = function() return buildTextureMenu2() end, name = Loc ["STRING_TEXTURE"], desc = Loc ["STRING_OPTIONS_BAR_BTEXTURE_DESC"], }, {--background color type = "color", get = function() local r, g, b, a = unpack(currentInstance.row_info.fixed_texture_background_color) return {r, g, b, a} end, set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, nil, {r, g, b, a}) afterUpdate() end, name = Loc ["STRING_COLOR"], desc = Loc ["STRING_OPTIONS_BAR_COLOR_DESC"], }, {--background uses class colors type = "toggle", get = function() return currentInstance.row_info.texture_background_class_color end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_BAR_COLORBYCLASS"], desc = Loc ["STRING_OPTIONS_BAR_COLORBYCLASS_DESC"], }, {type = "breakline"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_TEXT_ROWICONS_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--select icon file type = "select", get = function(self) local default if (currentInstance.row_info.use_spec_icons) then default = currentInstance.row_info.spec_file else default = currentInstance.row_info.icon_file end return default end, values = function() return builtIconList() end, name = Loc ["STRING_TEXTURE"], desc = Loc ["STRING_OPTIONS_BAR_ICONFILE_DESC2"], }, {--custom icon path type = "textentry", get = function() local default if (currentInstance.row_info.use_spec_icons) then default = currentInstance.row_info.spec_file else default = currentInstance.row_info.icon_file end return default end, func = function(self, _, text) if (text:find("spec_")) then editInstanceSetting(currentInstance, "SetBarSpecIconSettings", true, text, true) else if (currentInstance.row_info.use_spec_icons) then editInstanceSetting(currentInstance, "SetBarSpecIconSettings", false) end editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, nil, nil, nil, text) end Details222.OptionsPanel.SetCurrentInstanceAndRefresh(currentInstance) afterUpdate() end, name = Loc ["STRING_OPTIONS_BARS_CUSTOM_TEXTURE"], desc = Loc ["STRING_CUSTOM_TEXTURE_GUIDE"], }, {--bar start after icon type = "toggle", get = function() return currentInstance.row_info.start_after_icon end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_BARSTART"], desc = Loc ["STRING_OPTIONS_BARSTART_DESC"], }, {--icon size offset type = "range", get = function() return tonumber(currentInstance.row_info.icon_size_offset) end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, min = -20, max = 20, usedecimals = true, step = 0.5, name = "Icon Size Offset", --localize-me desc = "Icon Size Offset", thumbscale = 2.2, }, {type = "blank"}, {--show faction icon type = "toggle", get = function() return currentInstance.row_info.show_faction_icon end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarFactionIconSettings", value) afterUpdate() end, name = "Show Faction Icon", --localize-me desc = "When showing a player from the opposite faction, show the faction icon.", }, {--faction icon size offset type = "range", get = function() return tonumber(currentInstance.row_info.faction_icon_size_offset) end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarFactionIconSettings", nil, value) afterUpdate() end, min = -20, max = 20, usedecimals = true, step = 0.5, name = "Faction Icon Size Offset", --localize-me desc = "Faction Icon Size Offset", thumbscale = 2.2, }, {type = "blank"}, {--show role icon type = "toggle", get = function() return currentInstance.row_info.show_arena_role_icon end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarArenaRoleIconSettings", value) afterUpdate() end, name = "Show Arena Role Icon", --localize-me desc = "When showing a player from arena, show the role icon.", }, {--role icon size offset type = "range", get = function() return tonumber(currentInstance.row_info.arena_role_icon_size_offset) end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarArenaRoleIconSettings", nil, value) afterUpdate() end, min = -20, max = 20, usedecimals = true, step = 0.5, name = "Arena Role Icon Size Offset", --localize-me desc = "Arena Role Icon Size Offset", thumbscale = 2.2, }, {type = "blank"}, --{type = "breakline"}, {type = "label", get = function() return Loc["STRING_OPTIONS_ALIGNED_TEXT_COLUMNS"] end, text_template = subSectionTitleTextTemplate}, {--inline text enabled type = "toggle", get = function() return currentInstance.use_multi_fontstrings end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "use_multi_fontstrings", value) editInstanceSetting(currentInstance, "InstanceRefreshRows") Details:RefreshMainWindow(-1, true) afterUpdate() end, name = Loc ["STRING_ENABLED"], desc = Loc ["STRING_OPTIONS_ALIGNED_TEXT_COLUMNS_DESC"], }, {--inline auto align enabled type = "toggle", get = function() return currentInstance.use_auto_align_multi_fontstrings end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "use_auto_align_multi_fontstrings", value) editInstanceSetting(currentInstance, "InstanceRefreshRows") Details:RefreshMainWindow(-1, true) afterUpdate() end, name = Loc ["STRING_OPTIONS_ALIGNED_TEXT_COLUMNS_AUTOALIGN"], desc = Loc ["STRING_OPTIONS_ALIGNED_TEXT_COLUMNS_AUTOALIGN_DESC"], }, {--name size offset type = "range", get = function() return tonumber(currentInstance.fontstrings_text_limit_offset) end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "fontstrings_text_limit_offset", value) editInstanceSetting(currentInstance, "InstanceRefreshRows") Details222.OptionsPanel.RefreshInstances(currentInstance) afterUpdate() end, min = -30, max = 30, step = 1, name = "Unit Name Size Offset", desc = "Unit Name Size Offset", }, {--lineText2 (left, usuali is the 'done' amount) type = "range", get = function() return tonumber(currentInstance.fontstrings_text2_anchor) end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "fontstrings_text2_anchor", value) editInstanceSetting(currentInstance, "InstanceRefreshRows") afterUpdate() end, min = -10, max = 125, step = 1, name = string.format(Loc["STRING_OPTIONS_ALIGNED_TEXT_COLUMNS_OFFSET"], 1), desc = Loc["STRING_OPTIONS_ALIGNED_TEXT_COLUMNS_OFFSET_DESC"], }, {--lineText3 (in the middle) type = "range", get = function() return tonumber(currentInstance.fontstrings_text3_anchor) end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "fontstrings_text3_anchor", value) editInstanceSetting(currentInstance, "InstanceRefreshRows") afterUpdate() end, min = -10, max = 75, step = 1, name = string.format(Loc["STRING_OPTIONS_ALIGNED_TEXT_COLUMNS_OFFSET"], 2), desc = Loc["STRING_OPTIONS_ALIGNED_TEXT_COLUMNS_OFFSET_DESC"], }, {--lineText4 (closest to the right) type = "range", get = function() return tonumber(currentInstance.fontstrings_text4_anchor) end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "fontstrings_text4_anchor", value) editInstanceSetting(currentInstance, "InstanceRefreshRows") afterUpdate() end, min = -10, max = 50, step = 1, name = string.format(Loc["STRING_OPTIONS_ALIGNED_TEXT_COLUMNS_OFFSET"], 3), desc = Loc["STRING_OPTIONS_ALIGNED_TEXT_COLUMNS_OFFSET_DESC"], }, {type = "breakline"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_TOTALBAR_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--total bar enabled type = "toggle", get = function() return currentInstance.total_bar.enabled end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "total_bar", "enabled", value) afterUpdate() Details222.OptionsPanel.RefreshInstances(currentInstance) end, name = Loc ["STRING_ENABLED"], desc = Loc ["STRING_OPTIONS_SHOW_TOTALBAR_DESC"], }, {--only in group type = "toggle", get = function() return currentInstance.total_bar.only_in_group end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "total_bar", "only_in_group", value) afterUpdate() end, name = Loc ["STRING_OPTIONS_SHOW_TOTALBAR_INGROUP"], desc = Loc ["STRING_OPTIONS_SHOW_TOTALBAR_INGROUP_DESC"], }, {--color type = "color", get = function() local r, g, b = unpack(currentInstance.total_bar.color) return {r, g, b, 1} end, set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "total_bar", "color", {r, g, b, 1}) afterUpdate() end, name = Loc ["STRING_COLOR"], desc = Loc ["STRING_OPTIONS_SHOW_TOTALBAR_COLOR_DESC"], }, {type = "blank"}, {type = "label", get = function() return "Arena Team Color" end, text_template = subSectionTitleTextTemplate}, --localize-me {--team 1 color type = "color", get = function() local r, g, b = unpack(Details.class_colors.ARENA_GREEN) return {r, g, b, 1} end, set = function(self, r, g, b, a) Details.class_colors.ARENA_GREEN[1] = r Details.class_colors.ARENA_GREEN[2] = g Details.class_colors.ARENA_GREEN[3] = b afterUpdate() end, name = Loc ["STRING_COLOR"], desc = "Arena team color", --localize-me }, {--team 2 color type = "color", get = function() local r, g, b = unpack(Details.class_colors.ARENA_YELLOW) return {r, g, b, 1} end, set = function(self, r, g, b, a) Details.class_colors.ARENA_YELLOW[1] = r Details.class_colors.ARENA_YELLOW[2] = g Details.class_colors.ARENA_YELLOW[3] = b afterUpdate() end, name = Loc ["STRING_COLOR"], desc = "Arena team color", --localize-me }, {type = "blank"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_BAR_BACKDROP_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--border enabled type = "toggle", get = function() return currentInstance.row_info.backdrop.enabled end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarBackdropSettings", value) afterUpdate() end, name = Loc ["STRING_ENABLED"], desc = Loc ["STRING_OPTIONS_BAR_BACKDROP_ENABLED_DESC"], }, {--border color type = "color", get = function() local r, g, b, a = unpack(currentInstance.row_info.backdrop.color) return {r, g, b, a} end, set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetBarBackdropSettings", nil, nil, {r, g, b, a}) afterUpdate() end, name = Loc ["STRING_COLOR"], desc = Loc ["STRING_OPTIONS_BAR_BACKDROP_COLOR_DESC"], }, {--border size type = "range", get = function() return tonumber(currentInstance.row_info.backdrop.size) end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarBackdropSettings", nil, value) afterUpdate() end, min = 0, max = 10, step = 1, usedecimals = true, name = Loc ["STRING_OPTIONS_SIZE"], desc = Loc ["STRING_OPTIONS_BAR_BACKDROP_SIZE_DESC"], thumbscale = 1.5, }, {--border uses class colors type = "toggle", get = function() return currentInstance.row_info.backdrop.use_class_colors end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarBackdropSettings", nil, nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_BAR_COLORBYCLASS"], desc = Loc ["STRING_OPTIONS_BAR_COLORBYCLASS_DESC"], }, } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize+40, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) end tinsert(Details.optionsSection, buildSection) end -- ~04 bars texts do --text font selection local onSelectFont = function(_, instance, fontName) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, fontName) afterUpdate() end local buildFontMenu = function() local fontObjects = SharedMedia:HashTable("font") local fontTable = {} for name, fontPath in pairs(fontObjects) do fontTable[#fontTable+1] = {value = name, label = name, icon = font_select_icon, texcoord = font_select_texcoord, onclick = onSelectFont, font = fontPath, descfont = name, desc = Loc ["STRING_MUSIC_DETAILS_ROBERTOCARLOS"]} end table.sort (fontTable, function(t1, t2) return t1.label < t2.label end) return fontTable end --percent type local onSelectPercent = function(_, instance, percentType) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, percentType) afterUpdate() end local buildPercentMenu = function() local percentTable = { {value = 1, label = "Relative to Total", onclick = onSelectPercent, icon = [[Interface\GROUPFRAME\UI-GROUP-MAINTANKICON]]}, {value = 2, label = "Relative to Top Player", onclick = onSelectPercent, icon = [[Interface\GROUPFRAME\UI-Group-LeaderIcon]]} } return percentTable end --brackets local onSelectBracket = function(_, instance, value) editInstanceSetting(currentInstance, "SetBarRightTextSettings", nil, nil, nil, value) afterUpdate() end local BracketTable = { {value = "(", label = "(", onclick = onSelectBracket, icon = ""}, {value = "{", label = "{", onclick = onSelectBracket, icon = ""}, {value = "[", label = "[", onclick = onSelectBracket, icon = ""}, {value = "<", label = "<", onclick = onSelectBracket, icon = ""}, {value = "NONE", label = "no bracket", onclick = onSelectBracket, icon = [[Interface\Glues\LOGIN\Glues-CheckBox-Check]]}, } local buildBracketMenu = function() return BracketTable end --separators local onSelectSeparator = function(_, instance, value) editInstanceSetting(currentInstance, "SetBarRightTextSettings", nil, nil, nil, nil, value) afterUpdate() end local separatorTable = { {value = ",", label = ",", onclick = onSelectSeparator, icon = ""}, {value = ".", label = ".", onclick = onSelectSeparator, icon = ""}, {value = ";", label = ";", onclick = onSelectSeparator, icon = ""}, {value = "-", label = "-", onclick = onSelectSeparator, icon = ""}, {value = "|", label = "|", onclick = onSelectSeparator, icon = ""}, {value = "/", label = "/", onclick = onSelectSeparator, icon = ""}, {value = "\\", label = "\\", onclick = onSelectSeparator, icon = ""}, {value = "~", label = "~", onclick = onSelectSeparator, icon = ""}, {value = "NONE", label = "no separator", onclick = onSelectSeparator, icon = [[Interface\Glues\LOGIN\Glues-CheckBox-Check]]}, } local buildSeparatorMenu = function() return separatorTable end local buildSection = function(sectionFrame) local sectionOptions = { {type = "label", get = function() return Loc ["STRING_OPTIONS_GENERAL_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--text color 1 type = "color", get = function() local r, g, b = unpack(currentInstance.row_info.fixed_text_color) return {r, g, b, 1} end, set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, {r, g, b, 1}) afterUpdate() end, name = Loc ["STRING_OPTIONS_TEXT_FIXEDCOLOR"], desc = Loc ["STRING_OPTIONS_TEXT_FIXEDCOLOR_DESC"], }, {--text size 2 type = "range", get = function() return currentInstance.row_info.font_size end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", value) afterUpdate() end, min = 5, max = 32, step = 1, name = Loc ["STRING_OPTIONS_TEXT_SIZE"], desc = Loc ["STRING_OPTIONS_TEXT_SIZE_DESC"], }, {--text yoffset type = "range", get = function() return currentInstance.row_info.text_yoffset end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, min = -10, max = 10, step = 1, name = "Text Y Offset", -- Loc ["STRING_OPTIONS_TEXT_YOFFSET"] desc = "Change the vertical offset for both left and right texts.", -- Loc ["STRING_OPTIONS_TEXT_YOFFSET_DESC"] }, {--text font 3 type = "select", get = function() return currentInstance.row_info.font_face end, values = function() return buildFontMenu() end, name = Loc ["STRING_OPTIONS_TEXT_FONT"], desc = Loc ["STRING_OPTIONS_TEXT_FONT_DESC"], }, {--percent type 4 type = "select", get = function() return currentInstance.row_info.percent_type end, values = function() return buildPercentMenu() end, name = Loc ["STRING_OPTIONS_PERCENT_TYPE"], desc = Loc ["STRING_OPTIONS_PERCENT_TYPE_DESC"], }, {type = "blank"}, --5 --left text options 6 {type = "label", get = function() return Loc ["STRING_OPTIONS_TEXT_LEFT_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--use class colors 7 type = "toggle", get = function() return currentInstance.row_info.textL_class_colors end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_BAR_COLORBYCLASS"], desc = Loc ["STRING_OPTIONS_TEXT_LCLASSCOLOR_DESC"], }, {--outline 8 type = "toggle", get = function() return currentInstance.row_info.textL_outline end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_TEXT_LOUTILINE"], desc = Loc ["STRING_OPTIONS_TEXT_LOUTILINE_DESC"], }, {--outline small 9 type = "toggle", get = function() return currentInstance.row_info.textL_outline_small end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, name = "Outline", --localize-me desc = "Text Outline", }, {--outline small color 10 type = "color", get = function() local r, g, b, a = unpack(currentInstance.row_info.textL_outline_small_color) return {r, g, b, a} end, set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, {r, g, b, a}) afterUpdate() end, name = "Outline Color", desc = "Outline Color", }, {--position number 11 type = "toggle", get = function() return currentInstance.row_info.textL_show_number end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_TEXT_LPOSITION"], desc = Loc ["STRING_OPTIONS_TEXT_LPOSITION_DESC"], }, {--translit text 12 type = "toggle", get = function() return currentInstance.row_info.textL_translit_text end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_TEXT_LTRANSLIT"], desc = Loc ["STRING_OPTIONS_TEXT_LTRANSLIT_DESC"], }, {--text offset type = "range", get = function() return currentInstance.row_info.textL_offset end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, min = -10, max = 50, step = 1, name = "Offset", -- Loc ["STRING_OPTIONS_TEXT_LOFFSET"] desc = "Change the horizontal offset.", -- Loc ["STRING_OPTIONS_TEXT_LOFFSET_DESC"] }, {type = "blank"}, --13 {--custom left text 14 type = "toggle", get = function() return currentInstance.row_info.textL_enable_custom_text end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_BARLEFTTEXTCUSTOM"], desc = Loc ["STRING_OPTIONS_BARLEFTTEXTCUSTOM_DESC"], }, {--open custom text editor 15 type = "execute", func = function(self) local callback = function(text) text = text:gsub("||", "|") text = DF:Trim(text) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, text) afterUpdate() end _G.DetailsWindowOptionsBarTextEditor:Open (currentInstance.row_info.textL_custom_text, callback, _G.DetailsOptionsWindow, Details.instance_defaults.row_info.textL_custom_text) end, icontexture = [[Interface\GLUES\LOGIN\Glues-CheckBox-Check]], --icontexcoords = {160/512, 179/512, 142/512, 162/512}, name = Loc ["STRING_OPTIONS_EDIT_CUSTOM_TEXT"], desc = Loc ["STRING_OPTIONS_OPEN_ROWTEXT_EDITOR"], }, {type = "breakline"}, --16 --right text options 17 {type = "label", get = function() return Loc ["STRING_OPTIONS_TEXT_RIGHT_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--use class colors 18 type = "toggle", get = function() return currentInstance.row_info.textR_class_colors end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_BAR_COLORBYCLASS"], desc = Loc ["STRING_OPTIONS_TEXT_LCLASSCOLOR_DESC"], }, {--outline 19 type = "toggle", get = function() return currentInstance.row_info.textR_outline end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_TEXT_LOUTILINE"], desc = Loc ["STRING_OPTIONS_TEXT_LOUTILINE_DESC"], }, {--outline small 20 type = "toggle", get = function() return currentInstance.row_info.textR_outline_small end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, name = "Outline", --localize-me desc = "Text Outline", }, {--outline small color 21 type = "color", get = function() local r, g, b, a = unpack(currentInstance.row_info.textR_outline_small_color) return {r, g, b, a} end, set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, {r, g, b, a}) afterUpdate() end, name = "Outline Color", desc = "Outline Color", }, {type = "blank"}, --22 {--show total --23 type = "toggle", get = function() return currentInstance.row_info.textR_show_data[1] end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarRightTextSettings", value) afterUpdate() end, name = Loc ["STRING_OPTIONS_TEXT_SHOW_TOTAL"], desc = Loc ["STRING_OPTIONS_TEXT_SHOW_TOTAL_DESC"], }, {--show per second 24 type = "toggle", get = function() return currentInstance.row_info.textR_show_data[2] end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarRightTextSettings", nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_TEXT_SHOW_PS"], desc = Loc ["STRING_OPTIONS_TEXT_SHOW_PS_DESC"], }, {--show percent 25 type = "toggle", get = function() return currentInstance.row_info.textR_show_data[3] end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarRightTextSettings", nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_TEXT_SHOW_PERCENT"], desc = Loc ["STRING_OPTIONS_TEXT_SHOW_PERCENT_DESC"], }, {type = "blank"}, --26 {--separator 27 type = "select", get = function() return currentInstance.row_info.textR_separator end, values = function() return buildSeparatorMenu() end, name = Loc ["STRING_OPTIONS_TEXT_SHOW_SEPARATOR"], desc = Loc ["STRING_OPTIONS_TEXT_SHOW_SEPARATOR_DESC"], }, {--brackets 28 type = "select", get = function() return currentInstance.row_info.textR_bracket end, values = function() return buildBracketMenu() end, name = Loc ["STRING_OPTIONS_TEXT_SHOW_BRACKET"], desc = Loc ["STRING_OPTIONS_TEXT_SHOW_BRACKET_DESC"], }, {type = "label", get = function() return Loc["STRING_OPTIONS_ALIGNED_TEXT_COLUMNS"] .. " (".. Loc["STRING_OPTIONSMENU_ROWSETTINGS"] ..")\n" .. Loc["STRING_OPTIONS_ALIGNED_TEXT_COLUMNS_WARNING"] end, text_template = subSectionTitleTextTemplate}, --29 {type = "blank"}, --30 {--custom right text 31 type = "toggle", get = function() return currentInstance.row_info.textR_enable_custom_text end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_BARLEFTTEXTCUSTOM"], desc = Loc ["STRING_OPTIONS_BARLEFTTEXTCUSTOM_DESC"], }, {--open custom text editor 32 type = "execute", func = function(self) local callback = function(text) text = text:gsub("||", "|") text = DF:Trim(text) editInstanceSetting(currentInstance, "SetBarTextSettings", nil, nil, nil, nil, nil, nil, nil, nil, text) afterUpdate() end _G.DetailsWindowOptionsBarTextEditor:Open (currentInstance.row_info.textR_custom_text, callback, _G.DetailsOptionsWindow, Details.instance_defaults.row_info.textL_custom_text) end, icontexture = [[Interface\GLUES\LOGIN\Glues-CheckBox-Check]], --icontexcoords = {160/512, 179/512, 142/512, 162/512}, name = Loc ["STRING_OPTIONS_EDIT_CUSTOM_TEXT"], desc = Loc ["STRING_OPTIONS_OPEN_ROWTEXT_EDITOR"], }, } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) local separatorOption = sectionFrame.widget_list[25] local bracketOption = sectionFrame.widget_list[26] local warningLabel = sectionFrame.widget_list[27] Details222.OptionsPanel.textSeparatorOption = separatorOption Details222.OptionsPanel.textbracketOption = bracketOption sectionFrame:SetScript("OnShow", function() if (currentInstance.use_multi_fontstrings) then separatorOption:Disable() bracketOption:Disable() warningLabel:Show() else separatorOption:Enable() bracketOption:Enable() warningLabel:Hide() end end) end tinsert(Details.optionsSection, buildSection) end -- ~05 - title bar do local func = function(menu_button) editInstanceSetting(currentInstance, "menu_icons", menu_button, not currentInstance.menu_icons[menu_button]) editInstanceSetting(currentInstance, "ToolbarMenuSetButtons") afterUpdate() end --menu text face local onSelectFont = function(_, _, fontName) Details.font_faces.menus = fontName end local buildFontMenu = function() local fontObjects = SharedMedia:HashTable ("font") local fontTable = {} for name, fontPath in pairs(fontObjects) do fontTable[#fontTable+1] = {value = name, label = name, icon = font_select_icon, texcoord = font_select_texcoord, onclick = onSelectFont, font = fontPath, descfont = name, desc = Loc ["STRING_MUSIC_DETAILS_ROBERTOCARLOS"]} end table.sort (fontTable, function(t1, t2) return t1.label < t2.label end) return fontTable end --attribute text font local on_select_attribute_font = function(self, instance, fontName) editInstanceSetting(currentInstance, "AttributeMenu", nil, nil, nil, fontName) afterUpdate() end local build_font_menu = function() local fonts = {} for name, fontPath in pairs(SharedMedia:HashTable ("font")) do fonts [#fonts+1] = {value = name, label = name, icon = font_select_icon, texcoord = font_select_texcoord, onclick = on_select_attribute_font, font = fontPath, descfont = name, desc = "Our thoughts strayed constantly\nAnd without boundary\nThe ringing of the division bell had began."} end table.sort (fonts, function(t1, t2) return t1.label < t2.label end) return fonts end --icon set menu local on_select_icon_set = function(self, instance, texturePath) editInstanceSetting(currentInstance, "toolbar_icon_file", texturePath) editInstanceSetting(currentInstance, "ChangeSkin") afterUpdate() end --custom title bar texture local onSelectCustomTitleBarTexture = function(_, instance, textureName) editInstanceSetting(currentInstance, "SetTitleBarSettings", nil, nil, textureName) editInstanceSetting(currentInstance, "RefreshTitleBar") end local buildTextureCustomTitleBar = function() local textures = SharedMedia:HashTable("statusbar") local texTable = {} for name, texturePath in pairs(textures) do texTable[#texTable+1] = {value = name, label = name, statusbar = texturePath, onclick = onSelectCustomTitleBarTexture} end table.sort(texTable, function(t1, t2) return t1.label < t2.label end) return texTable end local buildIconStyleMenu = function() local iconMenu = { {value = "Interface\\AddOns\\Details\\images\\toolbar_icons", label = "Set 1", icon = "Interface\\AddOns\\Details\\images\\toolbar_icons", texcoord = {0, 0.125, 0, 1}, onclick = on_select_icon_set}, {value = "Interface\\AddOns\\Details\\images\\toolbar_icons_shadow", label = "Set 2", icon = "Interface\\AddOns\\Details\\images\\toolbar_icons_shadow", texcoord = {0, 0.125, 0, 1}, onclick = on_select_icon_set}, {value = "Interface\\AddOns\\Details\\images\\toolbar_icons_2", label = "Set 3", icon = "Interface\\AddOns\\Details\\images\\toolbar_icons_2", texcoord = {0, 0.125, 0, 1}, onclick = on_select_icon_set}, {value = "Interface\\AddOns\\Details\\images\\toolbar_icons_2_shadow", label = "Set 4", icon = "Interface\\AddOns\\Details\\images\\toolbar_icons_2_shadow", texcoord = {0, 0.125, 0, 1}, onclick = on_select_icon_set}, } return iconMenu end local buttonWidth = 25 local buildSection = function(sectionFrame) local sectionOptions = { {type = "label", get = function() return "Title Bar" end, text_template = subSectionTitleTextTemplate}, {--use custom titlebar type = "toggle", get = function() return currentInstance.titlebar_shown end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetTitleBarSettings", value) editInstanceSetting(currentInstance, "RefreshTitleBar") afterUpdate() end, name = "Enable Custom Title Bar", desc = "Use an alternative title bar instead of the title bar builtin in the Skin file.\n\n|cFFFFFF00Important|r: To disable the title bar from the Skin file, go to 'Window Body' and make the 'skin color' fully transparent.", }, {--custom title bar height type = "range", get = function() return currentInstance.titlebar_height end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetTitleBarSettings", nil, value) editInstanceSetting(currentInstance, "RefreshTitleBar") afterUpdate() end, min = 0, max = 32, step = 1, name = "Height", desc = "Height", }, {--custom title bar texture type = "select", get = function() return currentInstance.titlebar_texture end, values = function() return buildTextureCustomTitleBar() end, name = Loc ["STRING_TEXTURE"], desc = Loc ["STRING_TEXTURE"], }, {--texture color type = "color", get = function() local r, g, b, a = unpack(currentInstance.titlebar_texture_color) return {r, g, b, a} end, set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetTitleBarSettings", nil, nil, nil, {r, g, b, a}) editInstanceSetting(currentInstance, "RefreshTitleBar") afterUpdate() end, name = "Color", desc = "Color", }, --SetTitleBarSettings(shown, height, texture, color) {--disable all displays type = "toggle", get = function() return currentInstance.disable_alldisplays_window end, set = function(self, fixedparam, value) Details.disable_alldisplays_window = value afterUpdate() end, name = Loc ["STRING_OPTIONS_DISABLE_ALLDISPLAYSWINDOW"], desc = Loc ["STRING_OPTIONS_DISABLE_ALLDISPLAYSWINDOW_DESC"], }, {type = "blank"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_TITLEBAR_MENUBUTTONS_HEADER"] end, text_template = subSectionTitleTextTemplate}, {type = "label", get = function() return Loc ["STRING_OPTIONS_MENU_SHOWBUTTONS"] end, text_template = options_text_template}, {--button orange gear type = "execute", get = function() return "" end, func = function(self, fixedparam, value) func(1) end, width = buttonWidth, height = 20, inline = true, name = "", --desc = "", icontexture = [[Interface\AddOns\Details\images\toolbar_icons]], icontexcoords = {0/256, 32/256, 0, 1}, }, {--button segments type = "execute", get = function() return "" end, func = function(self, fixedparam, value) func(2) end, width = buttonWidth, height = 20, inline = true, name = "", --desc = "", icontexture = [[Interface\AddOns\Details\images\toolbar_icons]], icontexcoords = {33/256, 64/256, 0, 1}, }, {--button sword type = "execute", get = function() return "" end, func = function(self, fixedparam, value) func(3) end, width = buttonWidth, height = 20, inline = true, name = "", --desc = "", icontexture = [[Interface\AddOns\Details\images\toolbar_icons]], icontexcoords = {64/256, 96/256, 0, 1}, }, {--button report type = "execute", get = function() return "" end, func = function(self, fixedparam, value) func(4) end, width = buttonWidth, height = 20, inline = true, name = "", --desc = "", icontexture = [[Interface\AddOns\Details\images\toolbar_icons]], icontexcoords = {96/256, 128/256, 0, 1}, }, {--button clear type = "execute", get = function() return "" end, func = function(self, fixedparam, value) func(5) end, width = buttonWidth, height = 20, inline = true, name = "", --desc = "", icontexture = [[Interface\AddOns\Details\images\toolbar_icons]], icontexcoords = {128/256, 160/256, 0, 1}, }, {--button clear type = "execute", get = function() return "" end, func = function(self, fixedparam, value) func(6) end, width = buttonWidth, height = 20, inline = true, name = "", --desc = "", icontexture = [[Interface\AddOns\Details\images\toolbar_icons]], icontexcoords = {160/256, 192/256, 0, 1}, }, {--icon set icon style type = "select", get = function() return currentInstance.toolbar_icon_file end, values = function() return buildIconStyleMenu() end, name = "Icon Set", desc = "Icon Set", }, {--title bar icons size type = "range", get = function() return currentInstance.menu_icons_size end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "ToolbarMenuButtonsSize", value) afterUpdate() end, min = 0.4, max = 1.6, step = 0.05, usedecimals = true, name = Loc ["STRING_OPTIONS_SIZE"], desc = Loc ["STRING_OPTIONS_MENU_BUTTONSSIZE_DESC"], }, {--title bar icons spacing type = "range", get = function() return currentInstance.menu_icons.space end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "ToolbarMenuSetButtonsOptions", value) afterUpdate() end, min = -5, max = 10, step = 1, name = Loc ["STRING_OPTIONS_MENUS_SPACEMENT"], desc = Loc ["STRING_OPTIONS_MENUS_SPACEMENT_DESC"], }, {--title bar icons position X type = "range", get = function() return currentInstance.toolbar_side == 1 and currentInstance.menu_anchor[1] or currentInstance.menu_anchor_down[1] end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "MenuAnchor", value) afterUpdate() end, min = -200, max = 200, step = 1, name = Loc ["STRING_OPTIONS_MENU_X"], desc = Loc ["STRING_OPTIONS_MENU_X_DESC"], }, {--title bar icons position Y type = "range", get = function() return currentInstance.toolbar_side == 1 and currentInstance.menu_anchor[2] or currentInstance.menu_anchor_down[2] end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "MenuAnchor", nil, value) afterUpdate() end, min = -200, max = 200, step = 1, name = Loc ["STRING_OPTIONS_MENU_Y"], desc = Loc ["STRING_OPTIONS_MENU_X_DESC"], }, {--icons desaturated type = "toggle", get = function() return currentInstance.desaturated_menu end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "DesaturateMenu", value) afterUpdate() end, name = Loc ["STRING_OPTIONS_DESATURATE_MENU"], desc = Loc ["STRING_OPTIONS_DESATURATE_MENU_DESC"], }, {--hide icon main icon type = "toggle", get = function() return currentInstance.hide_icon end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "HideMainIcon", value) afterUpdate() end, name = Loc ["STRING_OPTIONS_HIDE_ICON"], desc = Loc ["STRING_OPTIONS_HIDE_ICON_DESC"], }, {--button attach to right type = "toggle", get = function() return currentInstance.menu_anchor.side == 2 and true or false end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "LeftMenuAnchorSide", value and 2 or 1) afterUpdate() end, name = Loc ["STRING_OPTIONS_MENU_ANCHOR"], desc = Loc ["STRING_OPTIONS_MENU_ANCHOR_DESC"], }, {--plugins button attach to right type = "toggle", get = function() return currentInstance.plugins_grow_direction == 2 and true or false end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "plugins_grow_direction", value and 2 or 1) editInstanceSetting(currentInstance, "ToolbarMenuSetButtons") afterUpdate() end, name = Loc ["STRING_OPTIONS_PICONS_DIRECTION"], desc = Loc ["STRING_OPTIONS_PICONS_DIRECTION_DESC"], }, {--disable reset button type = "toggle", get = function() return Details.disable_reset_button end, set = function(self, fixedparam, value) Details.disable_reset_button = value afterUpdate() end, name = Loc ["STRING_OPTIONS_DISABLE_RESET"], desc = Loc ["STRING_OPTIONS_DISABLE_RESET_DESC"], }, {--click to open menus type = "toggle", get = function() return Details.instances_menu_click_to_open end, set = function(self, fixedparam, value) Details.instances_menu_click_to_open = value afterUpdate() end, name = Loc ["STRING_OPTIONS_CLICK_TO_OPEN_MENUS"], desc = Loc ["STRING_OPTIONS_CLICK_TO_OPEN_MENUS_DESC"], }, {--auto hide buttons type = "toggle", get = function() return currentInstance.auto_hide_menu.left end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetAutoHideMenu", value) afterUpdate() end, name = Loc ["STRING_OPTIONS_MENU_AUTOHIDE_LEFT"], desc = Loc ["STRING_OPTIONS_MENU_AUTOHIDE_DESC"], }, {type = "breakline"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_ATTRIBUTE_TEXT"] end, text_template = subSectionTitleTextTemplate}, {--enable text type = "toggle", get = function() return currentInstance.attribute_text.enabled end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "AttributeMenu", value) afterUpdate() end, name = Loc ["STRING_ENABLED"], desc = Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ENABLED_DESC"], }, {--encounter time type = "toggle", get = function() return currentInstance.attribute_text.show_timer and true or false end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "AttributeMenu", nil, nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ENCOUNTERTIMER"], desc = Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ENCOUNTERTIMER_DESC"], }, {--text size type = "range", get = function() return tonumber(currentInstance.attribute_text.text_size) end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "AttributeMenu", nil, nil, nil, nil, value) afterUpdate() end, min = 5, max = 32, step = 1, name = Loc ["STRING_OPTIONS_TEXT_SIZE"], desc = Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_TEXTSIZE_DESC"], }, {--text font type = "select", get = function() return currentInstance.attribute_text.text_face end, values = function() return build_font_menu() end, name = Loc ["STRING_OPTIONS_TEXT_FONT"], desc = Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_FONT_DESC"], }, {--text color type = "color", get = function() local r, g, b = unpack(currentInstance.attribute_text.text_color) return {r, g, b, a} end, set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "AttributeMenu", nil, nil, nil, nil, nil, {r, g, b, a}) afterUpdate() end, name = Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_TEXTCOLOR"], desc = Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_TEXTCOLOR_DESC"], }, {--text shadow type = "toggle", get = function() return currentInstance.attribute_text.shadow end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "AttributeMenu", nil, nil, nil, nil, nil, nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_TEXT_LOUTILINE"], desc = Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_SHADOW_DESC"], }, {--text X type = "range", get = function() return tonumber(currentInstance.attribute_text.anchor[1]) end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "AttributeMenu", nil, value) afterUpdate() end, min = -30, max = 300, step = 1, name = Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ANCHORX"], desc = Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ANCHORX_DESC"], }, {--text Y type = "range", get = function() return tonumber(currentInstance.attribute_text.anchor[2]) end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "AttributeMenu", nil, nil, value) afterUpdate() end, min = -100, max = 50, step = 1, name = Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ANCHORY"], desc = Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ANCHORY_DESC"], }, {--anchor to top type = "toggle", get = function() return currentInstance.attribute_text.side == 1 and true or false end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "AttributeMenu", nil, nil, nil, nil, nil, nil, value and 1 or 2) afterUpdate() end, name = Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_SIDE"], desc = Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_SIDE_DESC"], }, {type = "blank"}, {--menu text font type = "select", get = function() return Details.font_faces.menus end, values = function() return buildFontMenu() end, name = Loc ["STRING_OPTIONS_MENU_FONT_FACE"], desc = Loc ["STRING_OPTIONS_MENU_FONT_FACE_DESC"], }, {--menu text size type = "range", get = function() return Details.font_sizes.menus end, set = function(self, fixedparam, value) Details.font_sizes.menus = value afterUpdate() end, min = 5, max = 32, step = 1, name = Loc ["STRING_OPTIONS_TEXT_SIZE"], desc = Loc ["STRING_OPTIONS_MENU_FONT_SIZE_DESC"], }, } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) end tinsert(Details.optionsSection, buildSection) end -- ~06 - body setings do --frame strata options local strata = { ["BACKGROUND"] = "Background", ["LOW"] = "Low", ["MEDIUM"] = "Medium", ["HIGH"] = "High", ["DIALOG"] = "Dialog" } local onStrataSelect = function(_, instance, strataName) editInstanceSetting(currentInstance, "SetFrameStrata", strataName) afterUpdate() end local strataTable = { {value = "BACKGROUND", label = "Background", onclick = onStrataSelect, icon = [[Interface\Buttons\UI-MicroStream-Green]], iconcolor = {0, .5, 0, .8}, texcoord = nil}, --Interface\Buttons\UI-MicroStream-Green UI-MicroStream-Red UI-MicroStream-Yellow {value = "LOW", label = "Low", onclick = onStrataSelect, icon = [[Interface\Buttons\UI-MicroStream-Green]] , texcoord = nil}, --Interface\Buttons\UI-MicroStream-Green UI-MicroStream-Red UI-MicroStream-Yellow {value = "MEDIUM", label = "Medium", onclick = onStrataSelect, icon = [[Interface\Buttons\UI-MicroStream-Yellow]] , texcoord = nil}, --Interface\Buttons\UI-MicroStream-Green UI-MicroStream-Red UI-MicroStream-Yellow {value = "HIGH", label = "High", onclick = onStrataSelect, icon = [[Interface\Buttons\UI-MicroStream-Yellow]] , iconcolor = {1, .7, 0, 1}, texcoord = nil}, --Interface\Buttons\UI-MicroStream-Green UI-MicroStream-Red UI-MicroStream-Yellow {value = "DIALOG", label = "Dialog", onclick = onStrataSelect, icon = [[Interface\Buttons\UI-MicroStream-Red]] , iconcolor = {1, 0, 0, 1}, texcoord = nil}, --Interface\Buttons\UI-MicroStream-Green UI-MicroStream-Red UI-MicroStream-Yellow } local buildStrataMenu = function() return strataTable end --backdrop texture local onBackdropSelect = function(_, instance, backdropName) editInstanceSetting(currentInstance, "SetBackdropTexture", backdropName) afterUpdate() end local backdrop_icon_size = {16, 16} local backdrop_icon_color = {.6, .6, .6} local buildBackdropMenu = function() local backdropTable = {} for name, backdropPath in pairs(SharedMedia:HashTable ("background")) do backdropTable[#backdropTable+1] = {value = name, label = name, onclick = onBackdropSelect, icon = [[Interface\ITEMSOCKETINGFRAME\UI-EMPTYSOCKET]], iconsize = backdrop_icon_size, iconcolor = backdrop_icon_color} end return backdropTable end --instance selector selection local onSelectInstance = function() end local buildInstanceMenu = function() local instanceList = {} for index = 1, math.min (#Details.tabela_instancias, Details.instances_amount) do local instance = Details.tabela_instancias[index] --what the window is showing local atributo = instance.atributo local sub_atributo = instance.sub_atributo if (atributo == 5) then --custom local CustomObject = Details.custom [sub_atributo] if (not CustomObject) then instance:ResetAttribute() atributo = instance.atributo sub_atributo = instance.sub_atributo instanceList [#instanceList+1] = {value = index, label = "#".. index .. " " .. Details.atributos.lista [atributo] .. " - " .. Details.sub_atributos [atributo].lista [sub_atributo], onclick = onSelectInstance, icon = Details.sub_atributos [atributo].icones[sub_atributo] [1], texcoord = Details.sub_atributos [atributo].icones[sub_atributo] [2]} else instanceList [#instanceList+1] = {value = index, label = "#".. index .. " " .. CustomObject.name, onclick = onSelectInstance, icon = CustomObject.icon} end else local modo = instance.modo if (modo == 1) then --solo plugin atributo = Details.SoloTables.Mode or 1 local SoloInfo = Details.SoloTables.Menu [atributo] if (SoloInfo) then instanceList [#instanceList+1] = {value = index, label = "#".. index .. " " .. SoloInfo [1], onclick = onSelectInstance, icon = SoloInfo [2]} else instanceList [#instanceList+1] = {value = index, label = "#".. index .. " unknown", onclick = onSelectInstance, icon = ""} end elseif (modo == 4) then --raid plugin local plugin_name = instance.current_raid_plugin or instance.last_raid_plugin if (plugin_name) then local plugin_object = Details:GetPlugin (plugin_name) if (plugin_object) then instanceList [#instanceList+1] = {value = index, label = "#".. index .. " " .. plugin_object.__name, onclick = onSelectInstance, icon = plugin_object.__icon} else instanceList [#instanceList+1] = {value = index, label = "#".. index .. " unknown", onclick = onSelectInstance, icon = ""} end else instanceList [#instanceList+1] = {value = index, label = "#".. index .. " unknown", onclick = onSelectInstance, icon = ""} end else instanceList [#instanceList+1] = {value = index, label = "#".. index .. " " .. Details.atributos.lista [atributo] .. " - " .. Details.sub_atributos [atributo].lista [sub_atributo], onclick = onSelectInstance, icon = Details.sub_atributos [atributo].icones[sub_atributo] [1], texcoord = Details.sub_atributos [atributo].icones[sub_atributo] [2]} end end end return instanceList end local buildSection = function(sectionFrame) local sectionOptions = { {type = "label", get = function() return Loc["STRING_OPTIONS_GENERAL_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--window color (skin color) type = "color", get = function() local r, g, b = unpack(currentInstance.color) return {r, g, b, 1} end, set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "InstanceColor", r, g, b, a, nil, true) afterUpdate() end, name = Loc ["STRING_OPTIONS_WINDOW_SKIN_COLOR"], desc = Loc ["STRING_OPTIONS_WINDOW_SKIN_COLOR_DESC"], }, {--show borders type = "toggle", get = function() return currentInstance.show_sidebars end, set = function(self, fixedparam, value) if (value) then editInstanceSetting(currentInstance, "ShowSideBars") else editInstanceSetting(currentInstance, "HideSideBars") end afterUpdate() end, name = Loc ["STRING_OPTIONS_SHOW_SIDEBARS"], desc = Loc ["STRING_OPTIONS_SHOW_SIDEBARS_DESC"], }, {--row's area color type = "color", get = function() return {currentInstance.bg_r, currentInstance.bg_g, currentInstance.bg_b, currentInstance.bg_alpha} end, set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "SetBackgroundColor", r, g, b) editInstanceSetting(currentInstance, "SetBackgroundAlpha", a) afterUpdate() end, name = Loc ["STRING_OPTIONS_WINDOW_ROWAREA_COLOR"], desc = Loc ["STRING_OPTIONS_WINDOW_ROWAREA_COLOR_DESC"], }, {--window scale type = "range", get = function() return tonumber(currentInstance.window_scale) end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetWindowScale", value, true) afterUpdate() end, min = 0.65, max = 1.5, step = 0.02, usedecimals = true, name = Loc ["STRING_OPTIONS_WINDOW_SCALE"], desc = Loc ["STRING_OPTIONS_WINDOW_SCALE_DESC"], }, {--ignore on mass hide type = "toggle", get = function() return currentInstance.ignore_mass_showhide end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "ignore_mass_showhide", value) afterUpdate() end, name = Loc ["STRING_OPTIONS_WINDOW_IGNOREMASSTOGGLE"], desc = Loc ["STRING_OPTIONS_WINDOW_IGNOREMASSTOGGLE_DESC"], }, {--frame strata type = "select", get = function() return strata[currentInstance.strata] or "Low" end, values = function() return buildStrataMenu() end, name = Loc ["STRING_OPTIONS_INSTANCE_STRATA"], desc = Loc ["STRING_OPTIONS_INSTANCE_STRATA_DESC"], }, {--backdrop texture type = "select", get = function() return currentInstance.backdrop_texture end, values = function() return buildBackdropMenu() end, name = Loc ["STRING_OPTIONS_INSTANCE_BACKDROP"], desc = Loc ["STRING_OPTIONS_INSTANCE_BACKDROP_DESC"], }, {type = "blank"}, {--click through type = "toggle", get = function() return currentInstance.clickthrough_window end, set = function(self, fixedparam, value) Details:InstanceGroupCall(currentInstance, "UpdateClickThroughSettings", nil, value, value, value) afterUpdate() end, name = "Click Through", desc = "Click Through", boxfirst = true, }, {--click only in combat type = "toggle", get = function() return currentInstance.clickthrough_incombatonly end, set = function(self, fixedparam, value) Details:InstanceGroupCall(currentInstance, "UpdateClickThroughSettings", value) afterUpdate() end, name = "Click Through Only in Combat", desc = "Click Through Only in Combat", boxfirst = true, }, {type = "blank"}, {--grouped windows horizontal gap type = "range", get = function() return tonumber(Details.grouping_horizontal_gap) end, set = function(self, fixedparam, value) Details.grouping_horizontal_gap = value currentInstance:BaseFrameSnap() afterUpdate() end, min = 0, max = 20, usedecimals = true, step = 0.5, name = Loc ["STRING_OPTIONS_GROUPING_HORIZONTAL_GAP"], desc = Loc ["STRING_OPTIONS_GROUPING_HORIZONTAL_GAP_DESC"], thumbscale = 2.2, }, {--disable grouping type = "toggle", get = function() return Details.disable_window_groups end, set = function(self, fixedparam, value) Details.disable_window_groups = value afterUpdate() end, name = Loc ["STRING_OPTIONS_DISABLE_GROUPS"], desc = Loc ["STRING_OPTIONS_DISABLE_GROUPS_DESC"], }, {--disable resize buttons type = "toggle", get = function() return Details.disable_lock_ungroup_buttons end, set = function(self, fixedparam, value) Details.disable_lock_ungroup_buttons = value afterUpdate() end, name = Loc ["STRING_OPTIONS_DISABLE_LOCK_RESIZE"], desc = Loc ["STRING_OPTIONS_DISABLE_LOCK_RESIZE_DESC"], }, {--disable stretch button type = "toggle", get = function() return Details.disable_stretch_button end, set = function(self, fixedparam, value) Details.disable_stretch_button = value afterUpdate() end, name = Loc ["STRING_OPTIONS_DISABLE_STRETCH_BUTTON"], desc = Loc ["STRING_OPTIONS_DISABLE_STRETCH_BUTTON_DESC"], }, {type = "blank"}, {--title bar on top side type = "toggle", get = function() return currentInstance.toolbar_side == 1 and true or false end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "ToolbarSide", value and 1 or 2) afterUpdate() end, name = Loc ["STRING_OPTIONS_TOOLBARSIDE"], desc = Loc ["STRING_OPTIONS_TOOLBARSIDE_DESC"], }, {--stretch button always on top type = "toggle", get = function() return currentInstance.grab_on_top end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "grab_on_top", value) afterUpdate() end, name = Loc ["STRING_OPTIONS_STRETCHTOP"], desc = Loc ["STRING_OPTIONS_STRETCHTOP_DESC"], }, {--stretch button on top side type = "toggle", get = function() return currentInstance.stretch_button_side == 1 and true or false end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "StretchButtonAnchor", value and 1 or 2) afterUpdate() end, name = Loc ["STRING_OPTIONS_STRETCH"], desc = Loc ["STRING_OPTIONS_STRETCH_DESC"], }, {type = "blank"}, {--delete window id = 'deleteWindow', type = "select", get = function() return 0 end, values = function() return buildInstanceMenu() end, name = Loc ["STRING_OPTIONS_INSTANCE_DELETE"], desc = Loc ["STRING_OPTIONS_INSTANCE_DELETE_DESC"], }, {--delete window type = "execute", func = function(self) local windowDropdown = self.MyObject.container:GetWidgetById('deleteWindow') local selectedWindow = windowDropdown and windowDropdown:GetValue() if (selectedWindow) then Details:DeleteInstance(selectedWindow) ReloadUI() end end, name = Loc ["STRING_OPTIONS_INSTANCE_DELETE"], --icontexture = [[Interface\Buttons\UI-GuildButton-MOTD-Up]], --icontexcoords = {1, 0, 0, 1}, }, {type = "breakline"}, {type = "label", get = function() return "Window Area Border" end, text_template = subSectionTitleTextTemplate}, {--show full border ~border type = "toggle", get = function() return currentInstance.fullborder_shown end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "UpdateFullBorder", value) afterUpdate() end, name = "Show Border", desc = "Show Border", }, {--full border color type = "color", get = function() return {unpack(currentInstance.fullborder_color)} end, set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "UpdateFullBorder", nil, {r, g, b, a}) afterUpdate() end, name = "Border Color", desc = "Border Color", }, {--border size type = "range", get = function() return tonumber(currentInstance.fullborder_size) end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "UpdateFullBorder", nil, nil, value) afterUpdate() end, min = 0, max = 5, step = 0.5, usedecimals = true, name = "Border Thickness", desc = "Border Thickness", }, {type = "blank"}, {type = "label", get = function() return "Row's Area Border" end, text_template = subSectionTitleTextTemplate}, {--show full border ~border type = "toggle", get = function() return currentInstance.rowareaborder_shown end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "UpdateRowAreaBorder", value) afterUpdate() end, name = "Show Border", desc = "Show Border", }, {--full border color type = "color", get = function() return {unpack(currentInstance.rowareaborder_color)} end, set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "UpdateRowAreaBorder", nil, {r, g, b, a}) afterUpdate() end, name = "Border Color", desc = "Border Color", }, {--border size type = "range", get = function() return tonumber(currentInstance.rowareaborder_size) end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "UpdateRowAreaBorder", nil, nil, value) afterUpdate() end, min = 0, max = 5, step = 0.5, usedecimals = true, name = "Border Thickness", desc = "Border Thickness", }, } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize+20, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) end tinsert(Details.optionsSection, buildSection) end -- ~07 - status bar do local buildSection = function(sectionFrame) --update micro displays local updateMicroFrames = function() local instance = currentInstance local hideLeftButton = sectionFrame.MicroDisplayLeftDropdown.hideLeftMicroFrameButton if (instance.StatusBar ["left"].options.isHidden) then hideLeftButton:GetNormalTexture():SetDesaturated(false) else hideLeftButton:GetNormalTexture():SetDesaturated(true) end local hide_center_button = sectionFrame.MicroDisplayCenterDropdown.HideCenterMicroFrameButton if (instance.StatusBar ["center"].options.isHidden) then hide_center_button:GetNormalTexture():SetDesaturated(false) else hide_center_button:GetNormalTexture():SetDesaturated(true) end local hide_right_button = sectionFrame.MicroDisplayRightDropdown.HideRightMicroFrameButton if (instance.StatusBar ["right"].options.isHidden) then hide_right_button:GetNormalTexture():SetDesaturated(false) else hide_right_button:GetNormalTexture():SetDesaturated(true) end local left = instance.StatusBar ["left"].__name local center = instance.StatusBar ["center"].__name local right = instance.StatusBar ["right"].__name _G[sectionFrame:GetName() .. "MicroDisplayLeftDropdown"].MyObject:Select(left) _G[sectionFrame:GetName() .. "MicroDisplayCenterDropdown"].MyObject:Select(center) _G[sectionFrame:GetName() .. "MicroDisplayRightDropdown"].MyObject:Select(right) if (not instance.show_statusbar and instance.micro_displays_side == 2) then sectionFrame.MicroDisplayWarningLabel:Show() else sectionFrame.MicroDisplayWarningLabel:Hide() end end sectionFrame:GetParent().updateMicroFrames = updateMicroFrames local sectionOptions = { {type = "label", get = function() return Loc ["STRING_OPTIONS_INSTANCE_STATUSBAR_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--show statusbar type = "toggle", get = function() return currentInstance.show_statusbar end, set = function(self, fixedparam, value) if (value) then editInstanceSetting(currentInstance, "ShowStatusBar") else editInstanceSetting(currentInstance, "HideStatusBar") end --editInstanceSetting(currentInstance, "BaseFrameSnap") --was causing issues 09/Aug/2020 updateMicroFrames() afterUpdate() end, name = Loc ["STRING_OPTIONS_SHOW_STATUSBAR"], desc = Loc ["STRING_OPTIONS_SHOW_STATUSBAR_DESC"], }, {--color type = "color", get = function() local r, g, b = unpack(currentInstance.statusbar_info.overlay) local alpha = currentInstance.statusbar_info.alpha return {r, g, b, alpha} end, set = function(self, r, g, b, a) editInstanceSetting(currentInstance, "StatusBarColor", r, g, b, a) afterUpdate() end, name = Loc ["STRING_OPTIONS_INSTANCE_STATUSBARCOLOR"], desc = Loc ["STRING_OPTIONS_INSTANCE_STATUSBARCOLOR_DESC"], }, {--lock micro displays type = "toggle", get = function() return currentInstance.micro_displays_locked end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "MicroDisplaysLock", value) afterUpdate() end, name = Loc ["STRING_OPTIONS_MICRODISPLAY_LOCK"], desc = Loc ["STRING_OPTIONS_MICRODISPLAY_LOCK_DESC"], }, {--anchor on top side type = "toggle", get = function() return currentInstance.micro_displays_side == 1 and true or false end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "MicroDisplaysSide", value and 1 or 2, true) afterUpdate() end, name = Loc ["STRING_OPTIONS_MICRODISPLAYSSIDE"], desc = Loc ["STRING_OPTIONS_MICRODISPLAYSSIDE_DESC"], }, } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) do --micro displays --statics texts DF:NewLabel(sectionFrame, _, "$parentMicroDisplaysAnchor", "MicroDisplaysAnchor", Loc ["STRING_OPTIONS_MICRODISPLAY_ANCHOR"], "GameFontNormal") DF:NewLabel(sectionFrame, _, "$parentMicroDisplayLeftLabel", "MicroDisplayLeftLabel", Loc ["STRING_ANCHOR_LEFT"], "GameFontHighlightLeft") DF:NewLabel(sectionFrame, _, "$parentMicroDisplayCenterLabel", "MicroDisplayCenterLabel", Loc ["STRING_CENTER_UPPER"], "GameFontHighlightLeft") DF:NewLabel(sectionFrame, _, "$parentMicroDisplayRightLabel", "MicroDisplayRightLabel", Loc ["STRING_ANCHOR_RIGHT"], "GameFontHighlightLeft") DF:NewLabel(sectionFrame, _, "$parentMicroDisplayWarningLabel", "MicroDisplayWarningLabel", Loc ["STRING_OPTIONS_MICRODISPLAYS_WARNING"], "GameFontHighlightSmall", 10, "orange") --dropdown on select option local onMicroDisplaySelect = function(_, _, micro_display) local anchor, index = unpack(micro_display) if (index == -1) then return Details.StatusBar:SetPlugin (currentInstance, -1, anchor) end local absolute_name = Details.StatusBar.Plugins [index].real_name Details.StatusBar:SetPlugin (currentInstance, absolute_name, anchor) updateMicroFrames() -- in development afterUpdate() end --dropdown options local buildLeftMicroMenu = function() local options = {} for index, _name_and_icon in ipairs(Details.StatusBar.Menu) do options [#options+1] = {value = {"left", index}, label = _name_and_icon [1], onclick = onMicroDisplaySelect, icon = _name_and_icon [2]} end return options end local buildCenterMicroMenu = function() local options = {} for index, _name_and_icon in ipairs(Details.StatusBar.Menu) do options [#options+1] = {value = {"center", index}, label = _name_and_icon [1], onclick = onMicroDisplaySelect, icon = _name_and_icon [2]} end return options end local buildRightMicroMenu = function() local options = {} for index, _name_and_icon in ipairs(Details.StatusBar.Menu) do options [#options+1] = {value = {"right", index}, label = _name_and_icon [1], onclick = onMicroDisplaySelect, icon = _name_and_icon [2]} end return options end local DROPDOWN_WIDTH = 160 local dropdown_height = 18 --create dropdowns DF:NewDropDown (sectionFrame, _, "$parentMicroDisplayLeftDropdown", "MicroDisplayLeftDropdown", DROPDOWN_WIDTH, dropdown_height, buildLeftMicroMenu, nil, options_dropdown_template) DF:NewDropDown (sectionFrame, _, "$parentMicroDisplayCenterDropdown", "MicroDisplayCenterDropdown", DROPDOWN_WIDTH, dropdown_height, buildCenterMicroMenu, nil, options_dropdown_template) DF:NewDropDown (sectionFrame, _, "$parentMicroDisplayRightDropdown", "MicroDisplayRightDropdown", DROPDOWN_WIDTH, dropdown_height, buildRightMicroMenu, nil, options_dropdown_template) sectionFrame.MicroDisplayLeftDropdown:SetPoint("left", sectionFrame.MicroDisplayLeftLabel, "right", 2) sectionFrame.MicroDisplayCenterDropdown:SetPoint("left", sectionFrame.MicroDisplayCenterLabel, "right", 2) sectionFrame.MicroDisplayRightDropdown:SetPoint("left", sectionFrame.MicroDisplayRightLabel, "right", 2) sectionFrame.MicroDisplayLeftDropdown.tooltip = Loc ["STRING_OPTIONS_MICRODISPLAYS_DROPDOWN_TOOLTIP"] sectionFrame.MicroDisplayCenterDropdown.tooltip = Loc ["STRING_OPTIONS_MICRODISPLAYS_DROPDOWN_TOOLTIP"] sectionFrame.MicroDisplayRightDropdown.tooltip = Loc ["STRING_OPTIONS_MICRODISPLAYS_DROPDOWN_TOOLTIP"] local hideLeftMicroFrameButton = DF:NewButton(sectionFrame.MicroDisplayLeftDropdown, _, "$parenthideLeftMicroFrameButton", "hideLeftMicroFrameButton", 22, 22, function(self, button) if (currentInstance.StatusBar ["left"].options.isHidden) then Details.StatusBar:SetPlugin (currentInstance, currentInstance.StatusBar ["left"].real_name, "left") else Details.StatusBar:SetPlugin (currentInstance, -1, "left") end if (currentInstance.StatusBar ["left"].options.isHidden) then self:GetNormalTexture():SetDesaturated(false) else self:GetNormalTexture():SetDesaturated(true) end end) hideLeftMicroFrameButton:SetPoint("left", sectionFrame.MicroDisplayLeftDropdown, "right", 2, 0) hideLeftMicroFrameButton:SetNormalTexture([[Interface\Buttons\UI-GroupLoot-Pass-Down]]) hideLeftMicroFrameButton:SetPushedTexture([[Interface\Buttons\UI-GroupLoot-Pass-Up]]) hideLeftMicroFrameButton:GetNormalTexture():SetDesaturated(true) hideLeftMicroFrameButton.tooltip = Loc ["STRING_OPTIONS_MICRODISPLAYS_SHOWHIDE_TOOLTIP"] hideLeftMicroFrameButton:SetHook("OnEnter", function(self, capsule) self:GetNormalTexture():SetBlendMode("ADD") end) hideLeftMicroFrameButton:SetHook("OnLeave", function(self, capsule) self:GetNormalTexture():SetBlendMode("BLEND") end) local HideCenterMicroFrameButton = DF:NewButton(sectionFrame.MicroDisplayCenterDropdown, _, "$parentHideCenterMicroFrameButton", "HideCenterMicroFrameButton", 22, 22, function(self) if (currentInstance.StatusBar ["center"].options.isHidden) then Details.StatusBar:SetPlugin (currentInstance, currentInstance.StatusBar ["center"].real_name, "center") else Details.StatusBar:SetPlugin (currentInstance, -1, "center") end if (currentInstance.StatusBar ["center"].options.isHidden) then self:GetNormalTexture():SetDesaturated(false) else self:GetNormalTexture():SetDesaturated(true) end end) HideCenterMicroFrameButton:SetPoint("left", sectionFrame.MicroDisplayCenterDropdown, "right", 2, 0) HideCenterMicroFrameButton:SetNormalTexture([[Interface\Buttons\UI-GroupLoot-Pass-Down]]) HideCenterMicroFrameButton:SetPushedTexture([[Interface\Buttons\UI-GroupLoot-Pass-Up]]) HideCenterMicroFrameButton:GetNormalTexture():SetDesaturated(true) HideCenterMicroFrameButton.tooltip = Loc ["STRING_OPTIONS_MICRODISPLAYS_SHOWHIDE_TOOLTIP"] HideCenterMicroFrameButton:SetHook("OnEnter", function(self, capsule) self:GetNormalTexture():SetBlendMode("ADD") end) HideCenterMicroFrameButton:SetHook("OnLeave", function(self, capsule) self:GetNormalTexture():SetBlendMode("BLEND") end) local HideRightMicroFrameButton = DF:NewButton(sectionFrame.MicroDisplayRightDropdown, _, "$parentHideRightMicroFrameButton", "HideRightMicroFrameButton", 20, 20, function(self) if (currentInstance.StatusBar ["right"].options.isHidden) then Details.StatusBar:SetPlugin (currentInstance, currentInstance.StatusBar ["right"].real_name, "right") else Details.StatusBar:SetPlugin (currentInstance, -1, "right") end if (currentInstance.StatusBar ["right"].options.isHidden) then self:GetNormalTexture():SetDesaturated(false) else self:GetNormalTexture():SetDesaturated(true) end end) HideRightMicroFrameButton:SetPoint("left", sectionFrame.MicroDisplayRightDropdown, "right", 2, 0) HideRightMicroFrameButton:SetNormalTexture([[Interface\Buttons\UI-GroupLoot-Pass-Down]]) HideRightMicroFrameButton:SetPushedTexture([[Interface\Buttons\UI-GroupLoot-Pass-Up]]) HideRightMicroFrameButton:GetNormalTexture():SetDesaturated(true) HideRightMicroFrameButton.tooltip = Loc ["STRING_OPTIONS_MICRODISPLAYS_SHOWHIDE_TOOLTIP"] HideRightMicroFrameButton:SetHook("OnEnter", function(self, capsule) self:GetNormalTexture():SetBlendMode("ADD") end) HideRightMicroFrameButton:SetHook("OnLeave", function(self, capsule) self:GetNormalTexture():SetBlendMode("BLEND") end) local configRightMicroFrameButton = DF:NewButton(sectionFrame.MicroDisplayRightDropdown, _, "$parentconfigRightMicroFrameButton", "configRightMicroFrameButton", 18, 18, function(self) currentInstance.StatusBar ["right"]:Setup() currentInstance.StatusBar ["right"]:Setup() end) configRightMicroFrameButton:SetPoint("left", HideRightMicroFrameButton, "right", 1, -1) configRightMicroFrameButton:SetNormalTexture([[Interface\Buttons\UI-OptionsButton]]) configRightMicroFrameButton:SetHighlightTexture([[Interface\Buttons\UI-OptionsButton]]) configRightMicroFrameButton.tooltip = Loc ["STRING_OPTIONS_MICRODISPLAYS_OPTION_TOOLTIP"] local configCenterMicroFrameButton = DF:NewButton(sectionFrame.MicroDisplayCenterDropdown, _, "$parentconfigCenterMicroFrameButton", "configCenterMicroFrameButton", 18, 18, function(self) currentInstance.StatusBar ["center"]:Setup() currentInstance.StatusBar ["center"]:Setup() end) configCenterMicroFrameButton:SetPoint("left", HideCenterMicroFrameButton, "right", 1, -1) configCenterMicroFrameButton:SetNormalTexture([[Interface\Buttons\UI-OptionsButton]]) configCenterMicroFrameButton:SetHighlightTexture([[Interface\Buttons\UI-OptionsButton]]) configCenterMicroFrameButton.tooltip = Loc ["STRING_OPTIONS_MICRODISPLAYS_OPTION_TOOLTIP"] local configLeftMicroFrameButton = DF:NewButton(sectionFrame.MicroDisplayLeftDropdown, _, "$parentconfigLeftMicroFrameButton", "configLeftMicroFrameButton", 18, 18, function(self) currentInstance.StatusBar ["left"]:Setup() currentInstance.StatusBar ["left"]:Setup() end) configLeftMicroFrameButton:SetPoint("left", hideLeftMicroFrameButton, "right", 1, -1) configLeftMicroFrameButton:SetNormalTexture([[Interface\Buttons\UI-OptionsButton]]) configLeftMicroFrameButton:SetHighlightTexture([[Interface\Buttons\UI-OptionsButton]]) configLeftMicroFrameButton.tooltip = Loc ["STRING_OPTIONS_MICRODISPLAYS_OPTION_TOOLTIP"] local x = startX local y = startY - 20 - 120 sectionFrame.MicroDisplaysAnchor:SetPoint(x, y) y = y - 20 sectionFrame.MicroDisplayLeftLabel:SetPoint(x, y) y = y - 20 sectionFrame.MicroDisplayCenterLabel:SetPoint(x, y) y = y - 20 sectionFrame.MicroDisplayRightLabel:SetPoint(x, y) y = y - 20 sectionFrame.MicroDisplayWarningLabel:SetPoint(x, y) y = y - 20 end end tinsert(Details.optionsSection, buildSection) end -- ~08 - plugins do local buildSection = function(sectionFrame) local CreateFrame = _G.CreateFrame local button_color_rgb = {1, 0.93, 0.74} local anchorFrame = CreateFrame("frame", "$parentAnchorFrame", sectionFrame) anchorFrame:SetPoint("topleft", sectionFrame, "topleft", startX - 10, startY) anchorFrame.plugin_widgets = {} anchorFrame:SetSize(1, 1) local on_enter = function(self) self:SetBackdropColor(.5, .5, .5, .8) if (self ["toolbarPluginsIcon" .. self.id]) then self ["toolbarPluginsIcon" .. self.id]:SetBlendMode("ADD") elseif (self ["raidPluginsIcon" .. self.id]) then self ["raidPluginsIcon" .. self.id]:SetBlendMode("ADD") elseif (self ["soloPluginsIcon" .. self.id]) then self ["soloPluginsIcon" .. self.id]:SetBlendMode("ADD") end if (self.plugin) then local desc = self.plugin:GetPluginDescription() if (desc) then GameCooltip:Preset(2) GameCooltip:AddLine(desc) GameCooltip:SetType ("tooltip") GameCooltip:SetOwner(self, "bottomleft", "topleft", 150, -2) GameCooltip:Show() end end if (self.hasDesc) then GameCooltip:Preset(2) GameCooltip:AddLine(self.hasDesc) GameCooltip:SetType ("tooltip") GameCooltip:SetOwner(self, "bottomleft", "topleft", 150, -2) GameCooltip:Show() end end local on_leave = function(self) self:SetBackdropColor(.3, .3, .3, .3) if (self ["toolbarPluginsIcon" .. self.id]) then self ["toolbarPluginsIcon" .. self.id]:SetBlendMode("BLEND") elseif (self ["raidPluginsIcon" .. self.id]) then self ["raidPluginsIcon" .. self.id]:SetBlendMode("BLEND") elseif (self ["soloPluginsIcon" .. self.id]) then self ["soloPluginsIcon" .. self.id]:SetBlendMode("BLEND") end GameCooltip:Hide() end local y = -20 --toolbar DF:NewLabel(anchorFrame, _, "$parentToolbarPluginsLabel", "toolbarLabel", Loc ["STRING_OPTIONS_PLUGINS_TOOLBAR_ANCHOR"], "GameFontNormal", 16) anchorFrame.toolbarLabel:SetPoint("topleft", anchorFrame, "topleft", 10, y) y = y - 30 do local descbar = anchorFrame:CreateTexture(nil, "artwork") descbar:SetTexture(.3, .3, .3, .8) descbar:SetPoint("topleft", anchorFrame, "topleft", 5, y+3) descbar:SetSize(650, 20) DF:NewLabel(anchorFrame, _, "$parentDescNameLabel", "descNameLabel", Loc ["STRING_OPTIONS_PLUGINS_NAME"], "GameFontNormal", 12) anchorFrame.descNameLabel:SetPoint("topleft", anchorFrame, "topleft", 15, y) DF:NewLabel(anchorFrame, _, "$parentDescAuthorLabel", "descAuthorLabel", Loc ["STRING_OPTIONS_PLUGINS_AUTHOR"], "GameFontNormal", 12) anchorFrame.descAuthorLabel:SetPoint("topleft", anchorFrame, "topleft", 180, y) DF:NewLabel(anchorFrame, _, "$parentDescVersionLabel", "descVersionLabel", Loc ["STRING_OPTIONS_PLUGINS_VERSION"], "GameFontNormal", 12) anchorFrame.descVersionLabel:SetPoint("topleft", anchorFrame, "topleft", 290, y) DF:NewLabel(anchorFrame, _, "$parentDescEnabledLabel", "descEnabledLabel", Loc ["STRING_ENABLED"], "GameFontNormal", 12) anchorFrame.descEnabledLabel:SetPoint("topleft", anchorFrame, "topleft", 400, y) DF:NewLabel(anchorFrame, _, "$parentDescOptionsLabel", "descOptionsLabel", Loc ["STRING_OPTIONS_PLUGINS_OPTIONS"], "GameFontNormal", 12) anchorFrame.descOptionsLabel:SetPoint("topleft", anchorFrame, "topleft", 510, y) end y = y - 30 --toolbar plugins loop local i = 1 local allplugins_toolbar = Details.ToolBar.NameTable --where is store all plugins for the title bar --first loop and see which plugins isn't installed --then add a 'ghost' plugin so the player can download local allExistentToolbarPlugins = { {"DETAILS_PLUGIN_CHART_VIEWER", "Details_ChartViewer", "Chart Viewer", "View combat data in handsome charts.", "https://www.curseforge.com/wow/addons/details-chart-viewer-plugin"}, {"DETAILS_PLUGIN_DEATH_GRAPHICS", "Details_DeathGraphs", "Advanced Death Logs", "Encounter endurance per player (who's dying more), deaths timeline by enemy spells and regular death logs.", "https://www.curseforge.com/wow/addons/details-advanced-death-logs-plug"}, --{"Details_RaidPowerBars", "Raid Power Bars", "Alternate power bar in a details! window", "https://www.curseforge.com/wow/addons/details_raidpowerbars/"}, --{"Details_TargetCaller", "Target Caller", "Show raid damage done to an entity since you targetted it.", "https://www.curseforge.com/wow/addons/details-target-caller-plugin"}, {"DETAILS_PLUGIN_TIME_LINE", "Details_TimeLine", "Time Line", "View raid cooldowns usage, debuff gain, boss casts in a fancy time line.", "https://www.curseforge.com/wow/addons/details_timeline"}, } local allExistentRaidPlugins = { --{"DETAILS_PLUGIN_CHART_VIEWER", "Details_ChartViewer", "Chart Viewer", "View combat data in handsome charts.", "https://www.curseforge.com/wow/addons/details-chart-viewer-plugin"}, --{"DETAILS_PLUGIN_DEATH_GRAPHICS", "Details_DeathGraphs", "Advanced Death Logs", "Encounter endurance per player (who's dying more), deaths timeline by enemy spells and regular death logs.", "https://www.curseforge.com/wow/addons/details-advanced-death-logs-plug"}, {"DETAILS_PLUGIN_RAID_POWER_BARS", "Details_RaidPowerBars", "Raid Power Bars", "Alternate power bar in a details! window", "https://www.curseforge.com/wow/addons/details_raidpowerbars/"}, {"DETAILS_PLUGIN_TARGET_CALLER", "Details_TargetCaller", "Target Caller", "Show raid damage done to an entity since you targetted it.", "https://www.curseforge.com/wow/addons/details-target-caller-plugin"}, --{"DETAILS_PLUGIN_TIME_LINE", "Details_TimeLine", "Time Line", "View raid cooldowns usage, debuff gain, boss casts in a fancy time line.", "https://www.curseforge.com/wow/addons/details_timeline"}, } local installedToolbarPlugins = {} local installedRaidPlugins = {} for absName, pluginObject in pairs(allplugins_toolbar) do local bframe = CreateFrame("frame", "OptionsPluginToolbarBG", anchorFrame, "BackdropTemplate") bframe:SetSize(640, 20) bframe:SetPoint("topleft", anchorFrame, "topleft", 10, y) bframe:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, insets = {left = 1, right = 1, top = 0, bottom = 1}}) bframe:SetBackdropColor(.3, .3, .3, .3) bframe:SetScript("OnEnter", on_enter) bframe:SetScript("OnLeave", on_leave) bframe.plugin = pluginObject bframe.id = i DF:NewImage(bframe, pluginObject.__icon, 18, 18, nil, nil, "toolbarPluginsIcon"..i, "$parentToolbarPluginsIcon"..i) bframe ["toolbarPluginsIcon"..i]:SetPoint("topleft", anchorFrame, "topleft", 10, y) DF:NewLabel(bframe, _, "$parentToolbarPluginsLabel"..i, "toolbarPluginsLabel"..i, pluginObject.__name) bframe ["toolbarPluginsLabel"..i]:SetPoint("left", bframe ["toolbarPluginsIcon"..i], "right", 2, 0) DF:NewLabel(bframe, _, "$parentToolbarPluginsLabel2"..i, "toolbarPluginsLabel2"..i, pluginObject.__author) bframe ["toolbarPluginsLabel2"..i]:SetPoint("topleft", anchorFrame, "topleft", 180, y-4) DF:NewLabel(bframe, _, "$parentToolbarPluginsLabel3"..i, "toolbarPluginsLabel3"..i, pluginObject.__version) bframe ["toolbarPluginsLabel3"..i]:SetPoint("topleft", anchorFrame, "topleft", 290, y-4) local plugin_stable = Details:GetPluginSavedTable (absName) local plugin = Details:GetPlugin (absName) DF:NewSwitch (bframe, _, "$parentToolbarSlider"..i, "toolbarPluginsSlider"..i, 60, 20, _, _, plugin_stable.enabled, nil, nil, nil, nil, options_switch_template) bframe ["toolbarPluginsSlider"..i].PluginName = absName tinsert(anchorFrame.plugin_widgets, bframe ["toolbarPluginsSlider"..i]) bframe ["toolbarPluginsSlider"..i]:SetPoint("topleft", anchorFrame, "topleft", 415, y) bframe ["toolbarPluginsSlider"..i]:SetAsCheckBox() bframe ["toolbarPluginsSlider"..i].OnSwitch = function(self, _, value) plugin_stable.enabled = value plugin.__enabled = value if (value) then Details:SendEvent("PLUGIN_ENABLED", plugin) else Details:SendEvent("PLUGIN_DISABLED", plugin) end end if (pluginObject.OpenOptionsPanel) then DF:NewButton(bframe, nil, "$parentOptionsButton"..i, "OptionsButton"..i, 120, 20, pluginObject.OpenOptionsPanel, nil, nil, nil, Loc ["STRING_OPTIONS_PLUGINS_OPTIONS"], nil, options_button_template) bframe ["OptionsButton"..i]:SetPoint("topleft", anchorFrame, "topleft", 510, y-0) bframe ["OptionsButton"..i]:SetTextColor(button_color_rgb) bframe ["OptionsButton"..i]:SetIcon ([[Interface\Buttons\UI-OptionsButton]], 14, 14, nil, {0, 1, 0, 1}, nil, 3) end i = i + 1 y = y - 20 --plugins installed, adding their abs name DF.table.addunique(installedToolbarPlugins, absName) end local notInstalledColor = "gray" for o = 1, #allExistentToolbarPlugins do local pluginAbsName = allExistentToolbarPlugins [o] [1] if (not DF.table.find (installedToolbarPlugins, pluginAbsName)) then local absName = pluginAbsName local pluginObject = { __icon = "", __name = allExistentToolbarPlugins [o] [3], __author = "Not Installed", __version = "", OpenOptionsPanel = false, } local bframe = CreateFrame("frame", "OptionsPluginToolbarBG", anchorFrame,"BackdropTemplate") bframe:SetSize(640, 20) bframe:SetPoint("topleft", anchorFrame, "topleft", 10, y) bframe:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, insets = {left = 1, right = 1, top = 0, bottom = 1}}) bframe:SetBackdropColor(.3, .3, .3, .3) bframe:SetScript("OnEnter", on_enter) bframe:SetScript("OnLeave", on_leave) bframe.id = i bframe.hasDesc = allExistentToolbarPlugins [o] [4] DF:NewImage(bframe, pluginObject.__icon, 18, 18, nil, nil, "toolbarPluginsIcon"..i, "$parentToolbarPluginsIcon"..i) bframe ["toolbarPluginsIcon"..i]:SetPoint("topleft", anchorFrame, "topleft", 10, y) DF:NewLabel(bframe, _, "$parentToolbarPluginsLabel"..i, "toolbarPluginsLabel"..i, pluginObject.__name) bframe ["toolbarPluginsLabel"..i]:SetPoint("left", bframe ["toolbarPluginsIcon"..i], "right", 2, 0) bframe ["toolbarPluginsLabel"..i].color = notInstalledColor DF:NewLabel(bframe, _, "$parentToolbarPluginsLabel2"..i, "toolbarPluginsLabel2"..i, pluginObject.__author) bframe ["toolbarPluginsLabel2"..i]:SetPoint("topleft", anchorFrame, "topleft", 180, y-4) bframe ["toolbarPluginsLabel2"..i].color = notInstalledColor DF:NewLabel(bframe, _, "$parentToolbarPluginsLabel3"..i, "toolbarPluginsLabel3"..i, pluginObject.__version) bframe ["toolbarPluginsLabel3"..i]:SetPoint("topleft", anchorFrame, "topleft", 290, y-4) bframe ["toolbarPluginsLabel3"..i].color = notInstalledColor local installButton = DF:CreateButton(bframe, function() Details:CopyPaste (allExistentToolbarPlugins [o] [5]) end, 120, 20, "Install") installButton:SetTemplate(options_button_template) installButton:SetPoint("topleft", anchorFrame, "topleft", 510, y-0) i = i + 1 y = y - 20 end end y = y - 10 --raid DF:NewLabel(anchorFrame, _, "$parentRaidPluginsLabel", "raidLabel", Loc ["STRING_OPTIONS_PLUGINS_RAID_ANCHOR"], "GameFontNormal", 16) anchorFrame.raidLabel:SetPoint("topleft", anchorFrame, "topleft", 10, y) y = y - 30 do local descbar = anchorFrame:CreateTexture(nil, "artwork") descbar:SetTexture(.3, .3, .3, .8) descbar:SetPoint("topleft", anchorFrame, "topleft", 5, y+3) descbar:SetSize(650, 20) DF:NewLabel(anchorFrame, _, "$parentDescNameLabel2", "descNameLabel", Loc ["STRING_OPTIONS_PLUGINS_NAME"], "GameFontNormal", 12) anchorFrame.descNameLabel:SetPoint("topleft", anchorFrame, "topleft", 15, y) DF:NewLabel(anchorFrame, _, "$parentDescAuthorLabel2", "descAuthorLabel", Loc ["STRING_OPTIONS_PLUGINS_AUTHOR"], "GameFontNormal", 12) anchorFrame.descAuthorLabel:SetPoint("topleft", anchorFrame, "topleft", 180, y) DF:NewLabel(anchorFrame, _, "$parentDescVersionLabel2", "descVersionLabel", Loc ["STRING_OPTIONS_PLUGINS_VERSION"], "GameFontNormal", 12) anchorFrame.descVersionLabel:SetPoint("topleft", anchorFrame, "topleft", 290, y) DF:NewLabel(anchorFrame, _, "$parentDescEnabledLabel2", "descEnabledLabel", Loc ["STRING_ENABLED"], "GameFontNormal", 12) anchorFrame.descEnabledLabel:SetPoint("topleft", anchorFrame, "topleft", 400, y) DF:NewLabel(anchorFrame, _, "$parentDescOptionsLabel2", "descOptionsLabel", Loc ["STRING_OPTIONS_PLUGINS_OPTIONS"], "GameFontNormal", 12) anchorFrame.descOptionsLabel:SetPoint("topleft", anchorFrame, "topleft", 510, y) end y = y - 30 local i = 1 local allplugins_raid = Details.RaidTables.NameTable for absName, pluginObject in pairs(allplugins_raid) do local bframe = CreateFrame("frame", "OptionsPluginRaidBG", anchorFrame, "BackdropTemplate") bframe:SetSize(640, 20) bframe:SetPoint("topleft", anchorFrame, "topleft", 10, y) bframe:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, insets = {left = 1, right = 1, top = 0, bottom = 1}}) bframe:SetBackdropColor(.3, .3, .3, .3) bframe:SetScript("OnEnter", on_enter) bframe:SetScript("OnLeave", on_leave) bframe.plugin = pluginObject bframe.id = i DF:NewImage(bframe, pluginObject.__icon, 18, 18, nil, nil, "raidPluginsIcon"..i, "$parentRaidPluginsIcon"..i) bframe ["raidPluginsIcon"..i]:SetPoint("topleft", anchorFrame, "topleft", 10, y) DF:NewLabel(bframe, _, "$parentRaidPluginsLabel"..i, "raidPluginsLabel"..i, pluginObject.__name) bframe ["raidPluginsLabel"..i]:SetPoint("left", bframe ["raidPluginsIcon"..i], "right", 2, 0) DF:NewLabel(bframe, _, "$parentRaidPluginsLabel2"..i, "raidPluginsLabel2"..i, pluginObject.__author) bframe ["raidPluginsLabel2"..i]:SetPoint("topleft", anchorFrame, "topleft", 180, y-4) DF:NewLabel(bframe, _, "$parentRaidPluginsLabel3"..i, "raidPluginsLabel3"..i, pluginObject.__version) bframe ["raidPluginsLabel3"..i]:SetPoint("topleft", anchorFrame, "topleft", 290, y-4) local plugin_stable = Details:GetPluginSavedTable (absName) local plugin = Details:GetPlugin (absName) DF:NewSwitch (bframe, _, "$parentRaidSlider"..i, "raidPluginsSlider"..i, 60, 20, _, _, plugin_stable.enabled, nil, nil, nil, nil, options_switch_template) tinsert(anchorFrame.plugin_widgets, bframe ["raidPluginsSlider"..i]) bframe ["raidPluginsSlider"..i].PluginName = absName bframe ["raidPluginsSlider"..i]:SetPoint("topleft", anchorFrame, "topleft", 415, y+1) bframe ["raidPluginsSlider"..i]:SetAsCheckBox() bframe ["raidPluginsSlider"..i].OnSwitch = function(self, _, value) plugin_stable.enabled = value plugin.__enabled = value if (not value) then for index, instancia in ipairs(Details.tabela_instancias) do if (instancia.modo == 4) then -- 4 = raid if (instancia:IsEnabled()) then Details:TrocaTabela(instancia, 0, 1, 1, nil, 2) else instancia.modo = 2 -- group mode end end end end end if (pluginObject.OpenOptionsPanel) then DF:NewButton(bframe, nil, "$parentOptionsButton"..i, "OptionsButton"..i, 86, 18, pluginObject.OpenOptionsPanel, nil, nil, nil, Loc ["STRING_OPTIONS_PLUGINS_OPTIONS"], nil, options_button_template) bframe ["OptionsButton"..i]:SetPoint("topleft", anchorFrame, "topleft", 510, y-0) bframe ["OptionsButton"..i]:SetTextColor(button_color_rgb) bframe ["OptionsButton"..i]:SetIcon ([[Interface\Buttons\UI-OptionsButton]], 14, 14, nil, {0, 1, 0, 1}, nil, 3) end --plugins installed, adding their abs name DF.table.addunique(installedRaidPlugins, absName) i = i + 1 y = y - 20 end for o = 1, #allExistentRaidPlugins do local pluginAbsName = allExistentRaidPlugins [o] [1] if (not DF.table.find (installedRaidPlugins, pluginAbsName)) then local absName = pluginAbsName local pluginObject = { __icon = "", __name = allExistentRaidPlugins [o] [3], __author = "Not Installed", __version = "", OpenOptionsPanel = false, } local bframe = CreateFrame("frame", "OptionsPluginToolbarBG", anchorFrame,"BackdropTemplate") bframe:SetSize(640, 20) bframe:SetPoint("topleft", anchorFrame, "topleft", 10, y) bframe:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, insets = {left = 1, right = 1, top = 0, bottom = 1}}) bframe:SetBackdropColor(.3, .3, .3, .3) bframe:SetScript("OnEnter", on_enter) bframe:SetScript("OnLeave", on_leave) bframe.id = i bframe.hasDesc = allExistentRaidPlugins [o] [4] DF:NewImage(bframe, pluginObject.__icon, 18, 18, nil, nil, "toolbarPluginsIcon"..i, "$parentToolbarPluginsIcon"..i) bframe ["toolbarPluginsIcon"..i]:SetPoint("topleft", anchorFrame, "topleft", 10, y) DF:NewLabel(bframe, _, "$parentToolbarPluginsLabel"..i, "toolbarPluginsLabel"..i, pluginObject.__name) bframe ["toolbarPluginsLabel"..i]:SetPoint("left", bframe ["toolbarPluginsIcon"..i], "right", 2, 0) bframe ["toolbarPluginsLabel"..i].color = notInstalledColor DF:NewLabel(bframe, _, "$parentToolbarPluginsLabel2"..i, "toolbarPluginsLabel2"..i, pluginObject.__author) bframe ["toolbarPluginsLabel2"..i]:SetPoint("topleft", anchorFrame, "topleft", 180, y-4) bframe ["toolbarPluginsLabel2"..i].color = notInstalledColor DF:NewLabel(bframe, _, "$parentToolbarPluginsLabel3"..i, "toolbarPluginsLabel3"..i, pluginObject.__version) bframe ["toolbarPluginsLabel3"..i]:SetPoint("topleft", anchorFrame, "topleft", 290, y-4) bframe ["toolbarPluginsLabel3"..i].color = notInstalledColor local installButton = DF:CreateButton(bframe, function() Details:CopyPaste (allExistentRaidPlugins [o] [5]) end, 120, 20, "Install") installButton:SetTemplate(options_button_template) installButton:SetPoint("topleft", anchorFrame, "topleft", 510, y-0) i = i + 1 y = y - 20 end end y = y - 10 -- solo DF:NewLabel(anchorFrame, _, "$parentSoloPluginsLabel", "soloLabel", Loc ["STRING_OPTIONS_PLUGINS_SOLO_ANCHOR"], "GameFontNormal", 16) anchorFrame.soloLabel:SetPoint("topleft", anchorFrame, "topleft", 10, y) y = y - 30 do local descbar = anchorFrame:CreateTexture(nil, "artwork") descbar:SetTexture(.3, .3, .3, .8) descbar:SetPoint("topleft", anchorFrame, "topleft", 5, y+3) descbar:SetSize(650, 20) DF:NewLabel(anchorFrame, _, "$parentDescNameLabel3", "descNameLabel", Loc ["STRING_OPTIONS_PLUGINS_NAME"], "GameFontNormal", 12) anchorFrame.descNameLabel:SetPoint("topleft", anchorFrame, "topleft", 15, y) DF:NewLabel(anchorFrame, _, "$parentDescAuthorLabel3", "descAuthorLabel", Loc ["STRING_OPTIONS_PLUGINS_AUTHOR"], "GameFontNormal", 12) anchorFrame.descAuthorLabel:SetPoint("topleft", anchorFrame, "topleft", 180, y) DF:NewLabel(anchorFrame, _, "$parentDescVersionLabel3", "descVersionLabel", Loc ["STRING_OPTIONS_PLUGINS_VERSION"], "GameFontNormal", 12) anchorFrame.descVersionLabel:SetPoint("topleft", anchorFrame, "topleft", 290, y) DF:NewLabel(anchorFrame, _, "$parentDescEnabledLabel3", "descEnabledLabel", Loc ["STRING_ENABLED"], "GameFontNormal", 12) anchorFrame.descEnabledLabel:SetPoint("topleft", anchorFrame, "topleft", 400, y) DF:NewLabel(anchorFrame, _, "$parentDescOptionsLabel3", "descOptionsLabel", Loc ["STRING_OPTIONS_PLUGINS_OPTIONS"], "GameFontNormal", 12) anchorFrame.descOptionsLabel:SetPoint("topleft", anchorFrame, "topleft", 510, y) end y = y - 30 local i = 1 local allplugins_solo = Details.SoloTables.NameTable for absName, pluginObject in pairs(allplugins_solo) do local bframe = CreateFrame("frame", "OptionsPluginSoloBG", anchorFrame,"BackdropTemplate") bframe:SetSize(640, 20) bframe:SetPoint("topleft", anchorFrame, "topleft", 10, y) bframe:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, insets = {left = 1, right = 1, top = 0, bottom = 1}}) bframe:SetBackdropColor(.3, .3, .3, .3) bframe:SetScript("OnEnter", on_enter) bframe:SetScript("OnLeave", on_leave) bframe.plugin = pluginObject bframe.id = i DF:NewImage(bframe, pluginObject.__icon, 18, 18, nil, nil, "soloPluginsIcon"..i, "$parentSoloPluginsIcon"..i) bframe ["soloPluginsIcon"..i]:SetPoint("topleft", anchorFrame, "topleft", 10, y) DF:NewLabel(bframe, _, "$parentSoloPluginsLabel"..i, "soloPluginsLabel"..i, pluginObject.__name) bframe ["soloPluginsLabel"..i]:SetPoint("left", bframe ["soloPluginsIcon"..i], "right", 2, 0) DF:NewLabel(bframe, _, "$parentSoloPluginsLabel2"..i, "soloPluginsLabel2"..i, pluginObject.__author) bframe ["soloPluginsLabel2"..i]:SetPoint("topleft", anchorFrame, "topleft", 180, y-4) DF:NewLabel(bframe, _, "$parentSoloPluginsLabel3"..i, "soloPluginsLabel3"..i, pluginObject.__version) bframe ["soloPluginsLabel3"..i]:SetPoint("topleft", anchorFrame, "topleft", 290, y-4) local plugin_stable = Details:GetPluginSavedTable (absName) local plugin = Details:GetPlugin (absName) DF:NewSwitch (bframe, _, "$parentSoloSlider"..i, "soloPluginsSlider"..i, 60, 20, _, _, plugin_stable.enabled, nil, nil, nil, nil, options_switch_template) tinsert(anchorFrame.plugin_widgets, bframe ["soloPluginsSlider"..i]) bframe ["soloPluginsSlider"..i].PluginName = absName bframe ["soloPluginsSlider"..i]:SetPoint("topleft", anchorFrame, "topleft", 415, y+1) bframe ["soloPluginsSlider"..i]:SetAsCheckBox() bframe ["soloPluginsSlider"..i].OnSwitch = function(self, _, value) plugin_stable.enabled = value plugin.__enabled = value if (not value) then for index, instancia in ipairs(Details.tabela_instancias) do if (instancia.modo == 1 and instancia.baseframe) then -- 1 = solo Details:TrocaTabela(instancia, 0, 1, 1, nil, 2) end end end end if (pluginObject.OpenOptionsPanel) then DF:NewButton(bframe, nil, "$parentOptionsButton"..i, "OptionsButton"..i, 86, 18, pluginObject.OpenOptionsPanel, nil, nil, nil, Loc ["STRING_OPTIONS_PLUGINS_OPTIONS"], nil, options_button_template) bframe ["OptionsButton"..i]:SetPoint("topleft", anchorFrame, "topleft", 510, y-0) bframe ["OptionsButton"..i]:SetTextColor(button_color_rgb) bframe ["OptionsButton"..i]:SetIcon ([[Interface\Buttons\UI-OptionsButton]], 14, 14, nil, {0, 1, 0, 1}, nil, 3) end i = i + 1 y = y - 20 end local sectionOptions = { } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) end tinsert(Details.optionsSection, buildSection) end -- ~09 - profiles do local buildSection = function(sectionFrame) --build profile menu for "always use this profile" feature local profile_selected_alwaysuse = function(_, instance, profile_name) Details.always_use_profile_name = profile_name local unitname = UnitName ("player") Details.always_use_profile_exception [unitname] = nil Details:ApplyProfile (profile_name) Details:Msg(Loc ["STRING_OPTIONS_PROFILE_LOADED"], profile_name) afterUpdate() end local buildProfileMenuForAlwaysUse = function() local menu = {} for index, profile_name in ipairs(Details:GetProfileList()) do menu [#menu+1] = {value = profile_name, label = profile_name, onclick = profile_selected_alwaysuse, icon = "Interface\\MINIMAP\\Vehicle-HammerGold-3"} end return menu end local selectProfile = function(_, _, profileName) Details:ApplyProfile(profileName) Details:Msg(Loc ["STRING_OPTIONS_PROFILE_LOADED"], profileName) --Details222.OptionsPanel.SetCurrentInstanceAndRefresh(currentInstance) --afterUpdate() _G.DetailsOptionsWindow:Hide() Details:OpenOptionsWindow(currentInstance, false, 9) end local buildProfileMenu = function(func) local menu = {} for index, profileName in ipairs(Details:GetProfileList()) do menu [#menu+1] = {value = profileName, label = profileName, onclick = selectProfile, icon = "Interface\\MINIMAP\\Vehicle-HammerGold-3"} end return menu end local buildProfileMenuToDelete = function() local menu = {} for index, profileName in ipairs(Details:GetProfileList()) do if (profileName ~= Details:GetCurrentProfileName()) then menu [#menu+1] = {value = profileName, label = profileName, onclick = function()end, icon = [[Interface\Glues\LOGIN\Glues-CheckBox-Check]], color = {1, 1, 1}, iconcolor = {1, .9, .9, 0.8}} end end return menu end local sectionOptions = { {type = "label", get = function() return Loc["STRING_OPTIONS_PROFILES_CURRENT"] .. " |cFFFFFFFF" .. _detalhes_database.active_profile end, text_template = options_text_template}, {--select profile type = "select", get = function() return Details:GetCurrentProfileName() end, values = function() return buildProfileMenu() end, name = Loc ["STRING_OPTIONS_PROFILES_SELECT"], desc = Loc ["STRING_OPTIONS_PROFILES_SELECT"], }, {type = "blank"}, {--save size and positioning type = "toggle", get = function() return Details.profile_save_pos end, set = function(self, fixedparam, value) Details.profile_save_pos = value Details:SetProfileCProp (nil, "profile_save_pos", value) afterUpdate() end, name = Loc ["STRING_OPTIONS_PROFILE_POSSIZE"], desc = Loc ["STRING_OPTIONS_PROFILE_POSSIZE_DESC"], }, {type = "blank"}, {--profile name type = "textentry", get = function() return "profile name" end, func = function(self, _, text) end, name = Loc ["STRING_OPTIONS_PROFILES_CREATE"], --desc = Loc ["STRING_OPTIONS_NICKNAME"], }, {--create new profile type = "execute", func = function(self) local profileNameString = sectionFrame.widget_list_by_type.textentry[1] local profileName = profileNameString:GetText() if (profileName == "") then return Details:Msg(Loc ["STRING_OPTIONS_PROFILE_FIELDEMPTY"]) end profileNameString:SetText("") profileNameString:ClearFocus() local new_profile = Details:CreateProfile(profileName) if (new_profile) then Details:ApplyProfile(profileName) afterUpdate() Details222.OptionsPanel.SetCurrentInstanceAndRefresh(currentInstance) else return Details:Msg(Loc ["STRING_OPTIONS_PROFILE_NOTCREATED"]) end end, --icontexture = [[Interface\PetBattles\PetBattle-LockIcon]], --icontexcoords = {0.0703125, 0.9453125, 0.0546875, 0.9453125}, name = Loc ["STRING_OPTIONS_PROFILES_CREATE"], }, {type = "blank"}, {--delete profile type = "select", get = function() return "" end, values = function() return buildProfileMenuToDelete() end, name = Loc ["STRING_OPTIONS_PROFILES_ERASE"], desc = Loc ["STRING_OPTIONS_PROFILES_ERASE"], }, {--delete profile type = "execute", func = function(self) local profileDropdown = sectionFrame.widget_list_by_type.dropdown[2] local profileName = profileDropdown:GetValue() if (profileName == "") then return Details:Msg(Loc ["STRING_OPTIONS_PROFILE_FIELDEMPTY"]) end if (#Details:GetProfileList() == 1) then return Details:Msg("There's only one profile.") end if (profileName == Details:GetCurrentProfileName()) then return Details:Msg("Can't delete current profile.") end Details:EraseProfile(profileName) Details222.OptionsPanel.SetCurrentInstanceAndRefresh(currentInstance) afterUpdate() Details:Msg(Loc ["STRING_OPTIONS_PROFILE_REMOVEOKEY"]) end, name = Loc ["STRING_OPTIONS_PROFILES_ERASE"], }, {type = "blank"}, {--export profile type = "execute", func = function(self) local str = Details:ExportCurrentProfile() if (str) then Details:ShowImportWindow (str, nil, "Details! Export Profile") end end, name = Loc["STRING_OPTIONS_EXPORT_PROFILE"], icontexture = [[Interface\Buttons\UI-GuildButton-MOTD-Up]], icontexcoords = {1, 0, 0, 1}, }, --[=[ function(profileString) if (type(profileString) ~= "string" or string.len(profileString) < 2) then return end --prompt text panel returns what the user inserted in the text field in the first argument DF:ShowTextPromptPanel(Loc["STRING_OPTIONS_IMPORT_PROFILE_NAME"] .. ":", function(newProfileName) Details:ImportProfile (profileString, newProfileName, importAutoRunCode) end) end --]=] {--import profile type = "execute", func = function(self) local importConfirmationCallback = function(profileString) if (type(profileString) ~= "string" or string.len(profileString) < 2) then return end --prompt text panel returns what the user inserted in the text field in the first argument local askForNewProfileName = function(newProfileName, importAutoRunCode) Details:ImportProfile(profileString, newProfileName, importAutoRunCode, true) end Details.ShowImportProfileConfirmation(Loc["STRING_OPTIONS_IMPORT_PROFILE_NAME"] .. ":", askForNewProfileName) end Details:ShowImportWindow("", importConfirmationCallback, Loc["STRING_OPTIONS_IMPORT_PROFILE_PASTE"]) end, name = Loc["STRING_OPTIONS_IMPORT_PROFILE"], icontexture = [[Interface\BUTTONS\UI-GuildButton-OfficerNote-Up]], icontexcoords = {0, 1, 0, 1}, }, {type = "blank"}, {--use on all characters type = "toggle", get = function() return Details.always_use_profile end, set = function(self, fixedparam, value) Details.always_use_profile = value if (value) then Details.always_use_profile = true Details.always_use_profile_name = sectionFrame.widget_list_by_type.dropdown[3]:GetValue() --enable the dropdown sectionFrame.widget_list_by_type.dropdown[3]:Enable() --set the dropdown value to the current profile selected sectionFrame.widget_list_by_type.dropdown[3]:Select(Details.always_use_profile_name) --remove this character from the exception list local unitname = UnitName ("player") Details.always_use_profile_exception [unitname] = nil else Details.always_use_profile = false --disable the dropdown sectionFrame.widget_list_by_type.dropdown[3]:Disable() --remove this character from the exception list local unitname = UnitName ("player") Details.always_use_profile_exception [unitname] = nil end afterUpdate() end, name = Loc ["STRING_OPTIONS_ALWAYS_USE"], desc = Loc ["STRING_OPTIONS_ALWAYS_USE_DESC"], }, {--select a profile to use on all characters type = "select", get = function() return Details.always_use_profile_name end, values = function() return buildProfileMenuForAlwaysUse() end, name = "Select Profile", desc = Loc ["STRING_OPTIONS_PROFILE_GLOBAL"], }, } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) end tinsert(Details.optionsSection, buildSection) end -- ~10 ~tooltips do local buildSection = function(sectionFrame) --button for anchor toggle local refreshToggleAnchor = function() local buttonToggleAnchor = sectionFrame.widget_list_by_type.button[1] if (Details.tooltip.anchored_to == 1) then buttonToggleAnchor:Disable() else buttonToggleAnchor:Enable() end end --text face local on_select_tooltip_font = function(self, _, fontName) Details.tooltip.fontface = fontName Details:SendOptionsModifiedEvent (DetailsOptionsWindow.instance) end local buildTooltipFontOptions = function() local fonts = {} for name, fontPath in pairs(SharedMedia:HashTable ("font")) do fonts [#fonts+1] = {value = name, icon = font_select_icon, texcoord = font_select_texcoord, label = name, onclick = on_select_tooltip_font, font = fontPath, descfont = name, desc = "Our thoughts strayed constantly\nAnd without boundary\nThe ringing of the division bell had began."} end table.sort (fonts, function(t1, t2) return t1.label < t2.label end) return fonts end --number format local icon = [[Interface\COMMON\mini-hourglass]] local iconcolor = {1, 1, 1, .5} local iconsize = {14, 14} local onSelectTimeAbbreviation = function(_, _, abbreviationtype) Details.tooltip.abbreviation = abbreviationtype Details.atributo_damage:UpdateSelectedToKFunction() Details.atributo_heal:UpdateSelectedToKFunction() Details.atributo_energy:UpdateSelectedToKFunction() Details.atributo_misc:UpdateSelectedToKFunction() Details.atributo_custom:UpdateSelectedToKFunction() afterUpdate() end local abbreviationOptions = { {value = 1, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_NONE"], desc = "Example: 305.500 -> 305500", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 2, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOK"], desc = "Example: 305.500 -> 305.5K", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 3, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOK2"], desc = "Example: 305.500 -> 305K", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 4, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOK0"], desc = "Example: 25.305.500 -> 25M", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 5, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOKMIN"], desc = "Example: 305.500 -> 305.5k", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 6, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOK2MIN"], desc = "Example: 305.500 -> 305k", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 7, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOK0MIN"], desc = "Example: 25.305.500 -> 25m", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 8, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_COMMA"], desc = "Example: 25305500 -> 25.305.500", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize} --, desc = "" } local buildAbbreviationMenu = function() return abbreviationOptions end --maximize method local onSelectMaximize = function(_, _, maximizeType) Details.tooltip.maximize_method = maximizeType Details.atributo_damage:UpdateSelectedToKFunction() Details.atributo_heal:UpdateSelectedToKFunction() Details.atributo_energy:UpdateSelectedToKFunction() Details.atributo_misc:UpdateSelectedToKFunction() Details.atributo_custom:UpdateSelectedToKFunction() afterUpdate() end local icon = [[Interface\Buttons\UI-Panel-BiggerButton-Up]] local iconcolor = {1, 1, 1, 1} local iconcord = {0.1875, 0.78125+0.109375, 0.78125+0.109375+0.03, 0.21875-0.109375-0.03} local maximizeOptions = { {value = 1, label = Loc ["STRING_OPTIONS_TOOLTIPS_MAXIMIZE1"], onclick = onSelectMaximize, icon = icon, iconcolor = iconcolor, texcoord = iconcord}, --, desc = "" {value = 2, label = Loc ["STRING_OPTIONS_TOOLTIPS_MAXIMIZE2"], onclick = onSelectMaximize, icon = icon, iconcolor = iconcolor, texcoord = iconcord}, --, desc = "" {value = 3, label = Loc ["STRING_OPTIONS_TOOLTIPS_MAXIMIZE3"], onclick = onSelectMaximize, icon = icon, iconcolor = iconcolor, texcoord = iconcord}, --, desc = "" {value = 4, label = Loc ["STRING_OPTIONS_TOOLTIPS_MAXIMIZE4"], onclick = onSelectMaximize, icon = icon, iconcolor = iconcolor, texcoord = iconcord}, --, desc = "" {value = 5, label = Loc ["STRING_OPTIONS_TOOLTIPS_MAXIMIZE5"], onclick = onSelectMaximize, icon = icon, iconcolor = iconcolor, texcoord = iconcord}, --, desc = "" } local buildMaximizeMenu = function() return maximizeOptions end --tooltip side local onSelectAnchorPoint = function(_, _, selected_anchor) Details.tooltip.anchor_point = selected_anchor afterUpdate() end local anchorPointOptions = { {value = "top", label = Loc ["STRING_ANCHOR_TOP"], onclick = onSelectAnchorPoint, icon = [[Interface\Buttons\Arrow-Up-Up]], texcoord = {0, 0.8125, 0.1875, 0.875}}, {value = "bottom", label = Loc ["STRING_ANCHOR_BOTTOM"], onclick = onSelectAnchorPoint, icon = [[Interface\Buttons\Arrow-Up-Up]], texcoord = {0, 0.875, 1, 0.1875}}, {value = "left", label = Loc ["STRING_ANCHOR_LEFT"], onclick = onSelectAnchorPoint, icon = [[Interface\CHATFRAME\UI-InChatFriendsArrow]], texcoord = {0.5, 0, 0, 0.8125}}, {value = "right", label = Loc ["STRING_ANCHOR_RIGHT"], onclick = onSelectAnchorPoint, icon = [[Interface\CHATFRAME\UI-InChatFriendsArrow]], texcoord = {0, 0.5, 0, 0.8125}}, {value = "topleft", label = Loc ["STRING_ANCHOR_TOPLEFT"], onclick = onSelectAnchorPoint, icon = [[Interface\Buttons\UI-AutoCastableOverlay]], texcoord = {0.796875, 0.609375, 0.1875, 0.375}}, {value = "bottomleft", label = Loc ["STRING_ANCHOR_BOTTOMLEFT"], onclick = onSelectAnchorPoint, icon = [[Interface\Buttons\UI-AutoCastableOverlay]], texcoord = {0.796875, 0.609375, 0.375, 0.1875}}, {value = "topright", label = Loc ["STRING_ANCHOR_TOPRIGHT"], onclick = onSelectAnchorPoint, icon = [[Interface\Buttons\UI-AutoCastableOverlay]], texcoord = {0.609375, 0.796875, 0.1875, 0.375}}, {value = "bottomright", label = Loc ["STRING_ANCHOR_BOTTOMRIGHT"], onclick = onSelectAnchorPoint, icon = [[Interface\Buttons\UI-AutoCastableOverlay]], texcoord = {0.609375, 0.796875, 0.375, 0.1875}}, } local buildAnchorPointMenu = function() return anchorPointOptions end --tooltip relative side local onSelectAnchorRelative = function(_, _, selected_anchor) Details.tooltip.anchor_relative = selected_anchor afterUpdate() end local anchorRelativeOptions = { {value = "top", label = Loc ["STRING_ANCHOR_TOP"], onclick = onSelectAnchorRelative, icon = [[Interface\Buttons\Arrow-Up-Up]], texcoord = {0, 0.8125, 0.1875, 0.875}}, {value = "bottom", label = Loc ["STRING_ANCHOR_BOTTOM"], onclick = onSelectAnchorRelative, icon = [[Interface\Buttons\Arrow-Up-Up]], texcoord = {0, 0.875, 1, 0.1875}}, {value = "left", label = Loc ["STRING_ANCHOR_LEFT"], onclick = onSelectAnchorRelative, icon = [[Interface\CHATFRAME\UI-InChatFriendsArrow]], texcoord = {0.5, 0, 0, 0.8125}}, {value = "right", label = Loc ["STRING_ANCHOR_RIGHT"], onclick = onSelectAnchorRelative, icon = [[Interface\CHATFRAME\UI-InChatFriendsArrow]], texcoord = {0, 0.5, 0, 0.8125}}, {value = "topleft", label = Loc ["STRING_ANCHOR_TOPLEFT"], onclick = onSelectAnchorRelative, icon = [[Interface\Buttons\UI-AutoCastableOverlay]], texcoord = {0.796875, 0.609375, 0.1875, 0.375}}, {value = "bottomleft", label = Loc ["STRING_ANCHOR_BOTTOMLEFT"], onclick = onSelectAnchorRelative, icon = [[Interface\Buttons\UI-AutoCastableOverlay]], texcoord = {0.796875, 0.609375, 0.375, 0.1875}}, {value = "topright", label = Loc ["STRING_ANCHOR_TOPRIGHT"], onclick = onSelectAnchorRelative, icon = [[Interface\Buttons\UI-AutoCastableOverlay]], texcoord = {0.609375, 0.796875, 0.1875, 0.375}}, {value = "bottomright", label = Loc ["STRING_ANCHOR_BOTTOMRIGHT"], onclick = onSelectAnchorRelative, icon = [[Interface\Buttons\UI-AutoCastableOverlay]], texcoord = {0.609375, 0.796875, 0.375, 0.1875}}, } local buildAnchorRelativeMenu = function() return anchorRelativeOptions end --anchor local onSelectAnchor = function(_, _, selected_anchor) Details.tooltip.anchored_to = selected_anchor refreshToggleAnchor() afterUpdate() end local anchorOptions = { {value = 1, label = Loc ["STRING_OPTIONS_TOOLTIPS_ANCHOR_TO1"], onclick = onSelectAnchor, icon = [[Interface\Buttons\UI-GuildButton-OfficerNote-Disabled]]}, {value = 2, label = Loc ["STRING_OPTIONS_TOOLTIPS_ANCHOR_TO2"], onclick = onSelectAnchor, icon = [[Interface\Buttons\UI-GuildButton-OfficerNote-Disabled]]}, } local buildAnchorMenu = function() return anchorOptions end local sectionOptions = { {type = "label", get = function() return Loc["STRING_OPTIONS_TOOLTIP_ANCHORTEXTS"] end, text_template = subSectionTitleTextTemplate}, {--text shadow type = "toggle", get = function() return Details.tooltip.fontshadow end, set = function(self, fixedparam, value) Details.tooltip.fontshadow = value afterUpdate() end, name = Loc ["STRING_OPTIONS_TEXT_LOUTILINE"], desc = Loc ["STRING_OPTIONS_TOOLTIPS_FONTSHADOW_DESC"], }, {--text size type = "range", get = function() return Details.tooltip.fontsize end, set = function(self, fixedparam, value) Details.tooltip.fontsize = value afterUpdate() end, min = 5, max = 32, step = 1, name = Loc ["STRING_OPTIONS_TEXT_SIZE"], desc = Loc ["STRING_OPTIONS_TEXT_SIZE_DESC"], }, {--text font type = "select", get = function() return Details.tooltip.fontface end, values = function() return buildTooltipFontOptions() end, name = Loc ["STRING_OPTIONS_TEXT_FONT"], desc = Loc ["STRING_OPTIONS_TEXT_FONT_DESC"], }, {type = "blank"}, {type = "label", get = function() return Loc["STRING_OPTIONS_TOOLTIPS_FONTCOLOR"] end}, {--text color left type = "color", get = function() local r, g, b, a = unpack(Details.tooltip.fontcolor) return {r, g, b, a} end, set = function(self, r, g, b, a) local color = Details.tooltip.fontcolor color[1] = r color[2] = g color[3] = b color[4] = a afterUpdate() end, name = Loc ["STRING_LEFT"], desc = Loc ["STRING_LEFT"], }, {--text color right type = "color", get = function() local r, g, b, a = unpack(Details.tooltip.fontcolor_right) return {r, g, b, a} end, set = function(self, r, g, b, a) local color = Details.tooltip.fontcolor_right color[1] = r color[2] = g color[3] = b color[4] = a afterUpdate() end, name = Loc ["STRING_RIGHT"], desc = Loc ["STRING_RIGHT"], }, {--text color header type = "color", get = function() local r, g, b, a = unpack(Details.tooltip.header_text_color) return {r, g, b, a} end, set = function(self, r, g, b, a) local color = Details.tooltip.header_text_color color[1] = r color[2] = g color[3] = b color[4] = a afterUpdate() end, name = Loc ["STRING_OPTIONS_TOOLTIPS_ANCHORCOLOR"], desc = Loc ["STRING_OPTIONS_TOOLTIPS_ANCHORCOLOR"], }, {type = "blank"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_MENU_ATTRIBUTESETTINGS_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--bar color type = "color", get = function() local r, g, b, a = unpack(Details.tooltip.bar_color) return {r, g, b, a} end, set = function(self, r, g, b, a) local color = Details.tooltip.bar_color color[1] = r color[2] = g color[3] = b color[4] = a afterUpdate() end, name = "Bar Color", desc = "Bar Color", }, {--background color type = "color", get = function() local r, g, b, a = unpack(Details.tooltip.background) return {r, g, b, a} end, set = function(self, r, g, b, a) local color = Details.tooltip.background color[1] = r color[2] = g color[3] = b color[4] = a afterUpdate() end, name = Loc ["STRING_OPTIONS_TOOLTIPS_BACKGROUNDCOLOR"], desc = Loc ["STRING_OPTIONS_TOOLTIPS_BACKGROUNDCOLOR"], }, {--divisor color type = "color", get = function() local r, g, b, a = unpack(Details.tooltip.divisor_color) return {r, g, b, a} end, set = function(self, r, g, b, a) local color = Details.tooltip.divisor_color color[1] = r color[2] = g color[3] = b color[4] = a afterUpdate() end, name = "Divisor Color", desc = "Divisor Color", }, {--rounded corner type = "toggle", get = function() return Details.tooltip.rounded_corner end, set = function(self, fixedparam, value) Details.tooltip.rounded_corner = value afterUpdate() end, name = "Show Rounded Border", desc = "Show Rounded Border", }, {type = "blank"}, {--show amount type = "toggle", get = function() return Details.tooltip.show_amount end, set = function(self, fixedparam, value) Details.tooltip.show_amount = value afterUpdate() end, name = Loc ["STRING_OPTIONS_TOOLTIPS_SHOWAMT"], desc = Loc ["STRING_OPTIONS_TOOLTIPS_SHOWAMT_DESC"], }, {--number system type = "select", get = function() return Details.tooltip.abbreviation end, values = function() return buildAbbreviationMenu() end, name = Loc ["STRING_OPTIONS_PS_ABBREVIATE"], desc = Loc ["STRING_OPTIONS_PS_ABBREVIATE_DESC"], }, {--maximize method type = "select", get = function() return Details.tooltip.maximize_method end, values = function() return buildMaximizeMenu() end, name = Loc ["STRING_OPTIONS_TOOLTIPS_MAXIMIZE"], desc = Loc ["STRING_OPTIONS_TOOLTIPS_MAXIMIZE_DESC"], }, {type = "breakline"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_TOOLTIPS_ANCHOR_POINT"] end, text_template = subSectionTitleTextTemplate}, {--anchor type = "select", get = function() return Details.tooltip.anchored_to end, values = function() return buildAnchorMenu() end, name = Loc ["STRING_OPTIONS_TOOLTIPS_ANCHOR_TO"], desc = Loc ["STRING_OPTIONS_TOOLTIPS_ANCHOR_TO_DESC"], }, {--toggle anchor point type = "execute", func = function(self) _G.DetailsTooltipAnchor:MoveAnchor() end, icontexture = [[Interface\PetBattles\PetBattle-LockIcon]], icontexcoords = {0.0703125, 0.9453125, 0.0546875, 0.9453125}, name = Loc ["STRING_OPTIONS_TOOLTIPS_ANCHOR_TO_CHOOSE"], desc = Loc ["STRING_OPTIONS_TOOLTIPS_ANCHOR_TO_CHOOSE_DESC"], }, {type = "blank"}, {--tooltip anchor side type = "select", get = function() return Details.tooltip.anchor_point end, values = function() return buildAnchorPointMenu() end, name = Loc ["STRING_OPTIONS_TOOLTIPS_ANCHOR_ATTACH"], desc = Loc ["STRING_OPTIONS_TOOLTIPS_ANCHOR_ATTACH_DESC"], }, {--tooltip anchor side type = "select", get = function() return Details.tooltip.anchor_relative end, values = function() return buildAnchorRelativeMenu() end, name = Loc ["STRING_OPTIONS_TOOLTIPS_ANCHOR_RELATIVE"], desc = Loc ["STRING_OPTIONS_TOOLTIPS_ANCHOR_RELATIVE_DESC"], }, {--anchor offset x type = "range", get = function() return Details.tooltip.anchor_offset[1] end, set = function(self, fixedparam, value) Details.tooltip.anchor_offset[1] = value afterUpdate() end, min = -100, max = 100, step = 1, name = Loc ["STRING_OPTIONS_TOOLTIPS_OFFSETX"], desc = Loc ["STRING_OPTIONS_TOOLTIPS_OFFSETX_DESC"], }, {--anchor offset y type = "range", get = function() return Details.tooltip.anchor_offset[2] end, set = function(self, fixedparam, value) Details.tooltip.anchor_offset[2] = value afterUpdate() end, min = -100, max = 100, step = 1, name = Loc ["STRING_OPTIONS_TOOLTIPS_OFFSETY"], desc = Loc ["STRING_OPTIONS_TOOLTIPS_OFFSETY_DESC"], }, } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) refreshToggleAnchor() end tinsert(Details.optionsSection, buildSection) end -- ~11 ~datafeed do local buildSection = function(sectionFrame) local onSelectMinimapAction = function(_, _, option) Details.minimap.onclick_what_todo = option afterUpdate() end local menu = { {value = 1, label = Loc ["STRING_OPTIONS_MINIMAP_ACTION1"], onclick = onSelectMinimapAction, icon = [[Interface\FriendsFrame\FriendsFrameScrollIcon]]}, {value = 2, label = Loc ["STRING_OPTIONS_MINIMAP_ACTION2"], onclick = onSelectMinimapAction, icon = [[Interface\Buttons\UI-GuildButton-PublicNote-Up]], iconcolor = {1, .8, 0, 1}}, {value = 3, label = Loc ["STRING_OPTIONS_MINIMAP_ACTION3"], onclick = onSelectMinimapAction, icon = [[Interface\Buttons\UI-CheckBox-Up]], texcoord = {0.1, 0.9, 0.1, 0.9}}, } local buildMiniMapButtonAction = function() return menu end local onSelectTimeAbbreviation = function(_, _, abbreviationtype) Details.tooltip.abbreviation = abbreviationtype Details:BrokerTick() afterUpdate() end local icon = [[Interface\COMMON\mini-hourglass]] local iconcolor = {1, 1, 1, .5} local iconsize = {14, 14} local abbreviationOptions = { {value = 1, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_NONE"], desc = Loc ["STRING_EXAMPLE"] .. ": 305.500 -> 305500", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 2, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOK"], desc = Loc ["STRING_EXAMPLE"] .. ": 305.500 -> 305.5K", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 3, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOK2"], desc = Loc ["STRING_EXAMPLE"] .. ": 305.500 -> 305K", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 4, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOK0"], desc = Loc ["STRING_EXAMPLE"] .. ": 25.305.500 -> 25M", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 5, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOKMIN"], desc = Loc ["STRING_EXAMPLE"] .. ": 305.500 -> 305.5k", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 6, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOK2MIN"], desc = Loc ["STRING_EXAMPLE"] .. ": 305.500 -> 305k", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 7, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_TOK0MIN"], desc = Loc ["STRING_EXAMPLE"] .. ": 25.305.500 -> 25m", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize}, --, desc = "" {value = 8, label = Loc ["STRING_OPTIONS_PS_ABBREVIATE_COMMA"], desc = Loc ["STRING_EXAMPLE"] .. ": 25305500 -> 25.305.500", onclick = onSelectTimeAbbreviation, icon = icon, iconcolor = iconcolor, iconsize = iconsize} --, desc = "" } local buildAbbreviationMenu = function() return abbreviationOptions end local sectionOptions = { {type = "blank"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_MINIMAP_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--minimap icon enabled type = "toggle", get = function() return not Details.minimap.hide end, set = function(self, fixedparam, value) Details.minimap.hide = not value local LDBIcon = LDB and LibStub("LibDBIcon-1.0", true) LDBIcon:Refresh("Details", Details.minimap) if (Details.minimap.hide) then LDBIcon:Hide("Details") else LDBIcon:Show("Details") end afterUpdate() end, name = Loc ["STRING_OPTIONS_MINIMAP"], desc = Loc ["STRING_OPTIONS_MINIMAP_DESC"], }, {--minimap button on click type = "select", get = function() return Details.minimap.onclick_what_todo end, values = function() return buildMiniMapButtonAction() end, name = Loc ["STRING_OPTIONS_MINIMAP_ACTION"], desc = Loc ["STRING_OPTIONS_MINIMAP_ACTION_DESC"], }, {type = "blank"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_DATABROKER"] end, text_template = subSectionTitleTextTemplate}, {--broker text type = "textentry", get = function() return Details.data_broker_text or "" end, func = function(self, _, text) local brokerText = text or "" Details:SetDataBrokerText (brokerText) afterUpdate() end, name = Loc ["STRING_OPTIONS_DATABROKER_TEXT"], desc = Loc ["STRING_OPTIONS_DATABROKER_TEXT1_DESC"], }, {--open broker text editor type = "execute", func = function(self) Details:OpenBrokerTextEditor() end, icontexture = [[Interface\HELPFRAME\OpenTicketIcon]], icontexcoords = {.1, .9, .1, .9}, name = Loc ["STRING_OPTIONS_OPENBROKER"], desc = Loc ["STRING_OPTIONS_OPEN_ROWTEXT_EDITOR"], }, {--broker text format type = "select", get = function() return Details.minimap.text_format end, values = function() return buildAbbreviationMenu() end, name = Loc ["STRING_OPTIONS_PS_ABBREVIATE"], desc = Loc ["STRING_OPTIONS_PS_ABBREVIATE_DESC"], }, {type = "blank"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_ILVL_TRACKER"] end, text_template = subSectionTitleTextTemplate}, {--item level tracker enabled type = "toggle", get = function() return Details.ilevel:IsTrackerEnabled() end, set = function(self, fixedparam, value) Details.ilevel:TrackItemLevel(value) afterUpdate() end, name = Loc ["STRING_ENABLED"], desc = Loc ["STRING_OPTIONS_ILVL_TRACKER_DESC"], }, {type = "blank"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_REPORT_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--enabled heal spell links type = "toggle", get = function() return Details.report_heal_links end, set = function(self, fixedparam, value) Details.report_heal_links = value afterUpdate() end, name = Loc ["STRING_OPTIONS_REPORT_HEALLINKS"], desc = Loc ["STRING_OPTIONS_REPORT_HEALLINKS_DESC"], }, } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) end tinsert(Details.optionsSection, buildSection) end -- ~12 ~wallpaper do local buildSection = function(sectionFrame) --callback from the image editor local callmeback = function(width, height, overlayColor, alpha, texCoords) editInstanceSetting(currentInstance, "InstanceWallpaper", nil, nil, alpha, texCoords, width, height, overlayColor) sectionFrame:UpdateWallpaperInfo() afterUpdate() end --select wallpaper local onSelectSecTexture = function(self, instance, texturePath) local textureOptions = sectionFrame.wallpaperOptions local selectedTextureOption = texturePath if (texturePath:find("TALENTFRAME")) then editInstanceSetting(currentInstance, "InstanceWallpaper", texturePath, nil, nil, {0, 1, 0, 0.703125}, nil, nil, {1, 1, 1, 1}) afterUpdate() if (_G.DetailsImageEdit and _G.DetailsImageEdit:IsShown()) then local wp = currentInstance.wallpaper if (wp.anchor == "all") then DF:ImageEditor (callmeback, wp.texture, wp.texcoord, wp.overlay, currentInstance.baseframe.wallpaper:GetWidth(), currentInstance.baseframe.wallpaper:GetHeight(), nil, wp.alpha, true) else DF:ImageEditor (callmeback, wp.texture, wp.texcoord, wp.overlay, currentInstance.baseframe.wallpaper:GetWidth(), currentInstance.baseframe.wallpaper:GetHeight(), nil, wp.alpha) end end elseif (texturePath:find("EncounterJournal")) then editInstanceSetting(currentInstance, "InstanceWallpaper", texturePath, nil, nil, {0.06, 0.68, 0.1, 0.57}, nil, nil, {1, 1, 1, 1}) afterUpdate() if (_G.DetailsImageEdit and _G.DetailsImageEdit:IsShown()) then local wp = currentInstance.wallpaper if (wp.anchor == "all") then DF:ImageEditor (callmeback, wp.texture, wp.texcoord, wp.overlay, currentInstance.baseframe.wallpaper:GetWidth(), currentInstance.baseframe.wallpaper:GetHeight(), nil, wp.alpha, true) else DF:ImageEditor (callmeback, wp.texture, wp.texcoord, wp.overlay, currentInstance.baseframe.wallpaper:GetWidth(), currentInstance.baseframe.wallpaper:GetHeight(), nil, wp.alpha) end end else local texCoords = selectedTextureOption and selectedTextureOption.texcoord editInstanceSetting(currentInstance, "InstanceWallpaper", texturePath, nil, nil, texCoords or {0, 1, 0, 1}, nil, nil, {1, 1, 1, 1}) afterUpdate() if (_G.DetailsImageEdit and _G.DetailsImageEdit:IsShown()) then local wp = currentInstance.wallpaper if (wp.anchor == "all") then DF:ImageEditor (callmeback, wp.texture, wp.texcoord, wp.overlay, currentInstance.baseframe.wallpaper:GetWidth(), currentInstance.baseframe.wallpaper:GetHeight(), nil, wp.alpha, true) else DF:ImageEditor (callmeback, wp.texture, wp.texcoord, wp.overlay, currentInstance.baseframe.wallpaper:GetWidth(), currentInstance.baseframe.wallpaper:GetHeight(), nil, wp.alpha) end end end sectionFrame:UpdateWallpaperInfo() end sectionFrame.wallpaperOptions = { {value = [[Interface\ACHIEVEMENTFRAME\UI-Achievement-HorizontalShadow]], label = "Horizontal Gradient", onclick = onSelectSecTexture, icon = [[Interface\ACHIEVEMENTFRAME\UI-Achievement-HorizontalShadow]], texcoord = nil}, {value = [[Interface\ACHIEVEMENTFRAME\UI-Achievement-Parchment-Highlight]], label = "Golden Highlight", onclick = onSelectSecTexture, icon = [[Interface\ACHIEVEMENTFRAME\UI-Achievement-Parchment-Highlight]], texcoord = {0.35, 0.655, 0.0390625, 0.859375}}, {value = [[Interface\ACHIEVEMENTFRAME\UI-Achievement-Stat-Buttons]], label = "Gray Gradient", onclick = onSelectSecTexture, icon = [[Interface\ACHIEVEMENTFRAME\UI-Achievement-Stat-Buttons]], texcoord = {0, 1, 97/128, 1}}, {value = [[Interface\ACHIEVEMENTFRAME\UI-Achievement-Borders]], label = "Orange Gradient", onclick = onSelectSecTexture, icon = [[Interface\ACHIEVEMENTFRAME\UI-Achievement-Borders]], texcoord = {160/512, 345/512, 80/256, 130/256}}, {value = [[Interface\ARCHEOLOGY\Arch-BookCompletedLeft]], label = "Book Wallpaper", onclick = onSelectSecTexture, icon = [[Interface\ARCHEOLOGY\Arch-BookCompletedLeft]], texcoord = nil}, {value = [[Interface\ARCHEOLOGY\Arch-BookItemLeft]], label = "Book Wallpaper 2", onclick = onSelectSecTexture, icon = [[Interface\ARCHEOLOGY\Arch-BookItemLeft]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-deathknight-blood]], label = "Blood", onclick = onSelectSecTexture, icon = [[Interface\ICONS\Spell_Deathknight_BloodPresence]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-deathknight-frost]], label = "Frost", onclick = onSelectSecTexture, icon = [[Interface\ICONS\Spell_Deathknight_FrostPresence]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-deathknight-unholy]], label = "Unholy", onclick = onSelectSecTexture, icon = [[Interface\ICONS\Spell_Deathknight_UnholyPresence]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-druid-bear]], label = "Guardian", onclick = onSelectSecTexture, icon = [[Interface\ICONS\ability_racial_bearform]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-druid-restoration]], label = "Restoration", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_nature_healingtouch]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-druid-cat]], label = "Feral", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_shadow_vampiricaura]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-druid-balance]], label = "Balance", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_nature_starfall]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-hunter-beastmaster]], label = "Beast Mastery", onclick = onSelectSecTexture, icon = [[Interface\ICONS\ability_hunter_bestialdiscipline]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-hunter-marksman]], label = "Marksmanship", onclick = onSelectSecTexture, icon = [[Interface\ICONS\ability_hunter_focusedaim]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-hunter-survival]], label = "Survival", onclick = onSelectSecTexture, icon = [[Interface\ICONS\ability_hunter_camouflage]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-mage-arcane]], label = "Arcane", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_holy_magicalsentry]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-mage-fire]], label = "Fire", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_fire_firebolt02]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-mage-frost]], label = "Frost", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_frost_frostbolt02]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-monk-brewmaster]], label = "Brewmaster", onclick = onSelectSecTexture, icon = [[Interface\ICONS\monk_stance_drunkenox]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-monk-mistweaver]], label = "Mistweaver", onclick = onSelectSecTexture, icon = [[Interface\ICONS\monk_stance_wiseserpent]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-monk-battledancer]], label = "Windwalker", onclick = onSelectSecTexture, icon = [[Interface\ICONS\monk_stance_whitetiger]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-paladin-holy]], label = "Holy", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_holy_holybolt]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-paladin-protection]], label = "Protection", onclick = onSelectSecTexture, icon = [[Interface\ICONS\ability_paladin_shieldofthetemplar]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-paladin-retribution]], label = "Retribution", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_holy_auraoflight]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-priest-discipline]], label = "Discipline", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_holy_powerwordshield]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-priest-holy]], label = "Holy", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_holy_guardianspirit]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-priest-shadow]], label = "Shadow", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_shadow_shadowwordpain]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-rogue-assassination]], label = "Assassination", onclick = onSelectSecTexture, icon = [[Interface\ICONS\ability_rogue_eviscerate]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-rogue-combat]], label = "Combat", onclick = onSelectSecTexture, icon = [[Interface\ICONS\ability_backstab]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-rogue-subtlety]], label = "Subtlety", onclick = onSelectSecTexture, icon = [[Interface\ICONS\ability_stealth]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-shaman-elemental]], label = "Elemental", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_nature_lightning]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-shaman-enhancement]], label = "Enhancement", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_nature_lightningshield]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-shaman-restoration]], label = "Restoration", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_nature_magicimmunity]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-warlock-affliction]], label = "Affliction", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_shadow_deathcoil]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-warlock-demonology]], label = "Demonology", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_shadow_metamorphosis]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-warlock-destruction]], label = "Destruction", onclick = onSelectSecTexture, icon = [[Interface\ICONS\spell_shadow_rainoffire]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-warrior-arms]], label = "Arms", onclick = onSelectSecTexture, icon = [[Interface\ICONS\ability_warrior_savageblow]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-warrior-fury]], label = "Fury", onclick = onSelectSecTexture, icon = [[Interface\ICONS\ability_warrior_innerrage]], texcoord = nil}, {value = [[Interface\TALENTFRAME\bg-warrior-protection]], label = "Protection", onclick = onSelectSecTexture, icon = [[Interface\ICONS\ability_warrior_defensivestance]], texcoord = nil}, } --create preview local previewX, previewY = 460, startY-20 local preview = sectionFrame:CreateTexture(nil, "overlay") preview:SetDrawLayer("artwork", 3) preview:SetSize(256, 128) preview:SetPoint("topleft", sectionFrame, "topleft", previewX, previewY) --background white local whiteBackground = sectionFrame:CreateTexture(nil, "overlay") whiteBackground:SetDrawLayer("background") whiteBackground:SetSize(255, 128) whiteBackground:SetPoint("topleft", sectionFrame, "topleft", previewX, previewY) whiteBackground:SetColorTexture(1, 1, 1, 1) --background grid local icon1 = DF:NewImage(sectionFrame, nil, 128, 64, "artwork", nil, nil, "$parentIcon1") icon1:SetTexture("Interface\\AddOns\\Details\\images\\icons") icon1:SetPoint("topleft", sectionFrame, "topleft", previewX, previewY) icon1:SetDrawLayer("artwork", 1) icon1:SetTexCoord(0.337890625, 0.5859375, 0.59375, 0.716796875-0.0009765625) --173 304 300 367 local icon2 = DF:NewImage(sectionFrame, nil, 128, 64, "artwork", nil, nil, "$parentIcon2") icon2:SetTexture("Interface\\AddOns\\Details\\images\\icons") icon2:SetPoint("left", icon1.widget, "right", -1, 0) icon2:SetDrawLayer("artwork", 1) icon2:SetTexCoord(0.337890625, 0.5859375, 0.59375, 0.716796875-0.0009765625) --173 304 300 367 local icon3 = DF:NewImage(sectionFrame, nil, 128, 64, "artwork", nil, nil, "$parentIcon3") icon3:SetTexture("Interface\\AddOns\\Details\\images\\icons") icon3:SetPoint("top", icon1.widget, "bottom") icon3:SetDrawLayer("artwork", 1) icon3:SetTexCoord(0.337890625, 0.5859375, 0.59375+0.0009765625, 0.716796875) --173 304 300 367 local icon4 = DF:NewImage(sectionFrame, nil, 128, 64, "artwork", nil, nil, "$parentIcon4") icon4:SetTexture("Interface\\AddOns\\Details\\images\\icons") icon4:SetPoint("left", icon3.widget, "right", -1, 0) icon4:SetDrawLayer("artwork", 1) icon4:SetTexCoord(0.337890625, 0.5859375, 0.59375+0.0009765625, 0.716796875) --173 304 300 367 icon1:SetVertexColor(.15, .15, .15, 1) icon2:SetVertexColor(.15, .15, .15, 1) icon3:SetVertexColor(.15, .15, .15, 1) icon4:SetVertexColor(.15, .15, .15, 1) --corners local w, h = 20, 20 local L1 = sectionFrame:CreateTexture(nil, "overlay") L1:SetPoint("topleft", preview, "topleft") L1:SetTexture("Interface\\AddOns\\Details\\images\\icons") L1:SetTexCoord(0.13671875+0.0009765625, 0.234375, 0.29296875, 0.1953125+0.0009765625) L1:SetSize(w, h) L1:SetDrawLayer("overlay", 2) L1:SetVertexColor(1, 1, 1, .8) local L2 = sectionFrame:CreateTexture(nil, "overlay") L2:SetPoint("bottomleft", preview, "bottomleft") L2:SetTexture("Interface\\AddOns\\Details\\images\\icons") L2:SetTexCoord(0.13671875+0.0009765625, 0.234375, 0.1953125+0.0009765625, 0.29296875) L2:SetSize(w, h) L2:SetDrawLayer("overlay", 2) L2:SetVertexColor(1, 1, 1, .8) local L3 = sectionFrame:CreateTexture(nil, "overlay") L3:SetPoint("bottomright", preview, "bottomright", 0, 0) L3:SetTexture("Interface\\AddOns\\Details\\images\\icons") L3:SetTexCoord(0.234375, 0.13671875-0.0009765625, 0.1953125+0.0009765625, 0.29296875) L3:SetSize(w, h) L3:SetDrawLayer("overlay", 5) L3:SetVertexColor(1, 1, 1, .8) local L4 = sectionFrame:CreateTexture(nil, "overlay") L4:SetPoint("topright", preview, "topright", 0, 0) L4:SetTexture("Interface\\AddOns\\Details\\images\\icons") L4:SetTexCoord(0.234375, 0.13671875-0.0009765625, 0.29296875, 0.1953125+0.0009765625) L4:SetSize(w, h) L4:SetDrawLayer("overlay", 5) L4:SetVertexColor(1, 1, 1, .8) --update preview function sectionFrame:UpdateWallpaperInfo() local wallpaper = currentInstance.wallpaper preview:SetTexture(wallpaper.texture) preview:SetTexCoord(unpack(wallpaper.texcoord)) preview:SetVertexColor(unpack(wallpaper.overlay)) preview:SetAlpha(wallpaper.alpha) end --wallpaper alignment local onSelectAnchor = function(_, instance, anchor) editInstanceSetting(currentInstance, "InstanceWallpaper", nil, anchor) afterUpdate() sectionFrame:UpdateWallpaperInfo() end local anchorMenu = { {value = "all", label = "Fill", onclick = onSelectAnchor}, {value = "titlebar", label = "Full Body", onclick = onSelectAnchor}, {value = "center", label = "Center", onclick = onSelectAnchor}, {value = "stretchLR", label = "Stretch Left-Right", onclick = onSelectAnchor}, {value = "stretchTB", label = "Stretch Top-Bottom", onclick = onSelectAnchor}, {value = "topleft", label = "Top Left", onclick = onSelectAnchor}, {value = "bottomleft", label = "Bottom Left", onclick = onSelectAnchor}, {value = "topright", label = "Top Right", onclick = onSelectAnchor}, {value = "bottomright", label = "Bottom Right", onclick = onSelectAnchor}, } local buildWallpaperAnchorMenu = function() return anchorMenu end --open image editor local startImageEdit = function() if (not currentInstance.wallpaper.texture) then Details:Msg("no texture to edit.") return end local wallpaper = currentInstance.wallpaper if (wallpaper.texture:find("TALENTFRAME")) then if (wallpaper.anchor == "all") then DF:ImageEditor (callmeback, wallpaper.texture, wallpaper.texcoord, wallpaper.overlay, currentInstance.baseframe.wallpaper:GetWidth(), currentInstance.baseframe.wallpaper:GetHeight(), nil, wallpaper.alpha, true) else DF:ImageEditor (callmeback, wallpaper.texture, wallpaper.texcoord, wallpaper.overlay, currentInstance.baseframe.wallpaper:GetWidth(), currentInstance.baseframe.wallpaper:GetHeight(), nil, wallpaper.alpha) end else if (wallpaper.anchor == "all") then DF:ImageEditor (callmeback, wallpaper.texture, wallpaper.texcoord, wallpaper.overlay, currentInstance.baseframe.wallpaper:GetWidth(), currentInstance.baseframe.wallpaper:GetHeight(), nil, wallpaper.alpha, true) else DF:ImageEditor (callmeback, wallpaper.texture, wallpaper.texcoord, wallpaper.overlay, currentInstance.baseframe.wallpaper:GetWidth(), currentInstance.baseframe.wallpaper:GetHeight(), nil, wallpaper.alpha) end end end --open image to use as wallpaper local loadImage = function() if (not DetailsLoadWallpaperImage) then local f = CreateFrame("frame", "DetailsLoadWallpaperImage", UIParent, "BackdropTemplate") f:SetPoint("center", UIParent, "center") f:SetFrameStrata("FULLSCREEN") f:SetSize(550, 170) f:EnableMouse(true) f:SetMovable(true) f:SetScript("OnMouseDown", function(self, button) if (self.isMoving) then return end if (button == "RightButton") then self:Hide() else self:StartMoving() self.isMoving = true end end) f:SetScript("OnMouseUp", function(self, button) if (self.isMoving and button == "LeftButton") then self:StopMovingOrSizing() self.isMoving = nil end end) DF:ApplyStandardBackdrop(f) DF:CreateTitleBar(f, "Load Your Image") --localize-me tinsert(_G.UISpecialFrames, "DetailsLoadWallpaperImage") local t = f:CreateFontString(nil, "overlay", "GameFontNormal") t:SetText(Loc ["STRING_OPTIONS_WALLPAPER_LOAD_EXCLAMATION"]) t:SetPoint("topleft", f, "topleft", 15, -25) t:SetJustifyH("left") f.t = t local filename = f:CreateFontString(nil, "overlay", "GameFontHighlightLeft") filename:SetPoint("topleft", f, "topleft", 15, -128) filename:SetText(Loc ["STRING_OPTIONS_WALLPAPER_LOAD_FILENAME"]) local editbox = DF:NewTextEntry(f, nil, "$parentFileName", "FileName", 160, 20, function() end, nil, nil, nil, nil, options_dropdown_template) editbox:SetPoint("left", filename, "right", 2, 0) editbox.tooltip = Loc ["STRING_OPTIONS_WALLPAPER_LOAD_FILENAME_DESC"] local okey_func = function() local text = editbox:GetText() if (text == "") then return end local instance = _G.DetailsOptionsWindow.instance local path = "Interface\\" .. text editbox:ClearFocus() instance:InstanceWallpaper (path, "all", 0.50, {0, 1, 0, 1}, 256, 256, {1, 1, 1, 1}) Details:OpenOptionsWindow (instance) sectionFrame:UpdateWallpaperInfo() end local okey = DF:NewButton(f, _, "$parentOkeyButton", nil, 105, 20, okey_func, nil, nil, nil, Loc ["STRING_OPTIONS_WALLPAPER_LOAD_OKEY"], 1, options_button_template) okey:SetPoint("left", editbox.widget, "right", 2, 0) local throubleshoot_func = function() if (t:GetText() == Loc ["STRING_OPTIONS_WALLPAPER_LOAD_EXCLAMATION"]) then t:SetText(Loc ["STRING_OPTIONS_WALLPAPER_LOAD_TROUBLESHOOT_TEXT"]) else _G.DetailsLoadWallpaperImage.t:SetText(Loc ["STRING_OPTIONS_WALLPAPER_LOAD_EXCLAMATION"]) end end local throubleshoot = DF:NewButton(f, _, "$parentThroubleshootButton", nil, 105, 20, throubleshoot_func, nil, nil, nil, Loc ["STRING_OPTIONS_WALLPAPER_LOAD_TROUBLESHOOT"], 1, options_button_template) throubleshoot:SetPoint("left", okey, "right", 2, 0) --throubleshoot:InstallCustomTexture() end _G.DetailsLoadWallpaperImage.t:SetText(Loc ["STRING_OPTIONS_WALLPAPER_LOAD_EXCLAMATION"]) _G.DetailsLoadWallpaperImage:Show() end local sectionOptions = { {type = "label", get = function() return Loc["STRING_OPTIONS_WALLPAPER_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--enable wallpaper type = "toggle", get = function() return currentInstance.wallpaper.enabled end, set = function(self, fixedparam, value) currentInstance.wallpaper.enabled = value if (value) then --first time using a wallpaper if (not currentInstance.wallpaper.texture) then currentInstance.wallpaper.texture = "Interface\\AddOns\\Details\\images\\background" end editInstanceSetting(currentInstance, "InstanceWallpaper", true) else editInstanceSetting(currentInstance, "InstanceWallpaper", false) end afterUpdate() sectionFrame:UpdateWallpaperInfo() end, name = Loc ["STRING_ENABLED"], desc = Loc ["STRING_OPTIONS_ILVL_TRACKER_DESC"], }, {--select wallpaper type = "select", get = function() return currentInstance.wallpaper.texture or "" end, values = function() return sectionFrame.wallpaperOptions end, name = Loc ["STRING_OPTIONS_WP_GROUP2"], desc = Loc ["STRING_OPTIONS_WP_GROUP2_DESC"], }, {--align wallpaper type = "select", get = function() return currentInstance.wallpaper.anchor or "" end, values = function() return buildWallpaperAnchorMenu() end, name = Loc ["STRING_OPTIONS_WP_ALIGN"], desc = Loc ["STRING_OPTIONS_WP_ALIGN"], }, {--wallpaper level type = "range", get = function() return currentInstance.wallpaper.level end, --default 2 set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetInstanceWallpaperLevel", value) afterUpdate() end, min = 0, max = 3, step = 1, name = "Level", desc = "Change where the wallpaper is placed.", --localize-me }, {--edit wallpaper type = "execute", func = function(self) startImageEdit() end, icontexture = [[Interface\AddOns\Details\images\icons]], icontexcoords = {469/512, 505/512, 290/512, 322/512}, name = Loc ["STRING_OPTIONS_EDITIMAGE"], desc = Loc ["STRING_OPTIONS_EDITIMAGE"], }, {type = "blank"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_WALLPAPER_LOAD_TITLE"] end, text_template = subSectionTitleTextTemplate}, {--load wallpaper type = "execute", func = function(self) loadImage() end, icontexture = [[Interface\AddOns\Details\images\icons]], icontexcoords = {437/512, 467/512, 191/512, 239/512}, name = Loc ["STRING_OPTIONS_WALLPAPER_LOAD"], desc = Loc ["STRING_OPTIONS_WALLPAPER_LOAD"], }, } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) sectionFrame:SetScript("OnShow", function() sectionFrame:UpdateWallpaperInfo() end) end tinsert(Details.optionsSection, buildSection) end -- ~13 ~automation ~auto hide do local buildSection = function(sectionFrame) --auto switch options local Current_Switch_Func = function()end local buildSwitchMenu = function() sectionFrame.lastSwitchList = {} local t = { {value = 0, label = "do not switch", color = {.7, .7, .7, 1}, onclick = Current_Switch_Func, icon = [[Interface\Glues\LOGIN\Glues-CheckBox-Check]]} } local attributes = Details.sub_atributos local i = 1 for atributo, sub_atributo in ipairs(attributes) do local icones = sub_atributo.icones for index, att_name in ipairs(sub_atributo.lista) do local texture, texcoord = unpack(icones [index]) tinsert(t, {value = i, label = att_name, onclick = Current_Switch_Func, icon = texture, texcoord = texcoord}) sectionFrame.lastSwitchList [i] = {atributo, index, i} i = i + 1 end end for index, ptable in ipairs(Details.RaidTables.Menu) do tinsert(t, {value = i, label = ptable [1], onclick = Current_Switch_Func, icon = ptable [2]}) sectionFrame.lastSwitchList [i] = {"raid", ptable [4], i} i = i + 1 end return t end local autoSwitchFrame = CreateFrame("frame", "$parentSwitchMenu", sectionFrame) autoSwitchFrame:SetSize(300, 700) autoSwitchFrame:SetPoint("topleft", 0, 0) --damager not in combat local onSelectAutoSwitchDamagerNoCombat = function(_, _, switchTo) if (switchTo == 0) then currentInstance.switch_damager = false afterUpdate() return end local selected = sectionFrame.lastSwitchList [switchTo] currentInstance.switch_damager = selected afterUpdate() end --damager in combat local onSelectAutoSwitchDamagerInCombat = function(_, _, switchTo) if (switchTo == 0) then currentInstance.switch_damager_in_combat = false afterUpdate() return end local selected = sectionFrame.lastSwitchList [switchTo] currentInstance.switch_damager_in_combat = selected afterUpdate() end --healer not in combat local onSelectAutoSwitchHealerNoCombat = function(_, _, switchTo) if (switchTo == 0) then currentInstance.switch_healer = false afterUpdate() return end local selected = sectionFrame.lastSwitchList [switchTo] currentInstance.switch_healer = selected afterUpdate() end --healer in combat local onSelectAutoSwitchHealerInCombat = function(_, _, switchTo) if (switchTo == 0) then currentInstance.switch_healer_in_combat = false afterUpdate() return end local selected = sectionFrame.lastSwitchList [switchTo] currentInstance.switch_healer_in_combat = selected afterUpdate() end --tank not in combat local onSelectAutoSwitchTankNoCombat = function(_, _, switchTo) if (switchTo == 0) then currentInstance.switch_tank = false afterUpdate() return end local selected = sectionFrame.lastSwitchList [switchTo] currentInstance.switch_tank = selected afterUpdate() end --tank in combat local onSelectAutoSwitchTankInCombat = function(_, _, switchTo) if (switchTo == 0) then currentInstance.switch_tank_in_combat = false afterUpdate() return end local selected = sectionFrame.lastSwitchList [switchTo] currentInstance.switch_tank_in_combat = selected afterUpdate() end --after wipe local onSelectAutoSwitchAfterWipe = function(_, _, switchTo) if (switchTo == 0) then currentInstance.switch_all_roles_after_wipe = false afterUpdate() return end local selected = sectionFrame.lastSwitchList [switchTo] currentInstance.switch_all_roles_after_wipe = selected afterUpdate() end local getSelectedSwitch = function(switchName) local switchTable = currentInstance[switchName] if (switchTable) then if (switchTable[1] == "raid") then local pluginObject = Details:GetPlugin(switchTable[2]) if (pluginObject) then return pluginObject.__name else return 0 end else return switchTable[3]-- + 1 end else return 0 end end local sectionOptions = { {type = "label", get = function() return "Switch by Role Out of Combat" end, text_template = subSectionTitleTextTemplate}, --localize-me {--DAMAGER role out of combat type = "select", get = function() return getSelectedSwitch("switch_damager") end, values = function() Current_Switch_Func = onSelectAutoSwitchDamagerNoCombat return buildSwitchMenu() end, name = Details:AddRoleIcon("", "DAMAGER", 18), }, {--HEALER role out of combat type = "select", get = function() return getSelectedSwitch("switch_healer") end, values = function() Current_Switch_Func = onSelectAutoSwitchHealerNoCombat return buildSwitchMenu() end, name = Details:AddRoleIcon("", "HEALER", 18), }, {--TANK role out of combat type = "select", get = function() return getSelectedSwitch("switch_tank") end, values = function() Current_Switch_Func = onSelectAutoSwitchTankNoCombat return buildSwitchMenu() end, name = Details:AddRoleIcon("", "TANK", 18), }, {type = "blank"}, {type = "label", get = function() return "Switch by Role In Combat" end, text_template = subSectionTitleTextTemplate}, {--DAMAGER role in combat type = "select", get = function() return getSelectedSwitch("switch_damager_in_combat") end, values = function() Current_Switch_Func = onSelectAutoSwitchDamagerInCombat return buildSwitchMenu() end, name = Details:AddRoleIcon("", "DAMAGER", 18), }, {--HEALER role in combat type = "select", get = function() return getSelectedSwitch("switch_healer_in_combat") end, values = function() Current_Switch_Func = onSelectAutoSwitchHealerInCombat return buildSwitchMenu() end, name = Details:AddRoleIcon("", "HEALER", 18), }, {--TANK role in combat type = "select", get = function() return getSelectedSwitch("switch_tank_in_combat") end, values = function() Current_Switch_Func = onSelectAutoSwitchTankInCombat return buildSwitchMenu() end, name = Details:AddRoleIcon("", "TANK", 18), }, {type = "blank"}, {--switch after a wipe type = "select", get = function() return getSelectedSwitch("switch_all_roles_after_wipe") end, values = function() Current_Switch_Func = onSelectAutoSwitchAfterWipe return buildSwitchMenu() end, name = Loc ["STRING_OPTIONS_AUTO_SWITCH_WIPE"], desc = Loc ["STRING_OPTIONS_AUTO_SWITCH_WIPE_DESC"], }, {type = "blank"}, {--auto current segment type = "toggle", get = function() return currentInstance.auto_current end, set = function(self, fixedparam, value) currentInstance.auto_current = value afterUpdate() end, name = Loc ["STRING_OPTIONS_INSTANCE_CURRENT"], desc = Loc ["STRING_OPTIONS_INSTANCE_CURRENT_DESC"], }, {--trash suppression type = "range", get = function() return Details.instances_suppress_trash end, set = function(self, fixedparam, value) Details:SetTrashSuppression(value) afterUpdate() end, min = 0, max = 180, step = 1, name = Loc ["STRING_OPTIONS_TRASH_SUPPRESSION"], desc = Loc ["STRING_OPTIONS_TRASH_SUPPRESSION_DESC"], }, {type = "blank"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_MENU_ALPHA"] end, text_template = subSectionTitleTextTemplate}, {--enabled type = "toggle", get = function() return currentInstance.menu_alpha.enabled end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetMenuAlpha", value) afterUpdate() end, name = Loc ["STRING_ENABLED"], desc = Loc ["STRING_OPTIONS_MENU_ALPHAENABLED_DESC"], }, {--ignore bars type = "toggle", get = function() return currentInstance.menu_alpha.ignorebars end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetMenuAlpha", nil, nil, nil, value) afterUpdate() end, name = Loc ["STRING_OPTIONS_MENU_IGNOREBARS"], desc = Loc ["STRING_OPTIONS_MENU_IGNOREBARS_DESC"], }, {--on hover over alpha type = "range", get = function() return currentInstance.menu_alpha.onenter end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetMenuAlpha", nil, value) afterUpdate() end, min = 0, max = 1, step = 0.05, usedecimals = true, name = Loc ["STRING_OPTIONS_MENU_ALPHAENTER"], desc = Loc ["STRING_OPTIONS_MENU_ALPHAENTER_DESC"], }, {--no interaction type = "range", get = function() return currentInstance.menu_alpha.onleave end, set = function(self, fixedparam, value) editInstanceSetting(currentInstance, "SetMenuAlpha", nil, nil, value) afterUpdate() end, min = 0, max = 1, step = 0.05, usedecimals = true, name = Loc ["STRING_OPTIONS_MENU_ALPHALEAVE"], desc = Loc ["STRING_OPTIONS_MENU_ALPHALEAVE_DESC"], }, } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(autoSwitchFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) --combat alpha modifier local right_start_at = 450 --anchor DF:NewLabel(sectionFrame, _, "$parentHideInCombatAnchor", "hideInCombatAnchor", Loc ["STRING_OPTIONS_ALPHAMOD_ANCHOR"], "GameFontNormal") sectionFrame.hideInCombatAnchor:SetPoint("topleft", sectionFrame, "topleft", right_start_at, startY - 20) --hide in combat DF:NewLabel(sectionFrame, _, "$parentCombatAlphaLabel", "combatAlphaLabel", Loc ["STRING_OPTIONS_COMBAT_ALPHA"], "GameFontHighlightLeft") local texCoords = {.9, 0.1, 0.1, .9} local typeCombatAlpha = { Loc["STRING_OPTIONS_COMBAT_ALPHA_2"], Loc["STRING_OPTIONS_COMBAT_ALPHA_3"], Loc["STRING_OPTIONS_COMBAT_ALPHA_4"], Loc["STRING_OPTIONS_COMBAT_ALPHA_5"], Loc["STRING_OPTIONS_COMBAT_ALPHA_6"], Loc["STRING_OPTIONS_COMBAT_ALPHA_7"], Loc["STRING_OPTIONS_COMBAT_ALPHA_8"], Loc["STRING_OPTIONS_COMBAT_ALPHA_9"], _G.ARENA or "_G.ARENA", } local optionsOrder = {3, 4, 5, 6, 9, 7, 8, 1, 2} local header1Label = _G.DetailsFramework:CreateLabel(sectionFrame, Loc["STRING_CONTEXT"]) local header2Label = _G.DetailsFramework:CreateLabel(sectionFrame, Loc["STRING_ENABLED"]) local header3Label = _G.DetailsFramework:CreateLabel(sectionFrame, Loc["STRING_INVERT_RULE"]) local header4Label = _G.DetailsFramework:CreateLabel(sectionFrame, Loc["STRING_ALPHA"]) local yyy = startY - 40 header1Label:SetPoint("topleft", sectionFrame, "topleft", right_start_at, yyy) header2Label:SetPoint("topleft", sectionFrame, "topleft", right_start_at + 96, yyy) header3Label:SetPoint("topleft", sectionFrame, "topleft", right_start_at + 140, yyy) header4Label:SetPoint("topleft", sectionFrame, "topleft", right_start_at + 270, yyy) local onEnableHideContext = function(self, contextId, value) editInstanceSetting(currentInstance, "hide_on_context", contextId, "enabled", value) editInstanceSetting(currentInstance, "AdjustAlphaByContext") afterUpdate() end local onInverseValue = function(self, contextId, value) editInstanceSetting(currentInstance, "hide_on_context", contextId, "inverse", value) editInstanceSetting(currentInstance, "AdjustAlphaByContext") afterUpdate() end local onAlphaChanged = function(self, contextId, value) value = floor(value) editInstanceSetting(currentInstance, "hide_on_context", contextId, "value", value) editInstanceSetting(currentInstance, "AdjustAlphaByContext") afterUpdate() end sectionFrame.AutoHideOptions = {} for id, i in ipairs(optionsOrder) do local line = _G.CreateFrame("frame", nil, sectionFrame,"BackdropTemplate") line:SetSize(322, 22) line:SetPoint("topleft", sectionFrame, "topleft", right_start_at, yyy + ((id) * -23) + 4) DetailsFramework:ApplyStandardBackdrop(line) local contextLabel = DetailsFramework:CreateLabel(line, typeCombatAlpha[i]) contextLabel:SetPoint("left", line, "left", 2, 0) contextLabel.textsize = 10 local enabledCheckbox = DetailsFramework:NewSwitch(line, nil, nil, nil, 20, 20, nil, nil, false, nil, nil, nil, nil, options_switch_template) enabledCheckbox:SetPoint("left", line, "left", 140, 0) enabledCheckbox:SetAsCheckBox() enabledCheckbox.OnSwitch = onEnableHideContext enabledCheckbox:SetFixedParameter(i) local reverseCheckbox = DetailsFramework:NewSwitch(line, nil, nil, nil, 20, 20, nil, nil, false, nil, nil, nil, nil, options_switch_template) reverseCheckbox:SetPoint("left", line, "left", 162, 0) reverseCheckbox:SetAsCheckBox() reverseCheckbox.OnSwitch = onInverseValue reverseCheckbox:SetFixedParameter(i) local alphaSlider = DetailsFramework:CreateSlider(line, 138, 20, 0, 100, 1, 100, false, nil, nil, nil, options_slider_template) alphaSlider:SetPoint("left", line, "left", 184, 0) alphaSlider:SetHook("OnValueChanged", onAlphaChanged) alphaSlider:SetFixedParameter(i) alphaSlider.thumb:SetWidth(32) line.contextLabel = contextLabel line.enabledCheckbox = enabledCheckbox line.reverseCheckbox = reverseCheckbox line.alphaSlider = alphaSlider --disable the invert checkbox for some options if (i == 1 or i == 2 or i == 4 or i == 5 or i == 6) then reverseCheckbox:Disable() end sectionFrame.AutoHideOptions[i] = line end Details222.OptionsPanel.UpdateAutoHideSettings(currentInstance) --profile by spec --[=[]] local spec1Table = {} local playerSpecs = DF.ClassSpecIds [select(2, UnitClass("player"))] for specID, _ in pairs(playerSpecs) do local spec_id, specName, spec_description, spec_icon = GetSpecializationInfoByID(specID) tinsert(spec1Table, { type = "select", get = function() local specProfile = Details.profile_by_spec[specID] return specProfile end, values = function() local t = {} for profileName in pairs(__profiles) do t[#t+1] = profileName end return t end, name = specName, desc = specName, }) end --]=] end tinsert(Details.optionsSection, buildSection) end -- ~14 ~raidtools ~tools do --raid tools local buildSection = function(sectionFrame) --on select channel for interrip announcer local on_select_channel = function(self, _, channel) Details.announce_interrupts.channel = channel C_Timer.After(0, function() if (channel == "WHISPER") then sectionFrame.widget_list_by_type.textentry[1]:Enable() else sectionFrame.widget_list_by_type.textentry[1]:Disable() end end) afterUpdate() end local channel_list = { {value = "PRINT", icon = [[Interface\LFGFRAME\BattlenetWorking2]], iconsize = {14, 14}, iconcolor = {1, 1, 1, 1}, texcoord = {12/64, 53/64, 11/64, 53/64}, label = Loc ["STRING_CHANNEL_PRINT"], onclick = on_select_channel}, {value = "SAY", icon = [[Interface\FriendsFrame\UI-Toast-ToastIcons]], iconsize = {14, 14}, texcoord = {0.0390625, 0.203125, 0.09375, 0.375}, label = Loc ["STRING_CHANNEL_SAY"], onclick = on_select_channel}, {value = "YELL", icon = [[Interface\FriendsFrame\UI-Toast-ToastIcons]], iconsize = {14, 14}, texcoord = {0.0390625, 0.203125, 0.09375, 0.375}, iconcolor = {1, 0.3, 0, 1}, label = Loc ["STRING_CHANNEL_YELL"], onclick = on_select_channel}, {value = "RAID", icon = [[Interface\FriendsFrame\UI-Toast-ToastIcons]], iconcolor = {1, 0.49, 0}, iconsize = {14, 14}, texcoord = {0.53125, 0.7265625, 0.078125, 0.40625}, label = Loc ["STRING_INSTANCE_CHAT"], onclick = on_select_channel}, {value = "WHISPER", icon = [[Interface\FriendsFrame\UI-Toast-ToastIcons]], iconcolor = {1, 0.49, 1}, iconsize = {14, 14}, texcoord = {0.0546875, 0.1953125, 0.625, 0.890625}, label = Loc ["STRING_CHANNEL_WHISPER"], onclick = on_select_channel}, } local buildInterruptChannelMenu = function() return channel_list end --on select channel for cooldown announcer local on_select_channel = function(self, _, channel) Details.announce_cooldowns.channel = channel afterUpdate() end local channel_list = { {value = "PRINT", icon = [[Interface\LFGFRAME\BattlenetWorking2]], iconsize = {14, 14}, iconcolor = {1, 1, 1, 1}, texcoord = {12/64, 53/64, 11/64, 53/64}, label = Loc ["STRING_CHANNEL_PRINT"], onclick = on_select_channel}, {value = "SAY", icon = [[Interface\FriendsFrame\UI-Toast-ToastIcons]], iconsize = {14, 14}, texcoord = {0.0390625, 0.203125, 0.09375, 0.375}, label = Loc ["STRING_CHANNEL_SAY"], onclick = on_select_channel}, {value = "YELL", icon = [[Interface\FriendsFrame\UI-Toast-ToastIcons]], iconsize = {14, 14}, texcoord = {0.0390625, 0.203125, 0.09375, 0.375}, iconcolor = {1, 0.3, 0, 1}, label = Loc ["STRING_CHANNEL_YELL"], onclick = on_select_channel}, {value = "RAID", icon = [[Interface\FriendsFrame\UI-Toast-ToastIcons]], iconcolor = {1, 0.49, 0}, iconsize = {14, 14}, texcoord = {0.53125, 0.7265625, 0.078125, 0.40625}, label = Loc ["STRING_INSTANCE_CHAT"], onclick = on_select_channel}, {value = "WHISPER", icon = [[Interface\FriendsFrame\UI-Toast-ToastIcons]], iconcolor = {1, 0.49, 1}, iconsize = {14, 14}, texcoord = {0.0546875, 0.1953125, 0.625, 0.890625}, label = Loc ["STRING_CHANNEL_WHISPER_TARGET_COOLDOWN"], onclick = on_select_channel}, } local buildCooldownsChannelMenu = function() return channel_list end --on select channel for report deaths local on_select_channel = function(self, _, channel) Details.announce_deaths.where = channel afterUpdate() end local officer = Details.GetReportIconAndColor ("OFFICER") local channel_list = { {value = 1, icon = [[Interface\FriendsFrame\UI-Toast-ToastIcons]], iconcolor = {1, 0, 1}, iconsize = {14, 14}, texcoord = {0.53125, 0.7265625, 0.078125, 0.40625}, label = Loc ["STRING_OPTIONS_RT_DEATHS_WHERE1"], onclick = on_select_channel}, {value = 2, icon = [[Interface\FriendsFrame\UI-Toast-ToastIcons]], iconcolor = {1, 0.49, 0}, iconsize = {14, 14}, texcoord = {0.53125, 0.7265625, 0.078125, 0.40625}, label = Loc ["STRING_OPTIONS_RT_DEATHS_WHERE2"], onclick = on_select_channel}, {value = 3, icon = [[Interface\FriendsFrame\UI-Toast-ToastIcons]], iconcolor = {0.66, 0.65, 1}, iconsize = {14, 14}, texcoord = {0.53125, 0.7265625, 0.078125, 0.40625}, label = Loc ["STRING_OPTIONS_RT_DEATHS_WHERE3"], onclick = on_select_channel}, {value = 4, icon = [[Interface\LFGFRAME\BattlenetWorking2]], iconsize = {14, 14}, iconcolor = {1, 1, 1, 1}, texcoord = {12/64, 53/64, 11/64, 53/64}, label = Loc ["STRING_CHANNEL_PRINT"], onclick = on_select_channel}, {value = 5, icon = officer.icon, iconsize = {14, 14}, iconcolor = officer.color, texcoord = officer.coords, label = officer.label, onclick = on_select_channel}, } local buildDeathLogAnnouncerMenu = function() return channel_list end local openCooldownIgnoreWindow = function() if (not DetailsAnnounceSelectCooldownIgnored) then DetailsAnnounceSelectCooldownIgnored = CreateFrame("frame", "DetailsAnnounceSelectCooldownIgnored", UIParent, "BackdropTemplate") local f = DetailsAnnounceSelectCooldownIgnored f:SetSize(400, 500) f:SetPoint("center", UIParent, "center", 0, 0) DF:ApplyStandardBackdrop(f) DF:CreateTitleBar(f, Loc ["STRING_OPTIONS_RT_IGNORE_TITLE"]) f:SetFrameStrata("FULLSCREEN") f:EnableMouse() f:SetMovable(true) f:SetScript("OnMouseDown", function(self, button) if (button == "RightButton") then if (f.IsMoving) then f.IsMoving = false f:StopMovingOrSizing() end f:Hide() return end f.IsMoving = true f:StartMoving() end) f:SetScript("OnMouseUp", function(self, button) if (f.IsMoving) then f.IsMoving = false f:StopMovingOrSizing() end end) f.labels = {} local on_switch_func = function(self, spellid, value) if (spellid) then if (not value) then Details.announce_cooldowns.ignored_cooldowns [spellid] = nil else Details.announce_cooldowns.ignored_cooldowns [spellid] = true end end end f:SetScript("OnHide", function(self) self:Clear() end) function f:Clear() for _, label in ipairs(self.labels) do label.icon:Hide() label.text:Hide() label.switch:Hide() end end function f:CreateLabel() local L = { icon = DF:CreateImage(f, nil, 16, 16, "overlay", {0.1, 0.9, 0.1, 0.9}), text = DF:CreateLabel(f, "", 10, "white", "GameFontHighlightSmall"), } L.switch = DF:CreateSwitch(f, on_switch_func, false) L.switch:SetPoint("topleft", f, "topleft", 10, ((#f.labels*20)*-1)-55) L.icon:SetPoint("left", L.switch, "right", 2, 0) L.text:SetPoint("left", L.icon, "right", 2, 0) L.switch:SetAsCheckBox() L.switch:SetTemplate(options_switch_template) L.switch:SetFixedParameter(1) L.switch:SetValue(false) tinsert(f.labels, L) return L end function f:Open() local _GetSpellInfo = Details.getspellinfo --details api for index, spellid in ipairs(Details:GetCooldownList()) do local name, _, icon = _GetSpellInfo(spellid) if (name) then local label = f.labels [index] or f:CreateLabel() label.icon.texture = icon label.text.text = name label.switch:SetFixedParameter(spellid) label.switch:SetValue(Details.announce_cooldowns.ignored_cooldowns[spellid]) label.icon:Show() label.text:Show() label.switch:Show() end end f:Show() end end DetailsAnnounceSelectCooldownIgnored:Open() end local sectionOptions = { {type = "label", get = function() return Loc ["STRING_OPTIONS_RT_INTERRUPT_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--auto current segment type = "toggle", get = function() return Details.announce_interrupts.enabled end, set = function(self, fixedparam, value) if (value) then Details:EnableInterruptAnnouncer() else Details:DisableInterruptAnnouncer() end afterUpdate() end, name = Loc ["STRING_ENABLED"], desc = Loc ["STRING_OPTIONS_RT_INTERRUPTS_ONOFF_DESC"], }, {--channel to report type = "select", get = function() return Details.announce_interrupts.channel end, values = function() return buildInterruptChannelMenu() end, name = Loc ["STRING_OPTIONS_RT_INTERRUPTS_CHANNEL"], desc = Loc ["STRING_OPTIONS_RT_INTERRUPTS_CHANNEL_DESC"], }, {--target player to whisper type = "textentry", get = function() C_Timer.After(0, function() if (Details.announce_interrupts.channel ~= "WHISPER") then sectionFrame.widget_list_by_type.textentry[1]:Disable() end end) return Details.announce_interrupts.whisper end, func = function(_, _, text) Details.announce_interrupts.whisper = text or "" afterUpdate() end, name = Loc ["STRING_OPTIONS_RT_INTERRUPTS_WHISPER"], desc = Loc ["STRING_OPTIONS_RT_INTERRUPTS_WHISPER"], }, {--next player to cut, whisper the person type = "textentry", get = function() return Details.announce_interrupts.next end, func = function(_, _, text) Details.announce_interrupts.next = text or "" afterUpdate() end, name = Loc ["STRING_OPTIONS_RT_INTERRUPTS_NEXT"], desc = Loc ["STRING_OPTIONS_RT_INTERRUPTS_NEXT_DESC"], }, {--custom text field type = "textentry", get = function() return Details.announce_interrupts.custom end, func = function(_, _, text) Details.announce_interrupts.custom = text or "" afterUpdate() end, name = Loc ["STRING_OPTIONS_RT_INTERRUPTS_CUSTOM"], desc = Loc ["STRING_OPTIONS_RT_INTERRUPTS_CUSTOM_DESC"], }, {--test custom text type = "execute", func = function(self) local text = sectionFrame.widget_list_by_type.textentry[3]:GetText() local channel = Details.announce_interrupts.channel Details.announce_interrupts.channel = "PRINT" Details:interrupt_announcer (nil, nil, nil, Details.playername, nil, nil, "A Monster", nil, 1766, "Kick", nil, 106523, "Cataclysm", nil) Details.announce_interrupts.channel = channel end, icontexture = [[Interface\CHATFRAME\ChatFrameExpandArrow]], name = "Test", desc = "Click to test!", --localize-me }, {type = "blank"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_RT_COOLDOWNS_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--enable cooldown announcer type = "toggle", get = function() return Details.announce_cooldowns.enabled end, set = function(self, fixedparam, value) if (value) then Details:EnableCooldownAnnouncer() else Details:DisableCooldownAnnouncer() end afterUpdate() end, name = Loc ["STRING_ENABLED"], desc = Loc ["STRING_OPTIONS_RT_COOLDOWNS_ONOFF_DESC"], }, {--channel to report type = "select", get = function() return Details.announce_cooldowns.channel end, values = function() return buildCooldownsChannelMenu() end, name = Loc ["STRING_OPTIONS_RT_COOLDOWNS_CHANNEL"], desc = Loc ["STRING_OPTIONS_RT_COOLDOWNS_CHANNEL_DESC"], }, {--custom text field type = "textentry", get = function() return Details.announce_cooldowns.custom end, func = function(_, _, text) Details.announce_cooldowns.custom = text or "" afterUpdate() end, name = Loc ["STRING_OPTIONS_RT_COOLDOWNS_CUSTOM"], desc = Loc ["STRING_OPTIONS_RT_COOLDOWNS_CUSTOM_DESC"], }, {--test custom text type = "execute", func = function(self) local text = sectionFrame.widget_list_by_type.textentry[4]:GetText() local channel = Details.announce_cooldowns.channel Details.announce_cooldowns.channel = "PRINT" Details:cooldown_announcer (nil, nil, nil, Details.playername, nil, nil, "Tyrande Whisperwind", nil, 47788, "Guardian Spirit") Details.announce_cooldowns.channel = channel end, icontexture = [[Interface\CHATFRAME\ChatFrameExpandArrow]], name = "Test", desc = "Click to test!", --localize-me }, {--ignored cooldowns type = "execute", func = function(self) openCooldownIgnoreWindow() end, icontexture = [[Interface\COMMON\UI-DropDownRadioChecks]], icontexcoords = {0, 0.5, 0, 0.5}, name = Loc ["STRING_OPTIONS_RT_IGNORE_TITLE"], desc = Loc ["STRING_OPTIONS_RT_COOLDOWNS_SELECT_DESC"], }, {type = "blank"}, {type = "label", get = function() return Loc ["STRING_OPTIONS_RT_DEATHS_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--enable death announcer type = "toggle", get = function() return Details.announce_deaths.enabled end, set = function(self, fixedparam, value) if (value) then Details:EnableDeathAnnouncer() else Details:DisableDeathAnnouncer() end afterUpdate() end, name = Loc ["STRING_ENABLED"], desc = Loc ["STRING_OPTIONS_RT_DEATHS_ONOFF_DESC"], }, {--max hits to show type = "range", get = function() return Details.announce_deaths.last_hits end, set = function(self, fixedparam, value) Details.announce_deaths.last_hits = value afterUpdate() end, min = 1, max = 5, step = 1, name = Loc ["STRING_OPTIONS_RT_DEATHS_HITS"], desc = Loc ["STRING_OPTIONS_RT_DEATHS_HITS_DESC"], }, {--max hits to show type = "range", get = function() return Details.announce_deaths.only_first end, set = function(self, fixedparam, value) Details.announce_deaths.only_first = value afterUpdate() end, min = 1, max = 30, step = 1, name = Loc ["STRING_OPTIONS_RT_DEATHS_FIRST"], desc = Loc ["STRING_OPTIONS_RT_DEATHS_FIRST_DESC"], }, {--death report channel type = "select", get = function() return Details.announce_deaths.where end, values = function() return buildDeathLogAnnouncerMenu() end, name = Loc ["STRING_OPTIONS_RT_DEATHS_WHERE"], desc = Loc ["STRING_OPTIONS_RT_DEATHS_WHERE_DESC"], }, {type = "breakline"}, {type = "label", get = function() return "Death Recap:" end, text_template = subSectionTitleTextTemplate}, --localize-me {--enable death recap type = "toggle", get = function() return Details.death_recap.enabled end, set = function(self, fixedparam, value) Details.death_recap.enabled = value afterUpdate() end, name = Loc ["STRING_ENABLED"], desc = "Modify the Blizzard's Death Recap screen.", --localize-me }, {--relevance time type = "range", get = function() return Details.death_recap.relevance_time end, set = function(self, fixedparam, value) Details.death_recap.relevance_time = value afterUpdate() end, min = 1, max = 12, step = 1, name = "Relevance Time", --localize-me desc = "Attempt to fill the Death Recap with high damage (discart low hits) in the relevant time before death.", --localize-me }, {--show life percent type = "toggle", get = function() return Details.death_recap.show_life_percent end, set = function(self, fixedparam, value) Details.death_recap.show_life_percent = value afterUpdate() end, name = "Life Percent", --localize-me desc = "Show the percent of life the player had when received the hit.", --localize-me }, {--show segment list type = "toggle", get = function() return Details.death_recap.show_segments end, set = function(self, fixedparam, value) Details.death_recap.show_segments = value afterUpdate() end, name = "Segment List", --localize-me desc = "Show a list of the latest segments in case you want to see recaps from previous fights.", --localize-me }, {type = "blank"}, {type = "label", get = function() return Loc ["STRING_GERAL"] .. ":" end, text_template = subSectionTitleTextTemplate}, {--show first hit type = "toggle", get = function() return Details.announce_firsthit.enabled end, set = function(self, fixedparam, value) Details.announce_firsthit.enabled = value afterUpdate() end, name = Loc ["STRING_OPTIONS_RT_FIRST_HIT"], desc = Loc ["STRING_OPTIONS_RT_FIRST_HIT_DESC"], }, {--show death menu type = "toggle", get = function() return Details.on_death_menu end, set = function(self, fixedparam, value) Details.on_death_menu = value afterUpdate() end, name = "Show Death Menu", --localize-me desc = "Show a panel below the Release / Death Recap panel with some shortcuts for Raid Leaders.", --localize-me }, } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) end tinsert(Details.optionsSection, buildSection) end -- ~15 ~broadcaster do local buildSection = function(sectionFrame) local button_width = 160 --streamer plugin - a.k.a. Action Tracker --title anchor DF:NewLabel(sectionFrame, _, "$parentStreamerPluginAnchor", "streamerPluginAnchor", "Action Tracker", "GameFontNormal") sectionFrame.streamerPluginAnchor:SetPoint("topleft", sectionFrame, "topleft", startX, startY - 20) local streamerTitleDesc = DF:NewLabel(sectionFrame, _, "$parentStreamerTitleDescText", "StreamerTitleDescTextLabel", "Show the spells you are casting, allowing the viewer to follow your decision making and learn your rotation.", "GameFontNormal", 10, "white") streamerTitleDesc:SetSize(270, 40) streamerTitleDesc:SetJustifyV ("top") streamerTitleDesc:SetPoint("topleft", sectionFrame.streamerPluginAnchor, "bottomleft", 0, -4) local streamerTitleImage = DF:CreateImage(sectionFrame, [[Interface\AddOns\Details\images\icons2.blp]], 268*0.75, 59*0.75, "overlay", {0, 268/512, 454/512, 1}) streamerTitleImage:SetPoint("topleft", sectionFrame.streamerPluginAnchor, "bottomleft", 0, -40) --get the plugin object local StreamerPlugin = Details:GetPlugin("DETAILS_PLUGIN_STREAM_OVERLAY") if (StreamerPlugin) then --get the plugin settings table local tPluginSettings = Details:GetPluginSavedTable("DETAILS_PLUGIN_STREAM_OVERLAY") if (tPluginSettings) then local enablePluginFunc = function() tPluginSettings.enabled = not tPluginSettings.enabled StreamerPlugin.__enabled = tPluginSettings.enabled if (not tPluginSettings.enabled) then sectionFrame.enableActionTrackerButtton:SetText("Enable") Details:SendEvent("PLUGIN_DISABLED", StreamerPlugin) else sectionFrame.enableActionTrackerButtton:SetText("Disable") --enableButton is nil value Details:SendEvent("PLUGIN_ENABLED", StreamerPlugin) end end local openOptions = function() StreamerPlugin.OpenOptionsPanel(true) C_Timer.After(0.2, function() _G.DetailsOptionsWindow:Hide() end) end --create the enable, disable and options button local enableActionTrackerButtton = DF:CreateButton(sectionFrame, enablePluginFunc, 100, 20, "Enable", false, false, "", false, false, false, DF:GetTemplate("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")) enableActionTrackerButtton:SetPoint("topleft", streamerTitleImage, "bottomleft", 0, -7) local actionTrackerOptionsButtton = DF:CreateButton(sectionFrame, openOptions, 100, 20, "Options", false, false, "", false, false, false, DF:GetTemplate("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")) actionTrackerOptionsButtton:SetPoint("left", enableActionTrackerButtton, "right", 5, 0) sectionFrame.enableActionTrackerButtton = enableActionTrackerButtton sectionFrame.actionTrackerOptionsButtton = actionTrackerOptionsButtton local bIsPluginEnabled = tPluginSettings.enabled --plugin already enabled if (bIsPluginEnabled) then enableActionTrackerButtton:SetText("Disable") else enableActionTrackerButtton:SetText("Enable") end end else --plugin is disabled at the addon control panel local pluginDisabled = DF:NewLabel(sectionFrame, _, "$parentStreamerDisabledText", "StreamerDisabledTextLabel", "Enable 'Details!: Streamer' addon at the AddOns Control Panel.", "GameFontNormal", 10, "red") pluginDisabled:SetSize(270, 40) pluginDisabled:SetPoint("topleft", streamerTitleImage, "bottomleft", 0, -2) end sectionFrame:SetScript("OnShow", function() local pluginStable = Details:GetPluginSavedTable("DETAILS_PLUGIN_STREAM_OVERLAY") local pluginObject = Details:GetPlugin("DETAILS_PLUGIN_STREAM_OVERLAY") if (pluginObject) then if (pluginStable.enabled) then sectionFrame.enableActionTrackerButtton:SetText("Disable") else sectionFrame.enableActionTrackerButtton:SetText("Enable") end end if (Details.event_tracker.enabled) then sectionFrame.enableEventTrackerButtton:SetText("Disable") else sectionFrame.enableEventTrackerButtton:SetText("Enable") end if (Details.realtime_dps_meter.enabled) then sectionFrame.enableArenaDPSTrackerButtton:SetText("Disable") else sectionFrame.enableArenaDPSTrackerButtton:SetText("Enable") end end) --event tracker DF:NewLabel(sectionFrame, _, "$parentEventTrackerAnchor", "eventTrackerAnchor", "Event Tracker", "GameFontNormal") sectionFrame.eventTrackerAnchor:SetPoint("topleft", sectionFrame, "topleft", startX, startY - 180) local eventTrackerTitleDesc = DF:NewLabel(sectionFrame, _, "$parentEventTrackerTitleDescText", "EventTrackerTitleDescTextLabel", "Show what's happening near you so the viewer can follow what's going on. Show cooldowns, CC, spell interruption. Useful on any group content.", "GameFontNormal", 10, "white") eventTrackerTitleDesc:SetJustifyV ("top") eventTrackerTitleDesc:SetSize(270, 40) eventTrackerTitleDesc:SetPoint("topleft", sectionFrame.eventTrackerAnchor, "bottomleft", 0, -4) local eventTrackerTitleImage = DF:CreateImage(sectionFrame, [[Interface\AddOns\Details\images\icons2]], 256, 50, "overlay", {0.5, 1, 134/512, 184/512}) eventTrackerTitleImage:SetPoint("topleft", sectionFrame.eventTrackerAnchor, "bottomleft", 0, -40) local enableEventTracker = function() Details.event_tracker.enabled = not Details.event_tracker.enabled Details:LoadFramesForBroadcastTools() afterUpdate() if (Details.event_tracker.enabled) then sectionFrame.enableEventTrackerButtton:SetText("Disable") else sectionFrame.enableEventTrackerButtton:SetText("Enable") end end local openEventTrackerOptions = function() Details:OpenEventTrackerOptions(true) C_Timer.After(0.2, function() _G.DetailsOptionsWindow:Hide() end) end --create the enable, disable and options button local enableEventTrackerButtton = DF:CreateButton(sectionFrame, enableEventTracker, 100, 20, "Enable", false, false, "", false, false, false, DF:GetTemplate("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")) enableEventTrackerButtton:SetPoint("topleft", eventTrackerTitleImage, "bottomleft", 0, -7) local actionTrackerOptionsButtton = DF:CreateButton(sectionFrame, openEventTrackerOptions, 100, 20, "Options", false, false, "", false, false, false, DF:GetTemplate("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")) actionTrackerOptionsButtton:SetPoint("left", enableEventTrackerButtton, "right", 5, 0) sectionFrame.enableEventTrackerButtton = enableEventTrackerButtton sectionFrame.actionTrackerOptionsButtton = actionTrackerOptionsButtton --arena kamehameha bar DF:NewLabel(sectionFrame, _, "$parentCurrentDPSAnchor", "currentDPSAnchor", "Arena DPS Bar", "GameFontNormal") sectionFrame.currentDPSAnchor:SetPoint("topleft", sectionFrame, "topleft", startX, startY - 340) local currentDPSTitleDesc = DF:NewLabel(sectionFrame, _, "$parentCurrentDPSTitleDescText", "CurrentDPSTitleDescTextLabel", "Show a bar which grows to the side of the team doing most damage in the last 5 seconds.", "GameFontNormal", 10, "white") currentDPSTitleDesc:SetJustifyV ("top") currentDPSTitleDesc:SetSize(270, 40) currentDPSTitleDesc:SetPoint("topleft", sectionFrame.currentDPSAnchor, "bottomleft", 0, -4) local currentDPSTitleImage = DF:CreateImage(sectionFrame, [[Interface\AddOns\Details\images\icons2]], 256, 32, "overlay", {0/512, 256/512, 421/512, 453/512}) currentDPSTitleImage:SetPoint("topleft", sectionFrame.currentDPSAnchor, "bottomleft", 0, -40) local enableArenaDPS = function() Details.realtime_dps_meter.enabled = not Details.realtime_dps_meter.enabled Details:LoadFramesForBroadcastTools() afterUpdate() if (Details.realtime_dps_meter.enabled) then sectionFrame.enableArenaDPSTrackerButtton:SetText("Disable") else sectionFrame.enableArenaDPSTrackerButtton:SetText("Enable") end end local openArenaDPSOptions = function() Details:OpenCurrentRealDPSOptions(true) C_Timer.After(0.2, function() _G.DetailsOptionsWindow:Hide() end) end --create the enable, disable and options button local enableArenaDPSTrackerButtton = DF:CreateButton(sectionFrame, enableArenaDPS, 100, 20, "Enable", false, false, "", false, false, false, DF:GetTemplate("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")) enableArenaDPSTrackerButtton:SetPoint("topleft", currentDPSTitleImage, "bottomleft", 0, -7) local arenaDPSTrackerOptionsButtton = DF:CreateButton(sectionFrame, openArenaDPSOptions, 100, 20, "Options", false, false, "", false, false, false, DF:GetTemplate("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")) arenaDPSTrackerOptionsButtton:SetPoint("left", enableArenaDPSTrackerButtton, "right", 5, 0) sectionFrame.enableArenaDPSTrackerButtton = enableArenaDPSTrackerButtton sectionFrame.arenaDPSTrackerOptionsButtton = arenaDPSTrackerOptionsButtton --create a gray texture below each plugin section local createBackgroupTexture = function() local texture = sectionFrame:CreateTexture(nil, "background") texture:SetColorTexture(1, 1, 1, .1) texture:SetSize(300, 150) return texture end local backgroundTexture1 = createBackgroupTexture() backgroundTexture1:SetPoint("topleft", sectionFrame.streamerPluginAnchor.widget, "topleft", -5, 5) local backgroundTexture2 = createBackgroupTexture() backgroundTexture2:SetPoint("topleft", sectionFrame.eventTrackerAnchor.widget, "topleft", -5, 5) local backgroundTexture3 = createBackgroupTexture() backgroundTexture3:SetPoint("topleft", sectionFrame.currentDPSAnchor.widget, "topleft", -5, 5) --options local sectionOptions = { {type = "label", get = function() return Loc ["STRING_GERAL"] .. ":" end, text_template = subSectionTitleTextTemplate}, {--no window alerts type = "toggle", get = function() return Details.streamer_config.no_alerts end, set = function(self, fixedparam, value) Details.streamer_config.no_alerts = value afterUpdate() end, name = "Suppress Alerts", --localize-me desc = "Suppress Alerts", }, {--60hz updates type = "toggle", get = function() return Details.streamer_config.faster_updates end, set = function(self, fixedparam, value) Details.streamer_config.faster_updates = value Details:RefreshUpdater() afterUpdate() end, name = "60 Updates per Second", --localize-me desc = "60 Updates per Second", }, {--quick player info type = "toggle", get = function() return Details.streamer_config.quick_detection end, set = function(self, fixedparam, value) Details.streamer_config.quick_detection = value afterUpdate() end, name = "Quick Player Info Detection", --localize-me desc = "Quick Player Info Detection", }, {--disable M+ shenanigans type = "toggle", get = function() return Details.streamer_config.disable_mythic_dungeon end, set = function(self, fixedparam, value) Details.streamer_config.disable_mythic_dungeon = value afterUpdate() end, name = "Disable Mythic+ Stuff", --localize-me desc = "Disable Mythic+ Stuff", }, {--disable M+ charts type = "toggle", get = function() return Details.mythic_plus.show_damage_graphic end, set = function(self, fixedparam, value) Details.mythic_plus.show_damage_graphic = value afterUpdate() end, name = "Disable Mythic+ Chart", --localize-me desc = "Disable Mythic+ Chart", }, {--clear cache regurlary type = "toggle", get = function() return Details.mythic_plus.show_damage_graphic end, set = function(self, fixedparam, value) Details.mythic_plus.show_damage_graphic = value afterUpdate() end, name = "Clear Cache Regularly", --localize-me desc = "Clear Cache Regularly", }, } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX + 350, startY - 20, heightSize + 300, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) end tinsert(Details.optionsSection, buildSection) end -- ~16 ~customspells ~spells do local buildSection = function(sectionFrame) local name_entry_func = function(index, text) Details:UserCustomSpellUpdate (index, text) end local icon_func = function(index, icon) Details:UserCustomSpellUpdate (index, nil, icon) end local remove_func = function(index) Details:UserCustomSpellRemove (index) end local reset_func = function(index) Details:UserCustomSpellReset (index) end --custom spells panel local header = { {name = Loc ["STRING_OPTIONS_SPELL_INDEX"], width = 55, type = "text"}, {name = Loc ["STRING_OPTIONS_SPELL_NAME"], width = 310, type = "entry", func = name_entry_func}, {name = Loc ["STRING_OPTIONS_SPELL_ICON"], width = 50, type = "icon", func = icon_func}, {name = Loc ["STRING_OPTIONS_SPELL_SPELLID"], width = 100, type = "text"}, {name = Loc ["STRING_OPTIONS_SPELL_RESET"], width = 50, type = "button", func = reset_func, icon = [[Interface\Buttons\UI-RefreshButton]], notext = true, iconalign = "center"}, {name = Loc ["STRING_OPTIONS_SPELL_REMOVE"], width = 75, type = "button", func = remove_func, icon = [[Interface\Glues\LOGIN\Glues-CheckBox-Check]], notext = true, iconalign = "center"}, } local total_lines = function() return #Details.savedCustomSpells end local fill_row = function(index) local data = Details.savedCustomSpells [index] if (data) then return {index, data [2], data [3], data [1], ""} else return {nil, nil, nil, nil, nil} end end local panel = DF:NewFillPanel (sectionFrame, header, "$parentCustomSpellsFillPanel", "customSpellsFillPanel", 640, 462, total_lines, fill_row, false) panel:Refresh() --add --add panel local addframe = DF:NewPanel(sectionFrame, nil, "$parentCustomSpellsAddPanel", "customSpellsAddPanel", 644, 462) addframe:SetPoint(startX, startY - 40) addframe:SetFrameLevel(7) DF:ApplyStandardBackdrop(addframe) addframe:Hide() local spellid = DF:NewLabel(addframe, nil, "$parentSpellidLabel", "spellidLabel", Loc ["STRING_OPTIONS_SPELL_ADDSPELLID"]) local spellname = DF:NewLabel(addframe, nil, "$parentSpellnameLabel", "spellnameLabel", Loc ["STRING_OPTIONS_SPELL_ADDNAME"]) local spellicon = DF:NewLabel(addframe, nil, "$parentSpelliconLabel", "spelliconLabel", Loc ["STRING_OPTIONS_SPELL_ADDICON"]) local spellname_entry_func = function() end local spellname_entry = DF:NewTextEntry(addframe, nil, "$parentSpellnameEntry", "spellnameEntry", 160, 20, spellname_entry_func, nil, nil, nil, nil, options_dropdown_template) spellname_entry:SetPoint("left", spellname, "right", 2, 0) local spellid_entry_func = function(arg1, arg2, spellid) local spellname, _, icon = _GetSpellInfo(spellid) if (spellname) then spellname_entry:SetText(spellname) addframe.spellIconButton.icon.texture = icon else Details:Msg(Loc ["STRING_OPTIONS_SPELL_NOTFOUND"]) end end local spellid_entry = DF:NewSpellEntry (addframe, spellid_entry_func, 160, 20, nil, nil, "spellidEntry", "$parentSpellidEntry") spellid_entry:SetTemplate(options_dropdown_template) spellid_entry:SetPoint("left", spellid, "right", 2, 0) local icon_button_func = function(texture) addframe.spellIconButton.icon.texture = texture end local icon_button = DF:NewButton(addframe, nil, "$parentSpellIconButton", "spellIconButton", 20, 20, function() DF:IconPick (icon_button_func, true) end) local icon_button_icon = DF:NewImage(icon_button, [[Interface\ICONS\TEMP]], 19, 19, "background", nil, "icon", "$parentSpellIcon") icon_button_icon:SetPoint(0, 0) icon_button:InstallCustomTexture() icon_button:SetPoint("left", spellicon, "right", 2, 0) --close button local closebutton = DF:NewButton(addframe, nil, "$parentAddCloseButton", "addClosebutton", 120, 20, function() addframe:Hide() end, nil, nil, nil, Loc ["STRING_OPTIONS_SPELL_CLOSE"], nil, options_button_template) --confirm add spell local addspell = function() local id = spellid_entry.text if (id == "") then return Details:Msg(Loc ["STRING_OPTIONS_SPELL_IDERROR"]) end local name = spellname_entry.text if (name == "") then return Details:Msg(Loc ["STRING_OPTIONS_SPELL_NAMEERROR"]) end local icon = addframe.spellIconButton.icon.texture id = tonumber(id) if (not id) then return Details:Msg(Loc ["STRING_OPTIONS_SPELL_IDERROR"]) end local bAddedByUser = true Details:UserCustomSpellAdd (id, name, icon, bAddedByUser) panel:Refresh() spellid_entry.text = "" spellname_entry.text = "" addframe.spellIconButton.icon.texture = [[Interface\ICONS\TEMP]] if (DetailsIconPickFrame and DetailsIconPickFrame:IsShown()) then DetailsIconPickFrame:Hide() end addframe:Hide() end local addspellbutton = DF:NewButton(addframe, nil, "$parentAddSpellButton", "addSpellbutton", 120, 20, addspell, nil, nil, nil, Loc ["STRING_OPTIONS_SPELL_ADD"], nil, options_button_template) addspellbutton:SetIcon ([[Interface\Buttons\UI-CheckBox-Check]], 18, 18, nil, nil, nil, 4) closebutton:SetIcon ([[Interface\PetBattles\DeadPetIcon]], 14, 14, nil, nil, nil, 4) addspellbutton:SetPoint("bottomright", addframe, "bottomright", -5, 5) closebutton:SetPoint("right", addspellbutton, "left", -4, 0) spellid:SetPoint(50, -10) spellname:SetPoint(50, -35) spellicon:SetPoint(50, -60) --open add panel button local add = function() addframe:Show() end local addbutton = DF:NewButton(sectionFrame, nil, "$parentAddButton", "addbutton", 120, 20, add, nil, nil, nil, Loc ["STRING_OPTIONS_SPELL_ADDSPELL"], nil, options_button_template) addbutton:SetPoint("bottomright", panel, "topright", -00, 1) addbutton:SetIcon ([[Interface\PaperDollInfoFrame\Character-Plus]], 12, 12, nil, nil, nil, 4) panel:SetPoint(startX, startY - 40) --consilidade spells DF:NewLabel(sectionFrame, _, "$parentConsolidadeSpellsLabel", "ConsolidadeSpellsLabel", Loc ["STRING_OPTIONSMENU_SPELLS_CONSOLIDATE"], "GameFontHighlightLeft") DF:NewSwitch (sectionFrame, _, "$parentConsolidadeSpellsSwitch", "ConsolidadeSpellsSwitch", 60, 20, nil, nil, Details.override_spellids, nil, nil, nil, nil, options_switch_template) sectionFrame.ConsolidadeSpellsLabel:SetPoint("left", sectionFrame.ConsolidadeSpellsSwitch, "right", 3) sectionFrame.ConsolidadeSpellsSwitch:SetAsCheckBox() sectionFrame.ConsolidadeSpellsSwitch.OnSwitch = function(self, instance, value) Details.override_spellids = value Details:UpdateParserGears() end sectionFrame.ConsolidadeSpellsSwitch:SetPoint(startX, startY - 20) Details:SetFontSize(sectionFrame.ConsolidadeSpellsLabel, 12) local sectionOptions = { } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) end tinsert(Details.optionsSection, buildSection) end -- ~17 ~charts data do local buildSection = function(sectionFrame) --title local titulo_datacharts = DF:NewLabel(sectionFrame, _, "$parentTituloDataChartsText", "DataChartsLabel", Loc ["STRING_OPTIONS_DATACHARTTITLE"], "GameFontNormal", 16) local titulo_datacharts_desc = DF:NewLabel(sectionFrame, _, "$parentDataChartsText2", "DataCharts2Label", Loc ["STRING_OPTIONS_DATACHARTTITLE_DESC"], "GameFontNormal", 10, "white") titulo_datacharts_desc.width = 350 --warning if (not Details:GetPlugin ("DETAILS_PLUGIN_CHART_VIEWER")) then local label = DF:NewLabel(sectionFrame, _, "$parentPluginWarningLabel", "PluginWarningLabel", Loc ["STRING_OPTIONS_CHART_PLUGINWARNING"], "GameFontNormal") local image = DF:NewImage(sectionFrame, [[Interface\DialogFrame\UI-Dialog-Icon-AlertNew]]) label:SetPoint("topright", sectionFrame, "topright", -42, -10) label:SetJustifyH("left") label:SetWidth(160) image:SetPoint("right", label, "left", -7, 0) image:SetSize(32, 32) end --panel local edit_name = function(index, name) Details:TimeDataUpdate (index, name) sectionFrame.userTimeCaptureFillPanel:Refresh() end local big_code_editor = DF:NewSpecialLuaEditorEntry(sectionFrame, 683, 422, "bigCodeEditor", "$parentBigCodeEditor") big_code_editor:SetPoint("topleft", sectionFrame, "topleft", startX, startY - 70) big_code_editor:SetFrameLevel(sectionFrame:GetFrameLevel()+6) big_code_editor:SetBackdrop({bgFile = [[Interface\AddOns\Details\images\background]], edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1,tile = 1, tileSize = 16}) DF:ReskinSlider(big_code_editor.scroll) big_code_editor:SetBackdropColor(0.5, 0.5, 0.5, 0.95) big_code_editor:SetBackdropBorderColor(0, 0, 0, 1) big_code_editor:Hide() local accept = function() big_code_editor:ClearFocus() if (not big_code_editor.is_export) then Details:TimeDataUpdate (big_code_editor.index, nil, big_code_editor:GetText()) end big_code_editor:Hide() end local cancel = function() big_code_editor:ClearFocus() big_code_editor:Hide() end local accept_changes = DF:NewButton(big_code_editor, nil, "$parentAccept", "acceptButton", 120, 20, accept, nil, nil) accept_changes:SetPoint(0, 20) accept_changes:SetIcon([[Interface\Buttons\UI-CheckBox-Check]]) accept_changes:SetTemplate(options_button_template) accept_changes:SetText(Loc ["STRING_OPTIONS_CHART_SAVE"]) local cancel_changes = DF:NewButton(big_code_editor, nil, "$parentCancel", "CancelButton", 120, 20, cancel, nil, nil) cancel_changes:SetPoint("left", accept_changes, "right", 2, 0) cancel_changes:SetIcon([[Interface\PetBattles\DeadPetIcon]]) cancel_changes:SetTemplate(options_button_template) cancel_changes:SetText(Loc ["STRING_OPTIONS_CHART_CANCEL"]) local edit_code = function(index) local data = Details.savedTimeCaptures [index] if (data) then local func = data [2] if (type(func) == "function") then return Details:Msg(Loc ["STRING_OPTIONS_CHART_CODELOADED"]) end big_code_editor:SetText(func) big_code_editor.original_code = func big_code_editor.index = index big_code_editor.is_export = nil big_code_editor:Show() sectionFrame.userTimeCaptureAddPanel:Hide() sectionFrame.importEditor:ClearFocus() sectionFrame.importEditor:Hide() if (DetailsIconPickFrame and DetailsIconPickFrame:IsShown()) then DetailsIconPickFrame:Hide() end end end local edit_icon = function(index, icon) Details:TimeDataUpdate (index, nil, nil, nil, nil, nil, icon) sectionFrame.userTimeCaptureFillPanel:Refresh() end local edit_author = function(index, author) Details:TimeDataUpdate (index, nil, nil, nil, author) sectionFrame.userTimeCaptureFillPanel:Refresh() end local edit_version = function(index, version) Details:TimeDataUpdate (index, nil, nil, nil, nil, version) sectionFrame.userTimeCaptureFillPanel:Refresh() end local big_code_editor2 = DF:NewSpecialLuaEditorEntry(sectionFrame, 643, 402, "exportEditor", "$parentExportEditor", true) big_code_editor2:SetPoint("topleft", sectionFrame, "topleft", 7, -70) big_code_editor2:SetFrameLevel(sectionFrame:GetFrameLevel()+6) big_code_editor2:SetBackdrop({bgFile = [[Interface\AddOns\Details\images\background]], edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1,tile = 1, tileSize = 16}) DF:ReskinSlider(big_code_editor2.scroll) big_code_editor2:SetBackdropColor(0.5, 0.5, 0.5, 0.95) big_code_editor2:SetBackdropBorderColor(0, 0, 0, 1) big_code_editor2:Hide() local close_export_box = function() big_code_editor2:ClearFocus() big_code_editor2:Hide() end local close_export = DF:NewButton(big_code_editor2, nil, "$parentClose", "closeButton", 120, 20, close_export_box) close_export:SetPoint(10, 18) close_export:SetIcon ([[Interface\Buttons\UI-CheckBox-Check]]) close_export:SetText(Loc ["STRING_OPTIONS_CHART_CLOSE"]) close_export:SetTemplate(options_button_template) local export_function = function(index) local data = Details.savedTimeCaptures [index] if (data) then local encoded = Details:CompressData (data, "print") if (encoded) then big_code_editor2:SetText(encoded) big_code_editor2:Show() big_code_editor2.editbox:HighlightText() big_code_editor2.editbox:SetFocus(true) else Details:Msg("error exporting the time capture.") --localize-me end end end local remove_capture = function(index) Details:TimeDataUnregister (index) sectionFrame.userTimeCaptureFillPanel:Refresh() end local edit_enabled = function(index, enabled, a, b) if (enabled) then Details:TimeDataUpdate (index, nil, nil, nil, nil, nil, nil, false) else Details:TimeDataUpdate (index, nil, nil, nil, nil, nil, nil, true) end sectionFrame.userTimeCaptureFillPanel:Refresh() end local header = { {name = Loc ["STRING_OPTIONS_CHART_NAME"], width = 175, type = "entry", func = edit_name}, {name = Loc ["STRING_OPTIONS_CHART_EDIT"], width = 55, type = "button", func = edit_code, icon = [[Interface\Buttons\UI-GuildButton-OfficerNote-Disabled]], notext = true, iconalign = "center"}, {name = Loc ["STRING_OPTIONS_CHART_ICON"], width = 50, type = "icon", func = edit_icon}, {name = Loc ["STRING_OPTIONS_CHART_AUTHOR"], width = 125, type = "text", func = edit_author}, {name = Loc ["STRING_OPTIONS_CHART_VERSION"], width = 65, type = "entry", func = edit_version}, {name = Loc ["STRING_ENABLED"], width = 50, type = "button", func = edit_enabled, icon = [[Interface\COMMON\Indicator-Green]], notext = true, iconalign = "center"}, {name = Loc ["STRING_OPTIONS_CHART_EXPORT"], width = 50, type = "button", func = export_function, icon = [[Interface\Buttons\UI-GuildButton-MOTD-Up]], notext = true, iconalign = "center"}, {name = Loc ["STRING_OPTIONS_CHART_REMOVE"], width = 70, type = "button", func = remove_capture, icon = [[Interface\Glues\LOGIN\Glues-CheckBox-Check]], notext = true, iconalign = "center"}, } local total_lines = function() return #Details.savedTimeCaptures end local fill_row = function(index) local data = Details.savedTimeCaptures [index] if (data) then local enabled_texture if (data[7]) then enabled_texture = [[Interface\COMMON\Indicator-Green]] else enabled_texture = [[Interface\COMMON\Indicator-Red]] end return { data[1], --name "", --func data[6], --icon data[4], -- author data[5], --version {func = edit_enabled, icon = enabled_texture, value = data[7]} --enabled } else return {nil, nil, nil, nil, nil, nil} end end --DetailsOptionsWindowtab17UserTimeCapturesFillPanel local panel = DF:NewFillPanel (sectionFrame, header, "$parentUserTimeCapturesFillPanel", "userTimeCaptureFillPanel", 640, 382, total_lines, fill_row, false) panel:SetHook("OnMouseDown", function() if (DetailsIconPickFrame and DetailsIconPickFrame:IsShown()) then DetailsIconPickFrame:Hide() end end) panel:Refresh() --add panel local addframe = DF:NewPanel(sectionFrame, nil, "$parentUserTimeCapturesAddPanel", "userTimeCaptureAddPanel", 683, 422) addframe:SetPoint("topleft", sectionFrame, "topleft", startX, startY - 70) addframe:SetFrameLevel(7) addframe:Hide() addframe:SetBackdrop({bgFile = [[Interface\AddOns\Details\images\background]], edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1,tile = 1, tileSize = 16}) addframe:SetBackdropColor(0.5, 0.5, 0.5, 0.95) addframe:SetBackdropBorderColor(0, 0, 0, 1) --name local capture_name = DF:NewLabel(addframe, nil, "$parentNameLabel", "nameLabel", Loc ["STRING_OPTIONS_CHART_ADDNAME"]) local capture_name_entry = DF:NewTextEntry(addframe, nil, "$parentNameEntry", "nameEntry", 160, 20, function() end, nil, nil, nil, nil, options_dropdown_template) capture_name_entry:SetMaxLetters (16) capture_name_entry:SetPoint("left", capture_name, "right", 2, 0) --function local capture_func = DF:NewLabel(addframe, nil, "$parentFunctionLabel", "functionLabel", Loc ["STRING_OPTIONS_CHART_ADDCODE"]) local capture_func_entry = DF:NewSpecialLuaEditorEntry(addframe.widget, 300, 200, "funcEntry", "$parentFuncEntry") capture_func_entry:SetPoint("topleft", capture_func.widget, "topright", 2, 0) capture_func_entry:SetSize(500, 220) capture_func_entry:SetBackdrop({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true}) capture_func_entry:SetBackdropBorderColor(0, 0, 0, 1) capture_func_entry:SetBackdropColor(0, 0, 0, .5) DF:ReskinSlider(capture_func_entry.scroll) --icon local capture_icon = DF:NewLabel(addframe, nil, "$parentIconLabel", "iconLabel", Loc ["STRING_OPTIONS_CHART_ADDICON"]) local icon_button_func = function(texture) addframe.iconButton.iconTexture = texture addframe.iconButton:SetIcon(texture) end local capture_icon_button = DF:NewButton(addframe, nil, "$parentIconButton", "iconButton", 20, 20, function() DF:IconPick (icon_button_func, true) end, nil, nil, nil, nil, nil, options_button_template) capture_icon_button:SetIcon([[Interface\ICONS\TEMP]]) capture_icon_button:SetTemplate(options_button_template) capture_icon_button:SetPoint("left", capture_icon, "right", 2, 0) --author local capture_author = DF:NewLabel(addframe, nil, "$parentAuthorLabel", "authorLabel", Loc ["STRING_OPTIONS_CHART_ADDAUTHOR"]) local capture_author_entry = DF:NewTextEntry(addframe, nil, "$parentAuthorEntry", "authorEntry", 160, 20, function() end, nil, nil, nil, nil, options_dropdown_template) capture_author_entry:SetPoint("left", capture_author, "right", 2, 0) --version local capture_version = DF:NewLabel(addframe, nil, "$parentVersionLabel", "versionLabel", Loc ["STRING_OPTIONS_CHART_ADDVERSION"]) local capture_version_entry = DF:NewTextEntry(addframe, nil, "$parentVersionEntry", "versionEntry", 160, 20, function() end, nil, nil, nil, nil, options_dropdown_template) capture_version_entry:SetPoint("left", capture_version, "right", 2, 0) --open add panel button local add = function() addframe:Show() sectionFrame.importEditor:ClearFocus() sectionFrame.importEditor:Hide() big_code_editor:ClearFocus() big_code_editor:Hide() big_code_editor2:ClearFocus() big_code_editor2:Hide() if (DetailsIconPickFrame and DetailsIconPickFrame:IsShown()) then DetailsIconPickFrame:Hide() end end local addbutton = DF:NewButton(sectionFrame, nil, "$parentAddButton", "addbutton", 120, 20, add, nil, nil, nil, Loc ["STRING_OPTIONS_CHART_ADD"], nil, options_button_template) addbutton:SetPoint("bottomright", panel, "topright", -30, 0) addbutton:SetIcon ([[Interface\PaperDollInfoFrame\Character-Plus]], 12, 12, nil, nil, nil, 4) --open import panel button local importframe = DF:NewSpecialLuaEditorEntry(sectionFrame, 683, 422, "importEditor", "$parentImportEditor", true) local font, size, flag = importframe.editbox:GetFont() importframe.editbox:SetFont(font, 9, flag) importframe:SetPoint("topleft", sectionFrame, "topleft", startX, startY - 70) importframe:SetFrameLevel(sectionFrame:GetFrameLevel()+6) importframe:SetBackdrop({bgFile = [[Interface\AddOns\Details\images\background]], edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1,tile = 1, tileSize = 16}) DF:ReskinSlider(importframe.scroll) importframe:SetBackdropColor(0.5, 0.5, 0.5, 0.95) importframe:SetBackdropBorderColor(0, 0, 0, 1) importframe:Hide() local doimport = function() local text = importframe:GetText() text = DF:Trim (text) local dataTable = Details:DecompressData (text, "print") if (dataTable) then local unserialize = dataTable if (type(unserialize) == "table") then if (unserialize[1] and unserialize[2] and unserialize[3] and unserialize[4] and unserialize[5]) then local register = Details:TimeDataRegister (unpack(unserialize)) if (type(register) == "string") then Details:Msg(register) end else Details:Msg(Loc ["STRING_OPTIONS_CHART_IMPORTERROR"]) end else Details:Msg(Loc ["STRING_OPTIONS_CHART_IMPORTERROR"]) end importframe:Hide() panel:Refresh() else Details:Msg(Loc ["STRING_CUSTOM_IMPORT_ERROR"]) return end end local accept_import = DF:NewButton(importframe, nil, "$parentAccept", "acceptButton", 120, 20, doimport) accept_import:SetIcon ([[Interface\Buttons\UI-CheckBox-Check]]) accept_import:SetPoint(10, 18) accept_import:SetText(Loc ["STRING_OPTIONS_CHART_IMPORT"]) accept_import:SetTemplate(options_button_template) local cancelimport = function() importframe:ClearFocus() importframe:Hide() end local cancel_changes = DF:NewButton(importframe, nil, "$parentCancel", "CancelButton", 120, 20, cancelimport) cancel_changes:SetIcon ([[Interface\PetBattles\DeadPetIcon]]) cancel_changes:SetText(Loc ["STRING_OPTIONS_CHART_CANCEL"]) cancel_changes:SetPoint(132, 18) cancel_changes:SetTemplate(options_button_template) local import = function() importframe:Show() importframe:SetText("") importframe:SetFocus(true) addframe:Hide() big_code_editor:ClearFocus() big_code_editor:Hide() big_code_editor2:ClearFocus() big_code_editor2:Hide() if (DetailsIconPickFrame and DetailsIconPickFrame:IsShown()) then DetailsIconPickFrame:Hide() end end local importbutton = DF:NewButton(sectionFrame, nil, "$parentImportButton", "importbutton", 120, 20, import, nil, nil, nil, Loc ["STRING_OPTIONS_CHART_IMPORT"], nil, options_button_template) importbutton:SetPoint("right", addbutton, "left", -4, 0) importbutton:SetIcon ([[Interface\Buttons\UI-GuildButton-PublicNote-Up]], 14, 14, nil, nil, nil, 4) --close button local closebutton = DF:NewButton(addframe, nil, "$parentAddCloseButton", "addClosebutton", 120, 20, function() addframe:Hide() end, nil, nil, nil, Loc ["STRING_OPTIONS_CHART_CLOSE"], nil, options_button_template) --closebutton:InstallCustomTexture() --confirm add capture local addcapture = function() local name = capture_name_entry.text if (name == "") then return Details:Msg(Loc ["STRING_OPTIONS_CHART_NAMEERROR"]) end local author = capture_author_entry.text if (author == "") then return Details:Msg(Loc ["STRING_OPTIONS_CHART_AUTHORERROR"]) end local icon = addframe.iconButton.iconTexture local version = capture_version_entry.text if (version == "") then return Details:Msg(Loc ["STRING_OPTIONS_CHART_VERSIONERROR"]) end local func = capture_func_entry:GetText() if (func == "") then return Details:Msg(Loc ["STRING_OPTIONS_CHART_FUNCERROR"]) end Details:TimeDataRegister (name, func, nil, author, version, icon, true) panel:Refresh() capture_name_entry.text = "" capture_author_entry.text = "" capture_version_entry.text = "" capture_func_entry:SetText("") addframe.iconButton:SetTexture([[Interface\ICONS\TEMP]]) if (DetailsIconPickFrame and DetailsIconPickFrame:IsShown()) then DetailsIconPickFrame:Hide() end addframe:Hide() end local addcapturebutton = DF:NewButton(addframe, nil, "$parentAddCaptureButton", "addCapturebutton", 120, 21, addcapture, nil, nil, nil, Loc ["STRING_OPTIONS_CHART_ADD2"], nil, options_button_template) --anchors local start = 25 capture_name:SetPoint(start, startY) capture_icon:SetPoint(start, -55) capture_author:SetPoint(start, -80) capture_version:SetPoint(start, -105) capture_func:SetPoint(start, -130) addcapturebutton:SetIcon ([[Interface\Buttons\UI-CheckBox-Check]], 18, 18, nil, nil, nil, 4) closebutton:SetIcon ([[Interface\PetBattles\DeadPetIcon]], 14, 14, nil, nil, nil, 4) addcapturebutton:SetTemplate(options_button_template) closebutton:SetTemplate(options_button_template) addcapturebutton:SetPoint("bottomright", addframe, "bottomright", -5, 5) closebutton:SetPoint("right", addcapturebutton, "left", -4, 0) --anchors titulo_datacharts:SetPoint(startX, startY) titulo_datacharts_desc:SetPoint(startX, startY - 20) panel:SetPoint(startX, startY - 70) local sectionOptions = { } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) end tinsert(Details.optionsSection, buildSection) end -- ~18 - mythic dungeon section do local buildSection = function(sectionFrame) local sectionOptions = { {type = "label", get = function() return Loc["STRING_OPTIONS_MPLUS_DPS_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, { type = "toggle", get = function() return Details.mythic_plus.mythicrun_time_type == 1 end, set = function(self, fixedparam, value) Details.mythic_plus.mythicrun_time_type = value and 1 sectionFrame:GetWidgetById("mythic_time_2"):SetValue(not value) end, name = Loc["STRING_OPTIONS_MPLUS_TIME_INCOMBAT"], desc = Loc["STRING_OPTIONS_MPLUS_TIME_INCOMBAT_DESC"], id = "mythic_time_1", }, { type = "toggle", get = function() return Details.mythic_plus.mythicrun_time_type == 2 end, set = function(self, fixedparam, value) Details.mythic_plus.mythicrun_time_type = value and 2 sectionFrame:GetWidgetById("mythic_time_1"):SetValue(not value) end, name = Loc["STRING_OPTIONS_MPLUS_TIME_RUNTIME"], desc = Loc["STRING_OPTIONS_MPLUS_TIME_RUNTIME_DESC"], id = "mythic_time_2", }, {type = "blank"}, {type = "label", get = function() return Loc["STRING_SEGMENTS"] end, text_template = subSectionTitleTextTemplate}, {--dedicated segment for bosses type = "toggle", get = function() return Details.mythic_plus.boss_dedicated_segment end, set = function(self, fixedparam, value) Details.mythic_plus.boss_dedicated_segment = value end, name = Loc["STRING_OPTIONS_MPLUS_BOSSNEWCOMBAT"], desc = Loc["STRING_OPTIONS_MPLUS_BOSSNEWCOMBAT_DESC"], }, {--make overall when done type = "toggle", get = function() return Details.mythic_plus.make_overall_when_done end, set = function(self, fixedparam, value) Details.mythic_plus.make_overall_when_done = value end, name = Loc["STRING_OPTIONS_MPLUS_MAKEOVERALL"], desc = Loc["STRING_OPTIONS_MPLUS_MAKEOVERALL_DESC"], }, {--merge trash type = "toggle", get = function() return Details.mythic_plus.merge_boss_trash end, set = function(self, fixedparam, value) Details.mythic_plus.merge_boss_trash = value end, name = Loc["STRING_OPTIONS_MPLUS_MERGETRASH"], desc = Loc["STRING_OPTIONS_MPLUS_MERGETRASH"], }, {type = "blank"}, {type = "label", get = function() return Loc["STRING_OPTIONS_MPLUS_PANELS_ANCHOR"] end, text_template = subSectionTitleTextTemplate}, {--show chart popup type = "toggle", get = function() return Details.mythic_plus.show_damage_graphic end, set = function(self, fixedparam, value) Details.mythic_plus.show_damage_graphic = value end, name = Loc["STRING_OPTIONS_MPLUS_SHOWENDPANEL"], desc = Loc["STRING_OPTIONS_MPLUS_SHOWENDPANEL"], }, } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) end tinsert(Details.optionsSection, buildSection) end -- ~19 - search results do --[= local buildSection = function(sectionFrame) --local sectionOptions = {} --DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) end tinsert(Details.optionsSection, buildSection) --]=] end -- ~20 combat log settings do local buildSection = function(sectionFrame) --deathlog limit local onSelectDeathLogLimit = function(_, _, limitAmount) Details:SetDeathLogLimit(limitAmount) end local DeathLogLimitOptions = { {value = 16, label = "16 Records", onclick = onSelectDeathLogLimit, icon = [[Interface\WorldStateFrame\ColumnIcon-GraveyardDefend0]]}, {value = 32, label = "32 Records", onclick = onSelectDeathLogLimit, icon = [[Interface\WorldStateFrame\ColumnIcon-GraveyardDefend0]]}, {value = 45, label = "45 Records", onclick = onSelectDeathLogLimit, icon = [[Interface\WorldStateFrame\ColumnIcon-GraveyardDefend0]]}, } local buildDeathLogLimitMenu = function() return DeathLogLimitOptions end local sectionOptions = { {type = "label", get = function() return "Death Log Options:" end, text_template = subSectionTitleTextTemplate}, {--reverse death logs type = "toggle", get = function() return Details.combat_log.inverse_deathlog_raid end, set = function(self, fixedparam, value) Details.combat_log.inverse_deathlog_raid = value end, name = "Invert Death Log (Raid)", desc = "Invert Death Log (Raid)", }, {--reverse death logs type = "toggle", get = function() return Details.combat_log.inverse_deathlog_mplus end, set = function(self, fixedparam, value) Details.combat_log.inverse_deathlog_mplus = value end, name = "Invert Death Log (M+)", desc = "Invert Death Log (M+)", }, {--reverse death logs type = "toggle", get = function() return Details.combat_log.inverse_deathlog_overalldata end, set = function(self, fixedparam, value) Details.combat_log.inverse_deathlog_overalldata = value end, name = "Invert Death Log (Overall Data)", desc = "Invert Death Log (Overall Data)", }, {--pvp frags type = "toggle", get = function() return Details.only_pvp_frags end, set = function(self, fixedparam, value) Details.only_pvp_frags = value afterUpdate() end, name = Loc ["STRING_OPTIONS_PVPFRAGS"], desc = Loc ["STRING_OPTIONS_PVPFRAGS_DESC"], boxfirst = true, }, {--death log size type = "select", get = function() return Details.deadlog_events end, values = function() return buildDeathLogLimitMenu() end, name = Loc ["STRING_OPTIONS_DEATHLIMIT"], desc = Loc ["STRING_OPTIONS_DEATHLIMIT_DESC"], }, {--death log min healing type = "range", get = function() return Details.deathlog_healingdone_min end, set = function(self, fixedparam, value) Details.deathlog_healingdone_min = value afterUpdate() end, min = 0, max = 100000, step = 1, name = Loc ["STRING_OPTIONS_DEATHLOG_MINHEALING"], desc = Loc ["STRING_OPTIONS_DEATHLOG_MINHEALING_DESC"], }, {type = "blank"}, {type = "label", get = function() return "Damage Options:" end, text_template = subSectionTitleTextTemplate}, {--damage taken everything type = "toggle", get = function() return Details.damage_taken_everything end, set = function(self, fixedparam, value) Details.damage_taken_everything = value afterUpdate() end, name = Loc ["STRING_OPTIONS_DTAKEN_EVERYTHING"], desc = Loc ["STRING_OPTIONS_DTAKEN_EVERYTHING_DESC"], boxfirst = true, }, {--merge gemstone 10.0.7 type = "toggle", get = function() return Details.combat_log.merge_gemstones_1007 end, set = function(self, fixedparam, value) Details.combat_log.merge_gemstones_1007 = value afterUpdate() Details:ClearParserCache() end, name = "Merge Primordial Stones 10.0.7", desc = "Merge Primordial Stones 10.0.7", boxfirst = true, }, {type = "blank"}, {type = "label", get = function() return "Class Options:" end, text_template = subSectionTitleTextTemplate}, {--hunter track pet frenzy type = "toggle", get = function() return Details.combat_log.track_hunter_frenzy end, set = function(self, fixedparam, value) Details.combat_log.track_hunter_frenzy = value afterUpdate() Details:ClearParserCache() end, name = DF:AddClassIconToText("Hunter Track Pet Frenzy", false, "HUNTER"), desc = "Hunter Track Pet Frenzy", boxfirst = true, }, {--show evoker bar type = "toggle", get = function() return Details.combat_log.calc_evoker_damage end, set = function(self, fixedparam, value) Details.combat_log.calc_evoker_damage = value afterUpdate() Details:ClearParserCache() currentInstance:InstanceReset() end, name = DF:AddClassIconToText("Show Augmentation Extra Bar", false, "EVOKER"), desc = "Calculate how much the Augmentation Evoker are buffing other players", boxfirst = true, }, {--use realtime dps for evoker augmentataion type = "toggle", get = function() return Details.combat_log.evoker_show_realtimedps end, set = function(self, fixedparam, value) Details.combat_log.evoker_show_realtimedps = value afterUpdate() Details:ClearParserCache() end, name = DF:AddClassIconToText("Use Real Time Dps for Aug. Evoker", false, "EVOKER"), desc = "Use Real Time Dps for Augmentation Evoker", boxfirst = true, }, {type = "blank"}, {type = "label", get = function() return "Parser Options:" end, text_template = subSectionTitleTextTemplate}, {--overheal shields type = "toggle", get = function() return Details.parser_options.shield_overheal end, set = function(self, fixedparam, value) Details.parser_options.shield_overheal = value afterUpdate() Details:ClearParserCache() Details:UpdateParserGears() end, name = "Calculate Shield Wasted Amount", desc = "This is the 'overheal' of shields, it is calculated when a shield get replaced or removed.", boxfirst = true, }, {--energy wasted energy overflown type = "toggle", get = function() return Details.parser_options.energy_overflow end, set = function(self, fixedparam, value) Details.parser_options.energy_overflow = value afterUpdate() Details:ClearParserCache() Details:UpdateParserGears() end, name = "Calculate Energy Wasted Amount", desc = "Compute the energy wasted by players when they are at maximum energy.", boxfirst = true, }, {--merge healing criticals type = "toggle", get = function() return Details.combat_log.merge_critical_heals end, set = function(self, fixedparam, value) Details.combat_log.merge_critical_heals = value afterUpdate() Details:ClearParserCache() end, name = "Merge Critical Heals", desc = "Merges spells like Atonement and Awakened Faeline with their critical damage component.", boxfirst = true, }, } sectionFrame.sectionOptions = sectionOptions sectionOptions.always_boxfirst = true DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) end tinsert(Details.optionsSection, buildSection) end --[=[ do local buildSection = function(sectionFrame) local sectionOptions = { } DF:BuildMenu(sectionFrame, sectionOptions, startX, startY-20, heightSize, false, options_text_template, options_dropdown_template, options_switch_template, true, options_slider_template, options_button_template) end tinsert(Details.optionsSection, buildSection) end --]=]