Files
coa-details/gumps/janela_principal.lua
T
Tercio c30e2312b7 - Report lines for deaths is now inverted. No need to scroll up the chat to see the cause of death anymore.
Fixed some annoyances with auto current feature where it was changing the segments even when the user were using the window.
2015-04-14 18:44:47 -03:00

7435 lines
255 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 atributos = _detalhes.atributos
local sub_atributos = _detalhes.sub_atributos
local segmentos = _detalhes.segmentos
--lua locals
local _cstr = tostring
local _math_ceil = math.ceil
local _math_floor = math.floor
local _ipairs = ipairs
local _pairs = pairs
local _string_lower = string.lower
local _unpack = unpack
--api locals
local CreateFrame = CreateFrame
local _GetTime = GetTime
local _GetCursorPosition = GetCursorPosition
local _GameTooltip = GameTooltip
local _UIParent = UIParent
local _GetScreenWidth = GetScreenWidth
local _GetScreenHeight = GetScreenHeight
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 modo_grupo = _detalhes._detalhes_props["MODO_GROUP"]
local modo_all = _detalhes._detalhes_props["MODO_ALL"]
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
local menu_wallpaper_tex = {.6, 0.1, 0, 0.64453125}
--local menu_wallpaper_color = {1, 1, 1, 0.1}
local menu_wallpaper_color = {.8, .8, .8, 0.2}
--> skins TCoords
-- 0.00048828125
local DEFAULT_SKIN = [[Interface\AddOns\Details\images\skins\classic_skin]]
--local COORDS_LEFT_BALL = {0.15673828125, 0.27978515625, 0.08251953125, 0.20556640625} -- 160 84 287 211 (updated)
--local COORDS_LEFT_BALL = {0.15576171875, 0.27978515625, 0.08251953125, 0.20556640625} -- 160 84 287 211 (updated)
local COORDS_LEFT_BALL = {0.15625, 0.2802734375, 0.08203125, 0.2060546875} -- 160 287 84 211
--local COORDS_LEFT_CONNECTOR = {0.29541015625, 0.30126953125, 0.08251953125, 0.20556640625} --302 84 309 211 (updated)
local COORDS_LEFT_CONNECTOR = {0.294921875, 0.3017578125, 0.08203125, 0.2060546875} --302 84 309 211 (updated)
--local COORDS_LEFT_CONNECTOR_NO_ICON = {0.58837890625, 0.59423828125, 0.08251953125, 0.20556640625} -- 602 84 609 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.15673828125, 0.65478515625, 0.22314453125, 0.34619140625} -- 160 228 671 355 (updated)
local COORDS_TOP_BACKGROUND = {0.15625, 0.6552734375, 0.22265625, 0.3466796875} -- 160 671 x 228 355
--local COORDS_RIGHT_BALL = {0.31591796875, 0.43994140625, 0.08251953125, 0.20556640625} --324 84 451 211 (updated)
--local COORDS_RIGHT_BALL = {0.3154296875+0.00048828125, 0.439453125+0.00048828125, 0.08203125, 0.2060546875-0.00048828125} --323 84 450 211 (updated)
local COORDS_RIGHT_BALL = {0.3154296875, 0.439453125, 0.08203125, 0.2060546875} -- 323 450 x 84 211
--local COORDS_LEFT_BALL_NO_ICON = {0.44970703125, 0.57275390625, 0.08251953125, 0.20556640625} --460 84 587 211 (updated)
--local COORDS_LEFT_BALL_NO_ICON = {0.44921875, 0.57421875, 0.08203125, 0.20703125} --460 84 588 212 (updated)
--local COORDS_LEFT_BALL_NO_ICON = {0.44970703125, 0.57275390625, 0.08251953125, 0.20556640625} --460 84 587 211 (updated) 588 212
local COORDS_LEFT_BALL_NO_ICON = {0.44921875, 0.5732421875, 0.08203125, 0.2060546875} -- 460 587 84 211
--local COORDS_LEFT_SIDE_BAR = {0.76611328125, 0.82763671875, 0.00244140625, 0.50146484375} -- 784 2 848 514 (updated)
local COORDS_LEFT_SIDE_BAR = {0.765625, 0.828125, 0.001953125, 0.501953125} -- 784 2 848 514 (updated)
--local COORDS_RIGHT_SIDE_BAR = {0.70068359375, 0.76220703125, 0.00244140625, 0.50146484375} -- 717 2 781 514 (updated)
--local COORDS_RIGHT_SIDE_BAR = {0.7001953125, 0.763671875, 0.00244140625, 0.50146484375} -- 717 2 781 514 (updated)
--local COORDS_RIGHT_SIDE_BAR = {0.7001953125+0.00048828125, 0.76171875, 0.001953125, 0.5009765625} -- --717 2 780 513
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.00146484375, 0.03076171875, 0.21435546875, 0.22802734375} -- 1 219 32 234 -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
-- icones: 365 = 0.35693359375 // 397 = 0.38720703125
function _detalhes:AtualizarScrollBar (x)
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
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
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)
if (instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and not instancia.baseframe.isLocked) then
--> resizes and lock button
instancia.baseframe.resize_direita:SetAlpha (0)
instancia.baseframe.resize_esquerda:SetAlpha (0)
instancia.baseframe.lock_button:SetAlpha (0)
instancia.break_snap_button:SetAlpha (0)
--> stretch button
--gump:Fade (instancia.baseframe.button_stretch, -1)
gump:Fade (instancia.baseframe.button_stretch, "ALPHA", 0)
elseif (instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and instancia.baseframe.isLocked) then
instancia.baseframe.lock_button:SetAlpha (0)
gump:Fade (instancia.baseframe.button_stretch, "ALPHA", 0)
instancia.break_snap_button:SetAlpha (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.last_interaction = _detalhes._tempo or time()
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
--> resizes and lock button
instancia.baseframe.resize_direita:SetAlpha (1)
instancia.baseframe.resize_esquerda:SetAlpha (1)
instancia.baseframe.lock_button:SetAlpha (1)
--> stretch button
gump:Fade (instancia.baseframe.button_stretch, "ALPHA", 0.6)
--> snaps
for _, instancia_id in _pairs (instancia.snap) do
if (instancia_id) then
instancia.break_snap_button:SetAlpha (1)
break
end
end
elseif (instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and instancia.baseframe.isLocked) then
instancia.baseframe.lock_button:SetAlpha (1)
gump:Fade (instancia.baseframe.button_stretch, "ALPHA", 0.6)
--> snaps
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
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 update_line = function (self, target_frame)
--> based on weak auras frame movement code
--local selfX, selfY = target_frame:GetCenter()
local selfX, selfY = target_frame.instance:GetPositionOnScreen()
--local anchorX, anchorY = self:GetCenter()
local anchorX, anchorY = self.instance:GetPositionOnScreen()
selfX, selfY = selfX or 0, selfY or 0
anchorX, anchorY = anchorX or 0, anchorY or 0
local dX = selfX - anchorX
local dY = selfY - anchorY
local distance = sqrt (dX^2 + dY^2)
local angle = atan2(dY, dX)
local numInterim = floor(distance/40)
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, numInterim do
local x = (distance - (i * 40)) * cos (angle)
local y = (distance - (i * 40)) * 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 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
instance.baseframe.id_texture1 = instance.baseframe:CreateTexture (nil, "overlay")
instance.baseframe.id_texture2 = instance.baseframe: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 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) 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
gump:Fade (instancia_alvo.baseframe, "ALPHA", 0.2)
gump:Fade (instancia_alvo.baseframe.cabecalho.ball, "ALPHA", 0.2)
gump:Fade (instancia_alvo.baseframe.cabecalho.atributo_icon, "ALPHA", 0.2)
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
_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
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()
--print (lower_instance, instancia_alvo.meu_id, DEATHGRAPHICS_BUTTON:GetParent():GetName())
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()
gump:Fade (instancia_alvo.baseframe, 1)
gump:Fade (instancia_alvo.rowframe, 1)
gump:Fade (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()
gump:Fade (esta_instancia.baseframe, "in", 0.2)
gump:Fade (esta_instancia.baseframe.cabecalho.ball, "in", 0.2)
gump:Fade (esta_instancia.baseframe.cabecalho.atributo_icon, "in", 0.2)
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()
_detalhes.MicroButtonAlert:Hide()
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)
if (self.is_toolbar and self._instance.baseframe.isLocked and button == "LeftButton") 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 (_detalhes.switch.current_instancia and _detalhes.switch.current_instancia == self._instance) then
_detalhes.switch:CloseMe()
else
_detalhes.switch:ShowMe (self._instance)
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)
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]
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
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: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
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) 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) 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 (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:CancelTimer (_detalhes.atualizador)
_detalhes.atualizador = _detalhes:ScheduleRepeatingTimer ("AtualizaGumpPrincipal", 0.3, -1)
_detalhes.resize_changed_update_speed = true
end
end
end
local resize_scripts_onmouseup = function (self, button)
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:CancelTimer (_detalhes.atualizador)
_detalhes.atualizador = _detalhes:ScheduleRepeatingTimer ("AtualizaGumpPrincipal", _detalhes.update_speed, -1)
_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 (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
GameCooltip:Reset()
GameCooltip:SetType ("tooltip")
GameCooltip:AddFromTable (resizeTooltip)
GameCooltip:SetOption ("TextSize", _detalhes.font_sizes.menus)
GameCooltip:SetOption ("TextFont", _detalhes.font_faces.menus)
GameCooltip:SetOption ("NoLastSelectedBar", true)
GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], menu_wallpaper_tex, menu_wallpaper_color, true)
GameCooltip:SetBackdrop (1, _detalhes.tooltip_backdrop, nil, _detalhes.tooltip_border_color)
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 (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)
GameCooltip:Reset()
GameCooltip:SetType ("tooltip")
GameCooltip:AddFromTable (lockButtonTooltip)
GameCooltip:SetOption ("NoLastSelectedBar", true)
GameCooltip:SetOption ("TextSize", _detalhes.font_sizes.menus)
GameCooltip:SetOption ("TextFont", _detalhes.font_faces.menus)
GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], menu_wallpaper_tex, menu_wallpaper_color, true)
GameCooltip:SetBackdrop (1, _detalhes.tooltip_backdrop, nil, _detalhes.tooltip_border_color)
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
local lockFunctionOnClick = function (button)
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)
baseframe.resize_direita:SetAlpha (1)
baseframe.resize_esquerda:SetAlpha (1)
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
_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)
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
GameCooltip:Reset()
GameCooltip:AddFromTable (unSnapButtonTooltip)
GameCooltip:SetOption ("TextSize", _detalhes.font_sizes.menus)
GameCooltip:SetOption ("TextFont", _detalhes.font_faces.menus)
GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], menu_wallpaper_tex, menu_wallpaper_color, true)
GameCooltip:SetBackdrop (1, _detalhes.tooltip_backdrop, nil, _detalhes.tooltip_border_color)
GameCooltip:ShowCooltip (self, "tooltip")
end
local unSnapButtonOnLeave = function (self)
if (self.mostrando) then
OnLeaveMainWindow (self.instancia, self)
self.mostrando = false
GameCooltip:Hide()
end
end
local shift_monitor = function (self)
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 on_switch_show = function (instance)
instance:TrocaTabela (instance, true, 1, 6)
return true
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}
}
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)
self.textura:SetBlendMode ("ADD")
local lefttext = self.texto_esquerdo
if (lefttext:IsTruncated()) then
if (not _detalhes.left_anti_truncate) then
_detalhes.left_anti_truncate = CreateFrame ("frame", "DetailsLeftTextAntiTruncate", UIParent)
_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)
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)
self.textura:SetBlendMode ("BLEND")
self.showing_allspells = false
self:SetScript ("OnUpdate", nil)
local lefttext = self.texto_esquerdo
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.texto_esquerdo
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
if (self._instance.atributo == 1 and self._instance.sub_atributo == 6) then --> enemies
local inimigo = self.minha_tabela.nome
local custom_name = inimigo .. Loc ["STRING_CUSTOM_ENEMY_DT"]
--> procura se já tem um custom:
for index, CustomObject in _ipairs (_detalhes.custom) do
if (CustomObject:GetName() == custom_name) then
--> fix for not saving funcs on logout
if (not CustomObject.OnSwitchShow) then
CustomObject.OnSwitchShow = on_switch_show
end
return self._instance:TrocaTabela (self._instance.segmento, 5, index)
end
end
--> criar um custom para este actor.
local new_custom_object = {
name = custom_name,
icon = [[Interface\ICONS\Pet_Type_Undead]],
attribute = "damagedone",
author = _detalhes.playername,
desc = inimigo .. " Damage Taken",
source = "[raid]",
target = inimigo,
script = false,
tooltip = false,
temp = true,
OnSwitchShow = on_switch_show,
}
tinsert (_detalhes.custom, new_custom_object)
setmetatable (new_custom_object, _detalhes.atributo_custom)
new_custom_object.__index = _detalhes.atributo_custom
return self._instance:TrocaTabela (self._instance.segmento, 5, #_detalhes.custom)
end
end
self.texto_direita:SetPoint ("right", self.statusbar, "right", 1, -1)
if (self._instance.row_info.no_icon) then
self.texto_esquerdo:SetPoint ("left", self.statusbar, "left", 3, -1)
else
self.texto_esquerdo:SetPoint ("left", self.icone_classe, "right", 4, -1)
end
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)
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.texto_direita:SetPoint ("right", self.statusbar, "right")
if (self._instance.row_info.no_icon) then
self.texto_esquerdo:SetPoint ("left", self.statusbar, "left", 2, 0)
else
self.texto_esquerdo:SetPoint ("left", self.icone_classe, "right", 3, 0)
end
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 _IsShiftKeyDown()) then
--> report
if (self._instance.atributo == 5 and _IsShiftKeyDown()) 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
--local spellname, _, spellicon = _detalhes.getspellinfo (self.minha_tabela.id)
--_detalhes:OpenAuraPanel (self.minha_tabela.id, spellname, spellicon)
--func (object.id, spellname, spellicon)
return
end
end
end
return _detalhes:ReportSingleLine (self._instance, self)
end
self._instance:AbreJanelaInfo (self.minha_tabela)
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
local set_bar_value = function (self, value)
self.statusbar:SetValue (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
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)
esta_barra.SetValue = set_bar_value
end
function _detalhes:ReportSingleLine (instancia, barra)
local reportar
if (instancia.atributo == 5) then --> custom
local actor_name = barra.texto_esquerdo: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
--> dump cooltip
local GameCooltip = GameCooltip
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!: " .. Loc ["STRING_REPORT"] .. " " .. _detalhes.sub_atributos [instancia.atributo].lista [instancia.sub_atributo]}
reportar [#reportar+1] = barra.texto_esquerdo:GetText() .. " " .. barra.texto_direita: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
gump:Fade (self, "ALPHA", 1)
end)
button:SetScript ("OnLeave", function (self)
self.mouse_over = false
gump:Fade (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")
elseif (instancia.stretch_button_side == 2) then
baseframe:StartSizing ("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:CancelTimer (_detalhes.atualizador)
_detalhes.atualizador = _detalhes:ScheduleRepeatingTimer ("AtualizaGumpPrincipal", 0.3, -1)
_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()
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:CancelTimer (_detalhes.atualizador)
_detalhes.atualizador = _detalhes:ScheduleRepeatingTimer ("AtualizaGumpPrincipal", _detalhes.update_speed, -1)
_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 > 1) then
scrollbar:SetValue (scrollbar:GetValue() - instancia.row_height * _detalhes.scroll_speed)
else
scrollbar:SetValue (0)
scrollbar.ultimo = 0
baseframe.button_up:Disable()
end
elseif (delta < 0) then --> rolou pra baixo
local B = instancia.barraS[2]
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)
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:AtualizaGumpPrincipal (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:AtualizaGumpPrincipal (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:AtualizaGumpPrincipal (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:AtualizaGumpPrincipal (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
function _detalhes:InstanceAlert (msg, icon, time, clickfunc)
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
if (clickfunc) then
self.alert.button:SetClickFunction (unpack (clickfunc))
else
self.alert.button.clickfunction = nil
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:Show()
self.alert:Play()
end
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)
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, 1)
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 = gump:NewButton (alert_bg, nil, "DetailsInstance"..instancia.meu_id.."AlertButton", nil, 1, 1)
button:SetAllPoints()
button:SetHook ("OnMouseUp", function() alert_bg:Hide() end)
button:SetFrameStrata ("FULLSCREEN")
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:SetSmoothing ("OUT")
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)
function alert_bg:Play()
anime:Play()
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)
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) --
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)
local backgrounddisplay = CreateFrame ("frame", "Details_GumpFrame"..ID, backgroundframe)
backgroundframe:SetFrameLevel (3)
backgrounddisplay:SetFrameLevel (3)
backgroundframe.instance = instancia
backgrounddisplay.instance = instancia
--> row frame is the parent of rows, it have setallpoints on baseframe
local rowframe = CreateFrame ("frame", "DetailsRowFrame"..ID, _UIParent)
rowframe:SetAllPoints (baseframe)
rowframe:SetFrameStrata (baseframe_strata)
rowframe:SetFrameLevel (2)
instancia.rowframe = rowframe
--> right click bookmark
local switchbutton = gump:NewDetailsButton (backgrounddisplay, baseframe, nil, function() end, nil, nil, 1, 1, "", "", "", "",
{rightFunc = {func = function() _detalhes.switch:ShowMe (instancia) end, param1 = nil, param2 = nil}}, "Details_SwitchButtonFrame" .. ID)
switchbutton:SetPoint ("topleft", backgrounddisplay, "topleft")
switchbutton:SetPoint ("bottomright", backgrounddisplay, "bottomright")
switchbutton:SetFrameLevel (backgrounddisplay:GetFrameLevel()+1)
--> 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()
gump:Fade (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 -------------------------------------------------------------------------------------------------------------------------------------------------
--> 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 ------------------------------------------------------------------------------------------------------------------------------------------------------------
--> 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)
end
gump:Fade (baseframe.lock_button, -1, 3.0)
-- scripts ------------------------------------------------------------------------------------------------------------------------------------------------------------
BFrame_scripts (baseframe, instancia)
BGFrame_scripts (switchbutton, baseframe, instancia)
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()
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:SetBarFollowPlayer (follow)
if (follow == nil) then
follow = self.following.enabled
end
self.following.enabled = follow
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
if (direction == 1) then --> top to bottom
for index, row in _ipairs (self.barras) do
local y = self.row_height * (index - 1)
y = y * -1
row:ClearAllPoints()
row:SetPoint ("topleft", self.baseframe, "topleft", x, y)
end
elseif (direction == 2) then --> bottom to top
for index, row in _ipairs (self.barras) do
local y = self.row_height * (index - 1)
row:ClearAllPoints()
row:SetPoint ("bottomleft", self.baseframe, "bottomleft", x, y + 2)
end
end
--> update all row width
if (self.bar_mod and self.bar_mod ~= 0) then
for index = 1, #self.barras do
self.barras [index]:SetWidth (self.baseframe:GetWidth() + self.bar_mod)
end
else
for index = 1, #self.barras do
self.barras [index]:SetWidth (self.baseframe:GetWidth()+self.row_info.space.right)
end
end
end
--> Alias
function gump:NewRow (instancia, index)
return gump:CriaNovaBarra (instancia, index)
end
_detalhes.barras_criadas = 0
--> search key: ~row ~barra
function gump:CriaNovaBarra (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)
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)
--> frame for hold the backdrop border
new_row.border = CreateFrame ("Frame", "DetailsBarra_Border_" .. instancia.meu_id .. "_" .. index, new_row.statusbar)
new_row.border:SetFrameLevel (new_row.statusbar:GetFrameLevel()+2)
new_row.border:SetAllPoints (new_row)
-- 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
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
new_row.texto_esquerdo = new_row.border:CreateFontString (nil, "overlay", "GameFontHighlight")
new_row.texto_esquerdo:SetPoint ("left", new_row.icone_classe, "right", 3, 0)
new_row.texto_esquerdo:SetJustifyH ("left")
new_row.texto_esquerdo:SetNonSpaceWrap (true)
--> right text
new_row.texto_direita = new_row.border:CreateFontString (nil, "overlay", "GameFontHighlight")
new_row.texto_direita:SetPoint ("right", new_row.statusbar, "right")
new_row.texto_direita:SetJustifyH ("right")
--> set the onclick, on enter scripts
barra_scripts (new_row, instancia, index)
--> hide
gump:Fade (new_row, 1)
--> adds the window container
instancia.barras [index] = new_row
--> set the left text
new_row.texto_esquerdo: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)
--> 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
--> 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
self:InstanceReset()
self:InstanceRefreshRows()
end
function _detalhes:SetBarBackdropSettings (enabled, size, color, texture)
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
if (not texture) then
texture = self.row_info.backdrop.texture
end
self.row_info.backdrop.enabled = enabled
self.row_info.backdrop.size = size
self.row_info.backdrop.color = color
self.row_info.backdrop.texture = texture
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:AtualizaGumpPrincipal (-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) --> forçar
end
end
self:InstanceReset()
self:InstanceRefreshRows()
self:ReajustaGump()
end
function _detalhes:SetBarSettings (height, texture, colorclass, fixedcolor, backgroundtexture, backgroundcolorclass, backgroundfixedcolor, alpha, iconfile, barstart, spacement)
--> 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
--> 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, alpha = gump:ParseColors (fixedcolor)
local c = self.row_info.fixed_texture_color
c[1], c[2], c[3], c[4] = red, green, blue, 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
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.texto_direita:SetText (row.texto_direita:GetText():gsub (dps_text, formated_dps))
row.ps_text = formated_dps
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
function _detalhes:InstanceRefreshRows (instancia)
if (instancia) then
self = instancia
end
if (not self.barras or not self.barras[1]) then
return
end
--> texture
local texture_file = SharedMedia:Fetch ("statusbar", self.row_info.texture)
local texture_file2 = SharedMedia:Fetch ("statusbar", self.row_info.texture_background)
--> outline values
local left_text_outline = self.row_info.textL_outline
local right_text_outline = self.row_info.textR_outline
--> 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 icon_texture = self.row_info.icon_file
local start_after_icon = self.row_info.start_after_icon
if (self.row_info.use_spec_icons) then
icon_texture = self.row_info.spec_file
end
--custom right text
local custom_right_text_enabled = self.row_info.textR_enable_custom_text
local custom_right_text = self.row_info.textR_custom_text
--backdrop
local backdrop = self.row_info.backdrop.enabled
local backdrop_color
if (backdrop) then
backdrop = {edgeFile = SharedMedia:Fetch ("border", self.row_info.backdrop.texture), edgeSize = self.row_info.backdrop.size}
backdrop_color = self.row_info.backdrop.color
end
--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)
--> icon
if (no_icon) then
row.statusbar:SetPoint ("topleft", row, "topleft")
row.statusbar:SetPoint ("bottomright", row, "bottomright")
row.texto_esquerdo:SetPoint ("left", row.statusbar, "left", 2, 0)
row.icone_classe:Hide()
else
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.texto_esquerdo:SetPoint ("left", row.icone_classe, "right", 3, 0)
row.icone_classe:Show()
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.texto_esquerdo, left_text_outline)
else
_detalhes:SetFontOutline (row.texto_esquerdo, nil)
end
if (right_text_outline) then
self:SetFontOutline (row.texto_direita, right_text_outline)
else
self:SetFontOutline (row.texto_direita, nil)
end
--> texture:
row.textura:SetTexture (texture_file)
row.background:SetTexture (texture_file2)
--> 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)
else
local r, g, b = row.textura:GetVertexColor()
row.textura:SetVertexColor (r, g, b, alpha)
end
--> text class color: if true color changes on the fly through class refresh
if (not left_text_class_color) then
row.texto_esquerdo:SetTextColor (text_r, text_g, text_b)
end
if (not right_text_class_color) then
row.texto_direita:SetTextColor (text_r, text_g, text_b)
end
--> text size
_detalhes:SetFontSize (row.texto_esquerdo, self.row_info.font_size or height * 0.75)
_detalhes:SetFontSize (row.texto_direita, self.row_info.font_size or height * 0.75)
--> text font
_detalhes:SetFontFace (row.texto_esquerdo, self.row_info.font_face_file or "GameFontHighlight")
_detalhes:SetFontFace (row.texto_direita, self.row_info.font_face_file or "GameFontHighlight")
--backdrop
if (backdrop) then
row.border:SetBackdrop (backdrop)
row.border:SetBackdropBorderColor (_unpack (backdrop_color))
else
row.border:SetBackdrop (nil)
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()
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 gump:Fade (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
local spec = GetSpecialization()
if (spec) then
local _, _, _, _, _background = GetSpecializationInfo (spec)
if (_background) then
texture = "Interface\\TALENTFRAME\\".._background
end
end
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)
gump:Fade (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) 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
end
function _detalhes:SetWindowAlphaForCombat (entering_in_combat, true_hide)
local amount, rowsamount, menuamount
--get the values
if (entering_in_combat) then
amount = self.hide_in_combat_alpha / 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
--print ("baseframe:",amount,"rowframe:",rowsamount,"menu:",menuamount)
--apply
if (true_hide and amount == 0) then
gump:Fade (self.baseframe, _unpack (_detalhes.windows_fade_in))
gump:Fade (self.rowframe, _unpack (_detalhes.windows_fade_in))
self:SetIconAlpha (nil, true)
else
self.baseframe:Show()
self.baseframe:SetAlpha (1)
self:InstanceAlpha (amount)
gump:Fade (self.rowframe, "ALPHAANIM", rowsamount)
gump:Fade (self.baseframe, "ALPHAANIM", rowsamount)
self:SetIconAlpha (menuamount)
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)
--print (ThisButton:GetName())
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]
--[[
self.baseframe.rodape.esquerdo:SetVertexColor (red, green, blue)
self.baseframe.rodape.esquerdo:SetAlpha (alpha)
self.baseframe.rodape.direita:SetVertexColor (red, green, blue)
self.baseframe.rodape.direita:SetAlpha (alpha)
self.baseframe.rodape.top_bg:SetVertexColor (red, green, blue)
self.baseframe.rodape.top_bg:SetAlpha (alpha)
--]]
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
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)
--> direito
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)
--> 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)
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
gump:Fade (self.menu_attribute_string.widget, _unpack (_detalhes.windows_fade_in))
else
if (no_animations) then
self.menu_attribute_string:SetAlpha (alpha)
else
gump:Fade (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
for index, button in _ipairs (SetIconAlphaCacheButtonsTable) do
if (self.menu_icons [index]) then
if (hide) then
gump:Fade (button, _unpack (_detalhes.windows_fade_in))
else
if (no_animations) then
button:SetAlpha (alpha)
else
gump:Fade (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
gump:Fade (button, _unpack (_detalhes.windows_fade_in))
else
if (no_animations) then
button:SetAlpha (alpha)
else
gump:Fade (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
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
--> 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)
if (shadow) then
button:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons_shadow]])
button:SetHighlightTexture ([[Interface\AddOns\Details\images\toolbar_icons_shadow]])
button:SetPushedTexture ([[Interface\AddOns\Details\images\toolbar_icons_shadow]])
else
button:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
button:SetHighlightTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
button:SetPushedTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
end
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)
if (shadow) then
button:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons_shadow]])
button:SetHighlightTexture ([[Interface\AddOns\Details\images\toolbar_icons_shadow]])
button:SetPushedTexture ([[Interface\AddOns\Details\images\toolbar_icons_shadow]])
else
button:SetNormalTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
button:SetHighlightTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
button:SetPushedTexture ([[Interface\AddOns\Details\images\toolbar_icons]])
end
else
button:Hide()
end
end
end
--> plugins buttons
if (self:IsLowerInstance()) then
if (#_detalhes.ToolBar.Shown > 0) then
local last_plugin_icon
for index, button in ipairs (_detalhes.ToolBar.Shown) do
button:ClearAllPoints()
if (got_anchor) then
if (self.plugins_grow_direction == 2) then --right
if (self.menu_anchor.side == 1) then --left
button:SetPoint ("left", self.lastIcon.widget or self.lastIcon, "right", space, 0)
elseif (self.menu_anchor.side == 2) then --right
button:SetPoint ("left", last_plugin_icon or self.firstIcon.widget or self.firstIcon, "right", space, 0)
end
elseif (self.plugins_grow_direction == 1) then --left
if (self.menu_anchor.side == 1) then --left
button:SetPoint ("right", last_plugin_icon or self.firstIcon.widget or self.firstIcon, "left", -space, 0)
elseif (self.menu_anchor.side == 2) then --right
button:SetPoint ("right", self.lastIcon.widget or self.lastIcon, "left", -space, 0)
end
end
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
end
end
end
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)
if (ninstance and is_new) then
ninstance.baseframe.cabecalho.modo_selecao:GetScript ("OnEnter")(ninstance.baseframe.cabecalho.modo_selecao)
end
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", -10)
CoolTip:SetOption ("YSpacingModSub", -3)
CoolTip:SetOption ("YSpacingMod", 1)
CoolTip:SetOption ("HeighMod", 10)
--CoolTip:SetOption ("FixedHeight", 106)
--CoolTip:SetOption ("FixedWidthSub", 146)
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_MODE_RAID"])
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 available_plugins = _detalhes.RaidTables:GetAvailablePlugins()
if (#available_plugins >= 0) then
local amt = 0
for index, ptable in _ipairs (available_plugins) do
if (ptable [3].__enabled) then
CoolTip:AddMenu (2, _detalhes.RaidTables.EnableRaidMode, instancia, ptable [4], true, ptable [1], ptable [2], true) --PluginName, PluginIcon, PluginObject, PluginAbsoluteName
amt = amt + 1
end
end
CoolTip:SetWallpaper (2, [[Interface\SPELLBOOK\Spellbook-Page-1]], menu_wallpaper_tex, menu_wallpaper_color, true)
if (amt <= 3) then
CoolTip:SetOption ("SubFollowButton", true)
end
end
CoolTip:AddLine (Loc ["STRING_MODE_SELF"])
CoolTip:AddMenu (1, instancia.AlteraModo, 1, true)
CoolTip:AddIcon ([[Interface\AddOns\Details\images\modo_icones]], 1, 1, 20, 20, 0, 32/256, 0, 1)
--build self plugins list
--pega a list de plugins solo:
if (#_detalhes.SoloTables.Menu > 0) then
for index, ptable in _ipairs (_detalhes.SoloTables.Menu) do
if (ptable [3].__enabled) then
CoolTip:AddMenu (2, _detalhes.SoloTables.EnableSoloMode, instancia, ptable [4], true, ptable [1], ptable [2], true)
end
end
CoolTip:SetWallpaper (2, [[Interface\SPELLBOOK\Spellbook-Page-1]], menu_wallpaper_tex, menu_wallpaper_color, true)
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, [[Interface\SPELLBOOK\Spellbook-Page-1]], menu_wallpaper_tex, menu_wallpaper_color, true)
--> options
GameCooltip:AddLine ("$div")
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)
_detalhes:SetMenuOwner (self, instancia)
CoolTip:SetBackdrop (1, _detalhes.tooltip_backdrop, nil, _detalhes.tooltip_border_color)
CoolTip:SetBackdrop (2, _detalhes.tooltip_backdrop, nil, _detalhes.tooltip_border_color)
CoolTip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], menu_wallpaper_tex, menu_wallpaper_color, true)
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_wallpaper_tex, party_wallpaper_color = {0.09, 0.698125, 0, 0.833984375}, {1, 1, 1, 0.5}
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 = 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
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
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", 175)
CoolTip:SetOption ("RightTextWidth", 105)
CoolTip:SetOption ("RightTextHeight", 12)
----------- 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
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
segments_used = segments_used + 1
--print (thisCombat.is_boss.name, thisCombat.instance_type, _detalhes:GetRaidIcon (thisCombat.is_boss.mapid), thisCombat.is_boss.ej_instance_id)
if (thisCombat.is_boss and thisCombat.is_boss.name) then
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, party_line_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)
if (portrait) then
CoolTip:AddIcon (portrait, 2, "top", 128, 64)
end
CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], "main", "left", 16, 16, 0.96875, 1, 0, 0.03125)
local background = _detalhes:GetRaidIcon (thisCombat.is_boss.mapid)
if (background) then
CoolTip:SetWallpaper (2, background, nil, segments_wallpaper_color)
elseif (thisCombat.instance_type == "party") then
local ej_id = thisCombat.is_boss.ej_instance_id
if (ej_id) then
local name, description, bgImage, buttonImage, loreImage, dungeonAreaMapID, link = EJ_GetInstanceInfo (ej_id)
if (bgImage) then
CoolTip:SetWallpaper (2, bgImage, party_wallpaper_tex, party_wallpaper_color)
end
end
else
CoolTip:SetWallpaper (2, [[Interface\BlackMarket\HotItemBanner]], unknown_boss_tex, unknown_boss_color, true)
end
elseif (thisCombat.is_arena) then
local file, coords = _detalhes:GetArenaInfo (thisCombat.is_arena.mapid)
enemy = thisCombat.is_arena.name
CoolTip:AddLine (thisCombat.is_arena.name, _, 1, "yellow")
CoolTip:AddIcon ([[Interface\AddOns\Details\images\icons]], "main", "left", 16, 12, 0.251953125, 0.306640625, 0.205078125, 0.248046875)
if (file) then
CoolTip:SetWallpaper (2, "Interface\\Glues\\LOADINGSCREENS\\" .. file, coords, empty_segment_color)
end
else
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
CoolTip:SetWallpaper (2, [[Interface\ACHIEVEMENTFRAME\UI-Achievement-StatsBackground]], segments_common_tex, segments_common_color)
end
CoolTip:AddMenu (1, instancia.TrocaTabela, i)
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_SEGMENT_TIME"] .. ":", 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")
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, [[Interface\SPELLBOOK\Spellbook-Page-1]], menu_wallpaper_tex, menu_wallpaper_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
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")
local enemy = _detalhes.tabela_vigente.is_boss and _detalhes.tabela_vigente.is_boss.name or _detalhes.tabela_vigente.enemy or "--x--x--"
if (_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)
if (portrait) then
CoolTip:AddIcon (portrait, 2, "top", 128, 64)
end
local background = _detalhes:GetRaidIcon (_detalhes.tabela_vigente.is_boss.mapid)
if (background) then
CoolTip:SetWallpaper (2, background, nil, segments_wallpaper_color)
elseif (_detalhes.tabela_vigente.instance_type == "party") then
local ej_id = _detalhes.tabela_vigente.is_boss.ej_instance_id
if (ej_id) then
local name, description, bgImage, buttonImage, loreImage, dungeonAreaMapID, link = EJ_GetInstanceInfo (ej_id)
if (bgImage) then
CoolTip:SetWallpaper (2, bgImage, party_wallpaper_tex, party_wallpaper_color)
end
end
end
else
CoolTip:SetWallpaper (2, [[Interface\ACHIEVEMENTFRAME\UI-Achievement-StatsBackground]], segments_common_tex, segments_common_color)
end
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_SEGMENT_TIME"] .. ":", minutos.."m "..segundos.."s", 2, "white", "white")
else
CoolTip:AddLine (Loc ["STRING_SEGMENT_TIME"] .. ":", "--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_SEGMENT_TIME"] .. ":", 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")
--> 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_SEGMENT_TIME"] .. ":", minutos.."m "..segundos.."s", 2, "white", "white")
--CoolTip:SetWallpaper (2, [[Interface\ACHIEVEMENTFRAME\UI-Achievement-StatsBackground]], segments_common_tex, segments_common_color)
--CoolTip:SetWallpaper (2, [[Interface\PetBattles\MountJournal-NoMounts]], {0, 403/512, 0, 294/512}, {.5, .5, .5, 0.9})
CoolTip:SetWallpaper (2, [[Interface\PetPaperDollFrame\PetStatsBG-Hunter]], {321/512, 0, 0, 190/512}, {1, 1, 1, 0.9})
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")
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", 4)
CoolTip:SetOption ("ButtonHeightModSub", 4)
CoolTip:SetOption ("ButtonsYModSub", 0)
CoolTip:SetOption ("YSpacingModSub", -4)
CoolTip:SetOption ("HeighMod", 12)
--CoolTip:SetWallpaper (1, [[Interface\ACHIEVEMENTFRAME\UI-Achievement-Parchment-Horizontal-Desaturated]], nil, {1, 1, 1, 0.3})
CoolTip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], menu_wallpaper_tex, menu_wallpaper_color, true)
CoolTip:SetBackdrop (1, _detalhes.tooltip_backdrop, nil, _detalhes.tooltip_border_color)
CoolTip:SetBackdrop (2, _detalhes.tooltip_backdrop, nil, _detalhes.tooltip_border_color)
show_anti_overlap (instancia, self, "top")
CoolTip:ShowCooltip()
self:SetScript ("OnUpdate", nil)
end
end
-- ~skin
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
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
--print ("debug", self.meu_id, self.iniciada, self.baseframe, self.bgframe)
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 = table_deepcopy (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
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
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.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)
----------> 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
self:MicroDisplaysSide()
--> 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:SetCombatAlpha (nil, nil, true)
--> update icons
_detalhes.ToolBar:ReorganizeIcons (true) --call self:SetMenuAlpha()
--> refresh options panel if opened
if (_G.DetailsOptionsWindow and _G.DetailsOptionsWindow:IsShown()) 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()
if (not just_updating or _detalhes.initializing) then
if (this_skin.callback) then
this_skin:callback (self, just_updating)
end
if (this_skin.control_script) then
if (this_skin.control_script_on_start) then
this_skin:control_script_on_start (self)
end
self.bgframe:SetScript ("OnUpdate", this_skin.control_script)
self.bgframe.skin_script = true
self.bgframe.skin = this_skin
--self.bgframe.skin_script_instance = true
end
end
end
function _detalhes:DelayedCheckCombatAlpha (instance)
if (UnitAffectingCombat ("player") or InCombatLockdown()) then
instance:SetWindowAlphaForCombat (true, true) --> hida a janela
else
instance:SetWindowAlphaForCombat (false) --> deshida a janela
end
end
function _detalhes:DelayedCheckOutOfCombatAlpha (instance)
if (UnitAffectingCombat ("player") or InCombatLockdown()) then
instance:SetWindowAlphaForCombat (false) --> deshida a janela
else
instance:SetWindowAlphaForCombat (true, true) --> hida a janela
end
end
function _detalhes:SetCombatAlpha (modify_type, alpha_amount, interacting)
if (interacting) then
if (self.hide_in_combat_type == 1) then --None
return
elseif (self.hide_in_combat_type == 2) then --While In Combat
_detalhes:ScheduleTimer ("DelayedCheckCombatAlpha", 0.3, self)
elseif (self.hide_in_combat_type == 3) then --"While Out of Combat"
_detalhes:ScheduleTimer ("DelayedCheckOutOfCombatAlpha", 0.3, self)
elseif (self.hide_in_combat_type == 4) then --"While Out of a Group"
if (_detalhes.in_group) then
self:SetWindowAlphaForCombat (false) --> deshida a janela
else
self:SetWindowAlphaForCombat (true, true) --> hida a janela
end
end
return
end
if (not modify_type) then
modify_type = self.hide_in_combat_type
else
if (modify_type == 1) then --> changed to none
self:SetWindowAlphaForCombat (false)
end
end
if (not alpha_amount) then
alpha_amount = self.hide_in_combat_alpha
end
self.hide_in_combat_type = modify_type
self.hide_in_combat_alpha = alpha_amount
self:SetCombatAlpha (nil, nil, true)
end
function _detalhes:SetFrameStrata (strata)
if (not strata) then
strata = self.strata
end
self.strata = strata
self.rowframe: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
function _detalhes:LeftMenuAnchorSide (side)
if (not side) then
side = self.menu_anchor.side
end
self.menu_anchor.side = side
return self:MenuAnchor()
end
-- ~attributemenu (text with attribute name)
function _detalhes:AttributeMenu (enabled, pos_x, pos_y, font, size, color, side, shadow)
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
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
--> 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()
label.text = 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)
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)
--shadow
_detalhes:SetFontOutline (self.menu_attribute_string, shadow)
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)
function _detalhes:SetAutoHideMenu (left, right, interacting)
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
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
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
else
if (self.is_interacting) then
self:InstanceButtonsColors (r, g, b, 1, true, true) --no save, only left
else
self:InstanceButtonsColors (0, 0, 0, 0, true, true) --no save, only left
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
--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: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.window_scale = scale
end
for _, instance in _ipairs (group) do
_detalhes.move_janela_func (instance.baseframe, true, instance)
_detalhes.move_janela_func (instance.baseframe, false, instance)
end
for _, instance in _ipairs (group) do
instance:SaveMainWindowPosition()
end
else
self.window_scale = scale
self.baseframe:SetScale (scale)
self.rowframe:SetScale (scale)
--self:SaveMainWindowPosition() -- skin was replacing window_scale
end
end
function _detalhes:ToolbarSide (side)
if (not side) then
side = self.toolbar_side
end
self.toolbar_side = side
local skin = _detalhes.skins [self.skin]
if (side == 1) then --> top
--> ball point
self.baseframe.cabecalho.ball_point:ClearAllPoints()
self.baseframe.cabecalho.ball_point:SetPoint ("bottomleft", self.baseframe, "topleft", unpack (skin.icon_point_anchor))
--> ball
self.baseframe.cabecalho.ball:SetTexCoord (unpack (COORDS_LEFT_BALL))
self.baseframe.cabecalho.ball:ClearAllPoints()
self.baseframe.cabecalho.ball:SetPoint ("bottomleft", self.baseframe, "topleft", unpack (skin.left_corner_anchor))
--> ball r
self.baseframe.cabecalho.ball_r:SetTexCoord (unpack (COORDS_RIGHT_BALL))
self.baseframe.cabecalho.ball_r:ClearAllPoints()
self.baseframe.cabecalho.ball_r:SetPoint ("bottomright", self.baseframe, "topright", unpack (skin.right_corner_anchor))
--> tex coords
self.baseframe.cabecalho.emenda:SetTexCoord (unpack (COORDS_LEFT_CONNECTOR))
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
--> ball point
self.baseframe.cabecalho.ball_point:ClearAllPoints()
local _x, _y = unpack (skin.icon_point_anchor_bottom)
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)
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)
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
--> update top menus
self:LeftMenuAnchorSide()
self:StretchButtonAnchor()
self:HideMainIcon()
if (self.show_sidebars) then
self:ShowSideBars()
end
self:AttributeMenu()
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
gump:Fade (self.baseframe.cabecalho.atributo_icon, 1)
--self.baseframe.cabecalho.ball:SetParent (self.baseframe)
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
gump:Fade (self.baseframe.cabecalho.atributo_icon, 0)
--self.baseframe.cabecalho.ball:SetParent (_detalhes.listener)
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()
end
function _detalhes:HideSideBars (instancia)
if (instancia) then
self = instancia
end
self.show_sidebars = false
self.row_info.space.left = 0
self.row_info.space.right = 0
self.baseframe.barra_esquerda:Hide()
self.baseframe.barra_direita:Hide()
self.baseframe.barra_fundo:Hide()
self:SetBarGrowDirection()
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()
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.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()
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)
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", -2)
GameCooltip:SetOption ("YSpacingMod", 0)
GameCooltip:SetOption ("TextHeightMod", 0)
GameCooltip:SetOption ("IgnoreButtonAutoHeight", false)
GameCooltip:SetOption ("ButtonsYMod", -7)
GameCooltip:SetOption ("HeighMod", 8)
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)
GameCooltip:AddLine ("$div", nil, 1, nil, -5, -11)
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:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], menu_wallpaper_tex, menu_wallpaper_color, true)
GameCooltip:SetBackdrop (1, _detalhes.tooltip_backdrop, nil, _detalhes.tooltip_border_color)
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)
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
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, [[Interface\SPELLBOOK\Spellbook-Page-1]], menu_wallpaper_tex, menu_wallpaper_color, true)
GameCooltip:SetWallpaper (2, [[Interface\SPELLBOOK\Spellbook-Page-1]], menu_wallpaper_tex, menu_wallpaper_color, true)
GameCooltip:SetBackdrop (1, _detalhes.tooltip_backdrop, nil, _detalhes.tooltip_border_color)
GameCooltip:SetBackdrop (2, _detalhes.tooltip_backdrop, nil, _detalhes.tooltip_border_color)
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
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 ----------------------------------------------------------------------------------------------------------------------------------------------------
baseframe.cabecalho.modo_selecao = gump:NewButton (baseframe, nil, "DetailsModeButton"..instancia.meu_id, nil, 16, 16, _detalhes.empty_function, 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)
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)
--> Generating Cooltip menu from table template
--> Cooltip raw method for enter/leave show/hide
baseframe.cabecalho.modo_selecao:SetScript ("OnEnter", function (self)
--gump:Fade (baseframe.button_stretch, "alpha", 0.3)
OnEnterMainWindow (instancia, self, 3)
if (instancia.desaturated_menu) then
self:GetNormalTexture():SetDesaturated (false)
end
_G.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] = passou
parameters_table [3] = checked
self:SetScript ("OnUpdate", build_mode_list)
end)
baseframe.cabecalho.modo_selecao:SetScript ("OnLeave", function (self)
OnLeaveMainWindow (instancia, self, 3)
hide_anti_overlap (instancia.baseframe.anti_menu_overlap)
if (instancia.desaturated_menu) then
self:GetNormalTexture():SetDesaturated (true)
end
_G.GameCooltip.buttonOver = false
baseframe.cabecalho.button_mouse_over = false
if (_G.GameCooltip.active) then
parameters_table [2] = 0
self:SetScript ("OnUpdate", on_leave_menu)
else
self:SetScript ("OnUpdate", nil)
end
end)
--> SELECIONAR O SEGMENTO ----------------------------------------------------------------------------------------------------------------------------------------------------
baseframe.cabecalho.segmento = gump:NewButton (baseframe, nil, "DetailsSegmentButton"..instancia.meu_id, nil, 16, 16, _detalhes.empty_function, nil, nil, [[Interface\AddOns\Details\images\segmentos_icone]])
baseframe.cabecalho.segmento:SetFrameLevel (baseframe.UPFrame:GetFrameLevel()+1)
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)
baseframe.cabecalho.segmento:SetHook ("OnMouseUp", function (button, 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_)
return instancia:TrocaTabela (segmento_goal)
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_)
return instancia:TrocaTabela (segmento_goal)
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_)
return instancia:TrocaTabela (segmento_goal)
end
end)
baseframe.cabecalho.segmento:SetPoint ("left", baseframe.cabecalho.modo_selecao, "right", 0, 0)
--> Cooltip raw method for show/hide onenter/onhide
baseframe.cabecalho.segmento:SetScript ("OnEnter", function (self)
--gump:Fade (baseframe.button_stretch, "alpha", 0.3)
OnEnterMainWindow (instancia, self, 3)
if (instancia.desaturated_menu) then
self:GetNormalTexture():SetDesaturated (false)
end
_G.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] = passou
self:SetScript ("OnUpdate", build_segment_list)
end)
--> Cooltip raw method
baseframe.cabecalho.segmento:SetScript ("OnLeave", function (self)
--gump:Fade (baseframe.button_stretch, -1)
OnLeaveMainWindow (instancia, self, 3)
hide_anti_overlap (instancia.baseframe.anti_menu_overlap)
if (instancia.desaturated_menu) then
self:GetNormalTexture():SetDesaturated (true)
end
_G.GameCooltip.buttonOver = false
baseframe.cabecalho.button_mouse_over = false
if (_G.GameCooltip.active) then
parameters_table [2] = 0
self:SetScript ("OnUpdate", on_leave_menu)
else
self:SetScript ("OnUpdate", nil)
end
end)
--> SELECIONAR O ATRIBUTO ----------------------------------------------------------------------------------------------------------------------------------------------------
baseframe.cabecalho.atributo = gump:NewButton (baseframe, nil, "DetailsAttributeButton"..instancia.meu_id, nil, 16, 16, instancia.TrocaTabela, instancia, -3, [[Interface\AddOns\Details\images\sword]])
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)
--baseframe.cabecalho.atributo = gump:NewDetailsButton (baseframe, _, instancia, instancia.TrocaTabela, instancia, -3, 16, 16, [[Interface\AddOns\Details\images\sword]])
baseframe.cabecalho.atributo:SetFrameLevel (baseframe.UPFrame:GetFrameLevel()+1)
baseframe.cabecalho.atributo:SetPoint ("left", baseframe.cabecalho.segmento.widget, "right", 0, 0)
--> Cooltip automatic method through Injection
--> First we declare the function which will build the menu
local BuildAttributeMenu = function()
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 ("YSpacingMod", 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, [[Interface\SPELLBOOK\Spellbook-Page-1]], menu_wallpaper_tex, menu_wallpaper_color, true)
end
else
_detalhes:MontaAtributosOption (instancia)
end
GameCooltip:SetBackdrop (1, _detalhes.tooltip_backdrop, nil, _detalhes.tooltip_border_color)
GameCooltip:SetBackdrop (2, _detalhes.tooltip_backdrop, nil, _detalhes.tooltip_border_color)
end
--> Now we create a table with some parameters
--> your frame need to have a member called CoolTip
baseframe.cabecalho.atributo.CoolTip = {
Type = "menu", --> the type, menu tooltip tooltipbars
BuildFunc = BuildAttributeMenu, --> called when user mouse over the frame
OnEnterFunc = function (self)
baseframe.cabecalho.button_mouse_over = true;
OnEnterMainWindow (instancia, baseframe.cabecalho.atributo, 3)
show_anti_overlap (instancia, self, "top")
if (instancia.desaturated_menu) then
self:GetNormalTexture():SetDesaturated (false)
end
end,
OnLeaveFunc = function (self)
baseframe.cabecalho.button_mouse_over = false;
OnLeaveMainWindow (instancia, baseframe.cabecalho.atributo, 3)
hide_anti_overlap (instancia.baseframe.anti_menu_overlap)
if (instancia.desaturated_menu) then
self:GetNormalTexture():SetDesaturated (true)
end
end,
FixedValue = instancia,
ShowSpeed = 0.15,
Options = function()
_detalhes:SetMenuOwner (baseframe.cabecalho.atributo.widget, instancia)
if (instancia.toolbar_side == 1) then --top
return {TextSize = _detalhes.font_sizes.menus}
elseif (instancia.toolbar_side == 2) then --bottom
return {TextSize = _detalhes.font_sizes.menus, HeightAnchorMod = 0} -- -7
end
end}
--> install cooltip
_G.GameCooltip:CoolTipInject (baseframe.cabecalho.atributo)
--> REPORTAR ~report ----------------------------------------------------------------------------------------------------------------------------------------------------
baseframe.cabecalho.report = gump:NewButton (baseframe, nil, "DetailsReportButton"..instancia.meu_id, nil, 8, 16, _detalhes.Reportar, instancia, "INSTANCE" .. instancia.meu_id, [[Interface\Addons\Details\Images\report_button]])
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)
--baseframe.cabecalho.report = gump:NewDetailsButton (baseframe, _, instancia, _detalhes.Reportar, instancia, nil, 16, 16, [[Interface\COMMON\VOICECHAT-ON]])
baseframe.cabecalho.report:SetPoint ("left", baseframe.cabecalho.atributo, "right", -6, 0)
baseframe.cabecalho.report:SetFrameLevel (baseframe.UPFrame:GetFrameLevel()+1)
baseframe.cabecalho.report:SetScript ("OnEnter", function (self)
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", -3)
GameCooltip:SetOption ("YSpacingMod", 0)
GameCooltip:SetOption ("TextHeightMod", 0)
GameCooltip:SetOption ("IgnoreButtonAutoHeight", false)
GameCooltip:SetOption ("ButtonsYMod", -7)
GameCooltip:SetOption ("HeighMod", 8)
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)
GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], menu_wallpaper_tex, menu_wallpaper_color, true)
GameCooltip:SetBackdrop (1, _detalhes.tooltip_backdrop, nil, _detalhes.tooltip_border_color)
show_anti_overlap (instancia, self, "top")
_detalhes:SetMenuOwner (self, instancia)
GameCooltip:ShowCooltip()
end)
baseframe.cabecalho.report:SetScript ("OnLeave", function (self)
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] = 0
self:SetScript ("OnUpdate", on_leave_menu)
else
self:SetScript ("OnUpdate", nil)
end
end)
-- ~delete ~erase ~reset
--> reset ----------------------------------------------------------------------------------------------------------------------------------------------------
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:SetScript ("OnClick", function()
if (not _detalhes.disable_reset_button) then
_detalhes.tabela_historico:resetar()
else
_detalhes:Msg (Loc ["STRING_OPTIONS_DISABLED_RESET"])
end
end)
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)
--> fim botão reset
end