Added support for Tab replacement on the breakdown window

This commit is contained in:
Tercio Jose
2021-11-10 11:47:02 -03:00
parent 8539e3b3ab
commit 7adae64a15
5 changed files with 128 additions and 36 deletions
+108 -30
View File
@@ -58,10 +58,27 @@ local spellInfoSettings = {
amount = 6,
}
_detalhes.player_details_tabs = {}
info.currentTabsInUse = {}
------------------------------------------------------------------------------------------------------------------------------
--self = instancia
--jogador = classe_damage ou classe_heal
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
@@ -214,13 +231,13 @@ function _detalhes:AbreJanelaInfo (jogador, from_att_change, refresh, ShiftKeyDo
gump:HidaAllDetalheInfo()
gump:JI_AtualizaContainerBarras (-1)
local classe = jogador.classe
if (not classe) then
classe = "monster"
end
--info.classe_icone:SetTexture ("Interface\\AddOns\\Details\\images\\"..classe:lower()) --> top left
info.classe_icone:SetTexture ("Interface\\AddOns\\Details\\images\\classes") --> top left
info.SetClassIcon (jogador, classe)
@@ -240,27 +257,88 @@ function _detalhes:AbreJanelaInfo (jogador, from_att_change, refresh, ShiftKeyDo
end
end
end
info:ShowTabs()
Details.FadeHandler.Fader (info, 0)
--info:ShowTabs()
Details.FadeHandler.Fader(info, 0)
Details:UpdateBreakdownPlayerList()
--check which tab was selected and reopen that tab
-- if (info.selectedTab == "Summary") then
-- return jogador:MontaInfo()
-- else
--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]
if (tab:condition (info.jogador, info.atributo, info.sub_atributo)) then
if (tab.tabname == info.selectedTab) then
--_detalhes.player_details_tabs [index]:Click()
--_detalhes.player_details_tabs [index].onclick()
_detalhes.player_details_tabs [index]:OnShowFunc()
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()
local shownTab
for index = 1, #tabsShown do
local tab = tabsShown[index]
if (tab:condition(info.jogador, info.atributo, info.sub_atributo)) then
if (info.selectedTab == tab.tabname) then
tabsShown[index]:Click()
tabsShown[index]:OnShowFunc()
shownTab = tabsShown[index]
end
end
end
shownTab:Click()
end
-- for beta todo: info background need a major rewrite
@@ -1861,7 +1939,7 @@ function gump:CriaJanelaInfo()
end,
nil, --[4] fill function
function() --[5] onclick
for _, tab in _ipairs (_detalhes.player_details_tabs) do
for _, tab in _ipairs (Details:GetBreakdownTabsInUse()) do
tab.frame:Hide()
end
end,
@@ -4874,12 +4952,12 @@ function gump:CriaJanelaInfo()
local secondRowIndex = 1
local breakLine = 6 --th tab it'll start the second line
for index = 1, #_detalhes.player_details_tabs do
local tab = _detalhes.player_details_tabs [index]
if (tab:condition (info.jogador, info.atributo, info.sub_atributo)) then
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)
@@ -4931,14 +5009,14 @@ function gump:CriaJanelaInfo()
end
if (tabsShown < 2) then
_detalhes.player_details_tabs[1]:SetPoint ("BOTTOMLEFT", info.container_barras, "TOPLEFT", 490 - (94 * (1-0)), 1)
tablePool[1]:SetPoint ("BOTTOMLEFT", info.container_barras, "TOPLEFT", 490 - (94 * (1-0)), 1)
end
--selected by default
_detalhes.player_details_tabs[1]:Click()
tablePool[1]:Click()
end
este_gump:SetScript ("OnHide", function (self)
este_gump:SetScript ("OnHide", function(self)
_detalhes:FechaJanelaInfo()
for _, tab in _ipairs (_detalhes.player_details_tabs) do
tab:Hide()
@@ -4955,15 +5033,13 @@ end
info.selectedTab = "Summary"
_detalhes.player_details_tabs = {}
function _detalhes:CreatePlayerDetailsTab (tabname, localized_name, condition, fillfunction, onclick, oncreate, iconSettings)
function _detalhes:CreatePlayerDetailsTab (tabname, localized_name, condition, fillfunction, onclick, oncreate, iconSettings, replace)
if (not tabname) then
tabname = "unnamed"
end
--create a button for the tab
local newTabButton = gump:CreateButton (info, onclick, 20, 20)
local newTabButton = gump:CreateButton (info, onclick, 20, 20, nil, nil, nil, nil, nil, "DetailsPlayerBreakdownWindowTab" .. tabname)
newTabButton:SetTemplate ("DETAILS_TAB_BUTTON_TEMPLATE")
if (tabname == "Summary") then
newTabButton:SetTemplate ("DETAILS_TAB_BUTTONSELECTED_TEMPLATE")
@@ -4985,7 +5061,7 @@ function _detalhes:CreatePlayerDetailsTab (tabname, localized_name, condition, f
newTabButton.frame:SetFrameStrata ("HIGH")
newTabButton.frame:SetFrameLevel (info:GetFrameLevel()+5)
newTabButton.frame:EnableMouse (true)
if (iconSettings) then
local texture = iconSettings.texture
local coords = iconSettings.coords
@@ -5032,6 +5108,7 @@ function _detalhes:CreatePlayerDetailsTab (tabname, localized_name, condition, f
newTabButton.frame:Hide()
newTabButton.replaces = replace
_detalhes.player_details_tabs [#_detalhes.player_details_tabs+1] = newTabButton
if (not onclick) then
@@ -5039,7 +5116,7 @@ function _detalhes:CreatePlayerDetailsTab (tabname, localized_name, condition, f
newTabButton.OnShowFunc = function (self)
self = self.MyObject or self
for _, tab in _ipairs (_detalhes.player_details_tabs) do
for _, tab in _ipairs (Details:GetBreakdownTabsInUse()) do
tab.frame:Hide()
tab:SetTemplate ("DETAILS_TAB_BUTTON_TEMPLATE")
end
@@ -5055,7 +5132,7 @@ function _detalhes:CreatePlayerDetailsTab (tabname, localized_name, condition, f
newTabButton.OnShowFunc = function (self)
self = self.MyObject or self
for _, tab in _ipairs (_detalhes.player_details_tabs) do
for _, tab in _ipairs (Details:GetBreakdownTabsInUse()) do
tab.frame:Hide()
tab:SetTemplate ("DETAILS_TAB_BUTTON_TEMPLATE")
end
@@ -5088,6 +5165,7 @@ function _detalhes:CreatePlayerDetailsTab (tabname, localized_name, condition, f
end
end)
return newTabButton, newTabButton.frame
end
function _detalhes.playerDetailWindow:monta_relatorio (botao)