Files
coa-details/frames/window_options2_sections.lua
T

7252 lines
338 KiB
Lua

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"},
}
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)
StaticPopup_Show("RELOAD_UI_NEEDED")
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.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)
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_ENCOUNTER_DETAILS", "Details_EncounterDetails", "Encounter Breakdown", "Show detailed information about a boss encounter. Also provide damage per phase, graphic charts, easy weakauras creation.", ""},
{"DETAILS_PLUGIN_RAIDCHECK", "Details_RaidCheck", "Raid Check", "Show talents and item level for all members in your group, also shows food and flask state.", ""},
{"DETAILS_PLUGIN_STREAM_OVERLAY", "Details_Streamer", "Action Tracker", "Show which spells you are casting, viewers can see what are you doing and follow your steps.", ""},
}
local allExistentRaidPlugins = {
{"DETAILS_PLUGIN_COMPARETWO_WINDOW", "Details_Compare2", "Compare 2.0", "Replace the Compare tab in the player breakdown window.", ""},
{"DETAILS_PLUGIN_TARGET_CALLER", "Details_TargetCaller", "Target Caller", "Tracks your current target and show in the window who is doing damage to it. The amount of damage shown is the amount dealt since you selected the target.", ""},
{"DETAILS_PLUGIN_TINY_THREAT", "Details_TinyThreat", "Tiny Threat", "Threat meter plugin, show threat for group members in the window. Select it from the Plugin menu in the Orange Cogwheel.", ""},
--{"DETAILS_PLUGIN_VANGUARD", "Details_Vanguard", "Vanguard", "Show the health and debuffs for tanks in your group.", ""}
}
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:EnableMouse(true)
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:EnableMouse(true)
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(self)
local _, _, _, _, _, state = GetAddOnInfo(allExistentToolbarPlugins[o][2])
if state == "DISABLED" then
EnableAddOn(allExistentToolbarPlugins[o][2])
StaticPopup_Show("RELOAD_UI_NEEDED")
self:Disable()
self:SetText("Installed (Reload UI)")
elseif state == "MISSING" then
Details:Msg("This plugin was not found in your game folder. You may need to install it from the launcher!")
end
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:EnableMouse(true)
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:EnableMouse(true)
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(self)
local _, _, _, _, _, state = GetAddOnInfo(allExistentRaidPlugins[o][2])
if state == "DISABLED" then
EnableAddOn(allExistentRaidPlugins[o][2])
StaticPopup_Show("RELOAD_UI_NEEDED")
self:Disable()
self:SetText("Installed (Reload UI)")
elseif state == "MISSING" then
Details:Msg("This plugin was not found in your game folder. You may need to install it from the launcher!")
end
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:SetTexture(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:SetTexture(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,
},
{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,
},
{--separate DoT effects
type = "toggle",
get = function() return Details.combat_log.separate_dot_effects end,
set = function(self, fixedparam, value)
Details.combat_log.separate_dot_effects = value
end,
name = "Separate Damage Over Time Effects",
desc = "If Enabled, spells which deal initial damage and then damage over time will be tracked separately.",
boxfirst = true,
},
{--separate HoT effects
type = "toggle",
get = function() return Details.combat_log.separate_hot_effects end,
set = function(self, fixedparam, value)
Details.combat_log.separate_hot_effects = value
end,
name = "Separate Heal Over Time Effects",
desc = "If Enabled, spells which have initial healing and then heal over time will be tracked separately.",
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
--]=]