local Details = _G._detalhes
local Loc = LibStub ( " AceLocale-3.0 " ) : GetLocale ( " Details " )
local SharedMedia = LibStub : GetLibrary ( " LibSharedMedia-3.0 " )
local segmentos = Details.segmentos
local gump = Details.gump
local _
--lua locals
local ceil = math.ceil
local floor = math.floor
local _math_max = math.max
local ipairs = ipairs
local pairs = pairs
local abs = _G.abs
local unpack = unpack
--api locals
local CreateFrame = CreateFrame
local GetTime = GetTime
local _GetCursorPosition = GetCursorPosition
local UIParent = UIParent
local _IsAltKeyDown = IsAltKeyDown
local _IsShiftKeyDown = IsShiftKeyDown
local _IsControlKeyDown = IsControlKeyDown
local modo_raid = Details._detalhes_props [ " MODO_RAID " ]
local modo_alone = Details._detalhes_props [ " MODO_ALONE " ]
local IsInInstance = _G.IsInInstance
local tokFunctions = Details.ToKFunctions
local _ , Details222 = ...
_ = nil
--constants
local baseframe_strata = " LOW "
local defaultBackdropSt = {
bgFile = [[Interface\AddOns\Details\images\background]] , tile = true , tileSize = 16 ,
insets = { left = 0 , right = 0 , top = 0 , bottom = 0 } }
local CONST_ROWFRAME_ALPHA = 0.975036
local parseRowFrameAlpha = function ( value )
return math.min ( value , CONST_ROWFRAME_ALPHA )
end
function Details : 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
instancia.showing = Details.tabela_vigente
end
instancia.showing [ instancia.atributo ] . need_refresh = true
end
end
--skins TCoords
local DEFAULT_SKIN = [[Interface\AddOns\Details\images\skins\classic_skin]]
local COORDS_LEFT_BALL = { 0.15625 , 0.2802734375 , 0.08203125 , 0.2060546875 } -- 160 287 84 211
local COORDS_LEFT_CONNECTOR = { 0.294921875 , 0.3017578125 , 0.08203125 , 0.2060546875 } --302 84 309 211 (updated)
local COORDS_LEFT_CONNECTOR_NO_ICON = { 0.587890625 + 0.00048828125 , 0.5947265625 , 0.08203125 , 0.2060546875 } -- 602 609 x 84 211
local COORDS_TOP_BACKGROUND = { 0.15625 , 0.6552734375 , 0.22265625 , 0.3466796875 } -- 160 671 x 228 355
local COORDS_RIGHT_BALL = { 0.3154296875 , 0.439453125 , 0.08203125 , 0.2060546875 } -- 323 450 x 84 211
local COORDS_LEFT_BALL_NO_ICON = { 0.44921875 , 0.5732421875 , 0.08203125 , 0.2060546875 } -- 460 587 84 211
local COORDS_LEFT_SIDE_BAR = { 0.765625 , 0.828125 , 0.001953125 , 0.501953125 } -- 784 2 848 514 (updated)
local COORDS_RIGHT_SIDE_BAR = { 0.7001953125 , 0.7626953125 , 0.001953125 , 0.501953125 } -- --717 2 781 513
local COORDS_BOTTOM_SIDE_BAR = { 0.32861328125 , 0.82666015625 , 0.50537109375 , 0.56494140625 } -- 336 517 847 579 (updated)
local COORDS_SLIDER_TOP = { 0.00146484375 , 0.03076171875 , 0.00244140625 , 0.03173828125 } -- 1 2 32 33 -ok
local COORDS_SLIDER_MIDDLE = { 0.00146484375 , 0.03076171875 , 0.03955078125 , 0.10009765625 } -- 1 40 32 103 -ok
local COORDS_SLIDER_DOWN = { 0.00146484375 , 0.03076171875 , 0.10986328125 , 0.13916015625 } -- 1 112 32 143 -ok
local COORDS_STRETCH = { 0.0009765625 , 0.03125 , 0.2138671875 , 0.228515625 } -- 1 32 219 234
local COORDS_RESIZE_RIGHT = { 0.00146484375 , 0.01513671875 , 0.24560546875 , 0.25927734375 } -- 1 251 16 266 -ok
local COORDS_RESIZE_LEFT = { 0.02001953125 , 0.03173828125 , 0.24560546875 , 0.25927734375 } -- 20 251 33 266 -ok
local COORDS_UNLOCK_BUTTON = { 0.00146484375 , 0.01513671875 , 0.27197265625 , 0.28564453125 } -- 1 278 16 293 -ok
local COORDS_BOTTOM_BACKGROUND = { 0.15673828125 , 0.65478515625 , 0.35400390625 , 0.47705078125 } -- 160 362 671 489 -ok
local COORDS_PIN_LEFT = { 0.00146484375 , 0.03076171875 , 0.30126953125 , 0.33056640625 } -- 1 308 32 339 -ok
local COORDS_PIN_RIGHT = { 0.03564453125 , 0.06494140625 , 0.30126953125 , 0.33056640625 } -- 36 308 67 339 -ok
local menus_backdrop = {
edgeFile = [[Interface\Buttons\WHITE8X8]] ,
edgeSize = 1 ,
bgFile = [[Interface\AddOns\Details\images\background]] ,
tileSize = 16 ,
tile = true ,
insets = { top = 0 , right = 0 , left = 0 , bottom = 0 }
}
local menus_backdropcolor = { .2 , .2 , .2 , 0.85 }
local menus_backdropcolor_sec = { .2 , .2 , .2 , 0.90 }
local menus_bordercolor = { 0 , 0 , 0 , .25 }
--menus are ignoring the value set on the profile
Details.menu_backdrop_config = {
menus_backdrop = menus_backdrop ,
menus_backdropcolor = menus_backdropcolor ,
menus_backdropcolor_sec = menus_backdropcolor_sec ,
menus_bordercolor = menus_bordercolor ,
}
function Details : RefreshScrollBar ( x ) --x = amount of bars being refreshed
local amountRowsInTheWindow = self.rows_fit_in_window
if ( not self.barraS [ 1 ] ) then --primeira vez que as barras est�o aparecendo
self.barraS [ 1 ] = 1 --primeira barra
if ( amountRowsInTheWindow < x ) then --se a quantidade a ser mostrada for maior que o que pode ser mostrado
self.barraS [ 2 ] = amountRowsInTheWindow -- 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 > amountRowsInTheWindow ) then --show scroll bar
self.rows_showing = x
if ( not self.baseframe . isStretching ) then
self : MostrarScrollBar ( )
end
self.need_rolagem = true
self.barraS [ 2 ] = amountRowsInTheWindow --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 Details : 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 ]
Details : name_space ( esta_barra )
end
end
end
end
--self � a inst�ncia
function Details : MoveBarrasTo ( destino )
local janela = self.baseframe
janela._move_func = {
window = self.baseframe ,
instancia = self ,
time = 0
}
if ( destino > self.bgdisplay_loc ) then
janela._move_func . inc = 1
else
janela._move_func . inc = - 1
end
janela._move_func . _end = destino
janela : SetScript ( " OnUpdate " , move_barras )
end
--almost deprecated
function Details : MostrarScrollBar ( sem_animacao )
if ( self.rolagem ) then
return
end
if ( not Details.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 Details.animate_scroll ) then
self : MoveBarrasTo ( mover_para )
else
--set size of rows
for index = 1 , self.rows_fit_in_window do
self.barras [ index ] : SetWidth ( self.baseframe : GetWidth ( ) + mover_para - 3 ) ---3 distance between row end and scroll start
end
--move the semi-background to the left (which moves the scroll)
self.bgdisplay : SetPoint ( " bottomright " , self.baseframe , " bottomright " , mover_para , 0 )
self.bar_mod = mover_para + ( - 3 )
self.bgdisplay_loc = mover_para
--cancel movement if any
if ( self.baseframe : GetScript ( " OnUpdate " ) and self.baseframe : GetScript ( " OnUpdate " ) == move_barras ) then
self.baseframe : SetScript ( " OnUpdate " , nil )
end
end
local nao_mostradas = self.rows_showing - self.rows_fit_in_window
local slider_height = nao_mostradas * self.row_height
self.scroll . scrollMax = slider_height
self.scroll : SetMinMaxValues ( 0 , slider_height )
self.rolagem = true
self.scroll : Enable ( )
main : EnableMouseWheel ( true )
self.scroll : SetValue ( 0 ) --set value pode chamar o atualizador
self.baseframe . button_down : Enable ( )
main.resize_direita : SetPoint ( " bottomright " , main , " bottomright " , self.largura_scroll *- 1 , 0 )
if ( main.isLocked ) then
main.lock_button : SetPoint ( " bottomright " , main , " bottomright " , self.largura_scroll *- 1 , 0 )
end
end
--almost deprecated
function Details : EsconderScrollBar ( sem_animacao , force )
if ( not self.rolagem ) then
return
end
if ( not Details.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 Details.animate_scroll ) then
self : MoveBarrasTo ( self.row_info . space.right + 3 ) -->
else
for index = 1 , self.rows_fit_in_window do
self.barras [ index ] : SetWidth ( self.baseframe : GetWidth ( ) - 5 ) ---5 space between row end and window right border
end
self.bgdisplay : SetPoint ( " bottomright " , self.baseframe , " bottomright " , 0 , 0 ) -- voltar o background na poci��o inicial
self.bar_mod = 0 -- zera o bar mod, uma vez que as barras v�o estar na pocis�o inicial
self.bgdisplay_loc = - 2
if ( self.baseframe : GetScript ( " OnUpdate " ) and self.baseframe : GetScript ( " OnUpdate " ) == move_barras ) then
self.baseframe : SetScript ( " OnUpdate " , nil )
end
end
self.rolagem = false
self.scroll : Disable ( )
main : EnableMouseWheel ( false )
main.resize_direita : SetPoint ( " bottomright " , main , " bottomright " , 0 , 0 )
if ( main.isLocked ) then
main.lock_button : SetPoint ( " bottomright " , main , " bottomright " , 0 , 0 )
end
end
local function OnLeaveMainWindow ( instancia , self )
instancia.is_interacting = false
instancia : SetMenuAlpha ( nil , nil , nil , nil , true )
instancia : SetAutoHideMenu ( nil , nil , true )
instancia : RefreshAttributeTextSize ( )
if ( instancia.modo ~= Details._detalhes_props [ " MODO_ALONE " ] and not instancia.baseframe . isLocked ) then
--resizes, lock and ungroup buttons
if ( not Details.disable_lock_ungroup_buttons ) then
instancia.baseframe . resize_direita : SetAlpha ( 0 )
instancia.baseframe . resize_esquerda : SetAlpha ( 0 )
instancia.baseframe . lock_button : SetAlpha ( 0 )
instancia.break_snap_button : SetAlpha ( 0 )
end
--stretch button
Details.FadeHandler . Fader ( instancia.baseframe . button_stretch , " ALPHA " , 0 )
elseif ( instancia.modo ~= Details._detalhes_props [ " MODO_ALONE " ] and instancia.baseframe . isLocked ) then
--resizes, lock and ungroup buttons
if ( not Details.disable_lock_ungroup_buttons ) then
instancia.baseframe . lock_button : SetAlpha ( 0 )
instancia.break_snap_button : SetAlpha ( 0 )
end
Details.FadeHandler . Fader ( instancia.baseframe . button_stretch , " ALPHA " , 0 )
end
end
Details.OnLeaveMainWindow = OnLeaveMainWindow
local function OnEnterMainWindow ( instancia , self )
instancia.is_interacting = true
instancia : SetMenuAlpha ( nil , nil , nil , nil , true )
instancia : SetAutoHideMenu ( nil , nil , true )
instancia : RefreshAttributeTextSize ( )
if ( not instancia.last_interaction or instancia.last_interaction < Details._tempo ) then
instancia.last_interaction = Details._tempo or time ( )
end
if ( instancia.baseframe : GetFrameLevel ( ) > instancia.rowframe : GetFrameLevel ( ) ) then
instancia.rowframe : SetFrameLevel ( instancia.baseframe : GetFrameLevel ( ) )
end
if ( instancia.modo ~= Details._detalhes_props [ " MODO_ALONE " ] and not instancia.baseframe . isLocked ) then
--resize, lock and ungroup buttons
if ( not Details.disable_lock_ungroup_buttons ) then
instancia.baseframe . resize_direita : SetAlpha ( 1 )
instancia.baseframe . resize_esquerda : SetAlpha ( 1 )
instancia.baseframe . lock_button : SetAlpha ( 1 )
--ungroup
for _ , instancia_id in pairs ( instancia.snap ) do
if ( instancia_id ) then
instancia.break_snap_button : SetAlpha ( 1 )
break
end
end
end
--stretch button
if ( not Details.disable_stretch_button ) then
Details.FadeHandler . Fader ( instancia.baseframe . button_stretch , " ALPHA " , 0.4 )
end
elseif ( instancia.modo ~= Details._detalhes_props [ " MODO_ALONE " ] and instancia.baseframe . isLocked ) then
if ( not Details.disable_lock_ungroup_buttons ) then
instancia.baseframe . lock_button : SetAlpha ( 1 )
--ungroup
for _ , instancia_id in pairs ( instancia.snap ) do
if ( instancia_id ) then
instancia.break_snap_button : Show ( )
instancia.break_snap_button : SetAlpha ( 1 )
break
end
end
end
if ( not Details.disable_stretch_button ) then
Details.FadeHandler . Fader ( instancia.baseframe . button_stretch , " ALPHA " , 0.4 )
end
end
end
Details.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
Details.VPT , Details.VPR , Details.VPB , Details.VPL = VPT , VPR , VPB , VPL
local color_red = { 1 , 0.2 , 0.2 }
local color_green = { 0.2 , 1 , 0.2 }
local pixels_per_arrow = 50
local show_instance_ids = function ( )
for id , instance in Details : ListInstances ( ) do
if ( instance : IsEnabled ( ) ) then
local id_texture1 = instance.baseframe . id_texture1
if ( not id_texture1 ) then
--instancia.
instance.baseframe . id_texture1 = instance.floatingframe : CreateTexture ( nil , " overlay " )
instance.baseframe . id_texture2 = instance.floatingframe : CreateTexture ( nil , " overlay " )
instance.baseframe . id_texture1 : SetTexture ( [[Interface\Timer\BigTimerNumbers]] )
instance.baseframe . id_texture2 : SetTexture ( [[Interface\Timer\BigTimerNumbers]] )
end
local h = instance.baseframe : GetHeight ( ) * 0.80
instance.baseframe . id_texture1 : SetSize ( h , h )
instance.baseframe . id_texture2 : SetSize ( h , h )
local id = instance : GetId ( )
local first , second = floor ( id / 10 ) , 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 = 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 = 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 = ceil ( second / 4 )
local x = ( second - ( ( line - 1 ) * 4 ) ) / 4
local l , r , t , b = x - 0.25 , x , 0.33 * ( line - 1 ) , 0.33 * line
instance.baseframe . id_texture1 : SetTexCoord ( l , r , t , b )
instance.baseframe . id_texture1 : Show ( )
instance.baseframe . id_texture2 : Hide ( )
end
end
end
end
local update_line = function ( self , target_frame )
local target_instance_PosX , target_instance_PosY = target_frame.instance : GetPositionOnScreen ( )
local moving_instance_PosX , moving_instance_PosY = self.instance : GetPositionOnScreen ( )
target_instance_PosX = target_instance_PosX or 0
target_instance_PosY = target_instance_PosY or 0
moving_instance_PosX = moving_instance_PosX or 0
moving_instance_PosY = moving_instance_PosY or 0
local dX = target_instance_PosX - moving_instance_PosX
local dY = target_instance_PosY - moving_instance_PosY
local distance = ( dX ^ 2 + dY ^ 2 ) ^ 0.5
local angle = atan2 ( dY , dX )
local guide_balls = Details.guide_balls
if ( not guide_balls ) then
Details.guide_balls = { }
guide_balls = Details.guide_balls
end
for index , ball in ipairs ( guide_balls ) do
ball : Hide ( )
end
self.instance : AtualizaPontos ( )
target_frame.instance : AtualizaPontos ( )
local color = color_red
local _R , _T , _L , _B = VPL ( self.instance , target_frame.instance ) , VPB ( self.instance , target_frame.instance ) , VPR ( self.instance , target_frame.instance ) , VPT ( self.instance , target_frame.instance )
if ( _R or _T or _L or _B ) then
color = color_green
end
for i = 0 , ( distance / pixels_per_arrow ) do
local x = distance - ( i * pixels_per_arrow )
x = x * cos ( angle )
local y = distance - ( i * pixels_per_arrow )
y = y * sin ( angle )
local ball = guide_balls [ i ]
if ( not ball ) then
ball = Details.overlay_frame : CreateTexture ( nil , " Overlay " )
ball : SetTexture ( [[Interface\AddOns\Details\images\icons]] )
ball : SetSize ( 16 , 16 )
ball : SetAlpha ( 0.3 )
ball : SetTexCoord ( 410 / 512 , 426 / 512 , 2 / 512 , 18 / 512 )
tinsert ( guide_balls , ball )
end
ball : ClearAllPoints ( )
ball : SetPoint ( " CENTER " , self , " CENTER " , x , y ) --baseframse center
ball : Show ( )
ball : SetVertexColor ( unpack ( color ) )
end
end
local tempo_movendo , precisa_ativar , instancia_alvo , tempo_fades , nao_anexados , flash_bounce , start_draw_lines , instance_ids_shown , need_show_group_guide
local movement_onupdate = function ( self , elapsed )
if ( start_draw_lines and start_draw_lines > 0.95 ) then
update_line ( self , instancia_alvo.baseframe )
elseif ( start_draw_lines ) then
start_draw_lines = start_draw_lines + elapsed
end
if ( instance_ids_shown and instance_ids_shown > 0.95 ) then
show_instance_ids ( )
instance_ids_shown = nil
if ( need_show_group_guide and not DetailsFramework.IsTimewalkWoW ( ) ) then
Details.MicroButtonAlert . Text : SetText ( Loc [ " STRING_WINDOW1ATACH_DESC " ] )
Details.MicroButtonAlert : SetPoint ( " bottom " , need_show_group_guide.baseframe , " top " , 0 , 30 )
Details.MicroButtonAlert : SetHeight ( 320 )
Details.MicroButtonAlert : Show ( )
need_show_group_guide = nil
end
elseif ( instance_ids_shown ) then
instance_ids_shown = instance_ids_shown + elapsed
end
if ( tempo_movendo and tempo_movendo < 0 ) then
if ( precisa_ativar ) then --se a inst�ncia estiver fechada
Details.FadeHandler . Fader ( instancia_alvo.baseframe , " ALPHA " , 0.15 )
Details.FadeHandler . Fader ( instancia_alvo.baseframe . cabecalho.ball , " ALPHA " , 0.15 )
Details.FadeHandler . Fader ( instancia_alvo.baseframe . cabecalho.atributo_icon , " ALPHA " , 0.15 )
instancia_alvo : SaveMainWindowPosition ( )
instancia_alvo : RestoreMainWindowPosition ( )
precisa_ativar = false
elseif ( tempo_fades ) then
if ( flash_bounce == 0 ) then
flash_bounce = 1
local tem_livre = false
for lado , livre in ipairs ( nao_anexados ) do
if ( livre ) then
if ( lado == 1 ) then
local texture = instancia_alvo.h_esquerda . texture
texture : ClearAllPoints ( )
if ( instancia_alvo.toolbar_side == 1 ) then
if ( instancia_alvo.show_statusbar ) then
texture : SetPoint ( " topright " , instancia_alvo.baseframe , " topleft " , 0 , 20 )
texture : SetPoint ( " bottomright " , instancia_alvo.baseframe , " bottomleft " , 0 , - 14 )
else
texture : SetPoint ( " topright " , instancia_alvo.baseframe , " topleft " , 0 , 20 )
texture : SetPoint ( " bottomright " , instancia_alvo.baseframe , " bottomleft " , 0 , 0 )
end
else
if ( instancia_alvo.show_statusbar ) then
texture : SetPoint ( " topright " , instancia_alvo.baseframe , " topleft " , 0 , 0 )
texture : SetPoint ( " bottomright " , instancia_alvo.baseframe , " bottomleft " , 0 , - 34 )
else
texture : SetPoint ( " topright " , instancia_alvo.baseframe , " topleft " , 0 , 0 )
texture : SetPoint ( " bottomright " , instancia_alvo.baseframe , " bottomleft " , 0 , - 20 )
end
end
instancia_alvo.h_esquerda : Flash ( 1 , 1 , 2.0 , false , 0 , 0 )
tem_livre = true
elseif ( lado == 2 ) then
local texture = instancia_alvo.h_baixo . texture
texture : ClearAllPoints ( )
if ( instancia_alvo.toolbar_side == 1 ) then
if ( instancia_alvo.show_statusbar ) then
texture : SetPoint ( " topleft " , instancia_alvo.baseframe , " bottomleft " , 0 , - 14 )
texture : SetPoint ( " topright " , instancia_alvo.baseframe , " bottomright " , 0 , - 14 )
else
texture : SetPoint ( " topleft " , instancia_alvo.baseframe , " bottomleft " , 0 , 0 )
texture : SetPoint ( " topright " , instancia_alvo.baseframe , " bottomright " , 0 , 0 )
end
else
if ( instancia_alvo.show_statusbar ) then
texture : SetPoint ( " topleft " , instancia_alvo.baseframe , " bottomleft " , 0 , - 34 )
texture : SetPoint ( " topright " , instancia_alvo.baseframe , " bottomright " , 0 , - 34 )
else
texture : SetPoint ( " topleft " , instancia_alvo.baseframe , " bottomleft " , 0 , - 20 )
texture : SetPoint ( " topright " , instancia_alvo.baseframe , " bottomright " , 0 , - 20 )
end
end
instancia_alvo.h_baixo : Flash ( 1 , 1 , 2.0 , false , 0 , 0 )
tem_livre = true
elseif ( lado == 3 ) then
local texture = instancia_alvo.h_direita . texture
texture : ClearAllPoints ( )
if ( instancia_alvo.toolbar_side == 1 ) then
if ( instancia_alvo.show_statusbar ) then
texture : SetPoint ( " topleft " , instancia_alvo.baseframe , " topright " , 0 , 20 )
texture : SetPoint ( " bottomleft " , instancia_alvo.baseframe , " bottomright " , 0 , - 14 )
else
texture : SetPoint ( " topleft " , instancia_alvo.baseframe , " topright " , 0 , 20 )
texture : SetPoint ( " bottomleft " , instancia_alvo.baseframe , " bottomright " , 0 , 0 )
end
else
if ( instancia_alvo.show_statusbar ) then
texture : SetPoint ( " topleft " , instancia_alvo.baseframe , " topright " , 0 , 0 )
texture : SetPoint ( " bottomleft " , instancia_alvo.baseframe , " bottomright " , 0 , - 34 )
else
texture : SetPoint ( " topleft " , instancia_alvo.baseframe , " topright " , 0 , 0 )
texture : SetPoint ( " bottomleft " , instancia_alvo.baseframe , " bottomright " , 0 , - 20 )
end
end
instancia_alvo.h_direita : Flash ( 1 , 1 , 2.0 , false , 0 , 0 )
tem_livre = true
elseif ( lado == 4 ) then
local texture = instancia_alvo.h_cima . texture
texture : ClearAllPoints ( )
if ( instancia_alvo.toolbar_side == 1 ) then
texture : SetPoint ( " bottomleft " , instancia_alvo.baseframe , " topleft " , 0 , 20 )
texture : SetPoint ( " bottomright " , instancia_alvo.baseframe , " topright " , 0 , 20 )
else
texture : SetPoint ( " bottomleft " , instancia_alvo.baseframe , " topleft " , 0 , 0 )
texture : SetPoint ( " bottomright " , instancia_alvo.baseframe , " topright " , 0 , 0 )
end
instancia_alvo.h_cima : Flash ( 1 , 1 , 2.0 , false , 0 , 0 )
tem_livre = true
end
end
end
if ( tem_livre ) then
if ( not Details.snap_alert . playing ) then
instancia_alvo : SnapAlert ( )
Details.snap_alert . playing = true
if ( not DetailsFramework.IsTimewalkWoW ( ) ) then
Details.MicroButtonAlert . Text : SetText ( string.format ( Loc [ " STRING_ATACH_DESC " ] , self.instance . meu_id , instancia_alvo.meu_id ) )
Details.MicroButtonAlert : SetPoint ( " bottom " , instancia_alvo.baseframe . cabecalho.modo_selecao . widget , " top " , 0 , 18 )
Details.MicroButtonAlert : SetHeight ( 200 )
Details.MicroButtonAlert : Show ( )
end
end
end
end
tempo_movendo = 1
else
self : SetScript ( " OnUpdate " , nil )
tempo_movendo = 1
end
elseif ( tempo_movendo ) then
tempo_movendo = tempo_movendo - elapsed
end
end
local function move_janela ( baseframe , iniciando , instancia , just_updating )
instancia_alvo = Details.tabela_instancias [ instancia.meu_id - 1 ]
if ( Details.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 = Details : GetLowerInstanceNumber ( )
instancia_alvo : RestauraJanela ( instancia_alvo.meu_id , true )
if ( instancia_alvo : IsSoloMode ( ) ) then
Details.SoloTables : switch ( )
end
instancia_alvo.ativa = false
instancia_alvo : SaveMainWindowPosition ( )
instancia_alvo : RestoreMainWindowPosition ( )
instancia_alvo : ShutDown ( )
Details.FadeHandler . Fader ( instancia_alvo.baseframe , 1 )
Details.FadeHandler . Fader ( instancia_alvo.rowframe , parseRowFrameAlpha ( 1 ) )
Details.FadeHandler . Fader ( instancia_alvo.baseframe . cabecalho.ball , 1 )
need_start = false
end
baseframe : SetScript ( " OnUpdate " , movement_onupdate )
else
--eh a instancia 1
local got_snap
for side , instance_id in pairs ( instancia.snap ) do
if ( instance_id ) then
got_snap = true
end
end
need_show_group_guide = nil
if ( not got_snap ) then
need_show_group_guide = instancia
end
tempo_movendo = nil
start_draw_lines = nil
instance_ids_shown = 0
baseframe : SetScript ( " OnUpdate " , movement_onupdate )
end
else
baseframe : StopMovingOrSizing ( )
baseframe.isMoving = false
baseframe : SetScript ( " OnUpdate " , nil )
if ( Details.guide_balls ) then
for index , ball in ipairs ( Details.guide_balls ) do
ball : Hide ( )
end
end
for _ , ins in Details : 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 ( )
instancia_alvo : 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 Details : GetTutorialCVar ( " WINDOW_GROUP_MAKING1 " ) ) then
Details : 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 ( )
Details.OnEnterMainWindow ( instancia_alvo )
end
end
for _ , esta_instancia in ipairs ( Details.tabela_instancias ) do
if ( not esta_instancia : IsAtiva ( ) and esta_instancia.iniciada ) then
esta_instancia : ResetaGump ( )
Details.FadeHandler . Fader ( esta_instancia.baseframe , " in " , 0.15 )
Details.FadeHandler . Fader ( esta_instancia.baseframe . cabecalho.ball , " in " , 0.15 )
Details.FadeHandler . Fader ( esta_instancia.baseframe . cabecalho.atributo_icon , " in " , 0.15 )
if ( esta_instancia.modo == modo_raid ) then
Details.raid = nil
elseif ( esta_instancia.modo == modo_alone ) then
Details.SoloTables : switch ( )
Details.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 ( Details.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
Details.snap_alert . playing = false
Details.snap_alert . animIn : Stop ( )
Details.snap_alert . animOut : Play ( )
if ( not DetailsFramework.IsTimewalkWoW ( ) ) then
Details.MicroButtonAlert : Hide ( )
end
if ( instancia_alvo and instancia_alvo.ativa and instancia_alvo.baseframe ) then
instancia_alvo.h_esquerda : Stop ( )
instancia_alvo.h_baixo : Stop ( )
instancia_alvo.h_direita : Stop ( )
instancia_alvo.h_cima : Stop ( )
end
end
end
Details.move_janela_func = move_janela
local BGFrame_scripts_onenter = function ( self )
OnEnterMainWindow ( self._instance , self )
end
local BGFrame_scripts_onleave = function ( self )
OnLeaveMainWindow ( self._instance , self )
end
local BGFrame_scripts_onmousedown = function ( self , button )
-- /run Details.disable_stretch_from_toolbar = true
if ( self.is_toolbar and self._instance . baseframe.isLocked and button == " LeftButton " and not Details.disable_stretch_from_toolbar ) then
return self._instance . baseframe.button_stretch : GetScript ( " OnMouseDown " ) ( self._instance . baseframe.button_stretch , " LeftButton " )
end
if ( self._instance . baseframe.isMoving ) then
move_janela ( self._instance . baseframe , false , self._instance )
self._instance : SaveMainWindowPosition ( )
return
end
if ( not self._instance . baseframe.isLocked and button == " LeftButton " ) then
move_janela ( self._instance . baseframe , true , self._instance )
if ( self.is_toolbar ) then
if ( self._instance . attribute_text.enabled and self._instance . attribute_text.side == 1 and self._instance . toolbar_side == 1 ) then
self._instance . menu_attribute_string : SetPoint ( " bottomleft " , self._instance . baseframe.cabecalho . ball , " bottomright " , self._instance . attribute_text.anchor [ 1 ] + 1 , self._instance . attribute_text.anchor [ 2 ] - 1 )
end
end
elseif ( button == " RightButton " ) then
if ( self.is_toolbar and not Details.disable_alldisplays_window ) then
self._instance : ShowAllSwitch ( )
else
if ( Details.switch . current_instancia and Details.switch . current_instancia == self._instance ) then
Details.switch : CloseMe ( )
else
Details.switch : ShowMe ( self._instance )
end
end
end
end
local BGFrame_scripts_onmouseup = function ( self , button )
if ( self.is_toolbar and self._instance . baseframe.isLocked and button == " LeftButton " ) then
if ( DetailsWindowLockPopUp1 and DetailsWindowLockPopUp1 : IsShown ( ) ) then
_G [ " DetailsWindowLockPopUp1 " ] : Hide ( )
end
return self._instance . baseframe.button_stretch : GetScript ( " OnMouseUp " ) ( self._instance . baseframe.button_stretch , " LeftButton " )
end
if ( self._instance . baseframe.isMoving ) then
move_janela ( self._instance . baseframe , false , self._instance ) --novo movedor da janela
self._instance : SaveMainWindowPosition ( )
if ( self.is_toolbar ) then
if ( self._instance . attribute_text.enabled and self._instance . attribute_text.side == 1 and self._instance . toolbar_side == 1 ) then
self._instance . menu_attribute_string : SetPoint ( " bottomleft " , self._instance . baseframe.cabecalho . ball , " bottomright " , self._instance . attribute_text.anchor [ 1 ] , self._instance . attribute_text.anchor [ 2 ] )
end
end
end
end
local function BGFrame_scripts ( BG , baseframe , instancia )
BG._instance = instancia
BG : SetScript ( " OnEnter " , BGFrame_scripts_onenter )
BG : SetScript ( " OnLeave " , BGFrame_scripts_onleave )
BG : SetScript ( " OnMouseDown " , BGFrame_scripts_onmousedown )
BG : SetScript ( " OnMouseUp " , BGFrame_scripts_onmouseup )
end
function gump : RegisterForDetailsMove ( frame , instancia )
frame : SetScript ( " OnMouseDown " , function ( frame , button )
if ( not instancia.baseframe . isLocked and button == " LeftButton " ) then
move_janela ( instancia.baseframe , true , instancia ) --novo movedor da janela
end
end )
frame : SetScript ( " OnMouseUp " , function ( frame )
if ( instancia.baseframe . isMoving ) then
move_janela ( instancia.baseframe , false , instancia ) --novo movedor da janela
instancia : SaveMainWindowPosition ( )
end
end )
end
--scripts do base frame
local BFrame_scripts_onsizechange = function ( self )
self._instance : SaveMainWindowSize ( )
self._instance : ReajustaGump ( )
self._instance . oldwith = self : GetWidth ( )
Details : SendEvent ( " DETAILS_INSTANCE_SIZECHANGED " , nil , self._instance )
self._instance : RefreshAttributeTextSize ( )
end
local BFrame_scripts_onenter = function ( self )
OnEnterMainWindow ( self._instance , self )
end
local BFrame_scripts_onleave = function ( self )
OnLeaveMainWindow ( self._instance , self )
end
local BFrame_scripts_onmousedown = function ( self , button )
if ( not self.isLocked and button == " LeftButton " ) then
move_janela ( self , true , self._instance )
end
end
local BFrame_scripts_onmouseup = function ( self , button )
if ( self.isMoving ) then
move_janela ( self , false , self._instance ) --novo movedor da janela
self._instance : SaveMainWindowPosition ( )
end
end
local function BFrame_scripts ( baseframe , instancia )
baseframe._instance = instancia
baseframe : SetScript ( " OnSizeChanged " , BFrame_scripts_onsizechange )
baseframe : SetScript ( " OnEnter " , BFrame_scripts_onenter )
baseframe : SetScript ( " OnLeave " , BFrame_scripts_onleave )
baseframe : SetScript ( " OnMouseDown " , BFrame_scripts_onmousedown )
baseframe : SetScript ( " OnMouseUp " , BFrame_scripts_onmouseup )
end
local function backgrounddisplay_scripts ( backgrounddisplay , baseframe , instancia )
backgrounddisplay : SetScript ( " OnEnter " , function ( self )
OnEnterMainWindow ( instancia , self )
end )
backgrounddisplay : SetScript ( " OnLeave " , function ( self )
OnLeaveMainWindow ( instancia , self )
end )
end
local function instancias_horizontais ( instancia , largura , esquerda , direita )
if ( esquerda ) then
for lado , esta_instancia in pairs ( instancia.snap ) do
if ( lado == 1 ) then --movendo para esquerda
local instancia = Details.tabela_instancias [ esta_instancia ]
instancia.baseframe : SetWidth ( largura )
instancia.auto_resize = true
instancia : ReajustaGump ( )
instancia.auto_resize = false
instancias_horizontais ( instancia , largura , true , false )
Details : 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 = Details.tabela_instancias [ esta_instancia ]
instancia.baseframe : SetWidth ( largura )
instancia.auto_resize = true
instancia : ReajustaGump ( )
instancia.auto_resize = false
instancias_horizontais ( instancia , largura , false , true )
Details : 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 = Details.tabela_instancias [ esta_instancia ]
if ( instancia : IsEnabled ( ) ) then
instancia.baseframe : SetHeight ( altura )
instancia.auto_resize = true
instancia : ReajustaGump ( )
instancia.auto_resize = false
instancias_verticais ( instancia , altura , true , false )
Details : SendEvent ( " DETAILS_INSTANCE_SIZECHANGED " , nil , instancia )
end
end
end
end
if ( direita ) then
for lado , esta_instancia in pairs ( instancia.snap ) do
if ( lado == 3 ) then --movendo para esquerda
local instancia = Details.tabela_instancias [ esta_instancia ]
if ( instancia : IsEnabled ( ) ) then
instancia.baseframe : SetHeight ( altura )
instancia.auto_resize = true
instancia : ReajustaGump ( )
instancia.auto_resize = false
instancias_verticais ( instancia , altura , false , true )
Details : SendEvent ( " DETAILS_INSTANCE_SIZECHANGED " , nil , instancia )
end
end
end
end
end
local check_snap_side = function ( instanceid , snap , id , container )
local instance = Details : GetInstance ( instanceid )
if ( instance and instance.snap [ snap ] and instance.snap [ snap ] == id ) then
tinsert ( container , instance )
return true
end
end
function Details : InstanciasVerticais ( instance )
instance = self or instance
local on_top = { }
local on_bottom = { }
local id = instance : GetId ( )
--lower instances
local this_instance = Details : 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 = Details : 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 , Details : 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 , Details : 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 Details : 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 = Details.tabela_instancias [ instancia.meu_id - 1 ]
if ( check_index_anterior and check_index_anterior : IsEnabled ( ) ) then --possiu uma inst�ncia antes de mim
if ( check_index_anterior.snap [ 3 ] and check_index_anterior.snap [ 3 ] == instancia.meu_id ) then --o index negativo vai para a esquerda
for i = instancia.meu_id - 1 , 1 , - 1 do
local esta_instancia = Details.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 = Details.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 = Details.tabela_instancias [ instancia.meu_id + 1 ]
if ( check_index_posterior and check_index_posterior : IsEnabled ( ) ) then
if ( check_index_posterior.snap [ 3 ] and check_index_posterior.snap [ 3 ] == instancia.meu_id ) then --o index posterior vai para a esquerda
for i = instancia.meu_id + 1 , # Details.tabela_instancias do
local esta_instancia = Details.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 , # Details.tabela_instancias do
local esta_instancia = Details.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 ( Details.disable_lock_ungroup_buttons ) then
return
end
if ( not self : GetParent ( ) . isLocked and button == " LeftButton " and self._instance . modo ~= Details._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 Details.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
Details : SendEvent ( " DETAILS_INSTANCE_STARTRESIZE " , nil , self._instance )
if ( Details.update_speed > 0.3 ) then
Details : SetWindowUpdateSpeed ( 0.3 , true )
Details.resize_changed_update_speed = true
end
end
end
local resizeScriptsOnMouseUp = function ( self , button )
if ( Details.disable_lock_ungroup_buttons ) then
return
end
if ( self.afundado ) then
self.afundado = false
if ( self._myside == " > " ) then
if ( self._instance . rolagem and Details.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 ( )
Details : 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
Details : SendEvent ( " DETAILS_INSTANCE_ENDRESIZE " , nil , self._instance )
if ( self._instance . eh_tudo ) then
for _ , esta_instancia in ipairs ( Details.tabela_instancias ) do
if ( esta_instancia : IsAtiva ( ) and esta_instancia.modo ~= Details._detalhes_props [ " MODO_ALONE " ] ) then
esta_instancia.baseframe : ClearAllPoints ( )
esta_instancia : SaveMainWindowPosition ( )
esta_instancia : RestoreMainWindowPosition ( )
end
end
for _ , esta_instancia in ipairs ( Details.tabela_instancias ) do
if ( esta_instancia : IsAtiva ( ) and esta_instancia ~= self._instance and esta_instancia.modo ~= Details._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
Details : SendEvent ( " DETAILS_INSTANCE_SIZECHANGED " , nil , esta_instancia )
end
end
self._instance . eh_tudo = nil
end
self._instance : BaseFrameSnap ( )
for _ , esta_instancia in ipairs ( Details.tabela_instancias ) do
if ( esta_instancia : IsAtiva ( ) ) then
esta_instancia : SaveMainWindowPosition ( )
esta_instancia : RestoreMainWindowPosition ( )
end
end
if ( Details.resize_changed_update_speed ) then
Details : SetWindowUpdateSpeed ( false , true )
Details.resize_changed_update_speed = nil
end
end
end
local resizeScriptsOnHide = function ( self )
if ( self.going_hide ) then
_G.GameCooltip : ShowMe ( false )
self.going_hide = nil
end
end
local resizeScriptsOnEnter = function ( self )
if ( Details.disable_lock_ungroup_buttons ) then
return
end
if ( self._instance . modo ~= Details._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
Details : CooltipPreset ( 2.1 )
GameCooltip : AddFromTable ( resizeTooltip )
GameCooltip : SetOwner ( self )
GameCooltip : ShowCooltip ( )
end
end
local resizeScriptsOnLeave = 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 setWindowResizeScripts = function ( resizer , instancia , scrollbar , side , baseframe )
resizer._instance = instancia
resizer._myside = side
resizer : SetScript ( " OnMouseDown " , resize_scripts_onmousedown )
resizer : SetScript ( " OnMouseUp " , resizeScriptsOnMouseUp )
resizer : SetScript ( " OnHide " , resizeScriptsOnHide )
resizer : SetScript ( " OnEnter " , resizeScriptsOnEnter )
resizer : SetScript ( " OnLeave " , resizeScriptsOnLeave )
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 ( Details.disable_lock_ungroup_buttons ) then
return
end
if ( self.instancia . modo ~= Details._detalhes_props [ " MODO_ALONE " ] and not self.mostrando ) then
OnEnterMainWindow ( self.instancia , self )
self.mostrando = true
self.label : SetTextColor ( 1 , 1 , 1 , .6 )
Details : CooltipPreset ( 2.1 )
GameCooltip : SetOption ( " FixedWidth " , 180 )
GameCooltip : AddFromTable ( lockButtonTooltip )
GameCooltip : SetOwner ( self )
GameCooltip : ShowCooltip ( )
end
end
local lockFunctionOnLeave = function ( self )
if ( self.mostrando ) then
self.going_hide = true
OnLeaveMainWindow ( self.instancia , self )
self.label : SetTextColor ( .6 , .6 , .6 , .7 )
self.mostrando = false
GameCooltip : ShowMe ( false )
end
end
local lockFunctionOnHide = function ( self )
if ( self.going_hide ) then
GameCooltip : ShowMe ( false )
self.going_hide = nil
end
end
function Details : DelayOptionsRefresh ( instance , noReopen )
if ( _G.DetailsOptionsWindow and _G.DetailsOptionsWindow : IsShown ( ) ) then
Details : ScheduleTimer ( " OpenOptionsWindow " , 0.1 , { instance or _G.DetailsOptionsWindow . instance , noReopen } )
end
end
function Details : RefreshLockedState ( )
if ( not self.baseframe and self.meu_id and self : IsEnabled ( ) ) then
self : ScheduleTimer ( " RefreshLockedState " , 1 )
return
elseif ( not self.baseframe ) then
return
end
if ( self.baseframe . isLocked ) then
self.baseframe . resize_direita : EnableMouse ( false )
self.baseframe . resize_esquerda : EnableMouse ( false )
else
self.baseframe . resize_direita : EnableMouse ( true )
self.baseframe . resize_esquerda : EnableMouse ( true )
end
return true
end
local lockFunctionOnClick = function ( button , button_type , button2 , isFromOptionsButton )
--isFromOptionsButton is true when the call if from the button in the display section of the options panel
if ( Details.disable_lock_ungroup_buttons and isFromOptionsButton ~= true ) then
return
end
if ( not button : GetParent ( ) . instance ) then
button = button2 --from any other button
end
local baseframe = button : GetParent ( )
if ( baseframe.isLocked ) then
baseframe.isLocked = false
baseframe.instance . isLocked = false
button.label : SetText ( Loc [ " STRING_LOCK_WINDOW " ] )
button : SetWidth ( button.label : GetStringWidth ( ) + 2 )
if ( not Details.disable_lock_ungroup_buttons ) then
baseframe.resize_direita : SetAlpha ( 1 )
baseframe.resize_esquerda : SetAlpha ( 1 )
end
button : ClearAllPoints ( )
button : SetPoint ( " right " , baseframe.resize_direita , " left " , - 1 , 1.5 )
else
--tutorial
if ( not Details : GetTutorialCVar ( " WINDOW_LOCK_UNLOCK1 " ) and not Details.initializing ) then
Details : SetTutorialCVar ( " WINDOW_LOCK_UNLOCK1 " , true )
local lock_tutorial = CreateFrame ( " frame " , " DetailsWindowLockPopUp1 " , baseframe , " DetailsHelpBoxTemplate " )
lock_tutorial.ArrowUP : Show ( )
lock_tutorial.ArrowGlowUP : Show ( )
lock_tutorial.Text : SetText ( Loc [ " STRING_MINITUTORIAL_WINDOWS2 " ] )
lock_tutorial : SetPoint ( " bottom " , baseframe.UPFrame , " top " , 0 , 20 )
lock_tutorial : Show ( )
end
baseframe.isLocked = true
baseframe.instance . isLocked = true
button.label : SetText ( Loc [ " STRING_UNLOCK_WINDOW " ] )
button : SetWidth ( button.label : GetStringWidth ( ) + 2 )
button : ClearAllPoints ( )
button : SetPoint ( " bottomright " , baseframe , " bottomright " , - 3 , 0 )
baseframe.resize_direita : SetAlpha ( 0 )
baseframe.resize_esquerda : SetAlpha ( 0 )
end
baseframe.instance : RefreshLockedState ( )
Details : DelayOptionsRefresh ( )
end
Details.lock_instance_function = lockFunctionOnClick
local unSnapButtonTooltip = {
{ text = Loc [ " STRING_DETACH_DESC " ] } ,
{ icon = [[Interface\AddOns\Details\images\icons]] , width = 14 , height = 14 , l = 160 / 512 , r = 179 / 512 , t = 142 / 512 , b = 162 / 512 } ,
}
local unSnapButtonOnEnter = function ( self )
if ( Details.disable_lock_ungroup_buttons ) then
return
end
local haveSnap = false
for _ , instancia_id in pairs ( self.instancia . snap ) do
if ( instancia_id ) then
haveSnap = true
break
end
end
if ( not haveSnap ) then
OnEnterMainWindow ( self.instancia , self )
self.mostrando = true
return
end
OnEnterMainWindow ( self.instancia , self )
self.mostrando = true
Details : CooltipPreset ( 2.1 )
GameCooltip : SetOption ( " FixedWidth " , 180 )
GameCooltip : AddFromTable ( unSnapButtonTooltip )
GameCooltip : ShowCooltip ( self , " tooltip " )
end
local unSnapButtonOnLeave = function ( self )
if ( self.mostrando ) then
OnLeaveMainWindow ( self.instancia , self )
self.mostrando = false
GameCooltip : Hide ( )
end
end
--this should run only when the mouse is over a instance bar
local shiftMonitor = function ( self )
if ( not self : IsMouseOver ( ) ) then
self : SetScript ( " OnUpdate " , nil )
return
end
if ( _IsShiftKeyDown ( ) ) then
if ( not self.showing_allspells ) then
self.showing_allspells = true
local instancia = Details : GetInstance ( self.instance_id )
instancia : MontaTooltip ( self , self.row_id , " shift " )
end
elseif ( self.showing_allspells ) then
self.showing_allspells = false
local instancia = Details : 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 = Details : GetInstance ( self.instance_id )
instancia : MontaTooltip ( self , self.row_id , " ctrl " )
end
elseif ( self.showing_alltargets ) then
self.showing_alltargets = false
local instancia = Details : 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 = Details : GetInstance ( self.instance_id )
instancia : MontaTooltip ( self , self.row_id , " alt " )
end
elseif ( self.showing_allpets ) then
self.showing_allpets = false
local instancia = Details : GetInstance ( self.instance_id )
instancia : MontaTooltip ( self , self.row_id )
end
end
local barra_backdrop_onenter = {
bgFile = [[Interface\Tooltips\UI-Tooltip-Background]] ,
tile = true , tileSize = 16 ,
insets = { left = 1 , right = 1 , top = 0 , bottom = 1 }
}
local barra_backdrop_onleave = {
bgFile = " " ,
edgeFile = " " , tile = true , tileSize = 16 , edgeSize = 32 ,
insets = { left = 1 , right = 1 , top = 0 , bottom = 1 }
}
--pre creating the truncate frame
Details.left_anti_truncate = CreateFrame ( " frame " , " DetailsLeftTextAntiTruncate " , UIParent , " BackdropTemplate " )
Details.left_anti_truncate : SetBackdrop ( defaultBackdropSt )
Details.left_anti_truncate : SetBackdropColor ( 0 , 0 , 0 , 0.8 )
Details.left_anti_truncate : SetFrameStrata ( " FULLSCREEN " )
Details.left_anti_truncate . text = Details.left_anti_truncate : CreateFontString ( nil , " overlay " , " GameFontNormal " )
Details.left_anti_truncate . text : SetPoint ( " left " , Details.left_anti_truncate , " left " , 3 , 0 )
--@self: instance line (row)
local lineScript_Onenter = function ( self )
self.mouse_over = true
OnEnterMainWindow ( self._instance , self )
self._instance : MontaTooltip ( self , self.row_id )
self : SetBackdrop ( barra_backdrop_onenter )
self : SetBackdropColor ( 0.588 , 0.588 , 0.588 , 0.7 )
if ( not Details.instances_disable_bar_highlight ) then
self.textura : SetBlendMode ( " ADD " )
end
local lefttext = self.lineText1
if ( lefttext : IsTruncated ( ) ) then
if ( not Details.left_anti_truncate ) then
end
Details : SetFontSize ( Details.left_anti_truncate . text , self._instance . row_info.font_size )
Details : SetFontFace ( Details.left_anti_truncate . text , self._instance . row_info.font_face_file )
Details : SetFontColor ( Details.left_anti_truncate . text , lefttext : GetTextColor ( ) )
Details.left_anti_truncate : SetPoint ( " left " , lefttext , " left " , - 3 , 0 )
Details.left_anti_truncate . text : SetText ( lefttext : GetText ( ) )
Details.left_anti_truncate : SetSize ( Details.left_anti_truncate . text : GetStringWidth ( ) + 3 , self._instance . row_info.height )
Details.left_anti_truncate : Show ( )
lefttext.untruncated = true
end
self : SetScript ( " OnUpdate " , shiftMonitor )
local classIcon = self : GetClassIcon ( )
self.iconHighlight : SetTexture ( classIcon : GetTexture ( ) )
self.iconHighlight : SetTexCoord ( classIcon : GetTexCoord ( ) )
self.iconHighlight : SetVertexColor ( classIcon : GetVertexColor ( ) )
self.iconHighlight : SetBlendMode ( " ADD " )
self.iconHighlight : SetAlpha ( 0.3 )
self.iconHighlight : Show ( )
end
local lineScript_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.lineText1
if ( lefttext.untruncated ) then
lefttext.untruncated = nil
Details.left_anti_truncate : Hide ( )
end
self.iconHighlight : Hide ( )
end
local lineScript_Onmousedown = function ( self , button )
if ( self.fading_in ) then
return
end
local lefttext = self.lineText1
if ( lefttext.untruncated ) then
lefttext.untruncated = nil
Details.left_anti_truncate : Hide ( )
end
if ( button == " RightButton " ) then
return Details.switch : ShowMe ( self._instance )
elseif ( button == " LeftButton " ) then
end
self._instance : HandleTextsOnMouseClick ( self , " down " )
self.mouse_down = GetTime ( )
self.button = button
local x , y = _GetCursorPosition ( )
self.x = floor ( x )
self.y = floor ( y )
if ( not self._instance . baseframe.isLocked ) then
GameCooltip : Hide ( )
move_janela ( self._instance . baseframe , true , self._instance )
end
end
local lineScript_Onmouseup = function ( self , button )
local is_shift_down = _IsShiftKeyDown ( )
local is_control_down = _IsControlKeyDown ( )
if ( self._instance . baseframe.isMoving ) then
move_janela ( self._instance . baseframe , false , self._instance )
self._instance : SaveMainWindowPosition ( )
if ( self._instance : MontaTooltip ( self , self.row_id ) ) then
GameCooltip : Show ( self , 1 )
end
end
self._instance : HandleTextsOnMouseClick ( self , " up " )
local x , y = _GetCursorPosition ( )
x = floor ( x )
y = floor ( y )
if ( self.mouse_down and ( self.mouse_down + 0.4 > GetTime ( ) and ( x == self.x and y == self.y ) ) or ( x == self.x and y == self.y ) ) then
if ( self.button == " LeftButton " or self.button == " MiddleButton " ) then
if ( self._instance . atributo == 5 or is_shift_down ) then
--report
if ( self._instance . atributo == 5 and is_shift_down ) then
local custom = self._instance : GetCustomObject ( )
if ( custom and custom.on_shift_click ) then
local func = loadstring ( custom.on_shift_click )
if ( func ) then
local successful , errortext = pcall ( func , self , self.minha_tabela , self._instance )
if ( not successful ) then
Details : Msg ( " error occurred custom script shift+click: " , errortext )
end
return
end
end
end
if ( Details.row_singleclick_overwrite [ self._instance . atributo ] and type ( Details.row_singleclick_overwrite [ self._instance . atributo ] [ self._instance . sub_atributo ] ) == " function " ) then
return Details.row_singleclick_overwrite [ self._instance . atributo ] [ self._instance . sub_atributo ] ( _ , self.minha_tabela , self._instance , is_shift_down , is_control_down )
end
return Details : ReportSingleLine ( self._instance , self )
end
if ( not self.minha_tabela ) then
return Details : Msg ( " this bar is waiting update. " )
end
self._instance : AbreJanelaInfo ( self.minha_tabela , nil , nil , is_shift_down , is_control_down )
end
end
end
local lineScript_Onclick = function ( self , button )
end
local lineScript_Onshow = function ( self )
--search key: ~model
if ( self.using_upper_3dmodels ) then
self.modelbox_high : SetModel ( self._instance . row_info.models . upper_model )
self.modelbox_high : SetAlpha ( self._instance . row_info.models . upper_alpha )
end
if ( self.using_lower_3dmodels ) then
self.modelbox_low : SetModel ( self._instance . row_info.models . lower_model )
self.modelbox_low : SetAlpha ( self._instance . row_info.models . lower_alpha )
end
end
function Details : HandleTextsOnMouseClick ( row , type )
if ( self.bars_inverted ) then
if ( type == " down " ) then
row.lineText4 : SetPoint ( " left " , row.statusbar , " left " , self.fontstrings_text4_anchor + 2 , self.row_info . text_yoffset - 1 )
if ( self.row_info . no_icon ) then
row.lineText1 : SetPoint ( " right " , row.statusbar , " right " , - self.row_info . textL_offset - 1 , self.row_info . text_yoffset - 1 )
else
row.lineText1 : SetPoint ( " right " , row.icone_classe , " left " , - self.row_info . textL_offset - 1 , self.row_info . text_yoffset - 1 )
end
elseif ( type == " up " ) then
row.lineText4 : SetPoint ( " left " , row.statusbar , " left " , self.fontstrings_text4_anchor + 1 , self.row_info . text_yoffset )
if ( self.row_info . no_icon ) then
row.lineText1 : SetPoint ( " right " , row.statusbar , " right " , - self.row_info . textL_offset - 2 , self.row_info . text_yoffset )
else
row.lineText1 : SetPoint ( " right " , row.icone_classe , " left " , - self.row_info . textL_offset - 2 , self.row_info . text_yoffset )
end
end
else
if ( type == " down " ) then
row.lineText4 : SetPoint ( " right " , row.statusbar , " right " , - self.fontstrings_text4_anchor + 1 , self.row_info . text_yoffset - 1 )
if ( self.row_info . no_icon ) then
row.lineText1 : SetPoint ( " left " , row.statusbar , " left " , self.row_info . textL_offset + 3 , self.row_info . text_yoffset - 1 )
else
row.lineText1 : SetPoint ( " left " , row.icone_classe , " right " , self.row_info . textL_offset + 4 , self.row_info . text_yoffset - 1 )
end
elseif ( type == " up " ) then
row.lineText4 : SetPoint ( " right " , row.statusbar , " right " , - self.fontstrings_text4_anchor , self.row_info . text_yoffset )
if ( self.row_info . no_icon ) then
row.lineText1 : SetPoint ( " left " , row.statusbar , " left " , self.row_info . textL_offset + 2 , self.row_info . text_yoffset )
else
row.lineText1 : SetPoint ( " left " , row.icone_classe , " right " , self.row_info . textL_offset + 3 , self.row_info . text_yoffset )
end
end
end
end
local setBarValue = function ( self , value )
value = Clamp ( value , 0 , 100 )
self.statusbar : SetValue ( value )
self.statusbar . value = value
if ( self.using_upper_3dmodels ) then
local width = self : GetWidth ( )
local p = ( width / 100 ) * value
self.modelbox_high : SetPoint ( " bottomright " , self , " bottomright " , p - width , 0 )
end
end
-- ~talent ~icon
--code for when hovering over the class/spec icon in the player bar
local iconFrame_OnEnter = function ( self )
local actor = self.row . minha_tabela
if ( actor ) then
if ( actor.frags ) then
elseif ( actor.is_custom or actor.byspell or actor.damage_spellid ) then
local spellid = actor.damage_spellid or actor.id or actor [ 1 ]
if ( spellid ) then
GameTooltip : SetOwner ( self , " ANCHOR_TOPLEFT " , 0 , 10 )
Details : GameTooltipSetSpellByID ( spellid )
GameTooltip : Show ( )
end
elseif ( actor.dead_at ) then
elseif ( actor.nome ) then --ensure it's an actor table
local serial = actor.serial
local name = actor : name ( )
local class = actor : class ( )
local spec = Details.cached_specs [ serial ] or actor.spec
local talents = Details.cached_talents [ serial ]
local ilvl = Details.ilevel : GetIlvl ( serial )
local iconSize = 20
local instance = Details : GetInstance ( self.row . instance_id )
instance : BuildInstanceBarTooltip ( self )
local classIcon , classL , classR , classT , classB = Details : GetClassIcon ( class )
local specId , specName , specDescription , specIcon , specRole , specClass = DetailsFramework.GetSpecializationInfoByID ( spec or 0 ) --thanks pas06
local specL , specR , specT , specB
if ( specId ) then
if ( Details.class_specs_coords [ specId ] ) then
specL , specR , specT , specB = unpack ( Details.class_specs_coords [ specId ] )
end
end
GameCooltip : AddLine ( name , specName )
if ( class == " UNKNOW " or class == " UNGROUPPLAYER " ) then
GameCooltip : AddIcon ( [[Interface\AddOns\Details\images\classes_small_alpha]] , 1 , 1 , iconSize , iconSize , 0 , 0.25 , 0.75 , 1 )
else
GameCooltip : AddIcon ( [[Interface\AddOns\Details\images\classes_small_alpha]] , 1 , 1 , iconSize , iconSize , classL , classR , classT , classB )
end
if ( specL ) then
GameCooltip : AddIcon ( [[Interface\AddOns\Details\images\spec_icons_normal_alpha]] , 1 , 2 , iconSize , iconSize , specL , specR , specT , specB )
else
GameCooltip : AddIcon ( [[Interface\GossipFrame\IncompleteQuestIcon]] , 1 , 2 , iconSize , iconSize )
end
Details : AddTooltipHeaderStatusbar ( )
local talentString = " "
if ( talents and not ( DetailsFramework.IsTBCWow ( ) or DetailsFramework.IsWotLKWow ( ) ) ) then
for i = 1 , # talents do
local talentID , talentName , texture , selected , available = GetTalentInfoByID ( talents [ i ] )
if ( texture ) then
talentString = talentString .. " |T " .. texture .. " : " .. 24 .. " : " .. 24 .. " :0:0:64:64:4:60:4:60|t "
end
end
end
local gotInfo
local localizedItemLevelString = _G.STAT_AVERAGE_ITEM_LEVEL
if ( ilvl ) then
GameCooltip : AddLine ( localizedItemLevelString .. " : " , ilvl and " |T: " .. 24 .. " : " .. 24 .. " :0:0:64:64:4:60:4:60|t " .. floor ( ilvl.ilvl ) or " |T: " .. 24 .. " : " .. 24 .. " :0:0:64:64:4:60:4:60|t ?? " ) --Loc from GlobalStrings.lua
GameCooltip : AddIcon ( [[]] , 1 , 1 , 1 , 20 )
Details : AddTooltipBackgroundStatusbar ( )
gotInfo = true
else
GameCooltip : AddLine ( localizedItemLevelString .. " : " , 0 )
GameCooltip : AddIcon ( [[]] , 1 , 1 , 1 , 20 )
Details : AddTooltipBackgroundStatusbar ( )
gotInfo = true
end
local localizedTalentsString = _G.TALENTS
if ( talentString ~= " " ) then
GameCooltip : AddLine ( localizedTalentsString .. " : " , talentString )
GameCooltip : AddIcon ( [[]] , 1 , 1 , 1 , 24 )
Details : AddTooltipBackgroundStatusbar ( )
gotInfo = true
elseif ( gotInfo ) then
GameCooltip : AddLine ( localizedTalentsString .. " : " , Loc [ " STRING_QUERY_INSPECT_REFRESH " ] )
GameCooltip : AddIcon ( [[]] , 1 , 1 , 1 , 24 )
Details : AddTooltipBackgroundStatusbar ( )
end
GameCooltip : SetOption ( " StatusBarTexture " , [[Interface\AddOns\Details\images\bar_skyline]] )
GameCooltip : SetOption ( " MinButtonHeight " , 15 )
GameCooltip : SetOption ( " IgnoreButtonAutoHeight " , false )
local height = 66
if ( not gotInfo ) then
GameCooltip : AddLine ( Loc [ " STRING_QUERY_INSPECT " ] , nil , 1 , " orange " )
GameCooltip : AddIcon ( [[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]] , 1 , 1 , 12 , iconSize , 8 / 512 , 70 / 512 , 224 / 512 , 306 / 512 )
height = 54
end
local combat = instance : GetShowingCombat ( )
local diff = combat : GetDifficulty ( )
local attribute , subattribute = instance : GetDisplay ( )
--check if is a raid encounter and if is heroic or mythic
if ( diff and ( diff == 15 or diff == 16 ) and ( attribute == 1 or attribute == 2 ) ) then
local db = Details.OpenStorage ( )
if ( db ) then
local bestRank , encounterTable = Details.storage : GetBestFromPlayer ( diff , combat : GetBossInfo ( ) . id , attribute == 1 and " damage " or " healing " , name , true )
if ( bestRank ) then
--discover which are the player position in the guild rank
local playerTable , onEncounter , rankPosition = Details.storage : GetPlayerGuildRank ( diff , combat : GetBossInfo ( ) . id , attribute == 1 and " damage " or " healing " , name , true )
GameCooltip : AddLine ( " Best Score: " , Details : ToK2 ( ( bestRank [ 1 ] or 0 ) / encounterTable.elapsed ) .. " [|cFFFFFF00Rank: " .. ( rankPosition or " # " ) .. " |r] " , 1 , " white " )
Details : AddTooltipBackgroundStatusbar ( )
GameCooltip : AddLine ( " |TInterface \\ TUTORIALFRAME \\ UI-TUTORIAL-FRAME:14:12:0:1:512:512:8:70:224:306|t Open Rank " , " |TInterface \\ TUTORIALFRAME \\ UI-TUTORIAL-FRAME:14:12:0:1:512:512:8:70:328:409|t Refresh Talents " , 1 , " white " , " white " )
Details : AddTooltipBackgroundStatusbar ( )
if ( not gotInfo ) then
height = height + 25
else
height = height + 31
end
end
end
end
local actorName = actor : GetName ( )
local RaiderIO = _G.RaiderIO
if ( RaiderIO ) then
local addedInfo = false
local playerName , playerRealm = actorName : match ( " (%w+)%-(%w+) " )
playerName = playerName or actorName
playerRealm = playerRealm or GetRealmName ( )
local faction = actor.enemy and Details.faction_against or UnitFactionGroup ( " player " )
faction = faction == " Horde " and 2 or 1
local rioProfile = RaiderIO.GetProfile ( playerName , playerRealm , faction )
if ( rioProfile and rioProfile.mythicKeystoneProfile ) then
rioProfile = rioProfile.mythicKeystoneProfile
local previousScore = rioProfile.previousScore or 0
local currentScore = rioProfile.currentScore or 0
if ( previousScore > currentScore ) then
GameCooltip : AddLine ( " M+ Score: " , previousScore .. " (|cFFFFDD11 " .. currentScore .. " |r) " , 1 , " white " )
addedInfo = true
else
GameCooltip : AddLine ( " M+ Score: " , currentScore , 1 , " white " )
addedInfo = true
end
else
local dungeonPlayerInfo = C_PlayerInfo.GetPlayerMythicPlusRatingSummary ( actorName )
if ( dungeonPlayerInfo ) then
local currentScore = dungeonPlayerInfo.currentSeasonScore or 0
if ( currentScore > 0 ) then
GameCooltip : AddLine ( " M+ Score: " , currentScore , 1 , " white " )
addedInfo = true
end
end
end
if ( addedInfo ) then
GameCooltip : AddIcon ( [[]] , 1 , 1 , 1 , 20 )
Details : AddTooltipBackgroundStatusbar ( )
--increase frame height
height = height + 19
end
else
if ( WOW_PROJECT_ID == WOW_PROJECT_MAINLINE and C_PlayerInfo ) then --is retail?
local dungeonPlayerInfo = C_PlayerInfo.GetPlayerMythicPlusRatingSummary ( actorName )
if ( dungeonPlayerInfo ) then
local currentScore = dungeonPlayerInfo.currentSeasonScore or 0
if ( currentScore > 0 ) then
GameCooltip : AddLine ( " M+ Score: " , currentScore , 1 , " white " )
GameCooltip : AddIcon ( [[]] , 1 , 1 , 1 , 20 )
Details : AddTooltipBackgroundStatusbar ( )
--increase frame height
height = height + 19
end
end
end
end
GameCooltip : SetOption ( " FixedHeight " , height )
GameCooltip : ShowCooltip ( )
self.unitname = name
self.showing = " actor "
end
end
end
local iconFrame_OnLeave = function ( self )
GameCooltip : Hide ( )
if ( GameTooltip and GameTooltip : IsShown ( ) ) then
GameTooltip : Hide ( )
end
if ( self.row . icone_classe : GetTexture ( ) ~= " " ) then
--self.row.icone_classe:SetSize(self.row.icone_classe:GetWidth()-1, self.row.icone_classe:GetWidth()-1)
--self.row.icone_classe:SetBlendMode("BLEND")
end
self.row . iconHighlight : Hide ( )
end
local icon_frame_events = Details : CreateEventListener ( )
function icon_frame_events : EnterCombat ( )
for anim , _ in pairs ( Details.icon_animations . load.in_use ) do
anim.anim : Stop ( )
anim : Hide ( )
tinsert ( Details.icon_animations . load.available , anim )
anim.icon_frame . icon_animation = nil
anim.icon_frame = nil
end
wipe ( Details.icon_animations . load.in_use )
end
icon_frame_events : RegisterEvent ( " COMBAT_PLAYER_ENTER " , " EnterCombat " )
function icon_frame_events : CancelAnim ( anim )
local frame , timeout = unpack ( anim )
if ( Details.icon_animations . load.in_use [ frame ] ) then
if ( timeout ) then
if ( not frame.question_icon ) then
frame.question_icon = frame.parent : GetParent ( ) : GetParent ( ) . border : CreateTexture ( nil , " overlay " )
frame.question_icon : SetTexture ( [[Interface\GossipFrame\ActiveLegendaryQuestIcon]] )
frame.question_icon : SetSize ( 16 , 16 )
end
frame.question_icon : Show ( )
frame.question_icon : SetPoint ( " center " , frame.parent , " center " )
if ( not Details.HideBarQuestionIcon ) then
function Details : HideBarQuestionIcon ( frame )
frame.question_icon : Hide ( )
end
end
Details : ScheduleTimer ( " HideBarQuestionIcon " , 2 , frame )
end
Details.icon_animations . load.in_use [ frame ] = nil
tinsert ( Details.icon_animations . load.available , frame )
frame.anim : Stop ( )
frame : Hide ( )
frame.icon_frame . icon_animation = nil
frame.icon_frame = nil
end
end
local icon_frame_inspect_callback = function ( guid , unitid , iconFrame )
if ( iconFrame.icon_animation ) then
iconFrame.icon_animation . anim : Stop ( )
iconFrame.icon_animation : Hide ( )
end
local inUse = Details.icon_animations . load.in_use [ iconFrame.icon_animation ]
if ( inUse ) then
tinsert ( Details.icon_animations . load.available , iconFrame.icon_animation )
Details.icon_animations . load.in_use [ iconFrame.icon_animation ] = nil
end
if ( iconFrame : IsMouseOver ( ) ) then
iconFrame_OnEnter ( iconFrame )
end
if ( iconFrame.icon_animation ) then
iconFrame.icon_animation . icon_frame = nil
iconFrame.icon_animation = nil
end
end
local icon_frame_create_animation = function ( )
local f = CreateFrame ( " frame " , nil , UIParent )
f : SetFrameStrata ( " FULLSCREEN " )
f.anim = f : CreateAnimationGroup ( )
f.rotate = f.anim : CreateAnimation ( " Rotation " )
f.rotate : SetDegrees ( 360 )
f.rotate : SetDuration ( 2 )
f.anim : SetLooping ( " repeat " )
local t = f : CreateTexture ( nil , " overlay " )
t : SetTexture ( [[Interface\COMMON\StreamCircle]] )
t : SetAlpha ( 0.7 )
t : SetAllPoints ( )
tinsert ( Details.icon_animations . load.available , f )
end
local icon_frame_on_click_down = function ( self )
local instanceID = self.instance_id
local instanceObject = Details : GetInstance ( instanceID )
self : GetParent ( ) : GetParent ( ) . icone_classe : SetPoint ( " left " , self : GetParent ( ) : GetParent ( ) , " left " , instanceObject.row_info . icon_offset [ 1 ] + 1 , instanceObject.row_info . icon_offset [ 2 ] + - 1 )
end
local icon_frame_on_click_up = function ( self , button )
local instanceID = self.instance_id
local instanceObject = Details : GetInstance ( instanceID )
self : GetParent ( ) : GetParent ( ) . icone_classe : SetPoint ( " left " , self : GetParent ( ) : GetParent ( ) , " left " , instanceObject.row_info . icon_offset [ 1 ] , instanceObject.row_info . icon_offset [ 2 ] )
if ( button == " LeftButton " ) then
--open the rank panel
local instance = Details : GetInstance ( self.row . instance_id )
if ( instance ) then
local attribute , subattribute = instance : GetDisplay ( )
local combat = instance : GetShowingCombat ( )
local diff = combat : GetDifficulty ( )
local bossInfo = combat : GetBossInfo ( )
if ( ( attribute == 1 or attribute == 2 ) and bossInfo ) then --if bossInfo is nil, means the combat isn't a boss
local db = Details.OpenStorage ( )
if ( db and bossInfo.id ) then
local haveData = Details.storage : HaveDataForEncounter ( diff , bossInfo.id , true ) --attempt to index local 'bossInfo' (a nil value)
if ( haveData ) then
Details : OpenRaidHistoryWindow ( bossInfo.zone , bossInfo.id , diff , attribute == 1 and " damage " or " healing " , true , 1 , false , 2 )
end
end
end
end
return
end
if ( Details.in_combat ) then
Details : Msg ( Loc [ " STRING_QUERY_INSPECT_FAIL1 " ] )
return
end
if ( self.showing == " actor " ) then
if ( Details.ilevel . core : HasQueuedInspec ( self.unitname ) ) then
--icon animation
local anim = tremove ( Details.icon_animations . load.available )
if ( not anim ) then
icon_frame_create_animation ( )
anim = tremove ( Details.icon_animations . load.available )
end
local f = anim
if ( not f.question_icon ) then
f.question_icon = self : GetParent ( ) : GetParent ( ) . border : CreateTexture ( nil , " overlay " )
f.question_icon : SetTexture ( [[Interface\GossipFrame\ActiveLegendaryQuestIcon]] )
f.question_icon : SetSize ( 16 , 16 )
end
f.question_icon : ClearAllPoints ( )
f.question_icon : SetPoint ( " center " , self , " center " )
f.question_icon : Show ( )
if ( not Details.HideBarQuestionIcon ) then
function Details : HideBarQuestionIcon ( frame )
frame.question_icon : Hide ( )
end
end
Details : ScheduleTimer ( " HideBarQuestionIcon " , 1 , f )
self.icon_animation = anim
anim.icon_frame = self
local pid
pid = icon_frame_events : ScheduleTimer ( " CancelAnim " , 1 , { anim } )
Details.icon_animations . load.in_use [ anim ] = pid
anim.parent = self
return
end
local does_query = Details.ilevel . core : QueryInspect ( self.unitname , icon_frame_inspect_callback , self )
if ( self.icon_animation ) then
return
end
--icon animation
local anim = tremove ( Details.icon_animations . load.available )
if ( not anim ) then
icon_frame_create_animation ( )
anim = tremove ( Details.icon_animations . load.available )
end
anim : Show ( )
anim : SetParent ( self )
anim : ClearAllPoints ( )
anim : SetFrameStrata ( " TOOLTIP " )
anim : SetPoint ( " center " , self , " center " )
anim : SetSize ( self : GetWidth ( ) * 1.7 , self : GetHeight ( ) * 1.7 )
anim.anim : Play ( )
self.icon_animation = anim
anim.icon_frame = self
local pid
if ( does_query ) then
pid = icon_frame_events : ScheduleTimer ( " CancelAnim " , 4 , { anim , true } )
else
pid = icon_frame_events : ScheduleTimer ( " CancelAnim " , 0.2 , { anim } )
end
Details.icon_animations . load.in_use [ anim ] = pid
anim.parent = self
if ( anim.question_icon ) then
anim.question_icon : Hide ( )
end
end
end
local setFrameIconScripts = function ( row )
row.icon_frame : SetScript ( " OnEnter " , iconFrame_OnEnter )
row.icon_frame : SetScript ( " OnLeave " , iconFrame_OnLeave )
row.icon_frame : SetScript ( " OnMouseDown " , icon_frame_on_click_down )
row.icon_frame : SetScript ( " OnMouseUp " , icon_frame_on_click_up )
end
local setLineScripts = function ( line , instance , index )
line._instance = instance
line : SetScript ( " OnEnter " , lineScript_Onenter )
line : SetScript ( " OnLeave " , lineScript_Onleave )
line : SetScript ( " OnMouseDown " , lineScript_Onmousedown )
line : SetScript ( " OnMouseUp " , lineScript_Onmouseup )
line : SetScript ( " OnClick " , lineScript_Onclick )
line : SetScript ( " OnShow " , lineScript_Onshow )
setFrameIconScripts ( line )
line.SetValue = setBarValue
end
function Details : ReportSingleLine ( instancia , barra )
local reportar
if ( instancia.atributo == 5 ) then --custom
--dump cooltip
local GameCooltip = GameCooltip
if ( GameCooltipFrame1 : IsShown ( ) ) then
local actor_name = barra.lineText1 : GetText ( ) or " "
actor_name = actor_name : gsub ( ( " .*%. " ) , " " )
if ( instancia.segmento == - 1 ) then --overall
reportar = { " Details!: " .. Loc [ " STRING_OVERALL " ] .. " " .. instancia.customName .. " : " .. actor_name .. " " .. Loc [ " STRING_CUSTOM_REPORT " ] }
else
reportar = { " Details!: " .. instancia.customName .. " : " .. actor_name .. " " .. Loc [ " STRING_CUSTOM_REPORT " ] }
end
local amt = GameCooltip.Indexes
for i = 2 , amt do
local left_text , right_text = GameCooltip : GetText ( i )
reportar [ # reportar + 1 ] = ( i - 1 ) .. " . " .. left_text .. " ... " .. right_text
end
else
reportar = { " Details!: " .. instancia.customName .. " : " .. Loc [ " STRING_CUSTOM_REPORT " ] }
reportar [ # reportar + 1 ] = barra.lineText1 : GetText ( ) .. " " .. barra.lineText4 : GetText ( )
--reportar [#reportar+1] = (i-1) .. ". " .. left_text .. " ... " .. right_text
end
else
reportar = { " Details!: " .. Loc [ " STRING_REPORT " ] .. " " .. Details.sub_atributos [ instancia.atributo ] . lista [ instancia.sub_atributo ] }
reportar [ # reportar + 1 ] = barra.lineText1 : GetText ( ) .. " " .. barra.lineText4 : GetText ( )
end
return Details : Reportar ( reportar , { _no_current = true , _no_inverse = true , _custom = true } )
end
-- ~stretch
local function button_stretch_scripts ( baseframe , backgrounddisplay , instancia )
local button = baseframe.button_stretch
button : SetScript ( " OnEnter " , function ( self )
self.mouse_over = true
if ( not Details.disable_stretch_button ) then
Details.FadeHandler . Fader ( self , " ALPHA " , 1 )
end
end )
button : SetScript ( " OnLeave " , function ( self )
self.mouse_over = false
Details.FadeHandler . Fader ( self , " ALPHA " , 0 )
end )
button : SetScript ( " OnMouseDown " , function ( self , button )
if ( button ~= " LeftButton " ) then
return
end
if ( instancia : IsSoloMode ( ) ) then
return
end
instancia : EsconderScrollBar ( true )
baseframe._place = instancia : SaveMainWindowPosition ( )
baseframe.isResizing = true
baseframe.isStretching = true
baseframe : SetFrameStrata ( " TOOLTIP " )
instancia.rowframe : SetFrameStrata ( " TOOLTIP " )
local _r , _g , _b , _a = baseframe : GetBackdropColor ( )
gump : GradientEffect ( baseframe , " frame " , _r , _g , _b , _a , _r , _g , _b , 0.9 , 1.5 )
if ( instancia.wallpaper . enabled ) then
_r , _g , _b = baseframe.wallpaper : GetVertexColor ( )
_a = baseframe.wallpaper : GetAlpha ( )
gump : GradientEffect ( baseframe.wallpaper , " texture " , _r , _g , _b , _a , _r , _g , _b , 0.05 , 0.5 )
end
if ( instancia.stretch_button_side == 1 ) then
baseframe : StartSizing ( " top " )
baseframe.stretch_direction = " top "
elseif ( instancia.stretch_button_side == 2 ) then
baseframe : StartSizing ( " bottom " )
baseframe.stretch_direction = " bottom "
end
local linha_horizontal = { }
local checking = instancia
for i = instancia.meu_id - 1 , 1 , - 1 do
local esta_instancia = Details.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 , # Details.tabela_instancias do
local esta_instancia = Details.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 _ , thisInstance in ipairs ( instancia.stretchToo ) do
thisInstance : EsconderScrollBar ( true )
thisInstance.baseframe . _place = thisInstance : SaveMainWindowPosition ( )
thisInstance.baseframe . isResizing = true
thisInstance.baseframe . isStretching = true
thisInstance.baseframe : SetFrameStrata ( " TOOLTIP " )
thisInstance.rowframe : SetFrameStrata ( " TOOLTIP " )
local _r , _g , _b , _a = thisInstance.baseframe : GetBackdropColor ( )
gump : GradientEffect ( thisInstance.baseframe , " frame " , _r , _g , _b , _a , _r , _g , _b , 0.9 , 1.5 )
Details : SendEvent ( " DETAILS_INSTANCE_STARTSTRETCH " , nil , thisInstance )
if ( thisInstance.wallpaper . enabled ) then
_r , _g , _b = thisInstance.baseframe . wallpaper : GetVertexColor ( )
_a = thisInstance.baseframe . wallpaper : GetAlpha ( )
gump : GradientEffect ( thisInstance.baseframe . wallpaper , " texture " , _r , _g , _b , _a , _r , _g , _b , 0.05 , 0.5 )
end
end
end
Details : SnapTextures ( true )
Details : SendEvent ( " DETAILS_INSTANCE_STARTSTRETCH " , nil , instancia )
--change the update speed
if ( Details.update_speed > 0.3 ) then
Details : SetWindowUpdateSpeed ( 0.3 , true )
Details.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
Details : SendEvent ( " DETAILS_INSTANCE_SIZECHANGED " , nil , instancia )
instancia : RefreshBars ( )
instancia : InstanceReset ( )
instancia : ReajustaGump ( )
baseframe.stretch_direction = nil
if ( instancia.stretchToo and # instancia.stretchToo > 0 ) then
for _ , esta_instancia in ipairs ( instancia.stretchToo ) do
esta_instancia.baseframe : StopMovingOrSizing ( )
esta_instancia.baseframe . isResizing = false
esta_instancia : RestoreMainWindowPosition ( esta_instancia.baseframe . _place )
esta_instancia : ReajustaGump ( )
esta_instancia.baseframe . isStretching = false
if ( esta_instancia.need_rolagem ) then
esta_instancia : MostrarScrollBar ( true )
end
Details : 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 ( )
Details : 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 ( )
Details : SnapTextures ( false )
Details : SendEvent ( " DETAILS_INSTANCE_ENDSTRETCH " , nil , instancia )
if ( Details.stretch_changed_update_speed ) then
Details : SetWindowUpdateSpeed ( false , true )
Details.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 = Details.KeyBindScrollUpLastPressed or GetTime ( ) - 0.3
local to_top = false
if ( last_key_pressed + 0.2 > GetTime ( ) ) then
to_top = true
end
Details.KeyBindScrollUpLastPressed = GetTime ( )
for index , instance in ipairs ( Details.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 ( Details.tabela_instancias ) do
if ( instance : IsEnabled ( ) ) then
local scrollbar = instance.scroll
local B = instance.barraS [ 2 ]
if ( B and B < instance.rows_showing ) then
scrollbar : SetValue ( scrollbar : GetValue ( ) + instance.row_height * 2 )
elseif ( B ) then
local _ , maxValue = scrollbar : GetMinMaxValues ( )
scrollbar : SetValue ( maxValue )
scrollbar.ultimo = maxValue
instance.baseframe . button_down : Disable ( )
end
end
end
end
local function iterate_scroll_scripts ( backgrounddisplay , backgroundframe , baseframe , scrollbar , instancia )
baseframe : SetScript ( " OnMouseWheel " ,
function ( self , delta )
if ( delta > 0 ) then --rolou pra cima
local A = instancia.barraS [ 1 ]
if ( A ) then
if ( A > 1 ) then
scrollbar : SetValue ( scrollbar : GetValue ( ) - instancia.row_height * Details.scroll_speed )
else
scrollbar : SetValue ( 0 )
scrollbar.ultimo = 0
baseframe.button_up : Disable ( )
end
end
elseif ( delta < 0 ) then --rolou pra baixo
local B = instancia.barraS [ 2 ]
if ( B ) then
if ( B < ( instancia.rows_showing or 0 ) ) then
scrollbar : SetValue ( scrollbar : GetValue ( ) + instancia.row_height * Details.scroll_speed )
else
local _ , maxValue = scrollbar : GetMinMaxValues ( )
scrollbar : SetValue ( maxValue )
scrollbar.ultimo = maxValue
baseframe.button_down : Disable ( )
end
end
end
end )
scrollbar : SetScript ( " OnValueChanged " , function ( self )
local ultimo = self.ultimo
local meu_valor = self : GetValue ( )
if ( ultimo == meu_valor ) then --n�o mudou
return
end
--shortcut
local minValue , maxValue = scrollbar : GetMinMaxValues ( )
if ( minValue == meu_valor ) then
instancia.barraS [ 1 ] = 1
instancia.barraS [ 2 ] = instancia.rows_fit_in_window
instancia : RefreshMainWindow ( instancia , true )
self.ultimo = meu_valor
baseframe.button_up : Disable ( )
return
elseif ( maxValue == meu_valor ) then
local min = ( instancia.rows_showing or 0 ) - instancia.rows_fit_in_window
min = min + 1
if ( min < 1 ) then
min = 1
end
instancia.barraS [ 1 ] = min
instancia.barraS [ 2 ] = ( instancia.rows_showing or 0 )
instancia : RefreshMainWindow ( instancia , true )
self.ultimo = meu_valor
baseframe.button_down : Disable ( )
return
end
if ( not baseframe.button_up : IsEnabled ( ) ) then
baseframe.button_up : Enable ( )
end
if ( not baseframe.button_down : IsEnabled ( ) ) then
baseframe.button_down : Enable ( )
end
if ( meu_valor > ultimo ) then --scroll down
local B = instancia.barraS [ 2 ]
if ( B < ( instancia.rows_showing or 0 ) ) then --se o valor maximo n�o for o m�ximo de barras a serem mostradas
local precisa_passar = ( ( B + 1 ) * instancia.row_height ) - ( instancia.row_height * instancia.rows_fit_in_window )
--if (meu_valor > precisa_passar) then --o valor atual passou o valor que precisa passar pra locomover
if ( true ) then --testing by pass row check
local diff = meu_valor - ultimo --pega a diferen�a de H
diff = diff / instancia.row_height --calcula quantas barras ele pulou
diff = ceil ( diff ) --arredonda para cima
if ( instancia.barraS [ 2 ] + diff > ( instancia.rows_showing or 0 ) and ultimo > 0 ) then
instancia.barraS [ 1 ] = ( instancia.rows_showing or 0 ) - ( instancia.rows_fit_in_window - 1 )
instancia.barraS [ 2 ] = ( instancia.rows_showing or 0 )
else
instancia.barraS [ 2 ] = instancia.barraS [ 2 ] + diff
instancia.barraS [ 1 ] = instancia.barraS [ 1 ] + diff
end
instancia : RefreshMainWindow ( instancia , true )
end
end
else --scroll up
local A = instancia.barraS [ 1 ]
if ( A > 1 ) then
local precisa_passar = ( A - 1 ) * instancia.row_height
--if (meu_valor < precisa_passar) then
if ( true ) then --testing by pass row check
--calcula quantas barras passou
local diff = ultimo - meu_valor
diff = diff / instancia.row_height
diff = ceil ( diff )
if ( instancia.barraS [ 1 ] - diff < 1 ) then
instancia.barraS [ 2 ] = instancia.rows_fit_in_window
instancia.barraS [ 1 ] = 1
else
instancia.barraS [ 2 ] = instancia.barraS [ 2 ] - diff
instancia.barraS [ 1 ] = instancia.barraS [ 1 ] - diff
end
instancia : RefreshMainWindow ( instancia , true )
end
end
end
self.ultimo = meu_valor
end )
end
function Details : HaveInstanceAlert ( )
return self.alert : IsShown ( )
end
function Details : InstanceAlertTime ( instance )
instance.alert : Hide ( )
instance.alert . rotate : Stop ( )
instance.alert_time = nil
end
local hide_click_func = function ( )
--empty
end
function Details : InstanceAlert ( msg , icon , timeInSeconds , clickfunc , doflash , forceAlert )
if ( not forceAlert and Details.streamer_config . no_alerts ) then
--return
end
if ( not self.meu_id ) then
local lower = Details : GetLowerInstanceNumber ( )
if ( lower ) then
self = Details : 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 ( " " )
end
self.alert . button.func = nil
wipe ( self.alert . button.func_param )
if ( clickfunc ) then
self.alert . button.func = clickfunc [ 1 ]
self.alert . button.func_param = { unpack ( clickfunc , 2 ) }
end
timeInSeconds = timeInSeconds or 15
self.alert_time = timeInSeconds
Details : ScheduleTimer ( " InstanceAlertTime " , timeInSeconds , self )
self.alert : SetPoint ( " bottom " , self.baseframe , " bottom " , 0 , - 12 )
self.alert : SetPoint ( " left " , self.baseframe , " left " , 3 , 0 )
self.alert : SetPoint ( " right " , self.baseframe , " right " , - 3 , 0 )
self.alert : SetFrameStrata ( " TOOLTIP " )
self.alert . button : SetFrameStrata ( " TOOLTIP " )
self.alert : Show ( )
if ( doflash ) then
self.alert : DoFlash ( )
end
self.alert : Play ( )
end
local alert_on_click = function ( self , button )
if ( self.func ) then
local okey , errortext = pcall ( self.func , unpack ( self.func_param ) )
if ( not okey ) then
Details : Msg ( " error on alert function: " , errortext )
end
end
self : GetParent ( ) : Hide ( )
end
local function CreateAlertFrame ( baseframe , instancia )
local frame_upper = CreateFrame ( " scrollframe " , " DetailsAlertFrameScroll " .. instancia.meu_id , baseframe )
frame_upper : SetPoint ( " bottom " , baseframe , " bottom " )
frame_upper : SetPoint ( " left " , baseframe , " left " , 3 , 0 )
frame_upper : SetPoint ( " right " , baseframe , " right " , - 3 , 0 )
frame_upper : SetHeight ( 13 )
frame_upper : SetFrameStrata ( " TOOLTIP " )
local frame_lower = CreateFrame ( " frame " , " DetailsAlertFrameScrollChild " .. instancia.meu_id , frame_upper )
frame_lower : SetHeight ( 25 )
frame_lower : SetPoint ( " left " , frame_upper , " left " )
frame_lower : SetPoint ( " right " , frame_upper , " right " )
frame_upper : SetScrollChild ( frame_lower )
local alert_bg = CreateFrame ( " frame " , " DetailsAlertFrame " .. instancia.meu_id , frame_lower , " BackdropTemplate " )
alert_bg : SetPoint ( " bottom " , baseframe , " bottom " )
alert_bg : SetPoint ( " left " , baseframe , " left " , 3 , 0 )
alert_bg : SetPoint ( " right " , baseframe , " right " , - 3 , 0 )
alert_bg : SetHeight ( 12 )
alert_bg : SetBackdrop ( { bgFile = [[Interface\AddOns\Details\images\background]] , tile = true , tileSize = 16 ,
insets = { left = 0 , right = 0 , top = 0 , bottom = 0 } } )
alert_bg : SetBackdropColor ( .1 , .1 , .1 , 1 )
alert_bg : SetFrameStrata ( " FULLSCREEN " )
alert_bg : SetFrameLevel ( baseframe : GetFrameLevel ( ) + 6 )
alert_bg : Hide ( )
local toptexture = alert_bg : CreateTexture ( nil , " background " )
toptexture : SetTexture ( [[Interface\Challenges\challenges-main]] )
--toptexture:SetTexCoord(0.1921484375, 0.523671875, 0.234375, 0.160859375)
toptexture : SetTexCoord ( 0.231171875 , 0.4846484375 , 0.0703125 , 0.072265625 )
toptexture : SetPoint ( " left " , alert_bg , " left " )
toptexture : SetPoint ( " right " , alert_bg , " right " )
toptexture : SetPoint ( " bottom " , alert_bg , " top " , 0 , 0 )
toptexture : SetHeight ( 1 )
local text = alert_bg : CreateFontString ( nil , " overlay " , " GameFontNormal " )
text : SetPoint ( " right " , alert_bg , " right " , - 14 , 0 )
Details : SetFontSize ( text , 10 )
text : SetTextColor ( 1 , 1 , 1 , 0.8 )
local rotate_frame = CreateFrame ( " frame " , " DetailsAlertFrameRotate " .. instancia.meu_id , alert_bg )
rotate_frame : SetWidth ( 12 )
rotate_frame : SetPoint ( " right " , alert_bg , " right " , - 2 , 0 )
rotate_frame : SetHeight ( alert_bg : GetWidth ( ) )
rotate_frame : SetFrameStrata ( " FULLSCREEN " )
local icon = rotate_frame : CreateTexture ( nil , " overlay " )
icon : SetPoint ( " center " , rotate_frame , " center " )
icon : SetWidth ( 14 )
icon : SetHeight ( 14 )
local button = CreateFrame ( " button " , " DetailsInstance " .. instancia.meu_id .. " AlertButton " , alert_bg )
button : SetAllPoints ( )
button : SetFrameStrata ( " FULLSCREEN " )
button : SetScript ( " OnClick " , alert_on_click )
button._instance = instancia
button.func_param = { }
local RotateAnimGroup = rotate_frame : CreateAnimationGroup ( )
local rotate = RotateAnimGroup : CreateAnimation ( " Rotation " )
rotate : SetDegrees ( 360 )
rotate : SetDuration ( 6 )
RotateAnimGroup : SetLooping ( " repeat " )
alert_bg : Hide ( )
local anime = alert_bg : CreateAnimationGroup ( )
anime.group = anime : CreateAnimation ( " Translation " )
anime.group : SetDuration ( 0.15 )
anime.group : SetOffset ( 0 , 10 )
anime : SetScript ( " OnFinished " , function ( self )
alert_bg : Show ( )
alert_bg : SetPoint ( " bottom " , baseframe , " bottom " , 0 , 0 )
alert_bg : SetPoint ( " left " , baseframe , " left " , 3 , 0 )
alert_bg : SetPoint ( " right " , baseframe , " right " , - 3 , 0 )
end )
local on_enter_alert = function ( self )
text : SetTextColor ( 1 , 0.8 , 0.3 , 1 )
icon : SetBlendMode ( " ADD " )
end
local on_leave_alert = function ( self )
text : SetTextColor ( 1 , 1 , 1 , 0.8 )
icon : SetBlendMode ( " BLEND " )
end
button : SetScript ( " OnEnter " , on_enter_alert )
button : SetScript ( " OnLeave " , on_leave_alert )
function alert_bg : Play ( )
anime : Play ( )
end
local flash_texture = button : CreateTexture ( nil , " overlay " )
flash_texture : SetTexCoord ( 53 / 512 , 347 / 512 , 58 / 256 , 120 / 256 )
flash_texture : SetTexture ( [[Interface\AchievementFrame\UI-Achievement-Alert-Glow]] )
flash_texture : SetAllPoints ( )
flash_texture : SetBlendMode ( " ADD " )
local animation = flash_texture : CreateAnimationGroup ( )
local anim1 = animation : CreateAnimation ( " ALPHA " )
local anim2 = animation : CreateAnimation ( " ALPHA " )
anim1 : SetOrder ( 1 )
anim1 : SetFromAlpha ( 0 )
anim1 : SetToAlpha ( 1 )
anim1 : SetDuration ( 0.1 )
anim2 : SetOrder ( 2 )
anim1 : SetFromAlpha ( 1 )
anim1 : SetToAlpha ( 0 )
anim2 : SetDuration ( 0.2 )
animation : SetScript ( " OnFinished " , function ( self )
flash_texture : Hide ( )
end )
flash_texture : Hide ( )
local do_flash = function ( )
flash_texture : Show ( )
animation : Play ( )
end
function alert_bg : DoFlash ( )
C_Timer.After ( 0.23 , do_flash )
end
alert_bg.text = text
alert_bg.icon = icon
alert_bg.button = button
alert_bg.rotate = RotateAnimGroup
instancia.alert = alert_bg
return alert_bg
end
function Details : 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 Details : schedule_hide_anti_overlap ( self )
self : Hide ( )
self.schdule = nil
end
local function hide_anti_overlap ( self )
if ( self.schdule ) then
Details : CancelTimer ( self.schdule )
self.schdule = nil
end
local schdule = Details : 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
Details : 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
Details.snap_alert = CreateFrame ( " frame " , " DetailsSnapAlertFrame " , UIParent , " ActionBarButtonSpellActivationAlert " )
Details.snap_alert : Hide ( )
Details.snap_alert : SetFrameStrata ( " FULLSCREEN " )
function Details : SnapAlert ( )
Details.snap_alert : ClearAllPoints ( )
Details.snap_alert : SetPoint ( " topleft " , self.baseframe . cabecalho.modo_selecao . widget , " topleft " , - 8 , 6 )
Details.snap_alert : SetPoint ( " bottomright " , self.baseframe . cabecalho.modo_selecao . widget , " bottomright " , 8 , - 6 )
Details.snap_alert . animOut : Stop ( )
Details.snap_alert . animIn : Play ( )
end
do
--search key: ~tooltip
local tooltip_anchor = CreateFrame ( " frame " , " DetailsTooltipAnchor " , UIParent , " BackdropTemplate " )
tooltip_anchor : SetSize ( 140 , 20 )
tooltip_anchor : SetAlpha ( 0 )
tooltip_anchor : SetMovable ( false )
tooltip_anchor : SetClampedToScreen ( true )
tooltip_anchor.locked = true
tooltip_anchor : SetBackdrop ( { bgFile = [[Interface\Tooltips\UI-Tooltip-Background]] , edgeFile = [[Interface\DialogFrame\UI-DialogBox-Border]] , edgeSize = 10 , insets = { left = 1 , right = 1 , top = 2 , bottom = 1 } } )
tooltip_anchor : SetBackdropColor ( 0 , 0 , 0 , 1 )
tooltip_anchor : SetScript ( " OnEnter " , function ( self )
tooltip_anchor.alert . animIn : Stop ( )
tooltip_anchor.alert . animOut : Play ( )
GameTooltip : SetOwner ( self , " ANCHOR_TOPLEFT " )
GameTooltip : ClearLines ( )
GameTooltip : AddLine ( Loc [ " STRING_OPTIONS_TOOLTIPS_ANCHOR_TEXT_DESC " ] )
GameTooltip : Show ( )
end )
tooltip_anchor : SetScript ( " OnLeave " , function ( self )
GameTooltip : Hide ( )
end )
tooltip_anchor : SetScript ( " OnMouseDown " , function ( self , button )
if ( not self.moving and button == " LeftButton " ) then
self : StartMoving ( )
self.moving = true
end
end )
tooltip_anchor : SetScript ( " OnMouseUp " , function ( self , button )
if ( self.moving ) then
self : StopMovingOrSizing ( )
self.moving = false
local xofs , yofs = self : GetCenter ( )
local scale = self : GetEffectiveScale ( )
local UIscale = UIParent : GetScale ( )
xofs = xofs * scale - GetScreenWidth ( ) * UIscale / 2
yofs = yofs * scale - GetScreenHeight ( ) * UIscale / 2
Details.tooltip . anchor_screen_pos [ 1 ] = xofs / UIscale
Details.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 = Details.tooltip . anchor_screen_pos [ 1 ] , Details.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 -----------------------------------------------------------------------------------------------------------------------------------------------
--baseframe is the lowest frame in the window architecture
local baseframe = CreateFrame ( " scrollframe " , " DetailsBaseFrame " .. ID , UIParent , " BackdropTemplate " )
baseframe : SetMovable ( true )
baseframe : SetResizable ( true )
baseframe : SetUserPlaced ( false )
baseframe : SetDontSavePosition ( true )
baseframe : SetFrameStrata ( baseframe_strata )
baseframe : SetFrameLevel ( 2 )
baseframe.instance = instancia
local baseframeBorder = DetailsFramework : CreateFullBorder ( baseframe : GetName ( ) .. " BaseBorder " , baseframe )
baseframeBorder : SetBorderSizes ( 1 , 1 , 1 , 1 )
baseframeBorder : UpdateSizes ( )
baseframeBorder : SetVertexColor ( 0 , 0 , 0 , 1 )
baseframe.border = baseframeBorder
baseframe.border : Hide ( )
local titleBar = CreateFrame ( " frame " , baseframe : GetName ( ) .. " TitleBar " , baseframe , " BackdropTemplate " )
titleBar : SetPoint ( " bottomleft " , baseframe , " topleft " , 0 , 0 )
titleBar : SetPoint ( " bottomright " , baseframe , " topright " , 0 , 0 )
titleBar : SetHeight ( 16 )
titleBar : EnableMouse ( false )
baseframe.titleBar = titleBar
titleBar.texture = titleBar : CreateTexture ( " $parentTexture " , " artwork " )
titleBar.texture : SetAllPoints ( )
titleBar.texture : SetTexture ( [[Interface\AddOns\Details\images\bar_serenity]] )
titleBar.texture : SetVertexColor ( 0 , 0 , 0 , 0 )
--a background frame that anchors in the topleft of the title bar and bottom right of the baseframe
--this frame does not attack to statusbar (yet)
local fullWindowFrame = CreateFrame ( " frame " , baseframe : GetName ( ) .. " FullWindowFrame " , baseframe , " BackdropTemplate " )
fullWindowFrame : EnableMouse ( false )
fullWindowFrame : SetPoint ( " topleft " , titleBar , " topleft " , 0 , 0 )
fullWindowFrame : SetPoint ( " bottomright " , baseframe , " bottomright " , 0 , 0 )
baseframe.fullWindowFrame = fullWindowFrame
local fullWindowBorder = DetailsFramework : CreateFullBorder ( fullWindowFrame : GetName ( ) .. " Border " , fullWindowFrame )
fullWindowBorder : SetBorderSizes ( 1 , 1 , 1 , 1 )
fullWindowBorder : UpdateSizes ( )
fullWindowBorder : SetVertexColor ( 0 , 0 , 0 , 1 )
fullWindowFrame.border = fullWindowBorder
fullWindowFrame.border : Hide ( )
--background holds the wallpaper, alert strings ans textures, have setallpoints on baseframe
--backgrounddisplay is a scrollschild of backgroundframe, hence its children won't show outside its canvas
local backgroundframe = CreateFrame ( " scrollframe " , " Details_WindowFrame " .. ID , baseframe ) --window frame
local backgrounddisplay = CreateFrame ( " frame " , " Details_GumpFrame " .. ID , backgroundframe , " BackdropTemplate " ) --gump frame
backgroundframe : SetFrameLevel ( 3 )
backgrounddisplay : SetFrameLevel ( 3 )
backgroundframe.instance = instancia
backgrounddisplay.instance = instancia
instancia.windowBackgroundDisplay = backgrounddisplay
--row frame is the parent of rows, it have setallpoints on baseframe
local rowframe = CreateFrame ( " frame " , " DetailsRowFrame " .. ID , UIParent ) --row frame
rowframe : SetAllPoints ( baseframe )
rowframe : SetFrameStrata ( baseframe_strata )
rowframe : SetFrameLevel ( 3 )
rowframe : EnableMouse ( false )
instancia.rowframe = rowframe
function rowframe : SetFrameAlpha ( value )
local value = parseRowFrameAlpha ( value )
self : SetAlpha ( value )
end
--right click bookmark
local switchbutton = CreateFrame ( " button " , " Details_SwitchButtonFrame " .. ID , UIParent )
switchbutton : SetAllPoints ( baseframe )
switchbutton : SetFrameStrata ( baseframe_strata )
switchbutton : SetFrameLevel ( 4 )
instancia.windowSwitchButton = switchbutton
--avoid mouse hover over a high window when the menu is open for a lower instance.
local anti_menu_overlap = CreateFrame ( " frame " , " Details_WindowFrameAntiMenuOverlap " .. ID , UIParent )
anti_menu_overlap : SetSize ( 100 , 13 )
anti_menu_overlap : SetFrameStrata ( " DIALOG " )
anti_menu_overlap : EnableMouse ( true )
anti_menu_overlap : Hide ( )
--anti_menu_overlap:SetBackdrop(gump_fundo_backdrop) --debug
baseframe.anti_menu_overlap = anti_menu_overlap
--floating frame is an anchor for widgets which should be overlaying the window
local floatingframe = CreateFrame ( " frame " , " DetailsInstance " .. ID .. " BorderHolder " , baseframe )
floatingframe : SetFrameLevel ( baseframe : GetFrameLevel ( ) + 7 )
instancia.floatingframe = floatingframe
-- scroll bar -----------------------------------------------------------------------------------------------------------------------------------------------
--create the scrollbar, almost not used.
local scrollbar = CreateFrame ( " slider " , " Details_ScrollBar " .. ID , backgrounddisplay ) --scroll
--scroll image-node up
baseframe.scroll_up = backgrounddisplay : CreateTexture ( nil , " background " )
baseframe.scroll_up : SetPoint ( " topleft " , backgrounddisplay , " topright " , 0 , 0 )
baseframe.scroll_up : SetTexture ( DEFAULT_SKIN )
baseframe.scroll_up : SetTexCoord ( unpack ( COORDS_SLIDER_TOP ) )
baseframe.scroll_up : SetWidth ( 32 )
baseframe.scroll_up : SetHeight ( 32 )
--scroll image-node down
baseframe.scroll_down = backgrounddisplay : CreateTexture ( nil , " background " )
baseframe.scroll_down : SetPoint ( " bottomleft " , backgrounddisplay , " bottomright " , 0 , 0 )
baseframe.scroll_down : SetTexture ( DEFAULT_SKIN )
baseframe.scroll_down : SetTexCoord ( unpack ( COORDS_SLIDER_DOWN ) )
baseframe.scroll_down : SetWidth ( 32 )
baseframe.scroll_down : SetHeight ( 32 )
--scroll image-node middle
baseframe.scroll_middle = backgrounddisplay : CreateTexture ( nil , " background " )
baseframe.scroll_middle : SetPoint ( " top " , baseframe.scroll_up , " bottom " , 0 , 8 )
baseframe.scroll_middle : SetPoint ( " bottom " , baseframe.scroll_down , " top " , 0 , - 11 )
baseframe.scroll_middle : SetTexture ( DEFAULT_SKIN )
baseframe.scroll_middle : SetTexCoord ( unpack ( COORDS_SLIDER_MIDDLE ) )
baseframe.scroll_middle : SetWidth ( 32 )
baseframe.scroll_middle : SetHeight ( 64 )
--scroll widgets
baseframe.button_up = CreateFrame ( " button " , " DetailsScrollUp " .. instancia.meu_id , backgrounddisplay )
baseframe.button_down = CreateFrame ( " button " , " DetailsScrollDown " .. instancia.meu_id , backgrounddisplay )
baseframe.button_up : SetWidth ( 29 )
baseframe.button_up : SetHeight ( 32 )
baseframe.button_up : SetNormalTexture ( [[Interface\BUTTONS\UI-ScrollBar-ScrollUpButton-Up]] )
baseframe.button_up : SetPushedTexture ( [[Interface\BUTTONS\UI-ScrollBar-ScrollUpButton-Down]] )
baseframe.button_up : SetDisabledTexture ( [[Interface\BUTTONS\UI-ScrollBar-ScrollUpButton-Disabled]] )
baseframe.button_up : Disable ( )
baseframe.button_down : SetWidth ( 29 )
baseframe.button_down : SetHeight ( 32 )
baseframe.button_down : SetNormalTexture ( [[Interface\BUTTONS\UI-ScrollBar-ScrollDownButton-Up]] )
baseframe.button_down : SetPushedTexture ( [[Interface\BUTTONS\UI-ScrollBar-ScrollDownButton-Down]] )
baseframe.button_down : SetDisabledTexture ( [[Interface\BUTTONS\UI-ScrollBar-ScrollDownButton-Disabled]] )
baseframe.button_down : Disable ( )
baseframe.button_up : SetPoint ( " topright " , baseframe.scroll_up , " topright " , - 4 , 3 )
baseframe.button_down : SetPoint ( " bottomright " , baseframe.scroll_down , " bottomright " , - 4 , - 6 )
scrollbar : SetPoint ( " top " , baseframe.button_up , " bottom " , 0 , 12 )
scrollbar : SetPoint ( " bottom " , baseframe.button_down , " top " , 0 , - 12 )
scrollbar : SetPoint ( " left " , backgrounddisplay , " right " , 3 , 0 )
scrollbar : Show ( )
--config set
scrollbar : SetOrientation ( " VERTICAL " )
scrollbar.scrollMax = 0
scrollbar : SetMinMaxValues ( 0 , 0 )
scrollbar : SetValue ( 0 )
scrollbar.ultimo = 0
--thumb
scrollbar.thumb = scrollbar : CreateTexture ( nil , " overlay " )
scrollbar.thumb : SetTexture ( [[Interface\Buttons\UI-ScrollBar-Knob]] )
scrollbar.thumb : SetSize ( 29 , 30 )
scrollbar : SetThumbTexture ( scrollbar.thumb )
--scripts
button_down_scripts ( baseframe , backgrounddisplay , instancia , scrollbar )
button_up_scripts ( baseframe , backgrounddisplay , instancia , scrollbar )
-- stretch button -----------------------------------------------------------------------------------------------------------------------------------------------
baseframe.button_stretch = CreateFrame ( " button " , " DetailsButtonStretch " .. instancia.meu_id , baseframe )
baseframe.button_stretch : SetPoint ( " bottom " , baseframe , " top " , 0 , 20 )
baseframe.button_stretch : SetPoint ( " right " , baseframe , " right " , - 27 , 0 )
baseframe.button_stretch : SetFrameLevel ( 1 )
local stretch_texture = baseframe.button_stretch : CreateTexture ( nil , " overlay " )
stretch_texture : SetTexture ( DEFAULT_SKIN )
stretch_texture : SetTexCoord ( unpack ( COORDS_STRETCH ) )
stretch_texture : SetWidth ( 32 )
stretch_texture : SetHeight ( 16 )
stretch_texture : SetAllPoints ( baseframe.button_stretch )
baseframe.button_stretch . texture = stretch_texture
baseframe.button_stretch : SetWidth ( 32 )
baseframe.button_stretch : SetHeight ( 16 )
baseframe.button_stretch : Show ( )
Details.FadeHandler . Fader ( baseframe.button_stretch , " ALPHA " , 0 )
button_stretch_scripts ( baseframe , backgrounddisplay , instancia )
-- main window config -------------------------------------------------------------------------------------------------------------------------------------------------
baseframe : SetClampedToScreen ( true )
baseframe : SetSize ( Details.new_window_size . width , Details.new_window_size . height )
baseframe : SetPoint ( " center " , UIParent )
baseframe : EnableMouseWheel ( false )
baseframe : EnableMouse ( true )
if ( not DetailsFramework.IsDragonflight ( ) and not DetailsFramework.IsWotLKWowWithRetailAPI ( ) ) then
baseframe : SetMinResize ( 150 , 7 )
baseframe : SetMaxResize ( Details.max_window_size . width , Details.max_window_size . height )
else
--baseframe:SetResizeBounds(150, 7, _detalhes.max_window_size.width, _detalhes.max_window_size.height)
end
baseframe : SetBackdrop ( defaultBackdropSt )
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 ( defaultBackdropSt )
backgrounddisplay : SetBackdropColor ( instancia.bg_r , instancia.bg_g , instancia.bg_b , instancia.bg_alpha )
-- instance mini widgets -------------------------------------------------------------------------------------------------------------------------------------------------
--overall data warning
instancia.overall_data_warning = backgrounddisplay : CreateFontString ( nil , " overlay " , " GameFontHighlightSmall " )
instancia.overall_data_warning : SetHeight ( 64 )
instancia.overall_data_warning : SetPoint ( " center " , backgrounddisplay , " center " )
instancia.overall_data_warning : SetTextColor ( .8 , .8 , .8 , .5 )
instancia.overall_data_warning : Hide ( )
instancia.overall_data_warning : SetText ( Loc [ " STRING_TUTORIAL_OVERALL1 " ] )
--freeze icon
instancia.freeze_icon = backgrounddisplay : CreateTexture ( nil , " overlay " )
instancia.freeze_icon : SetWidth ( 64 )
instancia.freeze_icon : SetHeight ( 64 )
instancia.freeze_icon : SetPoint ( " center " , backgrounddisplay , " center " )
instancia.freeze_icon : SetPoint ( " left " , backgrounddisplay , " left " )
instancia.freeze_icon : Hide ( )
instancia.freeze_texto = backgrounddisplay : CreateFontString ( nil , " overlay " , " GameFontHighlightSmall " )
instancia.freeze_texto : SetHeight ( 64 )
instancia.freeze_texto : SetPoint ( " left " , instancia.freeze_icon , " right " , - 18 , 0 )
instancia.freeze_texto : SetTextColor ( 1 , 1 , 1 )
instancia.freeze_texto : Hide ( )
--details version
instancia._version = baseframe : CreateFontString ( nil , " overlay " , " GameFontHighlightSmall " )
--instancia._version:SetPoint("left", backgrounddisplay, "left", 20, 0)
instancia._version : SetTextColor ( 1 , 1 , 1 )
instancia._version : SetText ( " this is a alpha version of Details \n you can help us sending bug reports \n use the blue button. " )
if ( not Details.initializing ) then
end
instancia._version : Hide ( )
--wallpaper
baseframe.wallpaper = baseframe : CreateTexture ( nil , " overlay " )
baseframe.wallpaper : Hide ( )
--alert frame
baseframe.alert = CreateAlertFrame ( baseframe , instancia )
-- resizers & lock button ~lock ------------------------------------------------------------------------------------------------------------------------------------------------------------
--right resizer
baseframe.resize_direita = CreateFrame ( " button " , " Details_Resize_Direita " .. ID , baseframe )
local resize_direita_texture = baseframe.resize_direita : CreateTexture ( nil , " overlay " )
resize_direita_texture : SetWidth ( 16 )
resize_direita_texture : SetHeight ( 16 )
resize_direita_texture : SetTexture ( DEFAULT_SKIN )
resize_direita_texture : SetTexCoord ( unpack ( COORDS_RESIZE_RIGHT ) )
resize_direita_texture : SetAllPoints ( baseframe.resize_direita )
baseframe.resize_direita . texture = resize_direita_texture
baseframe.resize_direita : SetWidth ( 16 )
baseframe.resize_direita : SetHeight ( 16 )
baseframe.resize_direita : SetPoint ( " bottomright " , baseframe , " bottomright " , 0 , 0 )
baseframe.resize_direita : EnableMouse ( true )
baseframe.resize_direita : SetFrameStrata ( " HIGH " )
baseframe.resize_direita : SetFrameLevel ( baseframe : GetFrameLevel ( ) + 6 )
baseframe.resize_direita . side = 2
--lock window button
baseframe.lock_button = CreateFrame ( " button " , " Details_Lock_Button " .. ID , baseframe )
baseframe.lock_button : SetPoint ( " right " , baseframe.resize_direita , " left " , - 1 , 1.5 )
baseframe.lock_button : SetFrameLevel ( baseframe : GetFrameLevel ( ) + 6 )
baseframe.lock_button : SetWidth ( 40 )
baseframe.lock_button : SetHeight ( 16 )
baseframe.lock_button . label = baseframe.lock_button : CreateFontString ( nil , " overlay " , " GameFontNormal " )
baseframe.lock_button . label : SetPoint ( " right " , baseframe.lock_button , " right " )
baseframe.lock_button . label : SetTextColor ( .6 , .6 , .6 , .7 )
baseframe.lock_button . label : SetJustifyH ( " right " )
baseframe.lock_button . label : SetText ( Loc [ " STRING_LOCK_WINDOW " ] )
baseframe.lock_button : SetWidth ( baseframe.lock_button . label : GetStringWidth ( ) + 2 )
baseframe.lock_button : SetScript ( " OnClick " , lockFunctionOnClick )
baseframe.lock_button : SetScript ( " OnEnter " , lockFunctionOnEnter )
baseframe.lock_button : SetScript ( " OnLeave " , lockFunctionOnLeave )
baseframe.lock_button : SetScript ( " OnHide " , lockFunctionOnHide )
baseframe.lock_button : SetFrameStrata ( " HIGH " )
baseframe.lock_button : SetFrameLevel ( baseframe : GetFrameLevel ( ) + 6 )
baseframe.lock_button . instancia = instancia
--left resizer
baseframe.resize_esquerda = CreateFrame ( " button " , " Details_Resize_Esquerda " .. ID , baseframe )
local resize_esquerda_texture = baseframe.resize_esquerda : CreateTexture ( nil , " overlay " )
resize_esquerda_texture : SetWidth ( 16 )
resize_esquerda_texture : SetHeight ( 16 )
resize_esquerda_texture : SetTexture ( DEFAULT_SKIN )
resize_esquerda_texture : SetTexCoord ( unpack ( COORDS_RESIZE_LEFT ) )
resize_esquerda_texture : SetAllPoints ( baseframe.resize_esquerda )
baseframe.resize_esquerda . texture = resize_esquerda_texture
baseframe.resize_esquerda : SetWidth ( 16 )
baseframe.resize_esquerda : SetHeight ( 16 )
baseframe.resize_esquerda : SetPoint ( " bottomleft " , baseframe , " bottomleft " , 0 , 0 )
baseframe.resize_esquerda : EnableMouse ( true )
baseframe.resize_esquerda : SetFrameStrata ( " HIGH " )
baseframe.resize_esquerda : SetFrameLevel ( baseframe : GetFrameLevel ( ) + 6 )
baseframe.resize_esquerda : SetAlpha ( 0 )
baseframe.resize_direita : SetAlpha ( 0 )
if ( instancia.isLocked ) then
instancia.isLocked = not instancia.isLocked
lockFunctionOnClick ( baseframe.lock_button , nil , nil , true )
end
Details.FadeHandler . Fader ( baseframe.lock_button , - 1 , 3.0 )
-- scripts ------------------------------------------------------------------------------------------------------------------------------------------------------------
BFrame_scripts ( baseframe , instancia ) --baseframe
BGFrame_scripts ( switchbutton , baseframe , instancia ) --backgroundframe
BGFrame_scripts ( backgrounddisplay , baseframe , instancia )
iterate_scroll_scripts ( backgrounddisplay , backgroundframe , baseframe , scrollbar , instancia )
-- create toolbar ----------------------------------------------------------------------------------------------------------------------------------------------------------
gump : CriaCabecalho ( baseframe , instancia )
-- create statusbar ----------------------------------------------------------------------------------------------------------------------------------------------------------
gump : CriaRodape ( baseframe , instancia )
-- left and right side bars ------------------------------------------------------------------------------------------------------------------------------------------------------------
-- ~barra ~bordas ~border
--left
baseframe.barra_esquerda = floatingframe : CreateTexture ( nil , " artwork " )
baseframe.barra_esquerda : SetTexture ( DEFAULT_SKIN )
baseframe.barra_esquerda : SetTexCoord ( unpack ( COORDS_LEFT_SIDE_BAR ) )
baseframe.barra_esquerda : SetWidth ( 64 )
baseframe.barra_esquerda : SetHeight ( 512 )
baseframe.barra_esquerda : SetPoint ( " topleft " , baseframe , " topleft " , - 56 , 0 )
baseframe.barra_esquerda : SetPoint ( " bottomleft " , baseframe , " bottomleft " , - 56 , - 14 )
--right
baseframe.barra_direita = floatingframe : CreateTexture ( nil , " artwork " )
baseframe.barra_direita : SetTexture ( DEFAULT_SKIN )
baseframe.barra_direita : SetTexCoord ( unpack ( COORDS_RIGHT_SIDE_BAR ) )
baseframe.barra_direita : SetWidth ( 64 )
baseframe.barra_direita : SetHeight ( 512 )
baseframe.barra_direita : SetPoint ( " topright " , baseframe , " topright " , 56 , 0 )
baseframe.barra_direita : SetPoint ( " bottomright " , baseframe , " bottomright " , 56 , - 14 )
--bottom
baseframe.barra_fundo = floatingframe : CreateTexture ( nil , " artwork " )
baseframe.barra_fundo : SetTexture ( DEFAULT_SKIN )
baseframe.barra_fundo : SetTexCoord ( unpack ( COORDS_BOTTOM_SIDE_BAR ) )
baseframe.barra_fundo : SetWidth ( 512 )
baseframe.barra_fundo : SetHeight ( 64 )
baseframe.barra_fundo : SetPoint ( " bottomleft " , baseframe , " bottomleft " , 0 , - 56 )
baseframe.barra_fundo : SetPoint ( " bottomright " , baseframe , " bottomright " , 0 , - 56 )
-- break snap button ----------------------------------------------------------------------------------------------------------------------------------------------------------
instancia.break_snap_button = CreateFrame ( " button " , " DetailsBreakSnapButton " .. ID , floatingframe )
instancia.break_snap_button : SetPoint ( " bottom " , baseframe.resize_direita , " top " , - 1 , 0 )
instancia.break_snap_button : SetFrameLevel ( baseframe : GetFrameLevel ( ) + 5 )
instancia.break_snap_button : SetSize ( 13 , 13 )
instancia.break_snap_button : SetAlpha ( 0 )
instancia.break_snap_button . instancia = instancia
instancia.break_snap_button : SetScript ( " OnClick " , function ( )
if ( Details.disable_lock_ungroup_buttons ) then
return
end
instancia : Desagrupar ( - 1 )
--hide tutorial
if ( DetailsWindowGroupPopUp1 and DetailsWindowGroupPopUp1 : IsShown ( ) ) then
DetailsWindowGroupPopUp1 : Hide ( )
end
end )
instancia.break_snap_button : SetScript ( " OnEnter " , unSnapButtonOnEnter )
instancia.break_snap_button : SetScript ( " OnLeave " , unSnapButtonOnLeave )
instancia.break_snap_button : SetNormalTexture ( DEFAULT_SKIN )
instancia.break_snap_button : SetDisabledTexture ( DEFAULT_SKIN )
instancia.break_snap_button : SetHighlightTexture ( DEFAULT_SKIN , " ADD " )
instancia.break_snap_button : SetPushedTexture ( DEFAULT_SKIN )
instancia.break_snap_button : GetNormalTexture ( ) : SetTexCoord ( unpack ( COORDS_UNLOCK_BUTTON ) )
instancia.break_snap_button : GetDisabledTexture ( ) : SetTexCoord ( unpack ( COORDS_UNLOCK_BUTTON ) )
instancia.break_snap_button : GetHighlightTexture ( ) : SetTexCoord ( unpack ( COORDS_UNLOCK_BUTTON ) )
instancia.break_snap_button : GetPushedTexture ( ) : SetTexCoord ( unpack ( COORDS_UNLOCK_BUTTON ) )
-- scripts ------------------------------------------------------------------------------------------------------------------------------------------------------------
setWindowResizeScripts ( baseframe.resize_direita , instancia , scrollbar , " > " , baseframe )
setWindowResizeScripts ( 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 Details : IsShowingOverallDataWarning ( )
return self.overall_data_warning : IsShown ( )
end
function Details : ShowOverallDataWarning ( state )
if ( state ) then
self.overall_data_warning : Show ( )
self.overall_data_warning : SetWidth ( self : GetSize ( ) - 20 )
else
self.overall_data_warning : Hide ( )
end
end
function Details : SetBarFollowPlayer ( follow )
if ( follow == nil ) then
follow = self.following . enabled
end
self.following . enabled = follow
self : RefreshBars ( )
self : InstanceReset ( )
self : ReajustaGump ( )
end
function Details : SetBarOrientationDirection ( orientation )
if ( orientation == nil ) then
orientation = self.bars_inverted
end
self.bars_inverted = orientation
self : InstanceRefreshRows ( )
self : RefreshBars ( )
self : InstanceReset ( )
self : ReajustaGump ( )
end
function Details : SetBarGrowDirection ( direction )
if ( not direction ) then
direction = self.bars_grow_direction
end
self.bars_grow_direction = direction
local x = self.row_info . space.left
local bars = self.barras or self.Bars --.Bars for third-party plugins
local baseframe = self.baseframe or self.Frame --.Frame for plugins
local height = self.row_height
if ( direction == 1 ) then --top to bottom
for index , row in ipairs ( bars ) do
local y = height * ( index - 1 )
y = y * - 1
row : ClearAllPoints ( )
if ( self.toolbar_side == 1 ) then
--if titlebar is attached to the top side, don't add any midifiers
row : SetPoint ( " topleft " , baseframe , " topleft " , x , y )
else
--if the titlebar is on the bottom side, remove the gap between the baseframe and the titlebar
row : SetPoint ( " topleft " , baseframe , " topleft " , x , y - 1 )
end
end
elseif ( direction == 2 ) then --bottom to top
for index , row in ipairs ( bars ) do
local y = height * ( index - 1 )
row : ClearAllPoints ( )
if ( self.toolbar_side == 1 ) then
--if the titlebar is attached to the top side, we want to align bars a little above
row : SetPoint ( " bottomleft " , baseframe , " bottomleft " , x , y + 2 )
else
--the titlebar is on the bottom side, align bars on the bottom
row : SetPoint ( " bottomleft " , baseframe , " bottomleft " , x , y + 0 )
end
end
end
--update all row width
if ( self.bar_mod and self.bar_mod ~= 0 ) then
for index = 1 , # bars do
bars [ index ] : SetWidth ( baseframe : GetWidth ( ) + self.bar_mod )
end
else
for index = 1 , # bars do
bars [ index ] : SetWidth ( baseframe : GetWidth ( ) + self.row_info . space.right )
end
end
end
local windowLineMixin = {
SetLineTexture = function ( self , texture , coords , vertexColor )
self.texture : SetTexture ( texture )
self.texture : SetTexCoord ( unpack ( coords ) )
self.texture : SetVertexColor ( DetailsFramework : ParseColors ( vertexColor ) )
end ,
SetLineIconTexture = function ( self , texture , coords , vertexColor )
self.icon_frame : SetTexture ( texture )
self.icon_frame : SetTexCoord ( unpack ( coords ) )
self.icon_frame : SetVertexColor ( DetailsFramework : ParseColors ( vertexColor ) )
self.iconHighlight : SetTexture ( texture )
self.iconHighlight : SetTexCoord ( unpack ( coords ) )
self.iconHighlight : SetVertexColor ( DetailsFramework : ParseColors ( vertexColor ) )
end ,
GetActor = function ( self )
return self.minha_tabela
end ,
GetInstanceId = function ( self )
return self.instance_id
end ,
GetLineId = function ( self )
return self.row_id
end ,
GetClassIcon = function ( self )
return self.icone_classe
end ,
}
Details.barras_criadas = 0
--alias
function gump : NewRow ( instancia , index )
return gump : CreateNewLine ( instancia , index )
end
--search key: ~row ~barra ~newbar ~createbar ~createrow
function gump : CreateNewLine ( instance , index )
--instance = window object, index = row number
local baseframe = instance.baseframe
local rowframe = instance.rowframe
--create the bar with rowframe as parent
local newLine = CreateFrame ( " button " , " DetailsBarra_ " .. instance.meu_id .. " _ " .. index , rowframe , " BackdropTemplate " )
DetailsFramework : Mixin ( newLine , windowLineMixin )
newLine.row_id = index
newLine.instance_id = instance.meu_id
newLine.animacao_fim = 0
newLine.animacao_fim2 = 0
newLine.isInstanceLine = true
--set point, almost irrelevant here, it recalc this on SetBarGrowDirection()
local yOffset = instance.row_height * ( index - 1 )
if ( instance.bars_grow_direction == 1 ) then
yOffset = yOffset * - 1
newLine : SetPoint ( " topleft " , baseframe , " topleft " , instance.row_info . space.left , yOffset )
elseif ( instance.bars_grow_direction == 2 ) then
newLine : SetPoint ( " bottomleft " , baseframe , " bottomleft " , instance.row_info . space.left , yOffset + 2 )
end
--row height
newLine : SetHeight ( instance.row_info . height )
newLine : SetWidth ( baseframe : GetWidth ( ) + instance.row_info . space.right )
newLine : SetFrameLevel ( baseframe : GetFrameLevel ( ) + 4 )
newLine.last_value = 0
newLine.w_mod = 0
newLine : EnableMouse ( true )
newLine : RegisterForClicks ( " LeftButtonDown " , " RightButtonDown " )
--statusbar
newLine.statusbar = CreateFrame ( " StatusBar " , " DetailsBarra_Statusbar_ " .. instance.meu_id .. " _ " .. index , newLine )
newLine.statusbar . value = 0
newLine.statusbar : SetStatusBarColor ( 0 , 0 , 0 , 0 )
newLine.statusbar : SetMinMaxValues ( 0 , 100 )
newLine.statusbar : SetValue ( 0 )
--create textures and icons
newLine.textura = newLine.statusbar : CreateTexture ( nil , " artwork " )
newLine.textura : SetHorizTile ( false )
newLine.textura : SetVertTile ( false )
newLine.statusbar : SetStatusBarTexture ( newLine.textura )
--frame for hold the backdrop border
newLine.border = CreateFrame ( " Frame " , " DetailsBarra_Border_ " .. instance.meu_id .. " _ " .. index , newLine.statusbar , " BackdropTemplate " )
newLine.border : SetFrameLevel ( newLine.statusbar : GetFrameLevel ( ) + 2 )
newLine.border : SetAllPoints ( newLine )
--border
newLine.lineBorder = DetailsFramework : CreateFullBorder ( newLine : GetName ( ) .. " Border " , newLine.border )
--low 3d bar --search key: ~model
newLine.modelbox_low = CreateFrame ( " playermodel " , " DetailsBarra_ModelBarLow_ " .. instance.meu_id .. " _ " .. index , newLine )
newLine.modelbox_low : SetFrameLevel ( newLine.statusbar : GetFrameLevel ( ) - 1 )
newLine.modelbox_low : SetPoint ( " topleft " , newLine , " topleft " )
newLine.modelbox_low : SetPoint ( " bottomright " , newLine , " bottomright " )
--high 3d bar
newLine.modelbox_high = CreateFrame ( " playermodel " , " DetailsBarra_ModelBarHigh_ " .. instance.meu_id .. " _ " .. index , newLine )
newLine.modelbox_high : SetFrameLevel ( newLine.statusbar : GetFrameLevel ( ) + 1 )
newLine.modelbox_high : SetPoint ( " topleft " , newLine , " topleft " )
newLine.modelbox_high : SetPoint ( " bottomright " , newLine , " bottomright " )
--row background texture
newLine.background = newLine : CreateTexture ( nil , " background " )
newLine.background : SetTexture ( " " )
newLine.background : SetAllPoints ( newLine )
--overlay texture
newLine.overlayTexture = newLine.statusbar : CreateTexture ( nil , " overlay " )
newLine.overlayTexture : SetAllPoints ( )
--class icon
local classIcon = newLine.border : CreateTexture ( nil , " overlay " , nil , 5 )
classIcon : SetHeight ( instance.row_info . height )
classIcon : SetWidth ( instance.row_info . height )
classIcon : SetTexture ( instance.row_info . icon_file )
classIcon : SetTexCoord ( .75 , 1 , .75 , 1 )
newLine.icone_classe = classIcon
--class icon highlight
local iconHightlight = newLine.border : CreateTexture ( nil , " overlay " , nil , 6 )
iconHightlight : SetAllPoints ( classIcon )
iconHightlight : Hide ( )
newLine.iconHighlight = iconHightlight
local iconFrame = CreateFrame ( " frame " , " DetailsBarra_IconFrame_ " .. instance.meu_id .. " _ " .. index , newLine.statusbar )
iconFrame : SetPoint ( " topleft " , classIcon , " topleft " )
iconFrame : SetPoint ( " bottomright " , classIcon , " bottomright " )
iconFrame : SetFrameLevel ( newLine.statusbar : GetFrameLevel ( ) + 1 )
iconFrame.instance_id = instance.meu_id
iconFrame.row = newLine
newLine.icon_frame = iconFrame
classIcon : SetPoint ( " left " , newLine , " left " )
newLine.statusbar : SetPoint ( " topleft " , classIcon , " topright " )
newLine.statusbar : SetPoint ( " bottomright " , newLine , " bottomright " )
--left text 1
newLine.lineText1 = newLine.border : CreateFontString ( nil , " overlay " , " GameFontHighlight " )
newLine.lineText1 : SetPoint ( " left " , newLine.icone_classe , " right " , 3 , 0 )
newLine.lineText1 : SetJustifyH ( " left " )
newLine.lineText1 : SetNonSpaceWrap ( true )
--create text columns
for i = 2 , 4 do
newLine [ " lineText " .. i ] = newLine.border : CreateFontString ( nil , " overlay " , " GameFontHighlight " )
end
--set the onclick, on enter scripts
setLineScripts ( newLine , instance , index )
--hide
Details.FadeHandler . Fader ( newLine , 1 )
--adds the window container
instance.barras [ index ] = newLine
--set the left text
newLine.lineText1 : SetText ( Loc [ " STRING_NEWROW " ] )
--refresh rows
instance : InstanceRefreshRows ( )
Details : SendEvent ( " DETAILS_INSTANCE_NEWROW " , nil , instance , newLine )
return newLine
end
function Details : SetBarTextSettings ( size , font , fixedcolor , leftcolorbyclass , rightcolorbyclass , leftoutline , rightoutline , customrighttextenabled , customrighttext , percentage_type , showposition , customlefttextenabled , customlefttext , smalloutline_left , smalloutlinecolor_left , smalloutline_right , smalloutlinecolor_right , translittext , yoffset , leftoffset )
--size
if ( size ) then
self.row_info . font_size = size
end
--font
if ( font ) then
self.row_info . font_face = font
self.row_info . font_face_file = SharedMedia : Fetch ( " font " , font )
end
--fixed color
if ( fixedcolor ) then
local red , green , blue , alpha = gump : ParseColors ( fixedcolor )
local c = self.row_info . fixed_text_color
c [ 1 ] , c [ 2 ] , c [ 3 ] , c [ 4 ] = red , green , blue , alpha
end
--left color by class
if ( type ( leftcolorbyclass ) == " boolean " ) then
self.row_info . textL_class_colors = leftcolorbyclass
end
--right color by class
if ( type ( rightcolorbyclass ) == " boolean " ) then
self.row_info . textR_class_colors = rightcolorbyclass
end
--left text outline
if ( type ( leftoutline ) == " boolean " ) then
self.row_info . textL_outline = leftoutline
end
--right text outline
if ( type ( rightoutline ) == " boolean " ) then
self.row_info . textR_outline = rightoutline
end
-- left text small outline and small outline color
if ( type ( smalloutline_left ) == " boolean " ) then
self.row_info . textL_outline_small = smalloutline_left
end
if ( smalloutlinecolor_left ) then
local red , green , blue , alpha = gump : ParseColors ( smalloutlinecolor_left )
local color = self.row_info . textL_outline_small_color
color [ 1 ] , color [ 2 ] , color [ 3 ] , color [ 4 ] = red , green , blue , alpha
end
-- right text small outline and small outline color
if ( type ( smalloutline_right ) == " boolean " ) then
self.row_info . textR_outline_small = smalloutline_right
end
if ( smalloutlinecolor_right ) then
local red , green , blue , alpha = gump : ParseColors ( smalloutlinecolor_right )
local color = self.row_info . textR_outline_small_color
color [ 1 ] , color [ 2 ] , color [ 3 ] , color [ 4 ] = red , green , blue , alpha
end
--custom left text
if ( type ( customlefttextenabled ) == " boolean " ) then
self.row_info . textL_enable_custom_text = customlefttextenabled
end
if ( customlefttext ) then
self.row_info . textL_custom_text = customlefttext
end
--custom right text
if ( type ( customrighttextenabled ) == " boolean " ) then
self.row_info . textR_enable_custom_text = customrighttextenabled
end
if ( customrighttext ) then
self.row_info . textR_custom_text = customrighttext
end
--percent type
if ( percentage_type ) then
self.row_info . percent_type = percentage_type
end
--show position number
if ( type ( showposition ) == " boolean " ) then
self.row_info . textL_show_number = showposition
end
--translit text by Vardex (https://github.com/Vardex May 22, 2019)
if ( type ( translittext ) == " boolean " ) then
self.row_info . textL_translit_text = translittext
end
if ( yoffset ) then
self.row_info . text_yoffset = yoffset
end
if ( leftoffset ) then
self.row_info . textL_offset = leftoffset
end
self : InstanceReset ( )
self : InstanceRefreshRows ( )
end
function Details : SetBarBackdropSettings ( enabled , size , color , use_class_colors )
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 ( type ( use_class_colors ) ~= " boolean " ) then
use_class_colors = self.row_info . backdrop.use_class_colors
end
self.row_info . backdrop.enabled = enabled
self.row_info . backdrop.size = size
self.row_info . backdrop.color = color
self.row_info . backdrop.use_class_colors = use_class_colors
self : InstanceReset ( )
self : InstanceRefreshRows ( )
self : ReajustaGump ( )
end
function Details : SetTitleBarSettings ( shown , height , texture , color )
if ( type ( shown ) ~= " boolean " ) then
shown = self.titlebar_shown
end
if ( not height ) then
height = self.titlebar_height
end
if ( not texture ) then
texture = self.titlebar_texture
end
if ( not color ) then
color = self.titlebar_texture_color
end
self.titlebar_shown = shown
self.titlebar_height = height
self.titlebar_texture = texture
self.titlebar_texture_color = color
end
function Details : RefreshTitleBar ( )
local shown = self.titlebar_shown
local height = self.titlebar_height
local texture = self.titlebar_texture
local color = self.titlebar_texture_color
local texturePath = SharedMedia : Fetch ( " statusbar " , texture )
local titleBar = self.baseframe . titleBar
titleBar : SetShown ( shown )
--menu_attribute_string is nil in tbc (20 jun 2022)
if ( not self.menu_attribute_string ) then
return
end
if ( shown ) then
titleBar : SetHeight ( height )
titleBar.texture : SetTexture ( texturePath )
titleBar.texture : SetVertexColor ( DetailsFramework : ParseColors ( color ) )
self.menu_attribute_string : SetParent ( titleBar )
else
self.menu_attribute_string : SetParent ( self.baseframe )
end
end
function Details : 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 ( )
Details : RefreshMainWindow ( - 1 , true )
end
-- ~spec ~icons
function Details : 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 Details.track_specs ) then
Details.track_specs = true
Details : TrackSpecsNow ( fulltrack )
end
else
local have_enabled
for _ , instance in ipairs ( Details.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
Details.track_specs = false
Details : ResetSpecCache ( true ) --force
end
end
self : InstanceReset ( )
self : InstanceRefreshRows ( )
self : ReajustaGump ( )
end
function Details : SetBarArenaRoleIconSettings ( show_icon , icon_size_offset )
if ( type ( show_icon ) ~= " boolean " ) then
show_icon = self.row_info . show_arena_role_icon
end
if ( not icon_size_offset or type ( icon_size_offset ) ~= " number " ) then
icon_size_offset = self.row_info . arena_role_icon_size_offset
end
self.row_info . show_arena_role_icon = show_icon
self.row_info . arena_role_icon_size_offset = icon_size_offset
self : InstanceReset ( )
self : InstanceRefreshRows ( )
self : ReajustaGump ( )
end
function Details : SetBarFactionIconSettings ( show_faction_icon , faction_icon_size_offset )
if ( type ( show_faction_icon ) ~= " boolean " ) then
show_faction_icon = self.row_info . show_faction_icon
end
if ( not faction_icon_size_offset or type ( faction_icon_size_offset ) ~= " number " ) then
faction_icon_size_offset = self.row_info . faction_icon_size_offset
end
self.row_info . show_faction_icon = show_faction_icon
self.row_info . faction_icon_size_offset = faction_icon_size_offset
self : InstanceReset ( )
self : InstanceRefreshRows ( )
self : ReajustaGump ( )
end
function Details : SetBarSettings ( height , texture , colorclass , fixedcolor , backgroundtexture , backgroundcolorclass , backgroundfixedcolor , alpha , iconfile , barstart , spacement , texture_custom , icon_size_offset )
--bar start
if ( type ( barstart ) == " boolean " ) then
self.row_info . start_after_icon = barstart
end
--icon file
if ( iconfile ) then
self.row_info . icon_file = iconfile
if ( iconfile == " " ) then
self.row_info . no_icon = true
else
self.row_info . no_icon = false
end
end
--alpha
if ( alpha ) then
self.row_info . alpha = alpha
end
--height
if ( height ) then
self.row_info . height = height
self.row_height = height + self.row_info . space.between
end
--spacement
if ( spacement ) then
self.row_info . space.between = spacement
self.row_height = self.row_info . height + spacement
end
--texture
if ( texture ) then
self.row_info . texture = texture
self.row_info . texture_file = SharedMedia : Fetch ( " statusbar " , texture )
end
if ( texture_custom ) then
self.row_info . texture_custom = texture_custom
self.row_info . texture_custom_file = " Interface \\ " .. self.row_info . texture_custom
end
--color by class
if ( type ( colorclass ) == " boolean " ) then
self.row_info . texture_class_colors = colorclass
end
--fixed color
if ( fixedcolor ) then
local red , green , blue = gump : ParseColors ( fixedcolor )
local color = self.row_info . fixed_texture_color
color [ 1 ] , color [ 2 ] , color [ 3 ] , color [ 4 ] = red , green , blue , self.row_info . alpha
end
--background texture
if ( backgroundtexture ) then
self.row_info . texture_background = backgroundtexture
self.row_info . texture_background_file = SharedMedia : Fetch ( " statusbar " , backgroundtexture )
end
--background color by class
if ( type ( backgroundcolorclass ) == " boolean " ) then
self.row_info . texture_background_class_color = backgroundcolorclass
end
--background fixed color
if ( backgroundfixedcolor ) then
local red , green , blue , alpha = gump : ParseColors ( backgroundfixedcolor )
local color = self.row_info . fixed_texture_background_color
color [ 1 ] , color [ 2 ] , color [ 3 ] , color [ 4 ] = red , green , blue , alpha
end
if ( icon_size_offset and type ( icon_size_offset ) == " number " ) then
self.row_info . icon_size_offset = icon_size_offset
end
self : InstanceReset ( )
self : InstanceRefreshRows ( )
self : ReajustaGump ( )
end
local brackets = {
[ " ( " ] = { " ( " , " ) " } ,
[ " { " ] = { " { " , " } " } ,
[ " [ " ] = { " [ " , " ] " } ,
[ " < " ] = { " < " , " > " } ,
[ " NONE " ] = { " " , " " } ,
}
local separators = {
[ " , " ] = " , " ,
[ " . " ] = " . " ,
[ " ; " ] = " ; " ,
[ " - " ] = " - " ,
[ " | " ] = " | " ,
[ " / " ] = " / " ,
[ " \\ " ] = " \\ " ,
[ " ~ " ] = " ~ " ,
[ " NONE " ] = " " ,
}
function Details : GetBarBracket ( )
return brackets [ self.row_info . textR_bracket ]
end
function Details : GetBarSeparator ( )
return separators [ self.row_info . textR_separator ]
end
function Details : 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])
--onupdate function for 'Fast Updates' feature
local fastUpdatePerSecondFunc = function ( self )
local instance = self.instance
if ( not instance.showing ) then
return
end
local combatTime = instance.showing : GetCombatTime ( )
local abbreviationType = Details.ps_abbreviation
local abbreviationFunc = tokFunctions [ abbreviationType ]
local isInLineTextEnabled = instance.use_multi_fontstrings
local instanceShowDataSettings = instance.row_info . textR_show_data
local showingAllData = instanceShowDataSettings [ 3 ] and instanceShowDataSettings [ 2 ] and instanceShowDataSettings [ 1 ]
local showingTotalAndPS = not instanceShowDataSettings [ 3 ] and instanceShowDataSettings [ 2 ] and instanceShowDataSettings [ 1 ]
local showingOnlyPS = not instanceShowDataSettings [ 3 ] and instanceShowDataSettings [ 2 ] and not instanceShowDataSettings [ 1 ]
if ( instance.rows_fit_in_window ) then
for i = 1 , instance.rows_fit_in_window do --instance:GetNumRows()
local row = instance.barras [ i ] --instance:GetRow (i)
if ( row and row : IsShown ( ) ) then
local actor = row.minha_tabela
if ( actor ) then
local currentDps = floor ( actor.total / combatTime ) --can also be hps
if ( isInLineTextEnabled ) then
if ( showingAllData ) then
row.lineText3 : SetText ( abbreviationFunc ( nil , currentDps ) )
elseif ( showingTotalAndPS or showingOnlyPS ) then
row.lineText4 : SetText ( abbreviationFunc ( nil , currentDps ) )
end
else
local dpsText = row.ps_text
if ( dpsText ) then
local formatedDps = abbreviationFunc ( nil , currentDps )
row.lineText4 : SetText ( ( row.lineText4 : GetText ( ) or " " ) : gsub ( dpsText , formatedDps ) )
row.ps_text = formatedDps
end
end
end
end
end
end
end
-- ~dps ~hps
--check if can start or need to stop
function Details : CheckPsUpdate ( )
local isEnabled = self.row_info . fast_ps_update
if ( isEnabled ) 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 Details.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 " , fastUpdatePerSecondFunc )
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 Details : 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
function Details : AdjustInLineTextPadding ( )
for _ , row in ipairs ( self.barras ) do
row.lineText2 : SetPoint ( " right " , row.statusbar , " right " , - self.fontstrings_text2_anchor , self.row_info . text_yoffset )
row.lineText3 : SetPoint ( " right " , row.statusbar , " right " , - self.fontstrings_text3_anchor , self.row_info . text_yoffset )
row.lineText4 : SetPoint ( " right " , row.statusbar , " right " , - self.fontstrings_text4_anchor , self.row_info . text_yoffset )
end
end
-- search key: ~row ~bar ~updatebar
function Details : InstanceRefreshRows ( instance )
if ( instance ) then
self = instance
end
if ( not self.barras or not self.barras [ 1 ] ) then
return
end
--mirror
local isInvertedBars = self.bars_inverted
--texture
local textureFile = SharedMedia : Fetch ( " statusbar " , self.row_info . texture )
local textureFile2 = SharedMedia : Fetch ( " statusbar " , self.row_info . texture_background )
--update texture files
self.row_info . texture_file = textureFile
self.row_info . texture_background_file = textureFile2
if ( type ( self.row_info . texture_custom ) == " string " and self.row_info . texture_custom ~= " " ) then
textureFile = [[Interface\]] .. self.row_info . texture_custom
--update texture file
self.row_info . texture_custom_file = textureFile
end
--outline values
local left_text_outline = self.row_info . textL_outline
local right_text_outline = self.row_info . textR_outline
local textL_outline_small = self.row_info . textL_outline_small
local textL_outline_small_color = self.row_info . textL_outline_small_color
local textR_outline_small = self.row_info . textR_outline_small
local textR_outline_small_color = self.row_info . textR_outline_small_color
--texture color values
local texture_class_color = self.row_info . texture_class_colors
local texture_r , texture_g , texture_b
if ( not texture_class_color ) then
texture_r , texture_g , texture_b = unpack ( self.row_info . fixed_texture_color )
end
--text color
local left_text_class_color = self.row_info . textL_class_colors
local right_text_class_color = self.row_info . textR_class_colors
local text_r , text_g , text_b
if ( not left_text_class_color or not right_text_class_color ) then
text_r , text_g , text_b = unpack ( self.row_info . fixed_text_color )
end
local height = self.row_info . height
--alpha
local alpha = self.row_info . alpha
--icons
local no_icon = self.row_info . no_icon
local start_after_icon = self.row_info . start_after_icon
local isDesaturated = self.row_info . icon_grayscale
local icon_offset_x , icon_offset_y = unpack ( self.row_info . icon_offset )
--line border
local lineBorderEnabled = self.row_info . backdrop.enabled
local lineBorderColor = self.row_info . backdrop.color
local lineBorderSize = self.row_info . backdrop.size
--font face
self.row_info . font_face_file = SharedMedia : Fetch ( " font " , self.row_info . font_face )
--models
local upper_model_enabled = self.row_info . models.upper_enabled
local lower_model_enabled = self.row_info . models.lower_enabled
local upper_model = self.row_info . models.upper_model
local lower_model = self.row_info . models.lower_model
local upper_model_alpha = self.row_info . models.upper_alpha
local lower_model_alpha = self.row_info . models.lower_alpha
local overlayTexture = SharedMedia : Fetch ( " statusbar " , self.row_info . overlay_texture )
local overlayColor = self.row_info . overlay_color
for _ , row in ipairs ( self.barras ) do
--positioning and size
row : SetHeight ( height )
row.icone_classe : SetSize ( height , height )
if ( isDesaturated ) then
row.icone_classe : SetDesaturated ( true )
row.iconHighlight : SetDesaturated ( true )
else
row.icone_classe : SetDesaturated ( false )
row.iconHighlight : SetDesaturated ( false )
end
--icon and texture anchors
if ( not isInvertedBars ) then
row.lineText1 : ClearAllPoints ( )
row.lineText2 : ClearAllPoints ( )
row.lineText3 : ClearAllPoints ( )
row.lineText4 : ClearAllPoints ( )
row.lineText1 : SetJustifyH ( " left " )
row.lineText2 : SetJustifyH ( " right " )
row.lineText3 : SetJustifyH ( " right " )
row.lineText4 : SetJustifyH ( " right " )
if ( not self.use_multi_fontstrings ) then
row.lineText2 : SetText ( " " )
row.lineText3 : SetText ( " " )
end
row.lineText4 : SetText ( " " )
row.lineText2 : SetPoint ( " right " , row.statusbar , " right " , - self.fontstrings_text2_anchor , self.row_info . text_yoffset )
row.lineText3 : SetPoint ( " right " , row.statusbar , " right " , - self.fontstrings_text3_anchor , self.row_info . text_yoffset )
row.lineText4 : SetPoint ( " right " , row.statusbar , " right " , - self.fontstrings_text4_anchor , self.row_info . text_yoffset )
if ( no_icon ) then
row.statusbar : SetPoint ( " topleft " , row , " topleft " )
row.statusbar : SetPoint ( " bottomright " , row , " bottomright " )
row.lineText1 : SetPoint ( " left " , row.statusbar , " left " , self.row_info . textL_offset + 2 , self.row_info . text_yoffset )
row.icone_classe : Hide ( )
row.iconHighlight : Hide ( )
else
row.icone_classe : ClearAllPoints ( )
row.icone_classe : SetPoint ( " left " , row , " left " , icon_offset_x , icon_offset_y )
row.icone_classe : Show ( )
if ( start_after_icon ) then
row.statusbar : SetPoint ( " topleft " , row.icone_classe , " topright " )
else
row.statusbar : SetPoint ( " topleft " , row , " topleft " )
end
row.statusbar : SetPoint ( " bottomright " , row , " bottomright " )
row.lineText1 : SetPoint ( " left " , row.icone_classe , " right " , self.row_info . textL_offset + 3 , self.row_info . text_yoffset )
end
else
row.lineText1 : ClearAllPoints ( )
row.lineText2 : ClearAllPoints ( )
row.lineText3 : ClearAllPoints ( )
row.lineText4 : ClearAllPoints ( )
row.lineText4 : SetJustifyH ( " left " )
row.lineText3 : SetJustifyH ( " left " )
row.lineText2 : SetJustifyH ( " left " )
row.lineText1 : SetJustifyH ( " right " )
row.lineText4 : SetPoint ( " left " , row.statusbar , " left " , self.fontstrings_text4_anchor + 1 , self.row_info . text_yoffset )
row.lineText3 : SetPoint ( " left " , row.statusbar , " left " , self.fontstrings_text3_anchor + 1 , self.row_info . text_yoffset )
row.lineText2 : SetPoint ( " left " , row.statusbar , " left " , self.fontstrings_text2_anchor + 1 , self.row_info . text_yoffset )
if ( no_icon ) then
row.statusbar : SetPoint ( " topleft " , row , " topleft " )
row.statusbar : SetPoint ( " bottomright " , row , " bottomright " )
row.lineText1 : SetPoint ( " right " , row.statusbar , " right " , - self.row_info . textL_offset - 2 , self.row_info . text_yoffset )
row.icone_classe : Hide ( )
row.iconHighlight : Hide ( )
--[[ Deprecation of right_to_left_texture in favor of StatusBar:SetReverseFill 5/2/2022 - Flamanis
row.right_to_left_texture : SetPoint ( " topright " , row.statusbar , " topright " )
row.right_to_left_texture : SetPoint ( " bottomright " , row.statusbar , " bottomright " ) ] ]
else
row.icone_classe : ClearAllPoints ( )
row.icone_classe : SetPoint ( " right " , row , " right " , icon_offset_x , icon_offset_y )
row.icone_classe : Show ( )
if ( start_after_icon ) then
row.statusbar : SetPoint ( " bottomright " , row.icone_classe , " bottomleft " )
else
row.statusbar : SetPoint ( " bottomright " , row , " bottomright " )
end
row.statusbar : SetPoint ( " topleft " , row , " topleft " )
row.lineText1 : SetPoint ( " right " , row.icone_classe , " left " , - self.row_info . textL_offset - 2 , self.row_info . text_yoffset )
end
end
if ( not self.row_info . texture_background_class_color ) then
local color = self.row_info . fixed_texture_background_color
row.background : SetVertexColor ( color [ 1 ] , color [ 2 ] , color [ 3 ] , color [ 4 ] )
else
local color = self.row_info . fixed_texture_background_color
local r , g , b = row.background : GetVertexColor ( )
row.background : SetVertexColor ( r , g , b , color [ 4 ] )
end
--outline
if ( left_text_outline ) then
Details : SetFontOutline ( row.lineText1 , left_text_outline )
else
Details : SetFontOutline ( row.lineText1 , nil )
end
if ( right_text_outline ) then
self : SetFontOutline ( row.lineText2 , right_text_outline )
self : SetFontOutline ( row.lineText3 , right_text_outline )
self : SetFontOutline ( row.lineText4 , right_text_outline )
else
self : SetFontOutline ( row.lineText2 , nil )
self : SetFontOutline ( row.lineText3 , nil )
self : SetFontOutline ( row.lineText4 , nil )
end
--small outline
if ( textL_outline_small ) then
local color = textL_outline_small_color
row.lineText1 : SetShadowColor ( color [ 1 ] , color [ 2 ] , color [ 3 ] , color [ 4 ] )
else
row.lineText1 : SetShadowColor ( 0 , 0 , 0 , 0 )
end
if ( textR_outline_small ) then
local color = textR_outline_small_color
row.lineText4 : SetShadowColor ( color [ 1 ] , color [ 2 ] , color [ 3 ] , color [ 4 ] )
row.lineText3 : SetShadowColor ( color [ 1 ] , color [ 2 ] , color [ 3 ] , color [ 4 ] )
row.lineText2 : SetShadowColor ( color [ 1 ] , color [ 2 ] , color [ 3 ] , color [ 4 ] )
else
row.lineText4 : SetShadowColor ( 0 , 0 , 0 , 0 )
row.lineText3 : SetShadowColor ( 0 , 0 , 0 , 0 )
row.lineText2 : SetShadowColor ( 0 , 0 , 0 , 0 )
end
--texture
row.textura : SetTexture ( textureFile )
row.background : SetTexture ( textureFile2 )
row.overlayTexture : SetTexture ( overlayTexture )
row.overlayTexture : SetVertexColor ( unpack ( overlayColor ) )
if ( isInvertedBars ) then
row.statusbar : SetReverseFill ( true )
else
row.statusbar : SetReverseFill ( false )
end
--texture class color: if true color changes on the fly through class refresh
if ( not texture_class_color ) then
row.textura : SetVertexColor ( texture_r , texture_g , texture_b , alpha )
else
--automatically color the bar by the actor class
--forcing alpha 1 instead of use the alpha from the fixed color
local r , g , b = row.textura : GetVertexColor ( )
row.textura : SetVertexColor ( r , g , b , 1 ) --alpha
end
--text class color: if true color changes on the fly through class refresh
if ( not left_text_class_color ) then
row.lineText1 : SetTextColor ( text_r , text_g , text_b )
end
if ( not right_text_class_color ) then
row.lineText4 : SetTextColor ( text_r , text_g , text_b )
row.lineText3 : SetTextColor ( text_r , text_g , text_b )
row.lineText2 : SetTextColor ( text_r , text_g , text_b )
end
--text size
Details : SetFontSize ( row.lineText1 , self.row_info . font_size or height * 0.75 )
Details : SetFontSize ( row.lineText2 , self.row_info . font_size or height * 0.75 )
Details : SetFontSize ( row.lineText3 , self.row_info . font_size or height * 0.75 )
Details : SetFontSize ( row.lineText4 , self.row_info . font_size or height * 0.75 )
--text font
Details : SetFontFace ( row.lineText1 , self.row_info . font_face_file or " GameFontHighlight " )
Details : SetFontFace ( row.lineText2 , self.row_info . font_face_file or " GameFontHighlight " )
Details : SetFontFace ( row.lineText3 , self.row_info . font_face_file or " GameFontHighlight " )
Details : SetFontFace ( row.lineText4 , self.row_info . font_face_file or " GameFontHighlight " )
--backdrop
if ( lineBorderEnabled ) then
row.lineBorder : Show ( )
row.lineBorder : SetVertexColor ( unpack ( lineBorderColor ) )
row.lineBorder : SetBorderSizes ( lineBorderSize , lineBorderSize , lineBorderSize , lineBorderSize )
row.lineBorder : UpdateSizes ( )
else
row.lineBorder : Hide ( )
end
--models
if ( upper_model_enabled ) then
row.using_upper_3dmodels = true
row.modelbox_high : Show ( )
row.modelbox_high : SetModel ( upper_model )
row.modelbox_high : SetAlpha ( upper_model_alpha )
else
row.using_upper_3dmodels = false
row.modelbox_high : Hide ( )
end
if ( lower_model_enabled ) then
row.using_lower_3dmodels = true
row.modelbox_low : Show ( )
row.modelbox_low : SetModel ( lower_model )
row.modelbox_low : SetAlpha ( lower_model_alpha )
else
row.using_lower_3dmodels = false
row.modelbox_low : Hide ( )
end
end
self : SetBarGrowDirection ( )
self : UpdateClickThrough ( )
end
function Details : SetBarOverlaySettings ( overlayTexture , overlayColor )
overlayTexture = overlayTexture or self.row_info . overlay_texture
overlayColor = overlayColor or self.row_info . overlay_color
self.row_info . overlay_texture = overlayTexture
self.row_info . overlay_color [ 1 ] = overlayColor [ 1 ]
self.row_info . overlay_color [ 2 ] = overlayColor [ 2 ]
self.row_info . overlay_color [ 3 ] = overlayColor [ 3 ]
self.row_info . overlay_color [ 4 ] = overlayColor [ 4 ]
self : InstanceRefreshRows ( )
end
--adjust to which frame the wallpaper texture is parented to
--dependind on the frame it can be shown above or below background textures
function Details : SetInstanceWallpaperLevel ( wallpaperLevel )
if ( type ( wallpaperLevel ) ~= " number " ) then
wallpaperLevel = self.wallpaper . level
end
self.wallpaper . level = wallpaperLevel
--refresh the wallpaper parent
local wallpaperTexture = self.baseframe . wallpaper
if ( wallpaperLevel == 0 ) then
wallpaperTexture : SetParent ( self.baseframe . titleBar ) --framelevel +0 (parented to titleBar)
elseif ( wallpaperLevel == 1 ) then
wallpaperTexture : SetParent ( self.baseframe ) --framelevel +0
elseif ( wallpaperLevel == 2 ) then
wallpaperTexture : SetParent ( self.rowframe ) --framelevel +3
elseif ( wallpaperLevel == 3 ) then
wallpaperTexture : SetParent ( self.windowSwitchButton ) --framelevel +4
end
end
-- search key: ~wallpaper
function Details : InstanceWallpaper ( texture , anchor , alpha , texCoord , width , height , overlay )
local wallpaper = self.wallpaper
if ( type ( texture ) == " boolean " and texture ) then
texture , anchor , alpha , texCoord , width , height , overlay = wallpaper.texture , wallpaper.anchor , wallpaper.alpha , wallpaper.texcoord , wallpaper.width , wallpaper.height , wallpaper.overlay
elseif ( type ( texture ) == " boolean " and not texture ) then
self.wallpaper . enabled = false
return Details.FadeHandler . Fader ( self.baseframe . wallpaper , " in " )
elseif ( type ( texture ) == " table " ) then
anchor = texture.anchor or wallpaper.anchor
alpha = texture.alpha or wallpaper.alpha
if ( texture.texcoord ) then
texCoord = { unpack ( texture.texcoord ) }
else
texCoord = wallpaper.texcoord
end
width = texture.width or wallpaper.width
height = texture.height or wallpaper.height
if ( texture.overlay ) then
overlay = { unpack ( texture.overlay ) }
else
overlay = wallpaper.overlay
end
if ( type ( texture.enabled ) == " boolean " ) then
if ( not texture.enabled ) then
wallpaper.enabled = false
wallpaper.texture = texture.texture or wallpaper.texture
wallpaper.anchor = anchor
wallpaper.alpha = alpha
wallpaper.texcoord = texCoord
wallpaper.width = width
wallpaper.height = height
wallpaper.overlay = overlay
return self : InstanceWallpaper ( false )
end
end
texture = texture.texture or wallpaper.texture
else
texture = texture or wallpaper.texture
anchor = anchor or wallpaper.anchor
alpha = alpha or wallpaper.alpha
texCoord = texCoord or wallpaper.texcoord
width = width or wallpaper.width
height = height or wallpaper.height
overlay = overlay or wallpaper.overlay
end
if ( not wallpaper.texture and not texture ) then
texture = " Interface \\ AddOns \\ Details \\ images \\ background "
texCoord = { 0 , 1 , 0 , 0.7 }
alpha = 0.5
width , height = self : GetSize ( )
anchor = " all "
end
local wallpaperTable = self.baseframe . wallpaper
wallpaperTable : ClearAllPoints ( )
if ( anchor == " all " ) then
wallpaperTable : SetPoint ( " topleft " , self.baseframe , " topleft " )
wallpaperTable : SetPoint ( " bottomright " , self.baseframe , " bottomright " )
elseif ( anchor == " titlebar " ) then
wallpaperTable : SetPoint ( " topleft " , self.baseframe . titleBar , " topleft " , 0 , 0 )
wallpaperTable : SetPoint ( " bottomright " , self.baseframe , " bottomright " , 1 , - 1 )
elseif ( anchor == " center " ) then
wallpaperTable : SetPoint ( " center " , self.baseframe , " center " , 0 , 4 )
elseif ( anchor == " stretchLR " ) then
wallpaperTable : SetPoint ( " center " , self.baseframe , " center " )
wallpaperTable : SetPoint ( " left " , self.baseframe , " left " )
wallpaperTable : SetPoint ( " right " , self.baseframe , " right " )
elseif ( anchor == " stretchTB " ) then
wallpaperTable : SetPoint ( " center " , self.baseframe , " center " )
wallpaperTable : SetPoint ( " top " , self.baseframe , " top " )
wallpaperTable : SetPoint ( " bottom " , self.baseframe , " bottom " )
else
wallpaperTable : SetPoint ( anchor , self.baseframe , anchor )
end
wallpaperTable : SetTexture ( texture )
wallpaperTable : SetTexCoord ( unpack ( texCoord ) )
wallpaperTable : SetWidth ( width )
wallpaperTable : SetHeight ( height )
wallpaperTable : 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
wallpaperTable : Show ( )
Details.FadeHandler . Fader ( wallpaperTable , " ALPHAANIM " , alpha )
end
function Details : GetTextures ( )
local textureTable = { }
textureTable [ 1 ] = self.baseframe . rodape.esquerdo
textureTable [ 2 ] = self.baseframe . rodape.direita
textureTable [ 3 ] = self.baseframe . rodape.top_bg
textureTable [ 4 ] = self.baseframe . cabecalho.ball_r
textureTable [ 5 ] = self.baseframe . cabecalho.ball
textureTable [ 6 ] = self.baseframe . cabecalho.emenda
textureTable [ 7 ] = self.baseframe . cabecalho.top_bg
textureTable [ 8 ] = self.baseframe . barra_esquerda
textureTable [ 9 ] = self.baseframe . barra_direita
textureTable [ 10 ] = self.baseframe . UPFrame
return textureTable
end
function Details : SetWindowAlphaForInteract ( alpha )
local ignoreBars = self.menu_alpha . ignorebars
if ( self.is_interacting ) then
--mouse entered the window
self.baseframe : SetAlpha ( alpha )
self : InstanceAlpha ( alpha )
self : SetIconAlpha ( alpha , nil , true )
if ( ignoreBars ) then
self.rowframe : SetFrameAlpha ( 1 )
else
self.rowframe : SetFrameAlpha ( alpha )
end
else
--mouse left the window
if ( self.combat_changes_alpha and self.combat_changes_alpha ~= 1 ) then --combat alpha
self : InstanceAlpha ( self.combat_changes_alpha )
self : SetIconAlpha ( self.combat_changes_alpha , nil , true )
self.rowframe : SetFrameAlpha ( 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 : SetFrameAlpha ( 1 )
else
self.rowframe : SetFrameAlpha ( alpha )
end
self.baseframe : SetAlpha ( alpha )
end
end
if ( Details.debug ) then
Details : Msg ( " (debug) setting window alpha for SetWindowAlphaForInteract() -> " , alpha )
end
end
-- ~autohide �utohide
function Details : SetWindowAlphaForCombat ( enteringInCombat , trueHide , alphaAmount )
local amount , rowsamount , menuamount
--get the values
if ( enteringInCombat ) then
amount = alphaAmount / 100
self.combat_changes_alpha = amount
rowsamount = amount
menuamount = amount
if ( Details.pet_battle ) then
amount = 0
rowsamount = 0
menuamount = 0
end
else
if ( self.menu_alpha . enabled ) then --auto transparency
if ( self.is_interacting ) then
amount = self.menu_alpha . onenter
menuamount = self.menu_alpha . onenter
if ( self.menu_alpha . ignorebars ) then
rowsamount = 1
else
rowsamount = amount
end
else
amount = self.menu_alpha . onleave
menuamount = self.menu_alpha . onleave
if ( self.menu_alpha . ignorebars ) then
rowsamount = 1
else
rowsamount = amount
end
end
else
amount = self.color [ 4 ]
menuamount = 1
rowsamount = 1
end
self.combat_changes_alpha = nil
end
--apply
if ( trueHide and amount == 0 ) then
self.baseframe : Hide ( )
self.rowframe : Hide ( )
self.windowSwitchButton : Hide ( )
if ( Details.debug ) then
Details : Msg ( " (debug) hiding window SetWindowAlphaForCombat() " , amount , rowsamount , menuamount )
end
else
self.baseframe : Show ( )
self.baseframe : SetAlpha ( 1 )
self : InstanceAlpha ( min ( amount , self.color [ 4 ] ) )
Details.FadeHandler . Fader ( self.rowframe , " ALPHAANIM " , parseRowFrameAlpha ( rowsamount ) )
Details.FadeHandler . Fader ( self.baseframe , " ALPHAANIM " , rowsamount )
end
if ( self.show_statusbar ) then
self.baseframe . barra_fundo : Hide ( )
end
if ( self.hide_icon ) then
self.baseframe . cabecalho.atributo_icon : Hide ( )
end
end
--this function is called only from SetAutoHideMenu()
function Details : InstanceButtonsColors ( red , green , blue , alpha , noSave , onlyLeft , onlyRight )
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 noSave ) 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 ( onlyLeft ) 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 ( Details.ToolBar . Shown ) do
ThisButton : SetAlpha ( alpha )
end
end
else
local icons = { baseToolbar.modo_selecao , baseToolbar.segmento , baseToolbar.atributo , baseToolbar.report , baseToolbar.fechar , baseToolbar.reset , baseToolbar.fechar }
for _ , button in ipairs ( icons ) do
button : SetAlpha ( alpha )
end
if ( self : IsLowerInstance ( ) ) then
for _ , ThisButton in ipairs ( Details.ToolBar . Shown ) do
ThisButton : SetAlpha ( alpha )
end
end
end
end
function Details : InstanceAlpha ( alpha )
self.baseframe . cabecalho.ball_r : SetAlpha ( alpha )
self.baseframe . cabecalho.ball : SetAlpha ( alpha )
local skin = Details.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 Details : InstanceColor ( red , green , blue , alpha , noSave , changeStatusbar )
if ( not red ) then
red , green , blue , alpha = unpack ( self.color )
noSave = true
end
if ( type ( red ) ~= " number " ) then
red , green , blue , alpha = gump : ParseColors ( red )
end
if ( not noSave ) then
--saving
self.color [ 1 ] = red
self.color [ 2 ] = green
self.color [ 3 ] = blue
self.color [ 4 ] = alpha
if ( changeStatusbar ) then
self : StatusBarColor ( red , green , blue , alpha )
end
else
--not saving
self : StatusBarColor ( nil , nil , nil , alpha , true )
end
local skin = Details.skins [ self.skin ]
if ( not skin ) then --the skin isn't available any more
--put the skin into wait to install
local tempSkin = self : WaitForSkin ( )
skin = tempSkin
end
self.baseframe . cabecalho.ball_r : SetVertexColor ( red , green , blue )
self.baseframe . cabecalho.ball_r : SetAlpha ( alpha )
self.baseframe . cabecalho.ball : SetVertexColor ( red , green , blue )
self.baseframe . cabecalho.ball : SetAlpha ( alpha )
if ( not skin.icon_ignore_alpha ) then
self.baseframe . cabecalho.atributo_icon : SetAlpha ( alpha )
end
self.baseframe . cabecalho.emenda : SetVertexColor ( red , green , blue )
self.baseframe . cabecalho.emenda : SetAlpha ( alpha )
self.baseframe . cabecalho.top_bg : SetVertexColor ( red , green , blue )
self.baseframe . cabecalho.top_bg : SetAlpha ( alpha )
self.baseframe . barra_esquerda : SetVertexColor ( red , green , blue )
self.baseframe . barra_esquerda : SetAlpha ( alpha )
self.baseframe . barra_direita : SetVertexColor ( red , green , blue )
self.baseframe . barra_direita : SetAlpha ( alpha )
self.baseframe . barra_fundo : SetVertexColor ( red , green , blue )
self.baseframe . barra_fundo : SetAlpha ( alpha )
self.baseframe . UPFrame : SetAlpha ( alpha )
end
function Details : StatusBarAlertTime ( instance )
instance.baseframe . statusbar : Hide ( )
end
function Details : 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
Details : SetFontSize ( statusbar.text , text.size )
else
Details : SetFontSize ( statusbar.text , 9 )
end
else
statusbar.text : SetText ( text )
statusbar.text : SetTextColor ( 1 , 1 , 1 , 1 )
Details : 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 ( " " )
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
Details : ScheduleTimer ( " StatusBarAlertTime " , time , self )
end
else
statusbar : Hide ( )
end
end
function gump : CriaRodape ( baseframe , instancia )
baseframe.rodape = { }
--esquerdo com statusbar
baseframe.rodape . esquerdo = instancia.floatingframe : CreateTexture ( nil , " overlay " )
baseframe.rodape . esquerdo : SetPoint ( " topright " , baseframe , " bottomleft " , 16 , 0 )
baseframe.rodape . esquerdo : SetTexture ( DEFAULT_SKIN )
baseframe.rodape . esquerdo : SetTexCoord ( unpack ( COORDS_PIN_LEFT ) )
baseframe.rodape . esquerdo : SetWidth ( 32 )
baseframe.rodape . esquerdo : SetHeight ( 32 )
--esquerdo sem statusbar
baseframe.rodape . esquerdo_nostatusbar = instancia.floatingframe : CreateTexture ( nil , " overlay " )
baseframe.rodape . esquerdo_nostatusbar : SetPoint ( " topright " , baseframe , " bottomleft " , 16 , 14 )
baseframe.rodape . esquerdo_nostatusbar : SetTexture ( DEFAULT_SKIN )
baseframe.rodape . esquerdo_nostatusbar : SetTexCoord ( unpack ( COORDS_PIN_LEFT ) )
baseframe.rodape . esquerdo_nostatusbar : SetWidth ( 32 )
baseframe.rodape . esquerdo_nostatusbar : SetHeight ( 32 )
--direito com statusbar
baseframe.rodape . direita = instancia.floatingframe : CreateTexture ( nil , " overlay " )
baseframe.rodape . direita : SetPoint ( " topleft " , baseframe , " bottomright " , - 16 , 0 )
baseframe.rodape . direita : SetTexture ( DEFAULT_SKIN )
baseframe.rodape . direita : SetTexCoord ( unpack ( COORDS_PIN_RIGHT ) )
baseframe.rodape . direita : SetWidth ( 32 )
baseframe.rodape . direita : SetHeight ( 32 )
--direito sem statusbar
baseframe.rodape . direita_nostatusbar = instancia.floatingframe : CreateTexture ( nil , " overlay " )
baseframe.rodape . direita_nostatusbar : SetPoint ( " topleft " , baseframe , " bottomright " , - 16 , 14 )
baseframe.rodape . direita_nostatusbar : SetTexture ( DEFAULT_SKIN )
baseframe.rodape . direita_nostatusbar : SetTexCoord ( unpack ( COORDS_PIN_RIGHT ) )
baseframe.rodape . direita_nostatusbar : SetWidth ( 32 )
baseframe.rodape . direita_nostatusbar : SetHeight ( 32 )
--barra centro
baseframe.rodape . top_bg = baseframe : CreateTexture ( nil , " background " )
baseframe.rodape . top_bg : SetTexture ( DEFAULT_SKIN )
baseframe.rodape . top_bg : SetTexCoord ( unpack ( COORDS_BOTTOM_BACKGROUND ) )
baseframe.rodape . top_bg : SetWidth ( 512 )
baseframe.rodape . top_bg : SetHeight ( 128 )
baseframe.rodape . top_bg : SetPoint ( " left " , baseframe.rodape . esquerdo , " right " , - 16 , - 48 )
baseframe.rodape . top_bg : SetPoint ( " right " , baseframe.rodape . direita , " left " , 16 , - 48 )
local StatusBarLeftAnchor = CreateFrame ( " frame " , " DetailsStatusBarAnchorLeft " .. instancia.meu_id , baseframe )
StatusBarLeftAnchor : SetPoint ( " left " , baseframe.rodape . top_bg , " left " , 5 , 57 )
StatusBarLeftAnchor : SetWidth ( 1 )
StatusBarLeftAnchor : SetHeight ( 1 )
baseframe.rodape . StatusBarLeftAnchor = StatusBarLeftAnchor
local StatusBarCenterAnchor = CreateFrame ( " frame " , " DetailsStatusBarAnchorCenter " .. instancia.meu_id , baseframe )
StatusBarCenterAnchor : SetPoint ( " center " , baseframe.rodape . top_bg , " center " , 0 , 57 )
StatusBarCenterAnchor : SetWidth ( 1 )
StatusBarCenterAnchor : SetHeight ( 1 )
baseframe.rodape . StatusBarCenterAnchor = StatusBarCenterAnchor
--display frame
baseframe.statusbar = CreateFrame ( " frame " , " DetailsStatusBar " .. instancia.meu_id , instancia.floatingframe , " BackdropTemplate " )
baseframe.statusbar : SetFrameLevel ( instancia.floatingframe : GetFrameLevel ( ) + 2 )
baseframe.statusbar : SetPoint ( " left " , baseframe.rodape . esquerdo , " right " , - 13 , 10 )
baseframe.statusbar : SetPoint ( " right " , baseframe.rodape . direita , " left " , 13 , 10 )
baseframe.statusbar : SetHeight ( 14 )
local statusbar_icon = baseframe.statusbar : CreateTexture ( nil , " overlay " )
statusbar_icon : SetWidth ( 14 )
statusbar_icon : SetHeight ( 14 )
statusbar_icon : SetPoint ( " left " , baseframe.statusbar , " left " )
local statusbar_text = baseframe.statusbar : CreateFontString ( nil , " overlay " , " GameFontNormal " )
statusbar_text : SetPoint ( " left " , statusbar_icon , " right " , 2 , 0 )
baseframe.statusbar : SetBackdrop ( {
bgFile = [[Interface\AddOns\Details\images\background]] , tile = true , tileSize = 16 ,
insets = { left = 0 , right = 0 , top = 0 , bottom = 0 } } )
baseframe.statusbar : SetBackdropColor ( 0 , 0 , 0 , 1 )
baseframe.statusbar . icon = statusbar_icon
baseframe.statusbar . text = statusbar_text
baseframe.statusbar . instancia = instancia
baseframe.statusbar : Hide ( )
--frame invis�vel
baseframe.DOWNFrame = CreateFrame ( " frame " , " DetailsDownFrame " .. instancia.meu_id , baseframe )
baseframe.DOWNFrame : SetPoint ( " left " , baseframe.rodape . esquerdo , " right " , 0 , 10 )
baseframe.DOWNFrame : SetPoint ( " right " , baseframe.rodape . direita , " left " , 0 , 10 )
baseframe.DOWNFrame : SetHeight ( 14 )
baseframe.DOWNFrame : Show ( )
baseframe.DOWNFrame : EnableMouse ( true )
baseframe.DOWNFrame : SetMovable ( true )
baseframe.DOWNFrame : SetResizable ( true )
BGFrame_scripts ( baseframe.DOWNFrame , baseframe , instancia )
end
function Details : 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 Details : ToolbarMenuButtonsSize ( size )
size = size or self.menu_icons_size
self.menu_icons_size = size
return self : ToolbarMenuButtons ( )
end
local SetIconAlphaCacheButtonsTable = { }
function Details : SetIconAlpha ( alpha , hide , noAnimations )
if ( self.attribute_text . enabled ) then
if ( not self.menu_attribute_string ) then
--created on demand
self : AttributeMenu ( )
end
if ( hide ) then
Details.FadeHandler . Fader ( self.menu_attribute_string . widget , unpack ( Details.windows_fade_in ) )
else
if ( noAnimations ) then
self.menu_attribute_string : SetAlpha ( alpha )
else
Details.FadeHandler . Fader ( self.menu_attribute_string . widget , " ALPHAANIM " , alpha )
end
end
end
table.wipe ( SetIconAlphaCacheButtonsTable )
SetIconAlphaCacheButtonsTable [ 1 ] = self.baseframe . cabecalho.modo_selecao
SetIconAlphaCacheButtonsTable [ 2 ] = self.baseframe . cabecalho.segmento
SetIconAlphaCacheButtonsTable [ 3 ] = self.baseframe . cabecalho.atributo
SetIconAlphaCacheButtonsTable [ 4 ] = self.baseframe . cabecalho.report
SetIconAlphaCacheButtonsTable [ 5 ] = self.baseframe . cabecalho.reset
SetIconAlphaCacheButtonsTable [ 6 ] = self.baseframe . cabecalho.fechar
if ( alpha == 1 ) then
alpha = self.menu_icons_alpha
--fix for old instances using 0.5 in the 'menu_icons_alpha'
if ( DetailsFramework : IsNearlyEqual ( self.menu_icons_alpha , 0.5 ) ) then
self.menu_icons_alpha = Details.skins [ self.skin ] . instance_cprops.menu_icons_alpha or self.menu_icons_alpha
alpha = self.menu_icons_alpha
end
end
for index , button in ipairs ( SetIconAlphaCacheButtonsTable ) do
if ( self.menu_icons [ index ] ) then
if ( hide ) then
button : Hide ( )
else
button : Show ( )
button : SetAlpha ( alpha )
end
end
end
if ( self : IsLowerInstance ( ) ) then
if ( # Details.ToolBar . Shown > 0 ) then
for index , button in ipairs ( Details.ToolBar . Shown ) do
if ( hide ) then
Details.FadeHandler . Fader ( button , unpack ( Details.windows_fade_in ) )
else
if ( noAnimations ) then
button : SetAlpha ( alpha )
else
Details.FadeHandler . Fader ( button , " ALPHAANIM " , alpha )
end
end
end
end
end
end
function Details : ToolbarMenuSetButtonsOptions ( spacement , shadow )
if ( type ( spacement ) ~= " number " ) then
spacement = self.menu_icons . space
end
if ( type ( shadow ) ~= " boolean " ) then
shadow = self.menu_icons . shadow
end
self.menu_icons . space = spacement
self.menu_icons . shadow = shadow
return self : ToolbarMenuSetButtons ( )
end
-- search key: ~buttons ~icons
local tbuttons = { }
function Details : ToolbarMenuSetButtons ( _mode , _segment , _attributes , _report , _reset , _close )
if ( _mode == nil ) then
_mode = self.menu_icons [ 1 ]
end
if ( _segment == nil ) then
_segment = self.menu_icons [ 2 ]
end
if ( _attributes == nil ) then
_attributes = self.menu_icons [ 3 ]
end
if ( _report == nil ) then
_report = self.menu_icons [ 4 ]
end
if ( _reset == nil ) then
_reset = self.menu_icons [ 5 ]
end
if ( _close == nil ) then
_close = self.menu_icons [ 6 ]
end
self.menu_icons [ 1 ] = _mode
self.menu_icons [ 2 ] = _segment
self.menu_icons [ 3 ] = _attributes
self.menu_icons [ 4 ] = _report
self.menu_icons [ 5 ] = _reset
self.menu_icons [ 6 ] = _close
table.wipe ( tbuttons )
tbuttons [ 1 ] = self.baseframe . cabecalho.modo_selecao
tbuttons [ 2 ] = self.baseframe . cabecalho.segmento
tbuttons [ 3 ] = self.baseframe . cabecalho.atributo
tbuttons [ 4 ] = self.baseframe . cabecalho.report
tbuttons [ 5 ] = self.baseframe . cabecalho.reset
tbuttons [ 6 ] = self.baseframe . cabecalho.fechar
local anchor_frame , point1 , point2 = self : GetMenuAnchorPoint ( )
local got_anchor = false
self.lastIcon = nil
self.firstIcon = nil
local size = self.menu_icons_size
local space = self.menu_icons . space
local shadow = self.menu_icons . shadow
local toolbar_icon_file = self.toolbar_icon_file
if ( shadow ) then
toolbar_icon_file = toolbar_icon_file .. " _shadow "
end
local total_buttons_shown = 0
--normal buttons
if ( self.menu_anchor . side == 1 ) then
for index , button in ipairs ( tbuttons ) do
if ( self.menu_icons [ index ] ) then
button : ClearAllPoints ( )
if ( got_anchor ) then
button : SetPoint ( " left " , self.lastIcon . widget or self.lastIcon , " right " , space , 0 )
else
button : SetPoint ( point1 , anchor_frame , point2 )
got_anchor = button
self.firstIcon = button
end
self.lastIcon = button
button : SetParent ( self.baseframe )
button : SetFrameLevel ( self.baseframe . UPFrame : GetFrameLevel ( ) + 1 )
button : Show ( )
button : SetSize ( 16 * size , 16 * size )
button : SetNormalTexture ( toolbar_icon_file )
button : SetHighlightTexture ( toolbar_icon_file )
button : SetPushedTexture ( toolbar_icon_file )
total_buttons_shown = total_buttons_shown + 1
else
button : Hide ( )
end
end
elseif ( self.menu_anchor . side == 2 ) then
for index = # tbuttons , 1 , - 1 do
local button = tbuttons [ index ]
if ( self.menu_icons [ index ] ) then
button : ClearAllPoints ( )
if ( got_anchor ) then
button : SetPoint ( " right " , self.lastIcon . widget or self.lastIcon , " left " , - space , 0 )
else
button : SetPoint ( point1 , anchor_frame , point2 )
got_anchor = button
self.firstIcon = button
end
self.lastIcon = button
button : SetParent ( self.baseframe )
button : SetFrameLevel ( self.baseframe . UPFrame : GetFrameLevel ( ) + 1 )
button : Show ( )
button : SetSize ( 16 * size , 16 * size )
button : SetNormalTexture ( toolbar_icon_file )
button : SetHighlightTexture ( toolbar_icon_file )
button : SetPushedTexture ( toolbar_icon_file )
total_buttons_shown = total_buttons_shown + 1
else
button : Hide ( )
end
end
end
--plugins buttons
local pluginFirstIcon = true
if ( not self.baseframe . cabecalho.PluginIconsSeparator ) then
self.baseframe . cabecalho.PluginIconsSeparator = self.baseframe : CreateTexture ( nil , " overlay " )
self.baseframe . cabecalho.PluginIconsSeparator : SetTexture ( [[Interface\FriendsFrame\StatusIcon-Offline]] )
local color = 0
self.baseframe . cabecalho.PluginIconsSeparator : SetVertexColor ( color , color , color )
self.baseframe . cabecalho.PluginIconsSeparator : SetAlpha ( 0.2 )
local scale = 0.4
self.baseframe . cabecalho.PluginIconsSeparator : SetSize ( 16 * scale , 16 * scale )
end
self.baseframe . cabecalho.PluginIconsSeparator : Hide ( )
if ( self : IsLowerInstance ( ) ) then
if ( # Details.ToolBar . Shown > 0 ) then
local last_plugin_icon
if ( # Details.ToolBar . Shown > 0 ) then
self.baseframe . cabecalho.PluginIconsSeparator : Show ( )
self.baseframe . cabecalho.PluginIconsSeparator : ClearAllPoints ( )
self.baseframe . cabecalho.PluginIconsSeparator . widget = self.baseframe . cabecalho.PluginIconsSeparator
end
for index , button in ipairs ( Details.ToolBar . Shown ) do
button : ClearAllPoints ( )
if ( got_anchor ) then
if ( pluginFirstIcon ) then
-- space = space + 6 --was adding an extra padding between plugin icons
end
if ( self.plugins_grow_direction == 2 ) then --right
if ( self.menu_anchor . side == 1 ) then --left
local temp_space = space
if ( pluginFirstIcon ) then
temp_space = temp_space / 3
self.baseframe . cabecalho.PluginIconsSeparator : SetPoint ( " left " , last_plugin_icon or self.lastIcon . widget or self.lastIcon , " right " , temp_space , 0 )
self.lastIcon = self.baseframe . cabecalho.PluginIconsSeparator
end
button : SetPoint ( " left " , self.lastIcon . widget or self.lastIcon , " right " , temp_space , 0 )
elseif ( self.menu_anchor . side == 2 ) then --right
local temp_space = space
if ( pluginFirstIcon ) then
temp_space = temp_space / 3
self.baseframe . cabecalho.PluginIconsSeparator : SetPoint ( " left " , last_plugin_icon or self.firstIcon . widget or self.firstIcon , " right " , temp_space , 0 )
self.lastIcon = self.baseframe . cabecalho.PluginIconsSeparator
end
button : SetPoint ( " left " , last_plugin_icon or self.lastIcon . widget or self.firstIcon , " right " , temp_space , 0 )
end
elseif ( self.plugins_grow_direction == 1 ) then --left
if ( self.menu_anchor . side == 1 ) then --left
local temp_space = space
if ( pluginFirstIcon ) then
temp_space = temp_space / 3
self.baseframe . cabecalho.PluginIconsSeparator : SetPoint ( " right " , last_plugin_icon or self.firstIcon . widget or self.firstIcon , " left " , - temp_space , 0 )
self.lastIcon = self.baseframe . cabecalho.PluginIconsSeparator
end
button : SetPoint ( " right " , last_plugin_icon or self.lastIcon . widget or self.firstIcon , " left " , - temp_space , 0 )
elseif ( self.menu_anchor . side == 2 ) then --right
local temp_space = space
if ( pluginFirstIcon ) then
temp_space = temp_space / 3
self.baseframe . cabecalho.PluginIconsSeparator : SetPoint ( " right " , last_plugin_icon or self.lastIcon . widget or self.lastIcon , " left " , - temp_space , 0 )
self.lastIcon = self.baseframe . cabecalho.PluginIconsSeparator
end
button : SetPoint ( " right " , last_plugin_icon or self.lastIcon . widget or self.firstIcon , " left " , - temp_space , 0 )
end
end
pluginFirstIcon = false
else
button : SetPoint ( point1 , anchor_frame , point2 )
self.firstIcon = button
got_anchor = button
end
self.lastIcon = button
last_plugin_icon = button
button : SetParent ( self.baseframe )
button : SetFrameLevel ( self.baseframe . UPFrame : GetFrameLevel ( ) + 1 )
button : Show ( )
button : SetSize ( 16 * size , 16 * size )
if ( shadow and button.shadow ) then
button : SetNormalTexture ( button.__icon .. " _shadow " )
button : SetPushedTexture ( button.__icon .. " _shadow " )
button : SetHighlightTexture ( button.__icon .. " _shadow " , " ADD " )
else
button : SetNormalTexture ( button.__icon )
button : SetPushedTexture ( button.__icon )
button : SetHighlightTexture ( button.__icon , " ADD " )
end
total_buttons_shown = total_buttons_shown + 1
end
end
if ( self.baseframe . cabecalho.PluginIconsSeparator : IsShown ( ) ) then
if ( self.baseframe . cabecalho.modo_selecao : GetAlpha ( ) == 0 ) then
self.baseframe . cabecalho.PluginIconsSeparator : Hide ( )
end
end
end
self.total_buttons_shown = total_buttons_shown
self : RefreshAttributeTextSize ( )
return true
end
function Details : 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 Details.tabela_instancias [ id ] ) then
--esta criando uma nova
is_new = true
end
local ninstance = Details.CriarInstancia ( _ , _ , id )
instance.baseframe . cabecalho.modo_selecao : GetScript ( " OnEnter " ) ( instance.baseframe . cabecalho.modo_selecao , _ , true )
if ( ninstance and is_new ) then
ninstance.baseframe . cabecalho.modo_selecao : GetScript ( " OnEnter " ) ( ninstance.baseframe . cabecalho.modo_selecao , _ , true )
end
end
function Details : SetTooltipMinWidth ( )
GameCooltip : SetOption ( " MinWidth " , 155 )
end
function Details : FormatCooltipBackdrop ( )
--local CoolTip = GameCooltip
--CoolTip:SetBackdrop(1, menus_backdrop, menus_backdropcolor, menus_bordercolor)
--CoolTip:SetBackdrop(2, menus_backdrop, menus_backdropcolor_sec, menus_bordercolor)
return true
end
local build_mode_list = function ( self , deltaTime )
local gameCooltip = GameCooltip
local instance = parameters_table [ 1 ]
parameters_table [ 2 ] = parameters_table [ 2 ] + deltaTime
if ( parameters_table [ 2 ] > 0.15 ) then
self : SetScript ( " OnUpdate " , nil )
gameCooltip : Reset ( )
gameCooltip : SetType ( " menu " )
gameCooltip : SetLastSelected ( " main " , parameters_table [ 3 ] )
gameCooltip : SetFixedParameter ( instance )
gameCooltip : SetOption ( " TextSize " , Details.font_sizes . menus )
gameCooltip : SetOption ( " TextFont " , Details.font_faces . menus )
gameCooltip : SetOption ( " ButtonHeightModSub " , - 2 )
gameCooltip : SetOption ( " ButtonHeightMod " , - 5 )
gameCooltip : SetOption ( " ButtonsYModSub " , - 3 )
gameCooltip : SetOption ( " ButtonsYMod " , - 6 )
gameCooltip : SetOption ( " YSpacingModSub " , - 3 )
gameCooltip : SetOption ( " YSpacingMod " , 1 )
gameCooltip : SetOption ( " HeighMod " , 3 )
gameCooltip : SetOption ( " SubFollowButton " , true )
Details : SetTooltipMinWidth ( )
gameCooltip : AddLine ( Loc [ " STRING_MODE_GROUP " ] )
gameCooltip : AddMenu ( 1 , function ( ) instance : SetMode ( 2 ) end )
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\modo_icones]] , 1 , 1 , 20 , 20 , 32 / 256 , 32 / 256 * 2 , 0 , 1 )
gameCooltip : AddLine ( Loc [ " STRING_MODE_ALL " ] )
gameCooltip : AddMenu ( 1 , function ( ) instance : SetMode ( 3 ) end )
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\modo_icones]] , 1 , 1 , 20 , 20 , 32 / 256 * 2 , 32 / 256 * 3 , 0 , 1 )
gameCooltip : AddLine ( Loc [ " STRING_OPTIONS_PLUGINS " ] )
gameCooltip : AddMenu ( 1 , function ( ) instance : SetMode ( 4 ) end )
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\modo_icones]] , 1 , 1 , 20 , 20 , 32 / 256 * 3 , 32 / 256 * 4 , 0 , 1 )
--build raid plugins list
local raidPlugins = Details.RaidTables : GetAvailablePlugins ( )
if ( # raidPlugins >= 0 ) then
for index , ptable in ipairs ( raidPlugins ) do
--if a plugin has the member 'NoMenu', it won't be shown on menus to select plugins
if ( ptable [ 3 ] . __enabled and not ptable [ 3 ] . NoMenu ) then
--PluginName, PluginIcon, PluginObject, PluginAbsoluteName
gameCooltip : AddMenu ( 2 , Details.RaidTables . EnableRaidMode , instance , ptable [ 4 ] , true , ptable [ 1 ] , ptable [ 2 ] , true )
end
end
end
--build self plugins list
if ( # Details.SoloTables . Menu > 0 ) then
for index , ptable in ipairs ( Details.SoloTables . Menu ) do
if ( ptable [ 3 ] . __enabled and not ptable [ 3 ] . NoMenu ) then
gameCooltip : AddMenu ( 2 , Details.SoloTables . EnableSoloMode , instance , ptable [ 4 ] , true , ptable [ 1 ] , ptable [ 2 ] , true )
end
end
end
--window control
gameCooltip : AddLine ( " $div " )
gameCooltip : AddLine ( Loc [ " STRING_MENU_INSTANCE_CONTROL " ] )
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\modo_icones]] , 1 , 1 , 20 , 20 , 0.625 , 0.75 , 0 , 1 )
local hasClosedInstances = false
for index = 1 , math.min ( # Details.tabela_instancias , Details.instances_amount ) , 1 do
local thisInstance = Details.tabela_instancias [ index ]
if ( not thisInstance.ativa ) then
hasClosedInstances = true
break
end
end
if ( Details : GetNumInstancesAmount ( ) < Details : GetMaxInstancesAmount ( ) ) then
gameCooltip : AddMenu ( 2 , OnClickNovoMenu , true , instance , nil , Loc [ " STRING_OPTIONS_WC_CREATE " ] , _ , true )
gameCooltip : AddIcon ( [[Interface\Buttons\UI-AttributeButton-Encourage-Up]] , 2 , 1 , 16 , 16 )
if ( hasClosedInstances ) then
GameCooltip : AddLine ( " $div " , nil , 2 , nil , - 5 , - 11 )
end
end
local ClosedInstances = 0
for index = 1 , math.min ( # Details.tabela_instancias , Details.instances_amount ) , 1 do
local thisInstance = Details.tabela_instancias [ index ]
if ( not thisInstance.ativa ) then
local atributo = thisInstance.atributo
local sub_atributo = thisInstance.sub_atributo
ClosedInstances = ClosedInstances + 1
if ( atributo == 5 ) then
local CustomObject = Details.custom [ sub_atributo ]
if ( not CustomObject ) then
thisInstance : ResetAttribute ( )
atributo = thisInstance.atributo
sub_atributo = thisInstance.sub_atributo
gameCooltip : AddMenu ( 2 , OnClickNovoMenu , index , instance , nil , " # " .. index .. " " .. Details.atributos . lista [ atributo ] .. " - " .. Details.sub_atributos [ atributo ] . lista [ sub_atributo ] , _ , true )
gameCooltip : AddIcon ( Details.sub_atributos [ atributo ] . icones [ sub_atributo ] [ 1 ] , 2 , 1 , 16 , 16 , unpack ( Details.sub_atributos [ atributo ] . icones [ sub_atributo ] [ 2 ] ) )
else
gameCooltip : AddMenu ( 2 , OnClickNovoMenu , index , instance , nil , " # " .. index .. " " .. Details.atributos . lista [ atributo ] .. " - " .. CustomObject : GetName ( ) , _ , true )
gameCooltip : AddIcon ( CustomObject.icon , 2 , 1 , 16 , 16 , 0 , 1 , 0 , 1 )
end
else
local modo = thisInstance.modo
if ( modo == 1 ) then --alone
atributo = Details.SoloTables . Mode or 1
local SoloInfo = Details.SoloTables . Menu [ atributo ]
if ( SoloInfo ) then
gameCooltip : AddMenu ( 2 , OnClickNovoMenu , index , instance , nil , " # " .. index .. " " .. SoloInfo [ 1 ] , _ , true )
gameCooltip : AddIcon ( SoloInfo [ 2 ] , 2 , 1 , 16 , 16 , 0 , 1 , 0 , 1 )
else
gameCooltip : AddMenu ( 2 , OnClickNovoMenu , index , instance , nil , " # " .. index .. " Unknown Plugin " , _ , true )
end
elseif ( modo == 4 ) then --raid
local plugin_name = thisInstance.current_raid_plugin or thisInstance.last_raid_plugin
if ( plugin_name ) then
local plugin_object = Details : GetPlugin ( plugin_name )
if ( plugin_object ) then
gameCooltip : AddMenu ( 2 , OnClickNovoMenu , index , instance , nil , " # " .. index .. " " .. plugin_object.__name , _ , true )
gameCooltip : AddIcon ( plugin_object.__icon , 2 , 1 , 16 , 16 , 0 , 1 , 0 , 1 )
else
gameCooltip : AddMenu ( 2 , OnClickNovoMenu , index , instance , nil , " # " .. index .. " Unknown Plugin " , _ , true )
end
else
gameCooltip : AddMenu ( 2 , OnClickNovoMenu , index , instance , 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)
gameCooltip : AddMenu ( 2 , OnClickNovoMenu , index , instance , nil , " # " .. index .. " " .. Details.sub_atributos [ atributo ] . lista [ sub_atributo ] , _ , true )
gameCooltip : AddIcon ( Details.sub_atributos [ atributo ] . icones [ sub_atributo ] [ 1 ] , 2 , 1 , 16 , 16 , unpack ( Details.sub_atributos [ atributo ] . icones [ sub_atributo ] [ 2 ] ) )
end
end
gameCooltip : SetOption ( " TextSize " , Details.font_sizes . menus )
gameCooltip : SetOption ( " TextFont " , Details.font_faces . menus )
end
end
if ( ClosedInstances > 0 or Details : GetNumInstancesAmount ( ) < Details : GetMaxInstancesAmount ( ) ) then
GameCooltip : AddLine ( " $div " , nil , 2 , nil , - 5 , - 11 )
end
GameCooltip : AddLine ( Loc [ " STRING_MENU_CLOSE_INSTANCE " ] , nil , 2 , " white " , nil , Details.font_sizes . menus , Details.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 , Details.close_instancia_func , instance.baseframe . cabecalho.fechar )
--CoolTip:SetWallpaper (2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true)
--space
GameCooltip : AddLine ( " $div " )
--forge and history buttons
gameCooltip : AddLine ( Loc [ " STRING_SPELLLIST " ] )
gameCooltip : AddMenu ( 1 , Details.OpenForge )
gameCooltip : AddIcon ( [[Interface\MINIMAP\Vehicle-HammerGold-3]] , 1 , 1 , 16 , 16 , 0 , 1 , 0 , 1 )
--statistics
gameCooltip : AddLine ( Loc [ " STRING_STATISTICS " ] )
gameCooltip : AddMenu ( 1 , Details.OpenRaidHistoryWindow )
gameCooltip : AddIcon ( [[Interface\PvPRankBadges\PvPRank08]] , 1 , 1 , 16 , 16 , 0 , 1 , 0 , 1 )
--space
GameCooltip : AddLine ( " $div " )
--options
gameCooltip : AddLine ( Loc [ " STRING_OPTIONS_WINDOW " ] )
gameCooltip : AddMenu ( 1 , Details.OpenOptionsWindow )
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\modo_icones]] , 1 , 1 , 20 , 20 , 0.5 , 0.625 , 0 , 1 )
--finishes the menu
Details : SetMenuOwner ( self , instance )
show_anti_overlap ( instance , self , " top " )
gameCooltip : ShowCooltip ( )
end
end
function Details : SetMenuOwner ( self , instance )
local _ , y = instance.baseframe : GetCenter ( )
local screen_height = GetScreenHeight ( )
if ( instance.toolbar_side == 1 ) then
if ( y + 300 > screen_height ) then
GameCooltip : SetOwner ( self , " top " , " bottom " , 0 , - 10 )
else
GameCooltip : SetOwner ( self )
end
elseif ( instance.toolbar_side == 2 ) then --bottom
local instance_height = instance.baseframe : GetHeight ( )
if ( y + math.max ( instance_height , 250 ) > screen_height ) then
GameCooltip : SetOwner ( self , " top " , " bottom " , 0 , - 10 )
else
GameCooltip : SetOwner ( self , " bottom " , " top " , 0 , 0 )
end
end
end
local empty_segment_color = { 1 , 1 , 1 , .4 }
local segments_common_tex , segments_common_color = { 0.5078125 , 0.1171875 , 0.017578125 , 0.1953125 } , { 1 , 1 , 1 , .5 }
local unknown_boss_tex , unknown_boss_color = { 0.14453125 , 0.9296875 , 0.2625 , 0.6546875 } , { 1 , 1 , 1 , 0.5 }
local party_line_color = { 170 / 255 , 167 / 255 , 255 / 255 , 1 }
local party_line_color_trash = { 130 / 255 , 130 / 255 , 155 / 255 , 1 }
local party_line_color2 = { 210 / 255 , 200 / 255 , 255 / 255 , 1 }
local party_line_color2_trash = { 110 / 255 , 110 / 255 , 155 / 255 , 1 }
local party_wallpaper_tex , party_wallpaper_color , raid_wallpaper_tex = { 0.09 , 0.698125 , 0 , 0.833984375 } , { 1 , 1 , 1 , 0.5 } , { 33 / 512 , 361 / 512 , 45 / 512 , 295 / 512 }
local segments_wallpaper_color = { 1 , 1 , 1 , 0.5 }
local segment_color_lime = { 0 , 1 , 0 , 1 }
local segment_color_red = { 1 , 0 , 0 , 1 }
function Details : GetSegmentInfo ( index )
local combat
if ( index == - 1 or index == " overall " ) then
combat = Details.tabela_overall
elseif ( index == 0 or index == " current " ) then
combat = Details.tabela_vigente
else
combat = Details.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 = Details : GetBossPortrait ( combat.is_boss . mapid , combat.is_boss . index )
if ( p ) then
portrait = p
end
local b = Details : GetRaidIcon ( combat.is_boss . mapid )
if ( b ) then
background = b
background_coords = segment_color_lime
elseif ( combat.instance_type == " party " ) then
local ej_id = combat.is_boss . ej_instance_id
if ( ej_id ) then
local name , description , bgImage , buttonImage , loreImage , dungeonAreaMapID , link = DetailsFramework.EncounterJournal . EJ_GetInstanceInfo ( ej_id )
if ( bgImage ) then
background = bgImage
background_coords = party_wallpaper_tex
end
end
end
elseif ( combat.is_arena ) then
enemy = combat.is_arena . name
local file , coords = Details : GetArenaInfo ( combat.is_arena . mapid )
if ( file ) then
background = " Interface \\ Glues \\ LOADINGSCREENS \\ " .. file
background_coords = coords
end
else
enemy = combat.enemy
if ( combat.is_trash ) then
is_trash = true
end
end
return enemy , color , raid_type , killed , is_trash , portrait , background , background_coords
end
end
function Details : UnpackMythicDungeonInfo ( t )
return t.OverallSegment , t.SegmentID , t.Level , t.EJID , t.MapID , t.ZoneName , t.EncounterID , t.EncounterName , t.StartedAt , t.EndedAt , t.RunID
end
local segmentsUsed = 0
local segmentsFilled = 0
-- search key: ~segments
local buildSegmentTooltip = function ( self , deltaTime )
local gameCooltip = GameCooltip
local instance = parameters_table [ 1 ]
parameters_table [ 2 ] = parameters_table [ 2 ] + deltaTime
local battleground_color = { 1 , 0.666 , 0 , 1 }
--settings
local bCanUseBackgroundImage = true
if ( parameters_table [ 2 ] > 0.15 ) then
self : SetScript ( " OnUpdate " , nil )
gameCooltip : Reset ( )
gameCooltip : SetType ( " menu " )
gameCooltip : SetFixedParameter ( instance )
gameCooltip : SetOption ( " FixedWidthSub " , 195 )
gameCooltip : SetOption ( " RightTextWidth " , 105 )
gameCooltip : SetOption ( " RightTextHeight " , 12 )
gameCooltip : SetOption ( " SubFollowButton " , true )
local menuIndex = 0
Details.segments_amount = floor ( Details.segments_amount )
local amountOfSegments = 0
local segmentsWithACombat = 0
for i = 1 , Details.segments_amount do
if ( Details.tabela_historico . tabelas [ i ] ) then
segmentsWithACombat = segmentsWithACombat + 1
else
break
end
end
segmentsWithACombat = Details.segments_amount - segmentsWithACombat - 2
local fill = abs ( segmentsWithACombat - Details.segments_amount )
segmentsUsed = 0
segmentsFilled = fill
local dungeonColor = party_line_color
local dungeonColorTrash = party_line_color_trash
local dungeonRunId = false
local isMythicDungeon = false
for i = Details.segments_amount , 1 , - 1 do
if ( i <= fill ) then
local thisCombat = Details.tabela_historico . tabelas [ i ]
if ( thisCombat ) then
local enemy = thisCombat.is_boss and thisCombat.is_boss . name
local segmentInfoAdded = false
segmentsUsed = segmentsUsed + 1
if ( thisCombat.is_mythic_dungeon_segment ) then
if ( not isMythicDungeon ) then
isMythicDungeon = thisCombat.is_mythic_dungeon_run_id
else
if ( isMythicDungeon ~= thisCombat.is_mythic_dungeon_run_id ) then
isMythicDungeon = thisCombat.is_mythic_dungeon_run_id
end
end
local mythicDungeonInfo = thisCombat : GetMythicDungeonInfo ( )
if ( mythicDungeonInfo ) then --if is is_mythic_dungeon_segment but no mythicDungeonInfo, it will show as M+ 'Trash Cleanup'
--is a boss, trash overall or run overall segment
local bossInfo = thisCombat.is_boss
local elapsedCombatTime = thisCombat : GetCombatTime ( )
--if this call fail, it'll show 'Unknown (boss fight)'
local isMythicOverallSegment , segmentID , mythicLevel , EJID , mapID , zoneName , encounterID , encounterName , startedAt , endedAt , runID = Details : UnpackMythicDungeonInfo ( mythicDungeonInfo )
if ( not dungeonRunId ) then
dungeonRunId = runID
else
if ( dungeonRunId ~= runID ) then
dungeonColor = dungeonColor == party_line_color and party_line_color2 or party_line_color
dungeonColorTrash = dungeonColorTrash == party_line_color_trash and party_line_color2_trash or party_line_color_trash
dungeonRunId = runID
end
end
local addIconAndStatusBar = function ( redTint )
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\empty16]] , 2 , 1 , 12 , 12 )
gameCooltip : AddStatusBar ( 100 , 2 , redTint or 0 , 0 , 0 , 0.85 , false , false , " Skyline " )
end
--is mythic overall
if ( isMythicOverallSegment ) then
local overallIcon = " |TInterface \\ GLUES \\ CharacterSelect \\ Glues-AddOn-Icons:16:16:0:0:64:16:48:64:0:16|t "
gameCooltip : AddLine ( overallIcon .. zoneName .. " + " .. mythicLevel .. " ( " .. Loc [ " STRING_SEGMENTS_LIST_OVERALL " ] .. " ) " , Details.gump : IntegerToTimer ( endedAt - startedAt ) , 1 , dungeonColor )
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\icons]] , " main " , " left " , 14 , 10 , 479 / 512 , 510 / 512 , 24 / 512 , 51 / 512 )
gameCooltip : AddStatusBar ( 100 , 1 , .5 , .1 , 0 , 0.55 , false , false , " Skyline " )
gameCooltip : AddLine ( zoneName .. " + " .. mythicLevel .. " ( " .. Loc [ " STRING_SEGMENTS_LIST_OVERALL " ] .. " ) " , nil , 2 , " white " , " white " )
gameCooltip : AddStatusBar ( 100 , 2 , 0 , 0 , 0 , 0.85 , false , false , " Skyline " )
else
if ( segmentID == " trashoverall " ) then
local trashIcon = " |TInterface \\ AddOns \\ Details \\ images \\ icons:16:16:0:0:512:512:14:58:98:160|t "
gameCooltip : AddLine ( trashIcon .. " " .. ( encounterName or Loc [ " STRING_UNKNOW " ] ) .. " ( " .. Loc [ " STRING_SEGMENTS_LIST_TRASH " ] .. " ) " , Details.gump : IntegerToTimer ( endedAt - startedAt ) , 1 , dungeonColor , " gray " )
addIconAndStatusBar ( )
gameCooltip : AddLine ( ( encounterName or Loc [ " STRING_UNKNOW " ] ) .. " ( " .. Loc [ " STRING_SEGMENTS_LIST_TRASH " ] .. " ) " , nil , 2 , " white " , " white " )
addIconAndStatusBar ( )
else
local skull = " |TInterface \\ AddOns \\ Details \\ images \\ icons:16:16:0:0:512:512:496:512:0:16|t "
gameCooltip : AddLine ( skull .. " " .. ( encounterName or Loc [ " STRING_UNKNOW " ] ) .. " ( " .. Loc [ " STRING_SEGMENTS_LIST_BOSS " ] .. " ) " , Details.gump : IntegerToTimer ( elapsedCombatTime ) , 1 , dungeonColor , " gray " )
addIconAndStatusBar ( )
gameCooltip : AddLine ( ( encounterName or Loc [ " STRING_UNKNOW " ] ) .. " ( " .. Loc [ " STRING_SEGMENTS_LIST_BOSS " ] .. " ) " , nil , 2 , " white " , " white " )
addIconAndStatusBar ( )
do
local avatarPoint = { " bottomleft " , " topleft " , - 3 , - 4 }
local backgroundPoint = { { " bottomleft " , " topleft " , 0 , - 3 } , { " bottomright " , " topright " , 0 , - 3 } }
local textPoint = { " left " , " right " , - 11 , - 5 }
local avatarTexCoord = { 0 , 1 , 0 , 1 }
local backgroundColor = { 0 , 0 , 0 , 0.6 }
local avatarTextColor = { 1 , 1 , 1 , 1 }
--gameCooltip:SetBannerImage(2, 1, avatar [2], 80, 40, avatarPoint, avatarTexCoord, nil) --overlay [2] avatar path
local anchor = { " bottom " , " top " , 0 , 0 }
--these need to be per line, current are per frame
--gameCooltip:SetBannerImage(2, 2, [[Interface\PetBattles\Weather-Windy]], 200, 55, anchor, {1, 0.129609375, 1, 0})
--gameCooltip:SetBannerText(2, 2, encounterName, textPoint, avatarTextColor, 14, SharedMedia:Fetch("font", Details.tooltip.fontface))
end
end
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\icons]] , " main " , " left " , 14 , 10 , 479 / 512 , 510 / 512 , 24 / 512 , 51 / 512 )
end
local instanceData
if ( thisCombat.is_boss ) then
instanceData = Details222.EJCache . GetInstanceData ( thisCombat.is_boss . zone , thisCombat.is_boss . ej_instance_id , thisCombat.is_boss . id , thisCombat.is_boss . mapid )
end
if ( instanceData ) then
local encounterData = Details222.EJCache . GetEncounterDataFromInstanceData ( instanceData , thisCombat.is_boss . encounter , thisCombat.is_boss . name , thisCombat.is_boss . id )
if ( encounterData ) then
gameCooltip : AddIcon ( encounterData.creatureIcon , 2 , " top " , 128 , 64 , 0 , 1 , 0 , 0.96 )
end
end
local backgroundImage = Details : GetRaidIcon ( mapID , EJID , " party " )
if ( backgroundImage and bCanUseBackgroundImage ) then
gameCooltip : SetWallpaper ( 2 , backgroundImage , { 0.070 , 0.695 , 0.087 , 0.566 } , { 1 , 1 , 1 , 0.5 } , true )
end
--sub menu
local decorrido = thisCombat : GetCombatTime ( )
local minutos , segundos = floor ( decorrido / 60 ) , floor ( decorrido % 60 )
if ( segmentID == " trashoverall " ) then
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_TIMEINCOMBAT " ] .. " : " , Details.gump : IntegerToTimer ( decorrido ) , 2 , " white " , " white " )
addIconAndStatusBar ( )
local totalRealTime = endedAt - startedAt
local wasted = totalRealTime - decorrido
--wasted time
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_WASTED_TIME " ] .. " : " , " |cFFFF3300 " .. Details.gump : IntegerToTimer ( wasted ) .. " ( " .. floor ( wasted / totalRealTime * 100 ) .. " %)|r " , 2 , " white " , " white " )
addIconAndStatusBar ( 0.15 )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_TOTALTIME " ] .. " : " , Details.gump : IntegerToTimer ( endedAt - startedAt ) , 2 , " white " , " white " )
addIconAndStatusBar ( )
elseif ( isMythicOverallSegment ) then
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_TIMEINCOMBAT " ] .. " : " , Details.gump : IntegerToTimer ( decorrido ) , 2 , " white " , " white " )
addIconAndStatusBar ( )
local totalRealTime = endedAt - startedAt
local wasted = totalRealTime - decorrido
--wasted time
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_WASTED_TIME " ] .. " : " , " |cFFFF3300 " .. Details.gump : IntegerToTimer ( wasted ) .. " ( " .. floor ( wasted / totalRealTime * 100 ) .. " %)|r " , 2 , " white " , " white " )
addIconAndStatusBar ( 0.15 )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_TOTALTIME " ] .. " : " , Details.gump : IntegerToTimer ( totalRealTime ) , 2 , " white " , " white " )
addIconAndStatusBar ( )
else
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_COMBATTIME " ] .. " : " , Details.gump : IntegerToTimer ( decorrido ) , 2 , " white " , " white " )
addIconAndStatusBar ( )
end
if ( thisCombat.is_boss ) then
gameCooltip : AddLine ( " " , " " , 2 , " white " , " white " )
addIconAndStatusBar ( )
end
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_START " ] .. " : " , thisCombat.data_inicio , 2 , " white " , " white " )
addIconAndStatusBar ( )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_END " ] .. " : " , thisCombat.data_fim or " in progress " , 2 , " white " , " white " )
addIconAndStatusBar ( )
--gameCooltip:AddStatusBar(100, 1, .3, .3, .3, 0.2, false, false, "Skyline")
else
--the combat has mythic dungeon tag but doesn't have a mythic dungeon table information
--so this is a trash cleanup segment
local trashInfo = thisCombat : GetMythicDungeonTrashInfo ( )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_TRASH " ] .. " (# " .. i .. " ) " , Details.gump : IntegerToTimer ( thisCombat : GetCombatTime ( ) ) , 1 , dungeonColorTrash , " gray " )
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\icons]] , " main " , " left " , 14 , 10 , 479 / 512 , 510 / 512 , 24 / 512 , 51 / 512 , nil , nil , true )
--submenu
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_TRASH " ] , nil , 2 , " white " , " white " )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_COMBATTIME " ] .. " : " , Details.gump : IntegerToTimer ( thisCombat : GetCombatTime ( ) ) , 2 , " white " , " white " )
gameCooltip : AddLine ( " " , " " , 2 , " white " , " white " )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_START " ] .. " : " , thisCombat.data_inicio , 2 , " white " , " white " )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_END " ] .. " : " , thisCombat.data_fim or " in progress " , 2 , " white " , " white " )
if ( trashInfo ) then
local backgroundImage = Details : GetRaidIcon ( trashInfo.MapID , trashInfo.EJID , " party " )
if ( backgroundImage and bCanUseBackgroundImage ) then
gameCooltip : SetWallpaper ( 2 , backgroundImage , { 0.070 , 0.695 , 0.087 , 0.566 } , { 1 , 1 , 1 , 0.5 } , true )
end
end
end
segmentInfoAdded = true
elseif ( thisCombat.is_boss and thisCombat.is_boss . name ) then
isMythicDungeon = false
local try_number = thisCombat.is_boss . try_number
local combat_time = thisCombat : GetCombatTime ( )
if ( thisCombat.instance_type == " party " ) then
gameCooltip : AddLine ( thisCombat.is_boss . name .. " (# " .. i .. " ) " , _ , 1 , dungeonColor )
elseif ( thisCombat.is_boss . killed ) then
if ( try_number ) then
local m , s = floor ( combat_time / 60 ) , floor ( combat_time % 60 )
if ( s < 10 ) then
s = " 0 " .. s
end
gameCooltip : AddLine ( thisCombat.is_boss . name .. " (# " .. try_number .. " " .. m .. " : " .. s .. " ) " , _ , 1 , " lime " )
else
gameCooltip : AddLine ( thisCombat.is_boss . name .. " (# " .. i .. " ) " , _ , 1 , " lime " )
end
else
if ( try_number ) then
local m , s = floor ( combat_time / 60 ) , floor ( combat_time % 60 )
if ( s < 10 ) then
s = " 0 " .. s
end
gameCooltip : AddLine ( thisCombat.is_boss . name .. " (# " .. try_number .. " " .. m .. " : " .. s .. " ) " , _ , 1 , " red " )
else
gameCooltip : AddLine ( thisCombat.is_boss . name .. " (# " .. i .. " ) " , _ , 1 , " red " )
end
end
local portrait = Details : GetBossPortrait ( thisCombat.is_boss . mapid , thisCombat.is_boss . index ) or thisCombat.is_boss . bossimage
if ( portrait ) then
gameCooltip : AddIcon ( portrait , 2 , " top " , 128 , 64 )
else
local encounter_name = thisCombat.is_boss . encounter
local instanceID = thisCombat.is_boss . ej_instance_id
if ( encounter_name and instanceID and instanceID ~= 0 ) then
local index , name , description , encounterID , rootSectionID , link = Details : GetEncounterInfoFromEncounterName ( instanceID , encounter_name )
if ( index and name and encounterID ) then
--EJ_SelectInstance (instanceID)
--creature info pode ser sempre 1, n�o usar o index do boss
local id , name , description , displayInfo , iconImage = DetailsFramework.EncounterJournal . EJ_GetCreatureInfo ( 1 , encounterID )
if ( iconImage ) then
gameCooltip : AddIcon ( iconImage , 2 , " top " , 128 , 64 )
end
end
end
end
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\icons]] , " main " , " left " , 16 , 16 , 0.96875 , 1 , 0 , 0.03125 )
if ( Details.tooltip . submenu_wallpaper ) then
local background = Details : GetRaidIcon ( thisCombat.is_boss . mapid )
if ( background and bCanUseBackgroundImage ) then
gameCooltip : SetWallpaper ( 2 , background , nil , segments_wallpaper_color , true )
else
local ej_id = thisCombat.is_boss . ej_instance_id
if ( ej_id and ej_id ~= 0 ) then
local name , description , bgImage , buttonImage , loreImage , dungeonAreaMapID , link = DetailsFramework.EncounterJournal . EJ_GetInstanceInfo ( ej_id )
if ( name and bCanUseBackgroundImage ) then
if ( thisCombat.instance_type == " party " ) then
gameCooltip : SetWallpaper ( 2 , bgImage , party_wallpaper_tex , party_wallpaper_color , true )
else
gameCooltip : SetWallpaper ( 2 , loreImage , raid_wallpaper_tex , party_wallpaper_color , true )
end
end
end
end
end
elseif ( thisCombat.is_pvp ) then
isMythicDungeon = false
gameCooltip : AddLine ( thisCombat.is_pvp . name , _ , 1 , battleground_color )
enemy = thisCombat.is_pvp . name
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\icons]] , " main " , " left " , 16 , 12 , 0.251953125 , 0.306640625 , 0.205078125 , 0.248046875 )
if ( Details.tooltip . submenu_wallpaper ) then
local file , coords = Details : GetBattlegroundInfo ( thisCombat.is_pvp . mapid )
if ( file and bCanUseBackgroundImage ) then
gameCooltip : SetWallpaper ( 2 , " Interface \\ Glues \\ LOADINGSCREENS \\ " .. file , coords , empty_segment_color , true )
end
end
elseif ( thisCombat.is_arena ) then
isMythicDungeon = false
gameCooltip : AddLine ( thisCombat.is_arena . name , _ , 1 , " yellow " )
enemy = thisCombat.is_arena . name
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\icons]] , " main " , " left " , 16 , 12 , 0.251953125 , 0.306640625 , 0.205078125 , 0.248046875 )
if ( Details.tooltip . submenu_wallpaper ) then
local file , coords = Details : GetArenaInfo ( thisCombat.is_arena . mapid )
if ( file and bCanUseBackgroundImage ) then
gameCooltip : SetWallpaper ( 2 , " Interface \\ Glues \\ LOADINGSCREENS \\ " .. file , coords , empty_segment_color , true )
end
end
else
isMythicDungeon = false
enemy = thisCombat.enemy
if ( enemy ) then
gameCooltip : AddLine ( thisCombat.enemy .. " (# " .. i .. " ) " , _ , 1 , " yellow " )
else
gameCooltip : AddLine ( segmentos.past .. i , _ , 1 , " silver " )
end
if ( thisCombat.is_trash ) then
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\icons]] , " main " , " left " , 16 , 12 , 0.02734375 , 0.11328125 , 0.19140625 , 0.3125 )
else
gameCooltip : AddIcon ( [[Interface\QUESTFRAME\UI-Quest-BulletPoint]] , " main " , " left " , 16 , 16 )
end
if ( Details.tooltip . submenu_wallpaper and bCanUseBackgroundImage ) then
gameCooltip : SetWallpaper ( 2 , [[Interface\ACHIEVEMENTFRAME\UI-Achievement-StatsBackground]] , segments_common_tex , segments_common_color , true )
end
end
gameCooltip : AddMenu ( 1 , instance.TrocaTabela , i )
if ( not segmentInfoAdded ) then
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_ENEMY " ] .. " : " , enemy , 2 , " white " , " white " )
local decorrido = thisCombat : GetCombatTime ( )
local minutos , segundos = floor ( decorrido / 60 ) , floor ( decorrido % 60 )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_COMBATTIME " ] .. " : " , minutos .. " m " .. segundos .. " s " , 2 , " white " , " white " )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_START " ] .. " : " , thisCombat.data_inicio , 2 , " white " , " white " )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_END " ] .. " : " , thisCombat.data_fim or " in progress " , 2 , " white " , " white " )
end
amountOfSegments = amountOfSegments + 1
else
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_LOWER " ] .. " # " .. i , _ , 1 , " gray " )
gameCooltip : AddMenu ( 1 , instance.TrocaTabela , i )
gameCooltip : AddIcon ( [[Interface\QUESTFRAME\UI-Quest-BulletPoint]] , " main " , " left " , 16 , 16 , nil , nil , nil , nil , empty_segment_color )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_EMPTY " ] , _ , 2 )
gameCooltip : AddIcon ( [[Interface\CHARACTERFRAME\Disconnect-Icon]] , 2 , 1 , 12 , 12 , 0.3125 , 0.65625 , 0.265625 , 0.671875 )
end
if ( menuIndex ) then
menuIndex = menuIndex + 1
if ( instance.segmento == i ) then
gameCooltip : SetLastSelected ( " main " , menuIndex )
menuIndex = nil
end
end
end
end
GameCooltip : AddLine ( " $div " , nil , nil , - 5 , - 13 )
----------- current
local enemy = Details.tabela_vigente . is_boss and Details.tabela_vigente . is_boss.name or Details.tabela_vigente . enemy or " --x--x-- "
local file , coords
local thisCombat = Details.tabela_vigente
local segment_info_added
--add the new line
gameCooltip : AddLine ( segmentos.current_standard , _ , 1 , " white " )
gameCooltip : AddMenu ( 1 , instance.TrocaTabela , 0 )
gameCooltip : AddIcon ( [[Interface\QUESTFRAME\UI-Quest-BulletPoint]] , " main " , " left " , 16 , 16 , nil , nil , nil , nil , " orange " )
--current segment is a dungeon mythic+?
if ( thisCombat.is_mythic_dungeon_segment ) then
local mythicDungeonInfo = thisCombat : GetMythicDungeonInfo ( )
if ( mythicDungeonInfo ) then
--is a boss, trash overall or run overall segment
local bossInfo = thisCombat.is_boss
local isMythicOverallSegment , segmentID , mythicLevel , EJID , mapID , zoneName , encounterID , encounterName , startedAt , endedAt , runID = Details : UnpackMythicDungeonInfo ( mythicDungeonInfo )
local combatElapsedTime = thisCombat : GetCombatTime ( )
if ( not dungeonRunId ) then
dungeonRunId = runID
else
if ( dungeonRunId ~= runID ) then
dungeonColor = dungeonColor == party_line_color and party_line_color2 or party_line_color
dungeonColorTrash = dungeonColorTrash == party_line_color_trash and party_line_color2_trash or party_line_color_trash
dungeonRunId = runID
end
end
--is mythic overall
if ( isMythicOverallSegment ) then
--mostrar o tempo da dungeon
local totalTime = combatElapsedTime
--CoolTip:AddLine(zoneName .. " +" .. mythicLevel .. " (overall)", _detalhes.gump:IntegerToTimer(totalTime), 1, dungeon_color)
--CoolTip:AddLine(zoneName .. " +" .. mythicLevel .. " (overall)", _detalhes.gump:IntegerToTimer(endedAt - startedAt), 1, dungeon_color)
--CoolTip:AddIcon([[Interface\AddOns\Details\images\icons]], "main", "left", 14, 10, 479/512, 510/512, 24/512, 51/512)
gameCooltip : AddLine ( zoneName .. " + " .. mythicLevel .. " ( " .. Loc [ " STRING_SEGMENTS_LIST_OVERALL " ] .. " ) " , nil , 2 , " white " , " white " )
else
if ( segmentID == " trashoverall " ) then
--CoolTip:AddLine(encounterName .. " (" .. Loc["STRING_SEGMENTS_LIST_TRASH"] .. ")", _detalhes.gump:IntegerToTimer(combat_time), 1, dungeon_color, "gray")
--CoolTip:AddLine(encounterName .. " (" .. Loc["STRING_SEGMENTS_LIST_TRASH"] .. ")", _detalhes.gump:IntegerToTimer(endedAt - startedAt), 1, dungeon_color, "gray")
gameCooltip : AddLine ( encounterName .. " ( " .. Loc [ " STRING_SEGMENTS_LIST_TRASH " ] .. " ) " , nil , 2 , " white " , " white " )
else
--CoolTip:AddLine(encounterName .. " (" .. Loc["STRING_SEGMENTS_LIST_BOSS"] .. ")", _detalhes.gump:IntegerToTimer(combat_time), 1, dungeon_color, "gray")
gameCooltip : AddLine ( encounterName .. " ( " .. Loc [ " STRING_SEGMENTS_LIST_BOSS " ] .. " ) " , nil , 2 , " white " , " white " )
end
--CoolTip:AddIcon([[Interface\AddOns\Details\images\icons]], "main", "left", 14, 10, 479/512, 510/512, 24/512, 51/512)
end
local portrait = ( thisCombat.is_boss and thisCombat.is_boss . bossimage ) or Details : GetBossPortrait ( nil , nil , encounterName , EJID )
if ( portrait ) then
gameCooltip : AddIcon ( portrait , 2 , " top " , 128 , 64 , 0 , 1 , 0 , 0.96 )
end
local backgroundImage = Details : GetRaidIcon ( mapID , EJID , " party " )
if ( backgroundImage and bCanUseBackgroundImage ) then
gameCooltip : SetWallpaper ( 2 , backgroundImage , { 0.070 , 0.695 , 0.087 , 0.566 } , { 1 , 1 , 1 , 0.5 } , true ) -- party_wallpaper_tex -- {0.09, 0.698125, .17, 0.833984375}
end
--sub menu
local decorrido = thisCombat : GetCombatTime ( )
local minutos , segundos = floor ( decorrido / 60 ) , floor ( decorrido % 60 )
--CoolTip:AddLine(Loc["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", minutos.."m "..segundos.."s", 2, "white", "white")
if ( segmentID == " trashoverall " ) then
local totalRealTime = endedAt - startedAt
local wasted = totalRealTime - decorrido
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_TIMEINCOMBAT " ] .. " : " , Details.gump : IntegerToTimer ( decorrido ) , 2 , " white " , " white " )
--wasted time
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_WASTED_TIME " ] .. " : " , " |cFFFF3300 " .. Details.gump : IntegerToTimer ( wasted ) .. " ( " .. floor ( wasted / totalRealTime * 100 ) .. " %)|r " , 2 , " white " , " white " )
gameCooltip : AddStatusBar ( 100 , 2 , 0 , 0 , 0 , 0.35 , false , false , " Skyline " )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_TOTALTIME " ] .. " : " , Details.gump : IntegerToTimer ( endedAt - startedAt ) .. " [|cFFFF3300 " .. Details.gump : IntegerToTimer ( totalRealTime - decorrido ) .. " |r] " , 2 , " white " , " white " )
elseif ( isMythicOverallSegment ) then
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_TIMEINCOMBAT " ] .. " : " , Details.gump : IntegerToTimer ( decorrido ) , 2 , " white " , " white " )
local totalRealTime = endedAt - startedAt
local wasted = totalRealTime - decorrido
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_TOTALTIME " ] .. " : " , Details.gump : IntegerToTimer ( totalRealTime ) , 2 , " white " , " white " )
--wasted time
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_WASTED_TIME " ] .. " : " , " |cFFFF3300 " .. Details.gump : IntegerToTimer ( wasted ) .. " ( " .. floor ( wasted / totalRealTime * 100 ) .. " %)|r " , 2 , " white " , " white " )
gameCooltip : AddStatusBar ( 100 , 2 , 0 , 0 , 0 , 0.35 , false , false , " Skyline " )
else
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_COMBATTIME " ] .. " : " , Details.gump : IntegerToTimer ( decorrido ) , 2 , " white " , " white " )
end
if ( thisCombat.is_boss ) then
gameCooltip : AddLine ( " " , " " , 2 , " white " , " white " )
end
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_START " ] .. " : " , thisCombat.data_inicio , 2 , " white " , " white " )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_END " ] .. " : " , thisCombat.data_fim or " in progress " , 2 , " white " , " white " )
else
--the combat has mythic dungeon tag but doesn't have a mythic dungeon table information
--so this is a trash cleanup segment
local trashInfo = thisCombat : GetMythicDungeonTrashInfo ( )
--CoolTip:AddLine(Loc["STRING_SEGMENT_TRASH"], _detalhes.gump:IntegerToTimer(thisCombat:GetCombatTime()), 1, dungeon_color_trash, "gray")
--CoolTip:AddIcon([[Interface\AddOns\Details\images\icons]], "main", "left", 16, 12, 0.02734375, 0.11328125, 0.19140625, 0.3125, "red")
--CoolTip:AddIcon([[Interface\AddOns\Details\images\icons]], "main", "left", 14, 10, 479/512, 510/512, 24/512, 51/512, nil, nil, true)
--submenu
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_TRASH " ] , nil , 2 , " white " , " white " )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_COMBATTIME " ] .. " : " , Details.gump : IntegerToTimer ( thisCombat : GetCombatTime ( ) ) , 2 , " white " , " white " )
gameCooltip : AddLine ( " " , " " , 2 , " white " , " white " )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_START " ] .. " : " , thisCombat.data_inicio , 2 , " white " , " white " )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_END " ] .. " : " , thisCombat.data_fim or " in progress " , 2 , " white " , " white " )
if ( trashInfo ) then
local backgroundImage = Details : GetRaidIcon ( trashInfo.MapID , trashInfo.EJID , " party " )
if ( backgroundImage and bCanUseBackgroundImage ) then
gameCooltip : SetWallpaper ( 2 , backgroundImage , { 0.070 , 0.695 , 0.087 , 0.566 } , { 1 , 1 , 1 , 0.5 } , true )
end
end
end
segment_info_added = true
elseif ( Details.tabela_vigente . is_boss and Details.tabela_vigente . is_boss.name ) then
local portrait = Details : GetBossPortrait ( Details.tabela_vigente . is_boss.mapid , Details.tabela_vigente . is_boss.index ) or Details.tabela_vigente . is_boss.bossimage
if ( portrait ) then
gameCooltip : AddIcon ( portrait , 2 , " top " , 128 , 64 )
else
local thisCombat = Details.tabela_vigente
local encounter_name = thisCombat.is_boss . encounter
local instanceID = thisCombat.is_boss . ej_instance_id
instanceID = tonumber ( instanceID )
if ( encounter_name and instanceID and instanceID ~= 0 ) then
local index , name , description , encounterID , rootSectionID , link = Details : GetEncounterInfoFromEncounterName ( instanceID , encounter_name )
if ( index and name and encounterID ) then
local id , name , description , displayInfo , iconImage = DetailsFramework.EncounterJournal . EJ_GetCreatureInfo ( index , encounterID )
if ( iconImage ) then
gameCooltip : AddIcon ( iconImage , 2 , " top " , 128 , 64 )
end
end
end
end
if ( Details.tooltip . submenu_wallpaper ) then
local background = Details : GetRaidIcon ( Details.tabela_vigente . is_boss.mapid )
if ( background and bCanUseBackgroundImage ) then
gameCooltip : SetWallpaper ( 2 , background , nil , segments_wallpaper_color , true )
else
local ej_id = Details.tabela_vigente . is_boss.ej_instance_id
if ( ej_id and ej_id ~= 0 ) then
local name , description , bgImage , buttonImage , loreImage , dungeonAreaMapID , link = DetailsFramework.EncounterJournal . EJ_GetInstanceInfo ( ej_id )
if ( name and bCanUseBackgroundImage ) then
if ( Details.tabela_vigente . instance_type == " party " ) then
gameCooltip : SetWallpaper ( 2 , bgImage , party_wallpaper_tex , party_wallpaper_color , true )
else
gameCooltip : SetWallpaper ( 2 , loreImage , raid_wallpaper_tex , party_wallpaper_color , true )
end
end
end
end
end
elseif ( Details.tabela_vigente . is_pvp ) then
enemy = Details.tabela_vigente . is_pvp.name
file , coords = Details : GetBattlegroundInfo ( Details.tabela_vigente . is_pvp.mapid )
elseif ( Details.tabela_vigente . is_arena ) then
enemy = Details.tabela_vigente . is_arena.name
file , coords = Details : GetArenaInfo ( Details.tabela_vigente . is_arena.mapid )
else
if ( Details.tooltip . submenu_wallpaper and bCanUseBackgroundImage ) then
gameCooltip : SetWallpaper ( 2 , [[Interface\ACHIEVEMENTFRAME\UI-Achievement-StatsBackground]] , segments_common_tex , { 1 , 1 , 1 , 0.5 } , true )
end
end
if ( Details.tooltip . submenu_wallpaper and bCanUseBackgroundImage ) then
if ( file ) then
gameCooltip : SetWallpaper ( 2 , " Interface \\ Glues \\ LOADINGSCREENS \\ " .. file , coords , empty_segment_color , true )
end
end
if ( not segment_info_added ) then
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_ENEMY " ] .. " : " , enemy , 2 , " white " , " white " )
if ( not Details.tabela_vigente : GetEndTime ( ) ) then
if ( Details.in_combat ) then
local decorrido = Details.tabela_vigente : GetCombatTime ( )
local minutos , segundos = floor ( decorrido / 60 ) , floor ( decorrido % 60 )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_COMBATTIME " ] .. " : " , minutos .. " m " .. segundos .. " s " , 2 , " white " , " white " )
else
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_COMBATTIME " ] .. " : " , " --x--x-- " , 2 , " white " , " white " )
end
else
local decorrido = Details.tabela_vigente : GetCombatTime ( )
local minutos , segundos = floor ( decorrido / 60 ) , floor ( decorrido % 60 )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_COMBATTIME " ] .. " : " , minutos .. " m " .. segundos .. " s " , 2 , " white " , " white " )
end
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_START " ] .. " : " , Details.tabela_vigente . data_inicio , 2 , " white " , " white " )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_END " ] .. " : " , Details.tabela_vigente . data_fim or " in progress " , 2 , " white " , " white " )
end
--fill � a quantidade de menu que esta sendo mostrada
if ( instance.segmento == 0 ) then
if ( fill - 2 == menuIndex ) then
gameCooltip : SetLastSelected ( " main " , fill + 0 )
elseif ( fill - 1 == menuIndex ) then
gameCooltip : SetLastSelected ( " main " , fill + 1 )
else
gameCooltip : 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"]
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_OVERALL " ] , _ , 1 , " white " )
gameCooltip : AddMenu ( 1 , instance.TrocaTabela , - 1 )
gameCooltip : AddIcon ( [[Interface\QUESTFRAME\UI-Quest-BulletPoint]] , " main " , " left " , 16 , 16 , nil , nil , nil , nil , " orange " )
local enemy_name = Details.tabela_overall . overall_enemy_name
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_ENEMY " ] .. " : " , enemy_name , 2 , " white " , " white " )
local combat_time = Details.tabela_overall : GetCombatTime ( )
local minutos , segundos = floor ( combat_time / 60 ) , floor ( combat_time % 60 )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS_LIST_COMBATTIME " ] .. " : " , minutos .. " m " .. segundos .. " s " , 2 , " white " , " white " )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_START " ] .. " : " , Details.tabela_overall . data_inicio , 2 , " white " , " white " )
gameCooltip : AddLine ( Loc [ " STRING_SEGMENT_END " ] .. " : " , Details.tabela_overall . data_fim , 2 , " white " , " white " )
-- combats added
local combats_added = Details.tabela_overall . segments_added or Details.empty_table
gameCooltip : AddLine ( Loc [ " STRING_SEGMENTS " ] .. " : " , # combats_added , 2 , " white " , " white " )
if ( # combats_added > 0 ) then
gameCooltip : AddLine ( " " , " " , 2 , " white " , " white " )
end
for i , segment in ipairs ( combats_added ) do
local minutos , segundos = floor ( segment.elapsed / 60 ) , floor ( segment.elapsed % 60 )
local name = segment.name
if ( name : len ( ) > 20 ) then
name = string.sub ( name , 1 , # name - ( # name - 20 ) )
end
gameCooltip : AddLine ( " " .. name , minutos .. " m " .. segundos .. " s " , 2 , " white " , " white " )
local segmentType = segment.type
if ( segmentType == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_TRASH ) then
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\icons]] , 2 , 1 , 12 , 8 , 479 / 512 , 510 / 512 , 24 / 512 , 51 / 512 , nil , nil , true )
elseif ( segmentType == DETAILS_SEGMENTTYPE_MYTHICDUNGEON_BOSS ) then
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\icons]] , 2 , 1 , 12 , 12 , 0.96875 , 1 , 0 , 0.03125 , party_line_color )
elseif ( segmentType == DETAILS_SEGMENTTYPE_RAID_TRASH or segmentType == DETAILS_SEGMENTTYPE_DUNGEON_TRASH ) then
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\icons]] , 2 , 1 , 10 , 8 , 0.02734375 , 0.11328125 , 0.19140625 , 0.3125 )
elseif ( segmentType == DETAILS_SEGMENTTYPE_RAID_BOSS ) then
gameCooltip : AddIcon ( [[Interface\AddOns\Details\images\icons]] , 2 , 1 , 12 , 12 , 0.96875 , 1 , 0 , 0.03125 )
end
--CoolTip:AddStatusBar (100, 2, 0, 0, 0, 0.2, false, false, "Skyline")
end
--fill � a quantidade de menu que esta sendo mostrada
if ( instance.segmento == - 1 ) then
if ( fill - 2 == menuIndex ) then
gameCooltip : SetLastSelected ( " main " , fill + 1 )
elseif ( fill - 1 == menuIndex ) then
gameCooltip : SetLastSelected ( " main " , fill + 2 )
else
gameCooltip : SetLastSelected ( " main " , fill + 3 )
end
menuIndex = nil
end
---------------------------------------------
Details : SetMenuOwner ( self , instance )
gameCooltip : SetOption ( " TextSize " , Details.font_sizes . menus )
gameCooltip : SetOption ( " TextFont " , Details.font_faces . menus )
gameCooltip : SetOption ( " SubMenuIsTooltip " , true )
gameCooltip : SetOption ( " ButtonHeightMod " , - 4 )
gameCooltip : SetOption ( " ButtonsYMod " , - 10 )
gameCooltip : SetOption ( " YSpacingMod " , 1 )
gameCooltip : SetOption ( " ButtonHeightModSub " , 4 )
gameCooltip : SetOption ( " ButtonsYModSub " , 0 )
gameCooltip : SetOption ( " YSpacingModSub " , - 4 )
gameCooltip : SetOption ( " HeighMod " , 12 )
Details : SetTooltipMinWidth ( )
show_anti_overlap ( instance , self , " top " )
gameCooltip : ShowCooltip ( )
self : SetScript ( " OnUpdate " , nil )
end
end
-- ~skin
function Details : SetUserCustomSkinFile ( file )
if ( type ( file ) ~= " string " ) then
error ( " SetUserCustomSkinFile() file must be a string. " )
end
if ( file : find ( " \\ " ) or file : find ( " / " ) ) then
error ( " SetUserCustomSkinFile() file must be only the file name (with out up folders) and slashes. " )
end
self.skin_custom = file
self : ChangeSkin ( )
end
function Details : RefreshMicroDisplays ( )
Details.StatusBar : UpdateOptions ( self )
end
function Details : WaitForSkin ( )
local skinName = self.skin
local hasSkinInCache = Details.installed_skins_cache [ skinName ]
if ( hasSkinInCache ) then
Details : InstallSkin ( skinName , hasSkinInCache )
local skin = Details.skins [ skinName ]
if ( skin ) then
return skin
end
end
Details.waitingForSkins = Details.waitingForSkins or { }
Details.waitingForSkins [ self : GetId ( ) ] = skinName
local defaultSkin = Details.default_skin_to_use
local skin = Details.skins [ defaultSkin ]
self.skin = defaultSkin
return skin
end
function Details : ChangeSkin ( skin_name )
if ( not skin_name ) then
skin_name = self.skin
end
local this_skin = Details.skins [ skin_name ]
if ( not this_skin ) then
local tempSkin = Details : WaitForSkin ( )
this_skin = tempSkin
end
local just_updating = false
if ( self.skin == skin_name ) then
just_updating = true
end
if ( not just_updating ) then
--skin updater
if ( self.bgframe . skin_script ) then
self.bgframe : SetScript ( " OnUpdate " , nil )
self.bgframe . skin_script = false
end
--reset all config
self : ResetInstanceConfigKeepingValues ( true )
--overwrites
local overwrite_cprops = this_skin.instance_cprops
if ( overwrite_cprops ) then
local copy = Details.CopyTable ( overwrite_cprops )
for cprop , value in pairs ( copy ) do
if ( not Details.instance_skin_ignored_values [ cprop ] ) then
if ( type ( value ) == " table " ) then
for cprop2 , value2 in pairs ( value ) do
if ( not self [ cprop ] ) then
self [ cprop ] = { }
end
self [ cprop ] [ cprop2 ] = value2
end
else
self [ cprop ] = value
end
end
end
end
--reset micro frames
Details.StatusBar : Reset ( self )
--customize micro frames
if ( this_skin.micro_frames ) then
if ( this_skin.micro_frames . left ) then
Details.StatusBar : SetPlugin ( self , this_skin.micro_frames . left , " left " )
end
if ( this_skin.micro_frames . textxmod ) then
Details.StatusBar : ApplyOptions ( self.StatusBar . left , " textxmod " , this_skin.micro_frames . textxmod )
Details.StatusBar : ApplyOptions ( self.StatusBar . center , " textxmod " , this_skin.micro_frames . textxmod )
Details.StatusBar : ApplyOptions ( self.StatusBar . right , " textxmod " , this_skin.micro_frames . textxmod )
end
if ( this_skin.micro_frames . textymod ) then
Details.StatusBar : ApplyOptions ( self.StatusBar . left , " textymod " , this_skin.micro_frames . textymod )
Details.StatusBar : ApplyOptions ( self.StatusBar . center , " textymod " , this_skin.micro_frames . textymod )
Details.StatusBar : ApplyOptions ( self.StatusBar . right , " textymod " , this_skin.micro_frames . textymod )
end
if ( this_skin.micro_frames . hidden ) then
Details.StatusBar : ApplyOptions ( self.StatusBar . left , " hidden " , this_skin.micro_frames . hidden )
Details.StatusBar : ApplyOptions ( self.StatusBar . center , " hidden " , this_skin.micro_frames . hidden )
Details.StatusBar : ApplyOptions ( self.StatusBar . right , " hidden " , this_skin.micro_frames . hidden )
end
if ( this_skin.micro_frames . color ) then
Details.StatusBar : ApplyOptions ( self.StatusBar . left , " textcolor " , this_skin.micro_frames . color )
Details.StatusBar : ApplyOptions ( self.StatusBar . center , " textcolor " , this_skin.micro_frames . color )
Details.StatusBar : ApplyOptions ( self.StatusBar . right , " textcolor " , this_skin.micro_frames . color )
end
if ( this_skin.micro_frames . font ) then
Details.StatusBar : ApplyOptions ( self.StatusBar . left , " textface " , this_skin.micro_frames . font )
Details.StatusBar : ApplyOptions ( self.StatusBar . center , " textface " , this_skin.micro_frames . font )
Details.StatusBar : ApplyOptions ( self.StatusBar . right , " textface " , this_skin.micro_frames . font )
end
if ( this_skin.micro_frames . size ) then
Details.StatusBar : ApplyOptions ( self.StatusBar . left , " textsize " , this_skin.micro_frames . size )
Details.StatusBar : ApplyOptions ( self.StatusBar . center , " textsize " , this_skin.micro_frames . size )
Details.StatusBar : ApplyOptions ( self.StatusBar . right , " textsize " , this_skin.micro_frames . size )
end
end
end
self.skin = skin_name
local skin_file = this_skin.file
--set textures
if ( self.skin_custom ~= " " ) then
skin_file = " Interface \\ " .. self.skin_custom
end
self.baseframe . cabecalho.ball : SetTexture ( skin_file ) --bola esquerda
self.baseframe . cabecalho.emenda : SetTexture ( skin_file ) --emenda que liga a bola a textura do centro
self.baseframe . cabecalho.ball_r : SetTexture ( skin_file ) --bola direita onde fica o bot�o de fechar
self.baseframe . cabecalho.top_bg : SetTexture ( skin_file ) --top background
self.baseframe . barra_esquerda : SetTexture ( skin_file ) --barra lateral
self.baseframe . barra_direita : SetTexture ( skin_file ) --barra lateral
self.baseframe . barra_fundo : SetTexture ( skin_file ) --barra inferior
self.baseframe . scroll_up : SetTexture ( skin_file ) --scrollbar parte de cima
self.baseframe . scroll_down : SetTexture ( skin_file ) --scrollbar parte de baixo
self.baseframe . scroll_middle : SetTexture ( skin_file ) --scrollbar parte do meio
self.baseframe . rodape.top_bg : SetTexture ( skin_file ) --rodape top background
self.baseframe . rodape.esquerdo : SetTexture ( skin_file ) --rodape esquerdo
self.baseframe . rodape.direita : SetTexture ( skin_file ) --rodape direito
self.baseframe . rodape.esquerdo_nostatusbar : SetTexture ( skin_file ) --rodape direito
self.baseframe . rodape.direita_nostatusbar : SetTexture ( skin_file ) --rodape direito
self.baseframe . button_stretch.texture : SetTexture ( skin_file ) --bot�o de esticar a janela
self.baseframe . resize_direita.texture : SetTexture ( skin_file ) --bot�o de redimencionar da direita
self.baseframe . resize_esquerda.texture : SetTexture ( skin_file ) --bot�o de redimencionar da esquerda
self.break_snap_button : SetNormalTexture ( skin_file ) --cadeado
self.break_snap_button : SetDisabledTexture ( skin_file )
self.break_snap_button : SetHighlightTexture ( skin_file , " ADD " )
self.break_snap_button : SetPushedTexture ( skin_file )
--update toolbar icons
local toolbar_buttons = { }
do
local toolbar_icon_file = self.toolbar_icon_file
if ( not toolbar_icon_file ) then
toolbar_icon_file = [[Interface\AddOns\Details\images\toolbar_icons]]
end
toolbar_buttons [ 1 ] = self.baseframe . cabecalho.modo_selecao
toolbar_buttons [ 2 ] = self.baseframe . cabecalho.segmento
toolbar_buttons [ 3 ] = self.baseframe . cabecalho.atributo
toolbar_buttons [ 4 ] = self.baseframe . cabecalho.report
toolbar_buttons [ 5 ] = self.baseframe . cabecalho.reset
toolbar_buttons [ 6 ] = self.baseframe . cabecalho.fechar
for i = 1 , # toolbar_buttons do
local button = toolbar_buttons [ i ]
button : SetNormalTexture ( toolbar_icon_file )
button : SetHighlightTexture ( toolbar_icon_file )
button : SetPushedTexture ( toolbar_icon_file )
end
end
----------icon anchor and size
if ( self.modo == 1 or self.modo == 4 or self.atributo == 5 ) then -- alone e raid
local icon_anchor = this_skin.icon_anchor_plugins
self.baseframe . cabecalho.atributo_icon : SetPoint ( " topright " , self.baseframe . cabecalho.ball_point , " topright " , icon_anchor [ 1 ] , icon_anchor [ 2 ] )
if ( self.modo == 1 ) then
if ( Details.SoloTables . Plugins [ 1 ] and Details.SoloTables . Mode ) then
local plugin_index = Details.SoloTables . Mode
if ( plugin_index > 0 and Details.SoloTables . Menu [ plugin_index ] ) then
self : ChangeIcon ( Details.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 ( 1 )
else
self.baseframe . cabecalho.ball : SetAlpha ( self.color [ 4 ] )
end
----------update abbreviation function on the class files
Details.atributo_damage : UpdateSelectedToKFunction ( )
Details.atributo_heal : UpdateSelectedToKFunction ( )
Details.atributo_energy : UpdateSelectedToKFunction ( )
Details.atributo_misc : UpdateSelectedToKFunction ( )
Details.atributo_custom : UpdateSelectedToKFunction ( )
----------call widgets handlers
self : SetBarSettings ( self.row_info . height )
self : SetBarBackdropSettings ( )
self : SetBarSpecIconSettings ( )
self : SetBarRightTextSettings ( )
--update toolbar
self : ToolbarSide ( )
--update stretch button
self : StretchButtonAnchor ( )
--update side bars
if ( self.show_sidebars ) then
self : ShowSideBars ( )
else
self : HideSideBars ( )
end
--refresh the side of the micro displays and its lock state
self : MicroDisplaysSide ( )
self : MicroDisplaysLock ( )
self : RefreshMicroDisplays ( )
--update statusbar
if ( self.show_statusbar ) then
self : ShowStatusBar ( )
else
self : HideStatusBar ( )
end
--update wallpaper
if ( self.wallpaper . enabled ) then
self : InstanceWallpaper ( true )
else
self : InstanceWallpaper ( false )
end
--update instance color
self : InstanceColor ( )
self : SetBackgroundColor ( )
self : SetBackgroundAlpha ( )
self : SetAutoHideMenu ( )
self : SetBackdropTexture ( )
--refresh all bars
self : InstanceRefreshRows ( )
--update menu saturation
self : DesaturateMenu ( )
--update statusbar color
self : StatusBarColor ( )
--update attribute string
self : AttributeMenu ( )
--update top menus
self : LeftMenuAnchorSide ( )
--update window strata level
self : SetFrameStrata ( )
--update the combat alphas
self : AdjustAlphaByContext ( )
--update icons
Details.ToolBar : ReorganizeIcons ( true ) --call self:SetMenuAlpha()
--refresh options panel if opened
if ( _G.DetailsOptionsWindow and _G.DetailsOptionsWindow : IsShown ( ) and not _G.DetailsOptionsWindow . IsLoading ) then
Details : OpenOptionsWindow ( self )
end
--auto interact
if ( self.menu_alpha . enabled ) then
self : SetMenuAlpha ( nil , nil , nil , nil , self.is_interacting )
end
--set the scale
self : SetWindowScale ( )
--refresh lock buttons
self : RefreshLockedState ( )
--update borders
self : UpdateFullBorder ( )
self : UpdateRowAreaBorder ( )
--update title bar
self : RefreshTitleBar ( )
--update the wallpaper level
self : SetInstanceWallpaperLevel ( )
--clear any control sscript running in this instance
self.bgframe : SetScript ( " OnUpdate " , nil )
self.bgframe . skin_script = nil
--check if the skin has control scripts to run
if ( not just_updating or Details.initializing ) then
local callbackFunc = this_skin.callback
if ( callbackFunc ) then
DetailsFramework : SetEnvironment ( callbackFunc )
local okey , result = pcall ( callbackFunc , this_skin , self , just_updating )
if ( not okey ) then
Details : Msg ( " |cFFFF9900error on skin callback function|r: " , result )
end
end
if ( this_skin.control_script ) then
local onStartScript = this_skin.control_script_on_start
if ( onStartScript ) then
DetailsFramework : SetEnvironment ( onStartScript )
local okey , result = pcall ( onStartScript , this_skin , self )
if ( not okey ) then
Details : Msg ( " |cFFFF9900error on skin control on start function|r: " , result )
end
end
local controlFunc = this_skin.control_script
DetailsFramework : SetEnvironment ( controlFunc )
self.bgframe : SetScript ( " OnUpdate " , controlFunc )
self.bgframe . skin_script = true
self.bgframe . skin = this_skin
end
end
self : UpdateClickThrough ( )
end
--update the window click through state
local updateClickThroughListener = Details : CreateEventListener ( )
function updateClickThroughListener : EnterCombat ( )
Details : InstanceCall ( function ( instance )
C_Timer.After ( 1.5 , function ( )
instance : UpdateClickThrough ( )
end )
end )
end
function updateClickThroughListener : LeaveCombat ( )
Details : InstanceCall ( function ( instance )
C_Timer.After ( 1.5 , function ( )
instance : UpdateClickThrough ( )
end )
end )
end
updateClickThroughListener : RegisterEvent ( " COMBAT_PLAYER_ENTER " , " EnterCombat " )
updateClickThroughListener : RegisterEvent ( " COMBAT_PLAYER_LEAVE " , " EnterCombat " )
function Details : UpdateClickThroughSettings ( inCombat , window , bars , toolbaricons )
if ( inCombat ~= nil ) then
self.clickthrough_incombatonly = inCombat
end
if ( window ~= nil ) then
self.clickthrough_window = window
end
if ( bars ~= nil ) then
self.clickthrough_rows = bars
end
if ( toolbaricons ~= nil ) then
self.clickthrough_toolbaricons = toolbaricons
end
self : UpdateClickThrough ( )
end
function Details : UpdateClickThrough ( )
local barsClickThrough = self.clickthrough_rows
local windowClickThrough = self.clickthrough_window
local onlyInCombat = self.clickthrough_incombatonly
local toolbarIcons = not self.clickthrough_toolbaricons
if ( onlyInCombat ) then
if ( InCombatLockdown ( ) ) then
--player bars
if ( barsClickThrough ) then
for barIndex , barObject in ipairs ( self.barras ) do
barObject : EnableMouse ( false )
barObject.icon_frame : EnableMouse ( false )
end
else
for barIndex , barObject in ipairs ( self.barras ) do
barObject : EnableMouse ( true )
barObject.icon_frame : EnableMouse ( true )
end
end
--window frames
if ( windowClickThrough ) then
self.baseframe : EnableMouse ( false )
self.bgframe : EnableMouse ( false )
self.rowframe : EnableMouse ( false )
self.floatingframe : EnableMouse ( false )
self.windowSwitchButton : EnableMouse ( false )
self.windowBackgroundDisplay : EnableMouse ( false )
self.baseframe . UPFrame : EnableMouse ( false )
self.baseframe . DOWNFrame : EnableMouse ( false )
else
self.baseframe : EnableMouse ( true )
self.bgframe : EnableMouse ( true )
self.rowframe : EnableMouse ( true )
self.floatingframe : EnableMouse ( true )
self.windowSwitchButton : EnableMouse ( true )
self.windowBackgroundDisplay : EnableMouse ( true )
self.baseframe . UPFrame : EnableMouse ( true )
self.baseframe . DOWNFrame : EnableMouse ( true )
end
--titlebar icons
local toolbar_buttons = { }
toolbar_buttons [ 1 ] = self.baseframe . cabecalho.modo_selecao
toolbar_buttons [ 2 ] = self.baseframe . cabecalho.segmento
toolbar_buttons [ 3 ] = self.baseframe . cabecalho.atributo
toolbar_buttons [ 4 ] = self.baseframe . cabecalho.report
toolbar_buttons [ 5 ] = self.baseframe . cabecalho.reset
toolbar_buttons [ 6 ] = self.baseframe . cabecalho.fechar
for i , button in ipairs ( toolbar_buttons ) do
button : EnableMouse ( toolbar_buttons )
end
else
--player bars
for barIndex , barObject in ipairs ( self.barras ) do
barObject : EnableMouse ( true )
barObject.icon_frame : EnableMouse ( true )
end
--window frames
self.baseframe : EnableMouse ( true )
self.bgframe : EnableMouse ( true )
self.rowframe : EnableMouse ( true )
self.floatingframe : EnableMouse ( true )
self.windowSwitchButton : EnableMouse ( true )
self.windowBackgroundDisplay : EnableMouse ( true )
self.baseframe . UPFrame : EnableMouse ( true )
self.baseframe . DOWNFrame : EnableMouse ( true )
--titlebar icons, forcing true because the player isn't in combat and the inCombat setting is enabled
local toolbar_buttons = { }
toolbar_buttons [ 1 ] = self.baseframe . cabecalho.modo_selecao
toolbar_buttons [ 2 ] = self.baseframe . cabecalho.segmento
toolbar_buttons [ 3 ] = self.baseframe . cabecalho.atributo
toolbar_buttons [ 4 ] = self.baseframe . cabecalho.report
toolbar_buttons [ 5 ] = self.baseframe . cabecalho.reset
toolbar_buttons [ 6 ] = self.baseframe . cabecalho.fechar
for i , button in ipairs ( toolbar_buttons ) do
button : EnableMouse ( true )
end
end
else
--player bars
if ( barsClickThrough ) then
for barIndex , barObject in ipairs ( self.barras ) do
barObject : EnableMouse ( false )
barObject.icon_frame : EnableMouse ( false )
end
else
for barIndex , barObject in ipairs ( self.barras ) do
barObject : EnableMouse ( true )
end
end
--window frame
if ( windowClickThrough ) then
self.baseframe : EnableMouse ( false )
self.bgframe : EnableMouse ( false )
self.rowframe : EnableMouse ( false )
self.floatingframe : EnableMouse ( false )
self.windowSwitchButton : EnableMouse ( false )
self.windowBackgroundDisplay : EnableMouse ( false )
self.baseframe . UPFrame : EnableMouse ( false )
self.baseframe . DOWNFrame : EnableMouse ( false )
else
self.baseframe : EnableMouse ( true )
self.bgframe : EnableMouse ( true )
self.rowframe : EnableMouse ( true )
self.floatingframe : EnableMouse ( true )
self.windowSwitchButton : EnableMouse ( true )
self.windowBackgroundDisplay : EnableMouse ( true )
self.baseframe . UPFrame : EnableMouse ( true )
self.baseframe . DOWNFrame : EnableMouse ( true )
end
--titlebar icons
local toolbar_buttons = { }
toolbar_buttons [ 1 ] = self.baseframe . cabecalho.modo_selecao
toolbar_buttons [ 2 ] = self.baseframe . cabecalho.segmento
toolbar_buttons [ 3 ] = self.baseframe . cabecalho.atributo
toolbar_buttons [ 4 ] = self.baseframe . cabecalho.report
toolbar_buttons [ 5 ] = self.baseframe . cabecalho.reset
toolbar_buttons [ 6 ] = self.baseframe . cabecalho.fechar
for i , button in ipairs ( toolbar_buttons ) do
button : EnableMouse ( toolbarIcons )
end
end
end
function Details : DelayedCheckCombatAlpha ( instance , alpha )
if ( UnitAffectingCombat ( " player " ) or InCombatLockdown ( ) ) then
instance : SetWindowAlphaForCombat ( true , true , alpha ) --hida a janela
instance : SetWindowAlphaForCombat ( true , true , alpha ) --hida a janela
end
end
function Details : DelayedCheckOutOfCombatAlpha ( instance , alpha )
if ( not UnitAffectingCombat ( " player " ) and not InCombatLockdown ( ) ) then
instance : SetWindowAlphaForCombat ( true , true , alpha ) --hida a janela
instance : SetWindowAlphaForCombat ( true , true , alpha ) --hida a janela
end
end
function Details : DelayedCheckOutOfCombatAndGroupAlpha ( instance , alpha )
if ( ( Details.zone_type == " raid " or Details.zone_type == " party " ) and IsInInstance ( ) ) then
if ( UnitAffectingCombat ( " player " ) or InCombatLockdown ( ) ) then
instance : SetWindowAlphaForCombat ( false , false , alpha ) --deshida a janela
else
instance : SetWindowAlphaForCombat ( true , true , alpha ) --hida a janela
instance : SetWindowAlphaForCombat ( true , true , alpha ) --hida a janela
end
end
end
local getAlphaByContext = function ( instance , contextIndex , invert )
local alpha = instance.hide_on_context [ contextIndex ] . value
if ( invert ) then
alpha = abs ( alpha - 100 )
end
return alpha
end
function Details : AdjustAlphaByContext ( interacting )
--in combat
if ( not self.meu_id ) then
print ( " error Details! AdjustAlphaByContext() " , debugstack ( ) )
end
local hasRuleEnabled = false
--not in group
if ( self.hide_on_context [ 3 ] . enabled ) then
if ( self.hide_on_context [ 3 ] . inverse ) then
--while in group
if ( Details.in_group ) then
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , 3 ) ) --hida a janela
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , 3 ) ) --hida a janela
hasRuleEnabled = true
end
else
--while not in group
if ( not Details.in_group ) then
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , 3 ) ) --hida a janela
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , 3 ) ) --hida a janela
hasRuleEnabled = true
end
end
end
--while not inside instance
if ( self.hide_on_context [ 4 ] . enabled ) then
local isInInstance = IsInInstance ( )
if ( not isInInstance or ( not Details.zone_type == " raid " and not Details.zone_type == " party " ) ) then
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , 4 ) ) --hida a janela
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , 4 ) ) --hida a janela
hasRuleEnabled = true
end
end
--while inside instance
if ( self.hide_on_context [ 5 ] . enabled ) then
local isInInstance = IsInInstance ( )
if ( isInInstance or Details.zone_type == " raid " or Details.zone_type == " party " ) then
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , 5 ) ) --hida a janela
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , 5 ) ) --hida a janela
hasRuleEnabled = true
end
end
--raid debug (inside instance + out of combat)
if ( self.hide_on_context [ 6 ] . enabled ) then
if ( ( Details.zone_type == " raid " or Details.zone_type == " party " ) and IsInInstance ( ) ) then
Details : ScheduleTimer ( " DelayedCheckOutOfCombatAndGroupAlpha " , 0.3 , self , getAlphaByContext ( self , 6 ) )
end
end
--in arena
if ( self.hide_on_context [ 9 ] . enabled ) then
local contextId = 9
local isInInstance = IsInInstance ( )
if ( isInInstance and Details.zone_type == " arena " ) then
--player is within a pvp arena
if ( not self.hide_on_context [ contextId ] . inverse ) then
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , contextId ) )
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , contextId ) )
else
self : SetWindowAlphaForCombat ( false , false , getAlphaByContext ( self , contextId ) ) --deshida a janela
end
hasRuleEnabled = true
else
--player is not inside an arena
if ( self.hide_on_context [ contextId ] . inverse ) then
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , contextId ) )
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , contextId ) )
hasRuleEnabled = true
end
end
end
--in battleground
if ( self.hide_on_context [ 7 ] . enabled ) then
local isInInstance = IsInInstance ( )
if ( isInInstance and Details.zone_type == " pvp " ) then
--player is inside a battleground
if ( not self.hide_on_context [ 7 ] . inverse ) then
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , 7 ) ) --hida a janela
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , 7 ) ) --hida a janela
else
self : SetWindowAlphaForCombat ( false , false , getAlphaByContext ( self , 7 ) ) --deshida a janela
end
hasRuleEnabled = true
else
--player is not inside a battleground
if ( not self.hide_on_context [ 7 ] . inverse ) then
--there's no inverse rule: do nothing
--self:SetWindowAlphaForCombat(false, false, getAlphaByContext(self, 7)) --deshida a janela
else
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , 7 ) ) --hida a janela
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , 7 ) ) --hida a janela
hasRuleEnabled = true
end
end
end
--mythic+
if ( self.hide_on_context [ 8 ] . enabled ) then
if ( _G.DetailsMythicPlusFrame and _G.DetailsMythicPlusFrame . IsDoingMythicDungeon ) then
--player is inside a dungeon mythic+
if ( not self.hide_on_context [ 8 ] . inverse ) then
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , 8 ) ) --hida a janela
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , 8 ) ) --hida a janela
else
self : SetWindowAlphaForCombat ( false , false , getAlphaByContext ( self , 8 ) ) --deshida a janela
end
hasRuleEnabled = true
else
if ( not self.hide_on_context [ 8 ] . inverse ) then
--there's no inverse rule: do nothing
--self:SetWindowAlphaForCombat(false, false, getAlphaByContext(self, 8)) --deshida a janela
else
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , 8 ) ) --hida a janela
self : SetWindowAlphaForCombat ( true , true , getAlphaByContext ( self , 8 ) ) --hida a janela
hasRuleEnabled = true
end
end
end
--in combat
if ( self.hide_on_context [ 1 ] . enabled ) then
Details : ScheduleTimer ( " DelayedCheckCombatAlpha " , 0.3 , self , getAlphaByContext ( self , 1 ) )
end
--out of combat
if ( self.hide_on_context [ 2 ] . enabled ) then
Details : ScheduleTimer ( " DelayedCheckOutOfCombatAlpha " , 0.3 , self , getAlphaByContext ( self , 2 ) )
end
--if no rule is enabled, show the window
if ( not hasRuleEnabled ) then
self : SetWindowAlphaForCombat ( false )
self : SetWindowAlphaForCombat ( false )
end
end
function Details : LeftMenuAnchorSide ( side )
if ( not side ) then
side = self.menu_anchor . side
end
self.menu_anchor . side = side
return self : MenuAnchor ( )
end
function Details : SetFrameStrata ( strata )
if ( not strata ) then
strata = self.strata
end
self.strata = strata
self.rowframe : SetFrameStrata ( strata )
self.windowSwitchButton : SetFrameStrata ( strata )
self.baseframe : SetFrameStrata ( strata )
if ( strata == " BACKGROUND " ) then
self.break_snap_button : SetFrameStrata ( " LOW " )
self.baseframe . resize_esquerda : SetFrameStrata ( " LOW " )
self.baseframe . resize_direita : SetFrameStrata ( " LOW " )
self.baseframe . lock_button : SetFrameStrata ( " LOW " )
elseif ( strata == " LOW " ) then
self.break_snap_button : SetFrameStrata ( " MEDIUM " )
self.baseframe . resize_esquerda : SetFrameStrata ( " MEDIUM " )
self.baseframe . resize_direita : SetFrameStrata ( " MEDIUM " )
self.baseframe . lock_button : SetFrameStrata ( " MEDIUM " )
elseif ( strata == " MEDIUM " ) then
self.break_snap_button : SetFrameStrata ( " HIGH " )
self.baseframe . resize_esquerda : SetFrameStrata ( " HIGH " )
self.baseframe . resize_direita : SetFrameStrata ( " HIGH " )
self.baseframe . lock_button : SetFrameStrata ( " HIGH " )
elseif ( strata == " HIGH " ) then
self.break_snap_button : SetFrameStrata ( " DIALOG " )
self.baseframe . resize_esquerda : SetFrameStrata ( " DIALOG " )
self.baseframe . resize_direita : SetFrameStrata ( " DIALOG " )
self.baseframe . lock_button : SetFrameStrata ( " DIALOG " )
elseif ( strata == " DIALOG " ) then
self.break_snap_button : SetFrameStrata ( " FULLSCREEN " )
self.baseframe . resize_esquerda : SetFrameStrata ( " FULLSCREEN " )
self.baseframe . resize_direita : SetFrameStrata ( " FULLSCREEN " )
self.baseframe . lock_button : SetFrameStrata ( " FULLSCREEN " )
end
self : StretchButtonAlwaysOnTop ( )
end
--set and refresh the full border
function Details : UpdateFullBorder ( shown , color , size )
if ( type ( shown ) == " boolean " ) then
self.fullborder_shown = shown
else
shown = self.fullborder_shown
end
if ( size ) then
self.fullborder_size = size
else
size = self.fullborder_size
end
if ( color ) then
self.fullborder_color = color
else
color = self.fullborder_color
end
self.baseframe . fullWindowFrame.border : SetShown ( shown )
if ( shown ) then
self.baseframe . fullWindowFrame.border : SetBorderSizes ( size , size , size , size )
self.baseframe . fullWindowFrame.border : UpdateSizes ( )
self.baseframe . fullWindowFrame.border : SetVertexColor ( DetailsFramework : ParseColors ( color ) )
end
end
--set and refresh the border of the row area
function Details : UpdateRowAreaBorder ( shown , color , size )
if ( type ( shown ) == " boolean " ) then
self.rowareaborder_shown = shown
else
shown = self.rowareaborder_shown
end
if ( size ) then
self.rowareaborder_size = size
else
size = self.rowareaborder_size
end
if ( color ) then
self.rowareaborder_color = color
else
color = self.rowareaborder_color
end
self.baseframe . border : SetShown ( shown )
if ( shown ) then
self.baseframe . border : SetBorderSizes ( size , size , size , size )
self.baseframe . border : UpdateSizes ( )
self.baseframe . border : SetVertexColor ( DetailsFramework : ParseColors ( color ) )
end
end
-- ~attributemenu (text with attribute name)
function Details : RefreshAttributeTextSize ( )
if ( self.attribute_text . enabled and self.total_buttons_shown and self.baseframe and self.menu_attribute_string ) then
local window_width = self : GetSize ( )
if ( self.auto_hide_menu . left and not self.is_interacting ) then
self.menu_attribute_string : SetWidth ( window_width )
self.menu_attribute_string : SetHeight ( self.attribute_text . text_size + 2 )
return
end
local buttons_shown = self.total_buttons_shown
local buttons_width , buttons_spacement = self.menu_icons_size * 16 , self.menu_icons . space
local width_by_buttons = ( buttons_shown * buttons_width ) + ( buttons_spacement * ( buttons_shown - 1 ) )
local text_size = window_width - width_by_buttons - 6
self.menu_attribute_string : SetWidth ( text_size )
self.menu_attribute_string : SetHeight ( self.attribute_text . text_size + 2 )
end
end
-- ~encounter ~timer
function Details : CheckForTextTimeCounter ( combatStart ) --called from combat start function
if ( combatStart ) then
--if (Details.tabela_vigente.is_boss) then --is an encounter
local instanceId = Details : GetLowerInstanceNumber ( )
if ( instanceId ) then
local instance = Details : GetInstance ( instanceId )
if ( instance.baseframe and instance : IsEnabled ( ) ) then
if ( instance.attribute_text . show_timer ) then --can show the timer
--start a new ticker of 1 second
if ( Details.instance_title_text_timer [ instance : GetId ( ) ] ) then
Details.Schedules . Cancel ( Details.instance_title_text_timer [ instance : GetId ( ) ] )
end
Details.instance_title_text_timer [ instance : GetId ( ) ] = Details.Schedules . NewTicker ( 1 , Details.TitleTextTickTimer , Details , instance )
end
end
else
return --there's no open window
end
--else --boss encounter not found
-- if (Details.in_combat and Details.zone_type == "raid") then
-- Details.Schedules.NewTimer(3, Details.CheckForTextTimeCounter, Details, true)
-- end
--end
else
for instanceId , instance in Details : ListInstances ( ) do
if ( Details.instance_title_text_timer [ instance : GetId ( ) ] and instance.baseframe and instance : IsEnabled ( ) and instance.menu_attribute_string ) then --check if the instance is initialized
Details.Schedules . Cancel ( Details.instance_title_text_timer [ instance : GetId ( ) ] )
local currentText = instance : GetTitleBarText ( )
if ( currentText ) then
currentText = currentText : gsub ( " %[.*%] " , " " )
instance : SetTitleBarText ( currentText )
end
end
end
end
end
local formatTime = function ( t )
local m , s = floor ( t / 60 ) , floor ( t % 60 )
if ( m < 1 ) then
m = " 00 "
elseif ( m < 10 ) then
m = " 0 " .. m
end
if ( s < 10 ) then
s = " 0 " .. s
end
return " [ " .. m .. " : " .. s .. " ] "
end
local updateTimerInTheTitleBarText = function ( instance , timer )
local originalText = instance.menu_attribute_string . originalText
if ( originalText ) then
local formattedTime = formatTime ( timer )
instance : SetTitleBarText ( formattedTime .. " " .. originalText )
else
local titleBarTitleText = instance : GetTitleBarText ( )
if ( titleBarTitleText ) then
if ( not titleBarTitleText : find ( " %[.*%] " ) ) then
instance : SetTitleBarText ( " [00:01] " .. titleBarTitleText )
else
local formattedTime = formatTime ( timer )
titleBarTitleText = titleBarTitleText : gsub ( " %[.*%] " , formattedTime )
instance : SetTitleBarText ( titleBarTitleText )
end
end
end
end
--self is Details
--this is a ticker callback, it is called on each 1 second
function Details : TitleTextTickTimer ( instance )
--hold the time value to show in the title bar
local timer
if ( instance.attribute_text . enabled ) then
local zoneType = Details : GetZoneType ( )
if ( zoneType == " arena " ) then
if ( instance.attribute_text . show_timer_arena ) then
timer = GetTime ( ) - Details : GetArenaStartTime ( )
end
elseif ( zoneType == " pvp " ) then
if ( instance.attribute_text . show_timer_bg ) then
timer = GetTime ( ) - Details : GetBattlegroundStartTime ( )
end
elseif ( zoneType == " raid " or zoneType == " party " ) then
--always attempt to show the time during a boss encounter
if ( IsEncounterInProgress ) then
if ( IsEncounterInProgress ( ) ) then
timer = Details : GetCurrentCombat ( ) : GetCombatTime ( )
end
else
if ( Details.tabela_vigente . is_boss ) then
timer = Details : GetCurrentCombat ( ) : GetCombatTime ( )
end
end
end
if ( not timer ) then
if ( instance.attribute_text . show_timer_always ) then
timer = Details : GetCurrentCombat ( ) : GetCombatTime ( )
end
end
if ( timer ) then
local combatObject = instance : GetShowingCombat ( )
combatObject.hasTimer = timer
updateTimerInTheTitleBarText ( instance , timer )
end
end
end
function Details : RefreshTitleBarText ( )
local titleBarText = self.menu_attribute_string
if ( titleBarText and self == titleBarText.owner_instance ) then
local sName = self : GetInstanceAttributeText ( )
local instanceMode = self : GetMode ( )
if ( instanceMode == DETAILS_MODE_GROUP or instanceMode == DETAILS_MODE_ALL ) then
local segment = self : GetSegment ( )
if ( segment == DETAILS_SEGMENTID_OVERALL ) then
local dynamicOverallDataCustomID = Details222.GetCustomDisplayIDByName ( Loc [ " STRING_CUSTOM_DYNAMICOVERAL " ] )
if ( ( dynamicOverallDataCustomID ~= self.sub_atributo ) and self.atributo ~= 5 ) then
sName = sName .. " " .. Loc [ " STRING_OVERALL " ]
end
elseif ( segment >= 2 ) then
sName = sName .. " [ " .. segment .. " ] "
end
end
if ( not Details.in_combat ) then
local timer = false --self:GetShowingCombat().hasTimer
if ( timer ) then
local timeFormatted = formatTime ( timer )
titleBarText.originalText = sName
sName = timeFormatted .. " " .. sName
titleBarText : SetText ( sName )
else
titleBarText : SetText ( sName )
titleBarText.originalText = sName
end
else
titleBarText : SetText ( sName )
titleBarText.originalText = sName
end
end
end
function Details : SetTitleBarText ( text )
if ( self.menu_attribute_string ) then
self.menu_attribute_string : SetText ( text )
end
end
function Details : GetTitleBarText ( )
if ( self.menu_attribute_string ) then
return self.menu_attribute_string : GetText ( )
end
end
-- ~titletext
--@timer_bg: battleground elapsed time
--@timer_arena: arena match elapsed time
function Details : AttributeMenu ( enabled , pos_x , pos_y , font , size , color , side , shadow , timer_encounter , timer_bg , timer_arena )
if ( type ( enabled ) ~= " boolean " ) then
enabled = self.attribute_text . enabled
end
if ( not pos_x ) then
pos_x = self.attribute_text . anchor [ 1 ]
end
if ( not pos_y ) then
pos_y = self.attribute_text . anchor [ 2 ]
end
if ( not font ) then
font = self.attribute_text . text_face
end
if ( not size ) then
size = self.attribute_text . text_size
end
if ( not color ) then
color = self.attribute_text . text_color
end
if ( not side ) then
side = self.attribute_text . side
end
if ( type ( shadow ) ~= " boolean " ) then
shadow = self.attribute_text . shadow
end
if ( type ( self.attribute_text . show_timer ) ~= " boolean " ) then
self.attribute_text . show_timer = true
end
if ( type ( timer_encounter ) ~= " boolean " ) then
timer_encounter = self.attribute_text . show_timer
end
if ( type ( timer_bg ) ~= " boolean " ) then
timer_bg = self.attribute_text . show_timer_bg
end
if ( type ( timer_arena ) ~= " boolean " ) then
timer_arena = self.attribute_text . show_timer_arena
end
self.attribute_text . enabled = enabled
self.attribute_text . anchor [ 1 ] = pos_x
self.attribute_text . anchor [ 2 ] = pos_y
self.attribute_text . text_face = font
self.attribute_text . text_size = size
self.attribute_text . text_color = color
self.attribute_text . side = side
self.attribute_text . shadow = shadow
self.attribute_text . show_timer = timer_encounter
self.attribute_text . show_timer_bg = timer_bg
self.attribute_text . show_timer_arena = timer_arena
--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")
local label = gump : NewLabel ( self.baseframe , nil , " DetailsAttributeStringInstance " .. self.meu_id , nil , " " , " GameFontHighlightSmall " )
self.menu_attribute_string = label
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 )
instance : RefreshTitleBarText ( )
end
Details : RegisterEvent ( self.menu_attribute_string , " DETAILS_INSTANCE_CHANGEATTRIBUTE " , self.menu_attribute_string . OnEvent )
Details : RegisterEvent ( self.menu_attribute_string , " DETAILS_INSTANCE_CHANGEMODE " , self.menu_attribute_string . OnEvent )
Details : RegisterEvent ( self.menu_attribute_string , " DETAILS_INSTANCE_CHANGESEGMENT " , self.menu_attribute_string . OnEvent )
self : RefreshTitleBarText ( )
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 )
Details : SetFontFace ( self.menu_attribute_string , fontPath )
--font size
Details : SetFontSize ( self.menu_attribute_string , size )
--color
Details : SetFontColor ( self.menu_attribute_string , color )
C_Timer.After ( 1 , function ( )
Details : SetFontColor ( self.menu_attribute_string , color )
end )
--shadow
Details : SetFontOutline ( self.menu_attribute_string , shadow )
--refresh size
self : RefreshAttributeTextSize ( )
end
-- ~backdrop
function Details : SetBackdropTexture ( texturename )
if ( not texturename ) then
texturename = self.backdrop_texture
end
self.backdrop_texture = texturename
local texture_path = SharedMedia : Fetch ( " background " , texturename )
self.baseframe : SetBackdrop ( {
bgFile = texture_path , tile = true , tileSize = 128 ,
insets = { left = 0 , right = 0 , top = 0 , bottom = 0 } }
)
self.bgdisplay : SetBackdrop ( {
bgFile = texture_path , tile = true , tileSize = 128 ,
insets = { left = 0 , right = 0 , top = 0 , bottom = 0 } }
)
self : SetBackgroundAlpha ( self.bg_alpha )
end
-- ~alpha (transparency of buttons on the toolbar) ~autohide �utohide ~menuauto
function Details : SetAutoHideMenu ( left , right , interacting )
--30/07/2018: the separation by left and right menu icons doesn't exists for years, but it was still active in the code making
--the toolbar icons show on initialization even when the options to auto hide them enabled.
--the code to set the alpha was already updated to only one anhor (left) but this function was still calling to update the right anchor (deprecated)
if ( interacting ) then
if ( self.is_interacting ) then
if ( self.auto_hide_menu . left ) then
local r , g , b = unpack ( self.color_buttons )
self : InstanceButtonsColors ( r , g , b , self.menu_icons_alpha , true , true ) --no save, only left
if ( self.baseframe . cabecalho.PluginIconsSeparator ) then
self.baseframe . cabecalho.PluginIconsSeparator : Show ( )
end
end
else
if ( self.auto_hide_menu . left ) then
local r , g , b = unpack ( self.color_buttons )
self : InstanceButtonsColors ( r , g , b , 0 , true , true ) --no save, only left
if ( self.baseframe . cabecalho.PluginIconsSeparator ) then
self.baseframe . cabecalho.PluginIconsSeparator : Hide ( )
end
end
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 , self.menu_icons_alpha , true , true ) --no save, only left
if ( self.baseframe . cabecalho.PluginIconsSeparator ) then
self.baseframe . cabecalho.PluginIconsSeparator : Show ( )
end
else
if ( self.is_interacting ) then
self : InstanceButtonsColors ( r , g , b , self.menu_icons_alpha , true , true ) --no save, only left
if ( self.baseframe . cabecalho.PluginIconsSeparator ) then
self.baseframe . cabecalho.PluginIconsSeparator : Show ( )
end
else
self : InstanceButtonsColors ( 0 , 0 , 0 , 0 , true , true ) --no save, only left
if ( self.baseframe . cabecalho.PluginIconsSeparator ) then
self.baseframe . cabecalho.PluginIconsSeparator : Hide ( )
end
end
end
self : RefreshAttributeTextSize ( )
end
-- transparency for toolbar, borders and statusbar
function Details : 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 : SetFrameAlpha ( 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 Details : 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 Details : 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 Details : MicroDisplaysLock ( lockstate )
if ( lockstate == nil ) then
lockstate = self.micro_displays_locked
end
self.micro_displays_locked = lockstate
if ( lockstate ) then --is locked
Details.StatusBar : LockDisplays ( self , true )
else
Details.StatusBar : LockDisplays ( self , false )
end
end
function Details : MicroDisplaysSide ( side , fromuser )
if ( not side ) then
side = self.micro_displays_side
end
self.micro_displays_side = side
Details.StatusBar : ReloadAnchors ( self )
if ( self.micro_displays_side == 2 and not self.show_statusbar ) then --bottom side
Details.StatusBar : Hide ( self )
if ( fromuser ) then
Details : Msg ( Loc [ " STRING_OPTIONS_MICRODISPLAYWARNING " ] )
end
elseif ( self.micro_displays_side == 2 ) then
Details.StatusBar : Show ( self )
elseif ( self.micro_displays_side == 1 ) then
Details.StatusBar : Show ( self )
end
end
function Details : 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 Details : GetInstanceGroup ( instance_id )
local instance = self
if ( instance_id ) then
instance = Details : 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 = Details : 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 , Details.instances_amount do
local this_instance = Details : 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 Details : SetWindowScale ( scale , fromOptions )
if ( not scale ) then
scale = self.window_scale
end
if ( fromOptions ) then
local group = self : GetInstanceGroup ( )
for _ , instance in ipairs ( group ) do
instance.baseframe : SetScale ( scale )
instance.rowframe : SetScale ( scale )
instance.windowSwitchButton : SetScale ( scale )
instance.windowBackgroundDisplay : SetScale ( scale )
instance.window_scale = scale
end
else
self.window_scale = scale
self.baseframe : SetScale ( scale )
self.rowframe : SetScale ( scale )
self.windowSwitchButton : SetScale ( scale )
self.windowBackgroundDisplay : SetScale ( scale )
end
end
function Details : ToolbarSide ( side , only_update_anchors )
if ( not side ) then
side = self.toolbar_side
end
self.toolbar_side = side
local skin = Details.skins [ self.skin ]
if ( side == 1 ) then --top
local anchor_mod = not self.show_sidebars and skin.instance_cprops . show_sidebars_need_resize_by or 0
--icon (ball) point
self.baseframe . cabecalho.ball_point : ClearAllPoints ( )
local x , y = unpack ( skin.icon_point_anchor )
x = x + ( anchor_mod )
self.baseframe . cabecalho.ball_point : SetPoint ( " bottomleft " , self.baseframe , " topleft " , x , y )
--ball
if ( self.hide_icon ) then
self.baseframe . cabecalho.ball : SetTexCoord ( unpack ( COORDS_LEFT_BALL_NO_ICON ) )
self.baseframe . cabecalho.emenda : SetTexCoord ( unpack ( COORDS_LEFT_CONNECTOR_NO_ICON ) )
else
self.baseframe . cabecalho.ball : SetTexCoord ( unpack ( COORDS_LEFT_BALL ) )
self.baseframe . cabecalho.emenda : SetTexCoord ( unpack ( COORDS_LEFT_CONNECTOR ) )
end
self.baseframe . cabecalho.ball : ClearAllPoints ( )
local x , y = unpack ( skin.left_corner_anchor )
x = x + ( anchor_mod )
self.baseframe . cabecalho.ball : SetPoint ( " bottomleft " , self.baseframe , " topleft " , x , y )
--ball r
self.baseframe . cabecalho.ball_r : SetTexCoord ( unpack ( COORDS_RIGHT_BALL ) )
self.baseframe . cabecalho.ball_r : ClearAllPoints ( )
local x , y = unpack ( skin.right_corner_anchor )
x = x + ( ( anchor_mod ) * - 1 )
self.baseframe . cabecalho.ball_r : SetPoint ( " bottomright " , self.baseframe , " topright " , x , y )
--tex coords
self.baseframe . cabecalho.top_bg : SetTexCoord ( unpack ( COORDS_TOP_BACKGROUND ) )
--up frames
self.baseframe . UPFrame : SetPoint ( " left " , self.baseframe . cabecalho.ball , " right " , 0 , - 53 )
self.baseframe . UPFrame : SetPoint ( " right " , self.baseframe . cabecalho.ball_r , " left " , 0 , - 53 )
self.baseframe . UPFrameConnect : ClearAllPoints ( )
self.baseframe . UPFrameConnect : SetPoint ( " bottomleft " , self.baseframe , " topleft " , 0 , - 1 )
self.baseframe . UPFrameConnect : SetPoint ( " bottomright " , self.baseframe , " topright " , 0 , - 1 )
self.baseframe . UPFrameLeftPart : ClearAllPoints ( )
self.baseframe . UPFrameLeftPart : SetPoint ( " bottomleft " , self.baseframe , " topleft " , 0 , 0 )
else --bottom
local y = 0
if ( self.show_statusbar ) then
y = - 14
end
local anchor_mod = not self.show_sidebars and skin.instance_cprops . show_sidebars_need_resize_by or 0
--ball point
self.baseframe . cabecalho.ball_point : ClearAllPoints ( )
local _x , _y = unpack ( skin.icon_point_anchor_bottom )
_x = _x + ( anchor_mod )
self.baseframe . cabecalho.ball_point : SetPoint ( " topleft " , self.baseframe , " bottomleft " , _x , _y + y )
--ball
self.baseframe . cabecalho.ball : ClearAllPoints ( )
local _x , _y = unpack ( skin.left_corner_anchor_bottom )
_x = _x + ( anchor_mod )
self.baseframe . cabecalho.ball : SetPoint ( " topleft " , self.baseframe , " bottomleft " , _x , _y + y )
local l , r , t , b = unpack ( COORDS_LEFT_BALL )
self.baseframe . cabecalho.ball : SetTexCoord ( l , r , b , t )
--ball r
self.baseframe . cabecalho.ball_r : ClearAllPoints ( )
local _x , _y = unpack ( skin.right_corner_anchor_bottom )
_x = _x + ( ( anchor_mod ) * - 1 )
self.baseframe . cabecalho.ball_r : SetPoint ( " topright " , self.baseframe , " bottomright " , _x , _y + y )
local l , r , t , b = unpack ( COORDS_RIGHT_BALL )
self.baseframe . cabecalho.ball_r : SetTexCoord ( l , r , b , t )
--tex coords
local l , r , t , b = unpack ( COORDS_LEFT_CONNECTOR )
self.baseframe . cabecalho.emenda : SetTexCoord ( l , r , b , t )
local l , r , t , b = unpack ( COORDS_TOP_BACKGROUND )
self.baseframe . cabecalho.top_bg : SetTexCoord ( l , r , b , t )
--up frames
self.baseframe . UPFrame : SetPoint ( " left " , self.baseframe . cabecalho.ball , " right " , 0 , 53 )
self.baseframe . UPFrame : SetPoint ( " right " , self.baseframe . cabecalho.ball_r , " left " , 0 , 53 )
self.baseframe . UPFrameConnect : ClearAllPoints ( )
self.baseframe . UPFrameConnect : SetPoint ( " topleft " , self.baseframe , " bottomleft " , 0 , 1 )
self.baseframe . UPFrameConnect : SetPoint ( " topright " , self.baseframe , " bottomright " , 0 , 1 )
self.baseframe . UPFrameLeftPart : ClearAllPoints ( )
self.baseframe . UPFrameLeftPart : SetPoint ( " topleft " , self.baseframe , " bottomleft " , 0 , 0 )
end
if ( only_update_anchors ) then
--ShowSideBars depends on this and creates a infinite loop
return
end
--update top menus
self : LeftMenuAnchorSide ( )
self : StretchButtonAnchor ( )
self : HideMainIcon ( ) --attribute menu reseting value
if ( self.show_sidebars ) then
self : ShowSideBars ( )
end
self : AttributeMenu ( )
--update the grow direction to update the gap between the titlebar and the baseframe
self : SetBarGrowDirection ( )
end
function Details : 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 Details : 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 Details : 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 Details : HideMainIcon ( value )
if ( type ( value ) ~= " boolean " ) then
value = self.hide_icon
end
if ( value ) then
self.hide_icon = true
Details.FadeHandler . Fader ( self.baseframe . cabecalho.atributo_icon , 1 )
if ( self.toolbar_side == 1 ) then
self.baseframe . cabecalho.ball : SetTexCoord ( unpack ( COORDS_LEFT_BALL_NO_ICON ) )
self.baseframe . cabecalho.emenda : SetTexCoord ( unpack ( COORDS_LEFT_CONNECTOR_NO_ICON ) )
elseif ( self.toolbar_side == 2 ) then
local l , r , t , b = unpack ( COORDS_LEFT_BALL_NO_ICON )
self.baseframe . cabecalho.ball : SetTexCoord ( l , r , b , t )
local l , r , t , b = unpack ( COORDS_LEFT_CONNECTOR_NO_ICON )
self.baseframe . cabecalho.emenda : SetTexCoord ( l , r , b , t )
end
local skin = Details.skins [ self.skin ]
if ( skin.icon_on_top ) then
self.baseframe . cabecalho.atributo_icon : SetParent ( self.floatingframe )
else
self.baseframe . cabecalho.atributo_icon : SetParent ( self.baseframe )
end
else
self.hide_icon = false
Details.FadeHandler . Fader ( self.baseframe . cabecalho.atributo_icon , 0 )
if ( self.toolbar_side == 1 ) then
self.baseframe . cabecalho.ball : SetTexCoord ( unpack ( COORDS_LEFT_BALL ) )
self.baseframe . cabecalho.emenda : SetTexCoord ( unpack ( COORDS_LEFT_CONNECTOR ) )
elseif ( self.toolbar_side == 2 ) then
local l , r , t , b = unpack ( COORDS_LEFT_BALL )
self.baseframe . cabecalho.ball : SetTexCoord ( l , r , b , t )
local l , r , t , b = unpack ( COORDS_LEFT_CONNECTOR )
self.baseframe . cabecalho.emenda : SetTexCoord ( l , r , b , t )
end
end
end
--search key: ~desaturate
function Details : 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 == Details : GetLowerInstanceNumber ( ) ) then
for _ , button in ipairs ( Details.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 == Details : GetLowerInstanceNumber ( ) ) then
for _ , button in ipairs ( Details.ToolBar . AllButtons ) do
button : GetNormalTexture ( ) : SetDesaturated ( false )
end
end
end
end
function Details : 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 = Details.skins [ self.skin ]
if ( this_skin.instance_cprops and this_skin.instance_cprops . row_info and this_skin.instance_cprops . row_info.space ) then
self.row_info . space.left = this_skin.instance_cprops . row_info.space . left
self.row_info . space.right = this_skin.instance_cprops . row_info.space . right
else
self.row_info . space.left = 3
self.row_info . space.right = - 5
end
if ( self.show_statusbar ) then
self.baseframe . barra_esquerda : SetPoint ( " bottomleft " , self.baseframe , " bottomleft " , - 56 , - 14 )
self.baseframe . barra_direita : SetPoint ( " bottomright " , self.baseframe , " bottomright " , 56 , - 14 )
if ( self.toolbar_side == 2 ) then
self.baseframe . barra_fundo : Show ( )
local l , r , t , b = unpack ( COORDS_BOTTOM_SIDE_BAR )
self.baseframe . barra_fundo : SetTexCoord ( l , r , b , t )
self.baseframe . barra_fundo : ClearAllPoints ( )
self.baseframe . barra_fundo : SetPoint ( " bottomleft " , self.baseframe , " topleft " , 0 , - 6 )
self.baseframe . barra_fundo : SetPoint ( " bottomright " , self.baseframe , " topright " , - 1 , - 6 )
else
self.baseframe . barra_fundo : Hide ( )
end
else
self.baseframe . barra_esquerda : SetPoint ( " bottomleft " , self.baseframe , " bottomleft " , - 56 , 0 )
self.baseframe . barra_direita : SetPoint ( " bottomright " , self.baseframe , " bottomright " , 56 , 0 )
self.baseframe . barra_fundo : Show ( )
if ( self.toolbar_side == 2 ) then --tooltbar on bottom
local l , r , t , b = unpack ( COORDS_BOTTOM_SIDE_BAR )
self.baseframe . barra_fundo : SetTexCoord ( l , r , b , t )
self.baseframe . barra_fundo : ClearAllPoints ( )
self.baseframe . barra_fundo : SetPoint ( " bottomleft " , self.baseframe , " topleft " , 0 , - 6 )
self.baseframe . barra_fundo : SetPoint ( " bottomright " , self.baseframe , " topright " , - 1 , - 6 )
else --tooltbar on top
self.baseframe . barra_fundo : SetTexCoord ( unpack ( COORDS_BOTTOM_SIDE_BAR ) )
self.baseframe . barra_fundo : ClearAllPoints ( )
self.baseframe . barra_fundo : SetPoint ( " bottomleft " , self.baseframe , " bottomleft " , 0 , - 56 )
self.baseframe . barra_fundo : SetPoint ( " bottomright " , self.baseframe , " bottomright " , - 1 , - 56 )
end
end
--self:SetBarGrowDirection()
--passando true - apenas atulizar as anchors
self : ToolbarSide ( nil , true )
end
function Details : HideSideBars ( instancia )
if ( instancia ) then
self = instancia
end
self.show_sidebars = false
local this_skin = Details.skins [ self.skin ]
local space_config = this_skin.instance_cprops and this_skin.instance_cprops . row_info and this_skin.instance_cprops . row_info.space
if ( space_config ) then
if ( space_config.left_noborder ) then
self.row_info . space.left = space_config.left_noborder
else
self.row_info . space.left = 0
end
if ( space_config.right_noborder ) then
self.row_info . space.right = space_config.right_noborder
else
self.row_info . space.right = 0
end
else
self.row_info . space.left = 0
self.row_info . space.right = 0
end
self.baseframe . barra_esquerda : Hide ( )
self.baseframe . barra_direita : Hide ( )
self.baseframe . barra_fundo : Hide ( )
--self:SetBarGrowDirection() --j� � chamado no toolbarside
--passando true - apenas atulizar as anchors
self : ToolbarSide ( nil , true )
end
function Details : HideStatusBar ( instancia )
if ( instancia ) then
self = instancia
end
self.show_statusbar = false
self.baseframe . rodape.esquerdo : Hide ( )
self.baseframe . rodape.direita : Hide ( )
self.baseframe . rodape.top_bg : Hide ( )
self.baseframe . rodape.StatusBarLeftAnchor : Hide ( )
self.baseframe . rodape.StatusBarCenterAnchor : Hide ( )
self.baseframe . DOWNFrame : Hide ( )
--debug
self.baseframe . rodape.direita_nostatusbar : Show ( )
self.baseframe . rodape.esquerdo_nostatusbar : Show ( )
--
if ( self.toolbar_side == 2 ) then
self : ToolbarSide ( )
end
if ( self.show_sidebars ) then
self : ShowSideBars ( )
end
self : StretchButtonAnchor ( )
if ( self.micro_displays_side == 2 ) then --bottom side
Details.StatusBar : Hide ( self ) --mini displays widgets
end
end
function Details : StatusBarColor ( r , g , b , a , no_save )
if ( not r ) then
r , g , b = unpack ( self.statusbar_info . overlay )
a = a or self.statusbar_info . alpha
end
if ( not no_save ) then
self.statusbar_info . overlay [ 1 ] = r
self.statusbar_info . overlay [ 2 ] = g
self.statusbar_info . overlay [ 3 ] = b
self.statusbar_info . alpha = a
end
self.baseframe . rodape.esquerdo : SetVertexColor ( r , g , b )
self.baseframe . rodape.esquerdo : SetAlpha ( a )
self.baseframe . rodape.direita : SetVertexColor ( r , g , b )
self.baseframe . rodape.direita : SetAlpha ( a )
self.baseframe . rodape.direita_nostatusbar : SetVertexColor ( r , g , b )
self.baseframe . rodape.esquerdo_nostatusbar : SetVertexColor ( r , g , b )
self.baseframe . rodape.direita_nostatusbar : SetAlpha ( a )
self.baseframe . rodape.esquerdo_nostatusbar : SetAlpha ( a )
self.baseframe . rodape.top_bg : SetVertexColor ( r , g , b )
self.baseframe . rodape.top_bg : SetAlpha ( a )
end
function Details : ShowStatusBar ( instancia )
if ( instancia ) then
self = instancia
end
self.show_statusbar = true
self.baseframe . rodape.esquerdo : Show ( )
self.baseframe . rodape.direita : Show ( )
self.baseframe . rodape.top_bg : Show ( )
self.baseframe . rodape.StatusBarLeftAnchor : Show ( )
self.baseframe . rodape.StatusBarCenterAnchor : Show ( )
self.baseframe . DOWNFrame : Show ( )
--debug
--self.baseframe.rodape.direita_nostatusbar:Hide()
--self.baseframe.rodape.esquerdo_nostatusbar:Hide()
--
self : ToolbarSide ( )
self : StretchButtonAnchor ( )
if ( self.micro_displays_side == 2 ) then --bottom side
Details.StatusBar : Show ( self ) --mini displays widgets
end
end
function Details : SetTooltipBackdrop ( border_texture , border_size , border_color )
if ( not border_texture ) then
border_texture = Details.tooltip . border_texture
end
if ( not border_size ) then
border_size = Details.tooltip . border_size
end
if ( not border_color ) then
border_color = Details.tooltip . border_color
end
Details.tooltip . border_texture = border_texture
Details.tooltip . border_size = border_size
local c = Details.tooltip . border_color
local cc = Details.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
Details.tooltip_backdrop . edgeFile = SharedMedia : Fetch ( " border " , border_texture )
Details.tooltip_backdrop . edgeSize = border_size
end
--reset button functions
local resetButton_OnEnter = function ( self , _ , bForceOpen )
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
if ( Details.instances_menu_click_to_open and not bForceOpen ) then
return
end
--prepare the reset button menu
gameCooltip : Reset ( )
gameCooltip : SetType ( " menu " )
gameCooltip : SetOption ( " ButtonsYMod " , - 6 )
gameCooltip : SetOption ( " HeighMod " , 6 )
gameCooltip : SetOption ( " YSpacingMod " , - 3 )
gameCooltip : SetOption ( " TextHeightMod " , 0 )
gameCooltip : SetOption ( " IgnoreButtonAutoHeight " , false )
Details : SetTooltipMinWidth ( )
gameCooltip : AddLine ( Loc [ " STRING_ERASE_DATA_OVERALL " ] , nil , 1 , " white " , nil , Details.font_sizes . menus , Details.font_faces . menus )
gameCooltip : AddIcon ( [[Interface\Buttons\UI-StopButton]] , 1 , 1 , 14 , 14 , 0 , 1 , 0 , 1 , " orange " )
gameCooltip : AddMenu ( 1 , Details.tabela_historico . resetar_overall )
gameCooltip : AddLine ( " $div " , nil , 1 , nil , - 5 , - 11 )
gameCooltip : AddLine ( Loc [ " STRING_ERASE_DATA " ] , nil , 1 , " white " , nil , Details.font_sizes . menus , Details.font_faces . menus )
gameCooltip : AddIcon ( [[Interface\Buttons\UI-StopButton]] , 1 , 1 , 14 , 14 , 0 , 1 , 0 , 1 , " red " )
gameCooltip : AddMenu ( 1 , Details.tabela_historico . resetar )
show_anti_overlap ( self.instance , self , " top " )
Details : SetMenuOwner ( self , self.instance )
gameCooltip : ShowCooltip ( )
end
local resetButton_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 closeButton_OnClick = function ( self , button_type , button )
if ( self and not self.instancia and button and button.instancia ) then
self = button
end
self = self or button
self : Disable ( )
self.instancia : DesativarInstancia ( )
--check if there's no more windows opened
if ( Details.opened_windows == 0 ) then
Details : Msg ( Loc [ " STRING_CLOSEALL " ] )
end
if ( not Details : GetTutorialCVar ( " FULL_DELETE_WINDOW " ) ) then
Details : SetTutorialCVar ( " FULL_DELETE_WINDOW " , true )
local panel = gump : Create1PxPanel ( UIParent , 600 , 100 , " |cFFFFFFFFDetails!, the window hit the ground, bang bang...|r " , nil , nil , nil , nil )
panel : SetBackdropColor ( 0 , 0 , 0 , 0.9 )
panel : SetPoint ( " center " , UIParent , " center " )
local s = panel : CreateFontString ( nil , " overlay " , " GameFontNormal " )
s : SetPoint ( " center " , panel , " center " )
s : SetText ( Loc [ " STRING_TUTORIAL_FULLY_DELETE_WINDOW " ] )
panel : Show ( )
end
GameCooltip : Hide ( )
end
Details.close_instancia_func = closeButton_OnClick
local closeButton_OnEnter = function ( self )
OnEnterMainWindow ( self.instance , self )
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 ( " HeighMod " , 9 )
GameCooltip : AddLine ( Loc [ " STRING_MENU_CLOSE_INSTANCE " ] , nil , 1 , " white " , nil , Details.font_sizes . menus , Details.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 , closeButton_OnClick , self )
GameCooltip : AddLine ( Loc [ " STRING_MENU_CLOSE_INSTANCE_DESC " ] , nil , 2 , " white " , nil , Details.font_sizes . menus , Details.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 , Details.font_sizes . menus , Details.font_faces . menus )
GameCooltip : AddIcon ( [[Interface\PaperDollInfoFrame\UI-GearManager-LeaveItem-Transparent]] , 2 , 1 , 18 , 18 )
GameCooltip : SetWallpaper ( 1 , Details.tooltip . menus_bg_texture , Details.tooltip . menus_bg_coords , Details.tooltip . menus_bg_color , true )
GameCooltip : SetWallpaper ( 2 , Details.tooltip . menus_bg_texture , Details.tooltip . menus_bg_coords , Details.tooltip . menus_bg_color , true )
GameCooltip : SetBackdrop ( 1 , menus_backdrop , nil , menus_bordercolor )
GameCooltip : SetBackdrop ( 2 , menus_backdrop , nil , menus_bordercolor )
show_anti_overlap ( self.instance , self , " top " )
Details : SetMenuOwner ( self , self.instance )
GameCooltip : ShowCooltip ( )
end
local closeButton_OnLeave = function ( self )
OnLeaveMainWindow ( self.instance , self , 3 )
if ( self.instance . desaturated_menu ) then
self : GetNormalTexture ( ) : SetDesaturated ( true )
end
hide_anti_overlap ( self.instance . baseframe.anti_menu_overlap )
GameCooltip.buttonOver = false
self.instance . baseframe.cabecalho . button_mouse_over = false
if ( GameCooltip.active ) then
parameters_table [ 2 ] = 0
self : SetScript ( " OnUpdate " , on_leave_menu )
else
self : SetScript ( " OnUpdate " , nil )
end
end
------------------------------------------------------------------------------------------------------------------------------------------------------------------
--build upper menu bar
local reportButton_OnEnter = function ( self , motion , forced )
local instancia = self._instance or self.widget . _instance
local baseframe = instancia.baseframe
OnEnterMainWindow ( instancia , self )
if ( instancia.desaturated_menu ) then
self : GetNormalTexture ( ) : SetDesaturated ( false )
end
GameCooltip.buttonOver = true
baseframe.cabecalho . button_mouse_over = true
if ( Details.instances_menu_click_to_open and not forced ) then
return
end
GameCooltip : Reset ( )
GameCooltip : SetType ( " menu " )
GameCooltip : SetOption ( " ButtonsYMod " , - 6 )
GameCooltip : SetOption ( " HeighMod " , 6 )
GameCooltip : SetOption ( " YSpacingMod " , - 1 )
GameCooltip : SetOption ( " TextHeightMod " , 0 )
GameCooltip : SetOption ( " IgnoreButtonAutoHeight " , false )
Details : SetTooltipMinWidth ( )
Details : CheckLastReportsIntegrity ( )
local lastPeports = Details.latest_report_table
if ( # lastPeports > 0 ) then
local amountReports = # lastPeports
amountReports = math.min ( amountReports , 10 )
for index = amountReports , 1 , - 1 do
local report = lastPeports [ index ]
local instanceId , attribute , subattribute , amt , report_where , custom_name = unpack ( report )
local subAttributeName = Details : GetSubAttributeName ( attribute , subattribute , custom_name )
local artwork = Details.GetReportIconAndColor ( report_where )
GameCooltip : AddLine ( subAttributeName .. " (# " .. amt .. " ) " , nil , 1 , " white " , nil , Details.font_sizes . menus , Details.font_faces . menus )
if ( artwork ) then
GameCooltip : AddIcon ( artwork.icon , 1 , 1 , 14 , 14 , artwork.coords [ 1 ] , artwork.coords [ 2 ] , artwork.coords [ 3 ] , artwork.coords [ 4 ] , artwork.color , nil , false )
end
GameCooltip : AddMenu ( 1 , Details.ReportFromLatest , index )
end
GameCooltip : AddLine ( " $div " , nil , nil , - 4 )
end
GameCooltip : AddLine ( Loc [ " STRING_REPORT_TOOLTIP " ] , nil , 1 , " white " , nil , Details.font_sizes . menus , Details.font_faces . menus )
GameCooltip : AddIcon ( [[Interface\Addons\Details\Images\report_button]] , 1 , 1 , 12 , 19 )
GameCooltip : AddMenu ( 1 , Details.Reportar , instancia , nil , " INSTANCE " .. instancia.meu_id )
show_anti_overlap ( instancia , self , " top " )
Details : SetMenuOwner ( self , instancia )
GameCooltip : ShowCooltip ( )
end
local reportButton_OnLeave = function ( self , motion , forced , from_click )
local instancia = self._instance or self.widget . _instance
local baseframe = instancia.baseframe
OnLeaveMainWindow ( instancia , self )
hide_anti_overlap ( instancia.baseframe . anti_menu_overlap )
GameCooltip.buttonOver = false
baseframe.cabecalho . button_mouse_over = false
if ( instancia.desaturated_menu ) then
self : GetNormalTexture ( ) : SetDesaturated ( true )
end
if ( GameCooltip.active ) then
parameters_table [ 2 ] = from_click and 1 or 0
self : SetScript ( " OnUpdate " , on_leave_menu )
else
self : SetScript ( " OnUpdate " , nil )
end
end
local attributeButton_OnEnter = function ( self , motion , forced , from_click )
local instancia = self._instance or self.widget . _instance
local baseframe = instancia.baseframe
OnEnterMainWindow ( instancia , self )
if ( instancia.desaturated_menu ) then
self : GetNormalTexture ( ) : SetDesaturated ( false )
end
GameCooltip.buttonOver = true
baseframe.cabecalho . button_mouse_over = true
show_anti_overlap ( instancia , self , " top " )
if ( Details.instances_menu_click_to_open and not forced ) then
return
end
GameCooltip : Reset ( )
GameCooltip : SetType ( 3 )
GameCooltip : SetFixedParameter ( instancia )
if ( Details.solo and Details.solo == instancia.meu_id ) then
Details : MontaSoloOption ( instancia )
elseif ( instancia : IsRaidMode ( ) ) then
local hasRaidPlugins = Details : MontaRaidOption ( instancia )
if ( not hasRaidPlugins ) then
GameCooltip : SetType ( " tooltip " )
GameCooltip : SetOption ( " ButtonsYMod " , 0 )
GameCooltip : SetOption ( " TextHeightMod " , 0 )
GameCooltip : SetOption ( " IgnoreButtonAutoHeight " , false )
GameCooltip : AddLine ( " All raid plugins already \n in 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 , Details.tooltip . menus_bg_texture , Details.tooltip . menus_bg_coords , Details.tooltip . menus_bg_color , true )
end
else
Details : MontaAtributosOption ( instancia )
GameCooltip : SetOption ( " YSpacingMod " , - 1 )
GameCooltip : SetOption ( " YSpacingModSub " , - 2 )
end
GameCooltip : SetOption ( " TextSize " , Details.font_sizes . menus )
Details : SetMenuOwner ( self , instancia )
GameCooltip : ShowCooltip ( )
end
local attributeButton_OnLeave = function ( self , motion , forced , from_click )
local instancia = self._instance or self.widget . _instance
local baseframe = instancia.baseframe
OnLeaveMainWindow ( instancia , self )
hide_anti_overlap ( instancia.baseframe . anti_menu_overlap )
if ( instancia.desaturated_menu ) then
self : GetNormalTexture ( ) : SetDesaturated ( true )
end
GameCooltip.buttonOver = false
baseframe.cabecalho . button_mouse_over = false
if ( GameCooltip.active ) then
parameters_table [ 2 ] = 0
self : SetScript ( " OnUpdate " , on_leave_menu )
else
self : SetScript ( " OnUpdate " , nil )
end
end
local segmentButton_OnEnter = function ( self , motion , forced , fromClick )
local instance = self._instance or self.widget . _instance
local baseframe = instance.baseframe
OnEnterMainWindow ( instance , self )
if ( instance.desaturated_menu ) then
self : GetNormalTexture ( ) : SetDesaturated ( false )
end
GameCooltip.buttonOver = true
baseframe.cabecalho . button_mouse_over = true
if ( Details.instances_menu_click_to_open and not forced ) then
return
end
local timeToOpen = 0
if ( _G.GameCooltip . active ) then
timeToOpen = 0.15
end
parameters_table [ 1 ] = instance
parameters_table [ 2 ] = fromClick and 1 or timeToOpen
self : SetScript ( " OnUpdate " , buildSegmentTooltip )
end
local segmentButton_OnLeave = function ( self , motion , forced , fromClick )
local instance = self._instance or self.widget . _instance
local baseframe = instance.baseframe
OnLeaveMainWindow ( instance , self )
hide_anti_overlap ( instance.baseframe . anti_menu_overlap )
if ( instance.desaturated_menu ) then
self : GetNormalTexture ( ) : SetDesaturated ( true )
end
GameCooltip.buttonOver = false
baseframe.cabecalho . button_mouse_over = false
if ( GameCooltip.active ) then
parameters_table [ 2 ] = 0
self : SetScript ( " OnUpdate " , on_leave_menu )
else
self : SetScript ( " OnUpdate " , nil )
end
end
local modeSelector_OnEnter = function ( self , motion , forced , from_click )
local instancia = self._instance or self.widget . _instance
local baseframe = instancia.baseframe
OnEnterMainWindow ( instancia , self )
if ( instancia.desaturated_menu ) then
self : GetNormalTexture ( ) : SetDesaturated ( false )
end
GameCooltip.buttonOver = true
baseframe.cabecalho . button_mouse_over = true
if ( Details.instances_menu_click_to_open and not forced ) then
return
end
local elapsedTime = 0
if ( _G.GameCooltip . active ) then
elapsedTime = 0.15
end
local checked
if ( instancia.modo == 1 ) then
checked = 4
elseif ( instancia.modo == 2 ) then
checked = 1
elseif ( instancia.modo == 3 ) then
checked = 2
elseif ( instancia.modo == 4 ) then
checked = 3
end
parameters_table [ 1 ] = instancia
parameters_table [ 2 ] = from_click and 1 or elapsedTime
parameters_table [ 3 ] = checked
self : SetScript ( " OnUpdate " , build_mode_list )
end
local modeSelector_OnLeave = function ( self )
local instancia = self._instance or self.widget . _instance
local baseframe = instancia.baseframe
OnLeaveMainWindow ( instancia , self )
hide_anti_overlap ( instancia.baseframe . anti_menu_overlap )
if ( instancia.desaturated_menu ) then
self : GetNormalTexture ( ) : SetDesaturated ( true )
end
GameCooltip.buttonOver = false
baseframe.cabecalho . button_mouse_over = false
if ( GameCooltip.active ) then
parameters_table [ 2 ] = 0
self : SetScript ( " OnUpdate " , on_leave_menu )
else
self : SetScript ( " OnUpdate " , nil )
end
end
local changeSegmentOnClick = function ( instancia , buttontype )
if ( buttontype == " LeftButton " ) then
--previous segment as the pointer move upwards getting older segments
local previousSegment = instancia.segmento + 1
if ( previousSegment > segmentsUsed ) then
previousSegment = - 1
elseif ( previousSegment > Details.segments_amount ) then
previousSegment = - 1
end
--cooltip menu update
local maxSegments = segmentsFilled + 2
local targetSegment = previousSegment + 1
local segmentIndex = math.abs ( targetSegment - maxSegments )
GameCooltip : Select ( 1 , segmentIndex )
--change the segment
instancia : TrocaTabela ( previousSegment ) --todo: use new api
segmentButton_OnEnter ( instancia.baseframe . cabecalho.segmento . widget , _ , true , true )
elseif ( buttontype == " RightButton " ) then
--next segment as the pointer move downwards getting newer segments
local nextSegment = instancia.segmento - 1
if ( nextSegment < - 1 ) then
nextSegment = segmentsUsed
end
--cooltip menu update
local maxSegments = segmentsFilled + 2
local targetSegment = nextSegment + 1
local segmentIndex = math.abs ( targetSegment - maxSegments )
GameCooltip : Select ( 1 , segmentIndex )
instancia : TrocaTabela ( nextSegment )
segmentButton_OnEnter ( instancia.baseframe . cabecalho.segmento . widget , _ , true , true )
elseif ( buttontype == " MiddleButton " ) then
local segmento_goal = 0
local total_shown = segmentsFilled + 2
local goal = segmento_goal + 1
local select_ = math.abs ( goal - total_shown )
GameCooltip : Select ( 1 , select_ )
instancia : TrocaTabela ( segmento_goal )
segmentButton_OnEnter ( instancia.baseframe . cabecalho.segmento . widget , _ , true , true )
end
end
function gump : CriaCabecalho ( baseframe , instancia )
baseframe.cabecalho = { }
--FECHAR INSTANCIA ----------------------------------------------------------------------------------------------------------------------------------------------------
baseframe.cabecalho . fechar = CreateFrame ( " button " , " DetailsCloseInstanceButton " .. instancia.meu_id , baseframe ) --, "UIPanelCloseButton"
baseframe.cabecalho . fechar : SetWidth ( 18 )
baseframe.cabecalho . fechar : SetHeight ( 18 )
baseframe.cabecalho . fechar : SetFrameLevel ( 5 ) --altura mais alta que os demais frames
baseframe.cabecalho . fechar : SetPoint ( " bottomright " , baseframe , " topright " , 5 , - 6 ) --seta o ponto dele fixando no base frame
baseframe.cabecalho . fechar : SetNormalTexture ( [[Interface\AddOns\Details\images\toolbar_icons]] )
baseframe.cabecalho . fechar : GetNormalTexture ( ) : SetTexCoord ( 160 / 256 , 192 / 256 , 0 , 1 )
baseframe.cabecalho . fechar : SetHighlightTexture ( [[Interface\AddOns\Details\images\toolbar_icons]] )
baseframe.cabecalho . fechar : GetHighlightTexture ( ) : SetTexCoord ( 160 / 256 , 192 / 256 , 0 , 1 )
baseframe.cabecalho . fechar : SetPushedTexture ( [[Interface\AddOns\Details\images\toolbar_icons]] )
baseframe.cabecalho . fechar : GetPushedTexture ( ) : SetTexCoord ( 160 / 256 , 192 / 256 , 0 , 1 )
--baseframe.cabecalho.fechar:SetNormalTexture([[Interface\Buttons\UI-Panel-MinimizeButton-Up]])
--baseframe.cabecalho.fechar:SetHighlightTexture([[Interface\Buttons\UI-Panel-MinimizeButton-Highlight]])
--baseframe.cabecalho.fechar:SetPushedTexture([[Interface\Buttons\UI-Panel-MinimizeButton-Down]])
baseframe.cabecalho . fechar.instancia = instancia
baseframe.cabecalho . fechar.instance = instancia
baseframe.cabecalho . fechar : SetScript ( " OnEnter " , closeButton_OnEnter )
baseframe.cabecalho . fechar : SetScript ( " OnLeave " , closeButton_OnLeave )
baseframe.cabecalho . fechar : SetScript ( " OnClick " , closeButton_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 = Details.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 }
-------------------------------------------------------------------------------------------------------------------------------------------------
--title bar buttons
--mode selection
local modeSelector_OnClick = function ( )
if ( Details.instances_menu_click_to_open ) then
if ( instancia.LastMenuOpened == " mode " and GameCooltipFrame1 : IsShown ( ) ) then
GameCooltip : ShowMe ( false )
instancia.LastMenuOpened = nil
else
modeSelector_OnEnter ( instancia.baseframe . cabecalho.modo_selecao . widget , _ , true , true )
instancia.LastMenuOpened = " mode "
end
else
Details : OpenOptionsWindow ( instancia )
end
end
baseframe.cabecalho . modo_selecao = gump : NewButton ( baseframe , nil , " DetailsModeButton " .. instancia.meu_id , nil , 16 , 16 , modeSelector_OnClick , nil , nil , [[Interface\AddOns\Details\images\modo_icone]] )
baseframe.cabecalho . modo_selecao : SetPoint ( " bottomleft " , baseframe.cabecalho . ball , " bottomright " , instancia.menu_anchor [ 1 ] , instancia.menu_anchor [ 2 ] )
baseframe.cabecalho . modo_selecao : SetFrameLevel ( baseframe : GetFrameLevel ( ) + 5 )
baseframe.cabecalho . modo_selecao.widget . _instance = instancia
baseframe.cabecalho . modo_selecao : SetScript ( " OnEnter " , modeSelector_OnEnter )
baseframe.cabecalho . modo_selecao : SetScript ( " OnLeave " , modeSelector_OnLeave )
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 )
--segment selection
local segmentSelector_OnClick = function ( self , button , param1 )
if ( Details.instances_menu_click_to_open ) then
if ( instancia.LastMenuOpened == " segments " and GameCooltipFrame1 : IsShown ( ) ) then
GameCooltip : ShowMe ( false )
instancia.LastMenuOpened = nil
else
segmentButton_OnEnter ( instancia.baseframe . cabecalho.segmento . widget , _ , true , true )
instancia.LastMenuOpened = " segments "
end
else
changeSegmentOnClick ( instancia , button )
end
end
baseframe.cabecalho . segmento = gump : NewButton ( baseframe , nil , " DetailsSegmentButton " .. instancia.meu_id , nil , 16 , 16 , segmentSelector_OnClick , nil , nil , [[Interface\AddOns\Details\images\segmentos_icone]] )
baseframe.cabecalho . segmento : SetFrameLevel ( baseframe.UPFrame : GetFrameLevel ( ) + 1 )
baseframe.cabecalho . segmento.widget . _instance = instancia
baseframe.cabecalho . segmento : SetPoint ( " left " , baseframe.cabecalho . modo_selecao , " right " , 0 , 0 )
--ativa bot�o do meio e direito
baseframe.cabecalho . segmento : SetClickFunction ( segmentSelector_OnClick , nil , nil , " rightclick " )
baseframe.cabecalho . segmento : SetScript ( " OnEnter " , segmentButton_OnEnter )
baseframe.cabecalho . segmento : SetScript ( " OnLeave " , segmentButton_OnLeave )
local b = baseframe.cabecalho . segmento.widget
b : SetNormalTexture ( [[Interface\AddOns\Details\images\toolbar_icons]] )
b : GetNormalTexture ( ) : SetTexCoord ( 32 / 256 , 64 / 256 , 0 , 1 )
b : SetHighlightTexture ( [[Interface\AddOns\Details\images\toolbar_icons]] )
b : GetHighlightTexture ( ) : SetTexCoord ( 32 / 256 , 64 / 256 , 0 , 1 )
b : SetPushedTexture ( [[Interface\AddOns\Details\images\toolbar_icons]] )
b : GetPushedTexture ( ) : SetTexCoord ( 32 / 256 , 64 / 256 , 0 , 1 )
--SELECIONAR O ATRIBUTO ----------------------------------------------------------------------------------------------------------------------------------------------------
local atributo_button_click = function ( )
if ( Details.instances_menu_click_to_open ) then
if ( instancia.LastMenuOpened == " attributes " and GameCooltipFrame1 : IsShown ( ) ) then
GameCooltip : ShowMe ( false )
instancia.LastMenuOpened = nil
else
attributeButton_OnEnter ( instancia.baseframe . cabecalho.atributo . widget , _ , true , true )
instancia.LastMenuOpened = " attributes "
end
end
end
baseframe.cabecalho . atributo = gump : NewButton ( baseframe , nil , " DetailsAttributeButton " .. instancia.meu_id , nil , 16 , 16 , atributo_button_click )
baseframe.cabecalho . atributo : SetFrameLevel ( baseframe.UPFrame : GetFrameLevel ( ) + 1 )
baseframe.cabecalho . atributo.widget . _instance = instancia
baseframe.cabecalho . atributo : SetPoint ( " left " , baseframe.cabecalho . segmento.widget , " right " , 0 , 0 )
baseframe.cabecalho . atributo : SetScript ( " OnEnter " , attributeButton_OnEnter )
baseframe.cabecalho . atributo : SetScript ( " OnLeave " , attributeButton_OnLeave )
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 )
--report button ~report
local reportButtton_OnClick = function ( )
instancia : Reportar ( " INSTANCE " .. instancia.meu_id )
GameCooltip2 : Hide ( )
end
baseframe.cabecalho . report = gump : NewButton ( baseframe , nil , " DetailsReportButton " .. instancia.meu_id , nil , 8 , 16 , reportButtton_OnClick )
baseframe.cabecalho . report : SetFrameLevel ( baseframe.UPFrame : GetFrameLevel ( ) + 1 )
baseframe.cabecalho . report.widget . _instance = instancia
baseframe.cabecalho . report : SetPoint ( " left " , baseframe.cabecalho . atributo , " right " , - 6 , 0 )
baseframe.cabecalho . report : SetScript ( " OnEnter " , reportButton_OnEnter )
baseframe.cabecalho . report : SetScript ( " OnLeave " , reportButton_OnLeave )
local reportButton = baseframe.cabecalho . report.widget
reportButton : SetNormalTexture ( [[Interface\AddOns\Details\images\toolbar_icons]] )
reportButton : GetNormalTexture ( ) : SetTexCoord ( 96 / 256 , 128 / 256 , 0 , 1 )
reportButton : SetHighlightTexture ( [[Interface\AddOns\Details\images\toolbar_icons]] )
reportButton : GetHighlightTexture ( ) : SetTexCoord ( 96 / 256 , 128 / 256 , 0 , 1 )
reportButton : SetPushedTexture ( [[Interface\AddOns\Details\images\toolbar_icons]] )
reportButton : GetPushedTexture ( ) : SetTexCoord ( 96 / 256 , 128 / 256 , 0 , 1 )
--reset button ~delete ~erase ~reset
local resetButton_OnClick = function ( )
if ( Details.instances_menu_click_to_open ) then
if ( instancia.LastMenuOpened == " reset " and GameCooltipFrame1 : IsShown ( ) ) then
GameCooltip : ShowMe ( false )
instancia.LastMenuOpened = nil
else
resetButton_OnEnter ( instancia.baseframe . cabecalho.reset , _ , true , true )
instancia.LastMenuOpened = " reset "
end
else
if ( not Details.disable_reset_button ) then
Details.tabela_historico : resetar ( )
else
Details : Msg ( Loc [ " STRING_OPTIONS_DISABLED_RESET " ] )
end
end
end
baseframe.cabecalho . reset = CreateFrame ( " button " , " DetailsClearSegmentsButton " .. instancia.meu_id , baseframe )
baseframe.cabecalho . reset : SetFrameLevel ( baseframe.UPFrame : GetFrameLevel ( ) + 1 )
baseframe.cabecalho . reset : SetSize ( 10 , 16 )
baseframe.cabecalho . reset : SetPoint ( " right " , baseframe.cabecalho . novo , " left " )
baseframe.cabecalho . reset.instance = instancia
baseframe.cabecalho . reset._instance = instancia
baseframe.cabecalho . reset : SetScript ( " OnClick " , resetButton_OnClick )
baseframe.cabecalho . reset : SetScript ( " OnEnter " , resetButton_OnEnter )
baseframe.cabecalho . reset : SetScript ( " OnLeave " , resetButton_OnLeave )
local resetButton = baseframe.cabecalho . reset
resetButton : SetNormalTexture ( [[Interface\AddOns\Details\images\toolbar_icons]] )
resetButton : GetNormalTexture ( ) : SetTexCoord ( 128 / 256 , 160 / 256 , 0 , 1 )
resetButton : SetHighlightTexture ( [[Interface\AddOns\Details\images\toolbar_icons]] )
resetButton : GetHighlightTexture ( ) : SetTexCoord ( 128 / 256 , 160 / 256 , 0 , 1 )
resetButton : SetPushedTexture ( [[Interface\AddOns\Details\images\toolbar_icons]] )
resetButton : GetPushedTexture ( ) : SetTexCoord ( 128 / 256 , 160 / 256 , 0 , 1 )
end