vanilla-wow-addons – Rev 1
?pathlinks?
--[[
-- Name: TinyTip
-- Author: Thrae of Maelstrom (aka "Matthew Carras")
-- Release Date: 6-25-06
--
-- These functions include more extragant features,
-- such as the PvP Rank Icon or buffs and debuffs, or
-- and extra tooltip. This is LoadedOnDemand by TinyTip.
--]]
local _G = getfenv(0)
local GameTooltip, UIParent,GTStatusBar = _G.GameTooltip, _G.UIParent, _G.GameTooltipStatusBar
local fClearAllPoints, fSetPoint, fHide,fShow, fGetScript, fSetScript = UIParent.ClearAllPoints, UIParent.SetPoint, UIParent.Hide, UIParent.Show, UIParent.GetScript, UIParent.SetScript
local db,EventFrame,ExtrasFrame
local tooltip = GameTooltip
local gtAddLine, gtNumLines = GameTooltip.AddLine, GameTooltip.NumLines
local fsSetText, fsGetText, fsShow, fsHide, fsIsShown, fsGetTextColor = _G.GameTooltipTextLeft1.SetText, _G.GameTooltipTextLeft1.GetText, _G.GameTooltipTextLeft1.Show, _G.GameTooltipTextLeft1.Hide, _G.GameTooltipTextLeft1.IsShown, _G.GameTooltipTextLeft1.GetTextColor
local strformat= string.format
local acehook
local tiplib = _G.AceLibrary:GetInstance("TipLib-1.0")
local PvPTexture, ExtraTooltip, ManaBar
local i,tmp,tmp2,tmp3
_G.TinyTipExtrasExists = true
local SetUnit_IsHooked, FadeOut_IsHooked
--[[
-- This is the AnchorTooltipTable table. As it requires you know the frame name
-- of the tooltip you wish to anchor, I am going to make it static. Add entries
-- into the table as so:
["TooltipName"] = {
["Anchor"] = "BOTTOMRIGHT",
["OffX"] = -50,
["OffY"] = 13
}
--
--]]
--[[
local AnchorTooltipTable = {
["TooltipName"] = {
["Anchor"] = "BOTTOMRIGHT",
["OffX"] = -50,
["OffY"] = 13
}
}
--]]
local Original_GameTooltip_OnTooltipCleared, OnTooltipCleared_IsHooked
local function OnTooltipCleared(this,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10)
if Original_GameTooltip_OnTooltipCleared then
Original_GameTooltip_OnTooltipCleared(this,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10)
end
_G.TinyTip_OnTooltipCleared(this,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10)
if ExtraTooltip then
ExtraTooltip:Hide()
end
if ExtrasFrame then
fHide(ExtrasFrame)
if TinyTipIcons_ResetTextureTable then TinyTipIcons_ResetTextureTable() end
end
if ManaBar then
fHide(ManaBar)
end
end
local function ManaBar_Init()
if GameTooltip.unit then
tmp = _G.UnitManaMax( GameTooltip.unit )
ManaBar:SetMinMaxValues(0, tmp or 100)
-- If disconnected
if not _G.UnitIsConnected(GameTooltip.unit) then
ManaBar:SetValue( tmp or 100 )
ManaBar:SetStatusBarColor(0.5, 0.5, 0.5)
else
ManaBar:SetValue( _G.UnitMana( GameTooltip.unit ) or 100)
tmp = _G.ManaBarColor[ _G.UnitPowerType( GameTooltip.unit ) ]
ManaBar:SetStatusBarColor( tmp.r, tmp.g, tmp.b )
end
end
end
local function ManaBar_OnEvent()
if _G.event == "UNIT_MANA" or _G.event == "UNIT_ENERGY" or _G.event == "UNIT_RAGE" then
if _G.arg1 and _G.arg1 == GameTooltip.unit then
ManaBar_Init()
end
elseif _G.event == "UNIT_DISPLAYPOWER" then
if _G.arg1 and _G.arg1 == GameTooltip.unit and _G.UnitPowerType( GameTooltip.unit ) and _G.UnitPowerType( GameTooltip.unit ) > 0 then
tmp = _G.ManaBarColor[ _G.UnitPowerType( GameTooltip.unit ) ]
ManaBar:SetStatusBarColor( tmp.r, tmp.g, tmp.b )
end
end
end
local function ATTOnUpdate()
fClearAllPoints(this)
fSetPoint(this, this.TTAnchor or "BOTTOMRIGHT", UIParent, this.TTAnchor or "BOTTOMRIGHT", this.TTOffX or 0, this.TTOffY or 0)
end
function TinyTipExtras_CopyGameTooltip()
tmp = gtNumLines(GameTooltip)
for i = 1, tmp do
tmp2 = _G[ strformat("GameTooltipTextLeft%d", i) ]
tmp3 = _G[ strformat("GameTooltipTextRight%d", i) ]
if tmp2 and tmp3 and fsIsShown(tmp2) and fsIsShown(tmp3) and fsGetText(tmp2) and fsGetText(tmp3) then
ExtraTooltip:AddLine( fsGetText(tmp2), fsGetTextColor(tmp2) or unpack{1,1,1}, nil, fsGetText(tmp3), fsGetTextColor(tmp3) )
elseif tmp2 and fsGetText(tmp2) then
ExtraTooltip:AddLine( fsGetText(tmp2), fsGetTextColor(tmp2) or unpack{1,1,1} )
end
end
end
function TinyTipExtras_ATTUnhook(k)
if db["AnchorTooltipTable"] and db["AnchorTooltipTable"][ k ] then
if acehook:IsHooked( AnchorTooltipTable[ k ], "OnUpdate") then
acehook:Unhook( AnchorTooltipTable[ k ], "OnUpdate")
end
end
end
function TinyTipExtras_Init(_db,_EventFrame,_acehook)
if _db then db = _db end
if _EventFrame then EventFrame = _EventFrame end
if _acehook then acehook = _acehook end
if acehook and not acehook:IsHooked(GameTooltip, "OnTooltipCleared") then -- most sure-fire way to hide something
acehook:HookScript(GameTooltip, "OnTooltipCleared", OnTooltipCleared)
Original_GameTooltip_OnTooltipCleared = acehook.hooks[GameTooltip]["OnTooltipCleared"].orig
end
if acehook and AnchorTooltipTable then
local k,v
for k,v in AnchorTooltipTable do
if _G[ k ] then
if not acehook:IsHooked( _G[ k ], "OnUpdate") then
if v then
if v.Anchor then
_G[ k ].TTAnchor = v.Anchor
end
if v.OffX then
_G[ k ].TTOffX = v.OffX
end
if v.OffY then
_G[ k ].TTOffY = v.OffY
end
end
acehook:HookScript( _G[ k ], "OnUpdate", ATTOnUpdate)
end
end
end
end
if db["ManaBar"] then
if not ManaBar then
ManaBar = _G.CreateFrame("StatusBar", "TinyTipExtras_ManaBar", GameTooltip)
ManaBar:SetStatusBarTexture("Interface\\TargetingFrame\\UI-TargetingFrame-BarFill")
ManaBar:SetHeight(8)
ManaBar:SetPoint("TOPLEFT", GTStatusBar, "BOTTOMLEFT", 0, 0)
ManaBar:SetPoint("TOPRIGHT", GTStatusBar, "BOTTOMRIGHT", 0, 0)
ManaBar:SetScript("OnShow", ManaBar_Init)
ManaBar:SetScript("OnEvent", ManaBar_OnEvent)
ManaBar:RegisterEvent("UNIT_DISPLAYPOWER")
ManaBar:RegisterEvent("UNIT_MANA")
ManaBar:RegisterEvent("UNIT_ENERGY")
ManaBar:RegisterEvent("UNIT_RAGE")
end
end
if db["ExtraTooltip"] then
if not ExtraTooltip then
ExtraTooltip = tiplib:CreatePsuedoTooltip("TinyTipExtras_Tooltip", UIParent)
ExtraTooltip:SetScale( db["Scale"] or 1.0 )
end
if db["Compact"] then _G.TinyTip_UnCompactGameTooltip() end
GTStatusBar:SetPoint("TOPLEFT", ExtraTooltip, "BOTTOMLEFT", 2, -1)
GTStatusBar:SetPoint("TOPRIGHT", ExtraTooltip, "BOTTOMRIGHT", -2, -1)
GTStatusBar:SetParent(ExtraTooltip)
if ManaBar then ManaBar:SetParent(ExtraTooltip) end
if ExtrasFrame then ExtrasFrame:SetParent(ExtraTooltip) end
if _G.TinyTipAnchor_ResetReferences then
_G.TinyTipAnchor_ResetReferences(ExtraTooltip.ClearAllPoints, ExtraTooltip.SetPoint, ExtraTooltip.SetOwner)
end
if db["ExtraTooltip"] == 1 then
_G.TinyTip_ResetReferences(ExtraTooltip.AddLine, ExtraTooltip.AddDoubleLine, ExtraTooltip, ExtraTooltip)
gtAddLine = ExtraTooltip.AddLine
tooltip = ExtraTooltip
if _G.TinyTipTargets_ResetReferences then
_G.TinyTipTargets_ResetReferences(ExtraTooltip.AddLine, ExtraTooltip.AddDoubleLines, ExtraTooltip)
end
else
_G.TinyTip_ResetReferences(GameTooltip.AddLine, GameTooltip.AddDoubleLine, ExtraTooltip, GameTooltip)
gtAddLine = GameTooltip.AddLine
tooltip = GameTooltip
if _G.TinyTipTargets_ResetReferences then
_G.TinyTipTargets_ResetReferences(GameTooltip.AddLine, GameTooltip.AddDoubleLines, GameTooltip)
end
end
else
GameTooltip:SetScale( db["Scale"] or 1.0 )
GTStatusBar:SetPoint("TOPLEFT", GameTooltip, "BOTTOMLEFT", 2, -1)
GTStatusBar:SetPoint("TOPRIGHT", GameTooltip, "BOTTOMRIGHT", -2, -1)
GTStatusBar:SetParent(GameTooltip)
if ManaBar then ManaBar:SetParent(GameTooltip) end
if ExtrasFrame then ExtrasFrame:SetParent(GameTooltip) end
_G.TinyTip_ResetReferences(GameTooltip.AddLine, GameTooltip.AddDoubleLine, GameTooltip, GameTooltip)
gtAddLine = GameTooltip.AddLine
tooltip = GameTooltip
if _G.TinyTipAnchor_ResetReferences then
_G.TinyTipAnchor_ResetReferences(GameTooltip.ClearAllPoints, GameTooltip.SetPoint, GameTooltip.SetOwner)
end
if _G.TinyTipTargets_ResetReferences then
_G.TinyTipTargets_ResetReferences(GameTooltip.AddLine, GameTooltip.AddDoubleLines, GameTooltip)
end
end
if db["PvPIcon"] or db["Buffs"] or db["Debuffs"] or db["RTIcon"] then
if not ExtrasFrame then
ExtrasFrame = _G.CreateFrame("Frame", "TinyTipExtras_Frame", GameTooltip)
end
if TinyTipIcons_Init then TinyTipIcons_Init(db, EventFrame, ExtrasFrame, gtAddLine, tooltip) end
end
end