-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
local _detalhes = _G.Details
local Loc = LibStub ( " AceLocale-3.0 " ) : GetLocale ( " Details " )
local SharedMedia = LibStub : GetLibrary ( " LibSharedMedia-3.0 " )
local _
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--local pointers
-- none
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--details api functions
--create a button which will be displayed on tooltip
function _detalhes . ToolBar : NewPluginToolbarButton ( func , icon , pluginname , tooltip , w , h , framename , menu_function )
--random name if nameless
if ( not framename ) then
framename = " DetailsToolbarButton " .. math.random ( 1 , 100000 )
end
--create button from template
local button = CreateFrame ( " button " , framename , _detalhes.listener , " DetailsToolbarButton " )
--sizes
if ( w ) then
button : SetWidth ( w )
end
if ( h ) then
button : SetHeight ( h )
end
button.x = 0
button.y = 0
--tooltip and function on click
button.tooltip = tooltip
button.menu = menu_function
button : SetScript ( " OnClick " , func )
--textures
button : SetNormalTexture ( icon )
button : SetPushedTexture ( icon )
button : SetDisabledTexture ( icon )
button : SetHighlightTexture ( icon , " ADD " )
button.__icon = icon
button.__name = pluginname
--blizzard built-in animation
--local FourCornerAnimeFrame = CreateFrame("frame", framename.."Blink", button) --, "IconIntroAnimTemplate" --stop using 'IconIntroAnimTemplate' as older versions of the game doesn't have it
--FourCornerAnimeFrame:SetPoint("center", button)
--FourCornerAnimeFrame:SetWidth(w or 14)
--FourCornerAnimeFrame:SetHeight(w or 14)
--FourCornerAnimeFrame.glow:SetScript("OnFinished", nil)
--button.blink = FourCornerAnimeFrame
_detalhes.ToolBar . AllButtons [ # _detalhes.ToolBar . AllButtons + 1 ] = button
return button
end
--show your plugin icon on tooltip
function _detalhes : ShowToolbarIcon ( Button , Effect )
local LastIcon
--get the lower number instance
local lower_instance = _detalhes : GetLowerInstanceNumber ( )
if ( not lower_instance ) then
return
end
local instance = _detalhes : GetInstance ( lower_instance )
if ( # _detalhes.ToolBar . Shown > 0 ) then
--already shown
if ( _detalhes : tableIN ( _detalhes.ToolBar . Shown , Button ) ) then
return
end
LastIcon = _detalhes.ToolBar . Shown [ # _detalhes.ToolBar . Shown ]
else
LastIcon = instance.baseframe . cabecalho.report
end
_detalhes.ToolBar . Shown [ # _detalhes.ToolBar . Shown + 1 ] = Button
Button : SetPoint ( " left " , LastIcon.widget or LastIcon , " right " , Button.x , Button.y )
Button : Show ( )
if ( instance.auto_hide_menu . left and not instance.is_interacting ) then
instance : ToolbarMenuButtons ( )
Button : SetAlpha ( 0 )
return
end
if ( Effect ) then
if ( type ( Effect ) == " string " ) then
if ( Effect == " blink " ) then
--Button.blink.glow:Play() --.blink and .glow doesn't exists anymore due to removal of the template 'IconIntroAnimTemplate'
elseif ( Effect == " star " ) then
--Button.StarAnim:Play()
end
elseif ( Effect ) then
--Button.blink.glow:Play()
end
end
_detalhes.ToolBar : ReorganizeIcons ( true )
return true
end
--hide your plugin icon from toolbar
function _detalhes : HideToolbarIcon ( Button )
local index = _detalhes : tableIN ( _detalhes.ToolBar . Shown , Button )
if ( not index ) then
--current not shown
return
end
Button : Hide ( )
table.remove ( _detalhes.ToolBar . Shown , index )
--reorganize icons
_detalhes.ToolBar : ReorganizeIcons ( true )
end
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--internal functions
do
local PluginDescPanel = CreateFrame ( " frame " , " DetailsPluginDescPanel " , UIParent )
PluginDescPanel : SetFrameStrata ( " tooltip " )
PluginDescPanel : Hide ( )
PluginDescPanel : SetWidth ( 205 )
PluginDescPanel.BackdropTable = { }
local background = PluginDescPanel : CreateTexture ( nil , " artwork " )
background : SetPoint ( " topleft " , 0 , 0 )
background : SetPoint ( " bottomright " , 0 , 0 )
PluginDescPanel.background = background
local icon , title , desc = PluginDescPanel : CreateTexture ( nil , " overlay " ) , PluginDescPanel : CreateFontString ( nil , " overlay " , " GameFontNormal " ) , PluginDescPanel : CreateFontString ( nil , " overlay " , " GameFontNormal " )
icon : SetPoint ( " topleft " , 10 , - 10 )
icon : SetSize ( 16 , 16 )
title : SetPoint ( " left " , icon , " right " , 2 , 0 )
desc : SetPoint ( " topleft " , 13 , - 30 )
desc : SetWidth ( 180 )
desc : SetJustifyH ( " left " )
_detalhes : SetFontColor ( desc , " white " )
PluginDescPanel.icon = icon
PluginDescPanel.title = title
PluginDescPanel.desc = desc
end
--[[global]] function DetailsToolbarButtonOnEnter ( button )
local lower_instance = _detalhes : GetLowerInstanceNumber ( )
if ( lower_instance ) then
_detalhes.OnEnterMainWindow ( _detalhes : GetInstance ( lower_instance ) , button , 3 )
end
if ( button.tooltip ) then
if ( button.menu ) then
_detalhes.gump : QuickDispatch ( button.menu )
local next_check = 0.8
--check if the mouse is still interacting with the menu or with the button
button : SetScript ( " OnUpdate " , function ( self , elapsed )
next_check = next_check - elapsed
if ( next_check < 0 ) then
if ( not GameCooltipFrame1 : IsMouseOver ( ) and not button : IsMouseOver ( ) ) then
GameCooltip2 : Hide ( )
button : SetScript ( " OnUpdate " , nil )
return
end
next_check = 0.8
end
end )
--disable the hider menu if the cooltip is required in another place
hooksecurefunc ( GameCooltip2 , " ShowCooltip " , function ( )
button : SetScript ( " OnUpdate " , nil )
end )
return
end
GameCooltip : Hide ( )
local plugin_object = _detalhes : GetPlugin ( button.__name )
local f = DetailsPluginDescPanel
f.icon : SetTexture ( button.__icon )
f.title : SetText ( button.__name )
f.desc : SetText ( plugin_object : GetPluginDescription ( ) )
_detalhes : SetFontSize ( f.desc , _detalhes.font_sizes . menus )
_detalhes : SetFontFace ( f.desc , _detalhes.font_faces . menus )
--f.background:SetTexture(_detalhes.tooltip.menus_bg_texture)
f.background : SetTexCoord ( unpack ( _detalhes.tooltip . menus_bg_coords ) )
f.background : SetVertexColor ( unpack ( _detalhes.tooltip . menus_bg_color ) )
--f.background:SetDesaturated(true)
f.BackdropTable . bgFile = _detalhes.tooltip_backdrop . bgFile
f.BackdropTable . edgeFile = [[Interface\Buttons\WHITE8X8]] --_detalhes.tooltip_backdrop.edgeFile
f.BackdropTable . tile = _detalhes.tooltip_backdrop . tile
f.BackdropTable . edgeSize = 1 --_detalhes.tooltip_backdrop.edgeSize
f.BackdropTable . tileSize = _detalhes.tooltip_backdrop . tileSize
f : SetBackdrop ( f.BackdropTable )
local r , g , b , a = _detalhes.gump : ParseColors ( _detalhes.tooltip_border_color )
f : SetBackdropBorderColor ( r , g , b , a )
f : SetHeight ( 40 + f.desc : GetStringHeight ( ) )
f : SetPoint ( " bottom " , button , " top " , 0 , 10 )
f : Show ( )
--SharedMedia:Fetch ("font", "Friz Quadrata TT")
end
end
--[[global]] function DetailsToolbarButtonOnLeave ( button )
local lower_instance = _detalhes : GetLowerInstanceNumber ( )
if ( lower_instance ) then
_detalhes.OnLeaveMainWindow ( _detalhes : GetInstance ( lower_instance ) , button , 3 )
end
if ( button.tooltip ) then
DetailsPluginDescPanel : Hide ( )
end
end
_detalhes : RegisterEvent ( _detalhes.ToolBar , " DETAILS_INSTANCE_OPEN " , " OnInstanceOpen " )
_detalhes : RegisterEvent ( _detalhes.ToolBar , " DETAILS_INSTANCE_CLOSE " , " OnInstanceClose " )
_detalhes.ToolBar . Enabled = true --must have this member or wont receive the event
_detalhes.ToolBar . __enabled = true
function _detalhes . ToolBar : OnInstanceOpen ( )
_detalhes.ToolBar : ReorganizeIcons ( true )
end
function _detalhes . ToolBar : OnInstanceClose ( )
_detalhes.ToolBar : ReorganizeIcons ( true )
end
function _detalhes . ToolBar : ReorganizeIcons ( just_refresh )
--get the lower number instance
local lower_instance = _detalhes : GetLowerInstanceNumber ( )
if ( not lower_instance ) then
for _ , ThisButton in ipairs ( _detalhes.ToolBar . Shown ) do
ThisButton : Hide ( )
end
return
end
local instance = _detalhes : GetInstance ( lower_instance )
if ( not just_refresh ) then
for _ , instancia in pairs ( _detalhes.tabela_instancias ) do
if ( instancia.baseframe and instancia : IsAtiva ( ) ) then
instancia : ReajustaGump ( )
end
end
instance : ChangeSkin ( )
else
instance : ToolbarMenuButtons ( )
instance : SetAutoHideMenu ( nil , nil , true )
end
return true
end