d5bfd1cd62
Fixes the position of the attribute menu overlapping the buttons when the direction is changed because too close to the edge of the screen
9553 lines
324 KiB
Lua
9553 lines
324 KiB
Lua
|
|
--note: this file need a major clean up especially on function creation.
|
|
|
|
local _detalhes = _G._detalhes
|
|
local Loc = LibStub ("AceLocale-3.0"):GetLocale ( "Details" )
|
|
local _
|
|
local gump = _detalhes.gump
|
|
local SharedMedia = LibStub:GetLibrary ("LibSharedMedia-3.0")
|
|
|
|
local segmentos = _detalhes.segmentos
|
|
|
|
--lua locals
|
|
local _math_ceil = math.ceil
|
|
local _math_floor = math.floor
|
|
local _math_max = math.max
|
|
local _ipairs = ipairs
|
|
local _pairs = pairs
|
|
local abs = _G.abs
|
|
local _unpack = unpack
|
|
--api locals
|
|
local CreateFrame = CreateFrame
|
|
local _GetTime = GetTime
|
|
local _GetCursorPosition = GetCursorPosition
|
|
local _UIParent = UIParent
|
|
local _IsAltKeyDown = IsAltKeyDown
|
|
local _IsShiftKeyDown = IsShiftKeyDown
|
|
local _IsControlKeyDown = IsControlKeyDown
|
|
local modo_raid = _detalhes._detalhes_props["MODO_RAID"]
|
|
local modo_alone = _detalhes._detalhes_props["MODO_ALONE"]
|
|
local IsInInstance = _G.IsInInstance
|
|
|
|
local tok_functions = _detalhes.ToKFunctions
|
|
|
|
--constants
|
|
local baseframe_strata = "LOW"
|
|
local gump_fundo_backdrop = {
|
|
bgFile = [[Interface\AddOns\Details\images\background]], tile = true, tileSize = 16,
|
|
insets = {left = 0, right = 0, top = 0, bottom = 0}}
|
|
|
|
function _detalhes:ScheduleUpdate (instancia)
|
|
instancia.barraS = {nil, nil}
|
|
instancia.update = true
|
|
if (instancia.showing) then
|
|
instancia.atributo = instancia.atributo or 1
|
|
|
|
if (not instancia.showing [instancia.atributo]) then --> unknow very rare bug where showing transforms into a clean table
|
|
instancia.showing = _detalhes.tabela_vigente
|
|
end
|
|
|
|
instancia.showing [instancia.atributo].need_refresh = true
|
|
end
|
|
end
|
|
|
|
--> skins TCoords
|
|
local DEFAULT_SKIN = [[Interface\AddOns\Details\images\skins\classic_skin]]
|
|
local COORDS_LEFT_BALL = {0.15625, 0.2802734375, 0.08203125, 0.2060546875} -- 160 287 84 211
|
|
local COORDS_LEFT_CONNECTOR = {0.294921875, 0.3017578125, 0.08203125, 0.2060546875} --302 84 309 211 (updated)
|
|
local COORDS_LEFT_CONNECTOR_NO_ICON = {0.587890625+0.00048828125, 0.5947265625, 0.08203125, 0.2060546875} -- 602 609 x 84 211
|
|
local COORDS_TOP_BACKGROUND = {0.15625, 0.6552734375, 0.22265625, 0.3466796875} -- 160 671 x 228 355
|
|
local COORDS_RIGHT_BALL = {0.3154296875, 0.439453125, 0.08203125, 0.2060546875} -- 323 450 x 84 211
|
|
local COORDS_LEFT_BALL_NO_ICON = {0.44921875, 0.5732421875, 0.08203125, 0.2060546875} -- 460 587 84 211
|
|
local COORDS_LEFT_SIDE_BAR = {0.765625, 0.828125, 0.001953125, 0.501953125} -- 784 2 848 514 (updated)
|
|
local COORDS_RIGHT_SIDE_BAR = {0.7001953125, 0.7626953125, 0.001953125, 0.501953125} -- --717 2 781 513
|
|
local COORDS_BOTTOM_SIDE_BAR = {0.32861328125, 0.82666015625, 0.50537109375, 0.56494140625} -- 336 517 847 579 (updated)
|
|
local COORDS_SLIDER_TOP = {0.00146484375, 0.03076171875, 0.00244140625, 0.03173828125} -- 1 2 32 33 -ok
|
|
local COORDS_SLIDER_MIDDLE = {0.00146484375, 0.03076171875, 0.03955078125, 0.10009765625} -- 1 40 32 103 -ok
|
|
local COORDS_SLIDER_DOWN = {0.00146484375, 0.03076171875, 0.10986328125, 0.13916015625} -- 1 112 32 143 -ok
|
|
local COORDS_STRETCH = {0.0009765625, 0.03125, 0.2138671875, 0.228515625} -- 1 32 219 234
|
|
local COORDS_RESIZE_RIGHT = {0.00146484375, 0.01513671875, 0.24560546875, 0.25927734375} -- 1 251 16 266 -ok
|
|
local COORDS_RESIZE_LEFT = {0.02001953125, 0.03173828125, 0.24560546875, 0.25927734375} -- 20 251 33 266 -ok
|
|
local COORDS_UNLOCK_BUTTON = {0.00146484375, 0.01513671875, 0.27197265625, 0.28564453125} -- 1 278 16 293 -ok
|
|
local COORDS_BOTTOM_BACKGROUND = {0.15673828125, 0.65478515625, 0.35400390625, 0.47705078125} -- 160 362 671 489 -ok
|
|
local COORDS_PIN_LEFT = {0.00146484375, 0.03076171875, 0.30126953125, 0.33056640625} -- 1 308 32 339 -ok
|
|
local COORDS_PIN_RIGHT = {0.03564453125, 0.06494140625, 0.30126953125, 0.33056640625} -- 36 308 67 339 -ok
|
|
|
|
local menus_backdrop = {
|
|
edgeFile = [[Interface\Buttons\WHITE8X8]],
|
|
edgeSize=1,
|
|
bgFile = [[Interface\AddOns\Details\images\background]],
|
|
tileSize=16,
|
|
tile=true,
|
|
insets = {top=0, right=0, left=0, bottom=0}
|
|
}
|
|
local menus_backdropcolor = {.2, .2, .2, 0.85}
|
|
local menus_backdropcolor_sec = {.2, .2, .2, 0.90}
|
|
local menus_bordercolor = {0, 0, 0, .25}
|
|
|
|
--menus are ignoring the value set on the profile
|
|
_detalhes.menu_backdrop_config = {
|
|
menus_backdrop = menus_backdrop,
|
|
menus_backdropcolor = menus_backdropcolor,
|
|
menus_backdropcolor_sec = menus_backdropcolor_sec,
|
|
menus_bordercolor = menus_bordercolor,
|
|
}
|
|
|
|
|
|
function _detalhes:RefreshScrollBar(x) --> x = quantas barras esta sendo mostrado
|
|
|
|
local cabe = self.rows_fit_in_window --> quantas barras cabem na janela
|
|
|
|
if (not self.barraS[1]) then --primeira vez que as barras est�o aparecendo
|
|
self.barraS[1] = 1 --primeira barra
|
|
if (cabe < x) then --se a quantidade a ser mostrada for maior que o que pode ser mostrado
|
|
self.barraS[2] = cabe -- B = o que pode ser mostrado
|
|
else
|
|
self.barraS[2] = x -- contr�rio B = o que esta sendo mostrado
|
|
end
|
|
end
|
|
|
|
if (not self.rolagem) then
|
|
if (x > cabe) then --> Ligar a ScrollBar
|
|
self.rows_showing = x
|
|
|
|
if (not self.baseframe.isStretching) then
|
|
self:MostrarScrollBar()
|
|
end
|
|
self.need_rolagem = true
|
|
|
|
self.barraS[2] = cabe --> B � o total que cabe na barra
|
|
else --> Do contr�rio B � o total de barras
|
|
self.rows_showing = x
|
|
self.barraS[2] = x
|
|
end
|
|
else
|
|
if (x > self.rows_showing) then --> tem mais barras mostrando agora do que na �ltima atualiza��o
|
|
self.rows_showing = x
|
|
local nao_mostradas = self.rows_showing - self.rows_fit_in_window
|
|
local slider_height = nao_mostradas*self.row_height
|
|
self.scroll.scrollMax = slider_height
|
|
self.scroll:SetMinMaxValues(0, slider_height)
|
|
|
|
else --> diminuiu a quantidade, acontece depois de uma coleta de lixo
|
|
self.rows_showing = x
|
|
local nao_mostradas = self.rows_showing - self.rows_fit_in_window
|
|
|
|
if (nao_mostradas < 1) then --> se estiver mostrando menos do que realmente cabe n�o precisa scrollbar
|
|
self:EsconderScrollBar()
|
|
else
|
|
--> contr�rio, basta atualizar o tamanho da scroll
|
|
local slider_height = nao_mostradas*self.row_height
|
|
self.scroll.scrollMax = slider_height
|
|
self.scroll:SetMinMaxValues (0, slider_height)
|
|
end
|
|
end
|
|
end
|
|
|
|
if (self.update) then
|
|
self.update = false
|
|
self.v_barras = true
|
|
return _detalhes:EsconderBarrasNaoUsadas (self)
|
|
end
|
|
end
|
|
|
|
--> self é a janela das barras
|
|
local function move_barras (self, elapsed)
|
|
self._move_func.time = self._move_func.time+elapsed
|
|
if (self._move_func.time > 0.01) then
|
|
|
|
if (self._move_func.instancia.bgdisplay_loc == self._move_func._end) then --> se o tamanho atual � igual ao final declarado
|
|
self:SetScript ("OnUpdate", nil)
|
|
self._move_func = nil
|
|
|
|
else
|
|
self._move_func.time = 0
|
|
self._move_func.instancia.bgdisplay_loc = self._move_func.instancia.bgdisplay_loc + self._move_func.inc --> inc � -1 ou 1 e ir� crescer ou diminuir a janela
|
|
|
|
for index = 1, self._move_func.instancia.rows_fit_in_window do
|
|
self._move_func.instancia.barras [index]:SetWidth (self:GetWidth()+self._move_func.instancia.bgdisplay_loc-3)
|
|
end
|
|
|
|
self._move_func.instancia.bgdisplay:SetPoint ("bottomright", self, "bottomright", self._move_func.instancia.bgdisplay_loc, 0)
|
|
self._move_func.instancia.bar_mod = self._move_func.instancia.bgdisplay_loc+(-3)
|
|
|
|
--> verifica o tamanho do text
|
|
for i = 1, #self._move_func.instancia.barras do
|
|
local esta_barra = self._move_func.instancia.barras [i]
|
|
_detalhes:name_space (esta_barra)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--> self � a inst�ncia
|
|
function _detalhes:MoveBarrasTo (destino)
|
|
local janela = self.baseframe
|
|
|
|
janela._move_func = {
|
|
window = self.baseframe,
|
|
instancia = self,
|
|
time = 0
|
|
}
|
|
|
|
if (destino > self.bgdisplay_loc) then
|
|
janela._move_func.inc = 1
|
|
else
|
|
janela._move_func.inc = -1
|
|
end
|
|
janela._move_func._end = destino
|
|
janela:SetScript ("OnUpdate", move_barras)
|
|
end
|
|
|
|
--almost deprecated
|
|
function _detalhes:MostrarScrollBar (sem_animacao)
|
|
|
|
if (self.rolagem) then
|
|
return
|
|
end
|
|
|
|
if (not _detalhes.use_scroll) then
|
|
self.baseframe:EnableMouseWheel (true)
|
|
self.scroll:Enable()
|
|
self.scroll:SetValue (0)
|
|
self.rolagem = true
|
|
return
|
|
end
|
|
|
|
local main = self.baseframe
|
|
local mover_para = self.largura_scroll*-1
|
|
|
|
if (not sem_animacao and _detalhes.animate_scroll) then
|
|
self:MoveBarrasTo (mover_para)
|
|
else
|
|
--> set size of rows
|
|
for index = 1, self.rows_fit_in_window do
|
|
self.barras[index]:SetWidth (self.baseframe:GetWidth()+mover_para -3) --> -3 distance between row end and scroll start
|
|
end
|
|
--> move the semi-background to the left (which moves the scroll)
|
|
self.bgdisplay:SetPoint ("bottomright", self.baseframe, "bottomright", mover_para, 0)
|
|
|
|
self.bar_mod = mover_para + (-3)
|
|
self.bgdisplay_loc = mover_para
|
|
|
|
--> cancel movement if any
|
|
if (self.baseframe:GetScript ("OnUpdate") and self.baseframe:GetScript ("OnUpdate") == move_barras) then
|
|
self.baseframe:SetScript ("OnUpdate", nil)
|
|
end
|
|
end
|
|
|
|
local nao_mostradas = self.rows_showing - self.rows_fit_in_window
|
|
local slider_height = nao_mostradas*self.row_height
|
|
self.scroll.scrollMax = slider_height
|
|
self.scroll:SetMinMaxValues (0, slider_height)
|
|
|
|
self.rolagem = true
|
|
self.scroll:Enable()
|
|
main:EnableMouseWheel (true)
|
|
|
|
self.scroll:SetValue (0) --> set value pode chamar o atualizador
|
|
self.baseframe.button_down:Enable()
|
|
main.resize_direita:SetPoint ("bottomright", main, "bottomright", self.largura_scroll*-1, 0)
|
|
|
|
if (main.isLocked) then
|
|
main.lock_button:SetPoint ("bottomright", main, "bottomright", self.largura_scroll*-1, 0)
|
|
end
|
|
|
|
end
|
|
|
|
--almost deprecated
|
|
function _detalhes:EsconderScrollBar (sem_animacao, force)
|
|
|
|
if (not self.rolagem) then
|
|
return
|
|
end
|
|
|
|
if (not _detalhes.use_scroll and not force) then
|
|
self.scroll:Disable()
|
|
self.baseframe:EnableMouseWheel (false)
|
|
self.rolagem = false
|
|
return
|
|
end
|
|
|
|
local main = self.baseframe
|
|
|
|
if (not sem_animacao and _detalhes.animate_scroll) then
|
|
self:MoveBarrasTo (self.row_info.space.right + 3) -->
|
|
else
|
|
for index = 1, self.rows_fit_in_window do
|
|
self.barras [index]:SetWidth (self.baseframe:GetWidth() - 5) --> -5 space between row end and window right border
|
|
end
|
|
self.bgdisplay:SetPoint ("bottomright", self.baseframe, "bottomright", 0, 0) -- voltar o background na poci��o inicial
|
|
self.bar_mod = 0 -- zera o bar mod, uma vez que as barras v�o estar na pocis�o inicial
|
|
self.bgdisplay_loc = -2
|
|
if (self.baseframe:GetScript ("OnUpdate") and self.baseframe:GetScript ("OnUpdate") == move_barras) then
|
|
self.baseframe:SetScript ("OnUpdate", nil)
|
|
end
|
|
end
|
|
|
|
self.rolagem = false
|
|
self.scroll:Disable()
|
|
main:EnableMouseWheel (false)
|
|
|
|
main.resize_direita:SetPoint ("bottomright", main, "bottomright", 0, 0)
|
|
if (main.isLocked) then
|
|
main.lock_button:SetPoint ("bottomright", main, "bottomright", 0, 0)
|
|
end
|
|
end
|
|
|
|
local function OnLeaveMainWindow (instancia, self)
|
|
|
|
instancia.is_interacting = false
|
|
instancia:SetMenuAlpha (nil, nil, nil, nil, true)
|
|
instancia:SetAutoHideMenu (nil, nil, true)
|
|
instancia:RefreshAttributeTextSize()
|
|
|
|
if (instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and not instancia.baseframe.isLocked) then
|
|
|
|
--> resizes, lock and ungroup buttons
|
|
if (not _detalhes.disable_lock_ungroup_buttons) then
|
|
instancia.baseframe.resize_direita:SetAlpha (0)
|
|
instancia.baseframe.resize_esquerda:SetAlpha (0)
|
|
instancia.baseframe.lock_button:SetAlpha (0)
|
|
instancia.break_snap_button:SetAlpha (0)
|
|
end
|
|
|
|
--> stretch button
|
|
Details.FadeHandler.Fader (instancia.baseframe.button_stretch, "ALPHA", 0)
|
|
|
|
elseif (instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and instancia.baseframe.isLocked) then
|
|
|
|
--> resizes, lock and ungroup buttons
|
|
if (not _detalhes.disable_lock_ungroup_buttons) then
|
|
instancia.baseframe.lock_button:SetAlpha (0)
|
|
instancia.break_snap_button:SetAlpha (0)
|
|
end
|
|
|
|
Details.FadeHandler.Fader (instancia.baseframe.button_stretch, "ALPHA", 0)
|
|
|
|
end
|
|
end
|
|
_detalhes.OnLeaveMainWindow = OnLeaveMainWindow
|
|
|
|
local function OnEnterMainWindow (instancia, self)
|
|
instancia.is_interacting = true
|
|
instancia:SetMenuAlpha (nil, nil, nil, nil, true)
|
|
instancia:SetAutoHideMenu (nil, nil, true)
|
|
instancia:RefreshAttributeTextSize()
|
|
|
|
if (not instancia.last_interaction or instancia.last_interaction < _detalhes._tempo) then
|
|
instancia.last_interaction = _detalhes._tempo or time()
|
|
end
|
|
|
|
if (instancia.baseframe:GetFrameLevel() > instancia.rowframe:GetFrameLevel()) then
|
|
instancia.rowframe:SetFrameLevel (instancia.baseframe:GetFrameLevel())
|
|
end
|
|
|
|
if (instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and not instancia.baseframe.isLocked) then
|
|
|
|
--> resize, lock and ungroup buttons
|
|
if (not _detalhes.disable_lock_ungroup_buttons) then
|
|
instancia.baseframe.resize_direita:SetAlpha (1)
|
|
instancia.baseframe.resize_esquerda:SetAlpha (1)
|
|
instancia.baseframe.lock_button:SetAlpha (1)
|
|
|
|
--> ungroup
|
|
for _, instancia_id in _pairs (instancia.snap) do
|
|
if (instancia_id) then
|
|
instancia.break_snap_button:SetAlpha (1)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
--> stretch button
|
|
if (not _detalhes.disable_stretch_button) then
|
|
Details.FadeHandler.Fader (instancia.baseframe.button_stretch, "ALPHA", 0.4)
|
|
end
|
|
|
|
elseif (instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and instancia.baseframe.isLocked) then
|
|
|
|
if (not _detalhes.disable_lock_ungroup_buttons) then
|
|
instancia.baseframe.lock_button:SetAlpha (1)
|
|
|
|
--> ungroup
|
|
for _, instancia_id in _pairs (instancia.snap) do
|
|
if (instancia_id) then
|
|
instancia.break_snap_button:Show()
|
|
instancia.break_snap_button:SetAlpha (1)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
if (not _detalhes.disable_stretch_button) then
|
|
Details.FadeHandler.Fader (instancia.baseframe.button_stretch, "ALPHA", 0.4)
|
|
end
|
|
end
|
|
end
|
|
_detalhes.OnEnterMainWindow = OnEnterMainWindow
|
|
|
|
local function VPL (instancia, esta_instancia)
|
|
--> conferir esquerda
|
|
if (instancia.ponto4.x-0.5 < esta_instancia.ponto1.x) then --> a janela esta a esquerda
|
|
if (instancia.ponto4.x+20 > esta_instancia.ponto1.x) then --> a janela esta a menos de 20 pixels de dist�ncia
|
|
if (instancia.ponto4.y < esta_instancia.ponto1.y + 100 and instancia.ponto4.y > esta_instancia.ponto1.y - 100) then --> a janela esta a +20 ou -20 pixels de dist�ncia na vertical
|
|
return 1
|
|
end
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
local function VPB (instancia, esta_instancia)
|
|
--> conferir baixo
|
|
if (instancia.ponto1.y+(20 * instancia.window_scale) < esta_instancia.ponto2.y - (16 * esta_instancia.window_scale)) then --> a janela esta em baixo
|
|
if (instancia.ponto1.x > esta_instancia.ponto2.x-100 and instancia.ponto1.x < esta_instancia.ponto2.x+100) then --> a janela esta a 20 pixels de dist�ncia para a esquerda ou para a direita
|
|
if (instancia.ponto1.y+(20 * instancia.window_scale) > esta_instancia.ponto2.y - (36 * esta_instancia.window_scale)) then --> esta a 20 pixels de dist�ncia
|
|
return 2
|
|
end
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
local function VPR (instancia, esta_instancia)
|
|
--> conferir lateral direita
|
|
if (instancia.ponto2.x+0.5 > esta_instancia.ponto3.x) then --> a janela esta a direita
|
|
if (instancia.ponto2.x-20 < esta_instancia.ponto3.x) then --> a janela esta a menos de 20 pixels de dist�ncia
|
|
if (instancia.ponto2.y < esta_instancia.ponto3.y + 100 and instancia.ponto2.y > esta_instancia.ponto3.y - 100) then --> a janela esta a +20 ou -20 pixels de dist�ncia na vertical
|
|
return 3
|
|
end
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
local function VPT (instancia, esta_instancia)
|
|
--> conferir cima
|
|
if (instancia.ponto3.y - (16 * instancia.window_scale) > esta_instancia.ponto4.y + (20 * esta_instancia.window_scale)) then --> a janela esta em cima
|
|
if (instancia.ponto3.x > esta_instancia.ponto4.x-100 and instancia.ponto3.x < esta_instancia.ponto4.x+100) then --> a janela esta a 20 pixels de dist�ncia para a esquerda ou para a direita
|
|
if (esta_instancia.ponto4.y+(40 * esta_instancia.window_scale) > instancia.ponto3.y - (16 * instancia.window_scale)) then
|
|
return 4
|
|
end
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
_detalhes.VPT, _detalhes.VPR, _detalhes.VPB, _detalhes.VPL = VPT, VPR, VPB, VPL
|
|
|
|
local color_red = {1, 0.2, 0.2}
|
|
local color_green = {0.2, 1, 0.2}
|
|
local pixels_per_arrow = 50
|
|
|
|
local show_instance_ids = function()
|
|
|
|
for id, instance in _detalhes:ListInstances() do
|
|
if (instance:IsEnabled()) then
|
|
local id_texture1 = instance.baseframe.id_texture1
|
|
if (not id_texture1) then
|
|
--instancia.
|
|
instance.baseframe.id_texture1 = instance.floatingframe:CreateTexture (nil, "overlay")
|
|
instance.baseframe.id_texture2 = instance.floatingframe:CreateTexture (nil, "overlay")
|
|
instance.baseframe.id_texture1:SetTexture ([[Interface\Timer\BigTimerNumbers]])
|
|
instance.baseframe.id_texture2:SetTexture ([[Interface\Timer\BigTimerNumbers]])
|
|
end
|
|
|
|
local h = instance.baseframe:GetHeight() * 0.80
|
|
instance.baseframe.id_texture1:SetSize (h, h)
|
|
instance.baseframe.id_texture2:SetSize (h, h)
|
|
|
|
local id = instance:GetId()
|
|
|
|
local first, second = _math_floor (id/10), _math_floor (id%10)
|
|
|
|
if (id >= 10) then
|
|
instance.baseframe.id_texture1:SetPoint ("center", instance.baseframe, "center", -h/2/2, 0)
|
|
instance.baseframe.id_texture2:SetPoint ("left", instance.baseframe.id_texture1, "right", -h/2, 0)
|
|
|
|
first = first + 1
|
|
local line = _math_ceil (first / 4)
|
|
local x = ( first - ( (line-1) * 4 ) ) / 4
|
|
local l, r, t, b = x-0.25, x, 0.33 * (line-1), 0.33 * line
|
|
instance.baseframe.id_texture1:SetTexCoord (l, r, t, b)
|
|
|
|
second = second + 1
|
|
local line = _math_ceil (second / 4)
|
|
local x = ( second - ( (line-1) * 4 ) ) / 4
|
|
local l, r, t, b = x-0.25, x, 0.33 * (line-1), 0.33 * line
|
|
instance.baseframe.id_texture2:SetTexCoord (l, r, t, b)
|
|
|
|
instance.baseframe.id_texture1:Show()
|
|
instance.baseframe.id_texture2:Show()
|
|
else
|
|
instance.baseframe.id_texture1:SetPoint ("center", instance.baseframe, "center")
|
|
|
|
second = second + 1
|
|
local line = _math_ceil (second / 4)
|
|
local x = ( second - ( (line-1) * 4 ) ) / 4
|
|
local l, r, t, b = x-0.25, x, 0.33 * (line-1), 0.33 * line
|
|
instance.baseframe.id_texture1:SetTexCoord (l, r, t, b)
|
|
|
|
instance.baseframe.id_texture1:Show()
|
|
instance.baseframe.id_texture2:Hide()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local update_line = function (self, target_frame)
|
|
local target_instance_PosX, target_instance_PosY = target_frame.instance:GetPositionOnScreen()
|
|
local moving_instance_PosX, moving_instance_PosY = self.instance:GetPositionOnScreen()
|
|
|
|
target_instance_PosX = target_instance_PosX or 0
|
|
target_instance_PosY = target_instance_PosY or 0
|
|
moving_instance_PosX = moving_instance_PosX or 0
|
|
moving_instance_PosY = moving_instance_PosY or 0
|
|
|
|
local dX = target_instance_PosX - moving_instance_PosX
|
|
local dY = target_instance_PosY - moving_instance_PosY
|
|
local distance = (dX^2 + dY^2) ^ 0.5
|
|
local angle = atan2(dY, dX)
|
|
|
|
local guide_balls = _detalhes.guide_balls
|
|
if (not guide_balls) then
|
|
_detalhes.guide_balls = {}
|
|
guide_balls = _detalhes.guide_balls
|
|
end
|
|
|
|
for index, ball in ipairs (guide_balls) do
|
|
ball:Hide()
|
|
end
|
|
|
|
self.instance:AtualizaPontos()
|
|
target_frame.instance:AtualizaPontos()
|
|
|
|
local color = color_red
|
|
local _R, _T, _L, _B = VPL (self.instance, target_frame.instance), VPB (self.instance, target_frame.instance), VPR (self.instance, target_frame.instance), VPT (self.instance, target_frame.instance)
|
|
if (_R or _T or _L or _B) then
|
|
color = color_green
|
|
end
|
|
|
|
for i = 0, (distance/pixels_per_arrow) do
|
|
local x = distance - (i * pixels_per_arrow)
|
|
x = x * cos(angle)
|
|
local y = distance - (i * pixels_per_arrow)
|
|
y = y * sin(angle)
|
|
|
|
local ball = guide_balls [i]
|
|
if (not ball) then
|
|
ball = _detalhes.overlay_frame:CreateTexture (nil, "Overlay")
|
|
ball:SetTexture ([[Interface\AddOns\Details\images\icons]])
|
|
ball:SetSize (16, 16)
|
|
ball:SetAlpha (0.3)
|
|
ball:SetTexCoord (410/512, 426/512, 2/512, 18/512)
|
|
tinsert (guide_balls, ball)
|
|
end
|
|
|
|
ball:ClearAllPoints()
|
|
ball:SetPoint("CENTER", self, "CENTER", x, y) --baseframse center
|
|
ball:Show()
|
|
ball:SetVertexColor (unpack (color))
|
|
end
|
|
|
|
end
|
|
|
|
local tempo_movendo, precisa_ativar, instancia_alvo, tempo_fades, nao_anexados, flash_bounce, start_draw_lines, instance_ids_shown, need_show_group_guide
|
|
|
|
local movement_onupdate = function (self, elapsed)
|
|
|
|
if (start_draw_lines and start_draw_lines > 0.95) then
|
|
update_line (self, instancia_alvo.baseframe)
|
|
elseif (start_draw_lines) then
|
|
start_draw_lines = start_draw_lines + elapsed
|
|
end
|
|
|
|
if (instance_ids_shown and instance_ids_shown > 0.95) then
|
|
show_instance_ids()
|
|
instance_ids_shown = nil
|
|
|
|
if (need_show_group_guide and not DetailsFramework.IsTimewalkWoW()) then
|
|
_detalhes.MicroButtonAlert.Text:SetText (Loc ["STRING_WINDOW1ATACH_DESC"])
|
|
_detalhes.MicroButtonAlert:SetPoint ("bottom", need_show_group_guide.baseframe, "top", 0, 30)
|
|
_detalhes.MicroButtonAlert:SetHeight (320)
|
|
_detalhes.MicroButtonAlert:Show()
|
|
|
|
need_show_group_guide = nil
|
|
end
|
|
elseif (instance_ids_shown) then
|
|
instance_ids_shown = instance_ids_shown + elapsed
|
|
end
|
|
|
|
if (tempo_movendo and tempo_movendo < 0) then
|
|
|
|
if (precisa_ativar) then --> se a inst�ncia estiver fechada
|
|
Details.FadeHandler.Fader (instancia_alvo.baseframe, "ALPHA", 0.15)
|
|
Details.FadeHandler.Fader (instancia_alvo.baseframe.cabecalho.ball, "ALPHA", 0.15)
|
|
Details.FadeHandler.Fader (instancia_alvo.baseframe.cabecalho.atributo_icon, "ALPHA", 0.15)
|
|
instancia_alvo:SaveMainWindowPosition()
|
|
instancia_alvo:RestoreMainWindowPosition()
|
|
precisa_ativar = false
|
|
|
|
elseif (tempo_fades) then
|
|
|
|
if (flash_bounce == 0) then
|
|
|
|
flash_bounce = 1
|
|
|
|
local tem_livre = false
|
|
|
|
for lado, livre in _ipairs (nao_anexados) do
|
|
if (livre) then
|
|
if (lado == 1) then
|
|
|
|
local texture = instancia_alvo.h_esquerda.texture
|
|
texture:ClearAllPoints()
|
|
|
|
if (instancia_alvo.toolbar_side == 1) then
|
|
if (instancia_alvo.show_statusbar) then
|
|
texture:SetPoint ("topright", instancia_alvo.baseframe, "topleft", 0, 20)
|
|
texture:SetPoint ("bottomright", instancia_alvo.baseframe, "bottomleft", 0, -14)
|
|
else
|
|
texture:SetPoint ("topright", instancia_alvo.baseframe, "topleft", 0, 20)
|
|
texture:SetPoint ("bottomright", instancia_alvo.baseframe, "bottomleft", 0, 0)
|
|
end
|
|
else
|
|
if (instancia_alvo.show_statusbar) then
|
|
texture:SetPoint ("topright", instancia_alvo.baseframe, "topleft", 0, 0)
|
|
texture:SetPoint ("bottomright", instancia_alvo.baseframe, "bottomleft", 0, -34)
|
|
else
|
|
texture:SetPoint ("topright", instancia_alvo.baseframe, "topleft", 0, 0)
|
|
texture:SetPoint ("bottomright", instancia_alvo.baseframe, "bottomleft", 0, -20)
|
|
end
|
|
end
|
|
|
|
instancia_alvo.h_esquerda:Flash (1, 1, 2.0, false, 0, 0)
|
|
tem_livre = true
|
|
|
|
elseif (lado == 2) then
|
|
|
|
|
|
local texture = instancia_alvo.h_baixo.texture
|
|
texture:ClearAllPoints()
|
|
|
|
if (instancia_alvo.toolbar_side == 1) then
|
|
if (instancia_alvo.show_statusbar) then
|
|
texture:SetPoint ("topleft", instancia_alvo.baseframe, "bottomleft", 0, -14)
|
|
texture:SetPoint ("topright", instancia_alvo.baseframe, "bottomright", 0, -14)
|
|
else
|
|
texture:SetPoint ("topleft", instancia_alvo.baseframe, "bottomleft", 0, 0)
|
|
texture:SetPoint ("topright", instancia_alvo.baseframe, "bottomright", 0, 0)
|
|
end
|
|
else
|
|
if (instancia_alvo.show_statusbar) then
|
|
texture:SetPoint ("topleft", instancia_alvo.baseframe, "bottomleft", 0, -34)
|
|
texture:SetPoint ("topright", instancia_alvo.baseframe, "bottomright", 0, -34)
|
|
else
|
|
texture:SetPoint ("topleft", instancia_alvo.baseframe, "bottomleft", 0, -20)
|
|
texture:SetPoint ("topright", instancia_alvo.baseframe, "bottomright", 0, -20)
|
|
end
|
|
end
|
|
|
|
instancia_alvo.h_baixo:Flash (1, 1, 2.0, false, 0, 0)
|
|
tem_livre = true
|
|
|
|
elseif (lado == 3) then
|
|
|
|
local texture = instancia_alvo.h_direita.texture
|
|
texture:ClearAllPoints()
|
|
|
|
if (instancia_alvo.toolbar_side == 1) then
|
|
if (instancia_alvo.show_statusbar) then
|
|
texture:SetPoint ("topleft", instancia_alvo.baseframe, "topright", 0, 20)
|
|
texture:SetPoint ("bottomleft", instancia_alvo.baseframe, "bottomright", 0, -14)
|
|
else
|
|
texture:SetPoint ("topleft", instancia_alvo.baseframe, "topright", 0, 20)
|
|
texture:SetPoint ("bottomleft", instancia_alvo.baseframe, "bottomright", 0, 0)
|
|
end
|
|
else
|
|
if (instancia_alvo.show_statusbar) then
|
|
texture:SetPoint ("topleft", instancia_alvo.baseframe, "topright", 0, 0)
|
|
texture:SetPoint ("bottomleft", instancia_alvo.baseframe, "bottomright", 0, -34)
|
|
else
|
|
texture:SetPoint ("topleft", instancia_alvo.baseframe, "topright", 0, 0)
|
|
texture:SetPoint ("bottomleft", instancia_alvo.baseframe, "bottomright", 0, -20)
|
|
end
|
|
end
|
|
|
|
instancia_alvo.h_direita:Flash (1, 1, 2.0, false, 0, 0)
|
|
tem_livre = true
|
|
|
|
elseif (lado == 4) then
|
|
|
|
local texture = instancia_alvo.h_cima.texture
|
|
texture:ClearAllPoints()
|
|
|
|
if (instancia_alvo.toolbar_side == 1) then
|
|
texture:SetPoint ("bottomleft", instancia_alvo.baseframe, "topleft", 0, 20)
|
|
texture:SetPoint ("bottomright", instancia_alvo.baseframe, "topright", 0, 20)
|
|
else
|
|
texture:SetPoint ("bottomleft", instancia_alvo.baseframe, "topleft", 0, 0)
|
|
texture:SetPoint ("bottomright", instancia_alvo.baseframe, "topright", 0, 0)
|
|
end
|
|
|
|
instancia_alvo.h_cima:Flash (1, 1, 2.0, false, 0, 0)
|
|
tem_livre = true
|
|
|
|
end
|
|
end
|
|
end
|
|
|
|
if (tem_livre) then
|
|
if (not _detalhes.snap_alert.playing) then
|
|
instancia_alvo:SnapAlert()
|
|
_detalhes.snap_alert.playing = true
|
|
|
|
if (not DetailsFramework.IsTimewalkWoW()) then
|
|
_detalhes.MicroButtonAlert.Text:SetText (string.format (Loc ["STRING_ATACH_DESC"], self.instance.meu_id, instancia_alvo.meu_id))
|
|
_detalhes.MicroButtonAlert:SetPoint ("bottom", instancia_alvo.baseframe.cabecalho.modo_selecao.widget, "top", 0, 18)
|
|
_detalhes.MicroButtonAlert:SetHeight (200)
|
|
_detalhes.MicroButtonAlert:Show()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
tempo_movendo = 1
|
|
else
|
|
self:SetScript ("OnUpdate", nil)
|
|
tempo_movendo = 1
|
|
end
|
|
|
|
elseif (tempo_movendo) then
|
|
tempo_movendo = tempo_movendo - elapsed
|
|
end
|
|
end
|
|
|
|
local function move_janela (baseframe, iniciando, instancia, just_updating)
|
|
|
|
instancia_alvo = _detalhes.tabela_instancias [instancia.meu_id-1]
|
|
if (_detalhes.disable_window_groups) then
|
|
instancia_alvo = nil
|
|
end
|
|
|
|
if (iniciando) then
|
|
|
|
if (baseframe.isMoving) then
|
|
--> ja esta em movimento
|
|
return
|
|
end
|
|
|
|
baseframe.isMoving = true
|
|
instancia:BaseFrameSnap()
|
|
baseframe:StartMoving()
|
|
|
|
local group = instancia:GetInstanceGroup()
|
|
for _, this_instance in _ipairs (group) do
|
|
this_instance.baseframe:SetClampRectInsets (0, 0, 0, 0)
|
|
this_instance.isMoving = true
|
|
end
|
|
|
|
local _, ClampLeft, ClampRight = instancia:InstanciasHorizontais()
|
|
local _, ClampBottom, ClampTop = instancia:InstanciasVerticais()
|
|
|
|
baseframe:SetClampRectInsets (-ClampLeft, ClampRight, ClampTop, -ClampBottom)
|
|
|
|
if (instancia_alvo and (instancia_alvo.ativa or not just_updating)) then
|
|
|
|
tempo_fades = 1.0
|
|
nao_anexados = {true, true, true, true}
|
|
tempo_movendo = 1
|
|
flash_bounce = 0
|
|
instance_ids_shown = 0
|
|
start_draw_lines = 0
|
|
need_show_group_guide = nil
|
|
|
|
for lado, snap_to in _pairs (instancia_alvo.snap) do
|
|
if (snap_to == instancia.meu_id) then
|
|
start_draw_lines = false
|
|
end
|
|
end
|
|
|
|
for lado, snap_to in _pairs (instancia_alvo.snap) do
|
|
if (snap_to) then
|
|
if (snap_to == instancia.meu_id) then
|
|
tempo_fades = nil
|
|
break
|
|
end
|
|
nao_anexados [lado] = false
|
|
end
|
|
end
|
|
|
|
for lado = 1, 4 do
|
|
if (instancia_alvo.horizontalSnap and instancia.verticalSnap) then
|
|
nao_anexados [lado] = false
|
|
elseif (instancia_alvo.horizontalSnap and lado == 2) then
|
|
nao_anexados [lado] = false
|
|
elseif (instancia_alvo.horizontalSnap and lado == 4) then
|
|
nao_anexados [lado] = false
|
|
elseif (instancia_alvo.verticalSnap and lado == 1) then
|
|
nao_anexados [lado] = false
|
|
elseif (instancia_alvo.verticalSnap and lado == 3) then
|
|
nao_anexados [lado] = false
|
|
end
|
|
end
|
|
|
|
local need_start = not instancia_alvo.iniciada
|
|
precisa_ativar = not instancia_alvo.ativa
|
|
|
|
if (need_start) then --> se a inst�ncia n�o tiver sido aberta ainda
|
|
|
|
local lower_instance = _detalhes:GetLowerInstanceNumber()
|
|
|
|
instancia_alvo:RestauraJanela (instancia_alvo.meu_id, true)
|
|
if (instancia_alvo:IsSoloMode()) then
|
|
_detalhes.SoloTables:switch()
|
|
end
|
|
|
|
instancia_alvo.ativa = false
|
|
|
|
instancia_alvo:SaveMainWindowPosition()
|
|
instancia_alvo:RestoreMainWindowPosition()
|
|
|
|
Details.FadeHandler.Fader (instancia_alvo.baseframe, 1)
|
|
Details.FadeHandler.Fader (instancia_alvo.rowframe, 1)
|
|
Details.FadeHandler.Fader (instancia_alvo.baseframe.cabecalho.ball, 1)
|
|
|
|
need_start = false
|
|
end
|
|
|
|
baseframe:SetScript ("OnUpdate", movement_onupdate)
|
|
else
|
|
--> eh a instancia 1
|
|
local got_snap
|
|
for side, instance_id in _pairs (instancia.snap) do
|
|
if (instance_id) then
|
|
got_snap = true
|
|
end
|
|
end
|
|
|
|
need_show_group_guide = nil
|
|
|
|
if (not got_snap) then
|
|
need_show_group_guide = instancia
|
|
end
|
|
|
|
tempo_movendo = nil
|
|
start_draw_lines = nil
|
|
instance_ids_shown = 0
|
|
baseframe:SetScript ("OnUpdate", movement_onupdate)
|
|
end
|
|
|
|
else
|
|
|
|
baseframe:StopMovingOrSizing()
|
|
baseframe.isMoving = false
|
|
baseframe:SetScript ("OnUpdate", nil)
|
|
|
|
if (_detalhes.guide_balls) then
|
|
for index, ball in ipairs (_detalhes.guide_balls) do
|
|
ball:Hide()
|
|
end
|
|
end
|
|
|
|
for _, ins in _detalhes:ListInstances() do
|
|
if (ins.baseframe) then
|
|
ins.baseframe:SetUserPlaced (false)
|
|
if (ins.baseframe.id_texture1) then
|
|
ins.baseframe.id_texture1:Hide()
|
|
ins.baseframe.id_texture2:Hide()
|
|
end
|
|
end
|
|
end
|
|
|
|
--baseframe:SetClampRectInsets (unpack (_detalhes.window_clamp))
|
|
|
|
if (instancia_alvo and not instancia.do_not_snap and not instancia_alvo.do_not_snap) then
|
|
instancia:AtualizaPontos()
|
|
|
|
local esquerda, baixo, direita, cima
|
|
local meu_id = instancia.meu_id --> id da inst�ncia que esta sendo movida
|
|
|
|
local isVertical = instancia_alvo.verticalSnap
|
|
local isHorizontal = instancia_alvo.horizontalSnap
|
|
|
|
local isSelfVertical = instancia.verticalSnap
|
|
local isSelfHorizontal = instancia.horizontalSnap
|
|
|
|
local _R, _T, _L, _B
|
|
|
|
if (isVertical and not isSelfHorizontal) then
|
|
_T, _B = VPB (instancia, instancia_alvo), VPT (instancia, instancia_alvo)
|
|
elseif (isHorizontal and not isSelfVertical) then
|
|
_R, _L = VPL (instancia, instancia_alvo), VPR (instancia, instancia_alvo)
|
|
elseif (not isVertical and not isHorizontal) then
|
|
_R, _T, _L, _B = VPL (instancia, instancia_alvo), VPB (instancia, instancia_alvo), VPR (instancia, instancia_alvo), VPT (instancia, instancia_alvo)
|
|
end
|
|
|
|
if (_L) then
|
|
if (not instancia:EstaAgrupada (instancia_alvo, _L)) then
|
|
esquerda = instancia_alvo.meu_id
|
|
instancia.horizontalSnap = true
|
|
instancia_alvo.horizontalSnap = true
|
|
end
|
|
end
|
|
|
|
if (_B) then
|
|
if (not instancia:EstaAgrupada (instancia_alvo, _B)) then
|
|
baixo = instancia_alvo.meu_id
|
|
instancia.verticalSnap = true
|
|
instancia_alvo.verticalSnap = true
|
|
end
|
|
end
|
|
|
|
if (_R) then
|
|
if (not instancia:EstaAgrupada (instancia_alvo, _R)) then
|
|
direita = instancia_alvo.meu_id
|
|
instancia.horizontalSnap = true
|
|
instancia_alvo.horizontalSnap = true
|
|
end
|
|
end
|
|
|
|
if (_T) then
|
|
if (not instancia:EstaAgrupada (instancia_alvo, _T)) then
|
|
cima = instancia_alvo.meu_id
|
|
instancia.verticalSnap = true
|
|
instancia_alvo.verticalSnap = true
|
|
end
|
|
end
|
|
|
|
if (esquerda or baixo or direita or cima) then
|
|
instancia:agrupar_janelas ({esquerda, baixo, direita, cima})
|
|
|
|
--> tutorial
|
|
if (not _detalhes:GetTutorialCVar ("WINDOW_GROUP_MAKING1")) then
|
|
_detalhes:SetTutorialCVar ("WINDOW_GROUP_MAKING1", true)
|
|
|
|
local group_tutorial = CreateFrame ("frame", "DetailsWindowGroupPopUp1", instancia.baseframe, "DetailsHelpBoxTemplate")
|
|
group_tutorial.ArrowUP:Show()
|
|
group_tutorial.ArrowGlowUP:Show()
|
|
group_tutorial.Text:SetText (Loc ["STRING_MINITUTORIAL_WINDOWS1"])
|
|
group_tutorial:SetPoint ("bottom", instancia_alvo.break_snap_button, "top", 0, 24)
|
|
group_tutorial:Show()
|
|
_detalhes.OnEnterMainWindow (instancia_alvo)
|
|
|
|
end
|
|
end
|
|
|
|
for _, esta_instancia in _ipairs (_detalhes.tabela_instancias) do
|
|
if (not esta_instancia:IsAtiva() and esta_instancia.iniciada) then
|
|
esta_instancia:ResetaGump()
|
|
|
|
Details.FadeHandler.Fader (esta_instancia.baseframe, "in", 0.15)
|
|
Details.FadeHandler.Fader (esta_instancia.baseframe.cabecalho.ball, "in", 0.15)
|
|
Details.FadeHandler.Fader (esta_instancia.baseframe.cabecalho.atributo_icon, "in", 0.15)
|
|
|
|
if (esta_instancia.modo == modo_raid) then
|
|
_detalhes.raid = nil
|
|
elseif (esta_instancia.modo == modo_alone) then
|
|
_detalhes.SoloTables:switch()
|
|
_detalhes.solo = nil
|
|
end
|
|
|
|
elseif (esta_instancia:IsAtiva()) then
|
|
esta_instancia:SaveMainWindowPosition()
|
|
esta_instancia:RestoreMainWindowPosition()
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
--> salva pos de todas as janelas
|
|
for _, ins in _ipairs (_detalhes.tabela_instancias) do
|
|
if (ins:IsEnabled()) then
|
|
ins:SaveMainWindowPosition()
|
|
ins:RestoreMainWindowPosition()
|
|
end
|
|
end
|
|
|
|
local group = instancia:GetInstanceGroup()
|
|
for _, this_instance in _ipairs (group) do
|
|
this_instance.isMoving = false
|
|
end
|
|
|
|
_detalhes.snap_alert.playing = false
|
|
_detalhes.snap_alert.animIn:Stop()
|
|
_detalhes.snap_alert.animOut:Play()
|
|
|
|
if (not DetailsFramework.IsTimewalkWoW()) then
|
|
_detalhes.MicroButtonAlert:Hide()
|
|
end
|
|
|
|
if (instancia_alvo and instancia_alvo.ativa and instancia_alvo.baseframe) then
|
|
instancia_alvo.h_esquerda:Stop()
|
|
instancia_alvo.h_baixo:Stop()
|
|
instancia_alvo.h_direita:Stop()
|
|
instancia_alvo.h_cima:Stop()
|
|
end
|
|
|
|
end
|
|
end
|
|
_detalhes.move_janela_func = move_janela
|
|
|
|
local BGFrame_scripts_onenter = function (self)
|
|
OnEnterMainWindow (self._instance, self)
|
|
end
|
|
|
|
local BGFrame_scripts_onleave = function (self)
|
|
OnLeaveMainWindow (self._instance, self)
|
|
end
|
|
|
|
local BGFrame_scripts_onmousedown = function (self, button)
|
|
|
|
-- /run Details.disable_stretch_from_toolbar = true
|
|
if (self.is_toolbar and self._instance.baseframe.isLocked and button == "LeftButton" and not _detalhes.disable_stretch_from_toolbar) then
|
|
return self._instance.baseframe.button_stretch:GetScript ("OnMouseDown") (self._instance.baseframe.button_stretch, "LeftButton")
|
|
end
|
|
|
|
if (self._instance.baseframe.isMoving) then
|
|
move_janela (self._instance.baseframe, false, self._instance)
|
|
self._instance:SaveMainWindowPosition()
|
|
return
|
|
end
|
|
|
|
if (not self._instance.baseframe.isLocked and button == "LeftButton") then
|
|
move_janela (self._instance.baseframe, true, self._instance)
|
|
if (self.is_toolbar) then
|
|
if (self._instance.attribute_text.enabled and self._instance.attribute_text.side == 1 and self._instance.toolbar_side == 1) then
|
|
self._instance.menu_attribute_string:SetPoint ("bottomleft", self._instance.baseframe.cabecalho.ball, "bottomright", self._instance.attribute_text.anchor [1]+1, self._instance.attribute_text.anchor [2]-1)
|
|
end
|
|
end
|
|
elseif (button == "RightButton") then
|
|
if (self.is_toolbar and not _detalhes.disable_alldisplays_window) then
|
|
self._instance:ShowAllSwitch()
|
|
else
|
|
if (_detalhes.switch.current_instancia and _detalhes.switch.current_instancia == self._instance) then
|
|
_detalhes.switch:CloseMe()
|
|
else
|
|
_detalhes.switch:ShowMe (self._instance)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local BGFrame_scripts_onmouseup = function (self, button)
|
|
|
|
if (self.is_toolbar and self._instance.baseframe.isLocked and button == "LeftButton") then
|
|
if (DetailsWindowLockPopUp1 and DetailsWindowLockPopUp1:IsShown()) then
|
|
_G ["DetailsWindowLockPopUp1"]:Hide()
|
|
end
|
|
return self._instance.baseframe.button_stretch:GetScript ("OnMouseUp") (self._instance.baseframe.button_stretch, "LeftButton")
|
|
end
|
|
|
|
if (self._instance.baseframe.isMoving) then
|
|
move_janela (self._instance.baseframe, false, self._instance) --> novo movedor da janela
|
|
self._instance:SaveMainWindowPosition()
|
|
if (self.is_toolbar) then
|
|
if (self._instance.attribute_text.enabled and self._instance.attribute_text.side == 1 and self._instance.toolbar_side == 1) then
|
|
self._instance.menu_attribute_string:SetPoint ("bottomleft", self._instance.baseframe.cabecalho.ball, "bottomright", self._instance.attribute_text.anchor [1], self._instance.attribute_text.anchor [2])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local function BGFrame_scripts (BG, baseframe, instancia)
|
|
BG._instance = instancia
|
|
BG:SetScript ("OnEnter", BGFrame_scripts_onenter)
|
|
BG:SetScript ("OnLeave", BGFrame_scripts_onleave)
|
|
BG:SetScript ("OnMouseDown", BGFrame_scripts_onmousedown)
|
|
BG:SetScript ("OnMouseUp", BGFrame_scripts_onmouseup)
|
|
end
|
|
|
|
function gump:RegisterForDetailsMove (frame, instancia)
|
|
|
|
frame:SetScript ("OnMouseDown", function (frame, button)
|
|
if (not instancia.baseframe.isLocked and button == "LeftButton") then
|
|
move_janela (instancia.baseframe, true, instancia) --> novo movedor da janela
|
|
end
|
|
end)
|
|
|
|
frame:SetScript ("OnMouseUp", function (frame)
|
|
if (instancia.baseframe.isMoving) then
|
|
move_janela (instancia.baseframe, false, instancia) --> novo movedor da janela
|
|
instancia:SaveMainWindowPosition()
|
|
end
|
|
end)
|
|
end
|
|
|
|
--> scripts do base frame
|
|
local BFrame_scripts_onsizechange = function (self)
|
|
self._instance:SaveMainWindowSize()
|
|
self._instance:ReajustaGump()
|
|
self._instance.oldwith = self:GetWidth()
|
|
_detalhes:SendEvent ("DETAILS_INSTANCE_SIZECHANGED", nil, self._instance)
|
|
self._instance:RefreshAttributeTextSize()
|
|
end
|
|
|
|
local BFrame_scripts_onenter = function (self)
|
|
OnEnterMainWindow (self._instance, self)
|
|
end
|
|
|
|
local BFrame_scripts_onleave = function (self)
|
|
OnLeaveMainWindow (self._instance, self)
|
|
end
|
|
|
|
local BFrame_scripts_onmousedown = function (self, button)
|
|
if (not self.isLocked and button == "LeftButton") then
|
|
move_janela (self, true, self._instance)
|
|
end
|
|
end
|
|
|
|
local BFrame_scripts_onmouseup = function (self, button)
|
|
if (self.isMoving) then
|
|
move_janela (self, false, self._instance) --> novo movedor da janela
|
|
self._instance:SaveMainWindowPosition()
|
|
end
|
|
end
|
|
|
|
local function BFrame_scripts (baseframe, instancia)
|
|
baseframe._instance = instancia
|
|
baseframe:SetScript("OnSizeChanged", BFrame_scripts_onsizechange)
|
|
baseframe:SetScript("OnEnter", BFrame_scripts_onenter)
|
|
baseframe:SetScript("OnLeave", BFrame_scripts_onleave)
|
|
baseframe:SetScript ("OnMouseDown", BFrame_scripts_onmousedown)
|
|
baseframe:SetScript ("OnMouseUp", BFrame_scripts_onmouseup)
|
|
end
|
|
|
|
local function backgrounddisplay_scripts (backgrounddisplay, baseframe, instancia)
|
|
backgrounddisplay:SetScript ("OnEnter", function (self)
|
|
OnEnterMainWindow (instancia, self)
|
|
end)
|
|
|
|
backgrounddisplay:SetScript ("OnLeave", function (self)
|
|
OnLeaveMainWindow (instancia, self)
|
|
end)
|
|
end
|
|
|
|
local function instancias_horizontais (instancia, largura, esquerda, direita)
|
|
if (esquerda) then
|
|
for lado, esta_instancia in _pairs (instancia.snap) do
|
|
if (lado == 1) then --> movendo para esquerda
|
|
local instancia = _detalhes.tabela_instancias [esta_instancia]
|
|
instancia.baseframe:SetWidth (largura)
|
|
instancia.auto_resize = true
|
|
instancia:ReajustaGump()
|
|
instancia.auto_resize = false
|
|
instancias_horizontais (instancia, largura, true, false)
|
|
_detalhes:SendEvent ("DETAILS_INSTANCE_SIZECHANGED", nil, instancia)
|
|
end
|
|
end
|
|
end
|
|
|
|
if (direita) then
|
|
for lado, esta_instancia in _pairs (instancia.snap) do
|
|
if (lado == 3) then --> movendo para esquerda
|
|
local instancia = _detalhes.tabela_instancias [esta_instancia]
|
|
instancia.baseframe:SetWidth (largura)
|
|
instancia.auto_resize = true
|
|
instancia:ReajustaGump()
|
|
instancia.auto_resize = false
|
|
instancias_horizontais (instancia, largura, false, true)
|
|
_detalhes:SendEvent ("DETAILS_INSTANCE_SIZECHANGED", nil, instancia)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local function instancias_verticais (instancia, altura, esquerda, direita)
|
|
if (esquerda) then
|
|
for lado, esta_instancia in _pairs (instancia.snap) do
|
|
if (lado == 1) then --> movendo para esquerda
|
|
local instancia = _detalhes.tabela_instancias [esta_instancia]
|
|
if (instancia:IsEnabled()) then
|
|
instancia.baseframe:SetHeight (altura)
|
|
instancia.auto_resize = true
|
|
instancia:ReajustaGump()
|
|
instancia.auto_resize = false
|
|
instancias_verticais (instancia, altura, true, false)
|
|
_detalhes:SendEvent ("DETAILS_INSTANCE_SIZECHANGED", nil, instancia)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if (direita) then
|
|
for lado, esta_instancia in _pairs (instancia.snap) do
|
|
if (lado == 3) then --> movendo para esquerda
|
|
local instancia = _detalhes.tabela_instancias [esta_instancia]
|
|
if (instancia:IsEnabled()) then
|
|
instancia.baseframe:SetHeight (altura)
|
|
instancia.auto_resize = true
|
|
instancia:ReajustaGump()
|
|
instancia.auto_resize = false
|
|
instancias_verticais (instancia, altura, false, true)
|
|
_detalhes:SendEvent ("DETAILS_INSTANCE_SIZECHANGED", nil, instancia)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local check_snap_side = function (instanceid, snap, id, container)
|
|
local instance = _detalhes:GetInstance (instanceid)
|
|
if (instance and instance.snap [snap] and instance.snap [snap] == id) then
|
|
tinsert (container, instance)
|
|
return true
|
|
end
|
|
end
|
|
|
|
function _detalhes:InstanciasVerticais (instance)
|
|
|
|
instance = self or instance
|
|
|
|
local on_top = {}
|
|
local on_bottom = {}
|
|
local id = instance:GetId()
|
|
|
|
--lower instances
|
|
local this_instance = _detalhes:GetInstance (id-1)
|
|
if (this_instance) then
|
|
--> top side
|
|
if (this_instance.snap [2] and this_instance.snap [2] == id) then
|
|
local cid = id
|
|
local snapid = 2
|
|
for i = cid-1, 1, -1 do
|
|
if (check_snap_side (i, 2, cid, on_top)) then
|
|
cid = cid - 1
|
|
else
|
|
break
|
|
end
|
|
end
|
|
--> bottom side
|
|
elseif (this_instance.snap [4] and this_instance.snap [4] == id) then
|
|
local cid = id
|
|
local snapid = 4
|
|
for i = cid-1, 1, -1 do
|
|
if (check_snap_side (i, 4, cid, on_bottom)) then
|
|
cid = cid - 1
|
|
else
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--upper instances
|
|
local this_instance = _detalhes:GetInstance (id+1)
|
|
if (this_instance) then
|
|
--> top side
|
|
if (this_instance.snap [2] and this_instance.snap [2] == id) then
|
|
local cid = id
|
|
local snapid = 2
|
|
for i = cid+1, _detalhes:GetNumInstancesAmount() do
|
|
if (check_snap_side (i, 2, cid, on_top)) then
|
|
cid = cid + 1
|
|
else
|
|
break
|
|
end
|
|
end
|
|
--> bottom side
|
|
elseif (this_instance.snap [4] and this_instance.snap [4] == id) then
|
|
local cid = id
|
|
local snapid = 4
|
|
for i = cid+1, _detalhes:GetNumInstancesAmount() do
|
|
if (check_snap_side (i, 4, cid, on_bottom)) then
|
|
cid = cid + 1
|
|
else
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--> calc top clamp
|
|
local top_clamp = 0
|
|
local bottom_clamp = 0
|
|
|
|
if (instance.toolbar_side == 1) then
|
|
top_clamp = top_clamp + 20
|
|
elseif (instance.toolbar_side == 2) then
|
|
bottom_clamp = bottom_clamp + 20
|
|
end
|
|
if (instance.show_statusbar) then
|
|
bottom_clamp = bottom_clamp + 14
|
|
end
|
|
|
|
for cid, this_instance in _ipairs (on_top) do
|
|
if (this_instance.show_statusbar) then
|
|
top_clamp = top_clamp + 14
|
|
end
|
|
top_clamp = top_clamp + 20
|
|
top_clamp = top_clamp + this_instance.baseframe:GetHeight()
|
|
end
|
|
|
|
for cid, this_instance in _ipairs (on_bottom) do
|
|
if (this_instance.show_statusbar) then
|
|
bottom_clamp = bottom_clamp + 14
|
|
end
|
|
bottom_clamp = bottom_clamp + 20
|
|
bottom_clamp = bottom_clamp + this_instance.baseframe:GetHeight()
|
|
tinsert (on_top, this_instance)
|
|
end
|
|
|
|
return on_top, bottom_clamp, top_clamp
|
|
end
|
|
|
|
--[[
|
|
lado 4
|
|
-----------------------------------------
|
|
| |
|
|
lado 1 | | lado 3
|
|
| |
|
|
| |
|
|
-----------------------------------------
|
|
lado 2
|
|
--]]
|
|
|
|
function _detalhes:InstanciasHorizontais (instancia)
|
|
|
|
instancia = self or instancia
|
|
|
|
local linha_horizontal, esquerda, direita = {}, 0, 0
|
|
|
|
local top, bottom = 0, 0
|
|
|
|
local checking = instancia
|
|
|
|
local check_index_anterior = _detalhes.tabela_instancias [instancia.meu_id-1]
|
|
if (check_index_anterior and check_index_anterior:IsEnabled()) then --> possiu uma inst�ncia antes de mim
|
|
if (check_index_anterior.snap[3] and check_index_anterior.snap[3] == instancia.meu_id) then --> o index negativo vai para a esquerda
|
|
for i = instancia.meu_id-1, 1, -1 do
|
|
local esta_instancia = _detalhes.tabela_instancias [i]
|
|
if (esta_instancia.snap[3]) then
|
|
if (esta_instancia.snap[3] == checking.meu_id) then
|
|
linha_horizontal [#linha_horizontal+1] = esta_instancia
|
|
esquerda = esquerda + esta_instancia.baseframe:GetWidth()
|
|
checking = esta_instancia
|
|
end
|
|
else
|
|
break
|
|
end
|
|
end
|
|
elseif (check_index_anterior.snap[1] and check_index_anterior.snap[1] == instancia.meu_id) then --> o index negativo vai para a direita
|
|
for i = instancia.meu_id-1, 1, -1 do
|
|
local esta_instancia = _detalhes.tabela_instancias [i]
|
|
if (esta_instancia.snap[1]) then
|
|
if (esta_instancia.snap[1] == checking.meu_id) then
|
|
linha_horizontal [#linha_horizontal+1] = esta_instancia
|
|
direita = direita + esta_instancia.baseframe:GetWidth()
|
|
checking = esta_instancia
|
|
end
|
|
else
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
checking = instancia
|
|
|
|
local check_index_posterior = _detalhes.tabela_instancias [instancia.meu_id+1]
|
|
if (check_index_posterior and check_index_posterior:IsEnabled()) then
|
|
if (check_index_posterior.snap[3] and check_index_posterior.snap[3] == instancia.meu_id) then --> o index posterior vai para a esquerda
|
|
for i = instancia.meu_id+1, #_detalhes.tabela_instancias do
|
|
local esta_instancia = _detalhes.tabela_instancias [i]
|
|
if (esta_instancia.snap[3]) then
|
|
if (esta_instancia.snap[3] == checking.meu_id) then
|
|
linha_horizontal [#linha_horizontal+1] = esta_instancia
|
|
esquerda = esquerda + esta_instancia.baseframe:GetWidth()
|
|
checking = esta_instancia
|
|
end
|
|
else
|
|
break
|
|
end
|
|
end
|
|
elseif (check_index_posterior.snap[1] and check_index_posterior.snap[1] == instancia.meu_id) then --> o index posterior vai para a direita
|
|
for i = instancia.meu_id+1, #_detalhes.tabela_instancias do
|
|
local esta_instancia = _detalhes.tabela_instancias [i]
|
|
if (esta_instancia.snap[1]) then
|
|
if (esta_instancia.snap[1] == checking.meu_id) then
|
|
linha_horizontal [#linha_horizontal+1] = esta_instancia
|
|
direita = direita + esta_instancia.baseframe:GetWidth()
|
|
checking = esta_instancia
|
|
end
|
|
else
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
return linha_horizontal, esquerda, direita, bottom, top
|
|
|
|
end
|
|
|
|
local resizeTooltip = {
|
|
{text = "|cff33CC00Click|cffEEEEEE: ".. Loc ["STRING_RESIZE_COMMON"]},
|
|
|
|
{text = "+|cff33CC00 Click|cffEEEEEE: " .. Loc ["STRING_RESIZE_HORIZONTAL"]},
|
|
{icon = [[Interface\AddOns\Details\images\key_shift]], width = 24, height = 14, l = 0, r = 1, t = 0, b =0.640625},
|
|
|
|
{text = "+|cff33CC00 Click|cffEEEEEE: " .. Loc ["STRING_RESIZE_VERTICAL"]},
|
|
{icon = [[Interface\AddOns\Details\images\key_alt]], width = 24, height = 14, l = 0, r = 1, t = 0, b =0.640625},
|
|
|
|
{text = "+|cff33CC00 Click|cffEEEEEE: " .. Loc ["STRING_RESIZE_ALL"]},
|
|
{icon = [[Interface\AddOns\Details\images\key_ctrl]], width = 24, height = 14, l = 0, r = 1, t = 0, b =0.640625}
|
|
}
|
|
|
|
--> search key: ~resizescript
|
|
|
|
local resize_scripts_onmousedown = function (self, button)
|
|
_G.GameCooltip:ShowMe (false) --> Hide Cooltip
|
|
|
|
if (_detalhes.disable_lock_ungroup_buttons) then
|
|
return
|
|
end
|
|
|
|
if (not self:GetParent().isLocked and button == "LeftButton" and self._instance.modo ~= _detalhes._detalhes_props["MODO_ALONE"]) then
|
|
self:GetParent().isResizing = true
|
|
self._instance:BaseFrameSnap()
|
|
|
|
local isVertical = self._instance.verticalSnap
|
|
local isHorizontal = self._instance.horizontalSnap
|
|
|
|
local agrupadas
|
|
if (self._instance.verticalSnap) then
|
|
agrupadas = self._instance:InstanciasVerticais()
|
|
elseif (self._instance.horizontalSnap) then
|
|
agrupadas = self._instance:InstanciasHorizontais()
|
|
end
|
|
|
|
self._instance.stretchToo = agrupadas
|
|
if (self._instance.stretchToo and #self._instance.stretchToo > 0) then
|
|
for _, esta_instancia in ipairs (self._instance.stretchToo) do
|
|
esta_instancia.baseframe._place = esta_instancia:SaveMainWindowPosition()
|
|
esta_instancia.baseframe.isResizing = true
|
|
end
|
|
end
|
|
|
|
----------------
|
|
|
|
if (self._myside == "<") then
|
|
if (_IsShiftKeyDown()) then
|
|
self._instance.baseframe:StartSizing("left")
|
|
self._instance.eh_horizontal = true
|
|
elseif (_IsAltKeyDown()) then
|
|
self._instance.baseframe:StartSizing("top")
|
|
self._instance.eh_vertical = true
|
|
elseif (_IsControlKeyDown()) then
|
|
self._instance.baseframe:StartSizing("bottomleft")
|
|
self._instance.eh_tudo = true
|
|
else
|
|
self._instance.baseframe:StartSizing("bottomleft")
|
|
end
|
|
|
|
self:SetPoint ("bottomleft", self._instance.baseframe, "bottomleft", -1, -1)
|
|
self.afundado = true
|
|
|
|
elseif (self._myside == ">") then
|
|
if (_IsShiftKeyDown()) then
|
|
self._instance.baseframe:StartSizing ("right")
|
|
self._instance.eh_horizontal = true
|
|
elseif (_IsAltKeyDown()) then
|
|
self._instance.baseframe:StartSizing ("top")
|
|
self._instance.eh_vertical = true
|
|
elseif (_IsControlKeyDown()) then
|
|
self._instance.baseframe:StartSizing ("bottomright")
|
|
self._instance.eh_tudo = true
|
|
else
|
|
self._instance.baseframe:StartSizing ("bottomright")
|
|
end
|
|
|
|
if (self._instance.rolagem and _detalhes.use_scroll) then
|
|
self:SetPoint ("bottomright", self._instance.baseframe, "bottomright", (self._instance.largura_scroll*-1) + 1, -1)
|
|
else
|
|
self:SetPoint ("bottomright", self._instance.baseframe, "bottomright", 1, -1)
|
|
end
|
|
self.afundado = true
|
|
end
|
|
|
|
_detalhes:SendEvent ("DETAILS_INSTANCE_STARTRESIZE", nil, self._instance)
|
|
|
|
if (_detalhes.update_speed > 0.3) then
|
|
_detalhes:SetWindowUpdateSpeed (0.3, true)
|
|
_detalhes.resize_changed_update_speed = true
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
local resize_scripts_onmouseup = function (self, button)
|
|
|
|
if (_detalhes.disable_lock_ungroup_buttons) then
|
|
return
|
|
end
|
|
|
|
if (self.afundado) then
|
|
self.afundado = false
|
|
if (self._myside == ">") then
|
|
if (self._instance.rolagem and _detalhes.use_scroll) then
|
|
self:SetPoint ("bottomright", self._instance.baseframe, "bottomright", self._instance.largura_scroll*-1, 0)
|
|
else
|
|
self:SetPoint ("bottomright", self._instance.baseframe, "bottomright", 0, 0)
|
|
end
|
|
else
|
|
self:SetPoint ("bottomleft", self._instance.baseframe, "bottomleft", 0, 0)
|
|
end
|
|
end
|
|
|
|
if (self:GetParent().isResizing) then
|
|
|
|
self:GetParent():StopMovingOrSizing()
|
|
self:GetParent().isResizing = false
|
|
|
|
self._instance:RefreshBars()
|
|
self._instance:InstanceReset()
|
|
self._instance:ReajustaGump()
|
|
|
|
if (self._instance.stretchToo and #self._instance.stretchToo > 0) then
|
|
for _, esta_instancia in ipairs (self._instance.stretchToo) do
|
|
esta_instancia.baseframe:StopMovingOrSizing()
|
|
esta_instancia.baseframe.isResizing = false
|
|
esta_instancia:RefreshBars()
|
|
esta_instancia:InstanceReset()
|
|
esta_instancia:ReajustaGump()
|
|
_detalhes:SendEvent ("DETAILS_INSTANCE_SIZECHANGED", nil, esta_instancia)
|
|
end
|
|
self._instance.stretchToo = nil
|
|
end
|
|
|
|
local largura = self._instance.baseframe:GetWidth()
|
|
local altura = self._instance.baseframe:GetHeight()
|
|
|
|
if (self._instance.eh_horizontal) then
|
|
instancias_horizontais (self._instance, largura, true, true)
|
|
self._instance.eh_horizontal = nil
|
|
end
|
|
|
|
--if (instancia.eh_vertical) then
|
|
instancias_verticais (self._instance, altura, true, true)
|
|
self._instance.eh_vertical = nil
|
|
--end
|
|
|
|
_detalhes:SendEvent ("DETAILS_INSTANCE_ENDRESIZE", nil, self._instance)
|
|
|
|
if (self._instance.eh_tudo) then
|
|
for _, esta_instancia in _ipairs (_detalhes.tabela_instancias) do
|
|
if (esta_instancia:IsAtiva() and esta_instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"]) then
|
|
esta_instancia.baseframe:ClearAllPoints()
|
|
esta_instancia:SaveMainWindowPosition()
|
|
esta_instancia:RestoreMainWindowPosition()
|
|
end
|
|
end
|
|
|
|
for _, esta_instancia in _ipairs (_detalhes.tabela_instancias) do
|
|
if (esta_instancia:IsAtiva() and esta_instancia ~= self._instance and esta_instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"]) then
|
|
esta_instancia.baseframe:SetWidth (largura)
|
|
esta_instancia.baseframe:SetHeight (altura)
|
|
esta_instancia.auto_resize = true
|
|
esta_instancia:RefreshBars()
|
|
esta_instancia:InstanceReset()
|
|
esta_instancia:ReajustaGump()
|
|
esta_instancia.auto_resize = false
|
|
_detalhes:SendEvent ("DETAILS_INSTANCE_SIZECHANGED", nil, esta_instancia)
|
|
end
|
|
end
|
|
|
|
self._instance.eh_tudo = nil
|
|
end
|
|
|
|
self._instance:BaseFrameSnap()
|
|
|
|
for _, esta_instancia in _ipairs (_detalhes.tabela_instancias) do
|
|
if (esta_instancia:IsAtiva()) then
|
|
esta_instancia:SaveMainWindowPosition()
|
|
esta_instancia:RestoreMainWindowPosition()
|
|
end
|
|
end
|
|
|
|
if (_detalhes.resize_changed_update_speed) then
|
|
_detalhes:SetWindowUpdateSpeed (false, true)
|
|
_detalhes.resize_changed_update_speed = nil
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
local resize_scripts_onhide = function (self)
|
|
if (self.going_hide) then
|
|
_G.GameCooltip:ShowMe (false)
|
|
self.going_hide = nil
|
|
end
|
|
end
|
|
|
|
local resize_scripts_onenter = function (self)
|
|
|
|
if (_detalhes.disable_lock_ungroup_buttons) then
|
|
return
|
|
end
|
|
|
|
if (self._instance.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and not self._instance.baseframe.isLocked and not self.mostrando) then
|
|
|
|
OnEnterMainWindow (self._instance, self)
|
|
|
|
self.texture:SetBlendMode ("ADD")
|
|
self.mostrando = true
|
|
|
|
_detalhes:CooltipPreset (2.1)
|
|
GameCooltip:AddFromTable (resizeTooltip)
|
|
|
|
GameCooltip:SetOwner (self)
|
|
GameCooltip:ShowCooltip()
|
|
end
|
|
end
|
|
|
|
local resize_scripts_onleave = function (self)
|
|
if (self.mostrando) then
|
|
self.going_hide = true
|
|
if (not self.movendo) then
|
|
OnLeaveMainWindow (self._instance, self)
|
|
end
|
|
|
|
self.texture:SetBlendMode ("BLEND")
|
|
self.mostrando = false
|
|
|
|
GameCooltip:ShowMe (false)
|
|
end
|
|
end
|
|
|
|
local function resize_scripts (resizer, instancia, scrollbar, side, baseframe)
|
|
resizer._instance = instancia
|
|
resizer._myside = side
|
|
|
|
resizer:SetScript ("OnMouseDown", resize_scripts_onmousedown)
|
|
resizer:SetScript ("OnMouseUp", resize_scripts_onmouseup)
|
|
resizer:SetScript ("OnHide", resize_scripts_onhide)
|
|
resizer:SetScript ("OnEnter", resize_scripts_onenter)
|
|
resizer:SetScript ("OnLeave", resize_scripts_onleave)
|
|
end
|
|
|
|
local lockButtonTooltip = {
|
|
{text = Loc ["STRING_LOCK_DESC"]},
|
|
{icon = [[Interface\PetBattles\PetBattle-LockIcon]], width = 14, height = 14, l = 0.0703125, r = 0.9453125, t = 0.0546875, b = 0.9453125, color = "orange"},
|
|
}
|
|
|
|
local lockFunctionOnEnter = function (self)
|
|
|
|
if (_detalhes.disable_lock_ungroup_buttons) then
|
|
return
|
|
end
|
|
|
|
if (self.instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and not self.mostrando) then
|
|
OnEnterMainWindow (self.instancia, self)
|
|
|
|
self.mostrando = true
|
|
|
|
self.label:SetTextColor (1, 1, 1, .6)
|
|
|
|
_detalhes:CooltipPreset (2.1)
|
|
GameCooltip:SetOption ("FixedWidth", 180)
|
|
GameCooltip:AddFromTable (lockButtonTooltip)
|
|
|
|
GameCooltip:SetOwner (self)
|
|
GameCooltip:ShowCooltip()
|
|
end
|
|
end
|
|
|
|
local lockFunctionOnLeave = function (self)
|
|
if (self.mostrando) then
|
|
self.going_hide = true
|
|
OnLeaveMainWindow (self.instancia, self)
|
|
self.label:SetTextColor (.6, .6, .6, .7)
|
|
self.mostrando = false
|
|
GameCooltip:ShowMe (false)
|
|
end
|
|
end
|
|
|
|
local lockFunctionOnHide = function (self)
|
|
if (self.going_hide) then
|
|
GameCooltip:ShowMe (false)
|
|
self.going_hide = nil
|
|
end
|
|
end
|
|
|
|
function _detalhes:DelayOptionsRefresh (instance, no_reopen)
|
|
if (_G.DetailsOptionsWindow and _G.DetailsOptionsWindow:IsShown()) then
|
|
_detalhes:ScheduleTimer ("OpenOptionsWindow", 0.1, {instance or _G.DetailsOptionsWindow.instance, no_reopen})
|
|
end
|
|
end
|
|
|
|
function _detalhes:RefreshLockedState()
|
|
if (not self.baseframe and self.meu_id and self:IsEnabled()) then
|
|
self:ScheduleTimer ("RefreshLockedState", 1)
|
|
return
|
|
elseif (not self.baseframe) then
|
|
return
|
|
end
|
|
|
|
if (self.baseframe.isLocked) then
|
|
self.baseframe.resize_direita:EnableMouse (false)
|
|
self.baseframe.resize_esquerda:EnableMouse (false)
|
|
else
|
|
self.baseframe.resize_direita:EnableMouse (true)
|
|
self.baseframe.resize_esquerda:EnableMouse (true)
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
local lockFunctionOnClick = function (button, button_type, button2, isFromOptionsButton)
|
|
|
|
--isFromOptionsButton is true when the call if from the button in the display section of the options panel
|
|
if (_detalhes.disable_lock_ungroup_buttons and isFromOptionsButton ~= true) then
|
|
return
|
|
end
|
|
|
|
if (not button:GetParent().instance) then
|
|
button = button2 --from any other button
|
|
end
|
|
|
|
local baseframe = button:GetParent()
|
|
if (baseframe.isLocked) then
|
|
baseframe.isLocked = false
|
|
baseframe.instance.isLocked = false
|
|
button.label:SetText (Loc ["STRING_LOCK_WINDOW"])
|
|
button:SetWidth (button.label:GetStringWidth()+2)
|
|
|
|
if (not _detalhes.disable_lock_ungroup_buttons) then
|
|
baseframe.resize_direita:SetAlpha (1)
|
|
baseframe.resize_esquerda:SetAlpha (1)
|
|
end
|
|
|
|
button:ClearAllPoints()
|
|
button:SetPoint ("right", baseframe.resize_direita, "left", -1, 1.5)
|
|
else
|
|
--> tutorial
|
|
if (not _detalhes:GetTutorialCVar ("WINDOW_LOCK_UNLOCK1") and not _detalhes.initializing) then
|
|
_detalhes:SetTutorialCVar ("WINDOW_LOCK_UNLOCK1", true)
|
|
|
|
local lock_tutorial = CreateFrame ("frame", "DetailsWindowLockPopUp1", baseframe, "DetailsHelpBoxTemplate")
|
|
lock_tutorial.ArrowUP:Show()
|
|
lock_tutorial.ArrowGlowUP:Show()
|
|
lock_tutorial.Text:SetText (Loc ["STRING_MINITUTORIAL_WINDOWS2"])
|
|
lock_tutorial:SetPoint ("bottom", baseframe.UPFrame, "top", 0, 20)
|
|
lock_tutorial:Show()
|
|
|
|
end
|
|
|
|
baseframe.isLocked = true
|
|
baseframe.instance.isLocked = true
|
|
button.label:SetText (Loc ["STRING_UNLOCK_WINDOW"])
|
|
button:SetWidth (button.label:GetStringWidth()+2)
|
|
button:ClearAllPoints()
|
|
button:SetPoint ("bottomright", baseframe, "bottomright", -3, 0)
|
|
baseframe.resize_direita:SetAlpha (0)
|
|
baseframe.resize_esquerda:SetAlpha (0)
|
|
end
|
|
|
|
baseframe.instance:RefreshLockedState()
|
|
|
|
_detalhes:DelayOptionsRefresh()
|
|
end
|
|
|
|
_detalhes.lock_instance_function = lockFunctionOnClick
|
|
|
|
local unSnapButtonTooltip = {
|
|
{text = Loc ["STRING_DETACH_DESC"]},
|
|
{icon = [[Interface\AddOns\Details\images\icons]], width = 14, height = 14, l = 160/512, r = 179/512, t = 142/512, b = 162/512},
|
|
}
|
|
|
|
local unSnapButtonOnEnter = function (self)
|
|
|
|
if (_detalhes.disable_lock_ungroup_buttons) then
|
|
return
|
|
end
|
|
|
|
local have_snap = false
|
|
for _, instancia_id in _pairs (self.instancia.snap) do
|
|
if (instancia_id) then
|
|
have_snap = true
|
|
break
|
|
end
|
|
end
|
|
|
|
if (not have_snap) then
|
|
OnEnterMainWindow (self.instancia, self)
|
|
self.mostrando = true
|
|
return
|
|
end
|
|
|
|
OnEnterMainWindow (self.instancia, self)
|
|
self.mostrando = true
|
|
|
|
_detalhes:CooltipPreset (2.1)
|
|
GameCooltip:SetOption ("FixedWidth", 180)
|
|
GameCooltip:AddFromTable (unSnapButtonTooltip)
|
|
|
|
GameCooltip:ShowCooltip (self, "tooltip")
|
|
|
|
end
|
|
|
|
local unSnapButtonOnLeave = function (self)
|
|
if (self.mostrando) then
|
|
OnLeaveMainWindow (self.instancia, self)
|
|
self.mostrando = false
|
|
GameCooltip:Hide()
|
|
end
|
|
end
|
|
|
|
--> this should run only when the mouse is over a instance bar
|
|
local shift_monitor = function (self)
|
|
|
|
if (not self:IsMouseOver()) then
|
|
self:SetScript ("OnUpdate", shift_monitor)
|
|
return
|
|
end
|
|
|
|
if (_IsShiftKeyDown()) then
|
|
if (not self.showing_allspells) then
|
|
self.showing_allspells = true
|
|
local instancia = _detalhes:GetInstance (self.instance_id)
|
|
instancia:MontaTooltip (self, self.row_id, "shift")
|
|
end
|
|
|
|
elseif (self.showing_allspells) then
|
|
self.showing_allspells = false
|
|
local instancia = _detalhes:GetInstance (self.instance_id)
|
|
instancia:MontaTooltip (self, self.row_id)
|
|
end
|
|
|
|
if (_IsControlKeyDown()) then
|
|
if (not self.showing_alltargets) then
|
|
self.showing_alltargets = true
|
|
local instancia = _detalhes:GetInstance (self.instance_id)
|
|
instancia:MontaTooltip (self, self.row_id, "ctrl")
|
|
end
|
|
|
|
elseif (self.showing_alltargets) then
|
|
self.showing_alltargets = false
|
|
local instancia = _detalhes:GetInstance (self.instance_id)
|
|
instancia:MontaTooltip (self, self.row_id)
|
|
end
|
|
|
|
if (_IsAltKeyDown()) then
|
|
if (not self.showing_allpets) then
|
|
self.showing_allpets = true
|
|
local instancia = _detalhes:GetInstance (self.instance_id)
|
|
instancia:MontaTooltip (self, self.row_id, "alt")
|
|
end
|
|
|
|
elseif (self.showing_allpets) then
|
|
self.showing_allpets = false
|
|
local instancia = _detalhes:GetInstance (self.instance_id)
|
|
instancia:MontaTooltip (self, self.row_id)
|
|
end
|
|
end
|
|
|
|
local barra_backdrop_onenter = {
|
|
bgFile = [[Interface\Tooltips\UI-Tooltip-Background]],
|
|
tile = true, tileSize = 16,
|
|
insets = {left = 1, right = 1, top = 0, bottom = 1}
|
|
}
|
|
local barra_backdrop_onleave = {
|
|
bgFile = "",
|
|
edgeFile = "", tile = true, tileSize = 16, edgeSize = 32,
|
|
insets = {left = 1, right = 1, top = 0, bottom = 1}
|
|
}
|
|
|
|
--> pre creating the truncate frame
|
|
_detalhes.left_anti_truncate = CreateFrame ("frame", "DetailsLeftTextAntiTruncate", UIParent,"BackdropTemplate")
|
|
_detalhes.left_anti_truncate:SetBackdrop (gump_fundo_backdrop)
|
|
_detalhes.left_anti_truncate:SetBackdropColor (0, 0, 0, 0.8)
|
|
_detalhes.left_anti_truncate:SetFrameStrata ("FULLSCREEN")
|
|
_detalhes.left_anti_truncate.text = _detalhes.left_anti_truncate:CreateFontString (nil, "overlay", "GameFontNormal")
|
|
_detalhes.left_anti_truncate.text:SetPoint ("left", _detalhes.left_anti_truncate, "left", 3, 0)
|
|
|
|
local barra_scripts_onenter = function (self)
|
|
self.mouse_over = true
|
|
OnEnterMainWindow (self._instance, self)
|
|
|
|
self._instance:MontaTooltip (self, self.row_id)
|
|
|
|
self:SetBackdrop (barra_backdrop_onenter)
|
|
self:SetBackdropColor (0.588, 0.588, 0.588, 0.7)
|
|
|
|
if (not _detalhes.instances_disable_bar_highlight) then
|
|
if (self._instance.bars_inverted) then
|
|
self.right_to_left_texture:SetBlendMode ("ADD")
|
|
else
|
|
self.textura:SetBlendMode ("ADD")
|
|
end
|
|
end
|
|
|
|
local lefttext = self.lineText1
|
|
if (lefttext:IsTruncated()) then
|
|
if (not _detalhes.left_anti_truncate) then
|
|
|
|
end
|
|
|
|
_detalhes:SetFontSize (_detalhes.left_anti_truncate.text, self._instance.row_info.font_size)
|
|
_detalhes:SetFontFace (_detalhes.left_anti_truncate.text, self._instance.row_info.font_face_file)
|
|
_detalhes:SetFontColor (_detalhes.left_anti_truncate.text, lefttext:GetTextColor())
|
|
|
|
_detalhes.left_anti_truncate:SetPoint ("left", lefttext, "left", -3, 0)
|
|
_detalhes.left_anti_truncate.text:SetText (lefttext:GetText())
|
|
|
|
_detalhes.left_anti_truncate:SetSize (_detalhes.left_anti_truncate.text:GetStringWidth() + 3, self._instance.row_info.height)
|
|
_detalhes.left_anti_truncate:Show()
|
|
lefttext.untruncated = true
|
|
end
|
|
|
|
self:SetScript ("OnUpdate", shift_monitor)
|
|
end
|
|
|
|
local barra_scripts_onleave = function (self)
|
|
self.mouse_over = false
|
|
OnLeaveMainWindow (self._instance, self)
|
|
|
|
--_GameTooltip:Hide()
|
|
GameCooltip:ShowMe (false)
|
|
|
|
self:SetBackdrop (barra_backdrop_onleave)
|
|
self:SetBackdropBorderColor (0, 0, 0, 0)
|
|
self:SetBackdropColor (0, 0, 0, 0)
|
|
|
|
if (self._instance.bars_inverted) then
|
|
self.right_to_left_texture:SetBlendMode ("BLEND")
|
|
else
|
|
self.textura:SetBlendMode ("BLEND")
|
|
end
|
|
|
|
self.showing_allspells = false
|
|
self:SetScript ("OnUpdate", nil)
|
|
|
|
local lefttext = self.lineText1
|
|
if (lefttext.untruncated) then
|
|
lefttext.untruncated = nil
|
|
_detalhes.left_anti_truncate:Hide()
|
|
end
|
|
end
|
|
|
|
local barra_scripts_onmousedown = function (self, button)
|
|
if (self.fading_in) then
|
|
return
|
|
end
|
|
|
|
local lefttext = self.lineText1
|
|
if (lefttext.untruncated) then
|
|
lefttext.untruncated = nil
|
|
_detalhes.left_anti_truncate:Hide()
|
|
end
|
|
|
|
if (button == "RightButton") then
|
|
return _detalhes.switch:ShowMe (self._instance)
|
|
|
|
--elseif (button == "MiddleButton") then
|
|
|
|
elseif (button == "LeftButton") then
|
|
|
|
end
|
|
|
|
self._instance:HandleTextsOnMouseClick (self, "down")
|
|
|
|
self.mouse_down = _GetTime()
|
|
self.button = button
|
|
local x, y = _GetCursorPosition()
|
|
self.x = _math_floor (x)
|
|
self.y = _math_floor (y)
|
|
|
|
if (not self._instance.baseframe.isLocked) then
|
|
GameCooltip:Hide()
|
|
move_janela (self._instance.baseframe, true, self._instance)
|
|
end
|
|
end
|
|
|
|
local barra_scripts_onmouseup = function (self, button)
|
|
|
|
local is_shift_down = _IsShiftKeyDown()
|
|
local is_control_down = _IsControlKeyDown()
|
|
|
|
if (self._instance.baseframe.isMoving) then
|
|
move_janela (self._instance.baseframe, false, self._instance)
|
|
self._instance:SaveMainWindowPosition()
|
|
|
|
if (self._instance:MontaTooltip (self, self.row_id)) then
|
|
GameCooltip:Show (self, 1)
|
|
end
|
|
end
|
|
|
|
self._instance:HandleTextsOnMouseClick (self, "up")
|
|
|
|
local x, y = _GetCursorPosition()
|
|
x = _math_floor (x)
|
|
y = _math_floor (y)
|
|
|
|
if (self.mouse_down and (self.mouse_down+0.4 > _GetTime() and (x == self.x and y == self.y)) or (x == self.x and y == self.y)) then
|
|
if (self.button == "LeftButton" or self.button == "MiddleButton") then
|
|
if (self._instance.atributo == 5 or is_shift_down) then
|
|
--> report
|
|
if (self._instance.atributo == 5 and is_shift_down) then
|
|
local custom = self._instance:GetCustomObject()
|
|
if (custom and custom.on_shift_click) then
|
|
local func = loadstring (custom.on_shift_click)
|
|
if (func) then
|
|
local successful, errortext = pcall (func, self, self.minha_tabela, self._instance)
|
|
if (not successful) then
|
|
_detalhes:Msg ("error occurred custom script shift+click:", errortext)
|
|
end
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
if (_detalhes.row_singleclick_overwrite [self._instance.atributo] and type (_detalhes.row_singleclick_overwrite [self._instance.atributo][self._instance.sub_atributo]) == "function") then
|
|
return _detalhes.row_singleclick_overwrite [self._instance.atributo][self._instance.sub_atributo] (_, self.minha_tabela, self._instance, is_shift_down, is_control_down)
|
|
end
|
|
|
|
return _detalhes:ReportSingleLine (self._instance, self)
|
|
end
|
|
|
|
if (not self.minha_tabela) then
|
|
return _detalhes:Msg ("this bar is waiting update.")
|
|
end
|
|
|
|
self._instance:AbreJanelaInfo (self.minha_tabela, nil, nil, is_shift_down, is_control_down)
|
|
end
|
|
end
|
|
end
|
|
|
|
local barra_scripts_onclick = function (self, button)
|
|
|
|
end
|
|
|
|
local barra_scripts_onshow = function (self)
|
|
-- search key: ~model
|
|
if (self.using_upper_3dmodels) then
|
|
self.modelbox_high:SetModel (self._instance.row_info.models.upper_model)
|
|
self.modelbox_high:SetAlpha (self._instance.row_info.models.upper_alpha)
|
|
end
|
|
if (self.using_lower_3dmodels) then
|
|
self.modelbox_low:SetModel (self._instance.row_info.models.lower_model)
|
|
self.modelbox_low:SetAlpha (self._instance.row_info.models.lower_alpha)
|
|
end
|
|
end
|
|
|
|
function _detalhes:HandleTextsOnMouseClick (row, type)
|
|
|
|
if (self.bars_inverted) then
|
|
if (type == "down") then
|
|
row.lineText4:SetPoint ("left", row.statusbar, "left", 2, -1)
|
|
|
|
if (self.row_info.no_icon) then
|
|
row.lineText1:SetPoint ("right", row.statusbar, "right", -1, -1)
|
|
else
|
|
row.lineText1:SetPoint ("right", row.icone_classe, "left", -1, -1)
|
|
end
|
|
|
|
elseif (type == "up") then
|
|
row.lineText4:SetPoint ("left", row.statusbar, "left", 1, 0)
|
|
|
|
if (self.row_info.no_icon) then
|
|
row.lineText1:SetPoint ("right", row.statusbar, "right", -2, 0)
|
|
else
|
|
row.lineText1:SetPoint ("right", row.icone_classe, "left", -2, 0)
|
|
end
|
|
end
|
|
|
|
else
|
|
if (type == "down") then
|
|
row.lineText4:SetPoint ("right", row.statusbar, "right", 1, -1)
|
|
if (self.row_info.no_icon) then
|
|
row.lineText1:SetPoint ("left", row.statusbar, "left", 3, -1)
|
|
else
|
|
row.lineText1:SetPoint ("left", row.icone_classe, "right", 4, -1)
|
|
end
|
|
|
|
elseif (type == "up") then
|
|
row.lineText4:SetPoint ("right", row.statusbar, "right")
|
|
if (self.row_info.no_icon) then
|
|
row.lineText1:SetPoint ("left", row.statusbar, "left", 2, 0)
|
|
else
|
|
row.lineText1:SetPoint ("left", row.icone_classe, "right", 3, 0)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local set_bar_value = function (self, value)
|
|
if (self._instance.bars_inverted) then
|
|
self.statusbar:SetValue (0)
|
|
|
|
local width = self._instance.cached_bar_width
|
|
local inverse_bar_size = width / 100 * value
|
|
local coord_inverse = inverse_bar_size / width
|
|
|
|
inverse_bar_size = _math_max (inverse_bar_size, 0.00000001)
|
|
|
|
self.right_to_left_texture:SetWidth (inverse_bar_size)
|
|
self.right_to_left_texture:SetTexCoord (coord_inverse, 0, 0, 1)
|
|
else
|
|
self.statusbar:SetValue (value)
|
|
end
|
|
|
|
self.statusbar.value = value
|
|
|
|
if (self.using_upper_3dmodels) then
|
|
local width = self:GetWidth()
|
|
local p = (width / 100) * value
|
|
self.modelbox_high:SetPoint ("bottomright", self, "bottomright", p - width, 0)
|
|
end
|
|
end
|
|
|
|
-- ~talent ~icon
|
|
local icon_frame_on_enter = function (self)
|
|
local actor = self.row.minha_tabela
|
|
|
|
if (self.row.icone_classe:GetTexture() ~= "") then
|
|
--self.row.icone_classe:SetSize (self.row.icone_classe:GetWidth()+1, self.row.icone_classe:GetWidth()+1)
|
|
--self.row.icone_classe:SetBlendMode ("ADD")
|
|
end
|
|
|
|
if (actor) then
|
|
if (actor.frags) then
|
|
|
|
|
|
elseif (actor.is_custom or actor.byspell or actor.damage_spellid) then
|
|
local spellid = actor.damage_spellid or actor.id or actor[1]
|
|
if (spellid) then
|
|
GameTooltip:SetOwner (self, "ANCHOR_TOPLEFT", 0, 10)
|
|
_detalhes:GameTooltipSetSpellByID (spellid)
|
|
GameTooltip:Show()
|
|
end
|
|
|
|
elseif (actor.dead_at) then
|
|
|
|
|
|
elseif (actor.name) then --ensure it's an actor table
|
|
|
|
local serial = actor.serial
|
|
local name = actor:name()
|
|
local class = actor:class()
|
|
local spec = _detalhes.cached_specs [serial] or actor.spec
|
|
local talents = _detalhes.cached_talents [serial]
|
|
local ilvl = _detalhes.ilevel:GetIlvl (serial)
|
|
|
|
local icon_size = 20
|
|
|
|
local instance = _detalhes:GetInstance (self.row.instance_id)
|
|
|
|
instance:BuildInstanceBarTooltip (self)
|
|
|
|
local class_icon, class_L, class_R, class_T, class_B = _detalhes:GetClassIcon (class)
|
|
|
|
local spec_id, spec_name, spec_description, spec_icon, spec_role, spec_class = DetailsFramework.GetSpecializationInfoByID (spec or 0) --thanks pas06
|
|
local spec_L, spec_R, spec_T, spec_B
|
|
if (spec_id) then
|
|
if (_detalhes.class_specs_coords [spec_id]) then
|
|
spec_L, spec_R, spec_T, spec_B = unpack (_detalhes.class_specs_coords [spec_id])
|
|
end
|
|
end
|
|
|
|
GameCooltip:AddLine (name, spec_name)
|
|
if (class == "UNKNOW" or class == "UNGROUPPLAYER") then
|
|
GameCooltip:AddIcon ([[Interface\AddOns\Details\images\classes_small_alpha]], 1, 1, icon_size, icon_size, 0, 0.25, 0.75, 1)
|
|
else
|
|
GameCooltip:AddIcon ([[Interface\AddOns\Details\images\classes_small_alpha]], 1, 1, icon_size, icon_size, class_L, class_R, class_T, class_B)
|
|
end
|
|
|
|
if (spec_L) then
|
|
GameCooltip:AddIcon ([[Interface\AddOns\Details\images\spec_icons_normal_alpha]], 1, 2, icon_size, icon_size, spec_L, spec_R, spec_T, spec_B)
|
|
else
|
|
GameCooltip:AddIcon ([[Interface\GossipFrame\IncompleteQuestIcon]], 1, 2, icon_size, icon_size)
|
|
end
|
|
_detalhes:AddTooltipHeaderStatusbar()
|
|
|
|
local talent_string = ""
|
|
if (talents and not DetailsFramework.IsTBCWow()) then
|
|
for i = 1, #talents do
|
|
local talentID, name, texture, selected, available = GetTalentInfoByID(talents [i])
|
|
if (texture) then
|
|
talent_string = talent_string .. " |T" .. texture .. ":" .. 24 .. ":" .. 24 ..":0:0:64:64:4:60:4:60|t"
|
|
end
|
|
end
|
|
end
|
|
|
|
local got_info
|
|
if (ilvl) then
|
|
GameCooltip:AddLine (STAT_AVERAGE_ITEM_LEVEL .. ":" , ilvl and "|T:" .. 24 .. ":" .. 24 ..":0:0:64:64:4:60:4:60|t" .. floor (ilvl.ilvl) or "|T:" .. 24 .. ":" .. 24 ..":0:0:64:64:4:60:4:60|t ??") --> Loc from GlobalStrings.lua
|
|
GameCooltip:AddIcon ([[]], 1, 1, 1, 20)
|
|
_detalhes:AddTooltipBackgroundStatusbar()
|
|
got_info = true
|
|
else
|
|
GameCooltip:AddLine (STAT_AVERAGE_ITEM_LEVEL .. ":" , 0)
|
|
GameCooltip:AddIcon ([[]], 1, 1, 1, 20)
|
|
_detalhes:AddTooltipBackgroundStatusbar()
|
|
got_info = true
|
|
end
|
|
|
|
if (talent_string ~= "") then
|
|
GameCooltip:AddLine (TALENTS .. ":", talent_string) --> Loc from GlobalStrings.lua
|
|
GameCooltip:AddIcon ([[]], 1, 1, 1, 24)
|
|
_detalhes:AddTooltipBackgroundStatusbar()
|
|
got_info = true
|
|
elseif (got_info) then
|
|
GameCooltip:AddLine (TALENTS .. ":", Loc ["STRING_QUERY_INSPECT_REFRESH"]) --> Loc from GlobalStrings.lua
|
|
GameCooltip:AddIcon ([[]], 1, 1, 1, 24)
|
|
_detalhes:AddTooltipBackgroundStatusbar()
|
|
end
|
|
|
|
GameCooltip:SetOption ("StatusBarTexture", [[Interface\AddOns\Details\images\bar_skyline]])
|
|
GameCooltip:SetOption ("MinButtonHeight", 15)
|
|
GameCooltip:SetOption ("IgnoreButtonAutoHeight", false)
|
|
|
|
local height = 66
|
|
if (not got_info) then
|
|
GameCooltip:AddLine (Loc ["STRING_QUERY_INSPECT"], nil, 1, "orange")
|
|
GameCooltip:AddIcon ([[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]], 1, 1, 12, icon_size, 8/512, 70/512, 224/512, 306/512)
|
|
height = 54
|
|
end
|
|
|
|
local combat = instance:GetShowingCombat()
|
|
local diff = combat:GetDifficulty()
|
|
local attribute, subattribute = instance:GetDisplay()
|
|
|
|
--> check if is a raid encounter and if is heroic or mythic
|
|
if (diff and (diff == 15 or diff == 16) and (attribute == 1 or attribute == 2)) then
|
|
local db = _detalhes.OpenStorage()
|
|
if (db) then
|
|
local bestRank, encounterTable = _detalhes.storage:GetBestFromPlayer (diff, combat:GetBossInfo().id, attribute == 1 and "damage" or "healing", name, true)
|
|
if (bestRank) then
|
|
--GameCooltip:AddLine ("")
|
|
|
|
--> discover which are the player position in the guild rank
|
|
local playerTable, onEncounter, rankPosition = _detalhes.storage:GetPlayerGuildRank (diff, combat:GetBossInfo().id, attribute == 1 and "damage" or "healing", name, true)
|
|
|
|
--" .. floor (bestRank[2] or 0) .. " ilvl" .. " |
|
|
GameCooltip:AddLine ("Best Score:", _detalhes:ToK2 ((bestRank[1] or 0) / encounterTable.elapsed) .. " [|cFFFFFF00Rank: " .. (rankPosition or "#") .. "|r]", 1, "white")
|
|
_detalhes:AddTooltipBackgroundStatusbar()
|
|
|
|
GameCooltip:AddLine ("|TInterface\\TUTORIALFRAME\\UI-TUTORIAL-FRAME:14:12:0:1:512:512:8:70:224:306|t Open Rank", "|TInterface\\TUTORIALFRAME\\UI-TUTORIAL-FRAME:14:12:0:1:512:512:8:70:328:409|t Refresh Talents", 1, "white", "white")
|
|
_detalhes:AddTooltipBackgroundStatusbar()
|
|
|
|
--GameCooltip:AddLine ("On: " .. (encounterTable.date:gsub (".*%s", "")), , 1, "orange")
|
|
--_detalhes:AddTooltipHeaderStatusbar()
|
|
if (not got_info) then
|
|
height = height + 25
|
|
else
|
|
height = height + 31
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local attribute, subAttribute = instance:GetDisplay()
|
|
if (attribute == 1) then
|
|
local realDps = actor.total / instance:GetShowingCombat():GetCombatTime()
|
|
local dpsValue = _detalhes:comma_value_raw (realDps)
|
|
if (dpsValue) then
|
|
local total, decimal = strsplit (".", dpsValue)
|
|
total = total-- .. "." .. (decimal and decimal:match("^%d"))
|
|
GameCooltip:AddLine ("Dps:", total)
|
|
_detalhes:AddTooltipBackgroundStatusbar()
|
|
GameCooltip:AddIcon ("", 1, 1, 1, 20)
|
|
height = height + 21
|
|
end
|
|
end
|
|
|
|
--[=[
|
|
if (RaiderIO and RaiderIO.GetScore) then
|
|
local mythicPlusScore = RaiderIO.GetScore (name)
|
|
if (mythicPlusScore and mythicPlusScore.allScore) then
|
|
GameCooltip:AddLine ("Mythic+ Score:", mythicPlusScore.allScore, 1, "white", "white")
|
|
_detalhes:AddTooltipBackgroundStatusbar()
|
|
end
|
|
end
|
|
--]=]
|
|
|
|
GameCooltip:SetOption ("FixedHeight", height)
|
|
|
|
GameCooltip:ShowCooltip()
|
|
|
|
self.unitname = name
|
|
self.showing = "actor"
|
|
end
|
|
end
|
|
|
|
end
|
|
local icon_frame_on_leave = function (self)
|
|
GameCooltip:Hide()
|
|
|
|
if (GameTooltip and GameTooltip:IsShown()) then
|
|
GameTooltip:Hide()
|
|
end
|
|
|
|
if (self.row.icone_classe:GetTexture() ~= "") then
|
|
--self.row.icone_classe:SetSize (self.row.icone_classe:GetWidth()-1, self.row.icone_classe:GetWidth()-1)
|
|
--self.row.icone_classe:SetBlendMode ("BLEND")
|
|
end
|
|
end
|
|
|
|
local icon_frame_events = _detalhes:CreateEventListener()
|
|
function icon_frame_events:EnterCombat()
|
|
for anim, _ in pairs (_detalhes.icon_animations.load.in_use) do
|
|
anim.anim:Stop()
|
|
anim:Hide()
|
|
tinsert (_detalhes.icon_animations.load.available, anim)
|
|
|
|
anim.icon_frame.icon_animation = nil
|
|
anim.icon_frame = nil
|
|
end
|
|
wipe (_detalhes.icon_animations.load.in_use)
|
|
end
|
|
|
|
icon_frame_events:RegisterEvent ("COMBAT_PLAYER_ENTER", "EnterCombat")
|
|
|
|
function icon_frame_events:CancelAnim (anim)
|
|
|
|
local anim, timeout = unpack (anim)
|
|
|
|
if (_detalhes.icon_animations.load.in_use [anim]) then
|
|
|
|
if (timeout) then
|
|
local f = anim
|
|
if (not f.question_icon) then
|
|
f.question_icon = f.parent:GetParent():GetParent().border:CreateTexture (nil, "overlay")
|
|
f.question_icon:SetTexture ([[Interface\GossipFrame\ActiveLegendaryQuestIcon]])
|
|
f.question_icon:SetSize (16, 16)
|
|
end
|
|
f.question_icon:Show()
|
|
f.question_icon:SetPoint ("center", f.parent, "center")
|
|
|
|
if (not _detalhes.HideBarQuestionIcon) then
|
|
function _detalhes:HideBarQuestionIcon (frame)
|
|
frame.question_icon:Hide()
|
|
end
|
|
end
|
|
_detalhes:ScheduleTimer ("HideBarQuestionIcon", 2, f)
|
|
end
|
|
|
|
_detalhes.icon_animations.load.in_use [anim] = nil
|
|
tinsert (_detalhes.icon_animations.load.available, anim)
|
|
anim.anim:Stop()
|
|
anim:Hide()
|
|
|
|
anim.icon_frame.icon_animation = nil
|
|
anim.icon_frame = nil
|
|
end
|
|
end
|
|
|
|
local icon_frame_inspect_callback = function (guid, unitid, icon_frame)
|
|
if (icon_frame.icon_animation) then
|
|
icon_frame.icon_animation.anim:Stop()
|
|
icon_frame.icon_animation:Hide()
|
|
end
|
|
|
|
local is_in_use = _detalhes.icon_animations.load.in_use [icon_frame.icon_animation]
|
|
if (is_in_use) then
|
|
tinsert (_detalhes.icon_animations.load.available, icon_frame.icon_animation)
|
|
_detalhes.icon_animations.load.in_use [icon_frame.icon_animation] = nil
|
|
end
|
|
|
|
if (icon_frame:IsMouseOver()) then
|
|
icon_frame_on_enter (icon_frame)
|
|
end
|
|
|
|
if (icon_frame.icon_animation) then
|
|
icon_frame.icon_animation.icon_frame = nil
|
|
icon_frame.icon_animation = nil
|
|
end
|
|
end
|
|
|
|
local icon_frame_create_animation = function()
|
|
local f = CreateFrame ("frame", nil, UIParent)
|
|
f:SetFrameStrata ("FULLSCREEN")
|
|
f.anim = f:CreateAnimationGroup()
|
|
f.rotate = f.anim:CreateAnimation ("Rotation")
|
|
f.rotate:SetDegrees (360)
|
|
f.rotate:SetDuration (2)
|
|
f.anim:SetLooping ("repeat")
|
|
|
|
local t = f:CreateTexture (nil, "overlay")
|
|
t:SetTexture ([[Interface\COMMON\StreamCircle]])
|
|
t:SetAlpha (0.7)
|
|
t:SetAllPoints()
|
|
|
|
tinsert (_detalhes.icon_animations.load.available, f)
|
|
end
|
|
|
|
local icon_frame_on_click_down = function (self)
|
|
local instanceID = self.instance_id
|
|
local instanceObject = Details:GetInstance (instanceID)
|
|
self:GetParent():GetParent().icone_classe:SetPoint ("left", self:GetParent():GetParent(), "left", instanceObject.row_info.icon_offset[1] + 1, instanceObject.row_info.icon_offset[2] + -1)
|
|
end
|
|
|
|
local icon_frame_on_click_up = function (self, button)
|
|
|
|
local instanceID = self.instance_id
|
|
local instanceObject = Details:GetInstance (instanceID)
|
|
self:GetParent():GetParent().icone_classe:SetPoint ("left", self:GetParent():GetParent(), "left", instanceObject.row_info.icon_offset[1], instanceObject.row_info.icon_offset[2])
|
|
|
|
if (button == "LeftButton") then
|
|
--> open the rank panel
|
|
local instance = _detalhes:GetInstance (self.row.instance_id)
|
|
if (instance) then
|
|
local attribute, subattribute = instance:GetDisplay()
|
|
local combat = instance:GetShowingCombat()
|
|
local diff = combat:GetDifficulty()
|
|
local bossInfo = combat:GetBossInfo()
|
|
|
|
if ((attribute == 1 or attribute == 2) and bossInfo) then --if bossInfo is nil, means the combat isn't a boss
|
|
local db = _detalhes.OpenStorage()
|
|
if (db and bossInfo.id) then
|
|
local haveData = _detalhes.storage:HaveDataForEncounter (diff, bossInfo.id, true) --attempt to index local 'bossInfo' (a nil value)
|
|
if (haveData) then
|
|
_detalhes:OpenRaidHistoryWindow (bossInfo.zone, bossInfo.id, diff, attribute == 1 and "damage" or "healing", true, 1, false, 2)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return
|
|
end
|
|
|
|
if (_detalhes.in_combat) then
|
|
_detalhes:Msg (Loc ["STRING_QUERY_INSPECT_FAIL1"])
|
|
return
|
|
end
|
|
|
|
if (self.showing == "actor") then
|
|
|
|
if (_detalhes.ilevel.core:HasQueuedInspec (self.unitname)) then
|
|
|
|
--> icon animation
|
|
local anim = tremove (_detalhes.icon_animations.load.available)
|
|
if (not anim) then
|
|
icon_frame_create_animation()
|
|
anim = tremove (_detalhes.icon_animations.load.available)
|
|
end
|
|
|
|
local f = anim
|
|
if (not f.question_icon) then
|
|
f.question_icon = self:GetParent():GetParent().border:CreateTexture (nil, "overlay")
|
|
f.question_icon:SetTexture ([[Interface\GossipFrame\ActiveLegendaryQuestIcon]])
|
|
f.question_icon:SetSize (16, 16)
|
|
end
|
|
|
|
f.question_icon:ClearAllPoints()
|
|
f.question_icon:SetPoint ("center", self, "center")
|
|
f.question_icon:Show()
|
|
|
|
if (not _detalhes.HideBarQuestionIcon) then
|
|
function _detalhes:HideBarQuestionIcon (frame)
|
|
frame.question_icon:Hide()
|
|
end
|
|
end
|
|
_detalhes:ScheduleTimer ("HideBarQuestionIcon", 1, f)
|
|
|
|
self.icon_animation = anim
|
|
anim.icon_frame = self
|
|
|
|
local pid
|
|
pid = icon_frame_events:ScheduleTimer ("CancelAnim", 1, {anim})
|
|
_detalhes.icon_animations.load.in_use [anim] = pid
|
|
anim.parent = self
|
|
|
|
return
|
|
end
|
|
|
|
local does_query = _detalhes.ilevel.core:QueryInspect (self.unitname, icon_frame_inspect_callback, self)
|
|
|
|
if (self.icon_animation) then
|
|
return
|
|
end
|
|
|
|
--> icon animation
|
|
local anim = tremove (_detalhes.icon_animations.load.available)
|
|
if (not anim) then
|
|
icon_frame_create_animation()
|
|
anim = tremove (_detalhes.icon_animations.load.available)
|
|
end
|
|
|
|
anim:Show()
|
|
anim:SetParent (self)
|
|
anim:ClearAllPoints()
|
|
anim:SetFrameStrata ("TOOLTIP")
|
|
anim:SetPoint ("center", self, "center")
|
|
anim:SetSize (self:GetWidth()*1.7, self:GetHeight()*1.7)
|
|
|
|
anim.anim:Play()
|
|
|
|
self.icon_animation = anim
|
|
anim.icon_frame = self
|
|
|
|
local pid
|
|
if (does_query) then
|
|
pid = icon_frame_events:ScheduleTimer ("CancelAnim", 4, {anim, true})
|
|
else
|
|
pid = icon_frame_events:ScheduleTimer ("CancelAnim", 0.2, {anim})
|
|
end
|
|
_detalhes.icon_animations.load.in_use [anim] = pid
|
|
anim.parent = self
|
|
|
|
if (anim.question_icon) then
|
|
anim.question_icon:Hide()
|
|
end
|
|
end
|
|
end
|
|
|
|
local set_frame_icon_scripts = function (row)
|
|
row.icon_frame:SetScript ("OnEnter", icon_frame_on_enter)
|
|
row.icon_frame:SetScript ("OnLeave", icon_frame_on_leave)
|
|
row.icon_frame:SetScript ("OnMouseDown", icon_frame_on_click_down)
|
|
row.icon_frame:SetScript ("OnMouseUp", icon_frame_on_click_up)
|
|
end
|
|
|
|
local function barra_scripts (esta_barra, instancia, i)
|
|
esta_barra._instance = instancia
|
|
|
|
esta_barra:SetScript ("OnEnter", barra_scripts_onenter)
|
|
esta_barra:SetScript ("OnLeave", barra_scripts_onleave)
|
|
esta_barra:SetScript ("OnMouseDown", barra_scripts_onmousedown)
|
|
esta_barra:SetScript ("OnMouseUp", barra_scripts_onmouseup)
|
|
esta_barra:SetScript ("OnClick", barra_scripts_onclick)
|
|
|
|
esta_barra:SetScript ("OnShow", barra_scripts_onshow)
|
|
|
|
set_frame_icon_scripts (esta_barra)
|
|
|
|
esta_barra.SetValue = set_bar_value
|
|
end
|
|
|
|
function _detalhes:ReportSingleLine (instancia, barra)
|
|
|
|
local reportar
|
|
if (instancia.atributo == 5) then --> custom
|
|
|
|
--> dump cooltip
|
|
local GameCooltip = GameCooltip
|
|
if (GameCooltipFrame1:IsShown()) then
|
|
local actor_name = barra.lineText1:GetText() or ""
|
|
actor_name = actor_name:gsub ((".*%."), "")
|
|
|
|
if (instancia.segmento == -1) then --overall
|
|
reportar = {"Details!: " .. Loc ["STRING_OVERALL"] .. " " .. instancia.customName .. ": " .. actor_name .. " " .. Loc ["STRING_CUSTOM_REPORT"]}
|
|
else
|
|
reportar = {"Details!: " .. instancia.customName .. ": " .. actor_name .. " " .. Loc ["STRING_CUSTOM_REPORT"]}
|
|
end
|
|
|
|
local amt = GameCooltip.Indexes
|
|
for i = 2, amt do
|
|
local left_text, right_text = GameCooltip:GetText (i)
|
|
reportar [#reportar+1] = (i-1) .. ". " .. left_text .. " ... " .. right_text
|
|
end
|
|
else
|
|
reportar = {"Details!: " .. instancia.customName .. ": " .. Loc ["STRING_CUSTOM_REPORT"]}
|
|
reportar [#reportar+1] = barra.lineText1:GetText() .. " " .. barra.lineText4:GetText()
|
|
|
|
--reportar [#reportar+1] = (i-1) .. ". " .. left_text .. " ... " .. right_text
|
|
end
|
|
|
|
else
|
|
reportar = {"Details!: " .. Loc ["STRING_REPORT"] .. " " .. _detalhes.sub_atributos [instancia.atributo].lista [instancia.sub_atributo]}
|
|
reportar [#reportar+1] = barra.lineText1:GetText() .. " " .. barra.lineText4:GetText()
|
|
end
|
|
|
|
|
|
return _detalhes:Reportar (reportar, {_no_current = true, _no_inverse = true, _custom = true})
|
|
end
|
|
|
|
-- ~stretch
|
|
local function button_stretch_scripts (baseframe, backgrounddisplay, instancia)
|
|
local button = baseframe.button_stretch
|
|
|
|
button:SetScript ("OnEnter", function (self)
|
|
self.mouse_over = true
|
|
if (not _detalhes.disable_stretch_button) then
|
|
Details.FadeHandler.Fader (self, "ALPHA", 1)
|
|
end
|
|
end)
|
|
button:SetScript ("OnLeave", function (self)
|
|
self.mouse_over = false
|
|
Details.FadeHandler.Fader (self, "ALPHA", 0)
|
|
end)
|
|
|
|
button:SetScript ("OnMouseDown", function (self, button)
|
|
|
|
if (button ~= "LeftButton") then
|
|
return
|
|
end
|
|
|
|
if (instancia:IsSoloMode()) then
|
|
return
|
|
end
|
|
|
|
instancia:EsconderScrollBar (true)
|
|
baseframe._place = instancia:SaveMainWindowPosition()
|
|
baseframe.isResizing = true
|
|
baseframe.isStretching = true
|
|
baseframe:SetFrameStrata ("TOOLTIP")
|
|
instancia.rowframe:SetFrameStrata ("TOOLTIP")
|
|
|
|
local _r, _g, _b, _a = baseframe:GetBackdropColor()
|
|
|
|
gump:GradientEffect ( baseframe, "frame", _r, _g, _b, _a, _r, _g, _b, 0.9, 1.5)
|
|
if (instancia.wallpaper.enabled) then
|
|
_r, _g, _b = baseframe.wallpaper:GetVertexColor()
|
|
_a = baseframe.wallpaper:GetAlpha()
|
|
gump:GradientEffect (baseframe.wallpaper, "texture", _r, _g, _b, _a, _r, _g, _b, 0.05, 0.5)
|
|
end
|
|
|
|
if (instancia.stretch_button_side == 1) then
|
|
baseframe:StartSizing ("top")
|
|
baseframe.stretch_direction = "top"
|
|
elseif (instancia.stretch_button_side == 2) then
|
|
baseframe:StartSizing ("bottom")
|
|
baseframe.stretch_direction = "bottom"
|
|
end
|
|
|
|
local linha_horizontal = {}
|
|
|
|
local checking = instancia
|
|
for i = instancia.meu_id-1, 1, -1 do
|
|
local esta_instancia = _detalhes.tabela_instancias [i]
|
|
if ((esta_instancia.snap[1] and esta_instancia.snap[1] == checking.meu_id) or (esta_instancia.snap[3] and esta_instancia.snap[3] == checking.meu_id)) then
|
|
linha_horizontal [#linha_horizontal+1] = esta_instancia
|
|
checking = esta_instancia
|
|
else
|
|
break
|
|
end
|
|
end
|
|
|
|
checking = instancia
|
|
for i = instancia.meu_id+1, #_detalhes.tabela_instancias do
|
|
local esta_instancia = _detalhes.tabela_instancias [i]
|
|
if ((esta_instancia.snap[1] and esta_instancia.snap[1] == checking.meu_id) or (esta_instancia.snap[3] and esta_instancia.snap[3] == checking.meu_id)) then
|
|
linha_horizontal [#linha_horizontal+1] = esta_instancia
|
|
checking = esta_instancia
|
|
else
|
|
break
|
|
end
|
|
end
|
|
|
|
instancia.stretchToo = linha_horizontal
|
|
if (#instancia.stretchToo > 0) then
|
|
for _, esta_instancia in ipairs (instancia.stretchToo) do
|
|
esta_instancia:EsconderScrollBar (true)
|
|
esta_instancia.baseframe._place = esta_instancia:SaveMainWindowPosition()
|
|
esta_instancia.baseframe.isResizing = true
|
|
esta_instancia.baseframe.isStretching = true
|
|
esta_instancia.baseframe:SetFrameStrata ("TOOLTIP")
|
|
esta_instancia.rowframe:SetFrameStrata ("TOOLTIP")
|
|
|
|
local _r, _g, _b, _a = esta_instancia.baseframe:GetBackdropColor()
|
|
gump:GradientEffect ( esta_instancia.baseframe, "frame", _r, _g, _b, _a, _r, _g, _b, 0.9, 1.5)
|
|
_detalhes:SendEvent ("DETAILS_INSTANCE_STARTSTRETCH", nil, esta_instancia)
|
|
|
|
if (esta_instancia.wallpaper.enabled) then
|
|
_r, _g, _b = esta_instancia.baseframe.wallpaper:GetVertexColor()
|
|
_a = esta_instancia.baseframe.wallpaper:GetAlpha()
|
|
gump:GradientEffect (esta_instancia.baseframe.wallpaper, "texture", _r, _g, _b, _a, _r, _g, _b, 0.05, 0.5)
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
_detalhes:SnapTextures (true)
|
|
|
|
_detalhes:SendEvent ("DETAILS_INSTANCE_STARTSTRETCH", nil, instancia)
|
|
|
|
--> change the update speed
|
|
if (_detalhes.update_speed > 0.3) then
|
|
_detalhes:SetWindowUpdateSpeed (0.3, true)
|
|
_detalhes.stretch_changed_update_speed = true
|
|
end
|
|
|
|
end)
|
|
|
|
button:SetScript ("OnMouseUp", function (self, button)
|
|
|
|
if (button ~= "LeftButton") then
|
|
return
|
|
end
|
|
|
|
if (instancia:IsSoloMode()) then
|
|
return
|
|
end
|
|
|
|
if (baseframe.isResizing) then
|
|
baseframe:StopMovingOrSizing()
|
|
baseframe.isResizing = false
|
|
instancia:RestoreMainWindowPosition (baseframe._place)
|
|
instancia:ReajustaGump()
|
|
baseframe.isStretching = false
|
|
if (instancia.need_rolagem) then
|
|
instancia:MostrarScrollBar (true)
|
|
end
|
|
_detalhes:SendEvent ("DETAILS_INSTANCE_SIZECHANGED", nil, instancia)
|
|
|
|
instancia:RefreshBars()
|
|
instancia:InstanceReset()
|
|
instancia:ReajustaGump()
|
|
|
|
baseframe.stretch_direction = nil
|
|
|
|
if (instancia.stretchToo and #instancia.stretchToo > 0) then
|
|
for _, esta_instancia in ipairs (instancia.stretchToo) do
|
|
esta_instancia.baseframe:StopMovingOrSizing()
|
|
esta_instancia.baseframe.isResizing = false
|
|
esta_instancia:RestoreMainWindowPosition (esta_instancia.baseframe._place)
|
|
esta_instancia:ReajustaGump()
|
|
esta_instancia.baseframe.isStretching = false
|
|
if (esta_instancia.need_rolagem) then
|
|
esta_instancia:MostrarScrollBar (true)
|
|
end
|
|
_detalhes:SendEvent ("DETAILS_INSTANCE_SIZECHANGED", nil, esta_instancia)
|
|
|
|
local _r, _g, _b, _a = esta_instancia.baseframe:GetBackdropColor()
|
|
gump:GradientEffect ( esta_instancia.baseframe, "frame", _r, _g, _b, _a, instancia.bg_r, instancia.bg_g, instancia.bg_b, instancia.bg_alpha, 0.5)
|
|
|
|
if (esta_instancia.wallpaper.enabled) then
|
|
_r, _g, _b = esta_instancia.baseframe.wallpaper:GetVertexColor()
|
|
_a = esta_instancia.baseframe.wallpaper:GetAlpha()
|
|
gump:GradientEffect (esta_instancia.baseframe.wallpaper, "texture", _r, _g, _b, _a, _r, _g, _b, esta_instancia.wallpaper.alpha, 1.0)
|
|
end
|
|
|
|
esta_instancia.baseframe:SetFrameStrata (esta_instancia.strata)
|
|
esta_instancia.rowframe:SetFrameStrata (esta_instancia.strata)
|
|
esta_instancia:StretchButtonAlwaysOnTop()
|
|
|
|
_detalhes:SendEvent ("DETAILS_INSTANCE_ENDSTRETCH", nil, esta_instancia.baseframe)
|
|
|
|
esta_instancia:RefreshBars()
|
|
esta_instancia:InstanceReset()
|
|
esta_instancia:ReajustaGump()
|
|
end
|
|
instancia.stretchToo = nil
|
|
end
|
|
|
|
end
|
|
|
|
local _r, _g, _b, _a = baseframe:GetBackdropColor()
|
|
gump:GradientEffect ( baseframe, "frame", _r, _g, _b, _a, instancia.bg_r, instancia.bg_g, instancia.bg_b, instancia.bg_alpha, 0.5)
|
|
if (instancia.wallpaper.enabled) then
|
|
_r, _g, _b = baseframe.wallpaper:GetVertexColor()
|
|
_a = baseframe.wallpaper:GetAlpha()
|
|
gump:GradientEffect (baseframe.wallpaper, "texture", _r, _g, _b, _a, _r, _g, _b, instancia.wallpaper.alpha, 1.0)
|
|
end
|
|
|
|
baseframe:SetFrameStrata (instancia.strata)
|
|
instancia.rowframe:SetFrameStrata (instancia.strata)
|
|
instancia:StretchButtonAlwaysOnTop()
|
|
|
|
_detalhes:SnapTextures (false)
|
|
|
|
_detalhes:SendEvent ("DETAILS_INSTANCE_ENDSTRETCH", nil, instancia)
|
|
|
|
if (_detalhes.stretch_changed_update_speed) then
|
|
_detalhes:SetWindowUpdateSpeed (false, true)
|
|
_detalhes.stretch_changed_update_speed = nil
|
|
end
|
|
|
|
end)
|
|
end
|
|
|
|
local function button_down_scripts (main_frame, backgrounddisplay, instancia, scrollbar)
|
|
main_frame.button_down:SetScript ("OnMouseDown", function(self)
|
|
if (not scrollbar:IsEnabled()) then
|
|
return
|
|
end
|
|
|
|
local B = instancia.barraS[2]
|
|
if (B < instancia.rows_showing) then
|
|
scrollbar:SetValue (scrollbar:GetValue() + instancia.row_height)
|
|
end
|
|
|
|
self.precionado = true
|
|
self.last_up = -0.3
|
|
self:SetScript ("OnUpdate", function(self, elapsed)
|
|
self.last_up = self.last_up + elapsed
|
|
if (self.last_up > 0.03) then
|
|
self.last_up = 0
|
|
B = instancia.barraS[2]
|
|
if (B < instancia.rows_showing) then
|
|
scrollbar:SetValue (scrollbar:GetValue() + instancia.row_height)
|
|
else
|
|
self:Disable()
|
|
end
|
|
end
|
|
end)
|
|
end)
|
|
|
|
main_frame.button_down:SetScript ("OnMouseUp", function (self)
|
|
self.precionado = false
|
|
self:SetScript ("OnUpdate", nil)
|
|
end)
|
|
end
|
|
|
|
local function button_up_scripts (main_frame, backgrounddisplay, instancia, scrollbar)
|
|
|
|
main_frame.button_up:SetScript ("OnMouseDown", function(self)
|
|
|
|
if (not scrollbar:IsEnabled()) then
|
|
return
|
|
end
|
|
|
|
local A = instancia.barraS[1]
|
|
if (A > 1) then
|
|
scrollbar:SetValue (scrollbar:GetValue() - instancia.row_height*2)
|
|
end
|
|
|
|
self.precionado = true
|
|
self.last_up = -0.3
|
|
self:SetScript ("OnUpdate", function (self, elapsed)
|
|
self.last_up = self.last_up + elapsed
|
|
if (self.last_up > 0.03) then
|
|
self.last_up = 0
|
|
A = instancia.barraS[1]
|
|
if (A > 1) then
|
|
scrollbar:SetValue (scrollbar:GetValue() + instancia.row_height*2)
|
|
else
|
|
self:Disable()
|
|
end
|
|
end
|
|
end)
|
|
end)
|
|
|
|
main_frame.button_up:SetScript ("OnMouseUp", function (self)
|
|
self.precionado = false
|
|
self:SetScript ("OnUpdate", nil)
|
|
end)
|
|
|
|
main_frame.button_up:SetScript ("OnEnable", function (self)
|
|
local current = scrollbar:GetValue()
|
|
if (current == 0) then
|
|
main_frame.button_up:Disable()
|
|
end
|
|
end)
|
|
end
|
|
|
|
function DetailsKeyBindScrollUp()
|
|
|
|
local last_key_pressed = _detalhes.KeyBindScrollUpLastPressed or GetTime()-0.3
|
|
|
|
local to_top = false
|
|
if (last_key_pressed+0.2 > GetTime()) then
|
|
to_top = true
|
|
end
|
|
|
|
_detalhes.KeyBindScrollUpLastPressed = GetTime()
|
|
|
|
for index, instance in ipairs (_detalhes.tabela_instancias) do
|
|
if (instance:IsEnabled()) then
|
|
|
|
local scrollbar = instance.scroll
|
|
|
|
local A = instance.barraS[1]
|
|
if (A and A > 1) then
|
|
if (to_top) then
|
|
scrollbar:SetValue (0)
|
|
scrollbar.ultimo = 0
|
|
instance.baseframe.button_up:Disable()
|
|
else
|
|
scrollbar:SetValue (scrollbar:GetValue() - instance.row_height*2)
|
|
end
|
|
elseif (A) then
|
|
scrollbar:SetValue (0)
|
|
scrollbar.ultimo = 0
|
|
instance.baseframe.button_up:Disable()
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
|
|
function DetailsKeyBindScrollDown()
|
|
for index, instance in ipairs (_detalhes.tabela_instancias) do
|
|
if (instance:IsEnabled()) then
|
|
|
|
local scrollbar = instance.scroll
|
|
|
|
local B = instance.barraS[2]
|
|
if (B and B < instance.rows_showing) then
|
|
scrollbar:SetValue (scrollbar:GetValue() + instance.row_height*2)
|
|
elseif (B) then
|
|
local _, maxValue = scrollbar:GetMinMaxValues()
|
|
scrollbar:SetValue (maxValue)
|
|
scrollbar.ultimo = maxValue
|
|
instance.baseframe.button_down:Disable()
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
|
|
local function iterate_scroll_scripts (backgrounddisplay, backgroundframe, baseframe, scrollbar, instancia)
|
|
|
|
baseframe:SetScript ("OnMouseWheel",
|
|
function (self, delta)
|
|
if (delta > 0) then --> rolou pra cima
|
|
local A = instancia.barraS[1]
|
|
if (A) then
|
|
if (A > 1) then
|
|
scrollbar:SetValue (scrollbar:GetValue() - instancia.row_height * _detalhes.scroll_speed)
|
|
else
|
|
scrollbar:SetValue (0)
|
|
scrollbar.ultimo = 0
|
|
baseframe.button_up:Disable()
|
|
end
|
|
end
|
|
elseif (delta < 0) then --> rolou pra baixo
|
|
local B = instancia.barraS[2]
|
|
if (B) then
|
|
if (B < (instancia.rows_showing or 0)) then
|
|
scrollbar:SetValue (scrollbar:GetValue() + instancia.row_height * _detalhes.scroll_speed)
|
|
else
|
|
local _, maxValue = scrollbar:GetMinMaxValues()
|
|
scrollbar:SetValue (maxValue)
|
|
scrollbar.ultimo = maxValue
|
|
baseframe.button_down:Disable()
|
|
end
|
|
end
|
|
end
|
|
|
|
end)
|
|
|
|
scrollbar:SetScript ("OnValueChanged", function (self)
|
|
local ultimo = self.ultimo
|
|
local meu_valor = self:GetValue()
|
|
if (ultimo == meu_valor) then --> n�o mudou
|
|
return
|
|
end
|
|
|
|
--> shortcut
|
|
local minValue, maxValue = scrollbar:GetMinMaxValues()
|
|
if (minValue == meu_valor) then
|
|
instancia.barraS[1] = 1
|
|
instancia.barraS[2] = instancia.rows_fit_in_window
|
|
instancia:RefreshMainWindow (instancia, true)
|
|
self.ultimo = meu_valor
|
|
baseframe.button_up:Disable()
|
|
return
|
|
elseif (maxValue == meu_valor) then
|
|
local min = (instancia.rows_showing or 0) -instancia.rows_fit_in_window
|
|
min = min+1
|
|
if (min < 1) then
|
|
min = 1
|
|
end
|
|
instancia.barraS[1] = min
|
|
instancia.barraS[2] = (instancia.rows_showing or 0)
|
|
instancia:RefreshMainWindow (instancia, true)
|
|
self.ultimo = meu_valor
|
|
baseframe.button_down:Disable()
|
|
return
|
|
end
|
|
|
|
if (not baseframe.button_up:IsEnabled()) then
|
|
baseframe.button_up:Enable()
|
|
end
|
|
if (not baseframe.button_down:IsEnabled()) then
|
|
baseframe.button_down:Enable()
|
|
end
|
|
|
|
if (meu_valor > ultimo) then --> scroll down
|
|
|
|
local B = instancia.barraS[2]
|
|
if (B < (instancia.rows_showing or 0)) then --> se o valor maximo n�o for o m�ximo de barras a serem mostradas
|
|
local precisa_passar = ((B+1) * instancia.row_height) - (instancia.row_height*instancia.rows_fit_in_window)
|
|
--if (meu_valor > precisa_passar) then --> o valor atual passou o valor que precisa passar pra locomover
|
|
if (true) then --> testing by pass row check
|
|
local diff = meu_valor - ultimo --> pega a diferen�a de H
|
|
diff = diff / instancia.row_height --> calcula quantas barras ele pulou
|
|
diff = _math_ceil (diff) --> arredonda para cima
|
|
if (instancia.barraS[2]+diff > (instancia.rows_showing or 0) and ultimo > 0) then
|
|
instancia.barraS[1] = (instancia.rows_showing or 0) - (instancia.rows_fit_in_window-1)
|
|
instancia.barraS[2] = (instancia.rows_showing or 0)
|
|
else
|
|
instancia.barraS[2] = instancia.barraS[2]+diff
|
|
instancia.barraS[1] = instancia.barraS[1]+diff
|
|
end
|
|
instancia:RefreshMainWindow (instancia, true)
|
|
end
|
|
end
|
|
else --> scroll up
|
|
local A = instancia.barraS[1]
|
|
if (A > 1) then
|
|
local precisa_passar = (A-1) * instancia.row_height
|
|
--if (meu_valor < precisa_passar) then
|
|
if (true) then --> testing by pass row check
|
|
--> calcula quantas barras passou
|
|
local diff = ultimo - meu_valor
|
|
diff = diff / instancia.row_height
|
|
diff = _math_ceil (diff)
|
|
if (instancia.barraS[1]-diff < 1) then
|
|
instancia.barraS[2] = instancia.rows_fit_in_window
|
|
instancia.barraS[1] = 1
|
|
else
|
|
instancia.barraS[2] = instancia.barraS[2]-diff
|
|
instancia.barraS[1] = instancia.barraS[1]-diff
|
|
end
|
|
|
|
instancia:RefreshMainWindow (instancia, true)
|
|
end
|
|
end
|
|
end
|
|
self.ultimo = meu_valor
|
|
end)
|
|
end
|
|
|
|
function _detalhes:HaveInstanceAlert()
|
|
return self.alert:IsShown()
|
|
end
|
|
|
|
function _detalhes:InstanceAlertTime (instance)
|
|
instance.alert:Hide()
|
|
instance.alert.rotate:Stop()
|
|
instance.alert_time = nil
|
|
end
|
|
|
|
local hide_click_func = function()
|
|
--empty
|
|
end
|
|
|
|
function _detalhes:InstanceAlert (msg, icon, time, clickfunc, doflash, forceAlert)
|
|
|
|
if (not forceAlert and _detalhes.streamer_config.no_alerts) then
|
|
--return
|
|
end
|
|
|
|
if (not self.meu_id) then
|
|
local lower = _detalhes:GetLowerInstanceNumber()
|
|
if (lower) then
|
|
self = _detalhes:GetInstance (lower)
|
|
else
|
|
return
|
|
end
|
|
end
|
|
|
|
if (type (msg) == "boolean" and not msg) then
|
|
self.alert:Hide()
|
|
self.alert.rotate:Stop()
|
|
self.alert_time = nil
|
|
return
|
|
end
|
|
|
|
if (msg) then
|
|
self.alert.text:SetText (msg)
|
|
else
|
|
self.alert.text:SetText ("")
|
|
end
|
|
|
|
if (icon) then
|
|
if (type (icon) == "table") then
|
|
local texture, w, h, animate, left, right, top, bottom, r, g, b, a = unpack (icon)
|
|
|
|
self.alert.icon:SetTexture (texture)
|
|
self.alert.icon:SetWidth (w or 14)
|
|
self.alert.icon:SetHeight (h or 14)
|
|
if (left and right and top and bottom) then
|
|
self.alert.icon:SetTexCoord (left, right, top, bottom)
|
|
end
|
|
if (animate) then
|
|
self.alert.rotate:Play()
|
|
end
|
|
if (r and g and b) then
|
|
self.alert.icon:SetVertexColor (r, g, b, a or 1)
|
|
end
|
|
else
|
|
self.alert.icon:SetWidth (14)
|
|
self.alert.icon:SetHeight (14)
|
|
self.alert.icon:SetTexture (icon)
|
|
self.alert.icon:SetVertexColor (1, 1, 1, 1)
|
|
self.alert.icon:SetTexCoord (0, 1, 0, 1)
|
|
end
|
|
else
|
|
self.alert.icon:SetTexture (nil)
|
|
end
|
|
|
|
self.alert.button.func = nil
|
|
wipe (self.alert.button.func_param)
|
|
|
|
if (clickfunc) then
|
|
self.alert.button.func = clickfunc[1]
|
|
self.alert.button.func_param = {unpack (clickfunc, 2)}
|
|
end
|
|
|
|
time = time or 15
|
|
self.alert_time = time
|
|
_detalhes:ScheduleTimer ("InstanceAlertTime", time, self)
|
|
|
|
self.alert:SetPoint ("bottom", self.baseframe, "bottom", 0, -12)
|
|
self.alert:SetPoint ("left", self.baseframe, "left", 3, 0)
|
|
self.alert:SetPoint ("right", self.baseframe, "right", -3, 0)
|
|
|
|
self.alert:SetFrameStrata ("TOOLTIP")
|
|
self.alert.button:SetFrameStrata ("TOOLTIP")
|
|
|
|
self.alert:Show()
|
|
|
|
if (doflash) then
|
|
self.alert:DoFlash()
|
|
end
|
|
|
|
self.alert:Play()
|
|
|
|
end
|
|
|
|
local alert_on_click = function (self, button)
|
|
if (self.func) then
|
|
local okey, errortext = pcall (self.func, unpack (self.func_param))
|
|
if (not okey) then
|
|
_detalhes:Msg ("error on alert function:", errortext)
|
|
end
|
|
end
|
|
self:GetParent():Hide()
|
|
end
|
|
|
|
local function CreateAlertFrame (baseframe, instancia)
|
|
|
|
local frame_upper = CreateFrame ("scrollframe", "DetailsAlertFrameScroll" .. instancia.meu_id, baseframe)
|
|
frame_upper:SetPoint ("bottom", baseframe, "bottom")
|
|
frame_upper:SetPoint ("left", baseframe, "left", 3, 0)
|
|
frame_upper:SetPoint ("right", baseframe, "right", -3, 0)
|
|
frame_upper:SetHeight (13)
|
|
frame_upper:SetFrameStrata ("TOOLTIP")
|
|
|
|
local frame_lower = CreateFrame ("frame", "DetailsAlertFrameScrollChild" .. instancia.meu_id, frame_upper)
|
|
frame_lower:SetHeight (25)
|
|
frame_lower:SetPoint ("left", frame_upper, "left")
|
|
frame_lower:SetPoint ("right", frame_upper, "right")
|
|
frame_upper:SetScrollChild (frame_lower)
|
|
|
|
local alert_bg = CreateFrame ("frame", "DetailsAlertFrame" .. instancia.meu_id, frame_lower,"BackdropTemplate")
|
|
alert_bg:SetPoint ("bottom", baseframe, "bottom")
|
|
alert_bg:SetPoint ("left", baseframe, "left", 3, 0)
|
|
alert_bg:SetPoint ("right", baseframe, "right", -3, 0)
|
|
alert_bg:SetHeight (12)
|
|
alert_bg:SetBackdrop ({bgFile = [[Interface\AddOns\Details\images\background]], tile = true, tileSize = 16,
|
|
insets = {left = 0, right = 0, top = 0, bottom = 0}})
|
|
alert_bg:SetBackdropColor (.1, .1, .1, 1)
|
|
alert_bg:SetFrameStrata ("FULLSCREEN")
|
|
alert_bg:SetFrameLevel (baseframe:GetFrameLevel() + 6)
|
|
alert_bg:Hide()
|
|
|
|
local toptexture = alert_bg:CreateTexture (nil, "background")
|
|
toptexture:SetTexture ([[Interface\Challenges\challenges-main]])
|
|
--toptexture:SetTexCoord (0.1921484375, 0.523671875, 0.234375, 0.160859375)
|
|
toptexture:SetTexCoord (0.231171875, 0.4846484375, 0.0703125, 0.072265625)
|
|
toptexture:SetPoint ("left", alert_bg, "left")
|
|
toptexture:SetPoint ("right", alert_bg, "right")
|
|
toptexture:SetPoint ("bottom", alert_bg, "top", 0, 0)
|
|
toptexture:SetHeight (1)
|
|
|
|
local text = alert_bg:CreateFontString (nil, "overlay", "GameFontNormal")
|
|
text:SetPoint ("right", alert_bg, "right", -14, 0)
|
|
_detalhes:SetFontSize (text, 10)
|
|
text:SetTextColor (1, 1, 1, 0.8)
|
|
|
|
local rotate_frame = CreateFrame ("frame", "DetailsAlertFrameRotate" .. instancia.meu_id, alert_bg)
|
|
rotate_frame:SetWidth (12)
|
|
rotate_frame:SetPoint ("right", alert_bg, "right", -2, 0)
|
|
rotate_frame:SetHeight (alert_bg:GetWidth())
|
|
rotate_frame:SetFrameStrata ("FULLSCREEN")
|
|
|
|
local icon = rotate_frame:CreateTexture (nil, "overlay")
|
|
icon:SetPoint ("center", rotate_frame, "center")
|
|
icon:SetWidth (14)
|
|
icon:SetHeight (14)
|
|
|
|
local button = CreateFrame ("button", "DetailsInstance"..instancia.meu_id.."AlertButton", alert_bg)
|
|
button:SetAllPoints()
|
|
button:SetFrameStrata ("FULLSCREEN")
|
|
button:SetScript ("OnClick", alert_on_click)
|
|
button._instance = instancia
|
|
button.func_param = {}
|
|
|
|
local RotateAnimGroup = rotate_frame:CreateAnimationGroup()
|
|
local rotate = RotateAnimGroup:CreateAnimation ("Rotation")
|
|
rotate:SetDegrees (360)
|
|
rotate:SetDuration (6)
|
|
RotateAnimGroup:SetLooping ("repeat")
|
|
|
|
alert_bg:Hide()
|
|
|
|
local anime = alert_bg:CreateAnimationGroup()
|
|
anime.group = anime:CreateAnimation ("Translation")
|
|
anime.group:SetDuration (0.15)
|
|
anime.group:SetOffset (0, 10)
|
|
anime:SetScript ("OnFinished", function(self)
|
|
alert_bg:Show()
|
|
alert_bg:SetPoint ("bottom", baseframe, "bottom", 0, 0)
|
|
alert_bg:SetPoint ("left", baseframe, "left", 3, 0)
|
|
alert_bg:SetPoint ("right", baseframe, "right", -3, 0)
|
|
end)
|
|
|
|
local on_enter_alert = function (self)
|
|
text:SetTextColor (1, 0.8, 0.3, 1)
|
|
icon:SetBlendMode ("ADD")
|
|
end
|
|
local on_leave_alert = function (self)
|
|
text:SetTextColor (1, 1, 1, 0.8)
|
|
icon:SetBlendMode ("BLEND")
|
|
end
|
|
|
|
button:SetScript ("OnEnter", on_enter_alert)
|
|
button:SetScript ("OnLeave", on_leave_alert)
|
|
|
|
function alert_bg:Play()
|
|
anime:Play()
|
|
end
|
|
|
|
local flash_texture = button:CreateTexture (nil, "overlay")
|
|
flash_texture:SetTexCoord (53/512, 347/512, 58/256, 120/256)
|
|
flash_texture:SetTexture ([[Interface\AchievementFrame\UI-Achievement-Alert-Glow]])
|
|
flash_texture:SetAllPoints()
|
|
flash_texture:SetBlendMode ("ADD")
|
|
local animation = flash_texture:CreateAnimationGroup()
|
|
local anim1 = animation:CreateAnimation ("ALPHA")
|
|
local anim2 = animation:CreateAnimation ("ALPHA")
|
|
anim1:SetOrder (1)
|
|
|
|
anim1:SetFromAlpha (0)
|
|
anim1:SetToAlpha (1)
|
|
|
|
anim1:SetDuration (0.1)
|
|
anim2:SetOrder (2)
|
|
|
|
anim1:SetFromAlpha (1)
|
|
anim1:SetToAlpha (0)
|
|
|
|
anim2:SetDuration (0.2)
|
|
animation:SetScript ("OnFinished", function (self)
|
|
flash_texture:Hide()
|
|
end)
|
|
flash_texture:Hide()
|
|
|
|
local do_flash = function()
|
|
flash_texture:Show()
|
|
animation:Play()
|
|
end
|
|
|
|
function alert_bg:DoFlash()
|
|
C_Timer.After (0.23, do_flash)
|
|
end
|
|
|
|
alert_bg.text = text
|
|
alert_bg.icon = icon
|
|
alert_bg.button = button
|
|
alert_bg.rotate = RotateAnimGroup
|
|
|
|
instancia.alert = alert_bg
|
|
|
|
return alert_bg
|
|
end
|
|
|
|
function _detalhes:InstanceMsg (text, icon, textcolor, iconcoords, iconcolor)
|
|
if (not text) then
|
|
self.freeze_icon:Hide()
|
|
return self.freeze_texto:Hide()
|
|
end
|
|
|
|
self.freeze_texto:SetText (text)
|
|
self.freeze_icon:SetTexture (icon or [[Interface\CHARACTERFRAME\Disconnect-Icon]])
|
|
|
|
self.freeze_icon:Show()
|
|
self.freeze_texto:Show()
|
|
|
|
if (textcolor) then
|
|
local r, g, b, a = gump:ParseColors (textcolor)
|
|
self.freeze_texto:SetTextColor (r, g, b, a)
|
|
else
|
|
self.freeze_texto:SetTextColor (1, 1, 1, 1)
|
|
end
|
|
|
|
if (iconcoords and type (iconcoords) == "table") then
|
|
self.freeze_icon:SetTexCoord (_unpack (iconcoords))
|
|
else
|
|
self.freeze_icon:SetTexCoord (0, 1, 0, 1)
|
|
end
|
|
|
|
if (iconcolor) then
|
|
local r, g, b, a = gump:ParseColors (iconcolor)
|
|
self.freeze_icon:SetVertexColor (r, g, b, a)
|
|
else
|
|
self.freeze_icon:SetVertexColor (1, 1, 1, 1)
|
|
end
|
|
end
|
|
|
|
function _detalhes:schedule_hide_anti_overlap (self)
|
|
self:Hide()
|
|
self.schdule = nil
|
|
end
|
|
local function hide_anti_overlap (self)
|
|
if (self.schdule) then
|
|
_detalhes:CancelTimer (self.schdule)
|
|
self.schdule = nil
|
|
end
|
|
local schdule = _detalhes:ScheduleTimer ("schedule_hide_anti_overlap", 0.3, self)
|
|
self.schdule = schdule
|
|
end
|
|
|
|
local function show_anti_overlap (instance, host, side)
|
|
|
|
local anti_menu_overlap = instance.baseframe.anti_menu_overlap
|
|
|
|
if (anti_menu_overlap.schdule) then
|
|
_detalhes:CancelTimer (anti_menu_overlap.schdule)
|
|
anti_menu_overlap.schdule = nil
|
|
end
|
|
|
|
anti_menu_overlap:ClearAllPoints()
|
|
if (side == "top") then
|
|
anti_menu_overlap:SetPoint ("bottom", host, "top")
|
|
elseif (side == "bottom") then
|
|
anti_menu_overlap:SetPoint ("top", host, "bottom")
|
|
end
|
|
anti_menu_overlap:Show()
|
|
end
|
|
|
|
_detalhes.snap_alert = CreateFrame ("frame", "DetailsSnapAlertFrame", UIParent, "ActionBarButtonSpellActivationAlert")
|
|
_detalhes.snap_alert:Hide()
|
|
_detalhes.snap_alert:SetFrameStrata ("FULLSCREEN")
|
|
|
|
function _detalhes:SnapAlert()
|
|
_detalhes.snap_alert:ClearAllPoints()
|
|
_detalhes.snap_alert:SetPoint ("topleft", self.baseframe.cabecalho.modo_selecao.widget, "topleft", -8, 6)
|
|
_detalhes.snap_alert:SetPoint ("bottomright", self.baseframe.cabecalho.modo_selecao.widget, "bottomright", 8, -6)
|
|
_detalhes.snap_alert.animOut:Stop()
|
|
_detalhes.snap_alert.animIn:Play()
|
|
end
|
|
|
|
do
|
|
|
|
--search key: ~tooltip
|
|
local tooltip_anchor = CreateFrame ("frame", "DetailsTooltipAnchor", UIParent,"BackdropTemplate")
|
|
tooltip_anchor:SetSize (140, 20)
|
|
tooltip_anchor:SetAlpha (0)
|
|
tooltip_anchor:SetMovable (false)
|
|
tooltip_anchor:SetClampedToScreen (true)
|
|
tooltip_anchor.locked = true
|
|
tooltip_anchor:SetBackdrop ({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], edgeFile = [[Interface\DialogFrame\UI-DialogBox-Border]], edgeSize = 10, insets = {left = 1, right = 1, top = 2, bottom = 1}})
|
|
tooltip_anchor:SetBackdropColor (0, 0, 0, 1)
|
|
|
|
tooltip_anchor:SetScript ("OnEnter", function (self)
|
|
tooltip_anchor.alert.animIn:Stop()
|
|
tooltip_anchor.alert.animOut:Play()
|
|
GameTooltip:SetOwner (self, "ANCHOR_TOPLEFT")
|
|
GameTooltip:ClearLines()
|
|
GameTooltip:AddLine (Loc ["STRING_OPTIONS_TOOLTIPS_ANCHOR_TEXT_DESC"])
|
|
GameTooltip:Show()
|
|
end)
|
|
|
|
tooltip_anchor:SetScript ("OnLeave", function (self)
|
|
GameTooltip:Hide()
|
|
end)
|
|
|
|
tooltip_anchor:SetScript ("OnMouseDown", function (self, button)
|
|
if (not self.moving and button == "LeftButton") then
|
|
self:StartMoving()
|
|
self.moving = true
|
|
end
|
|
end)
|
|
|
|
tooltip_anchor:SetScript ("OnMouseUp", function (self, button)
|
|
if (self.moving) then
|
|
self:StopMovingOrSizing()
|
|
self.moving = false
|
|
local xofs, yofs = self:GetCenter()
|
|
local scale = self:GetEffectiveScale()
|
|
local UIscale = UIParent:GetScale()
|
|
xofs = xofs * scale - GetScreenWidth() * UIscale / 2
|
|
yofs = yofs * scale - GetScreenHeight() * UIscale / 2
|
|
_detalhes.tooltip.anchor_screen_pos[1] = xofs / UIscale
|
|
_detalhes.tooltip.anchor_screen_pos[2] = yofs / UIscale
|
|
|
|
elseif (button == "RightButton" and not self.moving) then
|
|
tooltip_anchor:MoveAnchor()
|
|
end
|
|
end)
|
|
|
|
function tooltip_anchor:MoveAnchor()
|
|
if (self.locked) then
|
|
self:SetAlpha (1)
|
|
self:EnableMouse (true)
|
|
self:SetMovable (true)
|
|
self:SetFrameStrata ("FULLSCREEN")
|
|
self.locked = false
|
|
tooltip_anchor.alert.animOut:Stop()
|
|
tooltip_anchor.alert.animIn:Play()
|
|
else
|
|
self:SetAlpha (0)
|
|
self:EnableMouse (false)
|
|
self:SetFrameStrata ("MEDIUM")
|
|
self:SetMovable (false)
|
|
self.locked = true
|
|
tooltip_anchor.alert.animIn:Stop()
|
|
tooltip_anchor.alert.animOut:Play()
|
|
end
|
|
end
|
|
|
|
function tooltip_anchor:Restore()
|
|
local x, y = _detalhes.tooltip.anchor_screen_pos[1], _detalhes.tooltip.anchor_screen_pos[2]
|
|
local scale = self:GetEffectiveScale()
|
|
local UIscale = UIParent:GetScale()
|
|
x = x * UIscale / scale
|
|
y = y * UIscale / scale
|
|
self:ClearAllPoints()
|
|
self:SetParent (UIParent)
|
|
self:SetPoint ("center", UIParent, "center", x, y)
|
|
end
|
|
|
|
tooltip_anchor.alert = CreateFrame ("frame", "DetailsTooltipAnchorAlert", UIParent, "ActionBarButtonSpellActivationAlert")
|
|
tooltip_anchor.alert:SetFrameStrata ("FULLSCREEN")
|
|
tooltip_anchor.alert:Hide()
|
|
tooltip_anchor.alert:SetPoint ("topleft", tooltip_anchor, "topleft", -60, 6)
|
|
tooltip_anchor.alert:SetPoint ("bottomright", tooltip_anchor, "bottomright", 40, -6)
|
|
|
|
local icon = tooltip_anchor:CreateTexture (nil, "overlay")
|
|
icon:SetTexture ([[Interface\AddOns\Details\images\minimap]])
|
|
icon:SetPoint ("left", tooltip_anchor, "left", 4, 0)
|
|
icon:SetSize (18, 18)
|
|
|
|
local text = tooltip_anchor:CreateFontString (nil, "overlay", "GameFontHighlightSmall")
|
|
text:SetPoint ("left", icon, "right", 6, 0)
|
|
text:SetText (Loc ["STRING_OPTIONS_TOOLTIPS_ANCHOR_TEXT"])
|
|
|
|
tooltip_anchor:EnableMouse (false)
|
|
|
|
end
|
|
|
|
--> ~inicio ~janela ~window ~nova ~start
|
|
function gump:CriaJanelaPrincipal (ID, instancia, criando)
|
|
|
|
-- main frames -----------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
--> create the base frame, everything connect in this frame except the rows.
|
|
local baseframe = CreateFrame ("scrollframe", "DetailsBaseFrame"..ID, _UIParent,"BackdropTemplate") --
|
|
baseframe:SetMovable (true)
|
|
baseframe:SetResizable (true)
|
|
baseframe:SetUserPlaced (false)
|
|
baseframe:SetDontSavePosition (true)
|
|
|
|
baseframe.instance = instancia
|
|
baseframe:SetFrameStrata (baseframe_strata)
|
|
baseframe:SetFrameLevel (2)
|
|
|
|
--> background holds the wallpaper, alert strings ans textures, have setallpoints on baseframe
|
|
--> backgrounddisplay is a scrollschild of backgroundframe
|
|
local backgroundframe = CreateFrame ("scrollframe", "Details_WindowFrame"..ID, baseframe) --window frame
|
|
local backgrounddisplay = CreateFrame ("frame", "Details_GumpFrame"..ID, backgroundframe,"BackdropTemplate") --gump frame
|
|
backgroundframe:SetFrameLevel (3)
|
|
backgrounddisplay:SetFrameLevel (3)
|
|
backgroundframe.instance = instancia
|
|
backgrounddisplay.instance = instancia
|
|
instancia.windowBackgroundDisplay = backgrounddisplay
|
|
|
|
--> row frame is the parent of rows, it have setallpoints on baseframe
|
|
local rowframe = CreateFrame ("frame", "DetailsRowFrame"..ID, _UIParent) --row frame
|
|
rowframe:SetAllPoints (baseframe)
|
|
rowframe:SetFrameStrata (baseframe_strata)
|
|
rowframe:SetFrameLevel (3)
|
|
rowframe:EnableMouse(false)
|
|
instancia.rowframe = rowframe
|
|
|
|
--> right click bookmark
|
|
local switchbutton = CreateFrame("button", "Details_SwitchButtonFrame" .. ID, UIParent)
|
|
switchbutton:SetAllPoints (baseframe)
|
|
switchbutton:SetFrameStrata (baseframe_strata)
|
|
switchbutton:SetFrameLevel (4)
|
|
instancia.windowSwitchButton = switchbutton
|
|
|
|
--> avoid mouse hover over a high window when the menu is open for a lower instance.
|
|
local anti_menu_overlap = CreateFrame ("frame", "Details_WindowFrameAntiMenuOverlap" .. ID, UIParent)
|
|
anti_menu_overlap:SetSize (100, 13)
|
|
anti_menu_overlap:SetFrameStrata ("DIALOG")
|
|
anti_menu_overlap:EnableMouse (true)
|
|
anti_menu_overlap:Hide()
|
|
--anti_menu_overlap:SetBackdrop (gump_fundo_backdrop) --debug
|
|
baseframe.anti_menu_overlap = anti_menu_overlap
|
|
|
|
--> floating frame is an anchor for widgets which should be overlaying the window
|
|
local floatingframe = CreateFrame ("frame", "DetailsInstance"..ID.."BorderHolder", baseframe)
|
|
floatingframe:SetFrameLevel (baseframe:GetFrameLevel()+7)
|
|
instancia.floatingframe = floatingframe
|
|
|
|
-- scroll bar -----------------------------------------------------------------------------------------------------------------------------------------------
|
|
--> create the scrollbar, almost not used.
|
|
|
|
local scrollbar = CreateFrame ("slider", "Details_ScrollBar"..ID, backgrounddisplay) --> scroll
|
|
|
|
--> scroll image-node up
|
|
baseframe.scroll_up = backgrounddisplay:CreateTexture (nil, "background")
|
|
baseframe.scroll_up:SetPoint ("topleft", backgrounddisplay, "topright", 0, 0)
|
|
baseframe.scroll_up:SetTexture (DEFAULT_SKIN)
|
|
baseframe.scroll_up:SetTexCoord (unpack (COORDS_SLIDER_TOP))
|
|
baseframe.scroll_up:SetWidth (32)
|
|
baseframe.scroll_up:SetHeight (32)
|
|
|
|
--> scroll image-node down
|
|
baseframe.scroll_down = backgrounddisplay:CreateTexture (nil, "background")
|
|
baseframe.scroll_down:SetPoint ("bottomleft", backgrounddisplay, "bottomright", 0, 0)
|
|
baseframe.scroll_down:SetTexture (DEFAULT_SKIN)
|
|
baseframe.scroll_down:SetTexCoord (unpack (COORDS_SLIDER_DOWN))
|
|
baseframe.scroll_down:SetWidth (32)
|
|
baseframe.scroll_down:SetHeight (32)
|
|
|
|
--> scroll image-node middle
|
|
baseframe.scroll_middle = backgrounddisplay:CreateTexture (nil, "background")
|
|
baseframe.scroll_middle:SetPoint ("top", baseframe.scroll_up, "bottom", 0, 8)
|
|
baseframe.scroll_middle:SetPoint ("bottom", baseframe.scroll_down, "top", 0, -11)
|
|
baseframe.scroll_middle:SetTexture (DEFAULT_SKIN)
|
|
baseframe.scroll_middle:SetTexCoord (unpack (COORDS_SLIDER_MIDDLE))
|
|
baseframe.scroll_middle:SetWidth (32)
|
|
baseframe.scroll_middle:SetHeight (64)
|
|
|
|
--> scroll widgets
|
|
baseframe.button_up = CreateFrame ("button", "DetailsScrollUp" .. instancia.meu_id, backgrounddisplay)
|
|
baseframe.button_down = CreateFrame ("button", "DetailsScrollDown" .. instancia.meu_id, backgrounddisplay)
|
|
|
|
baseframe.button_up:SetWidth (29)
|
|
baseframe.button_up:SetHeight (32)
|
|
baseframe.button_up:SetNormalTexture ([[Interface\BUTTONS\UI-ScrollBar-ScrollUpButton-Up]])
|
|
baseframe.button_up:SetPushedTexture ([[Interface\BUTTONS\UI-ScrollBar-ScrollUpButton-Down]])
|
|
baseframe.button_up:SetDisabledTexture ([[Interface\BUTTONS\UI-ScrollBar-ScrollUpButton-Disabled]])
|
|
baseframe.button_up:Disable()
|
|
|
|
baseframe.button_down:SetWidth (29)
|
|
baseframe.button_down:SetHeight (32)
|
|
baseframe.button_down:SetNormalTexture ([[Interface\BUTTONS\UI-ScrollBar-ScrollDownButton-Up]])
|
|
baseframe.button_down:SetPushedTexture ([[Interface\BUTTONS\UI-ScrollBar-ScrollDownButton-Down]])
|
|
baseframe.button_down:SetDisabledTexture ([[Interface\BUTTONS\UI-ScrollBar-ScrollDownButton-Disabled]])
|
|
baseframe.button_down:Disable()
|
|
|
|
baseframe.button_up:SetPoint ("topright", baseframe.scroll_up, "topright", -4, 3)
|
|
baseframe.button_down:SetPoint ("bottomright", baseframe.scroll_down, "bottomright", -4, -6)
|
|
|
|
scrollbar:SetPoint ("top", baseframe.button_up, "bottom", 0, 12)
|
|
scrollbar:SetPoint ("bottom", baseframe.button_down, "top", 0, -12)
|
|
scrollbar:SetPoint ("left", backgrounddisplay, "right", 3, 0)
|
|
scrollbar:Show()
|
|
|
|
--> config set
|
|
scrollbar:SetOrientation ("VERTICAL")
|
|
scrollbar.scrollMax = 0
|
|
scrollbar:SetMinMaxValues (0, 0)
|
|
scrollbar:SetValue (0)
|
|
scrollbar.ultimo = 0
|
|
|
|
--> thumb
|
|
scrollbar.thumb = scrollbar:CreateTexture (nil, "overlay")
|
|
scrollbar.thumb:SetTexture ([[Interface\Buttons\UI-ScrollBar-Knob]])
|
|
scrollbar.thumb:SetSize (29, 30)
|
|
scrollbar:SetThumbTexture (scrollbar.thumb)
|
|
|
|
--> scripts
|
|
button_down_scripts (baseframe, backgrounddisplay, instancia, scrollbar)
|
|
button_up_scripts (baseframe, backgrounddisplay, instancia, scrollbar)
|
|
|
|
-- stretch button -----------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
baseframe.button_stretch = CreateFrame ("button", "DetailsButtonStretch" .. instancia.meu_id, baseframe)
|
|
baseframe.button_stretch:SetPoint ("bottom", baseframe, "top", 0, 20)
|
|
baseframe.button_stretch:SetPoint ("right", baseframe, "right", -27, 0)
|
|
baseframe.button_stretch:SetFrameLevel (1)
|
|
|
|
local stretch_texture = baseframe.button_stretch:CreateTexture (nil, "overlay")
|
|
stretch_texture:SetTexture (DEFAULT_SKIN)
|
|
stretch_texture:SetTexCoord (unpack (COORDS_STRETCH))
|
|
stretch_texture:SetWidth (32)
|
|
stretch_texture:SetHeight (16)
|
|
stretch_texture:SetAllPoints (baseframe.button_stretch)
|
|
baseframe.button_stretch.texture = stretch_texture
|
|
|
|
baseframe.button_stretch:SetWidth (32)
|
|
baseframe.button_stretch:SetHeight (16)
|
|
|
|
baseframe.button_stretch:Show()
|
|
Details.FadeHandler.Fader (baseframe.button_stretch, "ALPHA", 0)
|
|
|
|
button_stretch_scripts (baseframe, backgrounddisplay, instancia)
|
|
|
|
-- main window config -------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
baseframe:SetClampedToScreen (true)
|
|
baseframe:SetSize (_detalhes.new_window_size.width, _detalhes.new_window_size.height)
|
|
|
|
baseframe:SetPoint ("center", _UIParent)
|
|
baseframe:EnableMouseWheel (false)
|
|
baseframe:EnableMouse (true)
|
|
baseframe:SetMinResize (150, 7)
|
|
baseframe:SetMaxResize (_detalhes.max_window_size.width, _detalhes.max_window_size.height)
|
|
|
|
baseframe:SetBackdrop (gump_fundo_backdrop)
|
|
baseframe:SetBackdropColor (instancia.bg_r, instancia.bg_g, instancia.bg_b, instancia.bg_alpha)
|
|
|
|
-- background window config -------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
backgroundframe:SetAllPoints (baseframe)
|
|
backgroundframe:SetScrollChild (backgrounddisplay)
|
|
|
|
backgrounddisplay:SetResizable (true)
|
|
backgrounddisplay:SetPoint ("topleft", baseframe, "topleft")
|
|
backgrounddisplay:SetPoint ("bottomright", baseframe, "bottomright")
|
|
backgrounddisplay:SetBackdrop (gump_fundo_backdrop)
|
|
backgrounddisplay:SetBackdropColor (instancia.bg_r, instancia.bg_g, instancia.bg_b, instancia.bg_alpha)
|
|
|
|
-- instance mini widgets -------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
--> overall data warning
|
|
instancia.overall_data_warning = backgrounddisplay:CreateFontString (nil, "overlay", "GameFontHighlightSmall")
|
|
instancia.overall_data_warning:SetHeight (64)
|
|
instancia.overall_data_warning:SetPoint ("center", backgrounddisplay, "center")
|
|
instancia.overall_data_warning:SetTextColor (.8, .8, .8, .5)
|
|
instancia.overall_data_warning:Hide()
|
|
instancia.overall_data_warning:SetText (Loc ["STRING_TUTORIAL_OVERALL1"])
|
|
|
|
--> freeze icon
|
|
instancia.freeze_icon = backgrounddisplay:CreateTexture (nil, "overlay")
|
|
instancia.freeze_icon:SetWidth (64)
|
|
instancia.freeze_icon:SetHeight (64)
|
|
instancia.freeze_icon:SetPoint ("center", backgrounddisplay, "center")
|
|
instancia.freeze_icon:SetPoint ("left", backgrounddisplay, "left")
|
|
instancia.freeze_icon:Hide()
|
|
|
|
instancia.freeze_texto = backgrounddisplay:CreateFontString (nil, "overlay", "GameFontHighlightSmall")
|
|
instancia.freeze_texto:SetHeight (64)
|
|
instancia.freeze_texto:SetPoint ("left", instancia.freeze_icon, "right", -18, 0)
|
|
instancia.freeze_texto:SetTextColor (1, 1, 1)
|
|
instancia.freeze_texto:Hide()
|
|
|
|
--> details version
|
|
instancia._version = baseframe:CreateFontString (nil, "overlay", "GameFontHighlightSmall")
|
|
--instancia._version:SetPoint ("left", backgrounddisplay, "left", 20, 0)
|
|
instancia._version:SetTextColor (1, 1, 1)
|
|
instancia._version:SetText ("this is a alpha version of Details\nyou can help us sending bug reports\nuse the blue button.")
|
|
if (not _detalhes.initializing) then
|
|
|
|
end
|
|
instancia._version:Hide()
|
|
|
|
|
|
--> wallpaper
|
|
baseframe.wallpaper = backgrounddisplay:CreateTexture (nil, "overlay")
|
|
baseframe.wallpaper:Hide()
|
|
|
|
--> alert frame
|
|
baseframe.alert = CreateAlertFrame (baseframe, instancia)
|
|
|
|
-- resizers & lock button ~lock ------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
--> right resizer
|
|
baseframe.resize_direita = CreateFrame ("button", "Details_Resize_Direita"..ID, baseframe)
|
|
|
|
local resize_direita_texture = baseframe.resize_direita:CreateTexture (nil, "overlay")
|
|
resize_direita_texture:SetWidth (16)
|
|
resize_direita_texture:SetHeight (16)
|
|
resize_direita_texture:SetTexture (DEFAULT_SKIN)
|
|
resize_direita_texture:SetTexCoord (unpack (COORDS_RESIZE_RIGHT))
|
|
resize_direita_texture:SetAllPoints (baseframe.resize_direita)
|
|
baseframe.resize_direita.texture = resize_direita_texture
|
|
|
|
baseframe.resize_direita:SetWidth (16)
|
|
baseframe.resize_direita:SetHeight (16)
|
|
baseframe.resize_direita:SetPoint ("bottomright", baseframe, "bottomright", 0, 0)
|
|
baseframe.resize_direita:EnableMouse (true)
|
|
baseframe.resize_direita:SetFrameStrata ("HIGH")
|
|
baseframe.resize_direita:SetFrameLevel (baseframe:GetFrameLevel() + 6)
|
|
baseframe.resize_direita.side = 2
|
|
|
|
--> lock window button
|
|
baseframe.lock_button = CreateFrame ("button", "Details_Lock_Button"..ID, baseframe)
|
|
baseframe.lock_button:SetPoint ("right", baseframe.resize_direita, "left", -1, 1.5)
|
|
baseframe.lock_button:SetFrameLevel (baseframe:GetFrameLevel() + 6)
|
|
baseframe.lock_button:SetWidth (40)
|
|
baseframe.lock_button:SetHeight (16)
|
|
baseframe.lock_button.label = baseframe.lock_button:CreateFontString (nil, "overlay", "GameFontNormal")
|
|
baseframe.lock_button.label:SetPoint ("right", baseframe.lock_button, "right")
|
|
baseframe.lock_button.label:SetTextColor (.6, .6, .6, .7)
|
|
baseframe.lock_button.label:SetJustifyH ("right")
|
|
baseframe.lock_button.label:SetText (Loc ["STRING_LOCK_WINDOW"])
|
|
baseframe.lock_button:SetWidth (baseframe.lock_button.label:GetStringWidth()+2)
|
|
baseframe.lock_button:SetScript ("OnClick", lockFunctionOnClick)
|
|
baseframe.lock_button:SetScript ("OnEnter", lockFunctionOnEnter)
|
|
baseframe.lock_button:SetScript ("OnLeave", lockFunctionOnLeave)
|
|
baseframe.lock_button:SetScript ("OnHide", lockFunctionOnHide)
|
|
baseframe.lock_button:SetFrameStrata ("HIGH")
|
|
baseframe.lock_button:SetFrameLevel (baseframe:GetFrameLevel() + 6)
|
|
baseframe.lock_button.instancia = instancia
|
|
|
|
--> left resizer
|
|
baseframe.resize_esquerda = CreateFrame ("button", "Details_Resize_Esquerda"..ID, baseframe)
|
|
|
|
local resize_esquerda_texture = baseframe.resize_esquerda:CreateTexture (nil, "overlay")
|
|
resize_esquerda_texture:SetWidth (16)
|
|
resize_esquerda_texture:SetHeight (16)
|
|
resize_esquerda_texture:SetTexture (DEFAULT_SKIN)
|
|
resize_esquerda_texture:SetTexCoord (unpack (COORDS_RESIZE_LEFT))
|
|
resize_esquerda_texture:SetAllPoints (baseframe.resize_esquerda)
|
|
baseframe.resize_esquerda.texture = resize_esquerda_texture
|
|
|
|
baseframe.resize_esquerda:SetWidth (16)
|
|
baseframe.resize_esquerda:SetHeight (16)
|
|
baseframe.resize_esquerda:SetPoint ("bottomleft", baseframe, "bottomleft", 0, 0)
|
|
baseframe.resize_esquerda:EnableMouse (true)
|
|
baseframe.resize_esquerda:SetFrameStrata ("HIGH")
|
|
baseframe.resize_esquerda:SetFrameLevel (baseframe:GetFrameLevel() + 6)
|
|
|
|
baseframe.resize_esquerda:SetAlpha (0)
|
|
baseframe.resize_direita:SetAlpha (0)
|
|
|
|
if (instancia.isLocked) then
|
|
instancia.isLocked = not instancia.isLocked
|
|
lockFunctionOnClick (baseframe.lock_button, nil, nil, true)
|
|
end
|
|
|
|
Details.FadeHandler.Fader (baseframe.lock_button, -1, 3.0)
|
|
|
|
-- scripts ------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
BFrame_scripts (baseframe, instancia) --baseframe
|
|
BGFrame_scripts (switchbutton, baseframe, instancia) --backgroundframe
|
|
BGFrame_scripts (backgrounddisplay, baseframe, instancia)
|
|
|
|
iterate_scroll_scripts (backgrounddisplay, backgroundframe, baseframe, scrollbar, instancia)
|
|
|
|
|
|
-- create toolbar ----------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
gump:CriaCabecalho (baseframe, instancia)
|
|
|
|
-- create statusbar ----------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
gump:CriaRodape (baseframe, instancia)
|
|
|
|
-- left and right side bars ------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
-- ~barra ~bordas ~border
|
|
|
|
--> left
|
|
baseframe.barra_esquerda = floatingframe:CreateTexture (nil, "artwork")
|
|
baseframe.barra_esquerda:SetTexture (DEFAULT_SKIN)
|
|
baseframe.barra_esquerda:SetTexCoord (unpack (COORDS_LEFT_SIDE_BAR))
|
|
baseframe.barra_esquerda:SetWidth (64)
|
|
baseframe.barra_esquerda:SetHeight (512)
|
|
baseframe.barra_esquerda:SetPoint ("topleft", baseframe, "topleft", -56, 0)
|
|
baseframe.barra_esquerda:SetPoint ("bottomleft", baseframe, "bottomleft", -56, -14)
|
|
--> right
|
|
baseframe.barra_direita = floatingframe:CreateTexture (nil, "artwork")
|
|
baseframe.barra_direita:SetTexture (DEFAULT_SKIN)
|
|
baseframe.barra_direita:SetTexCoord (unpack (COORDS_RIGHT_SIDE_BAR))
|
|
baseframe.barra_direita:SetWidth (64)
|
|
baseframe.barra_direita:SetHeight (512)
|
|
baseframe.barra_direita:SetPoint ("topright", baseframe, "topright", 56, 0)
|
|
baseframe.barra_direita:SetPoint ("bottomright", baseframe, "bottomright", 56, -14)
|
|
--> bottom
|
|
baseframe.barra_fundo = floatingframe:CreateTexture (nil, "artwork")
|
|
baseframe.barra_fundo:SetTexture (DEFAULT_SKIN)
|
|
baseframe.barra_fundo:SetTexCoord (unpack (COORDS_BOTTOM_SIDE_BAR))
|
|
baseframe.barra_fundo:SetWidth (512)
|
|
baseframe.barra_fundo:SetHeight (64)
|
|
baseframe.barra_fundo:SetPoint ("bottomleft", baseframe, "bottomleft", 0, -56)
|
|
baseframe.barra_fundo:SetPoint ("bottomright", baseframe, "bottomright", 0, -56)
|
|
|
|
-- break snap button ----------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
instancia.break_snap_button = CreateFrame ("button", "DetailsBreakSnapButton" .. ID, floatingframe)
|
|
instancia.break_snap_button:SetPoint ("bottom", baseframe.resize_direita, "top", -1, 0)
|
|
instancia.break_snap_button:SetFrameLevel (baseframe:GetFrameLevel() + 5)
|
|
instancia.break_snap_button:SetSize (13, 13)
|
|
instancia.break_snap_button:SetAlpha (0)
|
|
|
|
instancia.break_snap_button.instancia = instancia
|
|
|
|
instancia.break_snap_button:SetScript ("OnClick", function()
|
|
if (_detalhes.disable_lock_ungroup_buttons) then
|
|
return
|
|
end
|
|
instancia:Desagrupar (-1)
|
|
--> hide tutorial
|
|
if (DetailsWindowGroupPopUp1 and DetailsWindowGroupPopUp1:IsShown()) then
|
|
DetailsWindowGroupPopUp1:Hide()
|
|
end
|
|
end)
|
|
|
|
instancia.break_snap_button:SetScript ("OnEnter", unSnapButtonOnEnter)
|
|
instancia.break_snap_button:SetScript ("OnLeave", unSnapButtonOnLeave)
|
|
|
|
instancia.break_snap_button:SetNormalTexture (DEFAULT_SKIN)
|
|
instancia.break_snap_button:SetDisabledTexture (DEFAULT_SKIN)
|
|
instancia.break_snap_button:SetHighlightTexture (DEFAULT_SKIN, "ADD")
|
|
instancia.break_snap_button:SetPushedTexture (DEFAULT_SKIN)
|
|
|
|
instancia.break_snap_button:GetNormalTexture():SetTexCoord (unpack (COORDS_UNLOCK_BUTTON))
|
|
instancia.break_snap_button:GetDisabledTexture():SetTexCoord (unpack (COORDS_UNLOCK_BUTTON))
|
|
instancia.break_snap_button:GetHighlightTexture():SetTexCoord (unpack (COORDS_UNLOCK_BUTTON))
|
|
instancia.break_snap_button:GetPushedTexture():SetTexCoord (unpack (COORDS_UNLOCK_BUTTON))
|
|
|
|
-- scripts ------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
resize_scripts (baseframe.resize_direita, instancia, scrollbar, ">", baseframe)
|
|
resize_scripts (baseframe.resize_esquerda, instancia, scrollbar, "<", baseframe)
|
|
|
|
-- side bars highlights ------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
--> top
|
|
local fcima = CreateFrame ("frame", "DetailsTopSideBarHighlight" .. instancia.meu_id, floatingframe)
|
|
gump:CreateFlashAnimation (fcima)
|
|
fcima:Hide()
|
|
|
|
instancia.h_cima = fcima:CreateTexture (nil, "overlay")
|
|
instancia.h_cima:SetTexture ([[Interface\AddOns\Details\images\highlight_updown]])
|
|
instancia.h_cima:SetTexCoord (0, 1, 0.5, 1)
|
|
instancia.h_cima:SetPoint ("topleft", baseframe.cabecalho.top_bg, "bottomleft", -10, 37)
|
|
instancia.h_cima:SetPoint ("topright", baseframe.cabecalho.ball_r, "bottomright", -97, 37)
|
|
instancia.h_cima:SetDesaturated (true)
|
|
fcima.texture = instancia.h_cima
|
|
instancia.h_cima = fcima
|
|
|
|
--> bottom
|
|
local fbaixo = CreateFrame ("frame", "DetailsBottomSideBarHighlight" .. instancia.meu_id, floatingframe)
|
|
gump:CreateFlashAnimation (fbaixo)
|
|
fbaixo:Hide()
|
|
|
|
instancia.h_baixo = fbaixo:CreateTexture (nil, "overlay")
|
|
instancia.h_baixo:SetTexture ([[Interface\AddOns\Details\images\highlight_updown]])
|
|
instancia.h_baixo:SetTexCoord (0, 1, 0, 0.5)
|
|
instancia.h_baixo:SetPoint ("topleft", baseframe.rodape.esquerdo, "bottomleft", 16, 17)
|
|
instancia.h_baixo:SetPoint ("topright", baseframe.rodape.direita, "bottomright", -16, 17)
|
|
instancia.h_baixo:SetDesaturated (true)
|
|
fbaixo.texture = instancia.h_baixo
|
|
instancia.h_baixo = fbaixo
|
|
|
|
--> left
|
|
local fesquerda = CreateFrame ("frame", "DetailsLeftSideBarHighlight" .. instancia.meu_id, floatingframe)
|
|
gump:CreateFlashAnimation (fesquerda)
|
|
fesquerda:Hide()
|
|
|
|
instancia.h_esquerda = fesquerda:CreateTexture (nil, "overlay")
|
|
instancia.h_esquerda:SetTexture ([[Interface\AddOns\Details\images\highlight_leftright]])
|
|
instancia.h_esquerda:SetTexCoord (0.5, 1, 0, 1)
|
|
instancia.h_esquerda:SetPoint ("topleft", baseframe.barra_esquerda, "topleft", 40, 0)
|
|
instancia.h_esquerda:SetPoint ("bottomleft", baseframe.barra_esquerda, "bottomleft", 40, 0)
|
|
instancia.h_esquerda:SetDesaturated (true)
|
|
fesquerda.texture = instancia.h_esquerda
|
|
instancia.h_esquerda = fesquerda
|
|
|
|
--> right
|
|
local fdireita = CreateFrame ("frame", "DetailsRightSideBarHighlight" .. instancia.meu_id, floatingframe)
|
|
gump:CreateFlashAnimation (fdireita)
|
|
fdireita:Hide()
|
|
|
|
instancia.h_direita = fdireita:CreateTexture (nil, "overlay")
|
|
instancia.h_direita:SetTexture ([[Interface\AddOns\Details\images\highlight_leftright]])
|
|
instancia.h_direita:SetTexCoord (0, 0.5, 1, 0)
|
|
instancia.h_direita:SetPoint ("topleft", baseframe.barra_direita, "topleft", 8, 18)
|
|
instancia.h_direita:SetPoint ("bottomleft", baseframe.barra_direita, "bottomleft", 8, 0)
|
|
instancia.h_direita:SetDesaturated (true)
|
|
fdireita.texture = instancia.h_direita
|
|
instancia.h_direita = fdireita
|
|
|
|
--> done
|
|
|
|
if (criando) then
|
|
local CProps = {
|
|
["altura"] = 100,
|
|
["largura"] = 200,
|
|
["barras"] = 50,
|
|
["barrasvisiveis"] = 0,
|
|
["x"] = 0,
|
|
["y"] = 0,
|
|
["w"] = 0,
|
|
["h"] = 0
|
|
}
|
|
instancia.locs = CProps
|
|
end
|
|
|
|
return baseframe, backgroundframe, backgrounddisplay, scrollbar
|
|
|
|
end
|
|
|
|
function _detalhes:IsShowingOverallDataWarning()
|
|
return self.overall_data_warning:IsShown()
|
|
end
|
|
|
|
function _detalhes:ShowOverallDataWarning (state)
|
|
if (state) then
|
|
self.overall_data_warning:Show()
|
|
self.overall_data_warning:SetWidth (self:GetSize() - 20)
|
|
else
|
|
self.overall_data_warning:Hide()
|
|
end
|
|
end
|
|
|
|
|
|
function _detalhes:SetBarFollowPlayer (follow)
|
|
|
|
if (follow == nil) then
|
|
follow = self.following.enabled
|
|
end
|
|
|
|
self.following.enabled = follow
|
|
|
|
self:RefreshBars()
|
|
self:InstanceReset()
|
|
self:ReajustaGump()
|
|
end
|
|
|
|
function _detalhes:SetBarOrientationDirection (orientation)
|
|
if (orientation == nil) then
|
|
orientation = self.bars_inverted
|
|
end
|
|
|
|
self.bars_inverted = orientation
|
|
|
|
self:InstanceRefreshRows()
|
|
self:RefreshBars()
|
|
self:InstanceReset()
|
|
self:ReajustaGump()
|
|
end
|
|
|
|
function _detalhes:SetBarGrowDirection (direction)
|
|
if (not direction) then
|
|
direction = self.bars_grow_direction
|
|
end
|
|
|
|
self.bars_grow_direction = direction
|
|
local x = self.row_info.space.left
|
|
|
|
local bars = self.barras or self.Bars --> .Bars for third-party plugins
|
|
local baseframe = self.baseframe or self.Frame --> .Frame for plugins
|
|
local height = self.row_height
|
|
|
|
if (direction == 1) then --> top to bottom
|
|
for index, row in _ipairs (bars) do
|
|
local y = height * (index - 1)
|
|
y = y * -1
|
|
row:ClearAllPoints()
|
|
|
|
if (self.toolbar_side == 1) then
|
|
--> if titlebar is attached to the top side, don't add any midifiers
|
|
row:SetPoint ("topleft", baseframe, "topleft", x, y)
|
|
else
|
|
--> if the titlebar is on the bottom side, remove the gap between the baseframe and the titlebar
|
|
row:SetPoint ("topleft", baseframe, "topleft", x, y - 1)
|
|
end
|
|
end
|
|
|
|
elseif (direction == 2) then --> bottom to top
|
|
for index, row in _ipairs (bars) do
|
|
local y = height * (index - 1)
|
|
row:ClearAllPoints()
|
|
if (self.toolbar_side == 1) then
|
|
--> if the titlebar is attached to the top side, we want to align bars a little above
|
|
row:SetPoint ("bottomleft", baseframe, "bottomleft", x, y + 2)
|
|
else
|
|
--> the titlebar is on the bottom side, align bars on the bottom
|
|
row:SetPoint ("bottomleft", baseframe, "bottomleft", x, y + 0)
|
|
end
|
|
end
|
|
end
|
|
|
|
--> update all row width
|
|
if (self.bar_mod and self.bar_mod ~= 0) then
|
|
for index = 1, #bars do
|
|
bars [index]:SetWidth (baseframe:GetWidth() + self.bar_mod)
|
|
end
|
|
else
|
|
for index = 1, #bars do
|
|
bars [index]:SetWidth (baseframe:GetWidth() + self.row_info.space.right)
|
|
end
|
|
end
|
|
end
|
|
|
|
--> Alias
|
|
function gump:NewRow (instancia, index)
|
|
return gump:CreateNewLine (instancia, index)
|
|
end
|
|
|
|
_detalhes.barras_criadas = 0
|
|
|
|
--> search key: ~row ~barra
|
|
function gump:CreateNewLine (instancia, index)
|
|
|
|
--> instancia = window object, index = row number
|
|
local baseframe = instancia.baseframe
|
|
local rowframe = instancia.rowframe
|
|
|
|
--> create the bar with rowframe as parent
|
|
local new_row = CreateFrame ("button", "DetailsBarra_"..instancia.meu_id.."_"..index, rowframe,"BackdropTemplate")
|
|
|
|
new_row.row_id = index
|
|
new_row.instance_id = instancia.meu_id
|
|
new_row.animacao_fim = 0
|
|
new_row.animacao_fim2 = 0
|
|
|
|
--> set point, almost irrelevant here, it recalc this on SetBarGrowDirection()
|
|
local y = instancia.row_height * (index-1)
|
|
if (instancia.bars_grow_direction == 1) then
|
|
y = y*-1
|
|
new_row:SetPoint ("topleft", baseframe, "topleft", instancia.row_info.space.left, y)
|
|
|
|
elseif (instancia.bars_grow_direction == 2) then
|
|
new_row:SetPoint ("bottomleft", baseframe, "bottomleft", instancia.row_info.space.left, y + 2)
|
|
end
|
|
|
|
--> row height
|
|
new_row:SetHeight (instancia.row_info.height)
|
|
new_row:SetWidth (baseframe:GetWidth()+instancia.row_info.space.right)
|
|
new_row:SetFrameLevel (baseframe:GetFrameLevel() + 4)
|
|
new_row.last_value = 0
|
|
new_row.w_mod = 0
|
|
new_row:EnableMouse (true)
|
|
new_row:RegisterForClicks ("LeftButtonDown", "RightButtonDown")
|
|
|
|
--> statusbar
|
|
new_row.statusbar = CreateFrame ("StatusBar", "DetailsBarra_Statusbar_"..instancia.meu_id.."_"..index, new_row)
|
|
new_row.statusbar.value = 0
|
|
--> right to left texture
|
|
new_row.statusbar.right_to_left_texture = new_row.statusbar:CreateTexture (nil, "overlay")
|
|
new_row.statusbar.right_to_left_texture:SetPoint ("topright", new_row.statusbar, "topright")
|
|
new_row.statusbar.right_to_left_texture:SetPoint ("bottomright", new_row.statusbar, "bottomright")
|
|
new_row.statusbar.right_to_left_texture:SetWidth (0.000000001)
|
|
new_row.statusbar.right_to_left_texture:Hide()
|
|
new_row.right_to_left_texture = new_row.statusbar.right_to_left_texture
|
|
|
|
--> frame for hold the backdrop border
|
|
new_row.border = CreateFrame ("Frame", "DetailsBarra_Border_" .. instancia.meu_id .. "_" .. index, new_row.statusbar,"BackdropTemplate")
|
|
new_row.border:SetFrameLevel (new_row.statusbar:GetFrameLevel()+2)
|
|
new_row.border:SetAllPoints (new_row)
|
|
|
|
--border
|
|
local lineBorder
|
|
if (DetailsFramework.IsTBCWow()) then
|
|
lineBorder = DetailsFramework:CreateFullBorder(nil, new_row)
|
|
--lineBorder = CreateFrame("frame", nil, new_row, "DFNamePlateFullBorderTemplate, BackdropTemplate")
|
|
else
|
|
lineBorder = CreateFrame("frame", nil, new_row, "NamePlateFullBorderTemplate, BackdropTemplate")
|
|
end
|
|
new_row.lineBorder = lineBorder
|
|
|
|
-- search key: ~model
|
|
|
|
--low 3d bar
|
|
new_row.modelbox_low = CreateFrame ("playermodel", "DetailsBarra_ModelBarLow_" .. instancia.meu_id .. "_" .. index, new_row) --rowframe
|
|
new_row.modelbox_low:SetFrameLevel (new_row.statusbar:GetFrameLevel()-1)
|
|
new_row.modelbox_low:SetPoint ("topleft", new_row, "topleft")
|
|
new_row.modelbox_low:SetPoint ("bottomright", new_row, "bottomright")
|
|
--high 3d bar
|
|
new_row.modelbox_high = CreateFrame ("playermodel", "DetailsBarra_ModelBarHigh_" .. instancia.meu_id .. "_" .. index, new_row) --rowframe
|
|
new_row.modelbox_high:SetFrameLevel (new_row.statusbar:GetFrameLevel()+1)
|
|
new_row.modelbox_high:SetPoint ("topleft", new_row, "topleft")
|
|
new_row.modelbox_high:SetPoint ("bottomright", new_row, "bottomright")
|
|
|
|
--> create textures and icons
|
|
new_row.textura = new_row.statusbar:CreateTexture (nil, "artwork")
|
|
new_row.textura:SetHorizTile (false)
|
|
new_row.textura:SetVertTile (false)
|
|
|
|
--> row background texture
|
|
new_row.background = new_row:CreateTexture (nil, "background")
|
|
new_row.background:SetTexture()
|
|
new_row.background:SetAllPoints (new_row)
|
|
|
|
new_row.statusbar:SetStatusBarColor (0, 0, 0, 0)
|
|
new_row.statusbar:SetStatusBarTexture (new_row.textura)
|
|
new_row.statusbar:SetMinMaxValues (0, 100)
|
|
new_row.statusbar:SetValue (0)
|
|
|
|
--> class icon
|
|
local icone_classe = new_row.border:CreateTexture (nil, "overlay")
|
|
icone_classe:SetHeight (instancia.row_info.height)
|
|
icone_classe:SetWidth (instancia.row_info.height)
|
|
icone_classe:SetTexture (instancia.row_info.icon_file)
|
|
icone_classe:SetTexCoord (.75, 1, .75, 1)
|
|
new_row.icone_classe = icone_classe
|
|
|
|
local icon_frame = CreateFrame ("frame", "DetailsBarra_IconFrame_" .. instancia.meu_id .. "_" .. index, new_row.statusbar)
|
|
icon_frame:SetPoint ("topleft", icone_classe, "topleft")
|
|
icon_frame:SetPoint ("bottomright", icone_classe, "bottomright")
|
|
icon_frame:SetFrameLevel (new_row.statusbar:GetFrameLevel()+1)
|
|
icon_frame.instance_id = instancia.meu_id
|
|
icon_frame.row = new_row
|
|
new_row.icon_frame = icon_frame
|
|
|
|
icone_classe:SetPoint ("left", new_row, "left")
|
|
new_row.statusbar:SetPoint ("topleft", icone_classe, "topright")
|
|
new_row.statusbar:SetPoint ("bottomright", new_row, "bottomright")
|
|
|
|
--> left text 1
|
|
new_row.lineText1 = new_row.border:CreateFontString (nil, "overlay", "GameFontHighlight")
|
|
new_row.lineText1:SetPoint ("left", new_row.icone_classe, "right", 3, 0)
|
|
new_row.lineText1:SetJustifyH ("left")
|
|
new_row.lineText1:SetNonSpaceWrap (true)
|
|
|
|
--create text columns
|
|
for i = 2, 4 do
|
|
new_row ["lineText" .. i] = new_row.border:CreateFontString (nil, "overlay", "GameFontHighlight")
|
|
end
|
|
|
|
--> set the onclick, on enter scripts
|
|
barra_scripts (new_row, instancia, index)
|
|
|
|
--> hide
|
|
Details.FadeHandler.Fader (new_row, 1)
|
|
|
|
--> adds the window container
|
|
instancia.barras [index] = new_row
|
|
|
|
--> set the left text
|
|
new_row.lineText1:SetText (Loc ["STRING_NEWROW"])
|
|
|
|
--> refresh rows
|
|
instancia:InstanceRefreshRows()
|
|
|
|
_detalhes:SendEvent ("DETAILS_INSTANCE_NEWROW", nil, instancia, new_row)
|
|
|
|
return new_row
|
|
end
|
|
|
|
function _detalhes:SetBarTextSettings (size, font, fixedcolor, leftcolorbyclass, rightcolorbyclass, leftoutline, rightoutline, customrighttextenabled, customrighttext, percentage_type, showposition, customlefttextenabled, customlefttext, smalloutline_left, smalloutlinecolor_left, smalloutline_right, smalloutlinecolor_right, translittext)
|
|
|
|
--> size
|
|
if (size) then
|
|
self.row_info.font_size = size
|
|
end
|
|
|
|
--> font
|
|
if (font) then
|
|
self.row_info.font_face = font
|
|
self.row_info.font_face_file = SharedMedia:Fetch ("font", font)
|
|
end
|
|
|
|
--> fixed color
|
|
if (fixedcolor) then
|
|
local red, green, blue, alpha = gump:ParseColors (fixedcolor)
|
|
local c = self.row_info.fixed_text_color
|
|
c[1], c[2], c[3], c[4] = red, green, blue, alpha
|
|
end
|
|
|
|
--> left color by class
|
|
if (type (leftcolorbyclass) == "boolean") then
|
|
self.row_info.textL_class_colors = leftcolorbyclass
|
|
end
|
|
|
|
--> right color by class
|
|
if (type (rightcolorbyclass) == "boolean") then
|
|
self.row_info.textR_class_colors = rightcolorbyclass
|
|
end
|
|
|
|
--> left text outline
|
|
if (type (leftoutline) == "boolean") then
|
|
self.row_info.textL_outline = leftoutline
|
|
end
|
|
|
|
--> right text outline
|
|
if (type (rightoutline) == "boolean") then
|
|
self.row_info.textR_outline = rightoutline
|
|
end
|
|
|
|
-- left text small outline and small outline color
|
|
if (type (smalloutline_left) == "boolean") then
|
|
self.row_info.textL_outline_small = smalloutline_left
|
|
end
|
|
if (smalloutlinecolor_left) then
|
|
local red, green, blue, alpha = gump:ParseColors (smalloutlinecolor_left)
|
|
local c = self.row_info.textL_outline_small_color
|
|
c[1], c[2], c[3], c[4] = red, green, blue, alpha
|
|
end
|
|
-- right text small outline and small outline color
|
|
if (type (smalloutline_right) == "boolean") then
|
|
self.row_info.textR_outline_small = smalloutline_right
|
|
end
|
|
if (smalloutlinecolor_right) then
|
|
local red, green, blue, alpha = gump:ParseColors (smalloutlinecolor_right)
|
|
local c = self.row_info.textR_outline_small_color
|
|
c[1], c[2], c[3], c[4] = red, green, blue, alpha
|
|
end
|
|
|
|
--> custom left text
|
|
if (type (customlefttextenabled) == "boolean") then
|
|
self.row_info.textL_enable_custom_text = customlefttextenabled
|
|
end
|
|
if (customlefttext) then
|
|
self.row_info.textL_custom_text = customlefttext
|
|
end
|
|
|
|
--> custom right text
|
|
if (type (customrighttextenabled) == "boolean") then
|
|
self.row_info.textR_enable_custom_text = customrighttextenabled
|
|
end
|
|
if (customrighttext) then
|
|
self.row_info.textR_custom_text = customrighttext
|
|
end
|
|
|
|
--> percent type
|
|
if (percentage_type) then
|
|
self.row_info.percent_type = percentage_type
|
|
end
|
|
|
|
--> show position number
|
|
if (type (showposition) == "boolean") then
|
|
self.row_info.textL_show_number = showposition
|
|
end
|
|
|
|
--> translit text by Vardex (https://github.com/Vardex May 22, 2019)
|
|
if (type (translittext) == "boolean") then
|
|
self.row_info.textL_translit_text = translittext
|
|
end
|
|
|
|
self:InstanceReset()
|
|
self:InstanceRefreshRows()
|
|
end
|
|
|
|
function _detalhes:SetBarBackdropSettings (enabled, size, color) --argumente texture removed on shadowlands beta
|
|
if (type (enabled) ~= "boolean") then
|
|
enabled = self.row_info.backdrop.enabled
|
|
end
|
|
if (not size) then
|
|
size = self.row_info.backdrop.size
|
|
end
|
|
if (not color) then
|
|
color = self.row_info.backdrop.color
|
|
end
|
|
|
|
self.row_info.backdrop.enabled = enabled
|
|
self.row_info.backdrop.size = size
|
|
self.row_info.backdrop.color = color
|
|
|
|
self:InstanceReset()
|
|
self:InstanceRefreshRows()
|
|
self:ReajustaGump()
|
|
end
|
|
|
|
function _detalhes:SetBarModel (upper_enabled, upper_model, upper_alpha, lower_enabled, lower_model, lower_alpha)
|
|
|
|
--> is enabled
|
|
if (type (upper_enabled) == "boolean") then
|
|
self.row_info.models.upper_enabled = upper_enabled
|
|
end
|
|
if (type (lower_enabled) == "boolean") then
|
|
self.row_info.models.lower_enabled = lower_enabled
|
|
end
|
|
|
|
--> models:
|
|
if (upper_model) then
|
|
self.row_info.models.upper_model = upper_model
|
|
end
|
|
if (lower_model) then
|
|
self.row_info.models.lower_model = lower_model
|
|
end
|
|
|
|
--> alpha values:
|
|
if (upper_alpha) then
|
|
self.row_info.models.upper_alpha = upper_alpha
|
|
end
|
|
if (lower_alpha) then
|
|
self.row_info.models.lower_alpha = lower_alpha
|
|
end
|
|
|
|
self:InstanceReset()
|
|
self:InstanceRefreshRows()
|
|
self:ReajustaGump()
|
|
_detalhes:RefreshMainWindow (-1, true)
|
|
end
|
|
|
|
-- ~spec ~icons
|
|
function _detalhes:SetBarSpecIconSettings (enabled, iconfile, fulltrack)
|
|
|
|
if (type (enabled) ~= "boolean") then
|
|
enabled = self.row_info.use_spec_icons
|
|
end
|
|
if (not iconfile) then
|
|
iconfile = self.row_info.spec_file
|
|
end
|
|
|
|
self.row_info.use_spec_icons = enabled
|
|
self.row_info.spec_file = iconfile
|
|
|
|
if (enabled) then
|
|
if (not _detalhes.track_specs) then
|
|
_detalhes.track_specs = true
|
|
_detalhes:TrackSpecsNow (fulltrack)
|
|
end
|
|
else
|
|
local have_enabled
|
|
for _, instance in _ipairs (_detalhes.tabela_instancias) do
|
|
if (instance:IsEnabled() and instance.row_info.use_spec_icons) then
|
|
have_enabled = true
|
|
break
|
|
end
|
|
end
|
|
if (not have_enabled) then
|
|
_detalhes.track_specs = false
|
|
_detalhes:ResetSpecCache(true) --force
|
|
end
|
|
end
|
|
|
|
self:InstanceReset()
|
|
self:InstanceRefreshRows()
|
|
self:ReajustaGump()
|
|
end
|
|
|
|
function _detalhes:SetBarSettings (height, texture, colorclass, fixedcolor, backgroundtexture, backgroundcolorclass, backgroundfixedcolor, alpha, iconfile, barstart, spacement, texture_custom)
|
|
|
|
--> bar start
|
|
if (type (barstart) == "boolean") then
|
|
self.row_info.start_after_icon = barstart
|
|
end
|
|
|
|
--> icon file
|
|
if (iconfile) then
|
|
self.row_info.icon_file = iconfile
|
|
if (iconfile == "") then
|
|
self.row_info.no_icon = true
|
|
else
|
|
self.row_info.no_icon = false
|
|
end
|
|
end
|
|
|
|
--> alpha
|
|
if (alpha) then
|
|
self.row_info.alpha = alpha
|
|
end
|
|
|
|
--> height
|
|
if (height) then
|
|
self.row_info.height = height
|
|
self.row_height = height + self.row_info.space.between
|
|
end
|
|
|
|
--> spacement
|
|
if (spacement) then
|
|
self.row_info.space.between = spacement
|
|
self.row_height = self.row_info.height + spacement
|
|
end
|
|
|
|
--> texture
|
|
if (texture) then
|
|
self.row_info.texture = texture
|
|
self.row_info.texture_file = SharedMedia:Fetch ("statusbar", texture)
|
|
end
|
|
|
|
if (texture_custom) then
|
|
self.row_info.texture_custom = texture_custom
|
|
self.row_info.texture_custom_file = "Interface\\" .. self.row_info.texture_custom
|
|
end
|
|
|
|
--> color by class
|
|
if (type (colorclass) == "boolean") then
|
|
self.row_info.texture_class_colors = colorclass
|
|
end
|
|
|
|
--> fixed color
|
|
if (fixedcolor) then
|
|
local red, green, blue = gump:ParseColors (fixedcolor)
|
|
local c = self.row_info.fixed_texture_color
|
|
c[1], c[2], c[3], c[4] = red, green, blue, self.row_info.alpha
|
|
end
|
|
|
|
--> background texture
|
|
if (backgroundtexture) then
|
|
self.row_info.texture_background = backgroundtexture
|
|
self.row_info.texture_background_file = SharedMedia:Fetch ("statusbar", backgroundtexture)
|
|
end
|
|
|
|
--> background color by class
|
|
if (type (backgroundcolorclass) == "boolean") then
|
|
self.row_info.texture_background_class_color = backgroundcolorclass
|
|
end
|
|
|
|
--> background fixed color
|
|
if (backgroundfixedcolor) then
|
|
local red, green, blue, alpha = gump:ParseColors (backgroundfixedcolor)
|
|
local c = self.row_info.fixed_texture_background_color
|
|
c [1], c [2], c [3], c [4] = red, green, blue, alpha
|
|
end
|
|
|
|
self:InstanceReset()
|
|
self:InstanceRefreshRows()
|
|
self:ReajustaGump()
|
|
|
|
end
|
|
|
|
local brackets = {
|
|
["("] = {" (", ")"},
|
|
["{"] = {" {", "}"},
|
|
["["] = {" [", "]"},
|
|
["<"] = {" <", ">"},
|
|
["NONE"] = {" ", ""},
|
|
}
|
|
|
|
local separators = {
|
|
[","] = ", ",
|
|
["."] = ". ",
|
|
[";"] = "; ",
|
|
["-"] = " - ",
|
|
["|"] = " | ",
|
|
["/"] = " / ",
|
|
["\\"] = " \\ ",
|
|
["~"] = " ~ ",
|
|
["NONE"] = "",
|
|
}
|
|
|
|
function _detalhes:GetBarBracket()
|
|
return brackets [self.row_info.textR_bracket]
|
|
end
|
|
|
|
function _detalhes:GetBarSeparator()
|
|
return separators [self.row_info.textR_separator]
|
|
end
|
|
|
|
function _detalhes:SetBarRightTextSettings (total, persecond, percent, bracket, separator)
|
|
|
|
if (type (total) == "boolean") then
|
|
self.row_info.textR_show_data [1] = total
|
|
end
|
|
if (type (persecond) == "boolean") then
|
|
self.row_info.textR_show_data [2] = persecond
|
|
end
|
|
if (type (percent) == "boolean") then
|
|
self.row_info.textR_show_data [3] = percent
|
|
end
|
|
|
|
if (bracket) then
|
|
self.row_info.textR_bracket = bracket
|
|
end
|
|
if (separator) then
|
|
self.row_info.textR_separator = separator
|
|
end
|
|
|
|
self:InstanceReset()
|
|
|
|
end
|
|
|
|
--/script _detalhes:InstanceRefreshRows (_detalhes.tabela_instancias[1])
|
|
|
|
--> on update function
|
|
local fast_ps_func = function (self)
|
|
local instance = self.instance
|
|
|
|
if (not instance.showing) then
|
|
return
|
|
end
|
|
|
|
local combat_time = instance.showing:GetCombatTime()
|
|
local ps_type = _detalhes.ps_abbreviation
|
|
|
|
if (instance.rows_fit_in_window) then
|
|
for i = 1, instance.rows_fit_in_window do --instance:GetNumRows()
|
|
local row = instance.barras [i] --instance:GetRow (i)
|
|
if (row and row:IsShown()) then
|
|
local actor = row.minha_tabela
|
|
if (actor) then
|
|
local dps_text = row.ps_text
|
|
if (dps_text) then
|
|
local new_dps = _math_floor (actor.total / combat_time)
|
|
local formated_dps = tok_functions [ps_type] (_, new_dps)
|
|
|
|
--row.lineText4:SetText (row.lineText4:GetText():gsub (dps_text, formated_dps))
|
|
row.lineText4:SetText (( row.lineText4:GetText() or "" ):gsub (dps_text, formated_dps))
|
|
row.ps_text = formated_dps
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- ~dps ~hps
|
|
--> check if can start or need to stop
|
|
function _detalhes:CheckPsUpdate()
|
|
|
|
local is_enabled = self.row_info.fast_ps_update
|
|
|
|
if (is_enabled) then
|
|
--> check if the frame is created
|
|
if (not self.ps_update_frame) then
|
|
self.ps_update_frame = CreateFrame ("frame", "DetailsInstance" .. self.meu_id .. "PsUpdate", self.baseframe)
|
|
self.ps_update_frame.instance = self
|
|
end
|
|
|
|
--> if isn't in combat, just stop
|
|
if (not _detalhes.in_combat) then
|
|
if (self.ps_update_frame.is_running) then
|
|
self.ps_update_frame.is_running = nil
|
|
self.ps_update_frame:Hide()
|
|
self.ps_update_frame:SetScript ("OnUpdate", nil)
|
|
end
|
|
return
|
|
end
|
|
|
|
--> check if needs to start
|
|
local attribute, sub_attribute = self:GetDisplay()
|
|
|
|
--> check if the instance is showing damage done/dps or healing done/hps
|
|
if ( (attribute == 1 and (sub_attribute == 1 or sub_attribute == 2)) or (attribute == 2 and (sub_attribute == 1 or sub_attribute == 2))) then
|
|
if (not self.ps_update_frame.is_running) then
|
|
self.ps_update_frame.is_running = true
|
|
self.ps_update_frame:Show()
|
|
self.ps_update_frame:SetScript ("OnUpdate", fast_ps_func)
|
|
end
|
|
else
|
|
--> check if needs to stop
|
|
if (self.ps_update_frame.is_running) then
|
|
self.ps_update_frame.is_running = nil
|
|
self.ps_update_frame:Hide()
|
|
self.ps_update_frame:SetScript ("OnUpdate", nil)
|
|
end
|
|
end
|
|
|
|
else
|
|
if (self.ps_update_frame and self.ps_update_frame.is_running) then
|
|
self.ps_update_frame.is_running = nil
|
|
self.ps_update_frame:Hide()
|
|
self.ps_update_frame:SetScript ("OnUpdate", nil)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- /run _detalhes:GetInstance(1):FastPSUpdate (true)
|
|
-- /dump (_detalhes:GetInstance(1).fast_ps_update)
|
|
|
|
function _detalhes:FastPSUpdate (enabled)
|
|
if (type (enabled) ~= "boolean") then
|
|
enabled = self.row_info.fast_ps_update
|
|
end
|
|
|
|
self.row_info.fast_ps_update = enabled
|
|
|
|
self:CheckPsUpdate()
|
|
end
|
|
|
|
|
|
-- search key: ~row ~bar ~updatebar
|
|
function _detalhes:InstanceRefreshRows (instancia)
|
|
|
|
if (instancia) then
|
|
self = instancia
|
|
end
|
|
|
|
if (not self.barras or not self.barras[1]) then
|
|
return
|
|
end
|
|
|
|
--> mirror
|
|
local is_mirror = self.bars_inverted
|
|
|
|
--> texture
|
|
local texture_file = SharedMedia:Fetch ("statusbar", self.row_info.texture)
|
|
local texture_file2 = SharedMedia:Fetch ("statusbar", self.row_info.texture_background)
|
|
--> update texture files
|
|
self.row_info.texture_file = texture_file
|
|
self.row_info.texture_background_file = texture_file2
|
|
|
|
if (type (self.row_info.texture_custom) == "string" and self.row_info.texture_custom ~= "") then
|
|
texture_file = "Interface\\" .. self.row_info.texture_custom
|
|
--> update texture file
|
|
self.row_info.texture_custom_file = texture_file
|
|
end
|
|
|
|
--> outline values
|
|
local left_text_outline = self.row_info.textL_outline
|
|
local right_text_outline = self.row_info.textR_outline
|
|
local textL_outline_small = self.row_info.textL_outline_small
|
|
local textL_outline_small_color = self.row_info.textL_outline_small_color
|
|
local textR_outline_small = self.row_info.textR_outline_small
|
|
local textR_outline_small_color = self.row_info.textR_outline_small_color
|
|
|
|
--> texture color values
|
|
local texture_class_color = self.row_info.texture_class_colors
|
|
local texture_r, texture_g, texture_b
|
|
if (not texture_class_color) then
|
|
texture_r, texture_g, texture_b = _unpack (self.row_info.fixed_texture_color)
|
|
end
|
|
|
|
--text color
|
|
local left_text_class_color = self.row_info.textL_class_colors
|
|
local right_text_class_color = self.row_info.textR_class_colors
|
|
local text_r, text_g, text_b
|
|
if (not left_text_class_color or not right_text_class_color) then
|
|
text_r, text_g, text_b = _unpack (self.row_info.fixed_text_color)
|
|
end
|
|
|
|
local height = self.row_info.height
|
|
|
|
--alpha
|
|
local alpha = self.row_info.alpha
|
|
|
|
--icons
|
|
local no_icon = self.row_info.no_icon
|
|
local start_after_icon = self.row_info.start_after_icon
|
|
|
|
--if (self.row_info.use_spec_icons) then
|
|
--local icon_texture = self.row_info.spec_file --isn't in use
|
|
--end
|
|
|
|
local icon_force_grayscale = self.row_info.icon_grayscale
|
|
local icon_offset_x, icon_offset_y = unpack (self.row_info.icon_offset)
|
|
|
|
--line border
|
|
local lineBorderEnabled = self.row_info.backdrop.enabled
|
|
local lineBorderColor = self.row_info.backdrop.color
|
|
local lineBorderSize = self.row_info.backdrop.size
|
|
|
|
--font face
|
|
self.row_info.font_face_file = SharedMedia:Fetch ("font", self.row_info.font_face)
|
|
|
|
--models
|
|
local upper_model_enabled = self.row_info.models.upper_enabled
|
|
local lower_model_enabled = self.row_info.models.lower_enabled
|
|
|
|
local upper_model = self.row_info.models.upper_model
|
|
local lower_model = self.row_info.models.lower_model
|
|
|
|
local upper_model_alpha = self.row_info.models.upper_alpha
|
|
local lower_model_alpha = self.row_info.models.lower_alpha
|
|
|
|
--using_upper_3dmodels using_lower_3dmodels
|
|
|
|
-- do it
|
|
|
|
for _, row in _ipairs (self.barras) do
|
|
|
|
--> positioning and size
|
|
row:SetHeight (height)
|
|
row.icone_classe:SetHeight (height)
|
|
row.icone_classe:SetWidth (height)
|
|
|
|
if (icon_force_grayscale) then
|
|
row.icone_classe:SetDesaturated (true)
|
|
else
|
|
row.icone_classe:SetDesaturated (false)
|
|
end
|
|
|
|
--> icon and texture anchors
|
|
if (not is_mirror) then
|
|
row.lineText1:ClearAllPoints()
|
|
|
|
row.lineText2:ClearAllPoints()
|
|
row.lineText3:ClearAllPoints()
|
|
row.lineText4:ClearAllPoints()
|
|
|
|
row.lineText1:SetJustifyH("left")
|
|
row.lineText2:SetJustifyH("right")
|
|
row.lineText3:SetJustifyH("right")
|
|
row.lineText4:SetJustifyH("right")
|
|
|
|
if (not self.use_multi_fontstrings) then
|
|
row.lineText2:SetText("")
|
|
row.lineText3:SetText("")
|
|
end
|
|
|
|
row.lineText4:SetText("")
|
|
|
|
row.lineText2:SetPoint ("right", row.statusbar, "right", -self.fontstrings_text2_anchor, 0)
|
|
row.lineText3:SetPoint ("right", row.statusbar, "right", -self.fontstrings_text3_anchor, 0)
|
|
row.lineText4:SetPoint ("right", row.statusbar, "right", -self.fontstrings_text4_anchor, 0)
|
|
|
|
if (no_icon) then
|
|
row.statusbar:SetPoint ("topleft", row, "topleft")
|
|
row.statusbar:SetPoint ("bottomright", row, "bottomright")
|
|
row.lineText1:SetPoint ("left", row.statusbar, "left", 2, 0)
|
|
row.icone_classe:Hide()
|
|
else
|
|
row.icone_classe:ClearAllPoints()
|
|
row.icone_classe:SetPoint ("left", row, "left", icon_offset_x, icon_offset_y)
|
|
row.icone_classe:Show()
|
|
|
|
if (start_after_icon) then
|
|
row.statusbar:SetPoint ("topleft", row.icone_classe, "topright")
|
|
else
|
|
row.statusbar:SetPoint ("topleft", row, "topleft")
|
|
end
|
|
|
|
row.statusbar:SetPoint ("bottomright", row, "bottomright")
|
|
row.lineText1:SetPoint ("left", row.icone_classe, "right", 3, 0)
|
|
end
|
|
else
|
|
row.lineText1:ClearAllPoints()
|
|
row.lineText2:ClearAllPoints()
|
|
row.lineText3:ClearAllPoints()
|
|
row.lineText4:ClearAllPoints()
|
|
|
|
row.lineText4:SetJustifyH("left")
|
|
row.lineText3:SetJustifyH("left")
|
|
row.lineText2:SetJustifyH("left")
|
|
row.lineText1:SetJustifyH("right")
|
|
|
|
row.lineText4:SetPoint ("left", row.statusbar, "left", self.fontstrings_text4_anchor + 1, 0)
|
|
row.lineText3:SetPoint ("left", row.statusbar, "left", self.fontstrings_text3_anchor + 1, 0)
|
|
row.lineText2:SetPoint ("left", row.statusbar, "left", self.fontstrings_text2_anchor + 1, 0)
|
|
|
|
if (no_icon) then
|
|
row.statusbar:SetPoint ("topleft", row, "topleft")
|
|
row.statusbar:SetPoint ("bottomright", row, "bottomright")
|
|
row.lineText1:SetPoint ("right", row.statusbar, "right", -2, 0)
|
|
row.icone_classe:Hide()
|
|
|
|
row.right_to_left_texture:SetPoint ("topright", row.statusbar, "topright")
|
|
row.right_to_left_texture:SetPoint ("bottomright", row.statusbar, "bottomright")
|
|
else
|
|
|
|
row.icone_classe:ClearAllPoints()
|
|
row.icone_classe:SetPoint ("right", row, "right", icon_offset_x, icon_offset_y)
|
|
row.icone_classe:Show()
|
|
|
|
if (start_after_icon) then
|
|
row.statusbar:SetPoint ("bottomright", row.icone_classe, "bottomleft")
|
|
else
|
|
row.statusbar:SetPoint ("bottomright", row, "bottomright")
|
|
end
|
|
|
|
row.statusbar:SetPoint ("topleft", row, "topleft")
|
|
|
|
row.lineText1:SetPoint ("right", row.icone_classe, "left", -2, 0)
|
|
end
|
|
end
|
|
|
|
if (not self.row_info.texture_background_class_color) then
|
|
local c = self.row_info.fixed_texture_background_color
|
|
row.background:SetVertexColor (c[1], c[2], c[3], c[4])
|
|
else
|
|
local c = self.row_info.fixed_texture_background_color
|
|
local r, g, b = row.background:GetVertexColor()
|
|
row.background:SetVertexColor (r, g, b, c[4])
|
|
end
|
|
|
|
--> outline
|
|
if (left_text_outline) then
|
|
_detalhes:SetFontOutline(row.lineText1, left_text_outline)
|
|
else
|
|
_detalhes:SetFontOutline(row.lineText1, nil)
|
|
end
|
|
|
|
if (right_text_outline) then
|
|
self:SetFontOutline (row.lineText2, right_text_outline)
|
|
self:SetFontOutline (row.lineText3, right_text_outline)
|
|
self:SetFontOutline (row.lineText4, right_text_outline)
|
|
else
|
|
self:SetFontOutline (row.lineText2, nil)
|
|
self:SetFontOutline (row.lineText3, nil)
|
|
self:SetFontOutline (row.lineText4, nil)
|
|
end
|
|
|
|
--> small outline
|
|
if (textL_outline_small) then
|
|
local c = textL_outline_small_color
|
|
row.lineText1:SetShadowColor (c[1], c[2], c[3], c[4])
|
|
else
|
|
row.lineText1:SetShadowColor (0, 0, 0, 0)
|
|
end
|
|
|
|
if (textR_outline_small) then
|
|
local c = textR_outline_small_color
|
|
row.lineText4:SetShadowColor (c[1], c[2], c[3], c[4])
|
|
row.lineText3:SetShadowColor (c[1], c[2], c[3], c[4])
|
|
row.lineText2:SetShadowColor (c[1], c[2], c[3], c[4])
|
|
else
|
|
row.lineText4:SetShadowColor (0, 0, 0, 0)
|
|
row.lineText3:SetShadowColor (0, 0, 0, 0)
|
|
row.lineText2:SetShadowColor (0, 0, 0, 0)
|
|
end
|
|
|
|
--> texture:
|
|
row.textura:SetTexture (texture_file)
|
|
row.right_to_left_texture:SetTexture (texture_file)
|
|
row.background:SetTexture (texture_file2)
|
|
|
|
if (is_mirror) then
|
|
row.right_to_left_texture:Show()
|
|
else
|
|
row.right_to_left_texture:Hide()
|
|
end
|
|
|
|
--> texture class color: if true color changes on the fly through class refresh
|
|
if (not texture_class_color) then
|
|
row.textura:SetVertexColor (texture_r, texture_g, texture_b, alpha)
|
|
row.right_to_left_texture:SetVertexColor (texture_r, texture_g, texture_b, alpha)
|
|
else
|
|
--automatically color the bar by the actor class
|
|
--forcing alpha 1 instead of use the alpha from the fixed color
|
|
local r, g, b = row.textura:GetVertexColor()
|
|
row.textura:SetVertexColor (r, g, b, 1) --alpha
|
|
end
|
|
|
|
--> text class color: if true color changes on the fly through class refresh
|
|
if (not left_text_class_color) then
|
|
row.lineText1:SetTextColor (text_r, text_g, text_b)
|
|
end
|
|
if (not right_text_class_color) then
|
|
row.lineText4:SetTextColor (text_r, text_g, text_b)
|
|
row.lineText3:SetTextColor (text_r, text_g, text_b)
|
|
row.lineText2:SetTextColor (text_r, text_g, text_b)
|
|
end
|
|
|
|
--> text size
|
|
_detalhes:SetFontSize (row.lineText1, self.row_info.font_size or height * 0.75)
|
|
_detalhes:SetFontSize (row.lineText2, self.row_info.font_size or height * 0.75)
|
|
_detalhes:SetFontSize (row.lineText3, self.row_info.font_size or height * 0.75)
|
|
_detalhes:SetFontSize (row.lineText4, self.row_info.font_size or height * 0.75)
|
|
|
|
--> text font
|
|
_detalhes:SetFontFace (row.lineText1, self.row_info.font_face_file or "GameFontHighlight")
|
|
_detalhes:SetFontFace (row.lineText2, self.row_info.font_face_file or "GameFontHighlight")
|
|
_detalhes:SetFontFace (row.lineText3, self.row_info.font_face_file or "GameFontHighlight")
|
|
_detalhes:SetFontFace (row.lineText4, self.row_info.font_face_file or "GameFontHighlight")
|
|
|
|
--backdrop
|
|
if (lineBorderEnabled) then
|
|
row.lineBorder:Show()
|
|
row.lineBorder:SetVertexColor(unpack(lineBorderColor))
|
|
row.lineBorder:SetBorderSizes(lineBorderSize, lineBorderSize, lineBorderSize, lineBorderSize)
|
|
row.lineBorder:UpdateSizes()
|
|
else
|
|
row.lineBorder:Hide()
|
|
end
|
|
|
|
--> models
|
|
if (upper_model_enabled) then
|
|
row.using_upper_3dmodels = true
|
|
row.modelbox_high:Show()
|
|
row.modelbox_high:SetModel (upper_model)
|
|
row.modelbox_high:SetAlpha (upper_model_alpha)
|
|
else
|
|
row.using_upper_3dmodels = false
|
|
row.modelbox_high:Hide()
|
|
end
|
|
|
|
if (lower_model_enabled) then
|
|
row.using_lower_3dmodels = true
|
|
row.modelbox_low:Show()
|
|
row.modelbox_low:SetModel (lower_model)
|
|
row.modelbox_low:SetAlpha (lower_model_alpha)
|
|
else
|
|
row.using_lower_3dmodels = false
|
|
row.modelbox_low:Hide()
|
|
end
|
|
|
|
end
|
|
|
|
self:SetBarGrowDirection()
|
|
|
|
self:UpdateClickThrough()
|
|
|
|
|
|
end
|
|
|
|
-- search key: ~wallpaper
|
|
function _detalhes:InstanceWallpaper (texture, anchor, alpha, texcoord, width, height, overlay)
|
|
|
|
local wallpaper = self.wallpaper
|
|
|
|
if (type (texture) == "boolean" and texture) then
|
|
texture, anchor, alpha, texcoord, width, height, overlay = wallpaper.texture, wallpaper.anchor, wallpaper.alpha, wallpaper.texcoord, wallpaper.width, wallpaper.height, wallpaper.overlay
|
|
|
|
elseif (type (texture) == "boolean" and not texture) then
|
|
self.wallpaper.enabled = false
|
|
return Details.FadeHandler.Fader (self.baseframe.wallpaper, "in")
|
|
|
|
elseif (type (texture) == "table") then
|
|
anchor = texture.anchor or wallpaper.anchor
|
|
alpha = texture.alpha or wallpaper.alpha
|
|
if (texture.texcoord) then
|
|
texcoord = {unpack (texture.texcoord)}
|
|
else
|
|
texcoord = wallpaper.texcoord
|
|
end
|
|
width = texture.width or wallpaper.width
|
|
height = texture.height or wallpaper.height
|
|
if (texture.overlay) then
|
|
overlay = {unpack (texture.overlay)}
|
|
else
|
|
overlay = wallpaper.overlay
|
|
end
|
|
|
|
if (type (texture.enabled) == "boolean") then
|
|
if (not texture.enabled) then
|
|
wallpaper.enabled = false
|
|
wallpaper.texture = texture.texture or wallpaper.texture
|
|
wallpaper.anchor = anchor
|
|
wallpaper.alpha = alpha
|
|
wallpaper.texcoord = texcoord
|
|
wallpaper.width = width
|
|
wallpaper.height = height
|
|
wallpaper.overlay = overlay
|
|
return self:InstanceWallpaper (false)
|
|
end
|
|
end
|
|
|
|
texture = texture.texture or wallpaper.texture
|
|
|
|
else
|
|
texture = texture or wallpaper.texture
|
|
anchor = anchor or wallpaper.anchor
|
|
alpha = alpha or wallpaper.alpha
|
|
texcoord = texcoord or wallpaper.texcoord
|
|
width = width or wallpaper.width
|
|
height = height or wallpaper.height
|
|
overlay = overlay or wallpaper.overlay
|
|
end
|
|
|
|
if (not wallpaper.texture and not texture) then
|
|
texture = "Interface\\AddOns\\Details\\images\\background"
|
|
|
|
texcoord = {0, 1, 0, 0.7}
|
|
alpha = 0.5
|
|
width, height = self:GetSize()
|
|
anchor = "all"
|
|
end
|
|
|
|
local t = self.baseframe.wallpaper
|
|
|
|
t:ClearAllPoints()
|
|
|
|
if (anchor == "all") then
|
|
t:SetPoint ("topleft", self.baseframe, "topleft")
|
|
t:SetPoint ("bottomright", self.baseframe, "bottomright")
|
|
elseif (anchor == "center") then
|
|
t:SetPoint ("center", self.baseframe, "center", 0, 4)
|
|
elseif (anchor == "stretchLR") then
|
|
t:SetPoint ("center", self.baseframe, "center")
|
|
t:SetPoint ("left", self.baseframe, "left")
|
|
t:SetPoint ("right", self.baseframe, "right")
|
|
elseif (anchor == "stretchTB") then
|
|
t:SetPoint ("center", self.baseframe, "center")
|
|
t:SetPoint ("top", self.baseframe, "top")
|
|
t:SetPoint ("bottom", self.baseframe, "bottom")
|
|
else
|
|
t:SetPoint (anchor, self.baseframe, anchor)
|
|
end
|
|
|
|
t:SetTexture (texture)
|
|
t:SetTexCoord (unpack (texcoord))
|
|
t:SetWidth (width)
|
|
t:SetHeight (height)
|
|
t:SetVertexColor (unpack (overlay))
|
|
|
|
wallpaper.enabled = true
|
|
wallpaper.texture = texture
|
|
wallpaper.anchor = anchor
|
|
wallpaper.alpha = alpha
|
|
wallpaper.texcoord = texcoord
|
|
wallpaper.width = width
|
|
wallpaper.height = height
|
|
wallpaper.overlay = overlay
|
|
|
|
t:Show()
|
|
--t:SetAlpha (alpha)
|
|
Details.FadeHandler.Fader (t, "ALPHAANIM", alpha)
|
|
|
|
end
|
|
|
|
function _detalhes:GetTextures()
|
|
local t = {}
|
|
t [1] = self.baseframe.rodape.esquerdo
|
|
t [2] = self.baseframe.rodape.direita
|
|
t [3] = self.baseframe.rodape.top_bg
|
|
|
|
t [4] = self.baseframe.cabecalho.ball_r
|
|
t [5] = self.baseframe.cabecalho.ball
|
|
t [6] = self.baseframe.cabecalho.emenda
|
|
t [7] = self.baseframe.cabecalho.top_bg
|
|
|
|
t [8] = self.baseframe.barra_esquerda
|
|
t [9] = self.baseframe.barra_direita
|
|
t [10] = self.baseframe.UPFrame
|
|
return t
|
|
--atributo_icon � uma exce��o
|
|
end
|
|
|
|
function _detalhes:SetWindowAlphaForInteract (alpha)
|
|
|
|
local ignorebars = self.menu_alpha.ignorebars
|
|
|
|
if (self.is_interacting) then
|
|
--> entrou
|
|
self.baseframe:SetAlpha (alpha)
|
|
self:InstanceAlpha (alpha)
|
|
self:SetIconAlpha (alpha, nil, true)
|
|
|
|
if (ignorebars) then
|
|
self.rowframe:SetAlpha (1)
|
|
else
|
|
self.rowframe:SetAlpha (alpha)
|
|
end
|
|
else
|
|
--> saiu
|
|
if (self.combat_changes_alpha and self.combat_changes_alpha ~= 1) then --> combat alpha
|
|
self:InstanceAlpha (self.combat_changes_alpha)
|
|
self:SetIconAlpha (self.combat_changes_alpha, nil, true)
|
|
self.rowframe:SetAlpha (self.combat_changes_alpha) --alpha do combate � absoluta
|
|
self.baseframe:SetAlpha (self.combat_changes_alpha) --alpha do combate � absoluta
|
|
|
|
else
|
|
self:InstanceAlpha (alpha)
|
|
self:SetIconAlpha (alpha, nil, true)
|
|
|
|
if (ignorebars) then
|
|
self.rowframe:SetAlpha (1)
|
|
else
|
|
self.rowframe:SetAlpha (alpha)
|
|
end
|
|
|
|
self.baseframe:SetAlpha (alpha)
|
|
end
|
|
end
|
|
|
|
if (_detalhes.debug) then
|
|
_detalhes:Msg ("(debug) setting window alpha for SetWindowAlphaForInteract() -> ", alpha)
|
|
end
|
|
|
|
end
|
|
|
|
-- ~autohide �utohide
|
|
function _detalhes:SetWindowAlphaForCombat (entering_in_combat, true_hide, alphaAmount)
|
|
local amount, rowsamount, menuamount
|
|
|
|
--get the values
|
|
if (entering_in_combat) then
|
|
amount = alphaAmount / 100
|
|
self.combat_changes_alpha = amount
|
|
rowsamount = amount
|
|
menuamount = amount
|
|
if (_detalhes.pet_battle) then
|
|
amount = 0
|
|
rowsamount = 0
|
|
menuamount = 0
|
|
end
|
|
else
|
|
if (self.menu_alpha.enabled) then --auto transparency
|
|
if (self.is_interacting) then
|
|
amount = self.menu_alpha.onenter
|
|
menuamount = self.menu_alpha.onenter
|
|
if (self.menu_alpha.ignorebars) then
|
|
rowsamount = 1
|
|
else
|
|
rowsamount = amount
|
|
end
|
|
else
|
|
amount = self.menu_alpha.onleave
|
|
menuamount = self.menu_alpha.onleave
|
|
if (self.menu_alpha.ignorebars) then
|
|
rowsamount = 1
|
|
else
|
|
rowsamount = amount
|
|
end
|
|
end
|
|
else
|
|
amount = self.color[4]
|
|
menuamount = 1
|
|
rowsamount = 1
|
|
end
|
|
self.combat_changes_alpha = nil
|
|
end
|
|
|
|
--apply
|
|
if (true_hide and amount == 0) then
|
|
self.baseframe:Hide()
|
|
self.rowframe:Hide()
|
|
self.windowSwitchButton:Hide()
|
|
--Details.FadeHandler.Fader (self.baseframe, _unpack (_detalhes.windows_fade_in))
|
|
--Details.FadeHandler.Fader (self.rowframe, _unpack (_detalhes.windows_fade_in))
|
|
--Details.FadeHandler.Fader (self.windowSwitchButton, _unpack (_detalhes.windows_fade_in))
|
|
|
|
--self:SetIconAlpha (nil, true)
|
|
|
|
if (_detalhes.debug) then
|
|
_detalhes:Msg ("(debug) hiding window SetWindowAlphaForCombat()", amount, rowsamount, menuamount)
|
|
end
|
|
--]]
|
|
else
|
|
--
|
|
self.baseframe:Show()
|
|
self.baseframe:SetAlpha (1)
|
|
|
|
self:InstanceAlpha(min (amount, self.color[4]))
|
|
Details.FadeHandler.Fader(self.rowframe, "ALPHAANIM", rowsamount)
|
|
Details.FadeHandler.Fader(self.baseframe, "ALPHAANIM", rowsamount)
|
|
--]]
|
|
end
|
|
|
|
if (self.show_statusbar) then
|
|
self.baseframe.barra_fundo:Hide()
|
|
end
|
|
if (self.hide_icon) then
|
|
self.baseframe.cabecalho.atributo_icon:Hide()
|
|
end
|
|
|
|
end
|
|
|
|
function _detalhes:InstanceButtonsColors (red, green, blue, alpha, no_save, only_left, only_right)
|
|
|
|
if (not red) then
|
|
red, green, blue, alpha = unpack (self.color_buttons)
|
|
end
|
|
|
|
if (type (red) ~= "number") then
|
|
red, green, blue, alpha = gump:ParseColors (red)
|
|
end
|
|
|
|
if (not no_save) then
|
|
self.color_buttons [1] = red
|
|
self.color_buttons [2] = green
|
|
self.color_buttons [3] = blue
|
|
self.color_buttons [4] = alpha
|
|
end
|
|
|
|
local baseToolbar = self.baseframe.cabecalho
|
|
|
|
|
|
if (only_left) then
|
|
|
|
local icons = {baseToolbar.modo_selecao, baseToolbar.segmento, baseToolbar.atributo, baseToolbar.report, baseToolbar.fechar, baseToolbar.reset, baseToolbar.fechar}
|
|
|
|
for _, button in _ipairs (icons) do
|
|
button:SetAlpha (alpha)
|
|
end
|
|
|
|
if (self:IsLowerInstance()) then
|
|
for _, ThisButton in _ipairs (_detalhes.ToolBar.Shown) do
|
|
ThisButton:SetAlpha (alpha)
|
|
end
|
|
end
|
|
|
|
else
|
|
|
|
local icons = {baseToolbar.modo_selecao, baseToolbar.segmento, baseToolbar.atributo, baseToolbar.report, baseToolbar.fechar, baseToolbar.reset, baseToolbar.fechar}
|
|
|
|
for _, button in _ipairs (icons) do
|
|
button:SetAlpha (alpha)
|
|
end
|
|
|
|
if (self:IsLowerInstance()) then
|
|
for _, ThisButton in _ipairs (_detalhes.ToolBar.Shown) do
|
|
ThisButton:SetAlpha (alpha)
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
function _detalhes:InstanceAlpha (alpha)
|
|
self.baseframe.cabecalho.ball_r:SetAlpha (alpha)
|
|
self.baseframe.cabecalho.ball:SetAlpha (alpha)
|
|
|
|
local skin = _detalhes.skins [self.skin]
|
|
if (not skin.icon_ignore_alpha) then
|
|
self.baseframe.cabecalho.atributo_icon:SetAlpha (alpha)
|
|
end
|
|
|
|
self.baseframe.cabecalho.emenda:SetAlpha (alpha)
|
|
self.baseframe.cabecalho.top_bg:SetAlpha (alpha)
|
|
self.baseframe.barra_esquerda:SetAlpha (alpha)
|
|
self.baseframe.barra_direita:SetAlpha (alpha)
|
|
self.baseframe.barra_fundo:SetAlpha (alpha)
|
|
self.baseframe.UPFrame:SetAlpha (alpha)
|
|
end
|
|
|
|
function _detalhes:InstanceColor (red, green, blue, alpha, no_save, change_statusbar)
|
|
|
|
if (not red) then
|
|
red, green, blue, alpha = unpack (self.color)
|
|
no_save = true
|
|
end
|
|
|
|
if (type (red) ~= "number") then
|
|
red, green, blue, alpha = gump:ParseColors (red)
|
|
end
|
|
|
|
if (not no_save) then
|
|
--> saving
|
|
self.color [1] = red
|
|
self.color [2] = green
|
|
self.color [3] = blue
|
|
self.color [4] = alpha
|
|
if (change_statusbar) then
|
|
self:StatusBarColor (red, green, blue, alpha)
|
|
end
|
|
else
|
|
--> not saving
|
|
self:StatusBarColor (nil, nil, nil, alpha, true)
|
|
end
|
|
|
|
local skin = _detalhes.skins [self.skin]
|
|
if (not skin) then --the skin isn't available any more
|
|
Details:Msg ("Skin " .. (self.skin or "?") .. " not found, changing to 'Dark Theme'.")
|
|
Details:Msg ("Recommended to change the skin in the option panel > Skin Selection.")
|
|
skin = _detalhes.skins ["Minimalistic"]
|
|
self.skin = "Minimalistic"
|
|
end
|
|
|
|
self.baseframe.cabecalho.ball_r:SetVertexColor (red, green, blue)
|
|
self.baseframe.cabecalho.ball_r:SetAlpha (alpha)
|
|
|
|
self.baseframe.cabecalho.ball:SetVertexColor (red, green, blue)
|
|
self.baseframe.cabecalho.ball:SetAlpha (alpha)
|
|
|
|
if (not skin.icon_ignore_alpha) then
|
|
self.baseframe.cabecalho.atributo_icon:SetAlpha (alpha)
|
|
end
|
|
|
|
self.baseframe.cabecalho.emenda:SetVertexColor (red, green, blue)
|
|
self.baseframe.cabecalho.emenda:SetAlpha (alpha)
|
|
self.baseframe.cabecalho.top_bg:SetVertexColor (red, green, blue)
|
|
self.baseframe.cabecalho.top_bg:SetAlpha (alpha)
|
|
|
|
self.baseframe.barra_esquerda:SetVertexColor (red, green, blue)
|
|
self.baseframe.barra_esquerda:SetAlpha (alpha)
|
|
self.baseframe.barra_direita:SetVertexColor (red, green, blue)
|
|
self.baseframe.barra_direita:SetAlpha (alpha)
|
|
self.baseframe.barra_fundo:SetVertexColor (red, green, blue)
|
|
self.baseframe.barra_fundo:SetAlpha (alpha)
|
|
|
|
self.baseframe.UPFrame:SetAlpha (alpha)
|
|
|
|
--self.color[1], self.color[2], self.color[3], self.color[4] = red, green, blue, alpha
|
|
end
|
|
|
|
function _detalhes:StatusBarAlertTime (instance)
|
|
instance.baseframe.statusbar:Hide()
|
|
end
|
|
|
|
function _detalhes:StatusBarAlert (text, icon, color, time)
|
|
|
|
local statusbar = self.baseframe.statusbar
|
|
|
|
if (text) then
|
|
if (type (text) == "table") then
|
|
if (text.color) then
|
|
statusbar.text:SetTextColor (gump:ParseColors (text.color))
|
|
else
|
|
statusbar.text:SetTextColor (1, 1, 1, 1)
|
|
end
|
|
|
|
statusbar.text:SetText (text.text or "")
|
|
|
|
if (text.size) then
|
|
_detalhes:SetFontSize (statusbar.text, text.size)
|
|
else
|
|
_detalhes:SetFontSize (statusbar.text, 9)
|
|
end
|
|
else
|
|
statusbar.text:SetText (text)
|
|
statusbar.text:SetTextColor (1, 1, 1, 1)
|
|
_detalhes:SetFontSize (statusbar.text, 9)
|
|
end
|
|
else
|
|
statusbar.text:SetText ("")
|
|
end
|
|
|
|
if (icon) then
|
|
if (type (icon) == "table") then
|
|
local texture, w, h, l, r, t, b = unpack (icon)
|
|
statusbar.icon:SetTexture (texture)
|
|
statusbar.icon:SetWidth (w or 14)
|
|
statusbar.icon:SetHeight (h or 14)
|
|
if (l and r and t and b) then
|
|
statusbar.icon:SetTexCoord (l, r, t, b)
|
|
end
|
|
else
|
|
statusbar.icon:SetTexture (icon)
|
|
statusbar.icon:SetWidth (14)
|
|
statusbar.icon:SetHeight (14)
|
|
statusbar.icon:SetTexCoord (0, 1, 0, 1)
|
|
end
|
|
else
|
|
statusbar.icon:SetTexture (nil)
|
|
end
|
|
|
|
if (color) then
|
|
statusbar:SetBackdropColor (gump:ParseColors (color))
|
|
else
|
|
statusbar:SetBackdropColor (0, 0, 0, 1)
|
|
end
|
|
|
|
if (icon or text) then
|
|
statusbar:Show()
|
|
if (time) then
|
|
_detalhes:ScheduleTimer ("StatusBarAlertTime", time, self)
|
|
end
|
|
else
|
|
statusbar:Hide()
|
|
end
|
|
end
|
|
|
|
|
|
function gump:CriaRodape (baseframe, instancia)
|
|
|
|
baseframe.rodape = {}
|
|
|
|
--> esquerdo com statusbar
|
|
baseframe.rodape.esquerdo = instancia.floatingframe:CreateTexture (nil, "overlay")
|
|
baseframe.rodape.esquerdo:SetPoint ("topright", baseframe, "bottomleft", 16, 0)
|
|
baseframe.rodape.esquerdo:SetTexture (DEFAULT_SKIN)
|
|
baseframe.rodape.esquerdo:SetTexCoord (unpack (COORDS_PIN_LEFT))
|
|
baseframe.rodape.esquerdo:SetWidth (32)
|
|
baseframe.rodape.esquerdo:SetHeight (32)
|
|
|
|
--> esquerdo sem statusbar
|
|
baseframe.rodape.esquerdo_nostatusbar = instancia.floatingframe:CreateTexture (nil, "overlay")
|
|
baseframe.rodape.esquerdo_nostatusbar:SetPoint ("topright", baseframe, "bottomleft", 16, 14)
|
|
baseframe.rodape.esquerdo_nostatusbar:SetTexture (DEFAULT_SKIN)
|
|
baseframe.rodape.esquerdo_nostatusbar:SetTexCoord (unpack (COORDS_PIN_LEFT))
|
|
baseframe.rodape.esquerdo_nostatusbar:SetWidth (32)
|
|
baseframe.rodape.esquerdo_nostatusbar:SetHeight (32)
|
|
|
|
--> direito com statusbar
|
|
baseframe.rodape.direita = instancia.floatingframe:CreateTexture (nil, "overlay")
|
|
baseframe.rodape.direita:SetPoint ("topleft", baseframe, "bottomright", -16, 0)
|
|
baseframe.rodape.direita:SetTexture (DEFAULT_SKIN)
|
|
baseframe.rodape.direita:SetTexCoord (unpack (COORDS_PIN_RIGHT))
|
|
baseframe.rodape.direita:SetWidth (32)
|
|
baseframe.rodape.direita:SetHeight (32)
|
|
|
|
--> direito sem statusbar
|
|
baseframe.rodape.direita_nostatusbar = instancia.floatingframe:CreateTexture (nil, "overlay")
|
|
baseframe.rodape.direita_nostatusbar:SetPoint ("topleft", baseframe, "bottomright", -16, 14)
|
|
baseframe.rodape.direita_nostatusbar:SetTexture (DEFAULT_SKIN)
|
|
baseframe.rodape.direita_nostatusbar:SetTexCoord (unpack (COORDS_PIN_RIGHT))
|
|
baseframe.rodape.direita_nostatusbar:SetWidth (32)
|
|
baseframe.rodape.direita_nostatusbar:SetHeight (32)
|
|
|
|
--> barra centro
|
|
baseframe.rodape.top_bg = baseframe:CreateTexture (nil, "background")
|
|
baseframe.rodape.top_bg:SetTexture (DEFAULT_SKIN)
|
|
baseframe.rodape.top_bg:SetTexCoord (unpack (COORDS_BOTTOM_BACKGROUND))
|
|
baseframe.rodape.top_bg:SetWidth (512)
|
|
baseframe.rodape.top_bg:SetHeight (128)
|
|
baseframe.rodape.top_bg:SetPoint ("left", baseframe.rodape.esquerdo, "right", -16, -48)
|
|
baseframe.rodape.top_bg:SetPoint ("right", baseframe.rodape.direita, "left", 16, -48)
|
|
|
|
local StatusBarLeftAnchor = CreateFrame ("frame", "DetailsStatusBarAnchorLeft" .. instancia.meu_id, baseframe)
|
|
StatusBarLeftAnchor:SetPoint ("left", baseframe.rodape.top_bg, "left", 5, 57)
|
|
StatusBarLeftAnchor:SetWidth (1)
|
|
StatusBarLeftAnchor:SetHeight (1)
|
|
baseframe.rodape.StatusBarLeftAnchor = StatusBarLeftAnchor
|
|
|
|
local StatusBarCenterAnchor = CreateFrame ("frame", "DetailsStatusBarAnchorCenter" .. instancia.meu_id, baseframe)
|
|
StatusBarCenterAnchor:SetPoint ("center", baseframe.rodape.top_bg, "center", 0, 57)
|
|
StatusBarCenterAnchor:SetWidth (1)
|
|
StatusBarCenterAnchor:SetHeight (1)
|
|
baseframe.rodape.StatusBarCenterAnchor = StatusBarCenterAnchor
|
|
|
|
--> display frame
|
|
baseframe.statusbar = CreateFrame ("frame", "DetailsStatusBar" .. instancia.meu_id, instancia.floatingframe,"BackdropTemplate")
|
|
baseframe.statusbar:SetFrameLevel (instancia.floatingframe:GetFrameLevel()+2)
|
|
baseframe.statusbar:SetPoint ("left", baseframe.rodape.esquerdo, "right", -13, 10)
|
|
baseframe.statusbar:SetPoint ("right", baseframe.rodape.direita, "left", 13, 10)
|
|
baseframe.statusbar:SetHeight (14)
|
|
|
|
local statusbar_icon = baseframe.statusbar:CreateTexture (nil, "overlay")
|
|
statusbar_icon:SetWidth (14)
|
|
statusbar_icon:SetHeight (14)
|
|
statusbar_icon:SetPoint ("left", baseframe.statusbar, "left")
|
|
|
|
local statusbar_text = baseframe.statusbar:CreateFontString (nil, "overlay", "GameFontNormal")
|
|
statusbar_text:SetPoint ("left", statusbar_icon, "right", 2, 0)
|
|
|
|
baseframe.statusbar:SetBackdrop ({
|
|
bgFile = [[Interface\AddOns\Details\images\background]], tile = true, tileSize = 16,
|
|
insets = {left = 0, right = 0, top = 0, bottom = 0}})
|
|
baseframe.statusbar:SetBackdropColor (0, 0, 0, 1)
|
|
|
|
baseframe.statusbar.icon = statusbar_icon
|
|
baseframe.statusbar.text = statusbar_text
|
|
baseframe.statusbar.instancia = instancia
|
|
|
|
baseframe.statusbar:Hide()
|
|
|
|
--> frame invis�vel
|
|
baseframe.DOWNFrame = CreateFrame ("frame", "DetailsDownFrame" .. instancia.meu_id, baseframe)
|
|
baseframe.DOWNFrame:SetPoint ("left", baseframe.rodape.esquerdo, "right", 0, 10)
|
|
baseframe.DOWNFrame:SetPoint ("right", baseframe.rodape.direita, "left", 0, 10)
|
|
baseframe.DOWNFrame:SetHeight (14)
|
|
|
|
baseframe.DOWNFrame:Show()
|
|
baseframe.DOWNFrame:EnableMouse (true)
|
|
baseframe.DOWNFrame:SetMovable (true)
|
|
baseframe.DOWNFrame:SetResizable (true)
|
|
|
|
BGFrame_scripts (baseframe.DOWNFrame, baseframe, instancia)
|
|
end
|
|
|
|
function _detalhes:GetMenuAnchorPoint()
|
|
local toolbar_side = self.toolbar_side
|
|
local menu_side = self.menu_anchor.side
|
|
|
|
if (menu_side == 1) then --left
|
|
if (toolbar_side == 1) then --top
|
|
return self.menu_points [1], "bottomleft", "bottomright"
|
|
elseif (toolbar_side == 2) then --bottom
|
|
return self.menu_points [1], "topleft", "topright"
|
|
end
|
|
elseif (menu_side == 2) then --right
|
|
if (toolbar_side == 1) then --top
|
|
return self.menu_points [2], "topleft", "bottomleft"
|
|
elseif (toolbar_side == 2) then --bottom
|
|
return self.menu_points [2], "topleft", "topleft"
|
|
end
|
|
end
|
|
end
|
|
|
|
--> search key: ~icon
|
|
function _detalhes:ToolbarMenuButtonsSize (size)
|
|
size = size or self.menu_icons_size
|
|
self.menu_icons_size = size
|
|
return self:ToolbarMenuButtons()
|
|
end
|
|
|
|
local SetIconAlphaCacheButtonsTable = {}
|
|
function _detalhes:SetIconAlpha (alpha, hide, no_animations)
|
|
|
|
if (self.attribute_text.enabled) then
|
|
if (not self.menu_attribute_string) then --> create on demand
|
|
self:AttributeMenu()
|
|
end
|
|
|
|
if (hide) then
|
|
Details.FadeHandler.Fader (self.menu_attribute_string.widget, _unpack (_detalhes.windows_fade_in))
|
|
else
|
|
if (no_animations) then
|
|
self.menu_attribute_string:SetAlpha (alpha)
|
|
else
|
|
Details.FadeHandler.Fader (self.menu_attribute_string.widget, "ALPHAANIM", alpha)
|
|
end
|
|
end
|
|
end
|
|
|
|
table.wipe (SetIconAlphaCacheButtonsTable)
|
|
SetIconAlphaCacheButtonsTable [1] = self.baseframe.cabecalho.modo_selecao
|
|
SetIconAlphaCacheButtonsTable [2] = self.baseframe.cabecalho.segmento
|
|
SetIconAlphaCacheButtonsTable [3] = self.baseframe.cabecalho.atributo
|
|
SetIconAlphaCacheButtonsTable [4] = self.baseframe.cabecalho.report
|
|
SetIconAlphaCacheButtonsTable [5] = self.baseframe.cabecalho.reset
|
|
SetIconAlphaCacheButtonsTable [6] = self.baseframe.cabecalho.fechar
|
|
|
|
if (alpha == 1) then
|
|
alpha = self.menu_icons_alpha
|
|
end
|
|
|
|
for index, button in _ipairs (SetIconAlphaCacheButtonsTable) do
|
|
if (self.menu_icons [index]) then
|
|
if (hide) then
|
|
--Details.FadeHandler.Fader (button, _unpack (_detalhes.windows_fade_in))
|
|
button:Hide()
|
|
else
|
|
button:Show()
|
|
button:SetAlpha(alpha)
|
|
--if (no_animations) then
|
|
-- button:SetAlpha (alpha)
|
|
--else
|
|
-- Details.FadeHandler.Fader (button, "ALPHAANIM", alpha)
|
|
--end
|
|
end
|
|
end
|
|
end
|
|
|
|
if (self:IsLowerInstance()) then
|
|
if (#_detalhes.ToolBar.Shown > 0) then
|
|
for index, button in ipairs (_detalhes.ToolBar.Shown) do
|
|
if (hide) then
|
|
Details.FadeHandler.Fader (button, _unpack (_detalhes.windows_fade_in))
|
|
else
|
|
if (no_animations) then
|
|
button:SetAlpha (alpha)
|
|
else
|
|
Details.FadeHandler.Fader (button, "ALPHAANIM", alpha)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function _detalhes:ToolbarMenuSetButtonsOptions (spacement, shadow)
|
|
if (type (spacement) ~= "number") then
|
|
spacement = self.menu_icons.space
|
|
end
|
|
|
|
if (type (shadow) ~= "boolean") then
|
|
shadow = self.menu_icons.shadow
|
|
end
|
|
|
|
self.menu_icons.space = spacement
|
|
self.menu_icons.shadow = shadow
|
|
|
|
return self:ToolbarMenuSetButtons()
|
|
end
|
|
|
|
-- search key: ~buttons ~icons
|
|
|
|
local tbuttons = {}
|
|
function _detalhes:ToolbarMenuSetButtons (_mode, _segment, _attributes, _report, _reset, _close)
|
|
|
|
if (_mode == nil) then
|
|
_mode = self.menu_icons[1]
|
|
end
|
|
if (_segment == nil) then
|
|
_segment = self.menu_icons[2]
|
|
end
|
|
if (_attributes == nil) then
|
|
_attributes = self.menu_icons[3]
|
|
end
|
|
if (_report == nil) then
|
|
_report = self.menu_icons[4]
|
|
end
|
|
if (_reset == nil) then
|
|
_reset = self.menu_icons[5]
|
|
end
|
|
if (_close == nil) then
|
|
_close = self.menu_icons[6]
|
|
end
|
|
|
|
self.menu_icons[1] = _mode
|
|
self.menu_icons[2] = _segment
|
|
self.menu_icons[3] = _attributes
|
|
self.menu_icons[4] = _report
|
|
self.menu_icons[5] = _reset
|
|
self.menu_icons[6] = _close
|
|
|
|
table.wipe (tbuttons)
|
|
|
|
tbuttons [1] = self.baseframe.cabecalho.modo_selecao
|
|
tbuttons [2] = self.baseframe.cabecalho.segmento
|
|
tbuttons [3] = self.baseframe.cabecalho.atributo
|
|
tbuttons [4] = self.baseframe.cabecalho.report
|
|
tbuttons [5] = self.baseframe.cabecalho.reset
|
|
tbuttons [6] = self.baseframe.cabecalho.fechar
|
|
|
|
local anchor_frame, point1, point2 = self:GetMenuAnchorPoint()
|
|
local got_anchor = false
|
|
|
|
self.lastIcon = nil
|
|
self.firstIcon = nil
|
|
|
|
local size = self.menu_icons_size
|
|
local space = self.menu_icons.space
|
|
local shadow = self.menu_icons.shadow
|
|
|
|
local toolbar_icon_file = self.toolbar_icon_file
|
|
if (shadow) then
|
|
toolbar_icon_file = toolbar_icon_file .. "_shadow"
|
|
end
|
|
|
|
local total_buttons_shown = 0
|
|
|
|
--> normal buttons
|
|
if (self.menu_anchor.side == 1) then
|
|
for index, button in _ipairs (tbuttons) do
|
|
if (self.menu_icons [index]) then
|
|
button:ClearAllPoints()
|
|
if (got_anchor) then
|
|
button:SetPoint ("left", self.lastIcon.widget or self.lastIcon, "right", space, 0)
|
|
else
|
|
button:SetPoint (point1, anchor_frame, point2)
|
|
got_anchor = button
|
|
self.firstIcon = button
|
|
end
|
|
self.lastIcon = button
|
|
button:SetParent (self.baseframe)
|
|
button:SetFrameLevel (self.baseframe.UPFrame:GetFrameLevel()+1)
|
|
button:Show()
|
|
|
|
button:SetSize (16*size, 16*size)
|
|
|
|
button:SetNormalTexture (toolbar_icon_file)
|
|
button:SetHighlightTexture (toolbar_icon_file)
|
|
button:SetPushedTexture (toolbar_icon_file)
|
|
|
|
total_buttons_shown = total_buttons_shown + 1
|
|
else
|
|
button:Hide()
|
|
end
|
|
end
|
|
|
|
elseif (self.menu_anchor.side == 2) then
|
|
for index = #tbuttons, 1, -1 do
|
|
local button = tbuttons [index]
|
|
|
|
if (self.menu_icons [index]) then
|
|
button:ClearAllPoints()
|
|
if (got_anchor) then
|
|
button:SetPoint ("right", self.lastIcon.widget or self.lastIcon, "left", -space, 0)
|
|
else
|
|
button:SetPoint (point1, anchor_frame, point2)
|
|
got_anchor = button
|
|
self.firstIcon = button
|
|
end
|
|
self.lastIcon = button
|
|
button:SetParent (self.baseframe)
|
|
button:SetFrameLevel (self.baseframe.UPFrame:GetFrameLevel()+1)
|
|
button:Show()
|
|
|
|
button:SetSize (16*size, 16*size)
|
|
|
|
button:SetNormalTexture (toolbar_icon_file)
|
|
button:SetHighlightTexture (toolbar_icon_file)
|
|
button:SetPushedTexture (toolbar_icon_file)
|
|
|
|
total_buttons_shown = total_buttons_shown + 1
|
|
else
|
|
button:Hide()
|
|
end
|
|
end
|
|
end
|
|
|
|
--> plugins buttons
|
|
|
|
local pluginFirstIcon = true
|
|
if (not self.baseframe.cabecalho.PluginIconsSeparator) then
|
|
self.baseframe.cabecalho.PluginIconsSeparator = self.baseframe:CreateTexture (nil, "overlay")
|
|
self.baseframe.cabecalho.PluginIconsSeparator:SetTexture ([[Interface\FriendsFrame\StatusIcon-Offline]])
|
|
|
|
local color = 0
|
|
self.baseframe.cabecalho.PluginIconsSeparator:SetVertexColor (color, color, color)
|
|
self.baseframe.cabecalho.PluginIconsSeparator:SetAlpha (0.2)
|
|
|
|
local scale = 0.4
|
|
self.baseframe.cabecalho.PluginIconsSeparator:SetSize (16 * scale, 16 * scale)
|
|
end
|
|
|
|
self.baseframe.cabecalho.PluginIconsSeparator:Hide()
|
|
|
|
if (self:IsLowerInstance()) then
|
|
if (#_detalhes.ToolBar.Shown > 0) then
|
|
|
|
local last_plugin_icon
|
|
|
|
if (#_detalhes.ToolBar.Shown > 0) then
|
|
self.baseframe.cabecalho.PluginIconsSeparator:Show()
|
|
self.baseframe.cabecalho.PluginIconsSeparator:ClearAllPoints()
|
|
self.baseframe.cabecalho.PluginIconsSeparator.widget = self.baseframe.cabecalho.PluginIconsSeparator
|
|
end
|
|
|
|
for index, button in ipairs (_detalhes.ToolBar.Shown) do
|
|
button:ClearAllPoints()
|
|
|
|
if (got_anchor) then
|
|
if (pluginFirstIcon) then
|
|
-- space = space + 6 --was adding an extra padding between plugin icons
|
|
end
|
|
|
|
if (self.plugins_grow_direction == 2) then --right
|
|
if (self.menu_anchor.side == 1) then --left
|
|
|
|
local temp_space = space
|
|
|
|
if (pluginFirstIcon) then
|
|
temp_space = temp_space / 3
|
|
self.baseframe.cabecalho.PluginIconsSeparator:SetPoint ("left", last_plugin_icon or self.lastIcon.widget or self.lastIcon, "right", temp_space, 0)
|
|
self.lastIcon = self.baseframe.cabecalho.PluginIconsSeparator
|
|
end
|
|
|
|
button:SetPoint ("left", self.lastIcon.widget or self.lastIcon, "right", temp_space, 0)
|
|
|
|
elseif (self.menu_anchor.side == 2) then --right
|
|
|
|
local temp_space = space
|
|
|
|
if (pluginFirstIcon) then
|
|
temp_space = temp_space / 3
|
|
self.baseframe.cabecalho.PluginIconsSeparator:SetPoint ("left", last_plugin_icon or self.firstIcon.widget or self.firstIcon, "right", temp_space, 0)
|
|
self.lastIcon = self.baseframe.cabecalho.PluginIconsSeparator
|
|
end
|
|
|
|
button:SetPoint ("left", last_plugin_icon or self.lastIcon.widget or self.firstIcon, "right", temp_space, 0)
|
|
|
|
end
|
|
|
|
elseif (self.plugins_grow_direction == 1) then --left
|
|
if (self.menu_anchor.side == 1) then --left
|
|
|
|
local temp_space = space
|
|
|
|
if (pluginFirstIcon) then
|
|
temp_space = temp_space / 3
|
|
self.baseframe.cabecalho.PluginIconsSeparator:SetPoint ("right", last_plugin_icon or self.firstIcon.widget or self.firstIcon, "left", -temp_space, 0)
|
|
self.lastIcon = self.baseframe.cabecalho.PluginIconsSeparator
|
|
end
|
|
|
|
button:SetPoint ("right", last_plugin_icon or self.lastIcon.widget or self.firstIcon, "left", -temp_space, 0)
|
|
|
|
elseif (self.menu_anchor.side == 2) then --right
|
|
|
|
local temp_space = space
|
|
|
|
if (pluginFirstIcon) then
|
|
temp_space = temp_space / 3
|
|
self.baseframe.cabecalho.PluginIconsSeparator:SetPoint ("right", last_plugin_icon or self.lastIcon.widget or self.lastIcon, "left", -temp_space, 0)
|
|
self.lastIcon = self.baseframe.cabecalho.PluginIconsSeparator
|
|
|
|
end
|
|
|
|
button:SetPoint ("right", last_plugin_icon or self.lastIcon.widget or self.firstIcon, "left", -temp_space, 0)
|
|
end
|
|
end
|
|
|
|
pluginFirstIcon = false
|
|
else
|
|
button:SetPoint (point1, anchor_frame, point2)
|
|
self.firstIcon = button
|
|
got_anchor = button
|
|
end
|
|
|
|
self.lastIcon = button
|
|
last_plugin_icon = button
|
|
|
|
button:SetParent (self.baseframe)
|
|
button:SetFrameLevel (self.baseframe.UPFrame:GetFrameLevel()+1)
|
|
button:Show()
|
|
|
|
button:SetSize (16*size, 16*size)
|
|
|
|
if (shadow and button.shadow) then
|
|
button:SetNormalTexture (button.__icon .. "_shadow")
|
|
button:SetPushedTexture (button.__icon .. "_shadow")
|
|
button:SetHighlightTexture (button.__icon .. "_shadow", "ADD")
|
|
else
|
|
button:SetNormalTexture (button.__icon)
|
|
button:SetPushedTexture (button.__icon)
|
|
button:SetHighlightTexture (button.__icon, "ADD")
|
|
end
|
|
|
|
total_buttons_shown = total_buttons_shown + 1
|
|
end
|
|
end
|
|
|
|
if (self.baseframe.cabecalho.PluginIconsSeparator:IsShown()) then
|
|
if (self.baseframe.cabecalho.modo_selecao:GetAlpha() == 0) then
|
|
self.baseframe.cabecalho.PluginIconsSeparator:Hide()
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
self.total_buttons_shown = total_buttons_shown
|
|
self:RefreshAttributeTextSize()
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
function _detalhes:ToolbarMenuButtons (_mode, _segment, _attributes, _report)
|
|
return self:ToolbarMenuSetButtons (_mode, _segment, _attributes, _report)
|
|
end
|
|
|
|
local parameters_table = {}
|
|
|
|
local on_leave_menu = function (self, elapsed)
|
|
parameters_table[2] = parameters_table[2] + elapsed
|
|
if (parameters_table[2] > 0.3) then
|
|
if (not _G.GameCooltip.mouseOver and not _G.GameCooltip.buttonOver and (not _G.GameCooltip:GetOwner() or _G.GameCooltip:GetOwner() == self)) then
|
|
_G.GameCooltip:ShowMe (false)
|
|
end
|
|
self:SetScript ("OnUpdate", nil)
|
|
end
|
|
end
|
|
|
|
local OnClickNovoMenu = function (_, _, id, instance)
|
|
|
|
local is_new
|
|
if (not _detalhes.tabela_instancias [id]) then
|
|
--> esta criando uma nova
|
|
is_new = true
|
|
end
|
|
|
|
local ninstance = _detalhes.CriarInstancia (_, _, id)
|
|
instance.baseframe.cabecalho.modo_selecao:GetScript ("OnEnter")(instance.baseframe.cabecalho.modo_selecao, _, true)
|
|
|
|
if (ninstance and is_new) then
|
|
ninstance.baseframe.cabecalho.modo_selecao:GetScript ("OnEnter")(ninstance.baseframe.cabecalho.modo_selecao, _, true)
|
|
end
|
|
end
|
|
|
|
function _detalhes:SetTooltipMinWidth()
|
|
GameCooltip:SetOption ("MinWidth", 155)
|
|
end
|
|
|
|
function _detalhes:FormatCooltipBackdrop()
|
|
local CoolTip = GameCooltip
|
|
CoolTip:SetBackdrop (1, menus_backdrop, menus_backdropcolor, menus_bordercolor)
|
|
CoolTip:SetBackdrop (2, menus_backdrop, menus_backdropcolor_sec, menus_bordercolor)
|
|
end
|
|
|
|
local build_mode_list = function (self, elapsed)
|
|
|
|
local CoolTip = GameCooltip
|
|
local instancia = parameters_table [1]
|
|
parameters_table[2] = parameters_table[2] + elapsed
|
|
|
|
if (parameters_table[2] > 0.15) then
|
|
self:SetScript ("OnUpdate", nil)
|
|
|
|
CoolTip:Reset()
|
|
CoolTip:SetType ("menu")
|
|
CoolTip:SetLastSelected ("main", parameters_table [3])
|
|
CoolTip:SetFixedParameter (instancia)
|
|
|
|
CoolTip:SetOption ("TextSize", _detalhes.font_sizes.menus)
|
|
CoolTip:SetOption ("TextFont", _detalhes.font_faces.menus)
|
|
|
|
CoolTip:SetOption ("ButtonHeightModSub", -2)
|
|
CoolTip:SetOption ("ButtonHeightMod", -5)
|
|
|
|
CoolTip:SetOption ("ButtonsYModSub", -3)
|
|
CoolTip:SetOption ("ButtonsYMod", -6)
|
|
|
|
CoolTip:SetOption ("YSpacingModSub", -3)
|
|
CoolTip:SetOption ("YSpacingMod", 1)
|
|
|
|
CoolTip:SetOption ("HeighMod", 3)
|
|
CoolTip:SetOption ("SubFollowButton", true)
|
|
|
|
_detalhes:SetTooltipMinWidth()
|
|
|
|
CoolTip:AddLine (Loc ["STRING_MODE_GROUP"])
|
|
CoolTip:AddMenu (1, instancia.AlteraModo, 2, true)
|
|
CoolTip:AddIcon ([[Interface\AddOns\Details\images\modo_icones]], 1, 1, 20, 20, 32/256, 32/256*2, 0, 1)
|
|
|
|
CoolTip:AddLine (Loc ["STRING_MODE_ALL"])
|
|
CoolTip:AddMenu (1, instancia.AlteraModo, 3, true)
|
|
CoolTip:AddIcon ([[Interface\AddOns\Details\images\modo_icones]], 1, 1, 20, 20, 32/256*2, 32/256*3, 0, 1)
|
|
|
|
CoolTip:AddLine (Loc ["STRING_OPTIONS_PLUGINS"])
|
|
CoolTip:AddMenu (1, instancia.AlteraModo, 4, true)
|
|
CoolTip:AddIcon ([[Interface\AddOns\Details\images\modo_icones]], 1, 1, 20, 20, 32/256*3, 32/256*4, 0, 1)
|
|
|
|
--build raid plugins list
|
|
local raidPlugins = _detalhes.RaidTables:GetAvailablePlugins()
|
|
if (#raidPlugins >= 0) then
|
|
for index, ptable in _ipairs (raidPlugins) do
|
|
--if a plugin has the member 'NoMenu', it won't be shown on menus to select plugins
|
|
if (ptable[3].__enabled and not ptable[3].NoMenu) then
|
|
--PluginName, PluginIcon, PluginObject, PluginAbsoluteName
|
|
CoolTip:AddMenu (2, _detalhes.RaidTables.EnableRaidMode, instancia, ptable[4], true, ptable[1], ptable[2], true)
|
|
end
|
|
end
|
|
end
|
|
--build self plugins list
|
|
if (#_detalhes.SoloTables.Menu > 0) then
|
|
for index, ptable in _ipairs (_detalhes.SoloTables.Menu) do
|
|
if (ptable[3].__enabled and not ptable[3].NoMenu) then
|
|
CoolTip:AddMenu (2, _detalhes.SoloTables.EnableSoloMode, instancia, ptable[4], true, ptable[1], ptable[2], true)
|
|
end
|
|
end
|
|
end
|
|
|
|
--> window control
|
|
GameCooltip:AddLine ("$div")
|
|
CoolTip:AddLine (Loc ["STRING_MENU_INSTANCE_CONTROL"])
|
|
CoolTip:AddIcon ([[Interface\AddOns\Details\images\modo_icones]], 1, 1, 20, 20, 0.625, 0.75, 0, 1)
|
|
|
|
local HaveClosedInstances = false
|
|
for index = 1, math.min (#_detalhes.tabela_instancias, _detalhes.instances_amount), 1 do
|
|
local _this_instance = _detalhes.tabela_instancias [index]
|
|
if (not _this_instance.ativa) then
|
|
HaveClosedInstances = true
|
|
break
|
|
end
|
|
end
|
|
|
|
if (_detalhes:GetNumInstancesAmount() < _detalhes:GetMaxInstancesAmount()) then
|
|
CoolTip:AddMenu (2, OnClickNovoMenu, true, instancia, nil, Loc ["STRING_OPTIONS_WC_CREATE"], _, true)
|
|
CoolTip:AddIcon ([[Interface\Buttons\UI-AttributeButton-Encourage-Up]], 2, 1, 16, 16)
|
|
if (HaveClosedInstances) then
|
|
GameCooltip:AddLine ("$div", nil, 2, nil, -5, -11)
|
|
end
|
|
end
|
|
|
|
local ClosedInstances = 0
|
|
|
|
for index = 1, math.min (#_detalhes.tabela_instancias, _detalhes.instances_amount), 1 do
|
|
|
|
local _this_instance = _detalhes.tabela_instancias [index]
|
|
|
|
if (not _this_instance.ativa) then --> s� reabre se ela estiver ativa
|
|
|
|
--> pegar o que ela ta mostrando
|
|
local atributo = _this_instance.atributo
|
|
local sub_atributo = _this_instance.sub_atributo
|
|
ClosedInstances = ClosedInstances + 1
|
|
|
|
if (atributo == 5) then --> custom
|
|
|
|
local CustomObject = _detalhes.custom [sub_atributo]
|
|
|
|
if (not CustomObject) then
|
|
_this_instance:ResetAttribute()
|
|
atributo = _this_instance.atributo
|
|
sub_atributo = _this_instance.sub_atributo
|
|
CoolTip:AddMenu (2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " " .. _detalhes.atributos.lista [atributo] .. " - " .. _detalhes.sub_atributos [atributo].lista [sub_atributo], _, true)
|
|
CoolTip:AddIcon (_detalhes.sub_atributos [atributo].icones[sub_atributo] [1], 2, 1, 16, 16, unpack (_detalhes.sub_atributos [atributo].icones[sub_atributo] [2]))
|
|
else
|
|
CoolTip:AddMenu (2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " " .. _detalhes.atributos.lista [atributo] .. " - " .. CustomObject:GetName(), _, true)
|
|
CoolTip:AddIcon (CustomObject.icon, 2, 1, 16, 16, 0, 1, 0, 1)
|
|
end
|
|
|
|
else
|
|
local modo = _this_instance.modo
|
|
|
|
if (modo == 1) then --alone
|
|
|
|
atributo = _detalhes.SoloTables.Mode or 1
|
|
local SoloInfo = _detalhes.SoloTables.Menu [atributo]
|
|
if (SoloInfo) then
|
|
CoolTip:AddMenu (2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " " .. SoloInfo [1], _, true)
|
|
CoolTip:AddIcon (SoloInfo [2], 2, 1, 16, 16, 0, 1, 0, 1)
|
|
else
|
|
CoolTip:AddMenu (2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " Unknown Plugin", _, true)
|
|
end
|
|
|
|
elseif (modo == 4) then --raid
|
|
|
|
local plugin_name = _this_instance.current_raid_plugin or _this_instance.last_raid_plugin
|
|
if (plugin_name) then
|
|
local plugin_object = _detalhes:GetPlugin (plugin_name)
|
|
if (plugin_object) then
|
|
CoolTip:AddMenu (2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " " .. plugin_object.__name, _, true)
|
|
CoolTip:AddIcon (plugin_object.__icon, 2, 1, 16, 16, 0, 1, 0, 1)
|
|
else
|
|
CoolTip:AddMenu (2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " Unknown Plugin", _, true)
|
|
end
|
|
else
|
|
CoolTip:AddMenu (2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " Unknown Plugin", _, true)
|
|
end
|
|
|
|
else
|
|
|
|
--CoolTip:AddMenu (2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " " .. _detalhes.atributos.lista [atributo] .. " - " .. _detalhes.sub_atributos [atributo].lista [sub_atributo], _, true)
|
|
CoolTip:AddMenu (2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " " .. _detalhes.sub_atributos [atributo].lista [sub_atributo], _, true)
|
|
CoolTip:AddIcon (_detalhes.sub_atributos [atributo].icones[sub_atributo] [1], 2, 1, 16, 16, unpack (_detalhes.sub_atributos [atributo].icones[sub_atributo] [2]))
|
|
|
|
end
|
|
end
|
|
|
|
CoolTip:SetOption ("TextSize", _detalhes.font_sizes.menus)
|
|
CoolTip:SetOption ("TextFont", _detalhes.font_faces.menus)
|
|
end
|
|
end
|
|
|
|
if (ClosedInstances > 0 or _detalhes:GetNumInstancesAmount() < _detalhes:GetMaxInstancesAmount()) then
|
|
GameCooltip:AddLine ("$div", nil, 2, nil, -5, -11)
|
|
end
|
|
|
|
GameCooltip:AddLine (Loc ["STRING_MENU_CLOSE_INSTANCE"], nil, 2, "white", nil, _detalhes.font_sizes.menus, _detalhes.font_faces.menus)
|
|
GameCooltip:AddIcon ([[Interface\Buttons\UI-Panel-MinimizeButton-Up]], 2, 1, 14, 14, 0.2, 0.8, 0.2, 0.8)
|
|
GameCooltip:AddMenu (2, _detalhes.close_instancia_func, instancia.baseframe.cabecalho.fechar)
|
|
|
|
--CoolTip:SetWallpaper (2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true)
|
|
|
|
--> space
|
|
GameCooltip:AddLine ("$div")
|
|
|
|
--> forge and history buttons
|
|
CoolTip:AddLine (Loc ["STRING_SPELLLIST"])
|
|
CoolTip:AddMenu (1, _detalhes.OpenForge)
|
|
CoolTip:AddIcon ([[Interface\MINIMAP\Vehicle-HammerGold-3]], 1, 1, 16, 16, 0, 1, 0, 1)
|
|
|
|
--> statistics
|
|
CoolTip:AddLine (Loc ["STRING_STATISTICS"])
|
|
CoolTip:AddMenu (1, _detalhes.OpenRaidHistoryWindow)
|
|
CoolTip:AddIcon ([[Interface\PvPRankBadges\PvPRank08]], 1, 1, 16, 16, 0, 1, 0, 1)
|
|
|
|
--> space
|
|
GameCooltip:AddLine ("$div")
|
|
|
|
--> options
|
|
CoolTip:AddLine (Loc ["STRING_OPTIONS_WINDOW"])
|
|
CoolTip:AddMenu (1, _detalhes.OpenOptionsWindow)
|
|
CoolTip:AddIcon ([[Interface\AddOns\Details\images\modo_icones]], 1, 1, 20, 20, 0.5, 0.625, 0, 1)
|
|
|
|
--> finishes the menu
|
|
_detalhes:SetMenuOwner (self, instancia)
|
|
|
|
--apply the backdrop settings to the menu
|
|
_detalhes:FormatCooltipBackdrop()
|
|
|
|
show_anti_overlap (instancia, self, "top")
|
|
|
|
CoolTip:ShowCooltip()
|
|
end
|
|
end
|
|
|
|
|
|
|
|
function _detalhes:SetMenuOwner (self, instance)
|
|
|
|
local _, y = instance.baseframe:GetCenter()
|
|
local screen_height = GetScreenHeight()
|
|
|
|
if (instance.toolbar_side == 1) then
|
|
if (y+300 > screen_height) then
|
|
GameCooltip:SetOwner (self, "top", "bottom", 0, -10)
|
|
else
|
|
GameCooltip:SetOwner (self)
|
|
end
|
|
|
|
elseif (instance.toolbar_side == 2) then --> bottom
|
|
|
|
local instance_height = instance.baseframe:GetHeight()
|
|
|
|
if (y + math.max (instance_height, 250) > screen_height) then
|
|
GameCooltip:SetOwner (self, "top", "bottom", 0, -10)
|
|
else
|
|
GameCooltip:SetOwner (self, "bottom", "top", 0, 0)
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
local empty_segment_color = {1, 1, 1, .4}
|
|
|
|
local segments_common_tex, segments_common_color = {0.5078125, 0.1171875, 0.017578125, 0.1953125}, {1, 1, 1, .5}
|
|
local unknown_boss_tex, unknown_boss_color = {0.14453125, 0.9296875, 0.2625, 0.6546875}, {1, 1, 1, 0.5}
|
|
|
|
local party_line_color = {170/255, 167/255, 255/255, 1}
|
|
local party_line_color_trash = {130/255, 130/255, 155/255, 1}
|
|
local party_line_color2 = {210/255, 200/255, 255/255, 1}
|
|
local party_line_color2_trash = {110/255, 110/255, 155/255, 1}
|
|
|
|
local party_wallpaper_tex, party_wallpaper_color, raid_wallpaper_tex = {0.09, 0.698125, 0, 0.833984375}, {1, 1, 1, 0.5}, {33/512, 361/512, 45/512, 295/512}
|
|
|
|
local segments_wallpaper_color = {1, 1, 1, 0.5}
|
|
local segment_color_lime = {0, 1, 0, 1}
|
|
local segment_color_red = {1, 0, 0, 1}
|
|
|
|
function _detalhes:GetSegmentInfo (index)
|
|
local combat
|
|
|
|
if (index == -1 or index == "overall") then
|
|
combat = _detalhes.tabela_overall
|
|
elseif (index == 0 or index == "current") then
|
|
combat = _detalhes.tabela_vigente
|
|
else
|
|
combat = _detalhes.tabela_historico.tabelas [index]
|
|
end
|
|
|
|
if (combat) then
|
|
|
|
local enemy
|
|
local color
|
|
local raid_type
|
|
local killed
|
|
local portrait
|
|
local background
|
|
local background_coords
|
|
local is_trash
|
|
|
|
if (combat.is_boss and combat.is_boss.name) then
|
|
|
|
if (combat.instance_type == "party") then
|
|
raid_type = "party"
|
|
enemy = combat.is_boss.name
|
|
color = party_line_color
|
|
|
|
elseif (combat.is_boss.killed) then
|
|
raid_type = "raid"
|
|
enemy = combat.is_boss.name
|
|
color = segment_color_lime
|
|
killed = true
|
|
|
|
else
|
|
raid_type = "raid"
|
|
enemy = combat.is_boss.name
|
|
color = segment_color_red
|
|
killed = false
|
|
|
|
end
|
|
|
|
local p = _detalhes:GetBossPortrait (combat.is_boss.mapid, combat.is_boss.index)
|
|
if (p) then
|
|
portrait = p
|
|
end
|
|
|
|
local b = _detalhes:GetRaidIcon (combat.is_boss.mapid)
|
|
if (b) then
|
|
background = b
|
|
background_coords = segment_color_lime
|
|
|
|
elseif (combat.instance_type == "party") then
|
|
local ej_id = combat.is_boss.ej_instance_id
|
|
if (ej_id) then
|
|
local name, description, bgImage, buttonImage, loreImage, dungeonAreaMapID, link = DetailsFramework.EncounterJournal.EJ_GetInstanceInfo (ej_id)
|
|
if (bgImage) then
|
|
background = bgImage
|
|
background_coords = party_wallpaper_tex
|
|
end
|
|
end
|
|
end
|
|
|
|
elseif (combat.is_arena) then
|
|
enemy = combat.is_arena.name
|
|
|
|
local file, coords = _detalhes:GetArenaInfo (combat.is_arena.mapid)
|
|
|
|
if (file) then
|
|
background = "Interface\\Glues\\LOADINGSCREENS\\" .. file
|
|
background_coords = coords
|
|
end
|
|
|
|
else
|
|
enemy = combat.enemy
|
|
|
|
if (combat.is_trash) then
|
|
is_trash = true
|
|
end
|
|
end
|
|
|
|
return enemy, color, raid_type, killed, is_trash, portrait, background, background_coords
|
|
end
|
|
|
|
end
|
|
|
|
function _detalhes:UnpackMythicDungeonInfo (t)
|
|
return t.OverallSegment, t.SegmentID, t.Level, t.EJID, t.MapID, t.ZoneName, t.EncounterID, t.EncounterName, t.StartedAt, t.EndedAt, t.RunID
|
|
end
|
|
|
|
local segments_used = 0
|
|
local segments_filled = 0
|
|
|
|
-- search key: ~segments
|
|
local build_segment_list = function (self, elapsed)
|
|
|
|
local CoolTip = GameCooltip
|
|
local instancia = parameters_table [1]
|
|
parameters_table[2] = parameters_table[2] + elapsed
|
|
|
|
local battleground_color = {1, 0.666, 0, 1}
|
|
|
|
if (parameters_table[2] > 0.15) then
|
|
self:SetScript ("OnUpdate", nil)
|
|
|
|
--> here we are using normal Add calls
|
|
CoolTip:Reset()
|
|
CoolTip:SetType ("menu")
|
|
CoolTip:SetFixedParameter (instancia)
|
|
CoolTip:SetColor ("main", "transparent")
|
|
|
|
CoolTip:SetOption ("FixedWidthSub", 195)
|
|
CoolTip:SetOption ("RightTextWidth", 105)
|
|
CoolTip:SetOption ("RightTextHeight", 12)
|
|
|
|
CoolTip:SetOption ("SubFollowButton", true)
|
|
|
|
----------- segments
|
|
local menuIndex = 0
|
|
_detalhes.segments_amount = math.floor (_detalhes.segments_amount)
|
|
|
|
local fight_amount = 0
|
|
|
|
local filled_segments = 0
|
|
for i = 1, _detalhes.segments_amount do
|
|
if (_detalhes.tabela_historico.tabelas [i]) then
|
|
filled_segments = filled_segments + 1
|
|
else
|
|
break
|
|
end
|
|
end
|
|
|
|
filled_segments = _detalhes.segments_amount - filled_segments - 2
|
|
local fill = math.abs (filled_segments - _detalhes.segments_amount)
|
|
segments_used = 0
|
|
segments_filled = fill
|
|
|
|
local dungeon_color = party_line_color
|
|
local dungeon_color_trash = party_line_color_trash
|
|
local dungeon_run_id = false
|
|
|
|
--> history table (segments container)
|
|
local isMythicDungeon = false
|
|
for i = _detalhes.segments_amount, 1, -1 do
|
|
|
|
if (i <= fill) then
|
|
|
|
local thisCombat = _detalhes.tabela_historico.tabelas [i]
|
|
if (thisCombat) then
|
|
local enemy = thisCombat.is_boss and thisCombat.is_boss.name
|
|
local segment_info_added = false
|
|
|
|
segments_used = segments_used + 1
|
|
|
|
if (thisCombat.is_mythic_dungeon_segment) then
|
|
|
|
if (not isMythicDungeon) then
|
|
--GameCooltip:AddLine ("$div", nil, nil, -5, -13)
|
|
isMythicDungeon = thisCombat.is_mythic_dungeon_run_id
|
|
else
|
|
if (isMythicDungeon ~= thisCombat.is_mythic_dungeon_run_id) then
|
|
-- GameCooltip:AddLine ("$div", nil, nil, -5, -13)
|
|
isMythicDungeon = thisCombat.is_mythic_dungeon_run_id
|
|
end
|
|
end
|
|
|
|
local mythicDungeonInfo = thisCombat:GetMythicDungeonInfo()
|
|
|
|
if (mythicDungeonInfo) then
|
|
--> is a boss, trash overall or run overall segment
|
|
|
|
local bossInfo = thisCombat.is_boss
|
|
|
|
local isMythicOverallSegment, segmentID, mythicLevel, EJID, mapID, zoneName, encounterID, encounterName, startedAt, endedAt, runID = _detalhes:UnpackMythicDungeonInfo (mythicDungeonInfo)
|
|
local combat_time = thisCombat:GetCombatTime()
|
|
|
|
if (not dungeon_run_id) then
|
|
dungeon_run_id = runID
|
|
else
|
|
if (dungeon_run_id ~= runID) then
|
|
dungeon_color = dungeon_color == party_line_color and party_line_color2 or party_line_color
|
|
dungeon_color_trash = dungeon_color_trash == party_line_color_trash and party_line_color2_trash or party_line_color_trash
|
|
dungeon_run_id = runID
|
|
end
|
|
end
|
|
|
|
--> is mythic overall
|
|
if (isMythicOverallSegment) then
|
|
--mostrar o tempo da dungeon
|
|
local totalTime = combat_time
|
|
--CoolTip:AddLine (zoneName .. " +" .. mythicLevel .. " (overall)", _detalhes.gump:IntegerToTimer (totalTime), 1, dungeon_color)
|
|
CoolTip:AddLine (zoneName .. " +" .. mythicLevel .. " (" .. Loc ["STRING_SEGMENTS_LIST_OVERALL"] .. ")", _detalhes.gump:IntegerToTimer (endedAt - startedAt), 1, dungeon_color)
|
|
CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], "main", "left", 14, 10, 479/512, 510/512, 24/512, 51/512)
|
|
CoolTip:AddLine (zoneName .. " +" .. mythicLevel .. " (" .. Loc ["STRING_SEGMENTS_LIST_OVERALL"] .. ")", nil, 2, "white", "white")
|
|
|
|
else
|
|
if (segmentID == "trashoverall") then
|
|
local trashIcon = "|TInterface\\AddOns\\Details\\images\\icons:16:16:0:0:512:512:14:58:98:160|t"
|
|
CoolTip:AddLine (trashIcon .. "" .. (encounterName or Loc ["STRING_UNKNOW"]) .. " (" .. Loc ["STRING_SEGMENTS_LIST_TRASH"] .. ")", _detalhes.gump:IntegerToTimer (endedAt - startedAt), 1, dungeon_color, "gray")
|
|
CoolTip:AddLine ((encounterName or Loc ["STRING_UNKNOW"]) .. " (" .. Loc ["STRING_SEGMENTS_LIST_TRASH"] .. ")", nil, 2, "white", "white")
|
|
else
|
|
local skull = "|TInterface\\AddOns\\Details\\images\\icons:16:16:0:0:512:512:496:512:0:16|t"
|
|
CoolTip:AddLine (skull .. "" .. (encounterName or Loc ["STRING_UNKNOW"]) .. " (" .. Loc ["STRING_SEGMENTS_LIST_BOSS"] .. ")", _detalhes.gump:IntegerToTimer (combat_time), 1, dungeon_color, "gray")
|
|
CoolTip:AddLine ((encounterName or Loc ["STRING_UNKNOW"]) .. " (" .. Loc ["STRING_SEGMENTS_LIST_BOSS"] .. ")", nil, 2, "white", "white")
|
|
end
|
|
CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], "main", "left", 14, 10, 479/512, 510/512, 24/512, 51/512)
|
|
end
|
|
|
|
local portrait = (thisCombat.is_boss and thisCombat.is_boss.bossimage) or _detalhes:GetBossPortrait (nil, nil, encounterName, EJID)
|
|
if (portrait) then
|
|
CoolTip:AddIcon (portrait, 2, "top", 128, 64, 0, 1, 0, 0.96)
|
|
end
|
|
|
|
local backgroundImage = _detalhes:GetRaidIcon (mapID, EJID, "party")
|
|
if (backgroundImage) then
|
|
CoolTip:SetWallpaper (2, backgroundImage, {0.070, 0.695, 0.087, 0.566}, {1, 1, 1, 0.5}, true) -- party_wallpaper_tex -- {0.09, 0.698125, .17, 0.833984375}
|
|
end
|
|
|
|
--> sub menu
|
|
local decorrido = thisCombat:GetCombatTime()
|
|
local minutos, segundos = _math_floor (decorrido/60), _math_floor (decorrido%60)
|
|
--CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", minutos.."m "..segundos.."s", 2, "white", "white")
|
|
|
|
if (segmentID == "trashoverall") then
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_TIMEINCOMBAT"] .. ":", _detalhes.gump:IntegerToTimer (decorrido), 2, "white", "white")
|
|
local totalRealTime = endedAt - startedAt
|
|
local wasted = totalRealTime - decorrido
|
|
|
|
--wasted time
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_WASTED_TIME"] .. ":", "|cFFFF3300" .. _detalhes.gump:IntegerToTimer (wasted) .. " (" .. floor (wasted / totalRealTime * 100) .. "%)|r", 2, "white", "white")
|
|
CoolTip:AddStatusBar (100, 2, 0, 0, 0, 0.35, false, false, "Skyline")
|
|
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_TOTALTIME"] .. ":", _detalhes.gump:IntegerToTimer (endedAt - startedAt), 2, "white", "white")
|
|
|
|
elseif (isMythicOverallSegment) then
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_TIMEINCOMBAT"] .. ":", _detalhes.gump:IntegerToTimer (decorrido), 2, "white", "white")
|
|
local totalRealTime = endedAt - startedAt
|
|
local wasted = totalRealTime - decorrido
|
|
|
|
--wasted time
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_WASTED_TIME"] .. ":", "|cFFFF3300" .. _detalhes.gump:IntegerToTimer (wasted) .. " (" .. floor (wasted / totalRealTime * 100) .. "%)|r", 2, "white", "white")
|
|
CoolTip:AddStatusBar (100, 2, 0, 0, 0, 0.35, false, false, "Skyline")
|
|
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_TOTALTIME"] .. ":", _detalhes.gump:IntegerToTimer (totalRealTime), 2, "white", "white")
|
|
|
|
else
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", _detalhes.gump:IntegerToTimer (decorrido), 2, "white", "white")
|
|
end
|
|
|
|
if (thisCombat.is_boss) then
|
|
CoolTip:AddLine ("", "", 2, "white", "white")
|
|
end
|
|
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_START"] .. ":", thisCombat.data_inicio, 2, "white", "white")
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_END"] .. ":", thisCombat.data_fim or "in progress", 2, "white", "white")
|
|
|
|
CoolTip:AddStatusBar (100, 1, .3, .3, .3, 0.2, false, false, "Skyline")
|
|
else
|
|
--> the combat has mythic dungeon tag but doesn't have a mythic dungeon table information
|
|
--> so this is a trash cleanup segment
|
|
|
|
local trashInfo = thisCombat:GetMythicDungeonTrashInfo()
|
|
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_TRASH"] .. " (#" .. i .. ")", _detalhes.gump:IntegerToTimer (thisCombat:GetCombatTime()), 1, dungeon_color_trash, "gray")
|
|
--CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], "main", "left", 16, 12, 0.02734375, 0.11328125, 0.19140625, 0.3125, "red")
|
|
CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], "main", "left", 14, 10, 479/512, 510/512, 24/512, 51/512, nil, nil, true)
|
|
|
|
--submenu
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_TRASH"], nil, 2, "white", "white")
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", _detalhes.gump:IntegerToTimer (thisCombat:GetCombatTime()), 2, "white", "white")
|
|
CoolTip:AddLine ("", "", 2, "white", "white")
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_START"] .. ":", thisCombat.data_inicio, 2, "white", "white")
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_END"] .. ":", thisCombat.data_fim or "in progress", 2, "white", "white")
|
|
|
|
if (trashInfo) then
|
|
local backgroundImage = _detalhes:GetRaidIcon (trashInfo.MapID, trashInfo.EJID, "party")
|
|
if (backgroundImage) then
|
|
CoolTip:SetWallpaper (2, backgroundImage, {0.070, 0.695, 0.087, 0.566}, {1, 1, 1, 0.5}, true)
|
|
end
|
|
end
|
|
end
|
|
segment_info_added = true
|
|
|
|
elseif (thisCombat.is_boss and thisCombat.is_boss.name) then
|
|
|
|
isMythicDungeon = false
|
|
local try_number = thisCombat.is_boss.try_number
|
|
local combat_time = thisCombat:GetCombatTime()
|
|
|
|
if (thisCombat.instance_type == "party") then
|
|
CoolTip:AddLine (thisCombat.is_boss.name .." (#"..i..")", _, 1, dungeon_color)
|
|
elseif (thisCombat.is_boss.killed) then
|
|
if (try_number) then
|
|
local m, s = _math_floor (combat_time/60), _math_floor (combat_time%60)
|
|
if (s < 10) then
|
|
s = "0" .. s
|
|
end
|
|
CoolTip:AddLine (thisCombat.is_boss.name .." (#"..try_number.." " .. m .. ":" .. s .. ")", _, 1, "lime")
|
|
else
|
|
CoolTip:AddLine (thisCombat.is_boss.name .." (#"..i..")", _, 1, "lime")
|
|
end
|
|
else
|
|
if (try_number) then
|
|
local m, s = _math_floor (combat_time/60), _math_floor (combat_time%60)
|
|
if (s < 10) then
|
|
s = "0" .. s
|
|
end
|
|
CoolTip:AddLine (thisCombat.is_boss.name .." (#"..try_number.." " .. m .. ":" .. s .. ")", _, 1, "red")
|
|
else
|
|
CoolTip:AddLine (thisCombat.is_boss.name .." (#"..i..")", _, 1, "red")
|
|
end
|
|
end
|
|
|
|
local portrait = _detalhes:GetBossPortrait (thisCombat.is_boss.mapid, thisCombat.is_boss.index) or thisCombat.is_boss.bossimage
|
|
if (portrait) then
|
|
CoolTip:AddIcon (portrait, 2, "top", 128, 64)
|
|
else
|
|
local encounter_name = thisCombat.is_boss.encounter
|
|
local instanceID = thisCombat.is_boss.ej_instance_id
|
|
if (encounter_name and instanceID and instanceID ~= 0) then
|
|
local index, name, description, encounterID, rootSectionID, link = _detalhes:GetEncounterInfoFromEncounterName (instanceID, encounter_name)
|
|
if (index and name and encounterID) then
|
|
--EJ_SelectInstance (instanceID)
|
|
--creature info pode ser sempre 1, n�o usar o index do boss
|
|
local id, name, description, displayInfo, iconImage = DetailsFramework.EncounterJournal.EJ_GetCreatureInfo (1, encounterID)
|
|
if (iconImage) then
|
|
CoolTip:AddIcon (iconImage, 2, "top", 128, 64)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], "main", "left", 16, 16, 0.96875, 1, 0, 0.03125)
|
|
|
|
if (_detalhes.tooltip.submenu_wallpaper) then
|
|
local background = _detalhes:GetRaidIcon (thisCombat.is_boss.mapid)
|
|
if (background) then
|
|
CoolTip:SetWallpaper (2, background, nil, segments_wallpaper_color, true)
|
|
else
|
|
local ej_id = thisCombat.is_boss.ej_instance_id
|
|
if (ej_id and ej_id ~= 0) then
|
|
local name, description, bgImage, buttonImage, loreImage, dungeonAreaMapID, link = DetailsFramework.EncounterJournal.EJ_GetInstanceInfo (ej_id)
|
|
if (name) then
|
|
if (thisCombat.instance_type == "party") then
|
|
CoolTip:SetWallpaper (2, bgImage, party_wallpaper_tex, party_wallpaper_color, true)
|
|
else
|
|
CoolTip:SetWallpaper (2, loreImage, raid_wallpaper_tex, party_wallpaper_color, true)
|
|
end
|
|
end
|
|
else
|
|
--CoolTip:SetWallpaper (2, [[Interface\BlackMarket\HotItemBanner]], unknown_boss_tex, unknown_boss_color, true)
|
|
end
|
|
end
|
|
else
|
|
--> wallpaper = main window
|
|
--CoolTip:SetWallpaper (2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true)
|
|
end
|
|
|
|
elseif (thisCombat.is_pvp) then
|
|
isMythicDungeon = false
|
|
CoolTip:AddLine (thisCombat.is_pvp.name, _, 1, battleground_color)
|
|
enemy = thisCombat.is_pvp.name
|
|
CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], "main", "left", 16, 12, 0.251953125, 0.306640625, 0.205078125, 0.248046875)
|
|
|
|
if (_detalhes.tooltip.submenu_wallpaper) then
|
|
local file, coords = _detalhes:GetBattlegroundInfo (thisCombat.is_pvp.mapid)
|
|
if (file) then
|
|
CoolTip:SetWallpaper (2, "Interface\\Glues\\LOADINGSCREENS\\" .. file, coords, empty_segment_color, true)
|
|
end
|
|
else
|
|
--> wallpaper = main window
|
|
--CoolTip:SetWallpaper (2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true)
|
|
end
|
|
|
|
elseif (thisCombat.is_arena) then
|
|
isMythicDungeon = false
|
|
CoolTip:AddLine (thisCombat.is_arena.name, _, 1, "yellow")
|
|
enemy = thisCombat.is_arena.name
|
|
CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], "main", "left", 16, 12, 0.251953125, 0.306640625, 0.205078125, 0.248046875)
|
|
|
|
if (_detalhes.tooltip.submenu_wallpaper) then
|
|
local file, coords = _detalhes:GetArenaInfo (thisCombat.is_arena.mapid)
|
|
if (file) then
|
|
CoolTip:SetWallpaper (2, "Interface\\Glues\\LOADINGSCREENS\\" .. file, coords, empty_segment_color, true)
|
|
end
|
|
else
|
|
--> wallpaper = main window
|
|
--CoolTip:SetWallpaper (2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true)
|
|
end
|
|
else
|
|
isMythicDungeon = false
|
|
enemy = thisCombat.enemy
|
|
if (enemy) then
|
|
CoolTip:AddLine (thisCombat.enemy .." (#"..i..")", _, 1, "yellow")
|
|
else
|
|
CoolTip:AddLine (segmentos.past..i, _, 1, "silver")
|
|
end
|
|
|
|
if (thisCombat.is_trash) then
|
|
CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], "main", "left", 16, 12, 0.02734375, 0.11328125, 0.19140625, 0.3125)
|
|
else
|
|
CoolTip:AddIcon ([[Interface\QUESTFRAME\UI-Quest-BulletPoint]], "main", "left", 16, 16)
|
|
end
|
|
|
|
if (_detalhes.tooltip.submenu_wallpaper) then
|
|
CoolTip:SetWallpaper (2, [[Interface\ACHIEVEMENTFRAME\UI-Achievement-StatsBackground]], segments_common_tex, segments_common_color, true)
|
|
else
|
|
--> wallpaper = main window
|
|
--CoolTip:SetWallpaper (2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true)
|
|
end
|
|
|
|
end
|
|
|
|
CoolTip:AddMenu (1, instancia.TrocaTabela, i)
|
|
|
|
if (not segment_info_added) then
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_ENEMY"] .. ":", enemy, 2, "white", "white")
|
|
local decorrido = thisCombat:GetCombatTime()
|
|
local minutos, segundos = _math_floor (decorrido/60), _math_floor (decorrido%60)
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", minutos.."m "..segundos.."s", 2, "white", "white")
|
|
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_START"] .. ":", thisCombat.data_inicio, 2, "white", "white")
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_END"] .. ":", thisCombat.data_fim or "in progress", 2, "white", "white")
|
|
end
|
|
|
|
fight_amount = fight_amount + 1
|
|
else
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_LOWER"] .. " #" .. i, _, 1, "gray")
|
|
CoolTip:AddMenu (1, instancia.TrocaTabela, i)
|
|
CoolTip:AddIcon ([[Interface\QUESTFRAME\UI-Quest-BulletPoint]], "main", "left", 16, 16, nil, nil, nil, nil, empty_segment_color)
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_EMPTY"], _, 2)
|
|
CoolTip:AddIcon ([[Interface\CHARACTERFRAME\Disconnect-Icon]], 2, 1, 12, 12, 0.3125, 0.65625, 0.265625, 0.671875)
|
|
--CoolTip:SetWallpaper (2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true)
|
|
end
|
|
|
|
if (menuIndex) then
|
|
menuIndex = menuIndex + 1
|
|
if (instancia.segmento == i) then
|
|
CoolTip:SetLastSelected ("main", menuIndex)
|
|
menuIndex = nil
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
GameCooltip:AddLine ("$div", nil, nil, -5, -13)
|
|
|
|
----------- current
|
|
local enemy = _detalhes.tabela_vigente.is_boss and _detalhes.tabela_vigente.is_boss.name or _detalhes.tabela_vigente.enemy or "--x--x--"
|
|
local file, coords
|
|
|
|
local thisCombat = _detalhes.tabela_vigente
|
|
local segment_info_added
|
|
|
|
--> add the new line
|
|
CoolTip:AddLine (segmentos.current_standard, _, 1, "white")
|
|
CoolTip:AddMenu (1, instancia.TrocaTabela, 0)
|
|
CoolTip:AddIcon ([[Interface\QUESTFRAME\UI-Quest-BulletPoint]], "main", "left", 16, 16, nil, nil, nil, nil, "orange")
|
|
--
|
|
|
|
--> current segment is a dungeon mythic+?
|
|
if (thisCombat.is_mythic_dungeon_segment) then
|
|
local mythicDungeonInfo = thisCombat:GetMythicDungeonInfo()
|
|
|
|
if (mythicDungeonInfo) then
|
|
--> is a boss, trash overall or run overall segment
|
|
|
|
local bossInfo = thisCombat.is_boss
|
|
|
|
local isMythicOverallSegment, segmentID, mythicLevel, EJID, mapID, zoneName, encounterID, encounterName, startedAt, endedAt, runID = _detalhes:UnpackMythicDungeonInfo (mythicDungeonInfo)
|
|
local combat_time = thisCombat:GetCombatTime()
|
|
|
|
if (not dungeon_run_id) then
|
|
dungeon_run_id = runID
|
|
else
|
|
if (dungeon_run_id ~= runID) then
|
|
dungeon_color = dungeon_color == party_line_color and party_line_color2 or party_line_color
|
|
dungeon_color_trash = dungeon_color_trash == party_line_color_trash and party_line_color2_trash or party_line_color_trash
|
|
dungeon_run_id = runID
|
|
end
|
|
end
|
|
|
|
--> is mythic overall
|
|
if (isMythicOverallSegment) then
|
|
--mostrar o tempo da dungeon
|
|
local totalTime = combat_time
|
|
--CoolTip:AddLine (zoneName .. " +" .. mythicLevel .. " (overall)", _detalhes.gump:IntegerToTimer (totalTime), 1, dungeon_color)
|
|
--CoolTip:AddLine (zoneName .. " +" .. mythicLevel .. " (overall)", _detalhes.gump:IntegerToTimer (endedAt - startedAt), 1, dungeon_color)
|
|
--CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], "main", "left", 14, 10, 479/512, 510/512, 24/512, 51/512)
|
|
CoolTip:AddLine (zoneName .. " +" .. mythicLevel .. " (" .. Loc ["STRING_SEGMENTS_LIST_OVERALL"] .. ")", nil, 2, "white", "white")
|
|
|
|
else
|
|
if (segmentID == "trashoverall") then
|
|
--CoolTip:AddLine (encounterName .. " (" .. Loc ["STRING_SEGMENTS_LIST_TRASH"] .. ")", _detalhes.gump:IntegerToTimer (combat_time), 1, dungeon_color, "gray")
|
|
--CoolTip:AddLine (encounterName .. " (" .. Loc ["STRING_SEGMENTS_LIST_TRASH"] .. ")", _detalhes.gump:IntegerToTimer (endedAt - startedAt), 1, dungeon_color, "gray")
|
|
CoolTip:AddLine (encounterName .. " (" .. Loc ["STRING_SEGMENTS_LIST_TRASH"] .. ")", nil, 2, "white", "white")
|
|
else
|
|
--CoolTip:AddLine (encounterName .. " (" .. Loc ["STRING_SEGMENTS_LIST_BOSS"] .. ")", _detalhes.gump:IntegerToTimer (combat_time), 1, dungeon_color, "gray")
|
|
CoolTip:AddLine (encounterName .. " (" .. Loc ["STRING_SEGMENTS_LIST_BOSS"] .. ")", nil, 2, "white", "white")
|
|
end
|
|
--CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], "main", "left", 14, 10, 479/512, 510/512, 24/512, 51/512)
|
|
end
|
|
|
|
local portrait = (thisCombat.is_boss and thisCombat.is_boss.bossimage) or _detalhes:GetBossPortrait (nil, nil, encounterName, EJID)
|
|
if (portrait) then
|
|
CoolTip:AddIcon (portrait, 2, "top", 128, 64, 0, 1, 0, 0.96)
|
|
end
|
|
|
|
local backgroundImage = _detalhes:GetRaidIcon (mapID, EJID, "party")
|
|
if (backgroundImage) then
|
|
CoolTip:SetWallpaper (2, backgroundImage, {0.070, 0.695, 0.087, 0.566}, {1, 1, 1, 0.5}, true) -- party_wallpaper_tex -- {0.09, 0.698125, .17, 0.833984375}
|
|
end
|
|
|
|
--> sub menu
|
|
local decorrido = thisCombat:GetCombatTime()
|
|
local minutos, segundos = _math_floor (decorrido/60), _math_floor (decorrido%60)
|
|
--CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", minutos.."m "..segundos.."s", 2, "white", "white")
|
|
|
|
if (segmentID == "trashoverall") then
|
|
local totalRealTime = endedAt - startedAt
|
|
local wasted = totalRealTime - decorrido
|
|
|
|
CoolTip:AddLine (Loc["STRING_SEGMENTS_LIST_TIMEINCOMBAT"] .. ":", _detalhes.gump:IntegerToTimer (decorrido), 2, "white", "white")
|
|
|
|
--wasted time
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_WASTED_TIME"] .. ":", "|cFFFF3300" .. _detalhes.gump:IntegerToTimer (wasted) .. " (" .. floor (wasted / totalRealTime * 100) .. "%)|r", 2, "white", "white")
|
|
CoolTip:AddStatusBar (100, 2, 0, 0, 0, 0.35, false, false, "Skyline")
|
|
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_TOTALTIME"] .. ":", _detalhes.gump:IntegerToTimer (endedAt - startedAt) .. " [|cFFFF3300" .. _detalhes.gump:IntegerToTimer (totalRealTime - decorrido) .. "|r]", 2, "white", "white")
|
|
|
|
elseif (isMythicOverallSegment) then
|
|
CoolTip:AddLine (Loc["STRING_SEGMENTS_LIST_TIMEINCOMBAT"] .. ":", _detalhes.gump:IntegerToTimer (decorrido), 2, "white", "white")
|
|
local totalRealTime = endedAt - startedAt
|
|
local wasted = totalRealTime - decorrido
|
|
|
|
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_TOTALTIME"] .. ":", _detalhes.gump:IntegerToTimer (totalRealTime), 2, "white", "white")
|
|
|
|
--wasted time
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_WASTED_TIME"] .. ":", "|cFFFF3300" .. _detalhes.gump:IntegerToTimer (wasted) .. " (" .. floor (wasted / totalRealTime * 100) .. "%)|r", 2, "white", "white")
|
|
CoolTip:AddStatusBar (100, 2, 0, 0, 0, 0.35, false, false, "Skyline")
|
|
|
|
else
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", _detalhes.gump:IntegerToTimer (decorrido), 2, "white", "white")
|
|
end
|
|
|
|
if (thisCombat.is_boss) then
|
|
CoolTip:AddLine ("", "", 2, "white", "white")
|
|
end
|
|
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_START"] .. ":", thisCombat.data_inicio, 2, "white", "white")
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_END"] .. ":", thisCombat.data_fim or "in progress", 2, "white", "white")
|
|
|
|
else
|
|
--> the combat has mythic dungeon tag but doesn't have a mythic dungeon table information
|
|
--> so this is a trash cleanup segment
|
|
|
|
local trashInfo = thisCombat:GetMythicDungeonTrashInfo()
|
|
|
|
--CoolTip:AddLine (Loc ["STRING_SEGMENT_TRASH"], _detalhes.gump:IntegerToTimer (thisCombat:GetCombatTime()), 1, dungeon_color_trash, "gray")
|
|
--CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], "main", "left", 16, 12, 0.02734375, 0.11328125, 0.19140625, 0.3125, "red")
|
|
--CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], "main", "left", 14, 10, 479/512, 510/512, 24/512, 51/512, nil, nil, true)
|
|
|
|
--submenu
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_TRASH"], nil, 2, "white", "white")
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", _detalhes.gump:IntegerToTimer (thisCombat:GetCombatTime()), 2, "white", "white")
|
|
CoolTip:AddLine ("", "", 2, "white", "white")
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_START"] .. ":", thisCombat.data_inicio, 2, "white", "white")
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_END"] .. ":", thisCombat.data_fim or "in progress", 2, "white", "white")
|
|
|
|
if (trashInfo) then
|
|
local backgroundImage = _detalhes:GetRaidIcon (trashInfo.MapID, trashInfo.EJID, "party")
|
|
if (backgroundImage) then
|
|
CoolTip:SetWallpaper (2, backgroundImage, {0.070, 0.695, 0.087, 0.566}, {1, 1, 1, 0.5}, true)
|
|
end
|
|
end
|
|
end
|
|
|
|
segment_info_added = true
|
|
|
|
elseif (_detalhes.tabela_vigente.is_boss and _detalhes.tabela_vigente.is_boss.name) then
|
|
local portrait = _detalhes:GetBossPortrait (_detalhes.tabela_vigente.is_boss.mapid, _detalhes.tabela_vigente.is_boss.index) or _detalhes.tabela_vigente.is_boss.bossimage
|
|
if (portrait) then
|
|
CoolTip:AddIcon (portrait, 2, "top", 128, 64)
|
|
else
|
|
local thisCombat = _detalhes.tabela_vigente
|
|
local encounter_name = thisCombat.is_boss.encounter
|
|
local instanceID = thisCombat.is_boss.ej_instance_id
|
|
instanceID = tonumber (instanceID)
|
|
if (encounter_name and instanceID and instanceID ~= 0) then
|
|
local index, name, description, encounterID, rootSectionID, link = _detalhes:GetEncounterInfoFromEncounterName (instanceID, encounter_name)
|
|
if (index and name and encounterID) then
|
|
local id, name, description, displayInfo, iconImage = DetailsFramework.EncounterJournal.EJ_GetCreatureInfo (index, encounterID)
|
|
if (iconImage) then
|
|
CoolTip:AddIcon (iconImage, 2, "top", 128, 64)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if (_detalhes.tooltip.submenu_wallpaper) then
|
|
local background = _detalhes:GetRaidIcon (_detalhes.tabela_vigente.is_boss.mapid)
|
|
if (background) then
|
|
CoolTip:SetWallpaper (2, background, nil, segments_wallpaper_color, true)
|
|
else
|
|
local ej_id = _detalhes.tabela_vigente.is_boss.ej_instance_id
|
|
if (ej_id and ej_id ~= 0) then
|
|
local name, description, bgImage, buttonImage, loreImage, dungeonAreaMapID, link = DetailsFramework.EncounterJournal.EJ_GetInstanceInfo (ej_id)
|
|
if (name) then
|
|
if (_detalhes.tabela_vigente.instance_type == "party") then
|
|
CoolTip:SetWallpaper (2, bgImage, party_wallpaper_tex, party_wallpaper_color, true)
|
|
else
|
|
CoolTip:SetWallpaper (2, loreImage, raid_wallpaper_tex, party_wallpaper_color, true)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
--> wallpaper = main window
|
|
--CoolTip:SetWallpaper (2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true)
|
|
end
|
|
|
|
elseif (_detalhes.tabela_vigente.is_pvp) then
|
|
enemy = _detalhes.tabela_vigente.is_pvp.name
|
|
file, coords = _detalhes:GetBattlegroundInfo (_detalhes.tabela_vigente.is_pvp.mapid)
|
|
elseif (_detalhes.tabela_vigente.is_arena) then
|
|
enemy = _detalhes.tabela_vigente.is_arena.name
|
|
file, coords = _detalhes:GetArenaInfo (_detalhes.tabela_vigente.is_arena.mapid)
|
|
else
|
|
if (_detalhes.tooltip.submenu_wallpaper) then
|
|
CoolTip:SetWallpaper (2, [[Interface\ACHIEVEMENTFRAME\UI-Achievement-StatsBackground]], segments_common_tex, {1, 1, 1, 0.5}, true)
|
|
else
|
|
--> wallpaper = main window
|
|
--CoolTip:SetWallpaper (2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true)
|
|
end
|
|
end
|
|
|
|
if (_detalhes.tooltip.submenu_wallpaper) then
|
|
if (file) then
|
|
CoolTip:SetWallpaper (2, "Interface\\Glues\\LOADINGSCREENS\\" .. file, coords, empty_segment_color, true)
|
|
end
|
|
else
|
|
--> wallpaper = main window
|
|
--CoolTip:SetWallpaper (2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true)
|
|
end
|
|
|
|
if (not segment_info_added) then
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_ENEMY"] .. ":", enemy, 2, "white", "white")
|
|
|
|
if (not _detalhes.tabela_vigente:GetEndTime()) then
|
|
if (_detalhes.in_combat) then
|
|
local decorrido = _detalhes.tabela_vigente:GetCombatTime()
|
|
local minutos, segundos = _math_floor (decorrido/60), _math_floor (decorrido%60)
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", minutos.."m "..segundos.."s", 2, "white", "white")
|
|
else
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", "--x--x--", 2, "white", "white")
|
|
end
|
|
else
|
|
local decorrido = _detalhes.tabela_vigente:GetCombatTime()
|
|
local minutos, segundos = _math_floor (decorrido/60), _math_floor (decorrido%60)
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", minutos.."m "..segundos.."s", 2, "white", "white")
|
|
end
|
|
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_START"] .. ":", _detalhes.tabela_vigente.data_inicio, 2, "white", "white")
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_END"] .. ":", _detalhes.tabela_vigente.data_fim or "in progress", 2, "white", "white")
|
|
end
|
|
|
|
--> fill � a quantidade de menu que esta sendo mostrada
|
|
if (instancia.segmento == 0) then
|
|
if (fill - 2 == menuIndex) then
|
|
CoolTip:SetLastSelected ("main", fill + 0)
|
|
elseif (fill - 1 == menuIndex) then
|
|
CoolTip:SetLastSelected ("main", fill + 1)
|
|
else
|
|
CoolTip:SetLastSelected ("main", fill + 2)
|
|
end
|
|
|
|
menuIndex = nil
|
|
end
|
|
|
|
----------- overall
|
|
--CoolTip:AddLine (segmentos.overall_standard, _, 1, "white") Loc ["STRING_REPORT_LAST"] .. " " .. fight_amount .. " " .. Loc ["STRING_REPORT_FIGHTS"]
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_OVERALL"], _, 1, "white")
|
|
CoolTip:AddMenu (1, instancia.TrocaTabela, -1)
|
|
CoolTip:AddIcon ([[Interface\QUESTFRAME\UI-Quest-BulletPoint]], "main", "left", 16, 16, nil, nil, nil, nil, "orange")
|
|
|
|
local enemy_name = _detalhes.tabela_overall.overall_enemy_name
|
|
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_ENEMY"] .. ":", enemy_name, 2, "white", "white")
|
|
|
|
local combat_time = _detalhes.tabela_overall:GetCombatTime()
|
|
local minutos, segundos = _math_floor (combat_time / 60), _math_floor (combat_time % 60)
|
|
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", minutos.."m "..segundos.."s", 2, "white", "white")
|
|
|
|
--CoolTip:SetWallpaper (2, [[Interface\ACHIEVEMENTFRAME\UI-Achievement-StatsComparisonBackground]], {0.085, 166/256, 0, 1}, {.42, .4, .4, 0.9}, true)
|
|
|
|
if (_detalhes.tooltip.submenu_wallpaper) then
|
|
--CoolTip:SetWallpaper (2, [[Interface\PetPaperDollFrame\PetStatsBG-Hunter]], {321/512, 0, 0, 190/512}, {1, 1, 1, 0.9}, true)
|
|
--CoolTip:SetWallpaper (2, [[Interface\ACHIEVEMENTFRAME\UI-Achievement-StatsComparisonBackground]], {166/256, 1, 0, 1}, {1, 1, 1, 0.9}, true)
|
|
else
|
|
--> wallpaper = main window
|
|
--CoolTip:SetWallpaper (2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true)
|
|
end
|
|
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_START"] .. ":", _detalhes.tabela_overall.data_inicio, 2, "white", "white")
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENT_END"] .. ":", _detalhes.tabela_overall.data_fim, 2, "white", "white")
|
|
|
|
-- combats added
|
|
local combats_added = _detalhes.tabela_overall.segments_added or _detalhes.empty_table
|
|
CoolTip:AddLine (Loc ["STRING_SEGMENTS"] .. ":", #combats_added, 2, "white", "white")
|
|
|
|
if (#combats_added > 0) then
|
|
CoolTip:AddLine ("", "", 2, "white", "white")
|
|
end
|
|
|
|
for i, segment in _ipairs (combats_added) do
|
|
local minutos, segundos = _math_floor (segment.elapsed/60), _math_floor (segment.elapsed%60)
|
|
|
|
local name = segment.name
|
|
if (name:len() > 20) then
|
|
name = string.sub (name, 1, #name - (#name - 20))
|
|
end
|
|
|
|
CoolTip:AddLine ("" .. name, minutos.."m "..segundos.."s", 2, "white", "white")
|
|
|
|
local segmentType = segment.type
|
|
if (segmentType == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_TRASH) then
|
|
CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], 2, 1, 12, 8, 479/512, 510/512, 24/512, 51/512, nil, nil, true)
|
|
|
|
elseif (segmentType == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_BOSS) then
|
|
CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], 2, 1, 12, 12, 0.96875, 1, 0, 0.03125, party_line_color)
|
|
|
|
elseif (segmentType == DETAILS_SEGMENTTYPE_RAID_TRASH or segmentType == DETAILS_SEGMENTTYPE_DUNGEON_TRASH) then
|
|
CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], 2, 1, 10, 8, 0.02734375, 0.11328125, 0.19140625, 0.3125)
|
|
|
|
elseif (segmentType == DETAILS_SEGMENTTYPE_RAID_BOSS) then
|
|
CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], 2, 1, 12, 12, 0.96875, 1, 0, 0.03125)
|
|
|
|
end
|
|
|
|
--CoolTip:AddStatusBar (100, 2, 0, 0, 0, 0.2, false, false, "Skyline")
|
|
end
|
|
|
|
--> fill � a quantidade de menu que esta sendo mostrada
|
|
if (instancia.segmento == -1) then
|
|
if (fill - 2 == menuIndex) then
|
|
CoolTip:SetLastSelected ("main", fill + 1)
|
|
elseif (fill - 1 == menuIndex) then
|
|
CoolTip:SetLastSelected ("main", fill + 2)
|
|
else
|
|
CoolTip:SetLastSelected ("main", fill + 3)
|
|
end
|
|
menuIndex = nil
|
|
end
|
|
|
|
---------------------------------------------
|
|
|
|
_detalhes:SetMenuOwner (self, instancia)
|
|
|
|
CoolTip:SetOption ("TextSize", _detalhes.font_sizes.menus)
|
|
CoolTip:SetOption ("TextFont", _detalhes.font_faces.menus)
|
|
|
|
CoolTip:SetOption ("SubMenuIsTooltip", true)
|
|
|
|
CoolTip:SetOption ("ButtonHeightMod", -4)
|
|
CoolTip:SetOption ("ButtonsYMod", -10)
|
|
CoolTip:SetOption ("YSpacingMod", 1)
|
|
|
|
CoolTip:SetOption ("ButtonHeightModSub", 4)
|
|
CoolTip:SetOption ("ButtonsYModSub", 0)
|
|
CoolTip:SetOption ("YSpacingModSub", -4)
|
|
|
|
CoolTip:SetOption ("HeighMod", 12)
|
|
|
|
_detalhes:SetTooltipMinWidth()
|
|
|
|
_detalhes:FormatCooltipBackdrop()
|
|
|
|
show_anti_overlap (instancia, self, "top")
|
|
|
|
CoolTip:ShowCooltip()
|
|
|
|
self:SetScript ("OnUpdate", nil)
|
|
end
|
|
|
|
end
|
|
|
|
-- ~skin
|
|
|
|
function _detalhes:SetUserCustomSkinFile (file)
|
|
if (type (file) ~= "string") then
|
|
error ("SetUserCustomSkinFile() file must be a string.")
|
|
end
|
|
|
|
if (file:find ("\\") or file:find ("/")) then
|
|
error ("SetUserCustomSkinFile() file must be only the file name (with out up folders) and slashes.")
|
|
end
|
|
|
|
self.skin_custom = file
|
|
self:ChangeSkin()
|
|
end
|
|
|
|
function _detalhes:RefreshMicroDisplays()
|
|
_detalhes.StatusBar:UpdateOptions (self)
|
|
end
|
|
|
|
function _detalhes:ChangeSkin (skin_name)
|
|
|
|
if (not skin_name) then
|
|
skin_name = self.skin
|
|
end
|
|
|
|
local this_skin = _detalhes.skins [skin_name]
|
|
|
|
if (not this_skin) then
|
|
Details:Msg("error 0x4546", skin_name)
|
|
skin_name = _detalhes.default_skin_to_use
|
|
this_skin = _detalhes.skins [skin_name]
|
|
end
|
|
|
|
local just_updating = false
|
|
if (self.skin == skin_name) then
|
|
just_updating = true
|
|
end
|
|
|
|
if (not just_updating) then
|
|
|
|
--> skin updater
|
|
if (self.bgframe.skin_script) then
|
|
self.bgframe:SetScript ("OnUpdate", nil)
|
|
self.bgframe.skin_script = false
|
|
end
|
|
|
|
--> reset all config
|
|
self:ResetInstanceConfigKeepingValues (true)
|
|
|
|
--> overwrites
|
|
local overwrite_cprops = this_skin.instance_cprops
|
|
if (overwrite_cprops) then
|
|
|
|
local copy = Details.CopyTable(overwrite_cprops)
|
|
|
|
for cprop, value in _pairs (copy) do
|
|
if (not _detalhes.instance_skin_ignored_values [cprop]) then
|
|
if (type (value) == "table") then
|
|
for cprop2, value2 in _pairs (value) do
|
|
if (not self[cprop]) then
|
|
self[cprop] = {}
|
|
end
|
|
self [cprop] [cprop2] = value2
|
|
end
|
|
else
|
|
self [cprop] = value
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--> reset micro frames
|
|
_detalhes.StatusBar:Reset (self)
|
|
|
|
--> customize micro frames
|
|
if (this_skin.micro_frames) then
|
|
if (this_skin.micro_frames.left) then
|
|
_detalhes.StatusBar:SetPlugin (self, this_skin.micro_frames.left, "left")
|
|
end
|
|
|
|
if (this_skin.micro_frames.textxmod) then
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.left, "textxmod", this_skin.micro_frames.textxmod)
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.center, "textxmod", this_skin.micro_frames.textxmod)
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.right, "textxmod", this_skin.micro_frames.textxmod)
|
|
end
|
|
if (this_skin.micro_frames.textymod) then
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.left, "textymod", this_skin.micro_frames.textymod)
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.center, "textymod", this_skin.micro_frames.textymod)
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.right, "textymod", this_skin.micro_frames.textymod)
|
|
end
|
|
if (this_skin.micro_frames.hidden) then
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.left, "hidden", this_skin.micro_frames.hidden)
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.center, "hidden", this_skin.micro_frames.hidden)
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.right, "hidden", this_skin.micro_frames.hidden)
|
|
end
|
|
if (this_skin.micro_frames.color) then
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.left, "textcolor", this_skin.micro_frames.color)
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.center, "textcolor", this_skin.micro_frames.color)
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.right, "textcolor", this_skin.micro_frames.color)
|
|
end
|
|
if (this_skin.micro_frames.font) then
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.left, "textface", this_skin.micro_frames.font)
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.center, "textface", this_skin.micro_frames.font)
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.right, "textface", this_skin.micro_frames.font)
|
|
end
|
|
if (this_skin.micro_frames.size) then
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.left, "textsize", this_skin.micro_frames.size)
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.center, "textsize", this_skin.micro_frames.size)
|
|
_detalhes.StatusBar:ApplyOptions (self.StatusBar.right, "textsize", this_skin.micro_frames.size)
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
self.skin = skin_name
|
|
|
|
local skin_file = this_skin.file
|
|
|
|
--> set textures
|
|
if (self.skin_custom ~= "") then
|
|
skin_file = "Interface\\" .. self.skin_custom
|
|
end
|
|
|
|
self.baseframe.cabecalho.ball:SetTexture (skin_file) --> bola esquerda
|
|
self.baseframe.cabecalho.emenda:SetTexture (skin_file) --> emenda que liga a bola a textura do centro
|
|
|
|
self.baseframe.cabecalho.ball_r:SetTexture (skin_file) --> bola direita onde fica o bot�o de fechar
|
|
self.baseframe.cabecalho.top_bg:SetTexture (skin_file) --> top background
|
|
|
|
self.baseframe.barra_esquerda:SetTexture (skin_file) --> barra lateral
|
|
self.baseframe.barra_direita:SetTexture (skin_file) --> barra lateral
|
|
self.baseframe.barra_fundo:SetTexture (skin_file) --> barra inferior
|
|
|
|
self.baseframe.scroll_up:SetTexture (skin_file) --> scrollbar parte de cima
|
|
self.baseframe.scroll_down:SetTexture (skin_file) --> scrollbar parte de baixo
|
|
self.baseframe.scroll_middle:SetTexture (skin_file) --> scrollbar parte do meio
|
|
|
|
self.baseframe.rodape.top_bg:SetTexture (skin_file) --> rodape top background
|
|
self.baseframe.rodape.esquerdo:SetTexture (skin_file) --> rodape esquerdo
|
|
self.baseframe.rodape.direita:SetTexture (skin_file) --> rodape direito
|
|
self.baseframe.rodape.esquerdo_nostatusbar:SetTexture (skin_file) --> rodape direito
|
|
self.baseframe.rodape.direita_nostatusbar:SetTexture (skin_file) --> rodape direito
|
|
|
|
self.baseframe.button_stretch.texture:SetTexture (skin_file) --> bot�o de esticar a janela
|
|
|
|
self.baseframe.resize_direita.texture:SetTexture (skin_file) --> bot�o de redimencionar da direita
|
|
self.baseframe.resize_esquerda.texture:SetTexture (skin_file) --> bot�o de redimencionar da esquerda
|
|
|
|
self.break_snap_button:SetNormalTexture (skin_file) --> cadeado
|
|
self.break_snap_button:SetDisabledTexture (skin_file)
|
|
self.break_snap_button:SetHighlightTexture (skin_file, "ADD")
|
|
self.break_snap_button:SetPushedTexture (skin_file)
|
|
|
|
--> update toolbar icons
|
|
local toolbar_buttons = {}
|
|
|
|
do
|
|
local toolbar_icon_file = self.toolbar_icon_file
|
|
if (not toolbar_icon_file) then
|
|
toolbar_icon_file = [[Interface\AddOns\Details\images\toolbar_icons]]
|
|
end
|
|
|
|
toolbar_buttons [1] = self.baseframe.cabecalho.modo_selecao
|
|
toolbar_buttons [2] = self.baseframe.cabecalho.segmento
|
|
toolbar_buttons [3] = self.baseframe.cabecalho.atributo
|
|
toolbar_buttons [4] = self.baseframe.cabecalho.report
|
|
toolbar_buttons [5] = self.baseframe.cabecalho.reset
|
|
toolbar_buttons [6] = self.baseframe.cabecalho.fechar
|
|
|
|
for i = 1, #toolbar_buttons do
|
|
local button = toolbar_buttons [i]
|
|
button:SetNormalTexture (toolbar_icon_file)
|
|
button:SetHighlightTexture (toolbar_icon_file)
|
|
button:SetPushedTexture (toolbar_icon_file)
|
|
end
|
|
end
|
|
|
|
----------> icon anchor and size
|
|
|
|
if (self.modo == 1 or self.modo == 4 or self.atributo == 5) then -- alone e raid
|
|
local icon_anchor = this_skin.icon_anchor_plugins
|
|
self.baseframe.cabecalho.atributo_icon:SetPoint ("topright", self.baseframe.cabecalho.ball_point, "topright", icon_anchor[1], icon_anchor[2])
|
|
if (self.modo == 1) then
|
|
if (_detalhes.SoloTables.Plugins [1] and _detalhes.SoloTables.Mode) then
|
|
local plugin_index = _detalhes.SoloTables.Mode
|
|
if (plugin_index > 0 and _detalhes.SoloTables.Menu [plugin_index]) then
|
|
self:ChangeIcon (_detalhes.SoloTables.Menu [plugin_index] [2])
|
|
end
|
|
end
|
|
|
|
elseif (self.modo == 4) then
|
|
--if (_detalhes.RaidTables.Plugins [1] and _detalhes.RaidTables.Mode) then
|
|
-- local plugin_index = _detalhes.RaidTables.Mode
|
|
-- if (plugin_index and _detalhes.RaidTables.Menu [plugin_index]) then
|
|
--self:ChangeIcon (_detalhes.RaidTables.Menu [plugin_index] [2])
|
|
-- end
|
|
--end
|
|
end
|
|
else
|
|
local icon_anchor = this_skin.icon_anchor_main --> ancora do icone do canto direito superior
|
|
self.baseframe.cabecalho.atributo_icon:SetPoint ("topright", self.baseframe.cabecalho.ball_point, "topright", icon_anchor[1], icon_anchor[2])
|
|
self:ChangeIcon()
|
|
end
|
|
|
|
----------> lock alpha head
|
|
|
|
if (not this_skin.can_change_alpha_head) then
|
|
self.baseframe.cabecalho.ball:SetAlpha (100)
|
|
else
|
|
self.baseframe.cabecalho.ball:SetAlpha (self.color[4])
|
|
end
|
|
|
|
----------> update abbreviation function on the class files
|
|
|
|
_detalhes.atributo_damage:UpdateSelectedToKFunction()
|
|
_detalhes.atributo_heal:UpdateSelectedToKFunction()
|
|
_detalhes.atributo_energy:UpdateSelectedToKFunction()
|
|
_detalhes.atributo_misc:UpdateSelectedToKFunction()
|
|
_detalhes.atributo_custom:UpdateSelectedToKFunction()
|
|
|
|
----------> call widgets handlers
|
|
self:SetBarSettings (self.row_info.height)
|
|
self:SetBarBackdropSettings()
|
|
self:SetBarSpecIconSettings()
|
|
self:SetBarRightTextSettings()
|
|
|
|
--> update toolbar
|
|
self:ToolbarSide()
|
|
|
|
--> update stretch button
|
|
self:StretchButtonAnchor()
|
|
|
|
--> update side bars
|
|
if (self.show_sidebars) then
|
|
self:ShowSideBars()
|
|
else
|
|
self:HideSideBars()
|
|
end
|
|
|
|
--> refresh the side of the micro displays and its lock state
|
|
self:MicroDisplaysSide()
|
|
self:MicroDisplaysLock()
|
|
self:RefreshMicroDisplays()
|
|
|
|
--> update statusbar
|
|
if (self.show_statusbar) then
|
|
self:ShowStatusBar()
|
|
else
|
|
self:HideStatusBar()
|
|
end
|
|
|
|
--> update wallpaper
|
|
if (self.wallpaper.enabled) then
|
|
self:InstanceWallpaper (true)
|
|
else
|
|
self:InstanceWallpaper (false)
|
|
end
|
|
|
|
--> update instance color
|
|
self:InstanceColor()
|
|
self:SetBackgroundColor()
|
|
self:SetBackgroundAlpha()
|
|
self:SetAutoHideMenu()
|
|
self:SetBackdropTexture()
|
|
|
|
--> refresh all bars
|
|
self:InstanceRefreshRows()
|
|
|
|
--> update menu saturation
|
|
self:DesaturateMenu()
|
|
|
|
--> update statusbar color
|
|
self:StatusBarColor()
|
|
|
|
--> update attribute string
|
|
self:AttributeMenu()
|
|
|
|
--> update top menus
|
|
self:LeftMenuAnchorSide()
|
|
|
|
--> update window strata level
|
|
self:SetFrameStrata()
|
|
|
|
--> update the combat alphas
|
|
self:AdjustAlphaByContext()
|
|
|
|
--> update icons
|
|
_detalhes.ToolBar:ReorganizeIcons (true) --call self:SetMenuAlpha()
|
|
|
|
--> refresh options panel if opened
|
|
if (_G.DetailsOptionsWindow and _G.DetailsOptionsWindow:IsShown() and not _G.DetailsOptionsWindow.IsLoading) then
|
|
_detalhes:OpenOptionsWindow (self)
|
|
end
|
|
|
|
--> auto interact
|
|
if (self.menu_alpha.enabled) then
|
|
self:SetMenuAlpha (nil, nil, nil, nil, self.is_interacting)
|
|
end
|
|
|
|
--> set the scale
|
|
self:SetWindowScale()
|
|
|
|
--> refresh lock buttons
|
|
self:RefreshLockedState()
|
|
|
|
--> clear any control sscript running in this instance
|
|
self.bgframe:SetScript ("OnUpdate", nil)
|
|
self.bgframe.skin_script = nil
|
|
|
|
--> check if the skin has control scripts to run
|
|
if (not just_updating or _detalhes.initializing) then
|
|
local callbackFunc = this_skin.callback
|
|
if (callbackFunc) then
|
|
DetailsFramework:SetEnvironment(callbackFunc)
|
|
local okey, result = pcall (callbackFunc, this_skin, self, just_updating)
|
|
if (not okey) then
|
|
_detalhes:Msg ("|cFFFF9900error on skin callback function|r:", result)
|
|
end
|
|
end
|
|
|
|
if (this_skin.control_script) then
|
|
local onStartScript = this_skin.control_script_on_start
|
|
if (onStartScript) then
|
|
DetailsFramework:SetEnvironment(onStartScript)
|
|
local okey, result = pcall (onStartScript, this_skin, self)
|
|
if (not okey) then
|
|
_detalhes:Msg ("|cFFFF9900error on skin control on start function|r:", result)
|
|
end
|
|
end
|
|
|
|
local controlFunc = this_skin.control_script
|
|
DetailsFramework:SetEnvironment(controlFunc)
|
|
self.bgframe:SetScript ("OnUpdate", controlFunc)
|
|
self.bgframe.skin_script = true
|
|
self.bgframe.skin = this_skin
|
|
end
|
|
end
|
|
|
|
self:UpdateClickThrough()
|
|
end
|
|
|
|
--update the window click through state
|
|
local updateClickThroughListener = _detalhes:CreateEventListener()
|
|
function updateClickThroughListener:EnterCombat()
|
|
_detalhes:InstanceCall (function (instance)
|
|
C_Timer.After (1.5, function()
|
|
instance:UpdateClickThrough()
|
|
end)
|
|
end)
|
|
end
|
|
|
|
function updateClickThroughListener:LeaveCombat()
|
|
_detalhes:InstanceCall (function (instance)
|
|
C_Timer.After (1.5, function()
|
|
instance:UpdateClickThrough()
|
|
end)
|
|
end)
|
|
end
|
|
|
|
updateClickThroughListener:RegisterEvent ("COMBAT_PLAYER_ENTER", "EnterCombat")
|
|
updateClickThroughListener:RegisterEvent ("COMBAT_PLAYER_LEAVE", "EnterCombat")
|
|
|
|
function _detalhes:UpdateClickThroughSettings (inCombat, window, bars, toolbaricons)
|
|
if (inCombat ~= nil) then
|
|
self.clickthrough_incombatonly = inCombat
|
|
end
|
|
|
|
if (window ~= nil) then
|
|
self.clickthrough_window = window
|
|
end
|
|
|
|
if (bars ~= nil) then
|
|
self.clickthrough_rows = bars
|
|
end
|
|
|
|
if (toolbaricons ~= nil) then
|
|
self.clickthrough_toolbaricons = toolbaricons
|
|
end
|
|
|
|
self:UpdateClickThrough()
|
|
end
|
|
|
|
function _detalhes:UpdateClickThrough()
|
|
|
|
local barsClickThrough = self.clickthrough_rows
|
|
local windowClickThrough = self.clickthrough_window
|
|
local onlyInCombat = self.clickthrough_incombatonly
|
|
local toolbarIcons = not self.clickthrough_toolbaricons
|
|
|
|
if (onlyInCombat) then
|
|
|
|
if (InCombatLockdown()) then
|
|
--player bars
|
|
if (barsClickThrough) then
|
|
for barIndex, barObject in _ipairs (self.barras) do
|
|
barObject:EnableMouse(false)
|
|
barObject.icon_frame:EnableMouse(false)
|
|
end
|
|
else
|
|
for barIndex, barObject in _ipairs (self.barras) do
|
|
barObject:EnableMouse(true)
|
|
barObject.icon_frame:EnableMouse(true)
|
|
end
|
|
end
|
|
|
|
--window frames
|
|
if (windowClickThrough) then
|
|
self.baseframe:EnableMouse (false)
|
|
self.bgframe:EnableMouse (false)
|
|
self.rowframe:EnableMouse (false)
|
|
self.floatingframe:EnableMouse (false)
|
|
self.windowSwitchButton:EnableMouse (false)
|
|
self.windowBackgroundDisplay:EnableMouse (false)
|
|
self.baseframe.UPFrame:EnableMouse (false)
|
|
self.baseframe.DOWNFrame:EnableMouse(false)
|
|
|
|
|
|
else
|
|
self.baseframe:EnableMouse (true)
|
|
self.bgframe:EnableMouse (true)
|
|
self.rowframe:EnableMouse (true)
|
|
self.floatingframe:EnableMouse (true)
|
|
self.windowSwitchButton:EnableMouse (true)
|
|
self.windowBackgroundDisplay:EnableMouse (true)
|
|
self.baseframe.UPFrame:EnableMouse (true)
|
|
self.baseframe.DOWNFrame:EnableMouse(true)
|
|
end
|
|
|
|
--titlebar icons
|
|
local toolbar_buttons = {}
|
|
toolbar_buttons [1] = self.baseframe.cabecalho.modo_selecao
|
|
toolbar_buttons [2] = self.baseframe.cabecalho.segmento
|
|
toolbar_buttons [3] = self.baseframe.cabecalho.atributo
|
|
toolbar_buttons [4] = self.baseframe.cabecalho.report
|
|
toolbar_buttons [5] = self.baseframe.cabecalho.reset
|
|
toolbar_buttons [6] = self.baseframe.cabecalho.fechar
|
|
|
|
for i, button in ipairs (toolbar_buttons) do
|
|
button:EnableMouse (toolbar_buttons)
|
|
end
|
|
|
|
else
|
|
--player bars
|
|
for barIndex, barObject in _ipairs (self.barras) do
|
|
barObject:EnableMouse (true)
|
|
barObject.icon_frame:EnableMouse(true)
|
|
end
|
|
|
|
--window frames
|
|
self.baseframe:EnableMouse (true)
|
|
self.bgframe:EnableMouse (true)
|
|
self.rowframe:EnableMouse (true)
|
|
self.floatingframe:EnableMouse (true)
|
|
self.windowSwitchButton:EnableMouse (true)
|
|
self.windowBackgroundDisplay:EnableMouse (true)
|
|
self.baseframe.UPFrame:EnableMouse (true)
|
|
self.baseframe.DOWNFrame:EnableMouse(true)
|
|
|
|
--titlebar icons, forcing true because the player isn't in combat and the inCombat setting is enabled
|
|
local toolbar_buttons = {}
|
|
toolbar_buttons [1] = self.baseframe.cabecalho.modo_selecao
|
|
toolbar_buttons [2] = self.baseframe.cabecalho.segmento
|
|
toolbar_buttons [3] = self.baseframe.cabecalho.atributo
|
|
toolbar_buttons [4] = self.baseframe.cabecalho.report
|
|
toolbar_buttons [5] = self.baseframe.cabecalho.reset
|
|
toolbar_buttons [6] = self.baseframe.cabecalho.fechar
|
|
|
|
for i, button in ipairs (toolbar_buttons) do
|
|
button:EnableMouse (true)
|
|
end
|
|
end
|
|
else
|
|
|
|
--player bars
|
|
if (barsClickThrough) then
|
|
for barIndex, barObject in _ipairs (self.barras) do
|
|
barObject:EnableMouse (false)
|
|
barObject.icon_frame:EnableMouse(false)
|
|
end
|
|
else
|
|
for barIndex, barObject in _ipairs (self.barras) do
|
|
barObject:EnableMouse (true)
|
|
end
|
|
end
|
|
|
|
--window frame
|
|
if (windowClickThrough) then
|
|
self.baseframe:EnableMouse (false)
|
|
self.bgframe:EnableMouse (false)
|
|
self.rowframe:EnableMouse (false)
|
|
self.floatingframe:EnableMouse (false)
|
|
self.windowSwitchButton:EnableMouse (false)
|
|
self.windowBackgroundDisplay:EnableMouse (false)
|
|
self.baseframe.UPFrame:EnableMouse (false)
|
|
self.baseframe.DOWNFrame:EnableMouse(false)
|
|
else
|
|
self.baseframe:EnableMouse (true)
|
|
self.bgframe:EnableMouse (true)
|
|
self.rowframe:EnableMouse (true)
|
|
self.floatingframe:EnableMouse (true)
|
|
self.windowSwitchButton:EnableMouse (true)
|
|
self.windowBackgroundDisplay:EnableMouse (true)
|
|
self.baseframe.UPFrame:EnableMouse (true)
|
|
self.baseframe.DOWNFrame:EnableMouse(true)
|
|
end
|
|
|
|
--titlebar icons
|
|
local toolbar_buttons = {}
|
|
toolbar_buttons [1] = self.baseframe.cabecalho.modo_selecao
|
|
toolbar_buttons [2] = self.baseframe.cabecalho.segmento
|
|
toolbar_buttons [3] = self.baseframe.cabecalho.atributo
|
|
toolbar_buttons [4] = self.baseframe.cabecalho.report
|
|
toolbar_buttons [5] = self.baseframe.cabecalho.reset
|
|
toolbar_buttons [6] = self.baseframe.cabecalho.fechar
|
|
|
|
for i, button in ipairs (toolbar_buttons) do
|
|
button:EnableMouse (toolbarIcons)
|
|
end
|
|
end
|
|
end
|
|
|
|
function _detalhes:DelayedCheckCombatAlpha (instance, alpha)
|
|
if (UnitAffectingCombat("player") or InCombatLockdown()) then
|
|
instance:SetWindowAlphaForCombat (true, true, alpha) --> hida a janela
|
|
instance:SetWindowAlphaForCombat (true, true, alpha) --> hida a janela
|
|
end
|
|
end
|
|
|
|
function _detalhes:DelayedCheckOutOfCombatAlpha (instance, alpha)
|
|
if (not UnitAffectingCombat("player") and not InCombatLockdown()) then
|
|
instance:SetWindowAlphaForCombat (true, true, alpha) --> hida a janela
|
|
instance:SetWindowAlphaForCombat (true, true, alpha) --> hida a janela
|
|
end
|
|
end
|
|
|
|
function _detalhes:DelayedCheckOutOfCombatAndGroupAlpha (instance, alpha)
|
|
if ((_detalhes.zone_type == "raid" or _detalhes.zone_type == "party") and IsInInstance()) then
|
|
if (UnitAffectingCombat("player") or InCombatLockdown()) then
|
|
instance:SetWindowAlphaForCombat (false, false, alpha) --> deshida a janela
|
|
else
|
|
instance:SetWindowAlphaForCombat (true, true, alpha) --> hida a janela
|
|
instance:SetWindowAlphaForCombat (true, true, alpha) --> hida a janela
|
|
end
|
|
end
|
|
end
|
|
|
|
local getAlphaByContext = function(instance, contextIndex, invert)
|
|
local alpha = instance.hide_on_context[contextIndex].value
|
|
if (invert) then
|
|
alpha = abs(alpha - 100)
|
|
end
|
|
return alpha
|
|
end
|
|
|
|
function _detalhes:AdjustAlphaByContext(interacting)
|
|
|
|
--in combat
|
|
if (not self.meu_id) then
|
|
print("error Details! AdjustAlphaByContext()", debugstack())
|
|
end
|
|
|
|
local hasRuleEnabled = false
|
|
|
|
--not in group
|
|
if (self.hide_on_context[3].enabled) then
|
|
if (self.hide_on_context[3].inverse) then
|
|
--while in group
|
|
if (_detalhes.in_group) then
|
|
self:SetWindowAlphaForCombat (true, true, getAlphaByContext(self, 3)) --> hida a janela
|
|
self:SetWindowAlphaForCombat (true, true, getAlphaByContext(self, 3)) --> hida a janela
|
|
hasRuleEnabled = true
|
|
end
|
|
else
|
|
--while not in group
|
|
if (not _detalhes.in_group) then
|
|
self:SetWindowAlphaForCombat (true, true, getAlphaByContext(self, 3)) --> hida a janela
|
|
self:SetWindowAlphaForCombat (true, true, getAlphaByContext(self, 3)) --> hida a janela
|
|
hasRuleEnabled = true
|
|
end
|
|
end
|
|
end
|
|
|
|
--while not inside instance
|
|
if (self.hide_on_context[4].enabled) then
|
|
local isInInstance = IsInInstance()
|
|
if (not isInInstance or (not _detalhes.zone_type == "raid" and not _detalhes.zone_type == "party")) then
|
|
self:SetWindowAlphaForCombat (true, true, getAlphaByContext(self, 4)) --> hida a janela
|
|
self:SetWindowAlphaForCombat (true, true, getAlphaByContext(self, 4)) --> hida a janela
|
|
hasRuleEnabled = true
|
|
end
|
|
end
|
|
|
|
--while inside instance
|
|
if (self.hide_on_context[5].enabled) then
|
|
local isInInstance = IsInInstance()
|
|
if (isInInstance or _detalhes.zone_type == "raid" or _detalhes.zone_type == "party") then
|
|
self:SetWindowAlphaForCombat (true, true, getAlphaByContext(self, 5)) --> hida a janela
|
|
self:SetWindowAlphaForCombat (true, true, getAlphaByContext(self, 5)) --> hida a janela
|
|
hasRuleEnabled = true
|
|
end
|
|
end
|
|
|
|
--raid debug (inside instance + out of combat)
|
|
if (self.hide_on_context[6].enabled) then
|
|
if ((_detalhes.zone_type == "raid" or _detalhes.zone_type == "party") and IsInInstance()) then
|
|
_detalhes:ScheduleTimer ("DelayedCheckOutOfCombatAndGroupAlpha", 0.3, self, getAlphaByContext(self, 6))
|
|
end
|
|
end
|
|
|
|
--in battleground
|
|
if (self.hide_on_context[7].enabled) then
|
|
local isInInstance = IsInInstance()
|
|
if (isInInstance and _detalhes.zone_type == "pvp") then
|
|
--player is inside a battleground
|
|
if (not self.hide_on_context[7].inverse) then
|
|
self:SetWindowAlphaForCombat (true, true, getAlphaByContext(self, 7)) --> hida a janela
|
|
self:SetWindowAlphaForCombat (true, true, getAlphaByContext(self, 7)) --> hida a janela
|
|
else
|
|
self:SetWindowAlphaForCombat (false, false, getAlphaByContext(self, 7)) --> deshida a janela
|
|
end
|
|
hasRuleEnabled = true
|
|
|
|
else
|
|
--player is not inside a battleground
|
|
if (not self.hide_on_context[7].inverse) then
|
|
--there's no inverse rule: do nothing
|
|
--self:SetWindowAlphaForCombat (false, false, getAlphaByContext(self, 7)) --> deshida a janela
|
|
else
|
|
self:SetWindowAlphaForCombat (true, true, getAlphaByContext(self, 7)) --> hida a janela
|
|
self:SetWindowAlphaForCombat (true, true, getAlphaByContext(self, 7)) --> hida a janela
|
|
hasRuleEnabled = true
|
|
end
|
|
end
|
|
end
|
|
|
|
--mythic+
|
|
if (self.hide_on_context[8].enabled) then
|
|
if (_G.DetailsMythicPlusFrame and _G.DetailsMythicPlusFrame.IsDoingMythicDungeon) then
|
|
--player is inside a dungeon mythic+
|
|
if (not self.hide_on_context[8].inverse) then
|
|
self:SetWindowAlphaForCombat (true, true, getAlphaByContext(self, 8)) --> hida a janela
|
|
self:SetWindowAlphaForCombat (true, true, getAlphaByContext(self, 8)) --> hida a janela
|
|
else
|
|
self:SetWindowAlphaForCombat (false, false, getAlphaByContext(self, 8)) --> deshida a janela
|
|
end
|
|
hasRuleEnabled = true
|
|
|
|
else
|
|
if (not self.hide_on_context[8].inverse) then
|
|
--there's no inverse rule: do nothing
|
|
--self:SetWindowAlphaForCombat (false, false, getAlphaByContext(self, 8)) --> deshida a janela
|
|
else
|
|
self:SetWindowAlphaForCombat (true, true, getAlphaByContext(self, 8)) --> hida a janela
|
|
self:SetWindowAlphaForCombat (true, true, getAlphaByContext(self, 8)) --> hida a janela
|
|
hasRuleEnabled = true
|
|
end
|
|
end
|
|
end
|
|
|
|
--in combat
|
|
if (self.hide_on_context[1].enabled) then
|
|
_detalhes:ScheduleTimer ("DelayedCheckCombatAlpha", 0.3, self, getAlphaByContext(self, 1))
|
|
end
|
|
|
|
--out of combat
|
|
if (self.hide_on_context[2].enabled) then
|
|
_detalhes:ScheduleTimer ("DelayedCheckOutOfCombatAlpha", 0.3, self, getAlphaByContext(self, 2))
|
|
end
|
|
|
|
--if no rule is enabled, show the window
|
|
if (not hasRuleEnabled) then
|
|
self:SetWindowAlphaForCombat(false)
|
|
self:SetWindowAlphaForCombat(false)
|
|
end
|
|
end
|
|
|
|
function _detalhes:LeftMenuAnchorSide (side)
|
|
if (not side) then
|
|
side = self.menu_anchor.side
|
|
end
|
|
|
|
self.menu_anchor.side = side
|
|
return self:MenuAnchor()
|
|
end
|
|
|
|
function _detalhes:SetFrameStrata (strata)
|
|
|
|
if (not strata) then
|
|
strata = self.strata
|
|
end
|
|
|
|
self.strata = strata
|
|
|
|
self.rowframe:SetFrameStrata (strata)
|
|
self.windowSwitchButton:SetFrameStrata (strata)
|
|
self.baseframe:SetFrameStrata (strata)
|
|
|
|
if (strata == "BACKGROUND") then
|
|
self.break_snap_button:SetFrameStrata ("LOW")
|
|
self.baseframe.resize_esquerda:SetFrameStrata ("LOW")
|
|
self.baseframe.resize_direita:SetFrameStrata ("LOW")
|
|
self.baseframe.lock_button:SetFrameStrata ("LOW")
|
|
|
|
elseif (strata == "LOW") then
|
|
self.break_snap_button:SetFrameStrata ("MEDIUM")
|
|
self.baseframe.resize_esquerda:SetFrameStrata ("MEDIUM")
|
|
self.baseframe.resize_direita:SetFrameStrata ("MEDIUM")
|
|
self.baseframe.lock_button:SetFrameStrata ("MEDIUM")
|
|
|
|
elseif (strata == "MEDIUM") then
|
|
self.break_snap_button:SetFrameStrata ("HIGH")
|
|
self.baseframe.resize_esquerda:SetFrameStrata ("HIGH")
|
|
self.baseframe.resize_direita:SetFrameStrata ("HIGH")
|
|
self.baseframe.lock_button:SetFrameStrata ("HIGH")
|
|
|
|
elseif (strata == "HIGH") then
|
|
self.break_snap_button:SetFrameStrata ("DIALOG")
|
|
self.baseframe.resize_esquerda:SetFrameStrata ("DIALOG")
|
|
self.baseframe.resize_direita:SetFrameStrata ("DIALOG")
|
|
self.baseframe.lock_button:SetFrameStrata ("DIALOG")
|
|
|
|
elseif (strata == "DIALOG") then
|
|
self.break_snap_button:SetFrameStrata ("FULLSCREEN")
|
|
self.baseframe.resize_esquerda:SetFrameStrata ("FULLSCREEN")
|
|
self.baseframe.resize_direita:SetFrameStrata ("FULLSCREEN")
|
|
self.baseframe.lock_button:SetFrameStrata ("FULLSCREEN")
|
|
end
|
|
|
|
self:StretchButtonAlwaysOnTop()
|
|
end
|
|
|
|
-- ~attributemenu (text with attribute name)
|
|
function _detalhes:RefreshAttributeTextSize()
|
|
if (self.attribute_text.enabled and self.total_buttons_shown and self.baseframe and self.menu_attribute_string) then
|
|
|
|
local window_width = self:GetSize()
|
|
|
|
if (self.auto_hide_menu.left and not self.is_interacting) then
|
|
self.menu_attribute_string:SetWidth (window_width)
|
|
self.menu_attribute_string:SetHeight (self.attribute_text.text_size + 2)
|
|
return
|
|
end
|
|
|
|
local buttons_shown = self.total_buttons_shown
|
|
local buttons_width, buttons_spacement = self.menu_icons_size * 16, self.menu_icons.space
|
|
|
|
local width_by_buttons = (buttons_shown * buttons_width) + (buttons_spacement * (buttons_shown - 1))
|
|
|
|
local text_size = window_width - width_by_buttons - 6
|
|
self.menu_attribute_string:SetWidth (text_size)
|
|
self.menu_attribute_string:SetHeight (self.attribute_text.text_size + 2)
|
|
end
|
|
end
|
|
|
|
-- ~encounter ~timer
|
|
function _detalhes:CheckForTextTimeCounter (combat_start)
|
|
if (combat_start) then
|
|
if (_detalhes.tabela_vigente.is_boss) then
|
|
local lower = _detalhes:GetLowerInstanceNumber()
|
|
if (lower) then
|
|
local instance = _detalhes:GetInstance (lower)
|
|
if (instance.baseframe and instance:IsEnabled()) then
|
|
if (instance.attribute_text.show_timer) then
|
|
if (_detalhes.instance_title_text_timer [instance:GetId()]) then
|
|
Details.Schedules.Cancel(_detalhes.instance_title_text_timer [instance:GetId()])
|
|
end
|
|
_detalhes.instance_title_text_timer[instance:GetId()] = Details.Schedules.NewTicker(1, Details.TitleTextTickTimer, Details, instance)
|
|
end
|
|
end
|
|
else
|
|
return
|
|
end
|
|
else
|
|
if (_detalhes.in_combat and _detalhes.zone_type == "raid") then
|
|
Details.Schedules.NewTimer(3, Details.CheckForTextTimeCounter, Details, true)
|
|
end
|
|
end
|
|
else
|
|
for _, instance in ipairs (_detalhes.tabela_instancias) do
|
|
if (_detalhes.instance_title_text_timer [instance:GetId()] and instance.baseframe and instance:IsEnabled() and instance.menu_attribute_string) then
|
|
Details.Schedules.Cancel(_detalhes.instance_title_text_timer[instance:GetId()])
|
|
local current_text = instance:GetTitleBarText()
|
|
current_text = current_text:gsub ("%[.*%] ", "")
|
|
instance:SetTitleBarText(current_text)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local format_timer = function (t)
|
|
local m, s = _math_floor (t/60), _math_floor (t%60)
|
|
if (m < 1) then
|
|
m = "00"
|
|
elseif (m < 10) then
|
|
m = "0" .. m
|
|
end
|
|
if (s < 10) then
|
|
s = "0" .. s
|
|
end
|
|
return "[" .. m .. ":" .. s .. "]"
|
|
end
|
|
|
|
function _detalhes:TitleTextTickTimer (instance)
|
|
if (instance.attribute_text.enabled) then
|
|
local currentText = instance.menu_attribute_string.originalText
|
|
if (currentText) then
|
|
local timer = format_timer (_detalhes.tabela_vigente:GetCombatTime())
|
|
instance:SetTitleBarText(timer .. " " .. currentText)
|
|
else
|
|
local current_text = instance:GetTitleBarText()
|
|
if (not current_text:find ("%[.*%]")) then
|
|
instance:SetTitleBarText("[00:01] " .. current_text)
|
|
else
|
|
local timer = format_timer (_detalhes.tabela_vigente:GetCombatTime())
|
|
current_text = current_text:gsub ("%[.*%]", timer)
|
|
instance:SetTitleBarText(current_text)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function _detalhes:SetTitleBarText(text)
|
|
if (self.attribute_text.enabled and self.menu_attribute_string) then
|
|
self.menu_attribute_string:SetText(text)
|
|
end
|
|
end
|
|
|
|
function _detalhes:GetTitleBarText()
|
|
if (self.menu_attribute_string) then
|
|
return self.menu_attribute_string:GetText()
|
|
end
|
|
end
|
|
|
|
-- ~titletext
|
|
function _detalhes:AttributeMenu (enabled, pos_x, pos_y, font, size, color, side, shadow, timer_encounter, timer_bg, timer_arena)
|
|
|
|
if (type (enabled) ~= "boolean") then
|
|
enabled = self.attribute_text.enabled
|
|
end
|
|
|
|
if (not pos_x) then
|
|
pos_x = self.attribute_text.anchor [1]
|
|
end
|
|
if (not pos_y) then
|
|
pos_y = self.attribute_text.anchor [2]
|
|
end
|
|
|
|
if (not font) then
|
|
font = self.attribute_text.text_face
|
|
end
|
|
|
|
if (not size) then
|
|
size = self.attribute_text.text_size
|
|
end
|
|
|
|
if (not color) then
|
|
color = self.attribute_text.text_color
|
|
end
|
|
|
|
if (not side) then
|
|
side = self.attribute_text.side
|
|
end
|
|
|
|
if (type (shadow) ~= "boolean") then
|
|
shadow = self.attribute_text.shadow
|
|
end
|
|
|
|
if (type(self.attribute_text.show_timer) ~= "boolean") then
|
|
self.attribute_text.show_timer = true
|
|
end
|
|
if (type(timer_encounter) ~= "boolean") then
|
|
timer_encounter = self.attribute_text.show_timer
|
|
end
|
|
|
|
self.attribute_text.enabled = enabled
|
|
self.attribute_text.anchor [1] = pos_x
|
|
self.attribute_text.anchor [2] = pos_y
|
|
self.attribute_text.text_face = font
|
|
self.attribute_text.text_size = size
|
|
self.attribute_text.text_color = color
|
|
self.attribute_text.side = side
|
|
self.attribute_text.shadow = shadow
|
|
self.attribute_text.show_timer = timer_encounter
|
|
|
|
--> enabled
|
|
if (not enabled and self.menu_attribute_string) then
|
|
return self.menu_attribute_string:Hide()
|
|
elseif (not enabled) then
|
|
return
|
|
end
|
|
|
|
--> protection against failed clean up framework table
|
|
if (self.menu_attribute_string and not getmetatable (self.menu_attribute_string)) then
|
|
self.menu_attribute_string = nil
|
|
end
|
|
|
|
if (not self.menu_attribute_string) then
|
|
|
|
local label = gump:NewLabel (self.floatingframe, nil, "DetailsAttributeStringInstance" .. self.meu_id, nil, "", "GameFontHighlightSmall")
|
|
self.menu_attribute_string = label
|
|
self.menu_attribute_string.text = _detalhes:GetSubAttributeName (self.atributo, self.sub_atributo)
|
|
self.menu_attribute_string.owner_instance = self
|
|
|
|
self.menu_attribute_string.Enabled = true
|
|
self.menu_attribute_string.__enabled = true
|
|
|
|
function self.menu_attribute_string:OnEvent (instance, attribute, subAttribute)
|
|
if (instance == label.owner_instance) then
|
|
local sName = instance:GetInstanceAttributeText()
|
|
local instanceMode = instance:GetMode()
|
|
|
|
if (instanceMode == DETAILS_MODE_GROUP or instanceMode == DETAILS_MODE_ALL) then
|
|
local segment = instance:GetSegment()
|
|
if (segment == DETAILS_SEGMENTID_OVERALL) then
|
|
sName = sName .. " " .. Loc ["STRING_OVERALL"]
|
|
|
|
elseif (segment >= 2) then
|
|
sName = sName .. " [" .. segment .. "]"
|
|
end
|
|
end
|
|
|
|
label.text = sName
|
|
label.originalText = sName
|
|
end
|
|
end
|
|
|
|
_detalhes:RegisterEvent (self.menu_attribute_string, "DETAILS_INSTANCE_CHANGEATTRIBUTE", self.menu_attribute_string.OnEvent)
|
|
_detalhes:RegisterEvent (self.menu_attribute_string, "DETAILS_INSTANCE_CHANGEMODE", self.menu_attribute_string.OnEvent)
|
|
_detalhes:RegisterEvent (self.menu_attribute_string, "DETAILS_INSTANCE_CHANGESEGMENT", self.menu_attribute_string.OnEvent)
|
|
end
|
|
|
|
self.menu_attribute_string:Show()
|
|
|
|
--> anchor
|
|
if (side == 1) then --> a string esta no lado de cima
|
|
if (self.toolbar_side == 1) then -- a toolbar esta em cima
|
|
self.menu_attribute_string:ClearAllPoints()
|
|
self.menu_attribute_string:SetPoint ("bottomleft", self.baseframe.cabecalho.ball, "bottomright", self.attribute_text.anchor [1], self.attribute_text.anchor [2])
|
|
|
|
elseif (self.toolbar_side == 2) then --a toolbar esta em baixo
|
|
self.menu_attribute_string:ClearAllPoints()
|
|
self.menu_attribute_string:SetPoint ("bottomleft", self.baseframe, "topleft", self.attribute_text.anchor [1] + 21, self.attribute_text.anchor [2])
|
|
|
|
end
|
|
|
|
elseif (side == 2) then --> a string esta no lado de baixo
|
|
if (self.toolbar_side == 1) then --toolbar esta em cima
|
|
self.menu_attribute_string:ClearAllPoints()
|
|
self.menu_attribute_string:SetPoint ("left", self.baseframe.rodape.StatusBarLeftAnchor, "left", self.attribute_text.anchor [1] + 16, self.attribute_text.anchor [2] - 6)
|
|
|
|
elseif (self.toolbar_side == 2) then --toolbar esta em baixo
|
|
self.menu_attribute_string:SetPoint ("bottomleft", self.baseframe.cabecalho.ball, "topright", self.attribute_text.anchor [1], self.attribute_text.anchor [2] - 19)
|
|
|
|
end
|
|
end
|
|
|
|
--font face
|
|
local fontPath = SharedMedia:Fetch ("font", font)
|
|
_detalhes:SetFontFace (self.menu_attribute_string, fontPath)
|
|
|
|
--font size
|
|
_detalhes:SetFontSize (self.menu_attribute_string, size)
|
|
|
|
--color
|
|
_detalhes:SetFontColor (self.menu_attribute_string, color)
|
|
C_Timer.After(1, function()
|
|
_detalhes:SetFontColor (self.menu_attribute_string, color)
|
|
end)
|
|
|
|
--shadow
|
|
_detalhes:SetFontOutline (self.menu_attribute_string, shadow)
|
|
|
|
--refresh size
|
|
self:RefreshAttributeTextSize()
|
|
end
|
|
|
|
-- ~backdrop
|
|
function _detalhes:SetBackdropTexture (texturename)
|
|
|
|
if (not texturename) then
|
|
texturename = self.backdrop_texture
|
|
end
|
|
|
|
self.backdrop_texture = texturename
|
|
|
|
local texture_path = SharedMedia:Fetch ("background", texturename)
|
|
|
|
self.baseframe:SetBackdrop ({
|
|
bgFile = texture_path, tile = true, tileSize = 128,
|
|
insets = {left = 0, right = 0, top = 0, bottom = 0}}
|
|
)
|
|
self.bgdisplay:SetBackdrop ({
|
|
bgFile = texture_path, tile = true, tileSize = 128,
|
|
insets = {left = 0, right = 0, top = 0, bottom = 0}}
|
|
)
|
|
|
|
self:SetBackgroundAlpha (self.bg_alpha)
|
|
|
|
end
|
|
|
|
-- ~alpha (transparency of buttons on the toolbar) ~autohide �utohide ~menuauto
|
|
function _detalhes:SetAutoHideMenu (left, right, interacting)
|
|
|
|
--30/07/2018: the separation by left and right menu icons doesn't exists for years, but it was still active in the code making
|
|
--the toolbar icons show on initialization even when the options to auto hide them enabled.
|
|
--the code to set the alpha was already updated to only one anhor (left) but this function was still calling to update the right anchor (deprecated)
|
|
|
|
if (interacting) then
|
|
if (self.is_interacting) then
|
|
if (self.auto_hide_menu.left) then
|
|
local r, g, b = unpack (self.color_buttons)
|
|
self:InstanceButtonsColors (r, g, b, 1, true, true) --no save, only left
|
|
|
|
if (self.baseframe.cabecalho.PluginIconsSeparator) then
|
|
self.baseframe.cabecalho.PluginIconsSeparator:Show()
|
|
end
|
|
end
|
|
-- if (self.auto_hide_menu.right) then
|
|
-- local r, g, b = unpack (self.color_buttons)
|
|
-- self:InstanceButtonsColors (r, g, b, 1, true, nil, true) --no save, only right
|
|
-- end
|
|
else
|
|
if (self.auto_hide_menu.left) then
|
|
local r, g, b = unpack (self.color_buttons)
|
|
self:InstanceButtonsColors (r, g, b, 0, true, true) --no save, only left
|
|
|
|
if (self.baseframe.cabecalho.PluginIconsSeparator) then
|
|
self.baseframe.cabecalho.PluginIconsSeparator:Hide()
|
|
end
|
|
end
|
|
-- if (self.auto_hide_menu.right) then
|
|
-- local r, g, b = unpack (self.color_buttons)
|
|
-- self:InstanceButtonsColors (r, g, b, 0, true, nil, true) --no save, only right
|
|
-- end
|
|
end
|
|
return
|
|
end
|
|
|
|
if (left == nil) then
|
|
left = self.auto_hide_menu.left
|
|
end
|
|
if (right == nil) then
|
|
right = self.auto_hide_menu.right
|
|
end
|
|
|
|
self.auto_hide_menu.left = left
|
|
self.auto_hide_menu.right = right
|
|
|
|
local r, g, b = unpack (self.color_buttons)
|
|
|
|
if (not left) then
|
|
--auto hide is off
|
|
self:InstanceButtonsColors (r, g, b, 1, true, true) --no save, only left
|
|
|
|
if (self.baseframe.cabecalho.PluginIconsSeparator) then
|
|
self.baseframe.cabecalho.PluginIconsSeparator:Show()
|
|
end
|
|
else
|
|
if (self.is_interacting) then
|
|
self:InstanceButtonsColors (r, g, b, 1, true, true) --no save, only left
|
|
|
|
if (self.baseframe.cabecalho.PluginIconsSeparator) then
|
|
self.baseframe.cabecalho.PluginIconsSeparator:Show()
|
|
end
|
|
else
|
|
self:InstanceButtonsColors (0, 0, 0, 0, true, true) --no save, only left
|
|
|
|
if (self.baseframe.cabecalho.PluginIconsSeparator) then
|
|
self.baseframe.cabecalho.PluginIconsSeparator:Hide()
|
|
end
|
|
end
|
|
end
|
|
|
|
--[=[
|
|
if (not right) then
|
|
--auto hide is off
|
|
self:InstanceButtonsColors (r, g, b, 1, true, nil, true) --no save, only right
|
|
else
|
|
if (self.is_interacting) then
|
|
self:InstanceButtonsColors (r, g, b, 1, true, nil, true) --no save, only right
|
|
else
|
|
self:InstanceButtonsColors (0, 0, 0, 0, true, nil, true) --no save, only right
|
|
end
|
|
end
|
|
--]=]
|
|
|
|
self:RefreshAttributeTextSize()
|
|
--auto_hide_menu = {left = false, right = false},
|
|
|
|
end
|
|
|
|
-- transparency for toolbar, borders and statusbar
|
|
function _detalhes:SetMenuAlpha (enabled, onenter, onleave, ignorebars, interacting)
|
|
|
|
if (interacting) then --> called from a onenter or onleave script
|
|
if (self.menu_alpha.enabled) then
|
|
if (self.is_interacting) then
|
|
return self:SetWindowAlphaForInteract (self.menu_alpha.onenter)
|
|
else
|
|
return self:SetWindowAlphaForInteract (self.menu_alpha.onleave)
|
|
end
|
|
end
|
|
return
|
|
end
|
|
|
|
--ignorebars
|
|
|
|
if (enabled == nil) then
|
|
enabled = self.menu_alpha.enabled
|
|
end
|
|
if (not onenter) then
|
|
onenter = self.menu_alpha.onenter
|
|
end
|
|
if (not onleave) then
|
|
onleave = self.menu_alpha.onleave
|
|
end
|
|
if (ignorebars == nil) then
|
|
ignorebars = self.menu_alpha.ignorebars
|
|
end
|
|
|
|
self.menu_alpha.enabled = enabled
|
|
self.menu_alpha.onenter = onenter
|
|
self.menu_alpha.onleave = onleave
|
|
self.menu_alpha.ignorebars = ignorebars
|
|
|
|
if (not enabled) then
|
|
self.baseframe:SetAlpha (1)
|
|
self.rowframe:SetAlpha (1)
|
|
self:InstanceAlpha (self.color[4])
|
|
self:SetIconAlpha (1, nil, true)
|
|
return self:InstanceColor (unpack (self.color))
|
|
--return self:SetWindowAlphaForInteract (self.color [4])
|
|
else
|
|
local r, g, b = unpack (self.color)
|
|
self:InstanceColor (r, g, b, 1)
|
|
r, g, b = unpack (self.statusbar_info.overlay)
|
|
self:StatusBarColor (r, g, b, 1)
|
|
end
|
|
|
|
if (self.is_interacting) then
|
|
return self:SetWindowAlphaForInteract (onenter) --> set alpha
|
|
else
|
|
return self:SetWindowAlphaForInteract (onleave) --> set alpha
|
|
end
|
|
|
|
end
|
|
|
|
function _detalhes:GetInstanceCurrentAlpha()
|
|
if (self.menu_alpha.enabled) then
|
|
if (self:IsInteracting()) then
|
|
return self.menu_alpha.onenter
|
|
else
|
|
return self.menu_alpha.onleave
|
|
end
|
|
else
|
|
return self.color [4]
|
|
end
|
|
end
|
|
|
|
function _detalhes:GetInstanceIconsCurrentAlpha()
|
|
if (self.menu_alpha.enabled and self.menu_alpha.iconstoo) then
|
|
if (self:IsInteracting()) then
|
|
return self.menu_alpha.onenter
|
|
else
|
|
return self.menu_alpha.onleave
|
|
end
|
|
else
|
|
return 1
|
|
end
|
|
end
|
|
|
|
function _detalhes:MicroDisplaysLock (lockstate)
|
|
if (lockstate == nil) then
|
|
lockstate = self.micro_displays_locked
|
|
end
|
|
self.micro_displays_locked = lockstate
|
|
|
|
if (lockstate) then --> is locked
|
|
_detalhes.StatusBar:LockDisplays (self, true)
|
|
else
|
|
_detalhes.StatusBar:LockDisplays (self, false)
|
|
end
|
|
end
|
|
|
|
function _detalhes:MicroDisplaysSide (side, fromuser)
|
|
if (not side) then
|
|
side = self.micro_displays_side
|
|
end
|
|
|
|
self.micro_displays_side = side
|
|
|
|
_detalhes.StatusBar:ReloadAnchors (self)
|
|
|
|
if (self.micro_displays_side == 2 and not self.show_statusbar) then --> bottom side
|
|
_detalhes.StatusBar:Hide (self)
|
|
if (fromuser) then
|
|
_detalhes:Msg (Loc ["STRING_OPTIONS_MICRODISPLAYWARNING"])
|
|
end
|
|
elseif (self.micro_displays_side == 2) then
|
|
_detalhes.StatusBar:Show (self)
|
|
elseif (self.micro_displays_side == 1) then
|
|
_detalhes.StatusBar:Show (self)
|
|
end
|
|
|
|
end
|
|
|
|
function _detalhes:IsGroupedWith (instance)
|
|
local id = instance:GetId()
|
|
for side, instanceId in _pairs (self.snap) do
|
|
if (instanceId == id) then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function _detalhes:GetInstanceGroup (instance_id)
|
|
|
|
local instance = self
|
|
|
|
if (instance_id) then
|
|
instance = _detalhes:GetInstance (instance_id)
|
|
if (not instance or not instance:IsEnabled()) then
|
|
return
|
|
end
|
|
end
|
|
|
|
local current_group = {instance}
|
|
|
|
for side, insId in _pairs (instance.snap) do
|
|
if (insId < instance:GetId()) then
|
|
local last_id = instance:GetId()
|
|
for i = insId, 1, -1 do
|
|
local this_instance = _detalhes:GetInstance (i)
|
|
local got = false
|
|
if (this_instance and this_instance:IsEnabled()) then
|
|
for side, id in _pairs (this_instance.snap) do
|
|
if (id == last_id) then
|
|
tinsert (current_group, this_instance)
|
|
got = true
|
|
last_id = i
|
|
end
|
|
end
|
|
end
|
|
if (not got) then
|
|
break
|
|
end
|
|
end
|
|
else
|
|
local last_id = instance:GetId()
|
|
for i = insId, _detalhes.instances_amount do
|
|
local this_instance = _detalhes:GetInstance (i)
|
|
local got = false
|
|
if (this_instance and this_instance:IsEnabled()) then
|
|
for side, id in _pairs (this_instance.snap) do
|
|
if (id == last_id) then
|
|
tinsert (current_group, this_instance)
|
|
got = true
|
|
last_id = i
|
|
end
|
|
end
|
|
end
|
|
if (not got) then
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
return current_group
|
|
end
|
|
|
|
function _detalhes:SetWindowScale (scale, from_options)
|
|
if (not scale) then
|
|
scale = self.window_scale
|
|
end
|
|
|
|
if (from_options) then
|
|
local group = self:GetInstanceGroup()
|
|
|
|
for _, instance in _ipairs (group) do
|
|
instance.baseframe:SetScale(scale)
|
|
instance.rowframe:SetScale(scale)
|
|
instance.windowSwitchButton:SetScale(scale)
|
|
instance.windowBackgroundDisplay:SetScale(scale)
|
|
instance.window_scale = scale
|
|
end
|
|
else
|
|
self.window_scale = scale
|
|
self.baseframe:SetScale(scale)
|
|
self.rowframe:SetScale(scale)
|
|
self.windowSwitchButton:SetScale(scale)
|
|
self.windowBackgroundDisplay:SetScale(scale)
|
|
end
|
|
end
|
|
|
|
function _detalhes:ToolbarSide (side, only_update_anchors)
|
|
|
|
if (not side) then
|
|
side = self.toolbar_side
|
|
end
|
|
|
|
self.toolbar_side = side
|
|
|
|
local skin = _detalhes.skins [self.skin]
|
|
|
|
if (side == 1) then --> top
|
|
|
|
local anchor_mod = not self.show_sidebars and skin.instance_cprops.show_sidebars_need_resize_by or 0
|
|
|
|
--> icon (ball) point
|
|
self.baseframe.cabecalho.ball_point:ClearAllPoints()
|
|
|
|
local x, y = unpack (skin.icon_point_anchor)
|
|
x = x + (anchor_mod)
|
|
self.baseframe.cabecalho.ball_point:SetPoint ("bottomleft", self.baseframe, "topleft", x, y)
|
|
|
|
--> ball
|
|
if (self.hide_icon) then
|
|
self.baseframe.cabecalho.ball:SetTexCoord (unpack (COORDS_LEFT_BALL_NO_ICON))
|
|
self.baseframe.cabecalho.emenda:SetTexCoord (unpack (COORDS_LEFT_CONNECTOR_NO_ICON))
|
|
else
|
|
self.baseframe.cabecalho.ball:SetTexCoord (unpack (COORDS_LEFT_BALL))
|
|
self.baseframe.cabecalho.emenda:SetTexCoord (unpack (COORDS_LEFT_CONNECTOR))
|
|
end
|
|
|
|
self.baseframe.cabecalho.ball:ClearAllPoints()
|
|
|
|
local x, y = unpack (skin.left_corner_anchor)
|
|
x = x + (anchor_mod)
|
|
self.baseframe.cabecalho.ball:SetPoint ("bottomleft", self.baseframe, "topleft", x, y)
|
|
|
|
--> ball r
|
|
self.baseframe.cabecalho.ball_r:SetTexCoord (unpack (COORDS_RIGHT_BALL))
|
|
self.baseframe.cabecalho.ball_r:ClearAllPoints()
|
|
|
|
local x, y = unpack (skin.right_corner_anchor)
|
|
x = x + ((anchor_mod) * -1)
|
|
self.baseframe.cabecalho.ball_r:SetPoint ("bottomright", self.baseframe, "topright", x, y)
|
|
|
|
--> tex coords
|
|
self.baseframe.cabecalho.top_bg:SetTexCoord (unpack (COORDS_TOP_BACKGROUND))
|
|
|
|
--> up frames
|
|
self.baseframe.UPFrame:SetPoint ("left", self.baseframe.cabecalho.ball, "right", 0, -53)
|
|
self.baseframe.UPFrame:SetPoint ("right", self.baseframe.cabecalho.ball_r, "left", 0, -53)
|
|
|
|
self.baseframe.UPFrameConnect:ClearAllPoints()
|
|
self.baseframe.UPFrameConnect:SetPoint ("bottomleft", self.baseframe, "topleft", 0, -1)
|
|
self.baseframe.UPFrameConnect:SetPoint ("bottomright", self.baseframe, "topright", 0, -1)
|
|
|
|
self.baseframe.UPFrameLeftPart:ClearAllPoints()
|
|
self.baseframe.UPFrameLeftPart:SetPoint ("bottomleft", self.baseframe, "topleft", 0, 0)
|
|
|
|
|
|
else --> bottom
|
|
|
|
local y = 0
|
|
if (self.show_statusbar) then
|
|
y = -14
|
|
end
|
|
|
|
local anchor_mod = not self.show_sidebars and skin.instance_cprops.show_sidebars_need_resize_by or 0
|
|
|
|
--> ball point
|
|
self.baseframe.cabecalho.ball_point:ClearAllPoints()
|
|
|
|
local _x, _y = unpack (skin.icon_point_anchor_bottom)
|
|
_x = _x + (anchor_mod)
|
|
self.baseframe.cabecalho.ball_point:SetPoint ("topleft", self.baseframe, "bottomleft", _x, _y + y)
|
|
|
|
--> ball
|
|
self.baseframe.cabecalho.ball:ClearAllPoints()
|
|
|
|
local _x, _y = unpack (skin.left_corner_anchor_bottom)
|
|
_x = _x + (anchor_mod)
|
|
self.baseframe.cabecalho.ball:SetPoint ("topleft", self.baseframe, "bottomleft", _x, _y + y)
|
|
local l, r, t, b = unpack (COORDS_LEFT_BALL)
|
|
self.baseframe.cabecalho.ball:SetTexCoord (l, r, b, t)
|
|
|
|
--> ball r
|
|
self.baseframe.cabecalho.ball_r:ClearAllPoints()
|
|
|
|
local _x, _y = unpack (skin.right_corner_anchor_bottom)
|
|
_x = _x + ((anchor_mod) * -1)
|
|
self.baseframe.cabecalho.ball_r:SetPoint ("topright", self.baseframe, "bottomright", _x, _y + y)
|
|
local l, r, t, b = unpack (COORDS_RIGHT_BALL)
|
|
self.baseframe.cabecalho.ball_r:SetTexCoord (l, r, b, t)
|
|
|
|
--> tex coords
|
|
local l, r, t, b = unpack (COORDS_LEFT_CONNECTOR)
|
|
self.baseframe.cabecalho.emenda:SetTexCoord (l, r, b, t)
|
|
local l, r, t, b = unpack (COORDS_TOP_BACKGROUND)
|
|
self.baseframe.cabecalho.top_bg:SetTexCoord (l, r, b, t)
|
|
|
|
--> up frames
|
|
self.baseframe.UPFrame:SetPoint ("left", self.baseframe.cabecalho.ball, "right", 0, 53)
|
|
self.baseframe.UPFrame:SetPoint ("right", self.baseframe.cabecalho.ball_r, "left", 0, 53)
|
|
|
|
self.baseframe.UPFrameConnect:ClearAllPoints()
|
|
self.baseframe.UPFrameConnect:SetPoint ("topleft", self.baseframe, "bottomleft", 0, 1)
|
|
self.baseframe.UPFrameConnect:SetPoint ("topright", self.baseframe, "bottomright", 0, 1)
|
|
|
|
self.baseframe.UPFrameLeftPart:ClearAllPoints()
|
|
self.baseframe.UPFrameLeftPart:SetPoint ("topleft", self.baseframe, "bottomleft", 0, 0)
|
|
|
|
end
|
|
|
|
if (only_update_anchors) then
|
|
--> ShowSideBars depends on this and creates a infinite loop
|
|
return
|
|
end
|
|
|
|
--> update top menus
|
|
self:LeftMenuAnchorSide()
|
|
|
|
self:StretchButtonAnchor()
|
|
|
|
self:HideMainIcon() --attribute menu reseting value
|
|
|
|
if (self.show_sidebars) then
|
|
self:ShowSideBars()
|
|
end
|
|
|
|
self:AttributeMenu()
|
|
|
|
--> update the grow direction to update the gap between the titlebar and the baseframe
|
|
self:SetBarGrowDirection()
|
|
end
|
|
|
|
function _detalhes:StretchButtonAlwaysOnTop (on_top)
|
|
|
|
if (type (on_top) ~= "boolean") then
|
|
on_top = self.grab_on_top
|
|
end
|
|
|
|
self.grab_on_top = on_top
|
|
|
|
if (self.grab_on_top) then
|
|
self.baseframe.button_stretch:SetFrameStrata ("FULLSCREEN")
|
|
else
|
|
self.baseframe.button_stretch:SetFrameStrata (self.strata)
|
|
end
|
|
|
|
end
|
|
|
|
function _detalhes:StretchButtonAnchor (side)
|
|
|
|
if (not side) then
|
|
side = self.stretch_button_side
|
|
end
|
|
|
|
if (side == 1 or string.lower (side) == "top") then
|
|
|
|
self.baseframe.button_stretch:ClearAllPoints()
|
|
|
|
local y = 0
|
|
if (self.toolbar_side == 2) then --bottom
|
|
y = -20
|
|
end
|
|
|
|
self.baseframe.button_stretch:SetPoint ("bottom", self.baseframe, "top", 0, 20 + y)
|
|
self.baseframe.button_stretch:SetPoint ("right", self.baseframe, "right", -27, 0)
|
|
self.baseframe.button_stretch.texture:SetTexCoord (unpack (COORDS_STRETCH))
|
|
self.stretch_button_side = 1
|
|
|
|
elseif (side == 2 or string.lower (side) == "bottom") then
|
|
|
|
self.baseframe.button_stretch:ClearAllPoints()
|
|
|
|
local y = 0
|
|
if (self.toolbar_side == 2) then --bottom
|
|
y = y -20
|
|
end
|
|
if (self.show_statusbar) then
|
|
y = y -14
|
|
end
|
|
|
|
self.baseframe.button_stretch:SetPoint ("center", self.baseframe, "center")
|
|
self.baseframe.button_stretch:SetPoint ("top", self.baseframe, "bottom", 0, y)
|
|
|
|
local l, r, t, b = unpack (COORDS_STRETCH)
|
|
self.baseframe.button_stretch.texture:SetTexCoord (r, l, b, t)
|
|
|
|
self.stretch_button_side = 2
|
|
|
|
end
|
|
|
|
end
|
|
|
|
function _detalhes:MenuAnchor (x, y)
|
|
if (self.toolbar_side == 1) then --top
|
|
if (not x) then
|
|
x = self.menu_anchor [1]
|
|
end
|
|
if (not y) then
|
|
y = self.menu_anchor [2]
|
|
end
|
|
self.menu_anchor [1] = x
|
|
self.menu_anchor [2] = y
|
|
|
|
elseif (self.toolbar_side == 2) then --bottom
|
|
if (not x) then
|
|
x = self.menu_anchor_down [1]
|
|
end
|
|
if (not y) then
|
|
y = self.menu_anchor_down [2]
|
|
end
|
|
self.menu_anchor_down [1] = x
|
|
self.menu_anchor_down [2] = y
|
|
end
|
|
|
|
local menu_points = self.menu_points -- = {MenuAnchorLeft, MenuAnchorRight}
|
|
|
|
if (self.menu_anchor.side == 1) then --> left
|
|
|
|
menu_points [1]:ClearAllPoints()
|
|
|
|
if (self.toolbar_side == 1) then --> top
|
|
menu_points [1]:SetPoint ("bottomleft", self.baseframe.cabecalho.ball, "bottomright", x, y) -- y+2
|
|
|
|
else --> bottom
|
|
menu_points [1]:SetPoint ("topleft", self.baseframe.cabecalho.ball, "topright", x, (y*-1) - 4)
|
|
|
|
end
|
|
|
|
elseif (self.menu_anchor.side == 2) then --> right
|
|
|
|
menu_points [2]:ClearAllPoints()
|
|
|
|
if (self.toolbar_side == 1) then --> top
|
|
menu_points [2]:SetPoint ("topleft", self.baseframe.cabecalho.ball_r, "bottomleft", x, y+16)
|
|
|
|
else --> bottom
|
|
menu_points [2]:SetPoint ("topleft", self.baseframe.cabecalho.ball_r, "topleft", x, (y*-1) - 4)
|
|
|
|
end
|
|
end
|
|
|
|
self:ToolbarMenuButtons()
|
|
end
|
|
|
|
function _detalhes:HideMainIcon (value)
|
|
|
|
if (type (value) ~= "boolean") then
|
|
value = self.hide_icon
|
|
end
|
|
|
|
if (value) then
|
|
|
|
self.hide_icon = true
|
|
Details.FadeHandler.Fader (self.baseframe.cabecalho.atributo_icon, 1)
|
|
|
|
if (self.toolbar_side == 1) then
|
|
self.baseframe.cabecalho.ball:SetTexCoord (unpack (COORDS_LEFT_BALL_NO_ICON))
|
|
self.baseframe.cabecalho.emenda:SetTexCoord (unpack (COORDS_LEFT_CONNECTOR_NO_ICON))
|
|
|
|
elseif (self.toolbar_side == 2) then
|
|
local l, r, t, b = unpack (COORDS_LEFT_BALL_NO_ICON)
|
|
self.baseframe.cabecalho.ball:SetTexCoord (l, r, b, t)
|
|
local l, r, t, b = unpack (COORDS_LEFT_CONNECTOR_NO_ICON)
|
|
self.baseframe.cabecalho.emenda:SetTexCoord (l, r, b, t)
|
|
end
|
|
|
|
local skin = _detalhes.skins [self.skin]
|
|
|
|
if (skin.icon_on_top) then
|
|
self.baseframe.cabecalho.atributo_icon:SetParent (self.floatingframe)
|
|
else
|
|
self.baseframe.cabecalho.atributo_icon:SetParent (self.baseframe)
|
|
end
|
|
|
|
else
|
|
self.hide_icon = false
|
|
Details.FadeHandler.Fader (self.baseframe.cabecalho.atributo_icon, 0)
|
|
|
|
if (self.toolbar_side == 1) then
|
|
|
|
self.baseframe.cabecalho.ball:SetTexCoord (unpack (COORDS_LEFT_BALL))
|
|
self.baseframe.cabecalho.emenda:SetTexCoord (unpack (COORDS_LEFT_CONNECTOR))
|
|
|
|
elseif (self.toolbar_side == 2) then
|
|
|
|
local l, r, t, b = unpack (COORDS_LEFT_BALL)
|
|
self.baseframe.cabecalho.ball:SetTexCoord (l, r, b, t)
|
|
local l, r, t, b = unpack (COORDS_LEFT_CONNECTOR)
|
|
self.baseframe.cabecalho.emenda:SetTexCoord (l, r, b, t)
|
|
end
|
|
end
|
|
end
|
|
|
|
--> search key: ~desaturate
|
|
function _detalhes:DesaturateMenu (value)
|
|
|
|
if (value == nil) then
|
|
value = self.desaturated_menu
|
|
end
|
|
|
|
if (value) then
|
|
|
|
self.desaturated_menu = true
|
|
self.baseframe.cabecalho.modo_selecao:GetNormalTexture():SetDesaturated (true)
|
|
self.baseframe.cabecalho.segmento:GetNormalTexture():SetDesaturated (true)
|
|
self.baseframe.cabecalho.atributo:GetNormalTexture():SetDesaturated (true)
|
|
self.baseframe.cabecalho.report:GetNormalTexture():SetDesaturated (true)
|
|
self.baseframe.cabecalho.reset:GetNormalTexture():SetDesaturated (true)
|
|
self.baseframe.cabecalho.fechar:GetNormalTexture():SetDesaturated (true)
|
|
|
|
if (self.meu_id == _detalhes:GetLowerInstanceNumber()) then
|
|
for _, button in _ipairs (_detalhes.ToolBar.AllButtons) do
|
|
button:GetNormalTexture():SetDesaturated (true)
|
|
end
|
|
end
|
|
|
|
else
|
|
|
|
self.desaturated_menu = false
|
|
self.baseframe.cabecalho.modo_selecao:GetNormalTexture():SetDesaturated (false)
|
|
self.baseframe.cabecalho.segmento:GetNormalTexture():SetDesaturated (false)
|
|
self.baseframe.cabecalho.atributo:GetNormalTexture():SetDesaturated (false)
|
|
self.baseframe.cabecalho.report:GetNormalTexture():SetDesaturated (false)
|
|
self.baseframe.cabecalho.reset:GetNormalTexture():SetDesaturated (false)
|
|
self.baseframe.cabecalho.fechar:GetNormalTexture():SetDesaturated (false)
|
|
|
|
if (self.meu_id == _detalhes:GetLowerInstanceNumber()) then
|
|
for _, button in _ipairs (_detalhes.ToolBar.AllButtons) do
|
|
button:GetNormalTexture():SetDesaturated (false)
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
function _detalhes:ShowSideBars (instancia)
|
|
if (instancia) then
|
|
self = instancia
|
|
end
|
|
|
|
self.show_sidebars = true
|
|
|
|
self.baseframe.barra_esquerda:Show()
|
|
self.baseframe.barra_direita:Show()
|
|
|
|
--> set default spacings
|
|
local this_skin = _detalhes.skins [self.skin]
|
|
if (this_skin.instance_cprops and this_skin.instance_cprops.row_info and this_skin.instance_cprops.row_info.space) then
|
|
self.row_info.space.left = this_skin.instance_cprops.row_info.space.left
|
|
self.row_info.space.right = this_skin.instance_cprops.row_info.space.right
|
|
else
|
|
self.row_info.space.left = 3
|
|
self.row_info.space.right = -5
|
|
end
|
|
|
|
if (self.show_statusbar) then
|
|
self.baseframe.barra_esquerda:SetPoint ("bottomleft", self.baseframe, "bottomleft", -56, -14)
|
|
self.baseframe.barra_direita:SetPoint ("bottomright", self.baseframe, "bottomright", 56, -14)
|
|
|
|
if (self.toolbar_side == 2) then
|
|
self.baseframe.barra_fundo:Show()
|
|
local l, r, t, b = unpack (COORDS_BOTTOM_SIDE_BAR)
|
|
self.baseframe.barra_fundo:SetTexCoord (l, r, b, t)
|
|
self.baseframe.barra_fundo:ClearAllPoints()
|
|
self.baseframe.barra_fundo:SetPoint ("bottomleft", self.baseframe, "topleft", 0, -6)
|
|
self.baseframe.barra_fundo:SetPoint ("bottomright", self.baseframe, "topright", -1, -6)
|
|
else
|
|
self.baseframe.barra_fundo:Hide()
|
|
end
|
|
else
|
|
self.baseframe.barra_esquerda:SetPoint ("bottomleft", self.baseframe, "bottomleft", -56, 0)
|
|
self.baseframe.barra_direita:SetPoint ("bottomright", self.baseframe, "bottomright", 56, 0)
|
|
|
|
self.baseframe.barra_fundo:Show()
|
|
|
|
if (self.toolbar_side == 2) then --tooltbar on bottom
|
|
local l, r, t, b = unpack (COORDS_BOTTOM_SIDE_BAR)
|
|
self.baseframe.barra_fundo:SetTexCoord (l, r, b, t)
|
|
self.baseframe.barra_fundo:ClearAllPoints()
|
|
self.baseframe.barra_fundo:SetPoint ("bottomleft", self.baseframe, "topleft", 0, -6)
|
|
self.baseframe.barra_fundo:SetPoint ("bottomright", self.baseframe, "topright", -1, -6)
|
|
else --tooltbar on top
|
|
self.baseframe.barra_fundo:SetTexCoord (unpack (COORDS_BOTTOM_SIDE_BAR))
|
|
self.baseframe.barra_fundo:ClearAllPoints()
|
|
self.baseframe.barra_fundo:SetPoint ("bottomleft", self.baseframe, "bottomleft", 0, -56)
|
|
self.baseframe.barra_fundo:SetPoint ("bottomright", self.baseframe, "bottomright", -1, -56)
|
|
end
|
|
end
|
|
|
|
--self:SetBarGrowDirection()
|
|
--passando true - apenas atulizar as anchors
|
|
self:ToolbarSide (nil, true)
|
|
|
|
end
|
|
|
|
function _detalhes:HideSideBars (instancia)
|
|
if (instancia) then
|
|
self = instancia
|
|
end
|
|
|
|
self.show_sidebars = false
|
|
|
|
local this_skin = _detalhes.skins [self.skin]
|
|
local space_config = this_skin.instance_cprops and this_skin.instance_cprops.row_info and this_skin.instance_cprops.row_info.space
|
|
if (space_config) then
|
|
if (space_config.left_noborder) then
|
|
self.row_info.space.left = space_config.left_noborder
|
|
else
|
|
self.row_info.space.left = 0
|
|
end
|
|
|
|
if (space_config.right_noborder) then
|
|
self.row_info.space.right = space_config.right_noborder
|
|
else
|
|
self.row_info.space.right = 0
|
|
end
|
|
else
|
|
self.row_info.space.left = 0
|
|
self.row_info.space.right = 0
|
|
end
|
|
|
|
self.baseframe.barra_esquerda:Hide()
|
|
self.baseframe.barra_direita:Hide()
|
|
self.baseframe.barra_fundo:Hide()
|
|
|
|
--self:SetBarGrowDirection() --j� � chamado no toolbarside
|
|
--passando true - apenas atulizar as anchors
|
|
self:ToolbarSide (nil, true)
|
|
end
|
|
|
|
function _detalhes:HideStatusBar (instancia)
|
|
if (instancia) then
|
|
self = instancia
|
|
end
|
|
|
|
self.show_statusbar = false
|
|
|
|
self.baseframe.rodape.esquerdo:Hide()
|
|
self.baseframe.rodape.direita:Hide()
|
|
self.baseframe.rodape.top_bg:Hide()
|
|
self.baseframe.rodape.StatusBarLeftAnchor:Hide()
|
|
self.baseframe.rodape.StatusBarCenterAnchor:Hide()
|
|
self.baseframe.DOWNFrame:Hide()
|
|
|
|
--debug
|
|
self.baseframe.rodape.direita_nostatusbar:Show()
|
|
self.baseframe.rodape.esquerdo_nostatusbar:Show()
|
|
--
|
|
|
|
if (self.toolbar_side == 2) then
|
|
self:ToolbarSide()
|
|
end
|
|
|
|
if (self.show_sidebars) then
|
|
self:ShowSideBars()
|
|
end
|
|
|
|
self:StretchButtonAnchor()
|
|
|
|
if (self.micro_displays_side == 2) then --> bottom side
|
|
_detalhes.StatusBar:Hide (self) --> mini displays widgets
|
|
end
|
|
end
|
|
|
|
function _detalhes:StatusBarColor (r, g, b, a, no_save)
|
|
|
|
if (not r) then
|
|
r, g, b = unpack (self.statusbar_info.overlay)
|
|
a = a or self.statusbar_info.alpha
|
|
end
|
|
|
|
if (not no_save) then
|
|
self.statusbar_info.overlay [1] = r
|
|
self.statusbar_info.overlay [2] = g
|
|
self.statusbar_info.overlay [3] = b
|
|
self.statusbar_info.alpha = a
|
|
end
|
|
|
|
self.baseframe.rodape.esquerdo:SetVertexColor (r, g, b)
|
|
self.baseframe.rodape.esquerdo:SetAlpha (a)
|
|
self.baseframe.rodape.direita:SetVertexColor (r, g, b)
|
|
self.baseframe.rodape.direita:SetAlpha (a)
|
|
self.baseframe.rodape.direita_nostatusbar:SetVertexColor (r, g, b)
|
|
self.baseframe.rodape.esquerdo_nostatusbar:SetVertexColor (r, g, b)
|
|
self.baseframe.rodape.direita_nostatusbar:SetAlpha (a)
|
|
self.baseframe.rodape.esquerdo_nostatusbar:SetAlpha (a)
|
|
self.baseframe.rodape.top_bg:SetVertexColor (r, g, b)
|
|
self.baseframe.rodape.top_bg:SetAlpha (a)
|
|
|
|
end
|
|
|
|
function _detalhes:ShowStatusBar(instancia)
|
|
if (instancia) then
|
|
self = instancia
|
|
end
|
|
|
|
self.show_statusbar = true
|
|
|
|
self.baseframe.rodape.esquerdo:Show()
|
|
self.baseframe.rodape.direita:Show()
|
|
self.baseframe.rodape.top_bg:Show()
|
|
self.baseframe.rodape.StatusBarLeftAnchor:Show()
|
|
self.baseframe.rodape.StatusBarCenterAnchor:Show()
|
|
self.baseframe.DOWNFrame:Show()
|
|
|
|
--debug
|
|
--self.baseframe.rodape.direita_nostatusbar:Hide()
|
|
--self.baseframe.rodape.esquerdo_nostatusbar:Hide()
|
|
--
|
|
|
|
self:ToolbarSide()
|
|
self:StretchButtonAnchor()
|
|
|
|
if (self.micro_displays_side == 2) then --> bottom side
|
|
_detalhes.StatusBar:Show(self) --> mini displays widgets
|
|
end
|
|
end
|
|
|
|
function _detalhes:SetTooltipBackdrop (border_texture, border_size, border_color)
|
|
|
|
if (not border_texture) then
|
|
border_texture = _detalhes.tooltip.border_texture
|
|
end
|
|
if (not border_size) then
|
|
border_size = _detalhes.tooltip.border_size
|
|
end
|
|
if (not border_color) then
|
|
border_color = _detalhes.tooltip.border_color
|
|
end
|
|
|
|
_detalhes.tooltip.border_texture = border_texture
|
|
_detalhes.tooltip.border_size = border_size
|
|
|
|
local c = _detalhes.tooltip.border_color
|
|
local cc = _detalhes.tooltip_border_color
|
|
c[1], c[2], c[3], c[4] = border_color[1], border_color[2], border_color[3], border_color[4] or 1
|
|
cc[1], cc[2], cc[3], cc[4] = border_color[1], border_color[2], border_color[3], border_color[4] or 1
|
|
|
|
_detalhes.tooltip_backdrop.edgeFile = SharedMedia:Fetch ("border", border_texture)
|
|
_detalhes.tooltip_backdrop.edgeSize = border_size
|
|
|
|
end
|
|
|
|
--> reset button functions
|
|
local reset_button_onenter = function (self, _, forced, from_click)
|
|
|
|
if (_detalhes.instances_menu_click_to_open and not forced) then
|
|
return
|
|
end
|
|
|
|
local instancia = self._instance or self.widget._instance
|
|
local baseframe = instancia.baseframe
|
|
|
|
local GameCooltip = GameCooltip
|
|
|
|
OnEnterMainWindow (self.instance, self)
|
|
GameCooltip.buttonOver = true
|
|
self.instance.baseframe.cabecalho.button_mouse_over = true
|
|
|
|
if (self.instance.desaturated_menu) then
|
|
self:GetNormalTexture():SetDesaturated (false)
|
|
end
|
|
|
|
GameCooltip:Reset()
|
|
GameCooltip:SetType ("menu")
|
|
|
|
GameCooltip:SetOption ("ButtonsYMod", -6)
|
|
GameCooltip:SetOption ("HeighMod", 6)
|
|
GameCooltip:SetOption ("YSpacingMod", -3)
|
|
GameCooltip:SetOption ("TextHeightMod", 0)
|
|
GameCooltip:SetOption ("IgnoreButtonAutoHeight", false)
|
|
|
|
_detalhes:SetTooltipMinWidth()
|
|
|
|
GameCooltip:AddLine (Loc ["STRING_ERASE_DATA_OVERALL"], nil, 1, "white", nil, _detalhes.font_sizes.menus, _detalhes.font_faces.menus)
|
|
GameCooltip:AddIcon ([[Interface\Buttons\UI-StopButton]], 1, 1, 14, 14, 0, 1, 0, 1, "orange")
|
|
GameCooltip:AddMenu (1, _detalhes.tabela_historico.resetar_overall)
|
|
|
|
GameCooltip:AddLine ("$div", nil, 1, nil, -5, -11)
|
|
|
|
GameCooltip:AddLine (Loc ["STRING_ERASE_DATA"], nil, 1, "white", nil, _detalhes.font_sizes.menus, _detalhes.font_faces.menus)
|
|
GameCooltip:AddIcon ([[Interface\Buttons\UI-StopButton]], 1, 1, 14, 14, 0, 1, 0, 1, "red")
|
|
GameCooltip:AddMenu (1, _detalhes.tabela_historico.resetar)
|
|
|
|
_detalhes:FormatCooltipBackdrop()
|
|
|
|
show_anti_overlap (self.instance, self, "top")
|
|
|
|
_detalhes:SetMenuOwner (self, self.instance)
|
|
GameCooltip:ShowCooltip()
|
|
end
|
|
|
|
local reset_button_onleave = function (self)
|
|
OnLeaveMainWindow (self.instance, self)
|
|
|
|
if (self.instance.desaturated_menu) then
|
|
self:GetNormalTexture():SetDesaturated (true)
|
|
end
|
|
|
|
hide_anti_overlap (self.instance.baseframe.anti_menu_overlap)
|
|
|
|
GameCooltip.buttonOver = false
|
|
self.instance.baseframe.cabecalho.button_mouse_over = false
|
|
|
|
if (GameCooltip.active) then
|
|
parameters_table [2] = 0
|
|
self:SetScript ("OnUpdate", on_leave_menu)
|
|
else
|
|
self:SetScript ("OnUpdate", nil)
|
|
end
|
|
|
|
end
|
|
|
|
--> close button functions
|
|
|
|
local close_button_onclick = function (self, button_type, button)
|
|
|
|
if (self and not self.instancia and button and button.instancia) then
|
|
self = button
|
|
end
|
|
|
|
self = self or button
|
|
|
|
self:Disable()
|
|
self.instancia:DesativarInstancia()
|
|
|
|
--> n�o h� mais inst�ncias abertas, ent�o manda msg alertando
|
|
if (_detalhes.opened_windows == 0) then
|
|
_detalhes:Msg (Loc ["STRING_CLOSEALL"])
|
|
end
|
|
|
|
--> tutorial, how to fully delete a window
|
|
--_detalhes:SetTutorialCVar ("FULL_DELETE_WINDOW", false)
|
|
|
|
if (not _detalhes:GetTutorialCVar ("FULL_DELETE_WINDOW")) then
|
|
_detalhes:SetTutorialCVar ("FULL_DELETE_WINDOW", true)
|
|
|
|
local panel = gump:Create1PxPanel (UIParent, 600, 100, "|cFFFFFFFFDetails!, the window hit the ground, bang bang...|r", nil, nil, nil, nil)
|
|
panel:SetBackdropColor (0, 0, 0, 0.9)
|
|
panel:SetPoint ("center", UIParent, "center")
|
|
|
|
local s = panel:CreateFontString (nil, "overlay", "GameFontNormal")
|
|
s:SetPoint ("center", panel, "center")
|
|
s:SetText (Loc ["STRING_TUTORIAL_FULLY_DELETE_WINDOW"])
|
|
|
|
panel:Show()
|
|
end
|
|
|
|
GameCooltip:Hide()
|
|
end
|
|
_detalhes.close_instancia_func = close_button_onclick
|
|
|
|
local close_button_onenter = function (self)
|
|
OnEnterMainWindow (self.instance, self, 3)
|
|
|
|
if (self.instance.desaturated_menu) then
|
|
self:GetNormalTexture():SetDesaturated (false)
|
|
end
|
|
|
|
local GameCooltip = GameCooltip
|
|
|
|
GameCooltip.buttonOver = true
|
|
self.instance.baseframe.cabecalho.button_mouse_over = true
|
|
|
|
GameCooltip:Reset()
|
|
GameCooltip:SetType ("menu")
|
|
GameCooltip:SetOption ("ButtonsYMod", -7)
|
|
GameCooltip:SetOption ("ButtonsYModSub", -2)
|
|
GameCooltip:SetOption ("YSpacingMod", 0)
|
|
GameCooltip:SetOption ("YSpacingModSub", -3)
|
|
GameCooltip:SetOption ("TextHeightMod", 0)
|
|
GameCooltip:SetOption ("TextHeightModSub", 0)
|
|
GameCooltip:SetOption ("IgnoreButtonAutoHeight", false)
|
|
GameCooltip:SetOption ("IgnoreButtonAutoHeightSub", false)
|
|
GameCooltip:SetOption ("SubMenuIsTooltip", true)
|
|
GameCooltip:SetOption ("FixedWidthSub", 180)
|
|
--GameCooltip:SetOption ("FixedHeight", 30)
|
|
|
|
GameCooltip:SetOption ("HeighMod", 9)
|
|
|
|
local font = SharedMedia:Fetch ("font", "Friz Quadrata TT")
|
|
GameCooltip:AddLine (Loc ["STRING_MENU_CLOSE_INSTANCE"], nil, 1, "white", nil, _detalhes.font_sizes.menus, _detalhes.font_faces.menus)
|
|
GameCooltip:AddIcon ([[Interface\Buttons\UI-Panel-MinimizeButton-Up]], 1, 1, 14, 14, 0.2, 0.8, 0.2, 0.8)
|
|
GameCooltip:AddMenu (1, close_button_onclick, self)
|
|
|
|
GameCooltip:AddLine (Loc ["STRING_MENU_CLOSE_INSTANCE_DESC"], nil, 2, "white", nil, _detalhes.font_sizes.menus, _detalhes.font_faces.menus)
|
|
GameCooltip:AddIcon ([[Interface\CHATFRAME\UI-ChatIcon-Minimize-Up]], 2, 1, 18, 18)
|
|
|
|
GameCooltip:AddLine (Loc ["STRING_MENU_CLOSE_INSTANCE_DESC2"], nil, 2, "white", nil, _detalhes.font_sizes.menus, _detalhes.font_faces.menus)
|
|
GameCooltip:AddIcon ([[Interface\PaperDollInfoFrame\UI-GearManager-LeaveItem-Transparent]], 2, 1, 18, 18)
|
|
|
|
GameCooltip:SetWallpaper (1, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true)
|
|
GameCooltip:SetWallpaper (2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true)
|
|
GameCooltip:SetBackdrop (1, menus_backdrop, nil, menus_bordercolor)
|
|
GameCooltip:SetBackdrop (2, menus_backdrop, nil, menus_bordercolor)
|
|
|
|
show_anti_overlap (self.instance, self, "top")
|
|
|
|
_detalhes:SetMenuOwner (self, self.instance)
|
|
GameCooltip:ShowCooltip()
|
|
end
|
|
|
|
local close_button_onleave = function (self)
|
|
OnLeaveMainWindow (self.instance, self, 3)
|
|
|
|
if (self.instance.desaturated_menu) then
|
|
self:GetNormalTexture():SetDesaturated (true)
|
|
end
|
|
|
|
hide_anti_overlap (self.instance.baseframe.anti_menu_overlap)
|
|
|
|
GameCooltip.buttonOver = false
|
|
self.instance.baseframe.cabecalho.button_mouse_over = false
|
|
|
|
if (GameCooltip.active) then
|
|
parameters_table [2] = 0
|
|
self:SetScript ("OnUpdate", on_leave_menu)
|
|
else
|
|
self:SetScript ("OnUpdate", nil)
|
|
end
|
|
|
|
end
|
|
|
|
------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
--> build upper menu bar
|
|
|
|
local menu_can_open = function()
|
|
if (GameCooltip.active) then
|
|
local owner = GameCooltip:GetOwner()
|
|
if (owner and owner:GetScript ("OnUpdate") == on_leave_menu) then
|
|
owner:SetScript ("OnUpdate", nil)
|
|
end
|
|
return true
|
|
end
|
|
end
|
|
|
|
local report_on_enter = function (self, motion, forced, from_click)
|
|
|
|
local is_cooltip_opened = menu_can_open() -- and not is_cooltip_opened
|
|
if (_detalhes.instances_menu_click_to_open and not forced) then
|
|
return
|
|
end
|
|
|
|
local instancia = self._instance or self.widget._instance
|
|
local baseframe = instancia.baseframe
|
|
|
|
OnEnterMainWindow (instancia, self, 3)
|
|
if (instancia.desaturated_menu) then
|
|
self:GetNormalTexture():SetDesaturated (false)
|
|
end
|
|
|
|
GameCooltip.buttonOver = true
|
|
baseframe.cabecalho.button_mouse_over = true
|
|
|
|
GameCooltip:Reset()
|
|
|
|
GameCooltip:SetType ("menu")
|
|
GameCooltip:SetOption ("ButtonsYMod", -6)
|
|
GameCooltip:SetOption ("HeighMod", 6)
|
|
GameCooltip:SetOption ("YSpacingMod", -1)
|
|
GameCooltip:SetOption ("TextHeightMod", 0)
|
|
GameCooltip:SetOption ("IgnoreButtonAutoHeight", false)
|
|
|
|
_detalhes:SetTooltipMinWidth()
|
|
|
|
_detalhes:CheckLastReportsIntegrity()
|
|
|
|
local last_reports = _detalhes.latest_report_table
|
|
if (#last_reports > 0) then
|
|
local amountReports = #last_reports
|
|
amountReports = math.min (amountReports, 10)
|
|
|
|
for index = amountReports, 1, -1 do
|
|
local report = last_reports [index]
|
|
local instance_number, attribute, subattribute, amt, report_where, custom_name = unpack (report)
|
|
|
|
local name = _detalhes:GetSubAttributeName (attribute, subattribute, custom_name)
|
|
|
|
local artwork = _detalhes.GetReportIconAndColor (report_where)
|
|
|
|
GameCooltip:AddLine (name .. " (#" .. amt .. ")", nil, 1, "white", nil, _detalhes.font_sizes.menus, _detalhes.font_faces.menus)
|
|
if (artwork) then
|
|
GameCooltip:AddIcon (artwork.icon, 1, 1, 14, 14, artwork.coords[1], artwork.coords[2], artwork.coords[3], artwork.coords[4], artwork.color, nil, false)
|
|
end
|
|
GameCooltip:AddMenu (1, _detalhes.ReportFromLatest, index)
|
|
end
|
|
|
|
GameCooltip:AddLine ("$div", nil, nil, -4)
|
|
end
|
|
|
|
GameCooltip:AddLine (Loc ["STRING_REPORT_TOOLTIP"], nil, 1, "white", nil, _detalhes.font_sizes.menus, _detalhes.font_faces.menus)
|
|
GameCooltip:AddIcon ([[Interface\Addons\Details\Images\report_button]], 1, 1, 12, 19)
|
|
GameCooltip:AddMenu (1, _detalhes.Reportar, instancia, nil, "INSTANCE" .. instancia.meu_id)
|
|
|
|
_detalhes:FormatCooltipBackdrop()
|
|
|
|
show_anti_overlap (instancia, self, "top")
|
|
_detalhes:SetMenuOwner (self, instancia)
|
|
|
|
GameCooltip:ShowCooltip()
|
|
end
|
|
|
|
local report_on_leave = function (self, motion, forced, from_click)
|
|
|
|
local instancia = self._instance or self.widget._instance
|
|
local baseframe = instancia.baseframe
|
|
|
|
OnLeaveMainWindow (instancia, self, 3)
|
|
|
|
hide_anti_overlap (instancia.baseframe.anti_menu_overlap)
|
|
|
|
GameCooltip.buttonOver = false
|
|
baseframe.cabecalho.button_mouse_over = false
|
|
|
|
if (instancia.desaturated_menu) then
|
|
self:GetNormalTexture():SetDesaturated (true)
|
|
end
|
|
|
|
if (GameCooltip.active) then
|
|
parameters_table [2] = from_click and 1 or 0
|
|
self:SetScript ("OnUpdate", on_leave_menu)
|
|
else
|
|
self:SetScript ("OnUpdate", nil)
|
|
end
|
|
end
|
|
|
|
local atributo_on_enter = function (self, motion, forced, from_click)
|
|
|
|
local is_cooltip_opened = menu_can_open() -- and not is_cooltip_opened
|
|
if (_detalhes.instances_menu_click_to_open and not forced) then
|
|
return
|
|
end
|
|
|
|
local instancia = self._instance or self.widget._instance
|
|
local baseframe = instancia.baseframe
|
|
|
|
OnEnterMainWindow (instancia, self, 3)
|
|
|
|
if (instancia.desaturated_menu) then
|
|
self:GetNormalTexture():SetDesaturated (false)
|
|
end
|
|
|
|
GameCooltip.buttonOver = true
|
|
baseframe.cabecalho.button_mouse_over = true
|
|
|
|
show_anti_overlap (instancia, self, "top")
|
|
|
|
GameCooltip:Reset()
|
|
GameCooltip:SetType (3)
|
|
GameCooltip:SetFixedParameter (instancia)
|
|
|
|
if (_detalhes.solo and _detalhes.solo == instancia.meu_id) then
|
|
_detalhes:MontaSoloOption (instancia)
|
|
|
|
elseif (instancia:IsRaidMode()) then
|
|
|
|
local have_plugins = _detalhes:MontaRaidOption (instancia)
|
|
if (not have_plugins) then
|
|
GameCooltip:SetType ("tooltip")
|
|
GameCooltip:SetOption ("ButtonsYMod", 0)
|
|
|
|
GameCooltip:SetOption ("TextHeightMod", 0)
|
|
GameCooltip:SetOption ("IgnoreButtonAutoHeight", false)
|
|
GameCooltip:AddLine ("All raid plugins already\nin use or disabled.", nil, 1, "white", nil, 10, SharedMedia:Fetch ("font", "Friz Quadrata TT"))
|
|
GameCooltip:AddIcon ([[Interface\GROUPFRAME\UI-GROUP-ASSISTANTICON]], 1, 1)
|
|
GameCooltip:SetWallpaper (1, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true)
|
|
|
|
end
|
|
|
|
else
|
|
_detalhes:MontaAtributosOption (instancia)
|
|
GameCooltip:SetOption ("YSpacingMod", -1)
|
|
GameCooltip:SetOption ("YSpacingModSub", -2)
|
|
end
|
|
|
|
GameCooltip:SetOption ("TextSize", _detalhes.font_sizes.menus)
|
|
|
|
_detalhes:FormatCooltipBackdrop()
|
|
|
|
_detalhes:SetMenuOwner (self, instancia)
|
|
|
|
|
|
GameCooltip:ShowCooltip ()
|
|
end
|
|
|
|
local atributo_on_leave = function (self, motion, forced, from_click)
|
|
local instancia = self._instance or self.widget._instance
|
|
local baseframe = instancia.baseframe
|
|
|
|
OnLeaveMainWindow (instancia, self, 3)
|
|
|
|
hide_anti_overlap (instancia.baseframe.anti_menu_overlap)
|
|
|
|
if (instancia.desaturated_menu) then
|
|
self:GetNormalTexture():SetDesaturated (true)
|
|
end
|
|
|
|
GameCooltip.buttonOver = false
|
|
baseframe.cabecalho.button_mouse_over = false
|
|
|
|
if (GameCooltip.active) then
|
|
parameters_table [2] = 0
|
|
self:SetScript ("OnUpdate", on_leave_menu)
|
|
else
|
|
self:SetScript ("OnUpdate", nil)
|
|
end
|
|
end
|
|
|
|
local segmento_on_enter = function (self, motion, forced, from_click)
|
|
|
|
local is_cooltip_opened = menu_can_open() -- and not is_cooltip_opened
|
|
if (_detalhes.instances_menu_click_to_open and not forced) then
|
|
return
|
|
end
|
|
|
|
local instancia = self._instance or self.widget._instance
|
|
local baseframe = instancia.baseframe
|
|
|
|
OnEnterMainWindow (instancia, self, 3)
|
|
|
|
if (instancia.desaturated_menu) then
|
|
self:GetNormalTexture():SetDesaturated (false)
|
|
end
|
|
|
|
GameCooltip.buttonOver = true
|
|
baseframe.cabecalho.button_mouse_over = true
|
|
|
|
local passou = 0
|
|
if (_G.GameCooltip.active) then
|
|
passou = 0.15
|
|
end
|
|
|
|
parameters_table [1] = instancia
|
|
parameters_table [2] = from_click and 1 or passou
|
|
self:SetScript ("OnUpdate", build_segment_list)
|
|
end
|
|
|
|
local segmento_on_leave = function (self, motion, forced, from_click)
|
|
local instancia = self._instance or self.widget._instance
|
|
local baseframe = instancia.baseframe
|
|
|
|
OnLeaveMainWindow (instancia, self, 3)
|
|
|
|
hide_anti_overlap (instancia.baseframe.anti_menu_overlap)
|
|
|
|
if (instancia.desaturated_menu) then
|
|
self:GetNormalTexture():SetDesaturated (true)
|
|
end
|
|
|
|
GameCooltip.buttonOver = false
|
|
baseframe.cabecalho.button_mouse_over = false
|
|
|
|
if (GameCooltip.active) then
|
|
parameters_table [2] = 0
|
|
self:SetScript ("OnUpdate", on_leave_menu)
|
|
else
|
|
self:SetScript ("OnUpdate", nil)
|
|
end
|
|
end
|
|
|
|
local modo_selecao_on_enter = function (self, motion, forced, from_click)
|
|
|
|
local is_cooltip_opened = menu_can_open() -- not is_cooltip_opened
|
|
if (_detalhes.instances_menu_click_to_open and not forced) then
|
|
return
|
|
end
|
|
|
|
local instancia = self._instance or self.widget._instance
|
|
local baseframe = instancia.baseframe
|
|
|
|
OnEnterMainWindow (instancia, self, 3)
|
|
|
|
if (instancia.desaturated_menu) then
|
|
self:GetNormalTexture():SetDesaturated (false)
|
|
end
|
|
|
|
GameCooltip.buttonOver = true
|
|
baseframe.cabecalho.button_mouse_over = true
|
|
|
|
local passou = 0
|
|
if (_G.GameCooltip.active) then
|
|
passou = 0.15
|
|
end
|
|
|
|
local checked
|
|
if (instancia.modo == 1) then
|
|
checked = 4
|
|
elseif (instancia.modo == 2) then
|
|
checked = 1
|
|
elseif (instancia.modo == 3) then
|
|
checked = 2
|
|
elseif (instancia.modo == 4) then
|
|
checked = 3
|
|
end
|
|
|
|
parameters_table [1] = instancia
|
|
parameters_table [2] = from_click and 1 or passou
|
|
parameters_table [3] = checked
|
|
|
|
self:SetScript ("OnUpdate", build_mode_list)
|
|
end
|
|
|
|
local modo_selecao_on_leave = function (self)
|
|
|
|
local instancia = self._instance or self.widget._instance
|
|
local baseframe = instancia.baseframe
|
|
|
|
OnLeaveMainWindow (instancia, self, 3)
|
|
|
|
hide_anti_overlap (instancia.baseframe.anti_menu_overlap)
|
|
|
|
if (instancia.desaturated_menu) then
|
|
self:GetNormalTexture():SetDesaturated (true)
|
|
end
|
|
|
|
GameCooltip.buttonOver = false
|
|
baseframe.cabecalho.button_mouse_over = false
|
|
|
|
if (GameCooltip.active) then
|
|
parameters_table [2] = 0
|
|
self:SetScript ("OnUpdate", on_leave_menu)
|
|
else
|
|
self:SetScript ("OnUpdate", nil)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
-- these can
|
|
local title_bar_icons = {
|
|
{texture = [[Interface\AddOns\Details\images\toolbar_icons]], texcoord = {0/256, 32/256, 0, 1}},
|
|
{texture = [[Interface\AddOns\Details\images\toolbar_icons]], texcoord = {32/256, 64/256, 0, 1}},
|
|
{texture = [[Interface\AddOns\Details\images\toolbar_icons]], texcoord = {66/256, 93/256, 0, 1}},
|
|
{texture = [[Interface\AddOns\Details\images\toolbar_icons]], texcoord = {96/256, 128/256, 0, 1}},
|
|
{texture = [[Interface\AddOns\Details\images\toolbar_icons]], texcoord = {128/256, 160/256, 0, 1}},
|
|
}
|
|
function _detalhes:GetTitleBarIconsTexture (button, instance)
|
|
if (instance or self.meu_id) then
|
|
local textureFile = self.toolbar_icon_file or instance.toolbar_icon_file
|
|
local t = title_bar_icons [button]
|
|
if (t and textureFile) then
|
|
t.texture = textureFile
|
|
end
|
|
return t or title_bar_icons
|
|
end
|
|
return title_bar_icons [button] or title_bar_icons
|
|
end
|
|
|
|
function _detalhes:CreateFakeWindow()
|
|
local t = CreateFrame ("frame")
|
|
t:SetSize (200, 91)
|
|
t:SetBackdrop ({bgFile = "Interface\\AddOns\\Details\\images\\background", tile = true, tileSize = 16 })
|
|
t:SetBackdropColor (0.0941, 0.0941, 0.0941, 0.3)
|
|
local tb = CreateFrame ("frame", nil, t)
|
|
tb:SetPoint ("bottomleft", t, "topleft", 0, 0)
|
|
tb:SetPoint ("bottomright", t, "topright", 0, 0)
|
|
tb:SetHeight (16)
|
|
tb:SetBackdrop ({bgFile = "Interface\\AddOns\\Details\\images\\background", tile = true, tileSize = 16 })
|
|
tb:SetBackdropColor (0.7, 0.7, 0.7, 0.4)
|
|
local tt = tb:CreateFontString (nil, "overlay", "GameFontNormal")
|
|
_detalhes:SetFontColor (tt, "white")
|
|
_detalhes:SetFontSize (tt, 10)
|
|
_detalhes:SetFontFace (tt, LibStub:GetLibrary("LibSharedMedia-3.0"):Fetch ("font", "Accidental Presidency"))
|
|
tt:SetPoint ("bottomleft", tb, 3, 4)
|
|
tt:SetText ("Damage Done")
|
|
|
|
t.TitleIcons = {}
|
|
for i = 1, 5 do
|
|
local b = tb:CreateTexture (nil, "overlay")
|
|
b:SetSize (12, 12)
|
|
b:SetPoint ("bottomright", tb, "bottomright", -((abs(i-6)-1)*11) - 1, 2)
|
|
local button_texture_texcoord = _detalhes:GetTitleBarIconsTexture (i)
|
|
b:SetTexture (button_texture_texcoord.texture)
|
|
b:SetTexCoord (unpack (button_texture_texcoord.texcoord))
|
|
tinsert (t.TitleIcons, b)
|
|
end
|
|
|
|
t.TitleBar = tb
|
|
t.TitleText = tt
|
|
|
|
return t
|
|
end
|
|
|
|
local function click_to_change_segment (instancia, buttontype)
|
|
if (buttontype == "LeftButton") then
|
|
|
|
local segmento_goal = instancia.segmento + 1
|
|
if (segmento_goal > segments_used) then
|
|
segmento_goal = -1
|
|
elseif (segmento_goal > _detalhes.segments_amount) then
|
|
segmento_goal = -1
|
|
end
|
|
|
|
local total_shown = segments_filled+2
|
|
local goal = segmento_goal+1
|
|
|
|
local select_ = math.abs (goal - total_shown)
|
|
GameCooltip:Select (1, select_)
|
|
|
|
instancia:TrocaTabela (segmento_goal)
|
|
|
|
segmento_on_enter (instancia.baseframe.cabecalho.segmento.widget, _, true, true)
|
|
|
|
elseif (buttontype == "RightButton") then
|
|
|
|
local segmento_goal = instancia.segmento - 1
|
|
if (segmento_goal < -1) then
|
|
segmento_goal = segments_used
|
|
end
|
|
|
|
local total_shown = segments_filled+2
|
|
local goal = segmento_goal+1
|
|
|
|
local select_ = math.abs (goal - total_shown)
|
|
GameCooltip:Select (1, select_)
|
|
|
|
instancia:TrocaTabela (segmento_goal)
|
|
segmento_on_enter (instancia.baseframe.cabecalho.segmento.widget, _, true, true)
|
|
|
|
elseif (buttontype == "MiddleButton") then
|
|
|
|
local segmento_goal = 0
|
|
|
|
local total_shown = segments_filled+2
|
|
local goal = segmento_goal+1
|
|
|
|
local select_ = math.abs (goal - total_shown)
|
|
GameCooltip:Select (1, select_)
|
|
|
|
instancia:TrocaTabela (segmento_goal)
|
|
segmento_on_enter (instancia.baseframe.cabecalho.segmento.widget, _, true, true)
|
|
|
|
end
|
|
end
|
|
|
|
function gump:CriaCabecalho (baseframe, instancia)
|
|
|
|
baseframe.cabecalho = {}
|
|
|
|
--> FECHAR INSTANCIA ----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
baseframe.cabecalho.fechar = CreateFrame ("button", "DetailsCloseInstanceButton" .. instancia.meu_id, baseframe) --, "UIPanelCloseButton"
|
|
baseframe.cabecalho.fechar:SetWidth (18)
|
|
baseframe.cabecalho.fechar:SetHeight (18)
|
|
baseframe.cabecalho.fechar:SetFrameLevel (5) --> altura mais alta que os demais frames
|
|
baseframe.cabecalho.fechar:SetPoint ("bottomright", baseframe, "topright", 5, -6) --> seta o ponto dele fixando no base frame
|
|
|
|
baseframe.cabecalho.fechar:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
baseframe.cabecalho.fechar:GetNormalTexture():SetTexCoord (160/256, 192/256, 0, 1)
|
|
baseframe.cabecalho.fechar:SetHighlightTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
baseframe.cabecalho.fechar:GetHighlightTexture():SetTexCoord (160/256, 192/256, 0, 1)
|
|
baseframe.cabecalho.fechar:SetPushedTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
baseframe.cabecalho.fechar:GetPushedTexture():SetTexCoord (160/256, 192/256, 0, 1)
|
|
|
|
--baseframe.cabecalho.fechar:SetNormalTexture ([[Interface\Buttons\UI-Panel-MinimizeButton-Up]])
|
|
--baseframe.cabecalho.fechar:SetHighlightTexture ([[Interface\Buttons\UI-Panel-MinimizeButton-Highlight]])
|
|
--baseframe.cabecalho.fechar:SetPushedTexture ([[Interface\Buttons\UI-Panel-MinimizeButton-Down]])
|
|
|
|
baseframe.cabecalho.fechar.instancia = instancia
|
|
baseframe.cabecalho.fechar.instance = instancia
|
|
|
|
baseframe.cabecalho.fechar:SetScript ("OnEnter", close_button_onenter)
|
|
baseframe.cabecalho.fechar:SetScript ("OnLeave", close_button_onleave)
|
|
|
|
baseframe.cabecalho.fechar:SetScript ("OnClick", close_button_onclick)
|
|
|
|
--> bola do canto esquedo superior --> primeiro criar a arma��o para apoiar as texturas
|
|
baseframe.cabecalho.ball_point = instancia.floatingframe:CreateTexture (nil, "overlay")
|
|
baseframe.cabecalho.ball_point:SetPoint ("bottomleft", baseframe, "topleft", -37, 0)
|
|
baseframe.cabecalho.ball_point:SetWidth (64)
|
|
baseframe.cabecalho.ball_point:SetHeight (32)
|
|
|
|
--> icone do atributo
|
|
--baseframe.cabecalho.atributo_icon = _detalhes.listener:CreateTexture (nil, "artwork")
|
|
baseframe.cabecalho.atributo_icon = baseframe:CreateTexture ("DetailsAttributeIcon" .. instancia.meu_id, "background")
|
|
local icon_anchor = _detalhes.skins ["WoW Interface"].icon_anchor_main
|
|
baseframe.cabecalho.atributo_icon:SetPoint ("topright", baseframe.cabecalho.ball_point, "topright", icon_anchor[1], icon_anchor[2])
|
|
baseframe.cabecalho.atributo_icon:SetTexture (DEFAULT_SKIN)
|
|
baseframe.cabecalho.atributo_icon:SetWidth (32)
|
|
baseframe.cabecalho.atributo_icon:SetHeight (32)
|
|
|
|
--> bola overlay
|
|
--baseframe.cabecalho.ball = _detalhes.listener:CreateTexture (nil, "overlay")
|
|
baseframe.cabecalho.ball = baseframe:CreateTexture (nil, "overlay")
|
|
baseframe.cabecalho.ball:SetPoint ("bottomleft", baseframe, "topleft", -107, 0)
|
|
baseframe.cabecalho.ball:SetWidth (128)
|
|
baseframe.cabecalho.ball:SetHeight (128)
|
|
|
|
baseframe.cabecalho.ball:SetTexture (DEFAULT_SKIN)
|
|
baseframe.cabecalho.ball:SetTexCoord (unpack (COORDS_LEFT_BALL))
|
|
|
|
--> emenda
|
|
baseframe.cabecalho.emenda = baseframe:CreateTexture (nil, "background")
|
|
baseframe.cabecalho.emenda:SetPoint ("bottomleft", baseframe.cabecalho.ball, "bottomright")
|
|
baseframe.cabecalho.emenda:SetWidth (8)
|
|
baseframe.cabecalho.emenda:SetHeight (128)
|
|
baseframe.cabecalho.emenda:SetTexture (DEFAULT_SKIN)
|
|
baseframe.cabecalho.emenda:SetTexCoord (unpack (COORDS_LEFT_CONNECTOR))
|
|
|
|
baseframe.cabecalho.atributo_icon:Hide()
|
|
baseframe.cabecalho.ball:Hide()
|
|
|
|
--> bola do canto direito superior
|
|
baseframe.cabecalho.ball_r = baseframe:CreateTexture (nil, "background")
|
|
baseframe.cabecalho.ball_r:SetPoint ("bottomright", baseframe, "topright", 96, 0)
|
|
baseframe.cabecalho.ball_r:SetWidth (128)
|
|
baseframe.cabecalho.ball_r:SetHeight (128)
|
|
baseframe.cabecalho.ball_r:SetTexture (DEFAULT_SKIN)
|
|
baseframe.cabecalho.ball_r:SetTexCoord (unpack (COORDS_RIGHT_BALL))
|
|
|
|
--> barra centro
|
|
baseframe.cabecalho.top_bg = baseframe:CreateTexture (nil, "background")
|
|
baseframe.cabecalho.top_bg:SetPoint ("left", baseframe.cabecalho.emenda, "right", 0, 0)
|
|
baseframe.cabecalho.top_bg:SetPoint ("right", baseframe.cabecalho.ball_r, "left")
|
|
baseframe.cabecalho.top_bg:SetTexture (DEFAULT_SKIN)
|
|
baseframe.cabecalho.top_bg:SetTexCoord (unpack (COORDS_TOP_BACKGROUND))
|
|
baseframe.cabecalho.top_bg:SetWidth (512)
|
|
baseframe.cabecalho.top_bg:SetHeight (128)
|
|
|
|
--> frame invis�vel
|
|
baseframe.UPFrame = CreateFrame ("frame", "DetailsUpFrameInstance"..instancia.meu_id, baseframe)
|
|
baseframe.UPFrame:SetPoint ("left", baseframe.cabecalho.ball, "right", 0, -53)
|
|
baseframe.UPFrame:SetPoint ("right", baseframe.cabecalho.ball_r, "left", 0, -53)
|
|
baseframe.UPFrame:SetHeight (20)
|
|
baseframe.UPFrame.is_toolbar = true
|
|
|
|
baseframe.UPFrame:Show()
|
|
baseframe.UPFrame:EnableMouse (true)
|
|
baseframe.UPFrame:SetMovable (true)
|
|
baseframe.UPFrame:SetResizable (true)
|
|
|
|
BGFrame_scripts (baseframe.UPFrame, baseframe, instancia)
|
|
|
|
--> corrige o v�o entre o baseframe e o upframe
|
|
baseframe.UPFrameConnect = CreateFrame ("frame", "DetailsAntiGap"..instancia.meu_id, baseframe)
|
|
baseframe.UPFrameConnect:SetPoint ("bottomleft", baseframe, "topleft", 0, -1)
|
|
baseframe.UPFrameConnect:SetPoint ("bottomright", baseframe, "topright", 0, -1)
|
|
baseframe.UPFrameConnect:SetHeight (2)
|
|
baseframe.UPFrameConnect:EnableMouse (true)
|
|
baseframe.UPFrameConnect:SetMovable (true)
|
|
baseframe.UPFrameConnect:SetResizable (true)
|
|
baseframe.UPFrameConnect.is_toolbar = true
|
|
|
|
BGFrame_scripts (baseframe.UPFrameConnect, baseframe, instancia)
|
|
|
|
baseframe.UPFrameLeftPart = CreateFrame ("frame", "DetailsUpFrameLeftPart"..instancia.meu_id, baseframe)
|
|
baseframe.UPFrameLeftPart:SetPoint ("bottomleft", baseframe, "topleft", 0, 0)
|
|
baseframe.UPFrameLeftPart:SetSize (22, 20)
|
|
baseframe.UPFrameLeftPart:EnableMouse (true)
|
|
baseframe.UPFrameLeftPart:SetMovable (true)
|
|
baseframe.UPFrameLeftPart:SetResizable (true)
|
|
baseframe.UPFrameLeftPart.is_toolbar = true
|
|
|
|
BGFrame_scripts (baseframe.UPFrameLeftPart, baseframe, instancia)
|
|
|
|
--> anchors para os micro displays no lado de cima da janela
|
|
local StatusBarLeftAnchor = CreateFrame ("frame", "DetailsStatusBarLeftAnchor" .. instancia.meu_id, baseframe)
|
|
StatusBarLeftAnchor:SetPoint ("bottomleft", baseframe, "topleft", 0, 9)
|
|
StatusBarLeftAnchor:SetWidth (1)
|
|
StatusBarLeftAnchor:SetHeight (1)
|
|
baseframe.cabecalho.StatusBarLeftAnchor = StatusBarLeftAnchor
|
|
|
|
local StatusBarCenterAnchor = CreateFrame ("frame", "DetailsStatusBarCenterAnchor" .. instancia.meu_id, baseframe)
|
|
StatusBarCenterAnchor:SetPoint ("center", baseframe, "center")
|
|
StatusBarCenterAnchor:SetPoint ("bottom", baseframe, "top", 0, 9)
|
|
StatusBarCenterAnchor:SetWidth (1)
|
|
StatusBarCenterAnchor:SetHeight (1)
|
|
baseframe.cabecalho.StatusBarCenterAnchor = StatusBarCenterAnchor
|
|
|
|
local StatusBarRightAnchor = CreateFrame ("frame", "DetailsStatusBarRightAnchor" .. instancia.meu_id, baseframe)
|
|
StatusBarRightAnchor:SetPoint ("bottomright", baseframe, "topright", 0, 9)
|
|
StatusBarRightAnchor:SetWidth (1)
|
|
StatusBarRightAnchor:SetHeight (1)
|
|
baseframe.cabecalho.StatusBarRightAnchor = StatusBarRightAnchor
|
|
|
|
local MenuAnchorLeft = CreateFrame ("frame", "DetailsMenuAnchorLeft"..instancia.meu_id, baseframe)
|
|
MenuAnchorLeft:SetSize (1, 1)
|
|
|
|
local MenuAnchorRight = CreateFrame ("frame", "DetailsMenuAnchorRight"..instancia.meu_id, baseframe)
|
|
MenuAnchorRight:SetSize (1, 1)
|
|
|
|
local Menu2AnchorRight = CreateFrame ("frame", "DetailsMenu2AnchorRight"..instancia.meu_id, baseframe)
|
|
Menu2AnchorRight:SetSize (1, 1)
|
|
|
|
instancia.menu_points = {MenuAnchorLeft, MenuAnchorRight}
|
|
instancia.menu2_points = {Menu2AnchorRight}
|
|
|
|
-- bot�es
|
|
-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
local CoolTip = _G.GameCooltip
|
|
|
|
--> SELE��O DO MODO ----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
local modo_selecao_button_click = function()
|
|
if (_detalhes.instances_menu_click_to_open) then
|
|
if (instancia.LastMenuOpened == "mode" and GameCooltipFrame1:IsShown()) then
|
|
GameCooltip:ShowMe (false)
|
|
instancia.LastMenuOpened = nil
|
|
else
|
|
modo_selecao_on_enter (instancia.baseframe.cabecalho.modo_selecao.widget, _, true, true)
|
|
instancia.LastMenuOpened = "mode"
|
|
end
|
|
else
|
|
_detalhes:OpenOptionsWindow (instancia)
|
|
end
|
|
end
|
|
|
|
baseframe.cabecalho.modo_selecao = gump:NewButton (baseframe, nil, "DetailsModeButton"..instancia.meu_id, nil, 16, 16, modo_selecao_button_click, nil, nil, [[Interface\AddOns\Details\images\modo_icone]])
|
|
baseframe.cabecalho.modo_selecao:SetPoint ("bottomleft", baseframe.cabecalho.ball, "bottomright", instancia.menu_anchor [1], instancia.menu_anchor [2])
|
|
baseframe.cabecalho.modo_selecao:SetFrameLevel (baseframe:GetFrameLevel()+5)
|
|
baseframe.cabecalho.modo_selecao.widget._instance = instancia
|
|
|
|
baseframe.cabecalho.modo_selecao:SetScript ("OnEnter", modo_selecao_on_enter)
|
|
baseframe.cabecalho.modo_selecao:SetScript ("OnLeave", modo_selecao_on_leave)
|
|
|
|
local b = baseframe.cabecalho.modo_selecao.widget
|
|
b:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
b:GetNormalTexture():SetTexCoord (0/256, 32/256, 0, 1)
|
|
b:SetHighlightTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
b:GetHighlightTexture():SetTexCoord (0/256, 32/256, 0, 1)
|
|
b:SetPushedTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
b:GetPushedTexture():SetTexCoord (0/256, 32/256, 0, 1)
|
|
|
|
|
|
--> SELECIONAR O SEGMENTO ----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
local segmento_button_click = function (self, button, param1)
|
|
if (_detalhes.instances_menu_click_to_open) then
|
|
if (instancia.LastMenuOpened == "segments" and GameCooltipFrame1:IsShown()) then
|
|
GameCooltip:ShowMe (false)
|
|
instancia.LastMenuOpened = nil
|
|
else
|
|
segmento_on_enter (instancia.baseframe.cabecalho.segmento.widget, _, true, true)
|
|
instancia.LastMenuOpened = "segments"
|
|
end
|
|
else
|
|
click_to_change_segment (instancia, button)
|
|
end
|
|
end
|
|
|
|
baseframe.cabecalho.segmento = gump:NewButton (baseframe, nil, "DetailsSegmentButton"..instancia.meu_id, nil, 16, 16, segmento_button_click, nil, nil, [[Interface\AddOns\Details\images\segmentos_icone]])
|
|
baseframe.cabecalho.segmento:SetFrameLevel (baseframe.UPFrame:GetFrameLevel()+1)
|
|
baseframe.cabecalho.segmento.widget._instance = instancia
|
|
baseframe.cabecalho.segmento:SetPoint ("left", baseframe.cabecalho.modo_selecao, "right", 0, 0)
|
|
|
|
--> ativa bot�o do meio e direito
|
|
baseframe.cabecalho.segmento:SetClickFunction (segmento_button_click, nil, nil, "rightclick")
|
|
|
|
baseframe.cabecalho.segmento:SetScript ("OnEnter", segmento_on_enter)
|
|
baseframe.cabecalho.segmento:SetScript ("OnLeave", segmento_on_leave)
|
|
|
|
local b = baseframe.cabecalho.segmento.widget
|
|
b:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
b:GetNormalTexture():SetTexCoord (32/256, 64/256, 0, 1)
|
|
b:SetHighlightTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
b:GetHighlightTexture():SetTexCoord (32/256, 64/256, 0, 1)
|
|
b:SetPushedTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
b:GetPushedTexture():SetTexCoord (32/256, 64/256, 0, 1)
|
|
|
|
--> SELECIONAR O ATRIBUTO ----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
local atributo_button_click = function()
|
|
if (_detalhes.instances_menu_click_to_open) then
|
|
if (instancia.LastMenuOpened == "attributes" and GameCooltipFrame1:IsShown()) then
|
|
GameCooltip:ShowMe (false)
|
|
instancia.LastMenuOpened = nil
|
|
else
|
|
atributo_on_enter (instancia.baseframe.cabecalho.atributo.widget, _, true, true)
|
|
instancia.LastMenuOpened = "attributes"
|
|
end
|
|
end
|
|
end
|
|
|
|
baseframe.cabecalho.atributo = gump:NewButton (baseframe, nil, "DetailsAttributeButton"..instancia.meu_id, nil, 16, 16, atributo_button_click)
|
|
baseframe.cabecalho.atributo:SetFrameLevel (baseframe.UPFrame:GetFrameLevel()+1)
|
|
baseframe.cabecalho.atributo.widget._instance = instancia
|
|
baseframe.cabecalho.atributo:SetPoint ("left", baseframe.cabecalho.segmento.widget, "right", 0, 0)
|
|
|
|
baseframe.cabecalho.atributo:SetScript ("OnEnter", atributo_on_enter)
|
|
baseframe.cabecalho.atributo:SetScript ("OnLeave", atributo_on_leave)
|
|
|
|
local b = baseframe.cabecalho.atributo.widget
|
|
b:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
b:GetNormalTexture():SetTexCoord (66/256, 93/256, 0, 1)
|
|
b:SetHighlightTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
b:GetHighlightTexture():SetTexCoord (68/256, 93/256, 0, 1)
|
|
b:SetPushedTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
b:GetPushedTexture():SetTexCoord (68/256, 93/256, 0, 1)
|
|
|
|
--> REPORTAR ~report ----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
local report_func = function()
|
|
instancia:Reportar ("INSTANCE" .. instancia.meu_id)
|
|
GameCooltip2:Hide()
|
|
end
|
|
baseframe.cabecalho.report = gump:NewButton (baseframe, nil, "DetailsReportButton"..instancia.meu_id, nil, 8, 16, report_func)
|
|
baseframe.cabecalho.report:SetFrameLevel (baseframe.UPFrame:GetFrameLevel()+1)
|
|
baseframe.cabecalho.report.widget._instance = instancia
|
|
baseframe.cabecalho.report:SetPoint ("left", baseframe.cabecalho.atributo, "right", -6, 0)
|
|
|
|
baseframe.cabecalho.report:SetScript ("OnEnter", report_on_enter)
|
|
baseframe.cabecalho.report:SetScript ("OnLeave", report_on_leave)
|
|
|
|
local b = baseframe.cabecalho.report.widget
|
|
b:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
b:GetNormalTexture():SetTexCoord (96/256, 128/256, 0, 1)
|
|
b:SetHighlightTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
b:GetHighlightTexture():SetTexCoord (96/256, 128/256, 0, 1)
|
|
b:SetPushedTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
b:GetPushedTexture():SetTexCoord (96/256, 128/256, 0, 1)
|
|
|
|
|
|
|
|
-- ~delete ~erase ~reset
|
|
--> reset ----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
local reset_func = function()
|
|
if (_detalhes.instances_menu_click_to_open) then
|
|
if (instancia.LastMenuOpened == "reset" and GameCooltipFrame1:IsShown()) then
|
|
GameCooltip:ShowMe (false)
|
|
instancia.LastMenuOpened = nil
|
|
else
|
|
reset_button_onenter (instancia.baseframe.cabecalho.reset, _, true, true)
|
|
instancia.LastMenuOpened = "reset"
|
|
end
|
|
else
|
|
if (not _detalhes.disable_reset_button) then
|
|
_detalhes.tabela_historico:resetar()
|
|
else
|
|
_detalhes:Msg (Loc ["STRING_OPTIONS_DISABLED_RESET"])
|
|
end
|
|
end
|
|
end
|
|
|
|
baseframe.cabecalho.reset = CreateFrame ("button", "DetailsClearSegmentsButton" .. instancia.meu_id, baseframe)
|
|
baseframe.cabecalho.reset:SetFrameLevel (baseframe.UPFrame:GetFrameLevel()+1)
|
|
baseframe.cabecalho.reset:SetSize (10, 16)
|
|
baseframe.cabecalho.reset:SetPoint ("right", baseframe.cabecalho.novo, "left")
|
|
baseframe.cabecalho.reset.instance = instancia
|
|
baseframe.cabecalho.reset._instance = instancia
|
|
|
|
baseframe.cabecalho.reset:SetScript ("OnClick", reset_func)
|
|
baseframe.cabecalho.reset:SetScript ("OnEnter", reset_button_onenter)
|
|
baseframe.cabecalho.reset:SetScript ("OnLeave", reset_button_onleave)
|
|
|
|
local b = baseframe.cabecalho.reset
|
|
b:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
b:GetNormalTexture():SetTexCoord (128/256, 160/256, 0, 1)
|
|
b:SetHighlightTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
b:GetHighlightTexture():SetTexCoord (128/256, 160/256, 0, 1)
|
|
b:SetPushedTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
|
|
b:GetPushedTexture():SetTexCoord (128/256, 160/256, 0, 1)
|
|
|
|
end
|