local _detalhes = _G._detalhes local Loc = LibStub("AceLocale-3.0"):GetLocale ( "Details" ) local SharedMedia = LibStub:GetLibrary("LibSharedMedia-3.0") local gump = _detalhes.gump local _ local addonName, Details222 = ... --lua locals local ipairs = ipairs local pairs = pairs local type = type local unpack = unpack --api locals local CreateFrame = CreateFrame local GetTime = GetTime local _GetSpellInfo = _detalhes.getspellinfo local _GetCursorPosition = GetCursorPosition local GameTooltip = GameTooltip local sub_atributos = _detalhes.sub_atributos local info = _detalhes.playerDetailWindow local breakdownWindow = info local container3_bars_pointFunc local SummaryWidgets = {} local CurrentTab = "Summary" local CONST_BAR_HEIGHT = 20 local CONST_TARGET_HEIGHT = 18 local PLAYER_DETAILS_WINDOW_WIDTH = 890 local PLAYER_DETAILS_WINDOW_HEIGHT = 574 local PLAYER_DETAILS_STATUSBAR_HEIGHT = 20 local PLAYER_DETAILS_STATUSBAR_ALPHA = 1 local containerSettings = { spells = { width = 419, height = 290, point = {"TOPLEFT", breakdownWindow, "TOPLEFT", 2, -76}, scrollHeight = 264, }, targets = { width = 418, height = 150, point = {"BOTTOMLEFT", breakdownWindow, "BOTTOMLEFT", 2, 6 + PLAYER_DETAILS_STATUSBAR_HEIGHT}, }, } local spellInfoSettings = { width = 430, amount = 6, } _detalhes.player_details_tabs = {} info.currentTabsInUse = {} ------------------------------------------------------------------------------------------------------------------------------ --self = instancia --jogador = classe_damage ou classe_heal do local gradientStartColor = Details222.ColorScheme.GetColorFor("gradient-background") local gradientUp = DetailsFramework:CreateTexture(info, {gradient = "vertical", fromColor = "transparent", toColor = gradientStartColor}, 1, 300, "artwork", {0, 1, 0, 1}) gradientUp:SetPoint("tops", 1, 1) local gradientDown = DetailsFramework:CreateTexture(info, {gradient = "vertical", fromColor = gradientStartColor, toColor = "transparent"}, 1, 50, "artwork", {0, 1, 0, 1}) gradientDown:SetPoint("bottoms") end function Details:GetBreakdownTabsInUse() return info.currentTabsInUse end function Details:GetBreakdownTabByName(tabName, tablePool) tablePool = tablePool or _detalhes.player_details_tabs for index = 1, #tablePool do local tab = tablePool[index] if (tab.tabname == tabName) then return tab, index end end end --return the combat being used to show the data in the opened breakdown window function Details:GetCombatFromBreakdownWindow() return info.instancia and info.instancia.showing end --return the window that requested to open the player breakdown window function Details:GetActiveWindowFromBreakdownWindow() return info.instancia end --return if the breakdown window is showing damage or heal function Details:GetDisplayTypeFromBreakdownWindow() return info.atributo, info.sub_atributo end --return the actor object in use by the breakdown window function Details:GetPlayerObjectFromBreakdownWindow() return info.jogador end function Details:GetBreakdownWindow() return Details.playerDetailWindow end function Details:IsBreakdownWindowOpen() return info.ativo end function Details222.PlayerBreakdown.StartMoving() breakdownWindow:StartMoving() breakdownWindow.bIsMoving = true end function Details222.PlayerBreakdown.StopMoving() if (breakdownWindow.bIsMoving) then breakdownWindow:StopMovingOrSizing() breakdownWindow.bIsMoving = false end end function Details222.PlayerBreakdown.OnMouseDown(frameClicked, button) if (button == "LeftButton" and not breakdownWindow.bIsMoving) then breakdownWindow.latestFrameClicked = frameClicked Details222.PlayerBreakdown.StartMoving() elseif (button == "RightButton" and not breakdownWindow.bIsMoving) then Details:CloseBreakdownWindow() end end function Details222.PlayerBreakdown.OnMouseUp(button) if (button == "LeftButton" and breakdownWindow.bIsMoving) then Details222.PlayerBreakdown.StopMoving() end end --english alias --window object from Details:GetWindow(n) and playerObject from Details:GetPlayer(playerName, attribute) function Details:OpenPlayerBreakdown(windowObject, playerObject, from_att_change) --windowObject = instanceObject windowObject:AbreJanelaInfo(playerObject, from_att_change) end function _detalhes:AbreJanelaInfo (jogador, from_att_change, refresh, ShiftKeyDown, ControlKeyDown) --create the player list frame in the left side of the window Details.PlayerBreakdown.CreatePlayerListFrame() if (not _detalhes.row_singleclick_overwrite [self.atributo] or not _detalhes.row_singleclick_overwrite [self.atributo][self.sub_atributo]) then _detalhes:FechaJanelaInfo() return elseif (type(_detalhes.row_singleclick_overwrite [self.atributo][self.sub_atributo]) == "function") then if (from_att_change) then _detalhes:FechaJanelaInfo() return end return _detalhes.row_singleclick_overwrite [self.atributo][self.sub_atributo] (_, jogador, self, ShiftKeyDown, ControlKeyDown) end if (self.modo == _detalhes._detalhes_props["MODO_RAID"]) then _detalhes:FechaJanelaInfo() return end if (not breakdownWindow.registeredLibWindow) then local LibWindow = LibStub("LibWindow-1.1") breakdownWindow.registeredLibWindow = true if (LibWindow) then breakdownWindow.libWindowTable = breakdownWindow.libWindowTable or {} LibWindow.RegisterConfig(breakdownWindow, breakdownWindow.libWindowTable) LibWindow.RestorePosition(breakdownWindow) LibWindow.MakeDraggable(breakdownWindow) LibWindow.SavePosition(breakdownWindow) else breakdownWindow:SetScript("OnMouseDown", function(self, button) Details222.PlayerBreakdown.OnMouseDown(button) end) breakdownWindow:SetScript("OnMouseUp", function(self, button) Details222.PlayerBreakdown.OnMouseUp(button) end) end end ---@type function local onEventFunction = breakdownWindow:GetScript("OnEvent") if (not onEventFunction) then ---this is a workaround of an issue when a frame calls StartMoving() on the parent, many times the child doesn't receive the OnMouseUp event ---@param breakdownWindow frame ---@param event string ---@param button string breakdownWindow:SetScript("OnEvent", function(breakdownWindow, event, button) if (breakdownWindow.bIsMoving and breakdownWindow.latestFrameClicked) then Details222.PlayerBreakdown.StopMoving() local OnMouseUp = breakdownWindow.latestFrameClicked:GetScript("OnMouseUp") if (OnMouseUp) then OnMouseUp(breakdownWindow.latestFrameClicked, button) end breakdownWindow.latestFrameClicked = nil end end) breakdownWindow:RegisterEvent("GLOBAL_MOUSE_UP") end --_detalhes.info_jogador armazena o jogador que esta sendo mostrado na janela de detalhes if (info.jogador and info.jogador == jogador and self and info.atributo and self.atributo == info.atributo and self.sub_atributo == info.sub_atributo and not refresh) then _detalhes:FechaJanelaInfo() --se clicou na mesma barra ent�o fecha a janela de detalhes return elseif (not jogador) then _detalhes:FechaJanelaInfo() return end if (info.barras1) then for index, barra in ipairs(info.barras1) do barra.other_actor = nil end end if (info.barras2) then for index, barra in ipairs(info.barras2) do barra.icone:SetTexture("") barra.icone:SetTexCoord(0, 1, 0, 1) end end if (not info.bHasInitialized) then local infoNumPoints = info:GetNumPoints() for i = 1, infoNumPoints do local point1, anchorObject, point2, x, y = info:GetPoint(i) if (not anchorObject) then info:ClearAllPoints() end end info:SetUserPlaced(false) info:SetDontSavePosition(true) local okay, errorText = pcall(function() info:SetPoint("center", _G.UIParent, "center", 0, 0) end) if (not okay) then info:ClearAllPoints() info:SetPoint("center", _G.UIParent, "center", 0, 0) end info.bHasInitialized = true end if (not info.RightSideBar) then info.RightSideBar = CreateFrame("frame", nil, info, "BackdropTemplate") info.RightSideBar:SetWidth(20) info.RightSideBar:SetPoint("topleft", info, "topright", 1, 0) info.RightSideBar:SetPoint("bottomleft", info, "bottomright", 1, 0) local rightSideBarAlpha = 0.75 DetailsFramework:ApplyStandardBackdrop(info.RightSideBar) local toggleMergePlayerSpells = function() Details.merge_player_abilities = not Details.merge_player_abilities local playerObject = Details:GetPlayerObjectFromBreakdownWindow() local instanceObject = Details:GetActiveWindowFromBreakdownWindow() Details:OpenPlayerBreakdown(instanceObject, playerObject) --toggle Details:OpenPlayerBreakdown(instanceObject, playerObject) end local mergePlayerSpellsCheckbox = DetailsFramework:CreateSwitch(info, toggleMergePlayerSpells, Details.merge_player_abilities, _, _, _, _, _, _, _, _, _, _, DetailsFramework:GetTemplate("switch", "OPTIONS_CHECKBOX_BRIGHT_TEMPLATE")) mergePlayerSpellsCheckbox:SetAsCheckBox() mergePlayerSpellsCheckbox:SetPoint("bottom", info.RightSideBar, "bottom", 0, 2) local mergePlayerSpellsLabel = info.RightSideBar:CreateFontString(nil, "overlay", "GameFontNormal") mergePlayerSpellsLabel:SetText("Merge Player Spells") DetailsFramework:SetFontRotation(mergePlayerSpellsLabel, 90) mergePlayerSpellsLabel:SetPoint("center", mergePlayerSpellsCheckbox.widget, "center", -6, mergePlayerSpellsCheckbox:GetHeight()/2 + mergePlayerSpellsLabel:GetStringWidth() / 2) -- local toggleMergePetSpells = function() Details.merge_pet_abilities = not Details.merge_pet_abilities local playerObject = Details:GetPlayerObjectFromBreakdownWindow() local instanceObject = Details:GetActiveWindowFromBreakdownWindow() Details:OpenPlayerBreakdown(instanceObject, playerObject) --toggle Details:OpenPlayerBreakdown(instanceObject, playerObject) end local mergePetSpellsCheckbox = DetailsFramework:CreateSwitch(info, toggleMergePetSpells, Details.merge_pet_abilities, _, _, _, _, _, _, _, _, _, _, DetailsFramework:GetTemplate("switch", "OPTIONS_CHECKBOX_BRIGHT_TEMPLATE")) mergePetSpellsCheckbox:SetAsCheckBox(true) mergePetSpellsCheckbox:SetPoint("bottom", info.RightSideBar, "bottom", 0, 160) local mergePetSpellsLabel = info.RightSideBar:CreateFontString(nil, "overlay", "GameFontNormal") mergePetSpellsLabel:SetText("Merge Pet Spells") DetailsFramework:SetFontRotation(mergePetSpellsLabel, 90) mergePetSpellsLabel:SetPoint("center", mergePetSpellsCheckbox.widget, "center", -6, mergePetSpellsCheckbox:GetHeight()/2 + mergePetSpellsLabel:GetStringWidth() / 2) mergePlayerSpellsCheckbox:SetAlpha(rightSideBarAlpha) mergePlayerSpellsLabel:SetAlpha(rightSideBarAlpha) mergePetSpellsCheckbox:SetAlpha(rightSideBarAlpha) mergePetSpellsLabel:SetAlpha(rightSideBarAlpha) end info.ativo = true --sinaliza o addon que a janela esta aberta info.atributo = self.atributo --instancia.atributo -> grava o atributo (damage, heal, etc) info.sub_atributo = self.sub_atributo --instancia.sub_atributo -> grava o sub atributo (damage done, dps, damage taken, etc) info.jogador = jogador --de qual jogador (objeto classe_damage) info.instancia = self --salva a refer�ncia da inst�ncia que pediu o info info.target_text = Loc ["STRING_TARGETS"] .. ":" info.target_member = "total" info.target_persecond = false info.mostrando = nil local nome = info.jogador.nome --nome do jogador local atributo_nome = sub_atributos[info.atributo].lista [info.sub_atributo] .. " " .. Loc ["STRING_ACTORFRAME_REPORTOF"] --// nome do atributo // precisa ser o sub atributo correto??? --removendo o nome da realm do jogador if (nome:find("-")) then nome = nome:gsub(("-.*"), "") end if (info.instancia.atributo == 1 and info.instancia.sub_atributo == 6) then --enemy atributo_nome = sub_atributos [info.atributo].lista [1] .. " " .. Loc ["STRING_ACTORFRAME_REPORTOF"] end info.nome:SetText(nome) info.atributo_nome:SetText(atributo_nome) local serial = jogador.serial local avatar if (serial ~= "") then avatar = NickTag:GetNicknameTable (serial) end if (avatar and avatar [1]) then info.nome:SetText((not _detalhes.ignore_nicktag and avatar [1]) or nome) end if (avatar and avatar [2]) then info.avatar:SetTexture(avatar [2]) info.avatar_bg:SetTexture(avatar [4]) if (avatar [5]) then info.avatar_bg:SetTexCoord(unpack(avatar [5])) end if (avatar [6]) then info.avatar_bg:SetVertexColor(unpack(avatar [6])) end info.avatar_nick:SetText(avatar [1] or nome) info.avatar_attribute:SetText(atributo_nome) info.avatar_attribute:SetPoint("CENTER", info.avatar_nick, "CENTER", 0, 14) info.avatar:Show() info.avatar_bg:Show() info.avatar_bg:SetAlpha(.65) info.avatar_nick:Show() info.avatar_attribute:Show() info.nome:Hide() info.atributo_nome:Hide() else info.avatar:Hide() info.avatar_bg:Hide() info.avatar_nick:Hide() info.avatar_attribute:Hide() info.nome:Show() info.atributo_nome:Show() end info.atributo_nome:SetPoint("CENTER", info.nome, "CENTER", 0, 14) --need a way to comunicate with the main tab showing spells --need to send a signal to reset its contents and prepare for a new player --spellsTab.ResetBars() local classe = jogador.classe if (not classe) then classe = "monster" end info.classe_icone:SetTexture("Interface\\AddOns\\Details\\images\\classes") --top left info.SetClassIcon (jogador, classe) Details.FadeHandler.Fader(info, 0) Details:UpdateBreakdownPlayerList() Details:InitializeAurasTab() Details:InitializeCompareTab() --open tab local tabsShown = {} local tabsReplaced = {} local tabReplacedAmount = 0 table.wipe(info.currentTabsInUse) for index = 1, #_detalhes.player_details_tabs do local tab = _detalhes.player_details_tabs[index] tab.replaced = nil tabsShown[#tabsShown+1] = tab end for index = 1, #tabsShown do --get the tab local tab = tabsShown[index] if (tab.replaces) then local attributeList = tab.replaces.attributes if (attributeList[info.atributo]) then if (attributeList[info.atributo][info.sub_atributo]) then local tabReplaced, tabIndex = Details:GetBreakdownTabByName(tab.replaces.tabNameToReplace, tabsShown) if (tabReplaced and tabIndex < index) then tabReplaced:Hide() tabReplaced.frame:Hide() tinsert(tabsReplaced, tabReplaced) tremove(tabsShown, tabIndex) tinsert(tabsShown, tabIndex, tab) if (tabReplaced.tabname == info.selectedTab) then info.selectedTab = tab.tabname end tabReplaced.replaced = true tabReplacedAmount = tabReplacedAmount + 1 end end end end end local newTabsShown = {} local tabAlreadyInUse = {} for index = 1, #tabsShown do if (not tabAlreadyInUse[tabsShown[index].tabname]) then tabAlreadyInUse[tabsShown[index].tabname] = true tinsert(newTabsShown, tabsShown[index]) end end tabsShown = newTabsShown info.currentTabsInUse = newTabsShown info:ShowTabs() Details222.BreakdownWindow.CurrentDefaultTab = nil local shownTab for index = 1, #tabsShown do local tabButton = tabsShown[index] if (tabButton:condition(info.jogador, info.atributo, info.sub_atributo)) then if (tabButton.IsDefaultTab) then Details222.BreakdownWindow.CurrentDefaultTab = tabButton end if (info.selectedTab == tabButton.tabname) then tabButton:DoClick() tabButton:OnShowFunc() shownTab = tabButton end end end if (shownTab) then shownTab:Click() end end --end of "AbreJanelaInfo()" --alias function Details:CloseBreakdownWindow(bFromEscape) return _detalhes:FechaJanelaInfo(bFromEscape) end function _detalhes:FechaJanelaInfo(fromEscape) if (info.ativo) then if (fromEscape) then Details.FadeHandler.Fader(info, "in") else Details.FadeHandler.Fader(info, 1) end info.ativo = false --sinaliza o addon que a janela esta agora fechada --_detalhes.info_jogador.detalhes = nil info.jogador = nil info.atributo = nil info.sub_atributo = nil info.instancia = nil info.nome:SetText("") info.atributo_nome:SetText("") end end ---@type {[number]: boolean} Details222.BreakdownWindow.ExpandedSpells = {} ---set a spell as expanded or not in the breakdown window ---@param spellID number ---@param bIsExpanded boolean function Details222.BreakdownWindow.SetSpellAsExpanded(spellID, bIsExpanded) Details222.BreakdownWindow.ExpandedSpells[spellID] = bIsExpanded end ---get the state of the expanded for a spell ---@param spellID number ---@return boolean function Details222.BreakdownWindow.IsSpellExpanded(spellID) return Details222.BreakdownWindow.ExpandedSpells[spellID] end --determina qual a pocis�o que a barra de detalhes vai ocupar ------------------------------------------------------------------------------------------------------------------------------ --namespace function Details222.BreakdownWindow.GetBlockIndex(index) --getting the infomation from the new spells tab, this will be depreccated soon return Details.playerDetailWindow.grupos_detalhes[index] end ---receives spell data to show in the summary tab ---@param data table ---@param actorObject actor ---@param combatObject combat ---@param instance instance function Details222.BreakdownWindow.SendSpellData(data, actorObject, combatObject, instance) --need to get the tab showing the summary and transmit the data to it local tab = Details222.BreakdownWindow.CurrentDefaultTab if (tab) then --tab is the tab button if (tab.OnReceiveSpellData) then tab.OnReceiveSpellData(data, actorObject, combatObject, instance) end end end --cria os textos em geral da janela info function breakdownWindow.CreateTexts(SWW) breakdownWindow.nome = breakdownWindow:CreateFontString(nil, "OVERLAY", "QuestFont_Large") breakdownWindow.nome:SetPoint("TOPLEFT", breakdownWindow, "TOPLEFT", 105, -54) breakdownWindow.atributo_nome = breakdownWindow:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") breakdownWindow.avatar = breakdownWindow:CreateTexture(nil, "overlay") breakdownWindow.avatar_bg = breakdownWindow:CreateTexture(nil, "overlay") breakdownWindow.avatar_attribute = breakdownWindow:CreateFontString(nil, "overlay", "GameFontHighlightSmall") breakdownWindow.avatar_nick = breakdownWindow:CreateFontString(nil, "overlay", "QuestFont_Large") breakdownWindow.avatar:SetDrawLayer("overlay", 3) breakdownWindow.avatar_bg:SetDrawLayer("overlay", 2) breakdownWindow.avatar_nick:SetDrawLayer("overlay", 4) breakdownWindow.avatar:SetPoint("TOPLEFT", breakdownWindow, "TOPLEFT", 60, -10) breakdownWindow.avatar_bg:SetPoint("TOPLEFT", breakdownWindow, "TOPLEFT", 60, -12) breakdownWindow.avatar_bg:SetSize(275, 60) breakdownWindow.avatar_nick:SetPoint("TOPLEFT", breakdownWindow, "TOPLEFT", 195, -54) breakdownWindow.avatar:Hide() breakdownWindow.avatar_bg:Hide() breakdownWindow.avatar_nick:Hide() end local default_icon_change = function(jogador, classe) if (classe ~= "UNKNOW" and classe ~= "UNGROUPPLAYER") then info.classe_icone:SetTexCoord(_detalhes.class_coords [classe][1], _detalhes.class_coords [classe][2], _detalhes.class_coords [classe][3], _detalhes.class_coords [classe][4]) if (jogador.enemy) then if (_detalhes.faction_against == "Horde") then info.nome:SetTextColor(1, 91/255, 91/255, 1) else info.nome:SetTextColor(151/255, 215/255, 1, 1) end else info.nome:SetTextColor(1, 1, 1, 1) end else if (jogador.enemy) then if (_detalhes.class_coords [_detalhes.faction_against]) then info.classe_icone:SetTexCoord(unpack(_detalhes.class_coords [_detalhes.faction_against])) if (_detalhes.faction_against == "Horde") then info.nome:SetTextColor(1, 91/255, 91/255, 1) else info.nome:SetTextColor(151/255, 215/255, 1, 1) end else info.nome:SetTextColor(1, 1, 1, 1) end else info.classe_icone:SetTexCoord(_detalhes.class_coords ["MONSTER"][1], _detalhes.class_coords ["MONSTER"][2], _detalhes.class_coords ["MONSTER"][3], _detalhes.class_coords ["MONSTER"][4]) end end end function _detalhes:InstallPDWSkin(skin_name, func) if (not skin_name) then return false -- sem nome elseif (_detalhes.playerdetailwindow_skins[skin_name]) then return false -- ja existe end _detalhes.playerdetailwindow_skins[skin_name] = func return true end function _detalhes:ApplyPDWSkin(skin_name) --already built if (not DetailsBreakdownWindow.Loaded) then if (skin_name) then _detalhes.player_details_window.skin = skin_name end return end --hide extra frames local window = DetailsBreakdownWindow if (window.extra_frames) then for framename, frame in pairs(window.extra_frames) do frame:Hide() end end --apply default first local default_skin = _detalhes.playerdetailwindow_skins["WoWClassic"] pcall(default_skin.func) --than do the change if (not skin_name) then skin_name = _detalhes.player_details_window.skin end local skin = _detalhes.playerdetailwindow_skins [skin_name] if (skin) then local successful, errortext = pcall(skin.func) if (not successful) then _detalhes:Msg("error occurred on skin call():", errortext) local former_skin = _detalhes.playerdetailwindow_skins [_detalhes.player_details_window.skin] pcall(former_skin.func) else _detalhes.player_details_window.skin = skin_name end else _detalhes:Msg("skin not found.") end if (info and info:IsShown() and info.jogador and info.jogador.classe) then info.SetClassIcon (info.jogador, info.jogador.classe) end _detalhes:ApplyRPSkin (skin_name) end function _detalhes:SetPlayerDetailsWindowTexture (texture) DetailsBreakdownWindow.bg1:SetTexture(texture) end function _detalhes:SetPDWBarConfig (texture) local window = DetailsBreakdownWindow if (texture) then _detalhes.player_details_window.bar_texture = texture local texture = SharedMedia:Fetch ("statusbar", texture) for _, bar in ipairs(window.barras1) do bar.textura:SetStatusBarTexture(texture) end for _, bar in ipairs(window.barras2) do bar.textura:SetStatusBarTexture(texture) end for _, bar in ipairs(window.barras3) do bar.textura:SetStatusBarTexture(texture) end end end local default_skin = function()end _detalhes:InstallPDWSkin("WoWClassic", {func = default_skin, author = "Details! Team", version = "v1.0", desc = "Default skin."}) --deprecated local elvui_skin = function() local window = DetailsBreakdownWindow window.bg1:SetTexture([[Interface\AddOns\Details\images\background]], true) window.bg1:SetAlpha(0.7) window.bg1:SetVertexColor(0.27, 0.27, 0.27) window.bg1:SetVertTile(true) window.bg1:SetHorizTile(true) window.bg1:SetSize(PLAYER_DETAILS_WINDOW_WIDTH, PLAYER_DETAILS_WINDOW_HEIGHT) window:SetBackdrop({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]}) window:SetBackdropColor(1, 1, 1, 0.3) window:SetBackdropBorderColor(0, 0, 0, 1) local bgs_alpha = 0.6 window.leftbars1_backgound:SetPoint("topleft", window.container_barras, "topleft", -2, 3) window.leftbars1_backgound:SetPoint("bottomright", window.container_barras, "bottomright", 3, -3) window.leftbars2_backgound:SetPoint("topleft", window.container_alvos, "topleft", -2, 23) window.leftbars2_backgound:SetPoint("bottomright", window.container_alvos, "bottomright", 4, 0) window.leftbars1_backgound:SetAlpha(bgs_alpha) window.leftbars2_backgound:SetAlpha(bgs_alpha) window.right_background1:SetAlpha(bgs_alpha) window.right_background2:SetAlpha(bgs_alpha) window.right_background3:SetAlpha(bgs_alpha) window.right_background4:SetAlpha(bgs_alpha) window.right_background5:SetAlpha(bgs_alpha) window.close_button:GetNormalTexture():SetDesaturated(true) local titlebar = window.extra_frames ["ElvUITitleBar"] if (not titlebar) then titlebar = CreateFrame("frame", nil, window, "BackdropTemplate") titlebar:SetPoint("topleft", window, "topleft", 2, -3) titlebar:SetPoint("topright", window, "topright", -2, -3) titlebar:SetHeight(20) titlebar:SetBackdrop({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]], tileSize = 64, tile = true}) titlebar:SetBackdropColor(.5, .5, .5, 1) titlebar:SetBackdropBorderColor(0, 0, 0, 1) window.extra_frames ["ElvUITitleBar"] = titlebar local name_bg_texture = window:CreateTexture(nil, "background") name_bg_texture:SetTexture([[Interface\PetBattles\_PetBattleHorizTile]], true) name_bg_texture:SetHorizTile(true) name_bg_texture:SetTexCoord(0, 1, 126/256, 19/256) name_bg_texture:SetPoint("topleft", window, "topleft", 2, -22) --name_bg_texture:SetPoint("topright", window, "topright", -2, -22) name_bg_texture:SetPoint("bottomright", window, "bottomright") name_bg_texture:SetHeight(54) name_bg_texture:SetVertexColor(0, 0, 0, 0.2) window.extra_frames ["ElvUINameTexture"] = name_bg_texture else titlebar:Show() window.extra_frames ["ElvUINameTexture"]:Show() end window.title_string:ClearAllPoints() window.title_string:SetPoint("center", window, "center") window.title_string:SetPoint("top", window, "top", 0, -7) window.title_string:SetParent(titlebar) window.title_string:SetTextColor(.8, .8, .8, 1) window.classe_icone:SetParent(titlebar) window.classe_icone:SetDrawLayer("overlay") window.classe_icone:SetPoint("TOPLEFT", window, "TOPLEFT", 2, -25) window.classe_icone:SetWidth(49) window.classe_icone:SetHeight(49) window.classe_icone:SetAlpha(1) window.close_button:SetWidth(20) window.close_button:SetHeight(20) window.close_button:SetPoint("TOPRIGHT", window, "TOPRIGHT", 0, -3) window.avatar:SetParent(titlebar) --bar container window.container_barras:SetPoint(unpack(containerSettings.spells.point)) window.container_barras:SetSize(containerSettings.spells.width, containerSettings.spells.height) --target container window.container_alvos:SetPoint(unpack(containerSettings.targets.point)) window.container_alvos:SetSize(containerSettings.targets.width, containerSettings.targets.height) --texts window.nome:SetPoint("TOPLEFT", window, "TOPLEFT", 105, -48) --report button window.topleft_report:SetPoint("BOTTOMLEFT", window.container_barras, "TOPLEFT", 43, 2) --no targets texture window.no_targets:SetPoint("BOTTOMLEFT", window, "BOTTOMLEFT", 3, 6) window.no_targets:SetSize(418, 150) window.no_targets:SetAlpha(0.4) --right panel textures window.bg2_sec_texture:SetPoint("topleft", window.bg1_sec_texture, "topleft", 7, 0) window.bg2_sec_texture:SetPoint("bottomright", window.bg1_sec_texture, "bottomright", -30, 0) window.bg2_sec_texture:SetTexture([[Interface\Glues\CREDITS\Warlords\Shadowmoon_Color_jlo3]]) window.bg2_sec_texture:SetDesaturated(true) window.bg2_sec_texture:SetAlpha(0) window.bg3_sec_texture:SetPoint("topleft", window.bg2_sec_texture, "topleft", 0, 0) window.bg3_sec_texture:SetPoint("bottomright", window.bg2_sec_texture, "bottomright", 0, 0) window.bg3_sec_texture:SetTexture(0, 0, 0, 0.3) --the 5 spell details blocks - not working for i, infoblock in ipairs(_detalhes.playerDetailWindow.grupos_detalhes) do infoblock.bg:SetSize(330, 47) end local xLocation = {-85, -136, -191, -246, -301} local heightTable = {50, 50, 50, 50, 50, 48} for i = 1, spellInfoSettings.amount do window ["right_background" .. i]:SetPoint("topleft", window, "topleft", 351, xLocation [i]) window ["right_background" .. i]:SetSize(spellInfoSettings.width, heightTable [i]) end --seta configs dos 5 blocos da direita info:SetDetailInfoConfigs("Interface\\AddOns\\Details\\images\\bar_background_dark", {1, 1, 1, 0.35}, -6 + 100, 0) window.bg1_sec_texture:SetPoint("topleft", window.bg1, "topleft", 446, -86) window.bg1_sec_texture:SetWidth(337) window.bg1_sec_texture:SetHeight(362) --container 3 bars local x_start = 56 local y_start = -10 local janela = window.container_detalhes container3_bars_pointFunc = function(barra, index) local y = (index-1) * 17 y = y*-1 barra:SetPoint("LEFT", info.bg1_sec_texture, "LEFT", 0, 0) barra:SetPoint("RIGHT", info.bg1_sec_texture, "RIGHT", 0, 0) --barra:SetPoint("LEFT", janela, "LEFT", x_start, 0) --barra:SetPoint("RIGHT", janela, "RIGHT", 62, 0) barra:SetPoint("TOP", janela, "TOP", 0, y+y_start) end for index, barra in ipairs(window.barras3) do local y = (index-1) * 17 y = y*-1 barra:SetPoint("LEFT", janela, "LEFT", x_start, 0) barra:SetPoint("RIGHT", janela, "RIGHT", 62, 0) barra:SetPoint("TOP", janela, "TOP", 0, y+y_start) end --scrollbar do --get textures local normalTexture = window.container_barras.cima:GetNormalTexture() local pushedTexture = window.container_barras.cima:GetPushedTexture() local disabledTexture = window.container_barras.cima:GetDisabledTexture() --set the new textures normalTexture:SetTexture([[Interface\Buttons\Arrow-Up-Up]]) pushedTexture:SetTexture([[Interface\Buttons\Arrow-Up-Down]]) disabledTexture:SetTexture([[Interface\Buttons\Arrow-Up-Disabled]]) normalTexture:SetPoint("topleft", window.container_barras.cima, "topleft", 1, 0) normalTexture:SetPoint("bottomright", window.container_barras.cima, "bottomright", 1, 0) pushedTexture:SetPoint("topleft", window.container_barras.cima, "topleft", 1, 0) pushedTexture:SetPoint("bottomright", window.container_barras.cima, "bottomright", 1, 0) disabledTexture:SetPoint("topleft", window.container_barras.cima, "topleft", 1, 0) disabledTexture:SetPoint("bottomright", window.container_barras.cima, "bottomright", 1, 0) disabledTexture:SetAlpha(0.5) window.container_barras.cima:SetSize(16, 16) window.container_barras.cima:SetBackdrop({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]}) window.container_barras.cima:SetBackdropColor(0, 0, 0, 0.3) window.container_barras.cima:SetBackdropBorderColor(0, 0, 0, 1) end do --get textures local normalTexture = window.container_barras.baixo:GetNormalTexture() local pushedTexture = window.container_barras.baixo:GetPushedTexture() local disabledTexture = window.container_barras.baixo:GetDisabledTexture() --set the new textures normalTexture:SetTexture([[Interface\Buttons\Arrow-Down-Up]]) pushedTexture:SetTexture([[Interface\Buttons\Arrow-Down-Down]]) disabledTexture:SetTexture([[Interface\Buttons\Arrow-Down-Disabled]]) normalTexture:SetPoint("topleft", window.container_barras.baixo, "topleft", 1, -4) normalTexture:SetPoint("bottomright", window.container_barras.baixo, "bottomright", 1, -4) pushedTexture:SetPoint("topleft", window.container_barras.baixo, "topleft", 1, -4) pushedTexture:SetPoint("bottomright", window.container_barras.baixo, "bottomright", 1, -4) disabledTexture:SetPoint("topleft", window.container_barras.baixo, "topleft", 1, -4) disabledTexture:SetPoint("bottomright", window.container_barras.baixo, "bottomright", 1, -4) disabledTexture:SetAlpha(0.5) window.container_barras.baixo:SetSize(16, 16) window.container_barras.baixo:SetBackdrop({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]}) window.container_barras.baixo:SetBackdropColor(0, 0, 0, 0.3) window.container_barras.baixo:SetBackdropBorderColor(0, 0, 0, 1) end window.container_barras.slider:SetBackdrop({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]}) window.container_barras.slider:SetBackdropColor(0, 0, 0, 0.35) window.container_barras.slider:SetBackdropBorderColor(0, 0, 0, 1) window.container_barras.slider:Altura (containerSettings.spells.scrollHeight) window.container_barras.slider:cimaPoint (0, 13) window.container_barras.slider:baixoPoint (0, -13) window.container_barras.slider.thumb:SetTexture([[Interface\AddOns\Details\images\icons2]]) window.container_barras.slider.thumb:SetTexCoord(482/512, 492/512, 104/512, 120/512) window.container_barras.slider.thumb:SetSize(12, 12) window.container_barras.slider.thumb:SetVertexColor(0.6, 0.6, 0.6, 0.95) -- do local f = window.container_alvos --get textures local normalTexture = f.cima:GetNormalTexture() local pushedTexture = f.cima:GetPushedTexture() local disabledTexture = f.cima:GetDisabledTexture() --set the new textures normalTexture:SetTexture([[Interface\Buttons\Arrow-Up-Up]]) pushedTexture:SetTexture([[Interface\Buttons\Arrow-Up-Down]]) disabledTexture:SetTexture([[Interface\Buttons\Arrow-Up-Disabled]]) normalTexture:SetPoint("topleft", f.cima, "topleft", 1, 0) normalTexture:SetPoint("bottomright", f.cima, "bottomright", 1, 0) pushedTexture:SetPoint("topleft", f.cima, "topleft", 1, 0) pushedTexture:SetPoint("bottomright", f.cima, "bottomright", 1, 0) disabledTexture:SetPoint("topleft", f.cima, "topleft", 1, 0) disabledTexture:SetPoint("bottomright", f.cima, "bottomright", 1, 0) disabledTexture:SetAlpha(0.5) f.cima:SetSize(16, 16) f.cima:SetBackdrop({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]}) f.cima:SetBackdropColor(0, 0, 0, 0.3) f.cima:SetBackdropBorderColor(0, 0, 0, 1) end do local f = window.container_alvos --get textures local normalTexture = f.baixo:GetNormalTexture() local pushedTexture = f.baixo:GetPushedTexture() local disabledTexture = f.baixo:GetDisabledTexture() --set the new textures normalTexture:SetTexture([[Interface\Buttons\Arrow-Down-Up]]) pushedTexture:SetTexture([[Interface\Buttons\Arrow-Down-Down]]) disabledTexture:SetTexture([[Interface\Buttons\Arrow-Down-Disabled]]) normalTexture:SetPoint("topleft", f.baixo, "topleft", 1, -4) normalTexture:SetPoint("bottomright", f.baixo, "bottomright", 1, -4) pushedTexture:SetPoint("topleft", f.baixo, "topleft", 1, -4) pushedTexture:SetPoint("bottomright", f.baixo, "bottomright", 1, -4) disabledTexture:SetPoint("topleft", f.baixo, "topleft", 1, -4) disabledTexture:SetPoint("bottomright", f.baixo, "bottomright", 1, -4) disabledTexture:SetAlpha(0.5) f.baixo:SetSize(16, 16) f.baixo:SetBackdrop({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]}) f.baixo:SetBackdropColor(0, 0, 0, 0.3) f.baixo:SetBackdropBorderColor(0, 0, 0, 1) end window.container_alvos.slider:SetBackdrop({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]}) window.container_alvos.slider:SetBackdropColor(0, 0, 0, 0.35) window.container_alvos.slider:SetBackdropBorderColor(0, 0, 0, 1) window.container_alvos.slider:Altura (137) window.container_alvos.slider:cimaPoint (0, 13) window.container_alvos.slider:baixoPoint (0, -13) window.container_alvos.slider.thumb:SetTexture([[Interface\AddOns\Details\images\icons2]]) window.container_alvos.slider.thumb:SetTexCoord(482/512, 492/512, 104/512, 120/512) window.container_alvos.slider.thumb:SetSize(12, 12) window.container_alvos.slider.thumb:SetVertexColor(0.6, 0.6, 0.6, 0.95) --class icon ---set the spell, spec or class icon ---@param actorObject actor ---@param class string|nil window.SetClassIcon = function(actorObject, class) if (actorObject.spellicon) then window.classe_icone:SetTexture(actorObject.spellicon) window.classe_icone:SetTexCoord(.1, .9, .1, .9) elseif (actorObject.spec) then window.classe_icone:SetTexture([[Interface\AddOns\Details\images\spec_icons_normal_alpha]]) window.classe_icone:SetTexCoord(unpack(_detalhes.class_specs_coords [actorObject.spec])) --esta_barra.icone_classe:SetVertexColor(1, 1, 1) else local coords = CLASS_ICON_TCOORDS[class] if (coords) then info.classe_icone:SetTexture([[Interface\Glues\CHARACTERCREATE\UI-CHARACTERCREATE-CLASSES]]) local l, r, t, b = unpack(coords) info.classe_icone:SetTexCoord(l+0.01953125, r-0.01953125, t+0.01953125, b-0.01953125) else local c = _detalhes.class_coords ["MONSTER"] info.classe_icone:SetTexture("Interface\\AddOns\\Details\\images\\classes") info.classe_icone:SetTexCoord(c[1], c[2], c[3], c[4]) end end end end --search key: ~create ~inicio ~start function gump:CriaJanelaInfo() local breakdownFrame = info table.insert(UISpecialFrames, breakdownFrame:GetName()) breakdownFrame.extra_frames = {} breakdownFrame.Loaded = true Details.playerDetailWindow = breakdownFrame --stopped: started the skin merge with the window creation breakdownFrame:SetWidth(PLAYER_DETAILS_WINDOW_WIDTH) breakdownFrame:SetHeight(PLAYER_DETAILS_WINDOW_HEIGHT) breakdownFrame:SetFrameStrata("HIGH") breakdownFrame:SetToplevel(true) breakdownFrame:EnableMouse(true) breakdownFrame:SetResizable(false) breakdownFrame:SetMovable(true) --host the textures and fontstring of the default frame of the player breakdown window breakdownFrame.SummaryWindowWidgets = CreateFrame("frame", "DetailsBreakdownWindowSummaryWidgets", breakdownFrame, "BackdropTemplate") local SWW = breakdownFrame.SummaryWindowWidgets SWW:SetAllPoints() table.insert(SummaryWidgets, SWW) --where SummaryWidgets is declared: at the header of the file, what is the purpose of this table? --what is the summary window: is the frame where all the widgets for the summary tab are created DetailsFramework:CreateScaleBar(breakdownFrame, Details.player_details_window) breakdownFrame:SetScale(Details.player_details_window.scale) --class icon breakdownFrame.classe_icone = breakdownFrame:CreateTexture(nil, "BACKGROUND", nil, 1) breakdownFrame.classe_icone:SetPoint("TOPLEFT", breakdownFrame, "TOPLEFT", 4, 0) breakdownFrame.classe_icone:SetSize(64, 64) --background topleft? breakdownFrame.bg1 = breakdownFrame:CreateTexture("DetailsPSWBackground", "BORDER", nil, 1) breakdownFrame.bg1:SetPoint("TOPLEFT", breakdownFrame, "TOPLEFT", 0, 0) --close button breakdownFrame.close_button = CreateFrame("Button", nil, breakdownFrame, "UIPanelCloseButton") breakdownFrame.close_button:SetSize(32, 32) breakdownFrame.close_button:SetPoint("TOPRIGHT", breakdownFrame, "TOPRIGHT", 5, -8) breakdownFrame.close_button:SetText("X") breakdownFrame.close_button:SetFrameLevel(breakdownFrame:GetFrameLevel()+5) breakdownFrame.close_button:SetScript("OnClick", function(self) Details:CloseBreakdownWindow() end) --�cone da magia selecionada para mais detalhes (is this a window thing or tab thing?) --or this is even in use? --title DetailsFramework:NewLabel(breakdownFrame, breakdownFrame, nil, "title_string", Loc ["STRING_PLAYER_DETAILS"] .. " (|cFFFF8811Under Maintenance|r)", "GameFontHighlightLeft", 12, {227/255, 186/255, 4/255}) breakdownFrame.title_string:SetPoint("center", breakdownFrame, "center") breakdownFrame.title_string:SetPoint("top", breakdownFrame, "top", 0, -18) breakdownFrame.topright_text1 = breakdownFrame:CreateFontString(nil, "overlay", "GameFontNormal") breakdownFrame.topright_text1:SetPoint("bottomright", breakdownFrame, "topright", -18 - (94 * (1-1)), -36) breakdownFrame.topright_text1:SetJustifyH("right") DetailsFramework:SetFontSize(breakdownFrame.topright_text1, 10) breakdownFrame.topright_text2 = breakdownFrame:CreateFontString(nil, "overlay", "GameFontNormal") breakdownFrame.topright_text2:SetPoint("bottomright", breakdownFrame, "topright", -18 - (94 * (1-1)), -48) breakdownFrame.topright_text2:SetJustifyH("right") DetailsFramework:SetFontSize(breakdownFrame.topright_text2, 10) --what goes in the top right text? - looks like it's not in use function breakdownFrame:SetTopRightTexts(text1, text2, size, color, font) if (text1) then breakdownFrame.topright_text1:SetText(text1) else breakdownFrame.topright_text1:SetText("") end if (text2) then breakdownFrame.topright_text2:SetText(text2) else breakdownFrame.topright_text2:SetText("") end if (size and type(size) == "number") then DetailsFramework:SetFontSize(breakdownFrame.topright_text1, size) DetailsFramework:SetFontSize(breakdownFrame.topright_text2, size) end if (color) then DetailsFramework:SetFontColor(breakdownFrame.topright_text1, color) DetailsFramework:SetFontColor(breakdownFrame.topright_text2, color) end if (font) then DetailsFramework:SetFontFace (breakdownFrame.topright_text1, font) DetailsFramework:SetFontFace (breakdownFrame.topright_text2, font) end end --create the texts shown on the window breakdownWindow.CreateTexts(SWW) breakdownFrame.SetClassIcon = default_icon_change --statusbar local statusBar = CreateFrame("frame", nil, breakdownFrame, "BackdropTemplate") statusBar:SetPoint("bottomleft", breakdownFrame, "bottomleft") statusBar:SetPoint("bottomright", breakdownFrame, "bottomright") statusBar:SetHeight(PLAYER_DETAILS_STATUSBAR_HEIGHT) DetailsFramework:ApplyStandardBackdrop(statusBar) statusBar:SetAlpha(PLAYER_DETAILS_STATUSBAR_ALPHA) statusBar.Text = DetailsFramework:CreateLabel(statusBar) statusBar.Text:SetPoint("left", 2, 0) function breakdownFrame:SetStatusbarText(text, fontSize, fontColor) if (not text) then breakdownFrame:SetStatusbarText("Details! Damage Meter | Use '/details stats' for statistics", 10, "gray") return end statusBar.Text.text = text statusBar.Text.fontsize = fontSize statusBar.Text.fontcolor = fontColor end --set default text breakdownFrame:SetStatusbarText() --apply default skin --_detalhes:ApplyPDWSkin() -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --tabs ~tabs function breakdownFrame:ShowTabs() local tabsShown = 0 local secondRowIndex = 1 local breakLine = 6 --the tab it'll start the second line local tablePool = Details:GetBreakdownTabsInUse() for index = 1, #tablePool do local tab = tablePool[index] if (tab:condition(info.jogador, info.atributo, info.sub_atributo) and not tab.replaced) then --test if can show the tutorial for the comparison tab if (tab.tabname == "Compare") then --_detalhes:SetTutorialCVar ("DETAILS_INFO_TUTORIAL1", false) if (not _detalhes:GetTutorialCVar("DETAILS_INFO_TUTORIAL1")) then _detalhes:SetTutorialCVar ("DETAILS_INFO_TUTORIAL1", true) local alert = CreateFrame("frame", "DetailsInfoPopUp1", info, "DetailsHelpBoxTemplate") alert.ArrowUP:Show() alert.ArrowGlowUP:Show() alert.Text:SetText(Loc ["STRING_INFO_TUTORIAL_COMPARISON1"]) alert:SetPoint("bottom", tab.widget or tab, "top", 5, 28) alert:Show() end end tab:Show() tabsShown = tabsShown + 1 tab:ClearAllPoints() --get the button width local buttonTemplate = gump:GetTemplate("button", "DETAILS_TAB_BUTTON_TEMPLATE") local buttonWidth = buttonTemplate.width + 1 --pixelutil might not be compatible with classic wow if (PixelUtil) then PixelUtil.SetSize(tab, buttonTemplate.width, buttonTemplate.height) if (tabsShown >= breakLine) then --next row of icons PixelUtil.SetPoint(tab, "bottomright", info, "topright", -514 + (buttonWidth * (secondRowIndex)), -50) secondRowIndex = secondRowIndex + 1 else PixelUtil.SetPoint(tab, "bottomright", info, "topright", -514 + (buttonWidth * tabsShown), -72) end else tab:SetSize(buttonTemplate.width, buttonTemplate.height) if (tabsShown >= breakLine) then --next row of icons tab:SetPoint("bottomright", info, "topright", -514 + (buttonWidth * (secondRowIndex)), -50) secondRowIndex = secondRowIndex + 1 else tab:SetPoint("bottomright", info, "topright", -514 + (buttonWidth * tabsShown), -72) end end tab:SetAlpha(0.8) else tab.frame:Hide() tab:Hide() end end if (tabsShown < 2) then tablePool[1]:SetPoint("BOTTOMLEFT", info.container_barras, "TOPLEFT", 490 - (94 * (1-0)), 1) end --selected by default tablePool[1]:Click() end breakdownFrame:SetScript("OnHide", function(self) _detalhes:FechaJanelaInfo() for _, tab in ipairs(_detalhes.player_details_tabs) do tab:Hide() tab.frame:Hide() end end) breakdownFrame.tipo = 1 --tipo da janela // 1 = janela normal return breakdownFrame end info.selectedTab = "Summary" function _detalhes:CreatePlayerDetailsTab(tabName, locName, conditionFunc, fillFunc, tabOnClickFunc, onCreateFunc, iconSettings, replace, bIsDefaultTab) --~tab if (not tabName) then tabName = "unnamed" end --create a button for the tab --tabOnClickFunc local newTabButton = gump:CreateButton(info, function()end, 20, 20, nil, nil, nil, nil, nil, breakdownWindow:GetName() .. "TabButton" .. tabName .. math.random(1, 1000)) newTabButton:SetTemplate("DETAILS_TAB_BUTTON_TEMPLATE") if (tabName == "Summary") then newTabButton:SetTemplate("DETAILS_TAB_BUTTONSELECTED_TEMPLATE") end newTabButton.IsDefaultTab = bIsDefaultTab newTabButton:SetText(locName) newTabButton:SetFrameStrata("HIGH") newTabButton:SetFrameLevel(info:GetFrameLevel()+1) newTabButton:Hide() newTabButton.condition = conditionFunc newTabButton.tabname = tabName newTabButton.localized_name = locName newTabButton.onclick = tabOnClickFunc newTabButton.fillfunction = fillFunc newTabButton.last_actor = {} ---@type tabframe local tabFrame = CreateFrame("frame", breakdownWindow:GetName() .. "TabFrame" .. tabName .. math.random(1, 1000), UIParent, "BackdropTemplate") DetailsFramework:ApplyStandardBackdrop(tabFrame) newTabButton.tabFrame = tabFrame newTabButton.frame = tabFrame tabFrame:SetParent(info) tabFrame:SetFrameStrata("HIGH") tabFrame:SetFrameLevel(info:GetFrameLevel()+5) tabFrame:EnableMouse(true) tabFrame:SetPoint("topleft", breakdownWindow, "topleft", 0, -70) tabFrame:SetPoint("bottomright", breakdownWindow, "bottomright", 0, 20) tabFrame:Hide() if (iconSettings) then local texture = iconSettings.texture local coords = iconSettings.coords local width = iconSettings.width local height = iconSettings.height local overlay, textdistance, leftpadding, textheight, short_method --nil newTabButton:SetIcon (texture, width, height, "overlay", coords, overlay, textdistance, leftpadding, textheight, short_method) if (iconSettings.desaturated) then newTabButton.icon:SetDesaturated(true) end end if (newTabButton.fillfunction) then tabFrame:SetScript("OnShow", function() if (newTabButton.last_actor == info.jogador) then return end newTabButton.last_actor = info.jogador newTabButton:fillfunction(info.jogador, info.instancia.showing) end) end if (onCreateFunc) then onCreateFunc(newTabButton, tabFrame) end newTabButton.replaces = replace _detalhes.player_details_tabs[#_detalhes.player_details_tabs+1] = newTabButton local onTabClickCallback = function(self) self = self.MyObject or self for _, tab in ipairs(Details:GetBreakdownTabsInUse()) do tab.frame:Hide() tab:SetTemplate("DETAILS_TAB_BUTTON_TEMPLATE") end self:SetTemplate("DETAILS_TAB_BUTTONSELECTED_TEMPLATE") info.selectedTab = self.tabname end if (not tabOnClickFunc) then newTabButton.OnShowFunc = function(self) --hide all tab frames, reset the template on all tabs --then set the template on this tab and set as selected tab onTabClickCallback(self) --show the tab frame tabFrame:Show() end newTabButton:SetScript("OnClick", newTabButton.OnShowFunc) else --custom newTabButton.OnShowFunc = function(self) --hide all tab frames, reset the template on all tabs --then set the template on this tab and set as selected tab onTabClickCallback(self) --run onclick func local result, errorText = pcall(tabOnClickFunc, newTabButton, tabFrame) if (not result) then print("error on running tabOnClick function:", errorText) end end newTabButton:SetScript("OnClick", newTabButton.OnShowFunc) end function newTabButton:DoClick() self:GetScript("OnClick")(self) end newTabButton:SetScript("PostClick", function(self) CurrentTab = self.tabname or self.MyObject.tabname if (CurrentTab ~= "Summary") then for _, widget in ipairs(SummaryWidgets) do widget:Hide() end else for _, widget in ipairs(SummaryWidgets) do widget:Show() end end end) return newTabButton, tabFrame end