You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
280 lines
8.7 KiB
280 lines
8.7 KiB
|
5 years ago
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
local _detalhes = _G._detalhes
|
||
|
|
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")
|
||
|
|
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()
|
||
|
|
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
|